Commit 75a74b02 authored by Christoph Berg's avatar Christoph Berg

New upstream version 0.2.5

parent 683a207e
......@@ -6,7 +6,7 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
SET(CUBICSDR_VERSION_MAJOR "0")
SET(CUBICSDR_VERSION_MINOR "2")
SET(CUBICSDR_VERSION_PATCH "4")
SET(CUBICSDR_VERSION_PATCH "5")
SET(CUBICSDR_VERSION_SUFFIX "")
SET(CUBICSDR_VERSION "${CUBICSDR_VERSION_MAJOR}.${CUBICSDR_VERSION_MINOR}.${CUBICSDR_VERSION_PATCH}${CUBICSDR_VERSION_SUFFIX}")
......
This diff is collapsed.
This diff is collapsed.
......@@ -306,7 +306,7 @@ AppConfig::AppConfig() : configName("") {
winH.store(0);
winMax.store(false);
showTips.store(true);
lowPerfMode.store(false);
perfMode.store(PERF_NORMAL);
themeId.store(0);
fontScale.store(0);
snap.store(1);
......@@ -393,12 +393,12 @@ bool AppConfig::getShowTips() {
return showTips.load();
}
void AppConfig::setLowPerfMode(bool show) {
lowPerfMode.store(show);
void AppConfig::setPerfMode(PerfModeEnum show) {
perfMode.store(show);
}
bool AppConfig::getLowPerfMode() {
return lowPerfMode.load();
AppConfig::PerfModeEnum AppConfig::getPerfMode() {
return perfMode.load();
}
wxRect *AppConfig::getWindow() {
......@@ -590,7 +590,7 @@ bool AppConfig::save() {
*window_node->newChild("max") = winMax.load();
*window_node->newChild("tips") = showTips.load();
*window_node->newChild("low_perf_mode") = lowPerfMode.load();
*window_node->newChild("perf_mode") = (int)perfMode.load();
*window_node->newChild("theme") = themeId.load();
*window_node->newChild("font_scale") = fontScale.load();
*window_node->newChild("snap") = snap.load();
......@@ -689,7 +689,7 @@ bool AppConfig::load() {
if (cfg.rootNode()->hasAnother("window")) {
int x = 0 ,y = 0 ,w = 0 ,h = 0;
int max = 0 ,tips = 0 ,lpm = 0 ,mpc = 0;
int max = 0 ,tips = 0 ,perf_mode = 0 ,mpc = 0;
DataNode *win_node = cfg.rootNode()->getNext("window");
......@@ -716,11 +716,19 @@ bool AppConfig::load() {
showTips.store(tips?true:false);
}
if (win_node->hasAnother("low_perf_mode")) {
win_node->getNext("low_perf_mode")->element()->get(lpm);
lowPerfMode.store(lpm?true:false);
}
// default:
perfMode.store(PERF_NORMAL);
if (win_node->hasAnother("perf_mode")) {
win_node->getNext("perf_mode")->element()->get(perf_mode);
if (perf_mode == (int)PERF_LOW) {
perfMode.store(PERF_LOW);
} else if (perf_mode == (int)PERF_HIGH) {
perfMode.store(PERF_HIGH);
}
}
if (win_node->hasAnother("theme")) {
int theme;
win_node->getNext("theme")->element()->get(theme);
......
......@@ -83,6 +83,14 @@ private:
class AppConfig {
public:
enum PerfModeEnum {
PERF_LOW = 0,
PERF_NORMAL = 1,
PERF_HIGH = 2
};
AppConfig();
std::string getConfigDir();
DeviceConfig *getDevice(std::string deviceId);
......@@ -99,8 +107,8 @@ public:
void setShowTips(bool show);
bool getShowTips();
void setLowPerfMode(bool lpm);
bool getLowPerfMode();
void setPerfMode(PerfModeEnum mode);
PerfModeEnum getPerfMode();
void setTheme(int themeId);
int getTheme();
......@@ -185,7 +193,7 @@ private:
std::string configName;
std::map<std::string, DeviceConfig *> deviceConfig;
std::atomic_int winX,winY,winW,winH;
std::atomic_bool winMax, showTips, lowPerfMode, modemPropsCollapsed;
std::atomic_bool winMax, showTips, modemPropsCollapsed;
std::atomic_int themeId;
std::atomic_int fontScale;
std::atomic_llong snap;
......@@ -196,6 +204,8 @@ private:
std::vector<SDRManualDef> manualDevices;
std::atomic_bool bookmarksVisible;
std::atomic<PerfModeEnum> perfMode;
std::string recordingPath = "";
int recordingSquelchOption = 0;
int recordingFileTimeLimitSeconds = 0;
......
......@@ -869,12 +869,30 @@ void AppFrame::updateDeviceParams() {
showTipMenuItem = newSettingsMenu->AppendCheckItem(wxID_SET_TIPS, "Show Hover Tips");
showTipMenuItem->Check(wxGetApp().getConfig()->getShowTips());
lowPerfMode = wxGetApp().getConfig()->getLowPerfMode();
lowPerfMenuItem = newSettingsMenu->AppendCheckItem(wxID_LOW_PERF, "Reduce CPU Usage");
if (lowPerfMode) {
lowPerfMenuItem->Check(true);
// CPU usage menu:
performanceMenuItems.clear();
wxMenu *subMenu = new wxMenu;
performanceMenuItems[wxID_PERF_BASE + (int)AppConfig::PERF_HIGH] = subMenu->AppendRadioItem(wxID_PERF_BASE + (int)AppConfig::PERF_HIGH, "High (+enhanced DSP)");
performanceMenuItems[wxID_PERF_BASE + (int)AppConfig::PERF_NORMAL] = subMenu->AppendRadioItem(wxID_PERF_BASE + (int)AppConfig::PERF_NORMAL, "Normal");
performanceMenuItems[wxID_PERF_BASE + (int)AppConfig::PERF_LOW] = subMenu->AppendRadioItem(wxID_PERF_BASE + (int)AppConfig::PERF_LOW, "Low (-slow UI)");
AppConfig::PerfModeEnum perfMode = wxGetApp().getConfig()->getPerfMode();
if (perfMode == AppConfig::PERF_HIGH) {
wxGetApp().setChannelizerType(SDRPostThreadChannelizerType::SDRPostPFBCH2);
} else {
wxGetApp().setChannelizerType(SDRPostThreadChannelizerType::SDRPostPFBCH);
}
performanceMenuItems[wxID_PERF_BASE + (int)perfMode]->Check(true);
wxMenuItem* selectedPerfModeItem = performanceMenuItems[wxID_PERF_BASE + (int)perfMode];
performanceMenuItems[wxID_PERF_CURRENT] = newSettingsMenu->AppendSubMenu(subMenu, "CPU usage");
performanceMenuItems[wxID_PERF_CURRENT]->SetItemLabel(getSettingsLabel("CPU usage", selectedPerfModeItem->GetItemLabel().ToStdString()));
newSettingsMenu->AppendSeparator();
settingsMenuItems.clear();
......@@ -1827,10 +1845,30 @@ void AppFrame::OnMenu(wxCommandEvent& event) {
}
}
}
else if (event.GetId() == wxID_LOW_PERF) {
lowPerfMode = lowPerfMenuItem->IsChecked();
wxGetApp().getConfig()->setLowPerfMode(lowPerfMode);
else if (event.GetId() >= wxID_PERF_BASE && event.GetId() <= wxID_PERF_BASE + (int)AppConfig::PERF_HIGH) {
int perfEnumAsInt = event.GetId() - wxID_PERF_BASE;
AppConfig::PerfModeEnum perfEnumSet = AppConfig::PERF_NORMAL;
if (perfEnumAsInt == (int)AppConfig::PERF_HIGH) {
perfEnumSet = AppConfig::PERF_HIGH;
} else if (perfEnumAsInt == (int)AppConfig::PERF_LOW) {
perfEnumSet = AppConfig::PERF_LOW;
}
wxGetApp().getConfig()->setPerfMode(perfEnumSet);
//update Channelizer mode:
if (perfEnumSet == AppConfig::PERF_HIGH) {
wxGetApp().setChannelizerType(SDRPostThreadChannelizerType::SDRPostPFBCH2);
} else {
wxGetApp().setChannelizerType(SDRPostThreadChannelizerType::SDRPostPFBCH);
}
//update UI
wxMenuItem* selectedPerfModeItem = performanceMenuItems[event.GetId()];
performanceMenuItems[wxID_PERF_CURRENT]->SetItemLabel(getSettingsLabel("CPU usage", selectedPerfModeItem->GetItemLabel().ToStdString()));
}
else if (event.GetId() == wxID_SET_TIPS ) {
if (wxGetApp().getConfig()->getShowTips()) {
......@@ -2252,7 +2290,6 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
}
wproc->setView(waterfallCanvas->getViewState(), waterfallCanvas->getCenterFrequency(), waterfallCanvas->getBandwidth());
wxGetApp().getSDRPostThread()->setIQVisualRange(waterfallCanvas->getCenterFrequency(), waterfallCanvas->getBandwidth());
proc->setView(wproc->isView(), wproc->getCenterFrequency(), wproc->getBandwidth());
......@@ -2325,7 +2362,7 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
if (!this->IsActive()) {
std::this_thread::sleep_for(std::chrono::milliseconds(30));
} else {
if (lowPerfMode) {
if (wxGetApp().getConfig()->getPerfMode() == AppConfig::PERF_LOW) {
std::this_thread::sleep_for(std::chrono::milliseconds(30));
} else {
std::this_thread::sleep_for(std::chrono::milliseconds(1));
......@@ -2448,10 +2485,10 @@ bool AppFrame::loadSession(std::string fileName) {
std::cout << "Loading session file version: '" << version << "'..." << std::endl;
}
catch (DataTypeMismatchException* e) {
catch (DataTypeMismatchException e) {
//this is for managing the old session format NOT encoded as std:wstring,
//force current version
std::cout << "Warning while Loading session file version, probably old format :'" << e->what() << "' please consider re-saving the current session..." << std::endl;
std::cout << "Warning while Loading session file version, probably old format :'" << e.what() << "' please consider re-saving the current session..." << std::endl << std::flush;
version = wxString(CUBICSDR_VERSION).ToStdWstring();
}
}
......@@ -2575,7 +2612,7 @@ bool AppFrame::loadSession(std::string fileName) {
if (loadedActiveDemod || newDemod) {
wxGetApp().getDemodMgr().setActiveDemodulator(loadedActiveDemod?loadedActiveDemod:newDemod, false);
}
} catch (DataTypeMismatchException &e) {
} catch (DataTypeMismatchException e) {
std::cout << e.what() << std::endl;
return false;
}
......@@ -3082,14 +3119,19 @@ wxString AppFrame::getSettingsLabel(const std::string& settingsName,
const std::string& settingsValue,
const std::string& settingsSuffix) {
size_t itemStringSize = 30;
size_t itemStringSize = 40;
int justifValueSize = itemStringSize - settingsName.length() - 1;
std::stringstream full_label;
full_label << settingsName + " : ";
full_label << std::right << std::setw(justifValueSize);
full_label << settingsValue + " " + settingsSuffix;
if (settingsSuffix.empty()) {
full_label << settingsValue;
} else {
full_label << settingsValue + " " + settingsSuffix;
}
return wxString(full_label.str());
}
......@@ -39,7 +39,6 @@
#define wxID_SDR_DEVICES 2008
#define wxID_AGC_CONTROL 2009
#define wxID_SDR_START_STOP 2010
#define wxID_LOW_PERF 2011
#define wxID_SET_DB_OFFSET 2012
#define wxID_ABOUT_CUBICSDR 2013
......@@ -70,9 +69,12 @@
#define wxID_SETTINGS_BASE 2300
#define wxID_ANTENNA_CURRENT 2500
#define wxID_ANTENNA_CURRENT 2350
#define wxID_ANTENNA_CURRENT_TX 2501
#define wxID_ANTENNAS_BASE 2502
#define wxID_ANTENNAS_BASE 2352
#define wxID_PERF_CURRENT 2400
#define wxID_PERF_BASE 2401
#define wxID_DEVICE_ID 3500
......@@ -229,6 +231,8 @@ private:
//depending on context, maps the item id to wxMenuItem*,
//OR the submenu item id to its parent wxMenuItem*.
std::map<int, wxMenuItem *> settingsMenuItems;
std::map<int, wxMenuItem *> performanceMenuItems;
std::map<int, wxMenuItem *> audioSampleRateMenuItems;
......@@ -242,7 +246,7 @@ private:
wxMenu *displayMenu = nullptr;
wxMenuItem *agcMenuItem = nullptr;
wxMenuItem *iqSwapMenuItem = nullptr;
wxMenuItem *lowPerfMenuItem = nullptr;
wxMenu *fileMenu = nullptr;
wxMenu *settingsMenu = nullptr;
wxMenu *recordingMenu = nullptr;
......@@ -269,8 +273,6 @@ private:
std::atomic_bool modemPropertiesUpdated;
wxMenuItem *showTipMenuItem;
bool lowPerfMode;
wxMenuItem *hideBookmarksItem;
bool saveDisabled;
......
......@@ -570,6 +570,38 @@ BookmarkEntryPtr BookmarkMgr::demodToBookmarkEntry(DemodulatorInstancePtr demod)
return be;
}
std::wstring BookmarkMgr::getSafeWstringValue(DataNode* node, const std::string& childNodeName) {
std::wstring decodedWString = L"";
if (node != nullptr) {
DataNode* childNode = node->getNext(childNodeName.c_str());
//1) decode as encoded wstring:
try {
childNode->element()->get(decodedWString);
} catch (DataTypeMismatchException e) {
//2) wstring decode fail, try simple std::string
std::string decodedStdString;
try {
childNode->element()->get(decodedStdString);
//use wxString for a clean conversion to a wstring:
decodedWString = wxString(decodedStdString).ToStdWstring();
} catch (DataTypeMismatchException e) {
//nothing works, return an empty string.
decodedWString = L"";
}
}
}
return decodedWString;
}
BookmarkEntryPtr BookmarkMgr::nodeToBookmark(DataNode *node) {
if (!node->hasAnother("frequency") || !node->hasAnother("type") || !node->hasAnother("bandwidth")) {
return nullptr;
......@@ -582,7 +614,7 @@ BookmarkEntryPtr BookmarkMgr::nodeToBookmark(DataNode *node) {
node->getNext("bandwidth")->element()->get(be->bandwidth);
if (node->hasAnother("user_label")) {
node->getNext("user_label")->element()->get(be->label);
be->label = BookmarkMgr::getSafeWstringValue( node, "user_label");
}
node->rewindAll();
......
......@@ -129,10 +129,15 @@ public:
static std::wstring getBookmarkEntryDisplayName(BookmarkEntryPtr bmEnt);
static std::wstring getActiveDisplayName(DemodulatorInstancePtr demod);
protected:
void trimRecents();
void loadDefaultRanges();
//utility method that attemts to decode the childNodeName as std::wstring, else as std::string, else
//return an empty string.
static std::wstring getSafeWstringValue(DataNode* node, const std::string& childNodeName);
BookmarkEntryPtr demodToBookmarkEntry(DemodulatorInstancePtr demod);
BookmarkEntryPtr nodeToBookmark(DataNode *node);
......
......@@ -659,6 +659,21 @@ const std::string& CubicSDR::getAntennaName() {
return antennaName;
}
void CubicSDR::setChannelizerType(SDRPostThreadChannelizerType chType) {
if (sdrPostThread && !sdrPostThread->isTerminated()) {
sdrPostThread->setChannelizerType(chType);
}
}
SDRPostThreadChannelizerType CubicSDR::getChannelizerType() {
if (sdrPostThread && !sdrPostThread->isTerminated()) {
return sdrPostThread->getChannelizerType();
}
return SDRPostThreadChannelizerType::SDRPostPFBCH;
}
long long CubicSDR::getFrequency() {
return frequency;
}
......
......@@ -95,6 +95,9 @@ public:
void setAntennaName(const std::string& name);
const std::string& getAntennaName();
void setChannelizerType(SDRPostThreadChannelizerType chType);
SDRPostThreadChannelizerType getChannelizerType();
void setSampleRate(long long rate_in);
......
......@@ -16,6 +16,7 @@
#endif
#include "DataTree.h"
#include <wx/string.h>
bool demodFreqCompare (DemodulatorInstancePtr i, DemodulatorInstancePtr j) { return (i->getFrequency() < j->getFrequency()); }
bool inactiveCompare (DemodulatorInstancePtr i, DemodulatorInstancePtr j) { return (i->isActive() < j->isActive()); }
......@@ -432,6 +433,36 @@ void DemodulatorMgr::saveInstance(DataNode *node, DemodulatorInstancePtr inst) {
}
}
std::wstring DemodulatorMgr::getSafeWstringValue(DataNode* node) {
std::wstring decodedWString = L"";
if (node != nullptr) {
//1) decode as encoded wstring:
try {
node->element()->get(decodedWString);
} catch (DataTypeMismatchException e) {
//2) wstring decode fail, try simple std::string
std::string decodedStdString;
try {
node->element()->get(decodedStdString);
//use wxString for a clean conversion to a wstring:
decodedWString = wxString(decodedStdString).ToStdWstring();
} catch (DataTypeMismatchException e) {
//nothing works, return an empty string.
decodedWString = L"";
}
}
}
return decodedWString;
}
DemodulatorInstancePtr DemodulatorMgr::loadInstance(DataNode *node) {
std::lock_guard < std::recursive_mutex > lock(demods_busy);
......@@ -486,7 +517,8 @@ DemodulatorInstancePtr DemodulatorMgr::loadInstance(DataNode *node) {
DataNode *demodUserLabel = node->hasAnother("user_label") ? node->getNext("user_label") : nullptr;
if (demodUserLabel) {
demodUserLabel->element()->get(user_label);
user_label = DemodulatorMgr::getSafeWstringValue(demodUserLabel);
}
ModemSettings mSettings;
......
......@@ -77,8 +77,13 @@ public:
DemodulatorInstancePtr loadInstance(DataNode *node);
private:
//utility method that attemts to decode node value as std::wstring, else as std::string, else
//return an empty string.
static std::wstring getSafeWstringValue(DataNode* node);
std::vector<DemodulatorInstancePtr> demods;
DemodulatorInstancePtr activeDemodulator;
......
This diff is collapsed.
This diff is collapsed.
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Oct 27 2017)
// C++ code generated with wxFormBuilder (version Aug 8 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
......@@ -16,6 +16,9 @@
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/button.h>
#include <wx/treectrl.h>
#include <wx/stattext.h>
......@@ -29,53 +32,53 @@
///////////////////////////////////////////////////////////////////////////////
/// Class BookmarkPanel
///////////////////////////////////////////////////////////////////////////////
class BookmarkPanel : public wxPanel
class BookmarkPanel : public wxPanel
{
private:
protected:
wxTextCtrl* m_searchText;
wxButton* m_clearSearchButton;
wxTreeCtrl* m_treeView;
wxPanel* m_propPanel;
wxStaticText* m_labelLabel;
wxTextCtrl* m_labelText;
wxStaticText* m_frequencyLabel;
wxStaticText* m_frequencyVal;
wxStaticText* m_bandwidthLabel;
wxStaticText* m_bandwidthVal;
wxStaticText* m_modulationLabel;
wxStaticText* m_modulationVal;
wxPanel* m_buttonPanel;
wxTimer m_updateTimer;
// Virtual event handlers, overide them in your derived class
virtual void onEnterWindow(wxMouseEvent& event) { event.Skip(); }
virtual void onLeaveWindow(wxMouseEvent& event) { event.Skip(); }
virtual void onMotion(wxMouseEvent& event) { event.Skip(); }
virtual void onSearchTextFocus(wxMouseEvent& event) { event.Skip(); }
virtual void onSearchText(wxCommandEvent& event) { event.Skip(); }
virtual void onClearSearch(wxCommandEvent& event) { event.Skip(); }
virtual void onTreeBeginDrag(wxTreeEvent& event) { event.Skip(); }
virtual void onTreeEndDrag(wxTreeEvent& event) { event.Skip(); }
virtual void onTreeActivate(wxTreeEvent& event) { event.Skip(); }
virtual void onTreeCollapse(wxTreeEvent& event) { event.Skip(); }
virtual void onTreeExpanded(wxTreeEvent& event) { event.Skip(); }
virtual void onTreeItemGetTooltip(wxTreeEvent& event) { event.Skip(); }
virtual void onTreeItemMenu(wxTreeEvent& event) { event.Skip(); }
virtual void onTreeSelect(wxTreeEvent& event) { event.Skip(); }
virtual void onTreeSelectChanging(wxTreeEvent& event) { event.Skip(); }
virtual void onLabelText(wxCommandEvent& event) { event.Skip(); }
virtual void onDoubleClickFreq(wxMouseEvent& event) { event.Skip(); }
virtual void onDoubleClickBandwidth(wxMouseEvent& event) { event.Skip(); }
virtual void onUpdateTimer(wxTimerEvent& event) { event.Skip(); }
public:
BookmarkPanel(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(169, 471), long style = wxTAB_TRAVERSAL);
~BookmarkPanel();
private:
protected:
wxTextCtrl* m_searchText;
wxButton* m_clearSearchButton;
wxTreeCtrl* m_treeView;
wxPanel* m_propPanel;
wxStaticText* m_labelLabel;
wxTextCtrl* m_labelText;
wxStaticText* m_frequencyLabel;
wxStaticText* m_frequencyVal;
wxStaticText* m_bandwidthLabel;
wxStaticText* m_bandwidthVal;
wxStaticText* m_modulationLabel;
wxStaticText* m_modulationVal;
wxPanel* m_buttonPanel;
wxTimer m_updateTimer;
// Virtual event handlers, overide them in your derived class
virtual void onEnterWindow( wxMouseEvent& event ) { event.Skip(); }
virtual void onLeaveWindow( wxMouseEvent& event ) { event.Skip(); }
virtual void onMotion( wxMouseEvent& event ) { event.Skip(); }
virtual void onSearchTextFocus( wxMouseEvent& event ) { event.Skip(); }
virtual void onSearchText( wxCommandEvent& event ) { event.Skip(); }
virtual void onClearSearch( wxCommandEvent& event ) { event.Skip(); }
virtual void onTreeBeginDrag( wxTreeEvent& event ) { event.Skip(); }
virtual void onTreeEndDrag( wxTreeEvent& event ) { event.Skip(); }
virtual void onTreeActivate( wxTreeEvent& event ) { event.Skip(); }
virtual void onTreeCollapse( wxTreeEvent& event ) { event.Skip(); }
virtual void onTreeExpanded( wxTreeEvent& event ) { event.Skip(); }
virtual void onTreeItemGetTooltip( wxTreeEvent& event ) { event.Skip(); }
virtual void onTreeItemMenu( wxTreeEvent& event ) { event.Skip(); }
virtual void onTreeSelect( wxTreeEvent& event ) { event.Skip(); }
virtual void onTreeSelectChanging( wxTreeEvent& event ) { event.Skip(); }
virtual void onLabelText( wxCommandEvent& event ) { event.Skip(); }
virtual void onDoubleClickFreq( wxMouseEvent& event ) { event.Skip(); }
virtual void onDoubleClickBandwidth( wxMouseEvent& event ) { event.Skip(); }
virtual void onUpdateTimer( wxTimerEvent& event ) { event.Skip(); }
public:
BookmarkPanel( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 169,471 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~BookmarkPanel();
};
#endif //__BOOKMARKPANEL_H__
This diff is collapsed.
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov 6 2017)
// C++ code generated with wxFormBuilder (version Aug 8 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
......@@ -411,6 +411,14 @@ AboutDialogBase::AboutDialogBase( wxWindow* parent, wxWindowID id, const wxStrin
, 0, wxALL, 5 );
m_dPatrickPreitner = new wxStaticText( m_dScroll, wxID_ANY, wxT("Patrick Preitner"), wxDefaultPosition, wxDefaultSize, 0 );
m_dPatrickPreitner->Wrap( -1 );
m_dSizer->Add( m_dPatrickPreitner, 0, wxALL, 5 );
m_dWilliamSoley = new wxStaticText( m_dScroll, wxID_ANY, wxT("William Soley"), wxDefaultPosition, wxDefaultSize, 0 );
m_dWilliamSoley->Wrap( -1 );
m_dSizer->Add( m_dWilliamSoley, 0, wxALL, 5 );
m_dBSizer->Add( m_dSizer, 1, wxALL|wxEXPAND, 5 );
......
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov 6 2017)
// C++ code generated with wxFormBuilder (version Aug 8 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
......@@ -126,6 +126,8 @@ class AboutDialogBase : public wxDialog
wxStaticText* m_dDalePuckett
;
wxStaticText* m_dPatrickPreitner;
wxStaticText* m_dWilliamSoley;
wxScrolledWindow* m_stScroll;
wxStaticText* m_stHeader;
wxStaticLine* m_stDivider1;
......
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Oct 27 2017)
// C++ code generated with wxFormBuilder (version Aug 8 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
......@@ -9,45 +9,45 @@
///////////////////////////////////////////////////////////////////////////
ActionDialogBase::ActionDialogBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style)
ActionDialogBase::ActionDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
this->SetSizeHints(wxDefaultSize, wxDefaultSize);
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
wxBoxSizer* mainSizer;
mainSizer = new wxBoxSizer(wxVERTICAL);
m_questionText = new wxStaticText(this, wxID_ANY, wxT("Question"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
m_questionText->Wrap(-1);
mainSizer->Add(m_questionText, 1, wxALL | wxEXPAND, 5);
mainSizer = new wxBoxSizer( wxVERTICAL );
m_questionText = new wxStaticText( this, wxID_ANY, wxT("Question"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER_HORIZONTAL );
m_questionText->Wrap( -1 );
mainSizer->Add( m_questionText, 1, wxALL|wxEXPAND, 5 );
wxBoxSizer* buttonSizer;
buttonSizer = new wxBoxSizer(wxHORIZONTAL);
m_cancelButton = new wxButton(this, wxID_ANY, wxT("Cancel"), wxDefaultPosition, wxDefaultSize, 0);
buttonSizer->Add(m_cancelButton, 1, wxALL | wxEXPAND, 5);
m_okButton = new wxButton(this, wxID_ANY, wxT("OK"), wxDefaultPosition, wxDefaultSize, 0);
buttonSizer->Add(m_okButton, 1, wxALL | wxEXPAND, 5);
mainSizer->Add(buttonSizer, 1, wxEXPAND, 5);
this->SetSizer(mainSizer);
buttonSizer = new wxBoxSizer( wxHORIZONTAL );
m_cancelButton = new wxButton( this, wxID_ANY, wxT("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
buttonSizer->Add( m_cancelButton, 1, wxALL|wxEXPAND, 5 );
m_okButton = new wxButton( this, wxID_ANY, wxT("OK"), wxDefaultPosition, wxDefaultSize, 0 );
buttonSizer->Add( m_okButton, 1, wxALL|wxEXPAND, 5 );
mainSizer->Add( buttonSizer, 1, wxEXPAND, 5 );
this->SetSizer( mainSizer );
this->Layout();
mainSizer->Fit(this);
this->Centre(wxBOTH);
mainSizer->Fit( this );
this->Centre( wxBOTH );