From 2085d0f2c96d699e326c80d37cfc9ccd67e2a280 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Sun, 18 Dec 2016 12:00:53 -0500 Subject: [PATCH] Save and load splitter sash positions --- src/AppConfig.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++ src/AppConfig.h | 12 ++++++++++- src/AppFrame.cpp | 29 +++++++++++++++++++++------ src/AppFrame.h | 1 + 4 files changed, 86 insertions(+), 7 deletions(-) diff --git a/src/AppConfig.cpp b/src/AppConfig.cpp index 2772ddb..a15441a 100644 --- a/src/AppConfig.cpp +++ b/src/AppConfig.cpp @@ -290,6 +290,10 @@ AppConfig::AppConfig() : configName("") { spectrumAvgSpeed.store(0.65f); dbOffset.store(0); modemPropsCollapsed.store(false); + mainSplit = -1; + visSplit = -1; + bookmarkSplit = -1; + #ifdef USE_HAMLIB rigEnabled.store(false); rigModel.store(1); @@ -441,6 +445,31 @@ std::vector AppConfig::getManualDevices() { return manualDevices; } +void AppConfig::setMainSplit(float value) { + mainSplit.store(value); +} + +float AppConfig::getMainSplit() { + return mainSplit.load(); +} + +void AppConfig::setVisSplit(float value) { + visSplit.store(value); +} + +float AppConfig::getVisSplit() { + return visSplit.load(); +} + +void AppConfig::setBookmarkSplit(float value) { + bookmarkSplit.store(value); +} + +float AppConfig::getBookmarkSplit() { + return bookmarkSplit.load(); +} + + void AppConfig::setConfigName(std::string configName) { this->configName = configName; } @@ -487,6 +516,10 @@ bool AppConfig::save() { *window_node->newChild("spectrum_avg") = spectrumAvgSpeed.load(); *window_node->newChild("modemprops_collapsed") = modemPropsCollapsed.load();; *window_node->newChild("db_offset") = dbOffset.load(); + + *window_node->newChild("main_split") = mainSplit.load(); + *window_node->newChild("vis_split") = visSplit.load(); + *window_node->newChild("bookmark_split") = bookmarkSplit.load(); } DataNode *devices_node = cfg.rootNode()->newChild("devices"); @@ -644,6 +677,24 @@ bool AppConfig::load() { offset_node->element()->get(offsetValue); setDBOffset(offsetValue); } + + if (win_node->hasAnother("main_split")) { + float gVal; + win_node->getNext("main_split")->element()->get(gVal); + mainSplit.store(gVal); + } + + if (win_node->hasAnother("vis_split")) { + float gVal; + win_node->getNext("vis_split")->element()->get(gVal); + visSplit.store(gVal); + } + + if (win_node->hasAnother("bookmark_split")) { + float gVal; + win_node->getNext("bookmark_split")->element()->get(gVal); + bookmarkSplit.store(gVal); + } } if (cfg.rootNode()->hasAnother("devices")) { diff --git a/src/AppConfig.h b/src/AppConfig.h index f8d31e3..cedff38 100644 --- a/src/AppConfig.h +++ b/src/AppConfig.h @@ -118,6 +118,16 @@ public: void setManualDevices(std::vector manuals); std::vector getManualDevices(); + void setMainSplit(float value); + float getMainSplit(); + + void setVisSplit(float value); + float getVisSplit(); + + void setBookmarkSplit(float value); + float getBookmarkSplit(); + + #if USE_HAMLIB int getRigModel(); void setRigModel(int rigModel); @@ -160,7 +170,7 @@ private: std::atomic_llong snap; std::atomic_llong centerFreq; std::atomic_int waterfallLinesPerSec; - std::atomic spectrumAvgSpeed; + std::atomic spectrumAvgSpeed, mainSplit, visSplit, bookmarkSplit; std::atomic_int dbOffset; std::vector manualDevices; #if USE_HAMLIB diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index 0ddb5ea..3d9337d 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -69,8 +69,9 @@ AppFrame::AppFrame() : //attribList.PlatformDefaults().MinRGBA(8, 8, 8, 8).DoubleBuffer().Depth(16).EndList(); mainSplitter = new wxSplitterWindow( this, wxID_MAIN_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); - mainSplitter->SetSashGravity(10.0/37.0); + mainSplitter->SetSashGravity(10.0f / 37.0f); mainSplitter->SetMinimumPaneSize(1); + wxPanel *demodPanel = new wxPanel(mainSplitter, wxID_ANY); @@ -277,13 +278,13 @@ AppFrame::AppFrame() : // vbox->Add(demodTray, 12, wxEXPAND | wxALL, 0); // vbox->AddSpacer(1); - bookmarkSplitter = new wxSplitterWindow( mainSplitter, wxID_VIS_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); + bookmarkSplitter = new wxSplitterWindow( mainSplitter, wxID_BM_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); bookmarkSplitter->SetMinimumPaneSize(1); - bookmarkSplitter->SetSashGravity(1.0/20.0); + bookmarkSplitter->SetSashGravity(1.0f / 20.0f); mainVisSplitter = new wxSplitterWindow( bookmarkSplitter, wxID_VIS_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); mainVisSplitter->SetMinimumPaneSize(1); - mainVisSplitter->SetSashGravity(6.0/25.0); + mainVisSplitter->SetSashGravity(6.0f / 25.0f); // mainVisSplitter->Connect( wxEVT_IDLE, wxIdleEventHandler( AppFrame::mainVisSplitterIdle ), NULL, this ); @@ -365,7 +366,7 @@ AppFrame::AppFrame() : mainSplitter->SplitHorizontally( demodPanel, bookmarkSplitter ); vbox->Add(mainSplitter, 1, wxEXPAND | wxALL, 0); - + // TODO: refactor these.. waterfallCanvas->attachSpectrumCanvas(spectrumCanvas); spectrumCanvas->attachWaterfallCanvas(waterfallCanvas); @@ -647,7 +648,20 @@ AppFrame::AppFrame() : if (mpc) { modemProps->setCollapsed(true); } - + + int msPos = wxGetApp().getConfig()->getMainSplit(); + if (msPos != -1) { + mainSplitter->SetSashPosition(msPos); + } + int bsPos = wxGetApp().getConfig()->getBookmarkSplit(); + if (bsPos != -1) { + bookmarkSplitter->SetSashPosition(bsPos); + } + int vsPos = wxGetApp().getConfig()->getVisSplit(); + if (vsPos != -1) { + mainVisSplitter->SetSashPosition(vsPos); + } + Show(); #ifdef _WIN32 @@ -1289,6 +1303,9 @@ void AppFrame::OnClose(wxCloseEvent& event) { wxGetApp().getConfig()->setWaterfallLinesPerSec(waterfallDataThread->getLinesPerSecond()); wxGetApp().getConfig()->setManualDevices(SDREnumerator::getManuals()); wxGetApp().getConfig()->setModemPropsCollapsed(modemProps->isCollapsed()); + wxGetApp().getConfig()->setMainSplit(mainSplitter->GetSashPosition()); + wxGetApp().getConfig()->setVisSplit(mainVisSplitter->GetSashPosition()); + wxGetApp().getConfig()->setBookmarkSplit(bookmarkSplitter->GetSashPosition()); #ifdef USE_HAMLIB wxGetApp().getConfig()->setRigEnabled(rigEnableMenuItem->IsChecked()); wxGetApp().getConfig()->setRigModel(rigModel); diff --git a/src/AppFrame.h b/src/AppFrame.h index b778597..7d973c7 100644 --- a/src/AppFrame.h +++ b/src/AppFrame.h @@ -39,6 +39,7 @@ #define wxID_MAIN_SPLITTER 2050 #define wxID_VIS_SPLITTER 2051 +#define wxID_BM_SPLITTER 2052 #define wxID_THEME_DEFAULT 2100 #define wxID_THEME_SHARP 2101