///////////////////////////////////////////////////////////////////////////// // Name: wx/qt/private/treeitemdelegate.h // Purpose: Delegate to create text edit controls for the tree items // Author: Matthew Griffin // Created: 2019-05-29 // Copyright: Matthew Griffin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_QT_PRIVATE_TREEITEM_DELEGATE_H #define _WX_QT_PRIVATE_TREEITEM_DELEGATE_H #include #include "wx/app.h" #include "wx/textctrl.h" #include "treeitemfactory.h" class wxQTTreeItemDelegate : public QStyledItemDelegate { public: explicit wxQTTreeItemDelegate(wxWindow* parent) : m_parent(parent), m_textCtrl(NULL) { } QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &WXUNUSED(option), const QModelIndex &index) const wxOVERRIDE { if ( m_textCtrl != NULL ) destroyEditor(m_textCtrl->GetHandle(), m_currentModelIndex); m_currentModelIndex = index; m_textCtrl = new wxQtListTextCtrl(m_parent, parent); m_textCtrl->SetFocus(); return m_textCtrl->GetHandle(); } void destroyEditor(QWidget *WXUNUSED(editor), const QModelIndex &WXUNUSED(index)) const wxOVERRIDE { if ( m_textCtrl != NULL ) { m_currentModelIndex = QModelIndex(); // invalidate the index wxTheApp->ScheduleForDestruction(m_textCtrl); m_textCtrl = NULL; } } void setModelData(QWidget *WXUNUSED(editor), QAbstractItemModel *WXUNUSED(model), const QModelIndex &WXUNUSED(index)) const wxOVERRIDE { // Don't set model data until wx has had a chance to send out events } wxTextCtrl* GetEditControl() const { return m_textCtrl; } QModelIndex GetCurrentModelIndex() const { return m_currentModelIndex; } void AcceptModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QStyledItemDelegate::setModelData(editor, model, index); } private: wxWindow* m_parent; mutable wxTextCtrl* m_textCtrl; mutable QModelIndex m_currentModelIndex; }; #endif // _WX_QT_PRIVATE_TREEITEM_DELEGATE_H