Show drag item name in popup; follow mouse position.

This commit is contained in:
Charles J. Cliffe 2016-12-16 22:05:25 -05:00
parent 5924ebc057
commit fd928de3aa
5 changed files with 89 additions and 25 deletions

View File

@ -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 );

View File

@ -68,7 +68,7 @@
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMotion">onMotion</event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
@ -152,7 +152,7 @@
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMotion">onMotion</event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>

View File

@ -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(); }

View File

@ -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<DemodulatorInstance *> &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;

View File

@ -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;