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