From 488e8ed9e70721869b0ca231f278f31fe230a636 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Wed, 14 Sep 2016 22:10:27 -0400 Subject: [PATCH] Add bookmark panel to appframe layout, implement some methods --- src/AppFrame.cpp | 15 ++++++++--- src/AppFrame.h | 4 +-- src/BookmarkMgr.cpp | 38 +++++++++++++++++++++++++--- src/BookmarkMgr.h | 19 +++++++++++--- src/CubicSDR.cpp | 4 +++ src/CubicSDR.h | 3 +++ src/forms/Bookmark/BookmarkPanel.cpp | 14 +++++----- src/forms/Bookmark/BookmarkPanel.fbp | 14 +++++----- src/forms/Bookmark/BookmarkView.cpp | 22 ++++++++++++++++ src/forms/Bookmark/BookmarkView.h | 4 ++- 10 files changed, 109 insertions(+), 28 deletions(-) diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index b15e9d2..527a8b9 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -232,10 +232,13 @@ AppFrame::AppFrame() : // vbox->Add(demodTray, 12, wxEXPAND | wxALL, 0); // vbox->AddSpacer(1); - - mainVisSplitter = new wxSplitterWindow( mainSplitter, wxID_VIS_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); - mainVisSplitter->SetSashGravity(6.0/25.0); + bookmarkSplitter = new wxSplitterWindow( mainSplitter, wxID_VIS_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); + bookmarkSplitter->SetMinimumPaneSize(1); + bookmarkSplitter->SetSashGravity(1.0/20.0); + + mainVisSplitter = new wxSplitterWindow( bookmarkSplitter, wxID_VIS_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); mainVisSplitter->SetMinimumPaneSize(1); + mainVisSplitter->SetSashGravity(6.0/25.0); // mainVisSplitter->Connect( wxEVT_IDLE, wxIdleEventHandler( AppFrame::mainVisSplitterIdle ), NULL, this ); @@ -309,7 +312,11 @@ AppFrame::AppFrame() : // vbox->Add(wfSizer, 20, wxEXPAND | wxALL, 0); mainVisSplitter->SplitHorizontally( spectrumPanel, waterfallPanel, 0 ); - mainSplitter->SplitHorizontally( demodPanel, mainVisSplitter ); + + bookmarkPanel = new BookmarkPanel(bookmarkSplitter, wxID_ANY, wxDefaultPosition, wxSize(120,-1)); + + bookmarkSplitter->SplitVertically( bookmarkPanel, mainVisSplitter ); + mainSplitter->SplitHorizontally( demodPanel, bookmarkSplitter ); vbox->Add(mainSplitter, 1, wxEXPAND | wxALL, 0); diff --git a/src/AppFrame.h b/src/AppFrame.h index ea258b9..6124b8c 100644 --- a/src/AppFrame.h +++ b/src/AppFrame.h @@ -19,7 +19,6 @@ #include "ModemProperties.h" //#include "UITestCanvas.h" #include "FrequencyDialog.h" -#include "BookmarkMgr.h" #include "BookmarkView.h" #include @@ -135,8 +134,9 @@ private: ModeSelectorCanvas *demodMuteButton, *peakHoldButton, *soloModeButton, *deltaLockButton; GainCanvas *gainCanvas; wxSizerItem *gainSizerItem, *gainSpacerItem; - wxSplitterWindow *mainVisSplitter, *mainSplitter; + wxSplitterWindow *mainVisSplitter, *mainSplitter, *bookmarkSplitter; wxBoxSizer *demodTray; + BookmarkPanel *bookmarkPanel; DemodulatorInstance *activeDemodulator; diff --git a/src/BookmarkMgr.cpp b/src/BookmarkMgr.cpp index 9c292dd..006dafc 100644 --- a/src/BookmarkMgr.cpp +++ b/src/BookmarkMgr.cpp @@ -1,4 +1,6 @@ #include "BookmarkMgr.h" +#include "CubicSDR.h" +#include "DataTree.h" void BookmarkMgr::saveToFile(std::string bookmarkFn) { @@ -12,17 +14,47 @@ void BookmarkMgr::loadFromFile(std::string bookmarkFn) { } -void BookmarkMgr::addBookmark(std::string group, DemodulatorInstance *demod) { +void BookmarkMgr::addBookmark(std::string group, DemodulatorInstance *demod, std::string folder) { std::lock_guard < std::mutex > lock(busy_lock); - + + BookmarkEntry *be = new BookmarkEntry; + + be->bandwidth = demod->getBandwidth(); + be->type = demod->getDemodulatorType(); + be->label = demod->getLabel(); + be->frequency = demod->getFrequency(); + be->folder = folder; + + wxGetApp().getDemodMgr().saveInstance(be->node, demod); + + bmData[group].insert(be); } +void BookmarkMgr::removeBookmark(std::string group, BookmarkEntry *be) { + std::lock_guard < std::mutex > lockData(busy_lock); + std::lock_guard < std::mutex > lockEnt(be->busy_lock); + + bmData[group].erase(be); +} + + BookmarkList BookmarkMgr::getBookmarks(std::string group, std::string folder) { std::lock_guard < std::mutex > lock(busy_lock); BookmarkList results; - + if (folder != "") { + for (auto be_i : bmData[group]) { + results.push_back(be_i); + } + } else { + for (auto be_i : bmData[group]) { + if (be_i->folder != folder) { + continue; + } + results.push_back(be_i); + } + } return results; } diff --git a/src/BookmarkMgr.h b/src/BookmarkMgr.h index 726d061..ff09969 100644 --- a/src/BookmarkMgr.h +++ b/src/BookmarkMgr.h @@ -1,11 +1,12 @@ #pragma once #include -#include +#include -#include "DataTree.h" #include "DemodulatorInstance.h" +class DataNode; + class BookmarkEntry { public: std::mutex busy_lock; @@ -20,15 +21,25 @@ public: DataNode *node; }; +struct BookmarkEntryCompare : public std::binary_function +{ + bool operator()(const BookmarkEntry *a, BookmarkEntry *b) const + { + return a->frequency < b->frequency; + } +}; + + typedef std::vector BookmarkList; -typedef std::map > BookmarkMap; +typedef std::map > BookmarkMap; class BookmarkMgr { public: void saveToFile(std::string bookmarkFn); void loadFromFile(std::string bookmarkFn); - void addBookmark(std::string group, DemodulatorInstance *demod); + void addBookmark(std::string group, DemodulatorInstance *demod, std::string folder = ""); + void removeBookmark(std::string group, BookmarkEntry *be); BookmarkList getBookmarks(std::string group, std::string folder = ""); protected: diff --git a/src/CubicSDR.cpp b/src/CubicSDR.cpp index 11195f9..acc888e 100644 --- a/src/CubicSDR.cpp +++ b/src/CubicSDR.cpp @@ -671,6 +671,10 @@ DemodulatorMgr &CubicSDR::getDemodMgr() { return demodMgr; } +BookmarkMgr &CubicSDR::getBookmarkMgr() { + return bookmarkMgr; +} + SDRPostThread *CubicSDR::getSDRPostThread() { return sdrPostThread; } diff --git a/src/CubicSDR.h b/src/CubicSDR.h index 07b28cb..171949f 100644 --- a/src/CubicSDR.h +++ b/src/CubicSDR.h @@ -23,6 +23,7 @@ #include "AppFrame.h" #include "FrequencyDialog.h" #include "DemodLabelDialog.h" +#include "BookmarkMgr.h" #include "ScopeVisualProcessor.h" #include "SpectrumVisualProcessor.h" @@ -111,6 +112,7 @@ public: DemodulatorThreadInputQueue* getWaterfallVisualQueue(); DemodulatorThreadInputQueue* getActiveDemodVisualQueue(); DemodulatorMgr &getDemodMgr(); + BookmarkMgr &getBookmarkMgr(); SDRPostThread *getSDRPostThread(); SDRThread *getSDRThread(); @@ -179,6 +181,7 @@ private: std::vector *devs = nullptr; DemodulatorMgr demodMgr; + BookmarkMgr bookmarkMgr; std::atomic_llong frequency; std::atomic_llong offset; diff --git a/src/forms/Bookmark/BookmarkPanel.cpp b/src/forms/Bookmark/BookmarkPanel.cpp index ea8d4a1..decffca 100644 --- a/src/forms/Bookmark/BookmarkPanel.cpp +++ b/src/forms/Bookmark/BookmarkPanel.cpp @@ -26,14 +26,14 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po m_staticText1 = new wxStaticText( m_propPanel, wxID_ANY, wxT("Label"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText1->Wrap( -1 ); - fgPropSizer->Add( m_staticText1, 0, wxALIGN_RIGHT|wxALL, 5 ); + fgPropSizer->Add( m_staticText1, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_labelText = new wxTextCtrl( m_propPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - fgPropSizer->Add( m_labelText, 0, wxALL|wxEXPAND|wxLEFT|wxTOP, 5 ); + fgPropSizer->Add( m_labelText, 0, wxALL|wxEXPAND, 5 ); m_frequencyLabel = new wxStaticText( m_propPanel, wxID_ANY, wxT("Freq"), wxDefaultPosition, wxDefaultSize, 0 ); m_frequencyLabel->Wrap( -1 ); - fgPropSizer->Add( m_frequencyLabel, 0, wxALIGN_RIGHT|wxALL, 5 ); + fgPropSizer->Add( m_frequencyLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_frequencyVal = new wxStaticText( m_propPanel, wxID_ANY, wxT("FrequencyVal"), wxDefaultPosition, wxDefaultSize, 0 ); m_frequencyVal->Wrap( -1 ); @@ -41,7 +41,7 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po m_bandwidthLabel = new wxStaticText( m_propPanel, wxID_ANY, wxT("BW"), wxDefaultPosition, wxDefaultSize, 0 ); m_bandwidthLabel->Wrap( -1 ); - fgPropSizer->Add( m_bandwidthLabel, 0, wxALIGN_RIGHT|wxALL, 5 ); + fgPropSizer->Add( m_bandwidthLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_bandwidthVal = new wxStaticText( m_propPanel, wxID_ANY, wxT("BandwidthVal"), wxDefaultPosition, wxDefaultSize, 0 ); m_bandwidthVal->Wrap( -1 ); @@ -49,7 +49,7 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po m_modulationLabel = new wxStaticText( m_propPanel, wxID_ANY, wxT("Type"), wxDefaultPosition, wxDefaultSize, 0 ); m_modulationLabel->Wrap( -1 ); - fgPropSizer->Add( m_modulationLabel, 0, wxALIGN_RIGHT|wxALL, 5 ); + fgPropSizer->Add( m_modulationLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_typeVal = new wxStaticText( m_propPanel, wxID_ANY, wxT("TypeVal"), wxDefaultPosition, wxDefaultSize, 0 ); m_typeVal->Wrap( -1 ); @@ -62,10 +62,10 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po bSizer1->Add( m_propPanel, 1, wxBOTTOM|wxEXPAND|wxTOP, 5 ); m_bookmarkButton = new wxButton( this, wxID_ANY, wxT("Bookmark"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer1->Add( m_bookmarkButton, 0, wxALIGN_RIGHT|wxALL|wxEXPAND, 5 ); + bSizer1->Add( m_bookmarkButton, 0, wxALL|wxEXPAND, 5 ); m_activateButton = new wxButton( this, wxID_ANY, wxT("Activate"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer1->Add( m_activateButton, 0, wxALIGN_RIGHT|wxALL|wxEXPAND, 5 ); + bSizer1->Add( m_activateButton, 0, wxALL|wxEXPAND, 5 ); m_removeButton = new wxButton( this, wxID_ANY, wxT("Remove"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer1->Add( m_removeButton, 0, wxALL|wxEXPAND, 5 ); diff --git a/src/forms/Bookmark/BookmarkPanel.fbp b/src/forms/Bookmark/BookmarkPanel.fbp index 1899c8f..9a34b9b 100644 --- a/src/forms/Bookmark/BookmarkPanel.fbp +++ b/src/forms/Bookmark/BookmarkPanel.fbp @@ -277,7 +277,7 @@ 0 5 - wxALIGN_RIGHT|wxALL + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT 0 1 @@ -360,7 +360,7 @@ 5 - wxALL|wxEXPAND|wxLEFT|wxTOP + wxALL|wxEXPAND 0 1 @@ -451,7 +451,7 @@ 5 - wxALIGN_RIGHT|wxALL + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT 0 1 @@ -617,7 +617,7 @@ 5 - wxALIGN_RIGHT|wxALL + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT 0 1 @@ -783,7 +783,7 @@ 5 - wxALIGN_RIGHT|wxALL + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT 0 1 @@ -952,7 +952,7 @@ 5 - wxALIGN_RIGHT|wxALL|wxEXPAND + wxALL|wxEXPAND 0 1 @@ -1040,7 +1040,7 @@ 5 - wxALIGN_RIGHT|wxALL|wxEXPAND + wxALL|wxEXPAND 0 1 diff --git a/src/forms/Bookmark/BookmarkView.cpp b/src/forms/Bookmark/BookmarkView.cpp index f988604..fd82918 100644 --- a/src/forms/Bookmark/BookmarkView.cpp +++ b/src/forms/Bookmark/BookmarkView.cpp @@ -1,7 +1,29 @@ #include "BookmarkView.h" +#include "CubicSDR.h" BookmarkView::BookmarkView( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) : BookmarkPanel(parent, id, pos, size, style) { + doUpdateActive = false; +} + +void BookmarkView::updateActiveList() { + std::vector &demods = wxGetApp().getDemodMgr().getDemodulators(); + DemodulatorInstance *activeDemodulator = wxGetApp().getDemodMgr().getActiveDemodulator(); + DemodulatorInstance *lastActiveDemodulator = wxGetApp().getDemodMgr().getLastActiveDemodulator(); + + m_treeView->Disable(); + m_treeView->DeleteAllItems(); + activeItems.erase(activeItems.begin(),activeItems.end()); + + activeBranch = m_treeView->AddRoot("Active"); + + for (auto demod_i : demods) { + wxTreeItemId itm = m_treeView->AppendItem(activeBranch,demod_i->getLabel()); + activeItems[itm] = demod_i; + } + + m_treeView->Enable(); + m_treeView->ExpandAll(); } void BookmarkView::onTreeBeginLabelEdit( wxTreeEvent& event ) { diff --git a/src/forms/Bookmark/BookmarkView.h b/src/forms/Bookmark/BookmarkView.h index 8319e5c..bbef98c 100644 --- a/src/forms/Bookmark/BookmarkView.h +++ b/src/forms/Bookmark/BookmarkView.h @@ -23,5 +23,7 @@ protected: void onActivate( wxCommandEvent& event ); void onRemove( wxCommandEvent& event ); - + bool doUpdateActive; + wxTreeItemId activeBranch; + std::map activeItems; }; \ No newline at end of file