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;