diff --git a/src/forms/Bookmark/BookmarkPanel.cpp b/src/forms/Bookmark/BookmarkPanel.cpp index 5bace65..08ffeaf 100644 --- a/src/forms/Bookmark/BookmarkPanel.cpp +++ b/src/forms/Bookmark/BookmarkPanel.cpp @@ -79,6 +79,8 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po // Connect Events this->Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( BookmarkPanel::onEnterWindow ) ); this->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BookmarkPanel::onLeaveWindow ) ); + this->Connect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ) ); + 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 ); @@ -102,6 +104,8 @@ BookmarkPanel::~BookmarkPanel() // Disconnect Events this->Disconnect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( BookmarkPanel::onEnterWindow ) ); this->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BookmarkPanel::onLeaveWindow ) ); + this->Disconnect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ) ); + 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 ); diff --git a/src/forms/Bookmark/BookmarkPanel.fbp b/src/forms/Bookmark/BookmarkPanel.fbp index f3e9a21..1d1ba2c 100644 --- a/src/forms/Bookmark/BookmarkPanel.fbp +++ b/src/forms/Bookmark/BookmarkPanel.fbp @@ -68,7 +68,7 @@ - + onMotion @@ -152,7 +152,7 @@ - + onMotion diff --git a/src/forms/Bookmark/BookmarkPanel.h b/src/forms/Bookmark/BookmarkPanel.h index 99c78fd..abd0327 100644 --- a/src/forms/Bookmark/BookmarkPanel.h +++ b/src/forms/Bookmark/BookmarkPanel.h @@ -49,6 +49,7 @@ class BookmarkPanel : public wxPanel // 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 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(); } diff --git a/src/forms/Bookmark/BookmarkView.cpp b/src/forms/Bookmark/BookmarkView.cpp index e1a3a52..a72a62c 100644 --- a/src/forms/Bookmark/BookmarkView.cpp +++ b/src/forms/Bookmark/BookmarkView.cpp @@ -15,6 +15,20 @@ #define BOOKMARK_VIEW_STR_ADD_GROUP_DESC "Enter Group Name" #define BOOKMARK_VIEW_STR_UNNAMED "Unnamed" + +BookmarkViewVisualDragItem::BookmarkViewVisualDragItem(wxString labelValue) : wxDialog(NULL, wxID_ANY, L"", wxPoint(20,20), wxSize(-1,-1), wxSTAY_ON_TOP | wxALL ) { + + wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); + wxStaticText *label = new wxStaticText( this, wxID_ANY, labelValue, wxDefaultPosition, wxDefaultSize, wxEXPAND ); + + sizer->Add(label, 1, wxALL | wxEXPAND, 5); + + SetSizerAndFit(sizer); + + Show(); +} + + BookmarkView::BookmarkView( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) : BookmarkPanel(parent, id, pos, size, style) { rootBranch = m_treeView->AddRoot("Root"); @@ -38,6 +52,7 @@ BookmarkView::BookmarkView( wxWindow* parent, wxWindowID id, const wxPoint& pos, m_updateTimer.Start(500); mouseInView.store(false); + visualDragItem = nullptr; } @@ -156,12 +171,7 @@ wxTreeItemId BookmarkView::refreshBookmarks() { tvi->bookmarkEnt = bmEnt; tvi->groupName = gn_i; - std::wstring labelVal = bmEnt->label; - - if (labelVal == "") { - std::string freqStr = frequencyToStr(bmEnt->frequency) + " " + bmEnt->type; - labelVal = wstring(freqStr.begin(),freqStr.end()); - } + std::wstring labelVal = getBookmarkEntryDisplayName(bmEnt); wxTreeItemId itm = m_treeView->AppendItem(groupItem, labelVal); m_treeView->SetItemData(itm, tvi); @@ -180,6 +190,29 @@ wxTreeItemId BookmarkView::refreshBookmarks() { } +std::wstring BookmarkView::getBookmarkEntryDisplayName(BookmarkEntry *bmEnt) { + std::wstring dispName = bmEnt->label; + + if (dispName == "") { + std::string freqStr = frequencyToStr(bmEnt->frequency) + " " + bmEnt->type; + dispName = wstring(freqStr.begin(),freqStr.end()); + } + + return dispName; +} + +std::wstring BookmarkView::getActiveDisplayName(DemodulatorInstance *demod) { + std::wstring activeName = demod->getDemodulatorUserLabel(); + + if (activeName == "") { + std::string wstr = frequencyToStr(demod->getFrequency()) + " " + demod->getDemodulatorType(); + activeName = std::wstring(wstr.begin(),wstr.end()); + } + + return activeName; +} + + void BookmarkView::doUpdateActiveList() { std::vector &demods = wxGetApp().getDemodMgr().getDemodulators(); @@ -199,11 +232,7 @@ void BookmarkView::doUpdateActiveList() { tvi->type = TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE; tvi->demod = demod_i; - wxString activeLabel = demod_i->getDemodulatorUserLabel(); - if (activeLabel == "") { - std::string wstr = frequencyToStr(demod_i->getFrequency()) + " " + demod_i->getDemodulatorType(); - activeLabel = std::wstring(wstr.begin(),wstr.end()); - } + wxString activeLabel = getActiveDisplayName(demod_i); wxTreeItemId itm = m_treeView->AppendItem(activeBranch,activeLabel); m_treeView->SetItemData(itm, tvi); @@ -865,7 +894,9 @@ void BookmarkView::onTreeBeginDrag( wxTreeEvent& event ) { dragItem = nullptr; dragItemId = nullptr; - + + SetCursor(wxCURSOR_CROSS); + if (!tvi) { event.Veto(); return; @@ -876,17 +907,10 @@ void BookmarkView::onTreeBeginDrag( wxTreeEvent& event ) { if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { bAllow = true; - dragItemName = tvi->demod->getDemodulatorUserLabel(); - if (dragItemName == "") { - std::string wstr = tvi->demod->getLabel(); - dragItemName = std::wstring(wstr.begin(),wstr.end()); - } - } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { + dragItemName = getActiveDisplayName(tvi->demod); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT || tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { bAllow = true; - dragItemName = tvi->bookmarkEnt->label; - } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { - bAllow = true; - dragItemName = tvi->bookmarkEnt->label; + dragItemName = getBookmarkEntryDisplayName(tvi->bookmarkEnt); } if (bAllow) { @@ -895,11 +919,13 @@ void BookmarkView::onTreeBeginDrag( wxTreeEvent& event ) { m_treeView->SetBackgroundColour(textColor); m_treeView->SetForegroundColour(bgColor); - m_treeView->SetToolTip("Dragging " + dragItemName); +// m_treeView->SetToolTip("Dragging " + dragItemName); dragItem = tvi; dragItemId = event.GetItem(); + visualDragItem = new BookmarkViewVisualDragItem(dragItemName); + event.Allow(); } else { event.Veto(); @@ -916,6 +942,14 @@ void BookmarkView::onTreeEndDrag( wxTreeEvent& event ) { m_treeView->SetForegroundColour(textColor); m_treeView->UnsetToolTip(); + SetCursor(wxCURSOR_ARROW); + + if (visualDragItem != nullptr) { + visualDragItem->Destroy(); + delete visualDragItem; + visualDragItem = nullptr; + } + if (!event.GetItem()) { event.Veto(); return; @@ -978,6 +1012,18 @@ void BookmarkView::onLeaveWindow( wxMouseEvent& event ) { mouseInView.store(false); } +void BookmarkView::onMotion( wxMouseEvent& event ) { + wxPoint pos = ClientToScreen(event.GetPosition()); + + pos += wxPoint(30,-10); + + if (visualDragItem != nullptr) { + visualDragItem->SetPosition(pos); + } + + event.Skip(); +} + TreeViewItem *BookmarkView::itemToTVI(wxTreeItemId item) { TreeViewItem* tvi = nullptr; diff --git a/src/forms/Bookmark/BookmarkView.h b/src/forms/Bookmark/BookmarkView.h index 0f0e710..c8e36a8 100644 --- a/src/forms/Bookmark/BookmarkView.h +++ b/src/forms/Bookmark/BookmarkView.h @@ -3,6 +3,7 @@ #include "BookmarkPanel.h" #include "BookmarkMgr.h" #include "wx/choice.h" +#include "wx/dialog.h" class TreeViewItem : public wxTreeItemData { public: @@ -25,6 +26,13 @@ public: }; +class BookmarkViewVisualDragItem : public wxDialog { +public: + BookmarkViewVisualDragItem(wxString labelValue = L"Popup"); +}; + + + class BookmarkView : public BookmarkPanel { public: BookmarkView( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxTAB_TRAVERSAL ); @@ -53,6 +61,9 @@ protected: void showProps(); void onUpdateTimer( wxTimerEvent& event ); + + std::wstring getBookmarkEntryDisplayName(BookmarkEntry *bmEnt); + std::wstring getActiveDisplayName(DemodulatorInstance *demod); void doUpdateActiveList(); void onTreeBeginLabelEdit( wxTreeEvent& event ); @@ -72,6 +83,7 @@ protected: void onTreeItemGetTooltip( wxTreeEvent& event ); void onEnterWindow( wxMouseEvent& event ); void onLeaveWindow( wxMouseEvent& event ); + void onMotion( wxMouseEvent& event ); void clearButtons(); @@ -110,6 +122,7 @@ protected: TreeViewItem *dragItem; wxTreeItemId dragItemId; + BookmarkViewVisualDragItem *visualDragItem; bool editingLabel;