diff --git a/src/forms/Bookmark/BookmarkPanel.cpp b/src/forms/Bookmark/BookmarkPanel.cpp index 08ffeaf..b5b79f7 100644 --- a/src/forms/Bookmark/BookmarkPanel.cpp +++ b/src/forms/Bookmark/BookmarkPanel.cpp @@ -83,7 +83,6 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po m_treeView->Connect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ), NULL, this ); m_treeView->Connect( wxEVT_COMMAND_TREE_BEGIN_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeBeginDrag ), NULL, this ); m_treeView->Connect( wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, wxTreeEventHandler( BookmarkPanel::onTreeBeginLabelEdit ), NULL, this ); - m_treeView->Connect( wxEVT_COMMAND_TREE_DELETE_ITEM, wxTreeEventHandler( BookmarkPanel::onTreeDeleteItem ), NULL, this ); m_treeView->Connect( wxEVT_COMMAND_TREE_END_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeEndDrag ), NULL, this ); m_treeView->Connect( wxEVT_COMMAND_TREE_END_LABEL_EDIT, wxTreeEventHandler( BookmarkPanel::onTreeEndLabelEdit ), NULL, this ); m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler( BookmarkPanel::onTreeActivate ), NULL, this ); @@ -108,7 +107,6 @@ BookmarkPanel::~BookmarkPanel() m_treeView->Disconnect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ), NULL, this ); m_treeView->Disconnect( wxEVT_COMMAND_TREE_BEGIN_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeBeginDrag ), NULL, this ); m_treeView->Disconnect( wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, wxTreeEventHandler( BookmarkPanel::onTreeBeginLabelEdit ), NULL, this ); - m_treeView->Disconnect( wxEVT_COMMAND_TREE_DELETE_ITEM, wxTreeEventHandler( BookmarkPanel::onTreeDeleteItem ), NULL, this ); m_treeView->Disconnect( wxEVT_COMMAND_TREE_END_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeEndDrag ), NULL, this ); m_treeView->Disconnect( wxEVT_COMMAND_TREE_END_LABEL_EDIT, wxTreeEventHandler( BookmarkPanel::onTreeEndLabelEdit ), NULL, this ); m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler( BookmarkPanel::onTreeActivate ), NULL, this ); diff --git a/src/forms/Bookmark/BookmarkPanel.fbp b/src/forms/Bookmark/BookmarkPanel.fbp index 1d1ba2c..d7d6657 100644 --- a/src/forms/Bookmark/BookmarkPanel.fbp +++ b/src/forms/Bookmark/BookmarkPanel.fbp @@ -164,7 +164,7 @@ onTreeBeginDrag onTreeBeginLabelEdit - onTreeDeleteItem + onTreeEndDrag onTreeEndLabelEdit diff --git a/src/forms/Bookmark/BookmarkPanel.h b/src/forms/Bookmark/BookmarkPanel.h index abd0327..946faac 100644 --- a/src/forms/Bookmark/BookmarkPanel.h +++ b/src/forms/Bookmark/BookmarkPanel.h @@ -52,7 +52,6 @@ class BookmarkPanel : public wxPanel virtual void onMotion( wxMouseEvent& event ) { event.Skip(); } virtual void onTreeBeginDrag( wxTreeEvent& event ) { event.Skip(); } virtual void onTreeBeginLabelEdit( wxTreeEvent& event ) { event.Skip(); } - virtual void onTreeDeleteItem( wxTreeEvent& event ) { event.Skip(); } virtual void onTreeEndDrag( wxTreeEvent& event ) { event.Skip(); } virtual void onTreeEndLabelEdit( wxTreeEvent& event ) { event.Skip(); } virtual void onTreeActivate( wxTreeEvent& event ) { event.Skip(); } diff --git a/src/forms/Bookmark/BookmarkView.cpp b/src/forms/Bookmark/BookmarkView.cpp index a72a62c..c15dd50 100644 --- a/src/forms/Bookmark/BookmarkView.cpp +++ b/src/forms/Bookmark/BookmarkView.cpp @@ -53,6 +53,8 @@ BookmarkView::BookmarkView( wxWindow* parent, wxWindowID id, const wxPoint& pos, mouseInView.store(false); visualDragItem = nullptr; + nextEnt = nullptr; + nextDemod = nullptr; } @@ -165,7 +167,7 @@ wxTreeItemId BookmarkView::refreshBookmarks() { } BookmarkList bmList = wxGetApp().getBookmarkMgr().getBookmarks(gn_i); - for (auto bmEnt : bmList) { + for (auto &bmEnt : bmList) { TreeViewItem* tvi = new TreeViewItem(); tvi->type = TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK; tvi->bookmarkEnt = bmEnt; @@ -178,6 +180,10 @@ wxTreeItemId BookmarkView::refreshBookmarks() { if (prevSel != nullptr && prevSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK && prevSel->bookmarkEnt == bmEnt && groupExpanded) { bmSelFound = itm; } + if (nextEnt == bmEnt) { + bmSelFound = itm; + nextEnt = nullptr; + } } if (groupExpanded) { @@ -216,8 +222,8 @@ std::wstring BookmarkView::getActiveDisplayName(DemodulatorInstance *demod) { void BookmarkView::doUpdateActiveList() { std::vector &demods = wxGetApp().getDemodMgr().getDemodulators(); - DemodulatorInstance *activeDemodulator = wxGetApp().getDemodMgr().getActiveDemodulator(); -// DemodulatorInstance *lastActiveDemodulator = wxGetApp().getDemodMgr().getLastActiveDemodulator(); +// DemodulatorInstance *activeDemodulator = wxGetApp().getDemodMgr().getActiveDemodulator(); + DemodulatorInstance *lastActiveDemodulator = wxGetApp().getDemodMgr().getLastActiveDemodulator(); TreeViewItem *prevSel = itemToTVI(m_treeView->GetSelection()); @@ -237,12 +243,10 @@ void BookmarkView::doUpdateActiveList() { wxTreeItemId itm = m_treeView->AppendItem(activeBranch,activeLabel); m_treeView->SetItemData(itm, tvi); - if (activeDemodulator) { - if (activeDemodulator == demod_i && activeExpandState) { - selItem = itm; - } - } - else if (prevSel != nullptr && prevSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE && prevSel->demod == demod_i && activeExpandState) { + if (nextDemod != nullptr && nextDemod == demod_i) { + selItem = itm; + nextDemod = nullptr; + } else if (!selItem && activeExpandState && lastActiveDemodulator && lastActiveDemodulator == demod_i) { selItem = itm; } } @@ -253,13 +257,14 @@ void BookmarkView::doUpdateActiveList() { BookmarkList bmRecents = wxGetApp().getBookmarkMgr().getRecents(); m_treeView->DeleteChildren(recentBranch); - for (auto bmr_i: bmRecents) { + for (auto &bmr_i: bmRecents) { TreeViewItem* tvi = new TreeViewItem(); tvi->type = TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT; tvi->bookmarkEnt = bmr_i; std::wstring labelVal; bmr_i->node->child("user_label")->element()->get(labelVal); + if (labelVal == "") { std::string wstr = frequencyToStr(bmr_i->frequency) + " " + bmr_i->type; labelVal = std::wstring(wstr.begin(),wstr.end()); @@ -267,7 +272,11 @@ void BookmarkView::doUpdateActiveList() { wxTreeItemId itm = m_treeView->AppendItem(recentBranch, labelVal); m_treeView->SetItemData(itm, tvi); - if (prevSel && prevSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT && prevSel->bookmarkEnt == bmr_i && recentExpandState) { + + if (nextEnt == bmr_i) { + selItem = itm; + nextEnt = nullptr; + } else if (!selItem && recentExpandState && prevSel && prevSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT && prevSel->bookmarkEnt == bmr_i) { selItem = itm; } } @@ -344,11 +353,14 @@ void BookmarkView::onTreeActivate( wxTreeEvent& event ) { if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { if (!tvi->demod->isActive()) { wxGetApp().setFrequency(tvi->demod->getFrequency()); + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr,true); wxGetApp().getDemodMgr().setActiveDemodulator(tvi->demod,false); + nextDemod = tvi->demod; } } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { wxGetApp().getBookmarkMgr().removeRecent(tvi->bookmarkEnt); activateBookmark(tvi->bookmarkEnt); + nextEnt = tvi->bookmarkEnt; wxGetApp().getBookmarkMgr().updateActiveList(); } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { activateBookmark(tvi->bookmarkEnt); @@ -465,27 +477,34 @@ wxButton *BookmarkView::addButton(wxWindow *parent, std::string labelVal, wxObje void BookmarkView::doBookmarkActive(std::string group, DemodulatorInstance *demod) { wxGetApp().getBookmarkMgr().addBookmark(group, demod); wxGetApp().getBookmarkMgr().updateBookmarks(); - activeSelection(demod); } void BookmarkView::doBookmarkRecent(std::string group, BookmarkEntry *be) { wxGetApp().getBookmarkMgr().removeRecent(be); wxGetApp().getBookmarkMgr().addBookmark(group, be); + nextEnt = be; wxGetApp().getBookmarkMgr().updateBookmarks(); - wxGetApp().getBookmarkMgr().updateActiveList(); bookmarkSelection(be); - } void BookmarkView::doMoveBookmark(BookmarkEntry *be, std::string group) { wxGetApp().getBookmarkMgr().moveBookmark(be, group); + nextEnt = be; wxGetApp().getBookmarkMgr().updateBookmarks(); bookmarkSelection(be); } +void BookmarkView::doRemoveActive(DemodulatorInstance *demod) { + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, true); + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, false); + wxGetApp().removeDemodulator(demod); + wxGetApp().getDemodMgr().deleteThread(demod); +} + + void BookmarkView::updateBookmarkChoices() { if (!bookmarkChoices.empty()) { bookmarkChoices.erase(bookmarkChoices.begin(),bookmarkChoices.end()); @@ -577,7 +596,12 @@ void BookmarkView::activeSelection(DemodulatorInstance *dsel) { void BookmarkView::activateBookmark(BookmarkEntry *bmEnt) { DemodulatorInstance *newDemod = wxGetApp().getDemodMgr().loadInstance(bmEnt->node); - TreeViewItem *sel = itemToTVI(m_treeView->GetSelection()); + nextDemod = newDemod; + + wxTreeItemId selItem = m_treeView->GetSelection(); + if (selItem) { + m_treeView->SelectItem(selItem, false); + } long long freq = newDemod->getFrequency(); long long currentFreq = wxGetApp().getFrequency(); @@ -590,6 +614,7 @@ void BookmarkView::activateBookmark(BookmarkEntry *bmEnt) { newDemod->run(); newDemod->setActive(true); wxGetApp().bindDemodulator(newDemod); + doUpdateActiveList(); } @@ -724,8 +749,9 @@ void BookmarkView::onTreeSelect( wxTreeEvent& event ) { } if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + activeSelection(tvi->demod); if (tvi->demod->isActive()) { - activeSelection(tvi->demod); + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, true); wxGetApp().getDemodMgr().setActiveDemodulator(tvi->demod, false); } } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { @@ -778,6 +804,7 @@ void BookmarkView::onDoubleClickFreq( wxMouseEvent& event ) { TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, true); wxGetApp().getDemodMgr().setActiveDemodulator(curSel->demod, false); wxGetApp().showFrequencyInput(FrequencyDialog::FrequencyDialogTarget::FDIALOG_TARGET_DEFAULT); } @@ -788,6 +815,7 @@ void BookmarkView::onDoubleClickBandwidth( wxMouseEvent& event ) { TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, true); wxGetApp().getDemodMgr().setActiveDemodulator(curSel->demod, false); wxGetApp().showFrequencyInput(FrequencyDialog::FrequencyDialogTarget::FDIALOG_TARGET_BANDWIDTH); } @@ -801,9 +829,7 @@ void BookmarkView::onRemoveActive( wxCommandEvent& event ) { if (editingLabel) { return; } - wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, false); - wxGetApp().removeDemodulator(curSel->demod); - wxGetApp().getDemodMgr().deleteThread(curSel->demod); + doRemoveActive(curSel->demod); m_treeView->Delete(m_treeView->GetSelection()); } } @@ -992,11 +1018,6 @@ void BookmarkView::onTreeEndDrag( wxTreeEvent& event ) { } -void BookmarkView::onTreeDeleteItem( wxTreeEvent& event ) { - event.Skip(); -} - - void BookmarkView::onTreeItemGetTooltip( wxTreeEvent& event ) { event.Skip(); diff --git a/src/forms/Bookmark/BookmarkView.h b/src/forms/Bookmark/BookmarkView.h index c8e36a8..78db1fc 100644 --- a/src/forms/Bookmark/BookmarkView.h +++ b/src/forms/Bookmark/BookmarkView.h @@ -79,7 +79,6 @@ protected: void onDoubleClickBandwidth( wxMouseEvent& event ); void onTreeBeginDrag( wxTreeEvent& event ); void onTreeEndDrag( wxTreeEvent& event ); - void onTreeDeleteItem( wxTreeEvent& event ); void onTreeItemGetTooltip( wxTreeEvent& event ); void onEnterWindow( wxMouseEvent& event ); void onLeaveWindow( wxMouseEvent& event ); @@ -96,6 +95,7 @@ protected: void doBookmarkActive(std::string group, DemodulatorInstance *demod); void doBookmarkRecent(std::string group, BookmarkEntry *be); void doMoveBookmark(BookmarkEntry *be, std::string group); + void doRemoveActive(DemodulatorInstance *demod); void updateBookmarkChoices(); void addBookmarkChoice(wxWindow *parent); @@ -136,4 +136,8 @@ protected: // Active std::atomic_bool doUpdateActive; + + // Focus + BookmarkEntry *nextEnt; + DemodulatorInstance *nextDemod; };