diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp
index bdc116d..ab506ef 100644
--- a/src/AppFrame.cpp
+++ b/src/AppFrame.cpp
@@ -1901,6 +1901,10 @@ int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) {
return -1;
}
+ if (bookmarkView && bookmarkView->isMouseInView()) {
+ return -1;
+ }
+
DemodulatorInstance *demod = nullptr, *lastDemod = wxGetApp().getDemodMgr().getLastActiveDemodulator();
int snap = wxGetApp().getFrequencySnap();
@@ -2002,6 +2006,10 @@ int AppFrame::OnGlobalKeyUp(wxKeyEvent &event) {
return -1;
}
+ if (bookmarkView && bookmarkView->isMouseInView()) {
+ return -1;
+ }
+
if (event.ControlDown()) {
return 1;
}
diff --git a/src/BookmarkMgr.cpp b/src/BookmarkMgr.cpp
index b39f758..77eddb8 100644
--- a/src/BookmarkMgr.cpp
+++ b/src/BookmarkMgr.cpp
@@ -25,6 +25,13 @@ void BookmarkMgr::addBookmark(std::string group, DemodulatorInstance *demod) {
bmData[group].insert(be);
}
+void BookmarkMgr::addBookmark(std::string group, BookmarkEntry *be) {
+ std::lock_guard < std::mutex > lock(busy_lock);
+
+ 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);
@@ -93,6 +100,17 @@ void BookmarkMgr::addRecent(DemodulatorInstance *demod) {
}
+void BookmarkMgr::removeRecent(BookmarkEntry *be) {
+ std::lock_guard < std::mutex > lock(busy_lock);
+
+ BookmarkList::iterator bm_i = std::find(recents.begin(),recents.end(), be);
+
+ if (bm_i != recents.end()) {
+ recents.erase(bm_i);
+ }
+}
+
+
BookmarkList BookmarkMgr::getRecents() {
return recents;
}
diff --git a/src/BookmarkMgr.h b/src/BookmarkMgr.h
index 8aa378d..9faca51 100644
--- a/src/BookmarkMgr.h
+++ b/src/BookmarkMgr.h
@@ -40,6 +40,7 @@ public:
void loadFromFile(std::string bookmarkFn);
void addBookmark(std::string group, DemodulatorInstance *demod);
+ void addBookmark(std::string group, BookmarkEntry *be);
void removeBookmark(std::string group, BookmarkEntry *be);
BookmarkList getBookmarks(std::string group);
@@ -52,6 +53,7 @@ public:
void updateBookmarks(std::string group);
void addRecent(DemodulatorInstance *demod);
+ void removeRecent(BookmarkEntry *be);
BookmarkList getRecents();
diff --git a/src/forms/Bookmark/BookmarkPanel.cpp b/src/forms/Bookmark/BookmarkPanel.cpp
index c60e4f7..7c7d50d 100644
--- a/src/forms/Bookmark/BookmarkPanel.cpp
+++ b/src/forms/Bookmark/BookmarkPanel.cpp
@@ -14,7 +14,7 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po
wxBoxSizer* bSizer1;
bSizer1 = new wxBoxSizer( wxVERTICAL );
- m_treeView = new wxTreeCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT );
+ m_treeView = new wxTreeCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_DEFAULT_STYLE|wxTR_EDIT_LABELS|wxTR_HAS_VARIABLE_ROW_HEIGHT|wxTR_HIDE_ROOT|wxTR_SINGLE );
bSizer1->Add( m_treeView, 5, wxEXPAND, 5 );
m_propPanel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
@@ -76,11 +76,17 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po
m_updateTimer.SetOwner( this, wxID_ANY );
// Connect Events
+ this->Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( BookmarkPanel::onEnterWindow ) );
+ this->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BookmarkPanel::onLeaveWindow ) );
+ 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 );
m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_COLLAPSED, wxTreeEventHandler( BookmarkPanel::onTreeCollapse ), NULL, this );
m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_EXPANDED, wxTreeEventHandler( BookmarkPanel::onTreeExpanded ), NULL, this );
+ m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP, wxTreeEventHandler( BookmarkPanel::onTreeItemGetTooltip ), NULL, this );
m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_MENU, wxTreeEventHandler( BookmarkPanel::onTreeItemMenu ), NULL, this );
m_treeView->Connect( wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler( BookmarkPanel::onTreeSelect ), NULL, this );
m_treeView->Connect( wxEVT_COMMAND_TREE_SEL_CHANGING, wxTreeEventHandler( BookmarkPanel::onTreeSelectChanging ), NULL, this );
@@ -96,11 +102,17 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po
BookmarkPanel::~BookmarkPanel()
{
// Disconnect Events
+ this->Disconnect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( BookmarkPanel::onEnterWindow ) );
+ this->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BookmarkPanel::onLeaveWindow ) );
+ 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 );
m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_COLLAPSED, wxTreeEventHandler( BookmarkPanel::onTreeCollapse ), NULL, this );
m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_EXPANDED, wxTreeEventHandler( BookmarkPanel::onTreeExpanded ), NULL, this );
+ m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP, wxTreeEventHandler( BookmarkPanel::onTreeItemGetTooltip ), NULL, this );
m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_MENU, wxTreeEventHandler( BookmarkPanel::onTreeItemMenu ), NULL, this );
m_treeView->Disconnect( wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler( BookmarkPanel::onTreeSelect ), NULL, this );
m_treeView->Disconnect( wxEVT_COMMAND_TREE_SEL_CHANGING, wxTreeEventHandler( BookmarkPanel::onTreeSelectChanging ), NULL, this );
diff --git a/src/forms/Bookmark/BookmarkPanel.fbp b/src/forms/Bookmark/BookmarkPanel.fbp
index 5352bc0..aa64d86 100644
--- a/src/forms/Bookmark/BookmarkPanel.fbp
+++ b/src/forms/Bookmark/BookmarkPanel.fbp
@@ -55,13 +55,13 @@
-
+ onEnterWindow
-
+ onLeaveWindow
@@ -132,7 +132,7 @@
Resizable
1
- wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT
+ wxTR_DEFAULT_STYLE|wxTR_EDIT_LABELS|wxTR_HAS_VARIABLE_ROW_HEIGHT|wxTR_HIDE_ROOT|wxTR_SINGLE
0
@@ -161,11 +161,11 @@
-
+ onTreeBeginDrag
onTreeBeginLabelEdit
-
-
+ onTreeDeleteItem
+ onTreeEndDrag
onTreeEndLabelEdit
onTreeActivate
@@ -173,7 +173,7 @@
onTreeExpanded
-
+ onTreeItemGetTooltip
onTreeItemMenu
diff --git a/src/forms/Bookmark/BookmarkPanel.h b/src/forms/Bookmark/BookmarkPanel.h
index adf25e8..45904a1 100644
--- a/src/forms/Bookmark/BookmarkPanel.h
+++ b/src/forms/Bookmark/BookmarkPanel.h
@@ -50,11 +50,17 @@ class BookmarkPanel : public wxPanel
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 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(); }
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(); }
diff --git a/src/forms/Bookmark/BookmarkView.cpp b/src/forms/Bookmark/BookmarkView.cpp
index 62c9d3d..9db31e0 100644
--- a/src/forms/Bookmark/BookmarkView.cpp
+++ b/src/forms/Bookmark/BookmarkView.cpp
@@ -14,16 +14,22 @@ BookmarkView::BookmarkView( wxWindow* parent, wxWindowID id, const wxPoint& pos,
recentBranch = m_treeView->AppendItem(rootBranch, "Recents");
doUpdateActive.store(true);
+ doUpdateBookmarks.store(true);
activeSel = nullptr;
recentSel = nullptr;
- bookmarksInitialized = false;
+ dragItem = nullptr;
+ dragItemId = nullptr;
hideProps();
m_propPanel->Hide();
m_updateTimer.Start(500);
+// m_treeView->SetDropEffectAboveItem();
+ mouseInView.store(false);
+
}
+
void BookmarkView::onUpdateTimer( wxTimerEvent& event ) {
if (doUpdateActive.load()) {
doUpdateActiveList();
@@ -39,6 +45,7 @@ void BookmarkView::onUpdateTimer( wxTimerEvent& event ) {
}
}
+
void BookmarkView::updateTheme() {
wxColour bgColor(ThemeMgr::mgr.currentTheme->generalBackground);
wxColour textColor(ThemeMgr::mgr.currentTheme->text);
@@ -69,10 +76,12 @@ void BookmarkView::updateActiveList() {
doUpdateActive.store(true);
}
+
void BookmarkView::updateBookmarks() {
doUpdateBookmarks.store(true);
}
+
void BookmarkView::updateBookmarks(std::string group) {
doUpdateBookmarkGroup.insert(group);
doUpdateBookmarks.store(true);
@@ -80,7 +89,6 @@ void BookmarkView::updateBookmarks(std::string group) {
wxTreeItemId BookmarkView::refreshBookmarks() {
-// if (!bookmarksInitialized) {
groupNames = wxGetApp().getBookmarkMgr().getGroups();
if (!groupNames.size()) {
wxGetApp().getBookmarkMgr().getGroup("Ungrouped");
@@ -119,10 +127,9 @@ wxTreeItemId BookmarkView::refreshBookmarks() {
}
return bmSelFound;
- // bookmarksInitialized = true;
-// }
}
+
void BookmarkView::doUpdateActiveList() {
std::vector &demods = wxGetApp().getDemodMgr().getDemodulators();
@@ -171,19 +178,36 @@ void BookmarkView::doUpdateActiveList() {
if (selItem != nullptr) {
m_treeView->SelectItem(selItem);
}
-
- m_treeView->Enable();
- m_treeView->ExpandAll();
}
+
void BookmarkView::onTreeBeginLabelEdit( wxTreeEvent& event ) {
- event.Skip();
+ TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(event.GetItem()));
+
+ if (!tvi) {
+ event.Veto();
+ return;
+ }
+
+ if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) {
+ event.Allow();
+ } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) {
+ event.Veto();
+ } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) {
+ event.Allow();
+ } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) {
+ event.Allow();
+ } else {
+ event.Veto();
+ }
}
+
void BookmarkView::onTreeEndLabelEdit( wxTreeEvent& event ) {
event.Skip();
}
+
void BookmarkView::onTreeActivate( wxTreeEvent& event ) {
if (recentSel) {
activateBookmark(recentSel);
@@ -193,14 +217,17 @@ void BookmarkView::onTreeActivate( wxTreeEvent& event ) {
}
}
+
void BookmarkView::onTreeCollapse( wxTreeEvent& event ) {
event.Skip();
}
+
void BookmarkView::onTreeExpanded( wxTreeEvent& event ) {
event.Skip();
}
+
void BookmarkView::onTreeItemMenu( wxTreeEvent& event ) {
if (m_treeView->GetSelection() == bookmarkBranch) {
wxMenu menu;
@@ -210,6 +237,7 @@ void BookmarkView::onTreeItemMenu( wxTreeEvent& event ) {
}
}
+
void BookmarkView::onMenuItem(wxCommandEvent& event) {
if (event.GetId() == wxCONTEXT_ADD_GROUP_ID) {
wxString stringVal = wxGetTextFromUser("Enter Group Name", "Add Group", "");
@@ -221,6 +249,11 @@ void BookmarkView::onMenuItem(wxCommandEvent& event) {
}
+bool BookmarkView::isMouseInView() {
+ return mouseInView.load();
+}
+
+
void BookmarkView::hideProps() {
m_frequencyLabel->Hide();
m_frequencyVal->Hide();
@@ -239,6 +272,7 @@ void BookmarkView::hideProps() {
m_removeButton->Hide();
}
+
void BookmarkView::activeSelection(DemodulatorInstance *dsel) {
activeSel = dsel;
recentSel = nullptr;
@@ -268,6 +302,7 @@ void BookmarkView::activeSelection(DemodulatorInstance *dsel) {
this->Layout();
}
+
void BookmarkView::activateBookmark(BookmarkEntry *bmEnt) {
DemodulatorInstance *newDemod = wxGetApp().getDemodMgr().loadInstance(bmEnt->node);
newDemod->run();
@@ -280,6 +315,7 @@ void BookmarkView::activateBookmark(BookmarkEntry *bmEnt) {
doUpdateActiveList();
}
+
void BookmarkView::bookmarkSelection(BookmarkEntry *bmSel) {
bookmarkSel = bmSel;
recentSel = nullptr;
@@ -343,6 +379,7 @@ void BookmarkView::recentSelection(BookmarkEntry *bmSel) {
this->Layout();
}
+
void BookmarkView::onTreeSelect( wxTreeEvent& event ) {
TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(event.GetItem()));
@@ -367,14 +404,17 @@ void BookmarkView::onTreeSelect( wxTreeEvent& event ) {
}
}
+
void BookmarkView::onTreeSelectChanging( wxTreeEvent& event ) {
event.Skip();
}
+
void BookmarkView::onLabelText( wxCommandEvent& event ) {
event.Skip();
}
+
void BookmarkView::onDoubleClickFreq( wxMouseEvent& event ) {
if (activeSel) {
wxGetApp().getDemodMgr().setActiveDemodulator(activeSel, false);
@@ -382,6 +422,7 @@ void BookmarkView::onDoubleClickFreq( wxMouseEvent& event ) {
}
}
+
void BookmarkView::onDoubleClickBandwidth( wxMouseEvent& event ) {
if (activeSel) {
wxGetApp().getDemodMgr().setActiveDemodulator(activeSel, false);
@@ -389,6 +430,7 @@ void BookmarkView::onDoubleClickBandwidth( wxMouseEvent& event ) {
}
}
+
void BookmarkView::onBookmark( wxCommandEvent& event ) {
if (activeSel) {
wxGetApp().getBookmarkMgr().addBookmark("Ungrouped", activeSel);
@@ -396,6 +438,7 @@ void BookmarkView::onBookmark( wxCommandEvent& event ) {
}
}
+
void BookmarkView::onActivate( wxCommandEvent& event ) {
if (recentSel) {
activateBookmark(recentSel);
@@ -405,6 +448,7 @@ void BookmarkView::onActivate( wxCommandEvent& event ) {
}
}
+
void BookmarkView::onRemove( wxCommandEvent& event ) {
if (activeSel != nullptr) {
wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, false);
@@ -414,3 +458,125 @@ void BookmarkView::onRemove( wxCommandEvent& event ) {
}
}
+
+void BookmarkView::onTreeBeginDrag( wxTreeEvent& event ) {
+ TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(event.GetItem()));
+
+ dragItem = nullptr;
+ dragItemId = nullptr;
+
+ if (!tvi) {
+ event.Veto();
+ return;
+ }
+
+ bool bAllow = false;
+ std::string dragItemName;
+
+ if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) {
+ bAllow = true;
+ dragItemName = tvi->demod->getLabel();
+ } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) {
+ bAllow = true;
+ dragItemName = tvi->bookmarkEnt->label;
+ } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) {
+ bAllow = true;
+ dragItemName = tvi->bookmarkEnt->label;
+ }
+
+ if (bAllow) {
+ wxColour bgColor(ThemeMgr::mgr.currentTheme->generalBackground);
+ wxColour textColor(ThemeMgr::mgr.currentTheme->text);
+
+ m_treeView->SetBackgroundColour(textColor);
+ m_treeView->SetForegroundColour(bgColor);
+ m_treeView->SetToolTip("Dragging " + dragItemName);
+
+ dragItem = tvi;
+ dragItemId = event.GetItem();
+
+ event.Allow();
+ } else {
+ event.Veto();
+ }
+}
+
+
+void BookmarkView::onTreeEndDrag( wxTreeEvent& event ) {
+
+ wxColour bgColor(ThemeMgr::mgr.currentTheme->generalBackground);
+ wxColour textColor(ThemeMgr::mgr.currentTheme->text);
+
+ m_treeView->SetBackgroundColour(bgColor);
+ m_treeView->SetForegroundColour(textColor);
+ m_treeView->UnsetToolTip();
+
+ if (!event.GetItem()) {
+ event.Veto();
+ return;
+ }
+
+ TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(event.GetItem()));
+
+ if (!tvi) {
+ if (event.GetItem() == bookmarkBranch) {
+ if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) {
+ wxGetApp().getBookmarkMgr().addBookmark("Ungrouped", dragItem->demod);
+ wxGetApp().getBookmarkMgr().updateBookmarks();
+ }else if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) {
+ wxGetApp().getBookmarkMgr().removeRecent(dragItem->bookmarkEnt);
+ wxGetApp().getBookmarkMgr().addBookmark("Ungrouped", dragItem->bookmarkEnt);
+ m_treeView->Delete(dragItemId);
+ wxGetApp().getBookmarkMgr().updateBookmarks();
+ wxGetApp().getBookmarkMgr().updateActiveList();
+ }
+ }
+
+ return;
+ }
+
+ if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) {
+ if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { // Active -> Group Item
+ wxGetApp().getBookmarkMgr().addBookmark(tvi->groupName, dragItem->demod);
+ wxGetApp().getBookmarkMgr().updateBookmarks();
+ } else if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { // Recent -> Group Item
+ wxGetApp().getBookmarkMgr().removeRecent(dragItem->bookmarkEnt);
+ wxGetApp().getBookmarkMgr().addBookmark(tvi->groupName, dragItem->bookmarkEnt);
+ m_treeView->Delete(dragItemId);
+ wxGetApp().getBookmarkMgr().updateBookmarks();
+ wxGetApp().getBookmarkMgr().updateActiveList();
+ }
+ } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) {
+ if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { // Active -> Same Group
+ wxGetApp().getBookmarkMgr().addBookmark(tvi->groupName, dragItem->demod);
+ wxGetApp().getBookmarkMgr().updateBookmarks();
+ } else if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { // Recent -> Same Group
+ wxGetApp().getBookmarkMgr().removeRecent(dragItem->bookmarkEnt);
+ wxGetApp().getBookmarkMgr().addBookmark(tvi->groupName, dragItem->bookmarkEnt);
+ m_treeView->Delete(dragItemId);
+ wxGetApp().getBookmarkMgr().updateBookmarks();
+ wxGetApp().getBookmarkMgr().updateActiveList();
+ }
+ }
+}
+
+
+void BookmarkView::onTreeDeleteItem( wxTreeEvent& event ) {
+ event.Skip();
+}
+
+
+void BookmarkView::onTreeItemGetTooltip( wxTreeEvent& event ) {
+
+ event.Skip();
+}
+
+
+void BookmarkView::onEnterWindow( wxMouseEvent& event ) {
+ mouseInView.store(true);
+}
+
+
+void BookmarkView::onLeaveWindow( wxMouseEvent& event ) {
+ mouseInView.store(false);
+}
diff --git a/src/forms/Bookmark/BookmarkView.h b/src/forms/Bookmark/BookmarkView.h
index 03815af..6bf2625 100644
--- a/src/forms/Bookmark/BookmarkView.h
+++ b/src/forms/Bookmark/BookmarkView.h
@@ -39,6 +39,8 @@ public:
wxTreeItemId refreshBookmarks();
void updateTheme();
void onMenuItem(wxCommandEvent& event);
+ bool isMouseInView();
+
protected:
@@ -61,16 +63,26 @@ protected:
void onBookmark( wxCommandEvent& event );
void onActivate( wxCommandEvent& event );
void onRemove( wxCommandEvent& 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 );
+
+ std::atomic_bool mouseInView;
wxTreeItemId rootBranch, activeBranch, bookmarkBranch, recentBranch;
+ TreeViewItem *dragItem;
+ wxTreeItemId dragItemId;
+
// Bookmarks
std::atomic_bool doUpdateBookmarks;
std::set< std::string > doUpdateBookmarkGroup;
BookmarkNames groupNames;
std::map groups;
BookmarkEntry *bookmarkSel;
- bool bookmarksInitialized;
// Active