mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-11-23 12:18:37 -05:00
Some basic BookmarkView drag+drop functionality
This commit is contained in:
parent
824598cb1a
commit
14cf709447
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
|
||||
|
||||
|
@ -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 );
|
||||
|
@ -55,13 +55,13 @@
|
||||
<event name="OnAuiPaneRestore"></event>
|
||||
<event name="OnAuiRender"></event>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEnterWindow">onEnterWindow</event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnInitDialog"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeaveWindow">onLeaveWindow</event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
@ -132,7 +132,7 @@
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT</property>
|
||||
<property name="style">wxTR_DEFAULT_STYLE|wxTR_EDIT_LABELS|wxTR_HAS_VARIABLE_ROW_HEIGHT|wxTR_HIDE_ROOT|wxTR_SINGLE</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
@ -161,11 +161,11 @@
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnTreeBeginDrag"></event>
|
||||
<event name="OnTreeBeginDrag">onTreeBeginDrag</event>
|
||||
<event name="OnTreeBeginLabelEdit">onTreeBeginLabelEdit</event>
|
||||
<event name="OnTreeBeginRDrag"></event>
|
||||
<event name="OnTreeDeleteItem"></event>
|
||||
<event name="OnTreeEndDrag"></event>
|
||||
<event name="OnTreeDeleteItem">onTreeDeleteItem</event>
|
||||
<event name="OnTreeEndDrag">onTreeEndDrag</event>
|
||||
<event name="OnTreeEndLabelEdit">onTreeEndLabelEdit</event>
|
||||
<event name="OnTreeGetInfo"></event>
|
||||
<event name="OnTreeItemActivated">onTreeActivate</event>
|
||||
@ -173,7 +173,7 @@
|
||||
<event name="OnTreeItemCollapsing"></event>
|
||||
<event name="OnTreeItemExpanded">onTreeExpanded</event>
|
||||
<event name="OnTreeItemExpanding"></event>
|
||||
<event name="OnTreeItemGetTooltip"></event>
|
||||
<event name="OnTreeItemGetTooltip">onTreeItemGetTooltip</event>
|
||||
<event name="OnTreeItemMenu">onTreeItemMenu</event>
|
||||
<event name="OnTreeItemMiddleClick"></event>
|
||||
<event name="OnTreeItemRightClick"></event>
|
||||
|
@ -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(); }
|
||||
|
@ -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<DemodulatorInstance *> &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<TreeViewItem*>(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<TreeViewItem*>(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<TreeViewItem*>(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<TreeViewItem*>(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);
|
||||
}
|
||||
|
@ -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<std::string, wxTreeItemId> groups;
|
||||
BookmarkEntry *bookmarkSel;
|
||||
bool bookmarksInitialized;
|
||||
|
||||
|
||||
// Active
|
||||
|
Loading…
Reference in New Issue
Block a user