Merge branch 'qt_tree_control' of https://github.com/GeoTeric/wxWidgets into qt_tree_control

This commit is contained in:
Graham Dawes
2019-02-07 13:49:17 +00:00

View File

@@ -170,7 +170,7 @@ protected:
QTreeWidget::drawBranches(painter, rect, index); QTreeWidget::drawBranches(painter, rect, index);
const int imageIndex = ChooseBestImage(item); const int imageIndex = ChooseBestImage(item);
if (imageIndex != -1 ) if ( imageIndex != -1 )
{ {
wxImageList *imageList = GetHandler()->GetImageList(); wxImageList *imageList = GetHandler()->GetImageList();
wxBitmap bitmap = imageList->GetBitmap(imageIndex); wxBitmap bitmap = imageList->GetBitmap(imageIndex);
@@ -194,8 +194,10 @@ private:
return; return;
} }
//QT doesnt update the selection until this singal has been processed. //Defering this event ensures // QT doesn't update the selection until this signal has been
//that wxTreeCtrl::GetSelection returns the new selection in the wx event handler. // processed. Deferring this event ensures that
// wxTreeCtrl::GetSelection returns the new selection in the
// wx event handler.
wxTreeEvent changedEvent(wxEVT_TREE_SEL_CHANGED, treeCtrl, wxQtConvertTreeItem(current)); wxTreeEvent changedEvent(wxEVT_TREE_SEL_CHANGED, treeCtrl, wxQtConvertTreeItem(current));
wxPostEvent(treeCtrl, changedEvent); wxPostEvent(treeCtrl, changedEvent);
} }
@@ -256,19 +258,19 @@ private:
EmitEvent(expandedEvent); EmitEvent(expandedEvent);
} }
void OnItemChanged(QTreeWidgetItem *item, int WXUNUSED(column)) void OnItemChanged(QTreeWidgetItem *item, int WXUNUSED(column))
{ {
wxTreeEvent event(wxEVT_TREE_END_LABEL_EDIT, GetHandler(), wxQtConvertTreeItem(item)); wxTreeEvent event(wxEVT_TREE_END_LABEL_EDIT, GetHandler(), wxQtConvertTreeItem(item));
EmitEvent(event); EmitEvent(event);
} }
virtual void dragEnterEvent(QDragEnterEvent* event) wxOVERRIDE void tryStartDrag(const QMouseEvent *event)
{ {
wxEventType command = (event->mouseButtons() & Qt::RightButton) wxEventType command = (event->buttons() & Qt::RightButton)
? wxEVT_TREE_BEGIN_RDRAG ? wxEVT_TREE_BEGIN_RDRAG
: wxEVT_TREE_BEGIN_DRAG; : wxEVT_TREE_BEGIN_DRAG;
QTreeWidgetItem *hitItem = itemAt(event->pos()); QTreeWidgetItem *hitItem = itemAt(event->pos());
wxTreeEvent tree_event( wxTreeEvent tree_event(
@@ -284,16 +286,17 @@ private:
EmitEvent(tree_event); EmitEvent(tree_event);
if ( tree_event.IsAllowed() ) if ( !tree_event.IsAllowed() )
{ {
event->accept(); setState(DragSelectingState);
} }
} }
virtual void dropEvent(QDropEvent* event) wxOVERRIDE void endDrag(QPoint position)
{ {
const wxPoint pos = wxQtConvertPoint(event->pos()); const wxPoint pos = wxQtConvertPoint(position);
QTreeWidgetItem *hitItem = itemAt(event->pos()); QTreeWidgetItem *hitItem = itemAt(position);
OutputDebugStringA(hitItem->text(0).toUtf8().data());
wxTreeEvent tree_event( wxTreeEvent tree_event(
wxEVT_TREE_END_DRAG, wxEVT_TREE_END_DRAG,
@@ -301,11 +304,31 @@ private:
wxQtConvertTreeItem(hitItem) wxQtConvertTreeItem(hitItem)
); );
tree_event.SetPoint(wxQtConvertPoint(event->pos())); tree_event.SetPoint(wxQtConvertPoint(position));
EmitEvent(tree_event); EmitEvent(tree_event);
} }
virtual void dropEvent(QDropEvent* event) wxOVERRIDE
{
endDrag(event->pos());
// We don't want Qt to actually do the drop.
event->ignore();
}
virtual void mouseMoveEvent(QMouseEvent *event) wxOVERRIDE
{
const bool wasDragging = state() == DraggingState;
wxQtEventSignalHandler<QTreeWidget, wxTreeCtrl>::mouseMoveEvent(event);
const bool nowDragging = state() == DraggingState;
if ( !wasDragging && nowDragging )
{
tryStartDrag(event);
}
}
int ChooseBestImage(QTreeWidgetItem *item) const int ChooseBestImage(QTreeWidgetItem *item) const
{ {
int imageIndex = -1; int imageIndex = -1;