From cf056acfe644c67b11ff4d2df552b3f87051a365 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Tue, 27 Dec 2016 00:46:12 -0500 Subject: [PATCH] Load/Save view ranges --- src/BookmarkMgr.cpp | 32 ++++++++++++++++++++++++----- src/BookmarkMgr.h | 3 ++- src/forms/Bookmark/BookmarkView.cpp | 2 ++ src/util/DataTree.h | 1 + 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/BookmarkMgr.cpp b/src/BookmarkMgr.cpp index f606b7d..b0efa06 100644 --- a/src/BookmarkMgr.cpp +++ b/src/BookmarkMgr.cpp @@ -12,17 +12,24 @@ void BookmarkMgr::saveToFile(std::string bookmarkFn) { DataTree s("cubicsdr_bookmarks"); DataNode *header = s.rootNode()->newChild("header"); header->newChild("version")->element()->set(wxString(CUBICSDR_VERSION).ToStdWstring()); - + + DataNode *view_ranges = s.rootNode()->newChild("ranges"); + + for (auto re_i : ranges) { + DataNode *range = view_ranges->newChild("range"); + *range->newChild("label") = re_i->label; + *range->newChild("freq") = re_i->freq; + *range->newChild("start") = re_i->startFreq; + *range->newChild("end") = re_i->endFreq; + } + DataNode *modems = s.rootNode()->newChild("modems"); - std::lock_guard < std::mutex > lockData(busy_lock); - for (auto &bmd_i : bmData) { DataNode *group = modems->newChild("group"); *group->newChild("@name") = bmd_i.first; for (auto &bm_i : bmd_i.second ) { - std::lock_guard < std::mutex > lockEnt(bm_i->busy_lock); group->newChildCloneFrom("modem", bm_i->node); } } @@ -34,7 +41,6 @@ void BookmarkMgr::saveToFile(std::string bookmarkFn) { } for (auto &r_i : this->recents) { - std::lock_guard < std::mutex > lockEnt(r_i->busy_lock); recent_modems->newChildCloneFrom("modem", r_i->node); } @@ -64,6 +70,22 @@ void BookmarkMgr::loadFromFile(std::string bookmarkFn) { // TODO: if exists; inform user & optionally load backup return; } + + if (s.rootNode()->hasAnother("ranges")) { + DataNode *view_ranges = s.rootNode()->getNext("ranges"); + while (view_ranges->hasAnother("range")) { + DataNode *range = view_ranges->getNext("range"); + + BookmarkRangeEntry *re = new BookmarkRangeEntry; + + range->getNext("label")->element()->get(re->label); + range->getNext("freq")->element()->get(re->freq); + range->getNext("start")->element()->get(re->startFreq); + range->getNext("end")->element()->get(re->endFreq); + + addRange(re); + } + } if (s.rootNode()->hasAnother("modems")) { DataNode *modems = s.rootNode()->getNext("modems"); diff --git a/src/BookmarkMgr.h b/src/BookmarkMgr.h index 1663694..524b1b1 100644 --- a/src/BookmarkMgr.h +++ b/src/BookmarkMgr.h @@ -29,6 +29,7 @@ public: std::wstring label; + long long freq; long long startFreq; long long endFreq; }; @@ -47,7 +48,7 @@ struct BookmarkRangeEntryCompare : public std::binary_functionstartFreq < b->startFreq; + return a->freq < b->freq; } }; diff --git a/src/forms/Bookmark/BookmarkView.cpp b/src/forms/Bookmark/BookmarkView.cpp index 0a15126..3834965 100644 --- a/src/forms/Bookmark/BookmarkView.cpp +++ b/src/forms/Bookmark/BookmarkView.cpp @@ -792,6 +792,7 @@ void BookmarkView::activateBookmark(BookmarkEntry *bmEnt) { void BookmarkView::activateRange(BookmarkRangeEntry *rangeEnt) { + wxGetApp().setFrequency(rangeEnt->freq); wxGetApp().getAppFrame()->setViewState(rangeEnt->startFreq + (rangeEnt->endFreq - rangeEnt->startFreq) / 2, rangeEnt->endFreq - rangeEnt->startFreq); } @@ -1173,6 +1174,7 @@ void BookmarkView::onRenameGroup( wxCommandEvent& event ) { void BookmarkView::onAddRange( wxCommandEvent& event ) { BookmarkRangeEntry *re = new BookmarkRangeEntry; + re->freq = wxGetApp().getFrequency(); re->startFreq = wxGetApp().getAppFrame()->getViewCenterFreq() - (wxGetApp().getAppFrame()->getViewBandwidth()/2); re->endFreq = wxGetApp().getAppFrame()->getViewCenterFreq() + (wxGetApp().getAppFrame()->getViewBandwidth()/2); re->label = m_labelText->GetValue(); diff --git a/src/util/DataTree.h b/src/util/DataTree.h index 5aee690..f2f3d28 100755 --- a/src/util/DataTree.h +++ b/src/util/DataTree.h @@ -293,6 +293,7 @@ public: operator vector () { vector v; element()->get(v); return v; } const string &operator= (const string &s) { element()->set(s); return s; } + const wstring &operator= (const wstring &s) { element()->set(s); return s; } char operator= (char i) { element()->set(i); return i; } unsigned char operator= (unsigned char i) { element()->set(i); return i; }