You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

408 lines
23 KiB

/*
* Copyright (C) 2009,2010,2014 by Jonathan Naylor G4KLX
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "DVToolWriterPreferences.h"
#include "DVToolWriterFrame.h"
#include "DVTOOLFileWriter.h"
#include "DVToolWriterApp.h"
#include "AMBEFileWriter.h"
#include "DStarDefines.h"
#include "MessageEvent.h"
#include "HeaderEvent.h"
#include "ErrorEvent.h"
#include "Version.h"
#include <wx/gbsizer.h>
#include <wx/aboutdlg.h>
unsigned char startImage[] = {
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
};
unsigned char startAlpha[] = {
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U, 0x00U,
0x00U, 0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U, 0x00U,
0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U,
0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U,
0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U,
0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U,
0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U,
0x00U, 0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U, 0x00U,
0x00U, 0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
};
unsigned char stopImage[] = {
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U
};
enum {
Menu_File_File = 6000,
Menu_Edit_Preferences,
Button_Start,
Button_Stop
};
DEFINE_EVENT_TYPE(ERROR_EVENT)
DEFINE_EVENT_TYPE(FINISHED_EVENT)
BEGIN_EVENT_TABLE(CDVToolWriterFrame, wxFrame)
EVT_MENU(Menu_File_File, CDVToolWriterFrame::onOpen)
EVT_MENU(wxID_EXIT, CDVToolWriterFrame::onQuit)
EVT_MENU(Menu_Edit_Preferences, CDVToolWriterFrame::onPreferences)
EVT_MENU(wxID_ABOUT, CDVToolWriterFrame::onAbout)
EVT_CLOSE(CDVToolWriterFrame::onClose)
EVT_BUTTON(Button_Start, CDVToolWriterFrame::onStart)
EVT_BUTTON(Button_Stop, CDVToolWriterFrame::onStop)
EVT_CUSTOM(ERROR_EVENT, wxID_ANY, CDVToolWriterFrame::onError)
EVT_CUSTOM(FINISHED_EVENT, wxID_ANY, CDVToolWriterFrame::onFinished)
END_EVENT_TABLE()
CDVToolWriterFrame::CDVToolWriterFrame(const wxString& title) :
wxFrame(NULL, -1, title),
m_format(NULL),
m_recording(NULL),
m_your(NULL),
m_rpt1(NULL),
m_rpt2(NULL),
m_message(NULL)
{
SetMenuBar(createMenuBar());
wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
wxPanel* panel = new wxPanel(this);
wxGridBagSizer* panelSizer = new wxGridBagSizer(BORDER_SIZE, BORDER_SIZE);
wxStaticText* formatLabel = new wxStaticText(panel, -1, _("Format:"), wxDefaultPosition, wxSize(LABEL_WIDTH, -1), wxALIGN_RIGHT);
panelSizer->Add(formatLabel, wxGBPosition(0, 0), wxDefaultSpan, wxALL, BORDER_SIZE);
m_format = new wxChoice(panel, -1, wxDefaultPosition, wxSize(CONTROL_WIDTH, -1));
m_format->Append(wxT(".dvtool"));
m_format->Append(wxT(".ambe"));
panelSizer->Add(m_format, wxGBPosition(0, 1), wxDefaultSpan, wxALL, BORDER_SIZE);
m_format->SetSelection(0);
wxImage* start = new wxImage(15, 15, startImage, startAlpha, true);
wxImage* stop = new wxImage(15, 15, stopImage, true);
wxStaticText* micLabel = new wxStaticText(panel, -1, _("Microphone:"), wxDefaultPosition, wxSize(LABEL_WIDTH, -1), wxALIGN_RIGHT);
panelSizer->Add(micLabel, wxGBPosition(0, 2), wxDefaultSpan, wxALL, BORDER_SIZE);
wxBoxSizer* micSizer = new wxBoxSizer(wxHORIZONTAL);
wxButton* startButton = new wxBitmapButton(panel, Button_Start, wxBitmap(*start), wxDefaultPosition, wxSize(MIC_WIDTH, -1), wxALIGN_RIGHT);
micSizer->Add(startButton, wxALL, BORDER_SIZE);
wxButton* stopButton = new wxBitmapButton(panel, Button_Stop, wxBitmap(*stop), wxDefaultPosition, wxSize(MIC_WIDTH, -1), wxALIGN_RIGHT);
micSizer->Add(stopButton, wxALL, BORDER_SIZE);
panelSizer->Add(micSizer, wxGBPosition(0, 3), wxDefaultSpan, wxALL, BORDER_SIZE);
m_recording = new wxStaticText(panel, -1, wxEmptyString, wxDefaultPosition, wxSize(LABEL_WIDTH, -1), wxALIGN_RIGHT);
panelSizer->Add(m_recording, wxGBPosition(0, 5), wxDefaultSpan, wxALL, BORDER_SIZE);
wxStaticText* yourLabel = new wxStaticText(panel, -1, _("Your:"), wxDefaultPosition, wxSize(LABEL_WIDTH, -1), wxALIGN_RIGHT);
panelSizer->Add(yourLabel, wxGBPosition(1, 0), wxDefaultSpan, wxALL, BORDER_SIZE);
m_your = new CCallsignTextCtrl(panel, -1, wxEmptyString, wxDefaultPosition, wxSize(CONTROL_WIDTH, -1));
m_your->SetMaxLength(LONG_CALLSIGN_LENGTH);
panelSizer->Add(m_your, wxGBPosition(1, 1), wxDefaultSpan, wxALL, BORDER_SIZE);
wxStaticText* rpt1Label = new wxStaticText(panel, -1, _("RPT1:"), wxDefaultPosition, wxSize(LABEL_WIDTH, -1), wxALIGN_RIGHT);
panelSizer->Add(rpt1Label, wxGBPosition(1, 2), wxDefaultSpan, wxALL, BORDER_SIZE);
m_rpt1 = new CCallsignTextCtrl(panel, -1, wxEmptyString, wxDefaultPosition, wxSize(CONTROL_WIDTH, -1));
m_rpt1->SetMaxLength(LONG_CALLSIGN_LENGTH);
panelSizer->Add(m_rpt1, wxGBPosition(1, 3), wxDefaultSpan, wxALL, BORDER_SIZE);
wxStaticText* rpt2Label = new wxStaticText(panel, -1, _("RPT2:"), wxDefaultPosition, wxSize(LABEL_WIDTH, -1), wxALIGN_RIGHT);
panelSizer->Add(rpt2Label, wxGBPosition(1, 4), wxDefaultSpan, wxALL, BORDER_SIZE);
m_rpt2 = new CCallsignTextCtrl(panel, -1, wxEmptyString, wxDefaultPosition, wxSize(CONTROL_WIDTH, -1));
m_rpt2->SetMaxLength(LONG_CALLSIGN_LENGTH);
panelSizer->Add(m_rpt2, wxGBPosition(1, 5), wxDefaultSpan, wxALL, BORDER_SIZE);
wxStaticText* messageLabel = new wxStaticText(panel, -1, _("Message:"), wxDefaultPosition, wxSize(LABEL_WIDTH, -1), wxALIGN_RIGHT);
panelSizer->Add(messageLabel, wxGBPosition(2, 0), wxDefaultSpan, wxALL, BORDER_SIZE);
m_message = new wxTextCtrl(panel, -1, wxEmptyString, wxDefaultPosition, wxSize(CONTROL_WIDTH * 2U + LABEL_WIDTH + BORDER_SIZE * 6U, -1), wxALIGN_LEFT);
m_message->SetMaxLength(MESSAGE_LENGTH);
panelSizer->Add(m_message, wxGBPosition(2, 1), wxGBSpan(1, 3), wxALL, BORDER_SIZE);
panel->SetSizer(panelSizer);
panelSizer->SetSizeHints(panel);
mainSizer->Add(panel);
SetSizer(mainSizer);
mainSizer->SetSizeHints(this);
}
CDVToolWriterFrame::~CDVToolWriterFrame()
{
}
wxMenuBar* CDVToolWriterFrame::createMenuBar()
{
wxMenu* fileMenu = new wxMenu();
fileMenu->Append(Menu_File_File, _("Open WAV File..."));
fileMenu->AppendSeparator();
fileMenu->Append(wxID_EXIT, _("Exit"));
wxMenu* editMenu = new wxMenu();
editMenu->Append(Menu_Edit_Preferences, _("Preferences..."));
wxMenu* helpMenu = new wxMenu();
helpMenu->Append(wxID_ABOUT, _("About DVTool Writer"));
wxMenuBar* menuBar = new wxMenuBar();
menuBar->Append(fileMenu, _("File"));
menuBar->Append(editMenu, _("Edit"));
menuBar->Append(helpMenu, _("Help"));
return menuBar;
}
void CDVToolWriterFrame::error(const wxString& error)
{
CErrorEvent event(error, ERROR_EVENT);
AddPendingEvent(event);
}
void CDVToolWriterFrame::showFinished()
{
wxCommandEvent event(FINISHED_EVENT);
AddPendingEvent(event);
}
void CDVToolWriterFrame::onQuit(wxCommandEvent& event)
{
Close(false);
}
void CDVToolWriterFrame::onOpen(wxCommandEvent& event)
{
wxFileDialog dialog(this, _("Select a WAV File"), wxEmptyString, wxEmptyString, _("WAV file (*.wav)|*.wav|All files (*.*)|*.*"));
if (dialog.ShowModal() != wxID_OK)
return;
wxString fileName = dialog.GetPath();
CWAVFileReader* reader = new CWAVFileReader(fileName, DSTAR_RADIO_BLOCK_SIZE);
bool res = reader->open();
if (!res) {
wxMessageDialog dialog(this, _("Cannot find the file, or the file is corrupt."), _("DVTool Writer Error"), wxICON_ERROR);
dialog.ShowModal();
delete reader;
return;
}
unsigned int sampleRate = reader->getSampleRate();
if (sampleRate != 48000U) {
wxMessageDialog dialog(this, _("Invalid WAV file sample rate, not equal to 48000 sps."), _("DVTool Writer Error"), wxICON_ERROR);
dialog.ShowModal();
delete reader;
return;
}
unsigned int channels = reader->getChannels();
if (channels != 1U) {
wxMessageDialog dialog(this, _("Wrong number of channels in the WAV file."), _("DVTool Writer Error"), wxICON_ERROR);
dialog.ShowModal();
delete reader;
return;
}
wxDateTime dateTime = wxDateTime::Now();
IFileWriter* writer = NULL;
switch (m_format->GetSelection()) {
case 0:
writer = new CDVTOOLFileWriter(dateTime.Format(wxT("%Y%m%d-%H%M%S.dvtool")));
break;
case 1:
writer = new CAMBEFileWriter(dateTime.Format(wxT("%Y%m%d-%H%M%S.ambe")));
break;
default:
break;
}
if (writer == NULL) {
wxMessageDialog dialog(this, _("No output file format specified."), _("DVTool Writer Error"), wxICON_ERROR);
dialog.ShowModal();
delete reader;
return;
}
res = ::wxGetApp().processFile(reader, m_your->GetValue(), m_rpt1->GetValue(), m_rpt2->GetValue(), m_message->GetValue(), writer);
if (!res) {
wxMessageDialog dialog(this, _("Cannot process the file."), _("DVTool Writer Error"), wxICON_ERROR);
dialog.ShowModal();
delete reader;
}
}
void CDVToolWriterFrame::onStart(wxCommandEvent& event)
{
wxDateTime dateTime = wxDateTime::Now();
IFileWriter* writer = NULL;
switch (m_format->GetSelection()) {
case 0:
writer = new CDVTOOLFileWriter(dateTime.Format(wxT("%Y%m%d-%H%M%S.dvtool")));
break;
case 1:
writer = new CAMBEFileWriter(dateTime.Format(wxT("%Y%m%d-%H%M%S.ambe")));
break;
default:
break;
}
if (writer == NULL) {
wxMessageDialog dialog(this, _("No output file format specified."), _("DVTool Writer Error"), wxICON_ERROR);
dialog.ShowModal();
return;
}
bool res = ::wxGetApp().processAudio(m_your->GetValue(), m_rpt1->GetValue(), m_rpt2->GetValue(), m_message->GetValue(), writer);
if (!res) {
wxMessageDialog dialog(this, _("Cannot process the audio."), _("DVTool Writer Error"), wxICON_ERROR);
dialog.ShowModal();
return;
}
m_recording->SetLabel(_("Recording"));
}
void CDVToolWriterFrame::onStop(wxCommandEvent& event)
{
::wxGetApp().processAudio();
m_recording->SetLabel(wxEmptyString);
}
void CDVToolWriterFrame::onPreferences(wxCommandEvent& event)
{
wxString callsign1, callsign2;
::wxGetApp().getCallsign(callsign1, callsign2);
DONGLE_TYPE type;
wxString device, address;
unsigned int port;
::wxGetApp().getDongle(type, device, address, port);
wxString soundcard;
::wxGetApp().getSoundcard(soundcard);
CDVToolWriterPreferences dialog1(this, -1, callsign1, callsign2, type, device, address, port, soundcard);
if (dialog1.ShowModal() != wxID_OK)
return;
callsign1 = dialog1.getCallsign1();
callsign2 = dialog1.getCallsign2();
type = dialog1.getType();
device = dialog1.getDevice();
address = dialog1.getAddress();
port = dialog1.getPort();
soundcard = dialog1.getSoundcard();
::wxGetApp().setCallsign(callsign1, callsign2);
::wxGetApp().setDongle(type, device, address, port);
::wxGetApp().setSoundcard(soundcard);
wxMessageDialog dialog2(this, _("The changes made will not take effect\nuntil the application is restarted"), _("DVTool Writer Information"), wxICON_INFORMATION);
dialog2.ShowModal();
}
void CDVToolWriterFrame::onAbout(wxCommandEvent& event)
{
wxAboutDialogInfo info;
info.AddDeveloper(wxT("Jonathan Naylor, G4KLX"));
info.SetCopyright(wxT("(C) 2014 using GPL v2 or later"));
info.SetName(APPLICATION_NAME);
info.SetVersion(VERSION);
info.SetDescription(_("This program writes .ambe and .dvtool files created and displays\nthe enclosed information and plays the AMBE audio."));
::wxAboutBox(info);
}
void CDVToolWriterFrame::onClose(wxCloseEvent& event)
{
Destroy();
}
void CDVToolWriterFrame::onError(wxEvent& event)
{
CErrorEvent& errEvent = dynamic_cast<CErrorEvent&>(event);
wxString text = errEvent.getText();
wxMessageDialog dialog(this, text, _("DVTool Writer Error"), wxICON_ERROR);
dialog.ShowModal();
}
void CDVToolWriterFrame::onFinished(wxEvent& event)
{
wxMessageDialog dialog(this, _("The file has finished processing."), _("DVTool Writer Information"), wxICON_INFORMATION);
dialog.ShowModal();
}

Powered by TurnKey Linux.