Make wxQT wxTreeCtrl selection behave consistently with other wx ports.

This commit is contained in:
Graham Dawes
2019-02-07 08:39:04 +00:00
parent ab6f8e5092
commit 3342695b92

View File

@@ -122,7 +122,9 @@ protected:
private: private:
void OnCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) void OnCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{ {
wxTreeEvent changingEvent(wxEVT_TREE_SEL_CHANGING, GetHandler(), wxQtConvertTreeItem(current)); wxTreeCtrl* treeCtrl = GetHandler();
wxTreeEvent changingEvent(wxEVT_TREE_SEL_CHANGING, treeCtrl, wxQtConvertTreeItem(current));
EmitEvent(changingEvent); EmitEvent(changingEvent);
if ( !changingEvent.IsAllowed() ) if ( !changingEvent.IsAllowed() )
@@ -133,8 +135,10 @@ private:
return; return;
} }
wxTreeEvent changedEvent(wxEVT_TREE_SEL_CHANGED, GetHandler(), wxQtConvertTreeItem(current)); //QT doesnt update the selection until this singal has been processed. //Defering this event ensures
EmitEvent(changedEvent); //that wxTreeCtrl::GetSelection returns the new selection in the wx event handler.
wxTreeEvent changedEvent(wxEVT_TREE_SEL_CHANGED, treeCtrl, wxQtConvertTreeItem(current));
wxPostEvent(treeCtrl, changedEvent);
} }
void OnItemActivated(QTreeWidgetItem *item, int WXUNUSED(column)) void OnItemActivated(QTreeWidgetItem *item, int WXUNUSED(column))
@@ -703,7 +707,10 @@ wxTreeItemId wxTreeCtrl::AddRoot(const wxString& text,
wxTreeItemData *data) wxTreeItemData *data)
{ {
QTreeWidgetItem *root = m_qtTreeWidget->invisibleRootItem(); QTreeWidgetItem *root = m_qtTreeWidget->invisibleRootItem();
return DoInsertItem(wxQtConvertTreeItem(root), 0, text, image, selImage, data); wxTreeItemId newItem = DoInsertItem(wxQtConvertTreeItem(root), 0, text, image, selImage, data);
m_qtTreeWidget->setCurrentItem(NULL);
return newItem;
} }
void wxTreeCtrl::Delete(const wxTreeItemId& item) void wxTreeCtrl::Delete(const wxTreeItemId& item)
@@ -890,7 +897,7 @@ void wxTreeCtrl::SetWindowStyleFlag(long styles)
{ {
wxControl::SetWindowStyleFlag(styles); wxControl::SetWindowStyleFlag(styles);
m_qtTreeWidget->invisibleRootItem()->setHidden((styles & wxTR_HIDE_ROOT) != 0); m_qtTreeWidget->invisibleRootItem()->setHidden((styles & wxTR_HIDE_ROOT) != 0);
m_qtTreeWidget->setSelectionMode(styles & wxTR_MULTIPLE ? QTreeWidget::MultiSelection : QTreeWidget::SingleSelection); m_qtTreeWidget->setSelectionMode(styles & wxTR_MULTIPLE ? QTreeWidget::ExtendedSelection : QTreeWidget::SingleSelection);
} }
int wxTreeCtrl::DoGetItemState(const wxTreeItemId& item) const int wxTreeCtrl::DoGetItemState(const wxTreeItemId& item) const