Added hover on properties as well, fixes #64

This commit is contained in:
Miodrag Milanovic 2018-08-22 18:37:24 +02:00
parent ad84df7974
commit 28e30b2af0
4 changed files with 52 additions and 2 deletions

View File

@ -82,6 +82,7 @@ public:
void slotCollapsed(const QModelIndex &index); void slotCollapsed(const QModelIndex &index);
void slotExpanded(const QModelIndex &index); void slotExpanded(const QModelIndex &index);
void onHoverPropertyChanged(QtBrowserItem *item);
QColor calculatedBackgroundColor(QtBrowserItem *item) const; QColor calculatedBackgroundColor(QtBrowserItem *item) const;
@ -129,12 +130,17 @@ public:
{ return itemFromIndex(index); } { return itemFromIndex(index); }
protected: protected:
void mouseMoveEvent(QMouseEvent *event) override;
void leaveEvent(QEvent *event) override;
void keyPressEvent(QKeyEvent *event); void keyPressEvent(QKeyEvent *event);
void mousePressEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event);
void drawRow(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; void drawRow(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
Q_SIGNALS:
void hoverPropertyChanged(QtBrowserItem *item);
private: private:
QtTreePropertyBrowserPrivate *m_editorPrivate; QtTreePropertyBrowserPrivate *m_editorPrivate;
QModelIndex current;
}; };
QtPropertyEditorView::QtPropertyEditorView(QWidget *parent) : QtPropertyEditorView::QtPropertyEditorView(QWidget *parent) :
@ -172,6 +178,21 @@ void QtPropertyEditorView::drawRow(QPainter *painter, const QStyleOptionViewItem
painter->restore(); painter->restore();
} }
void QtPropertyEditorView::mouseMoveEvent(QMouseEvent *event)
{
QModelIndex index = indexAt(event->pos());
if (index!=current) {
current = index;
Q_EMIT hoverPropertyChanged(m_editorPrivate->indexToBrowserItem(index));
}
QTreeWidget::mouseMoveEvent(event);
}
void QtPropertyEditorView::leaveEvent(QEvent *event)
{
Q_EMIT hoverPropertyChanged(nullptr);
}
void QtPropertyEditorView::keyPressEvent(QKeyEvent *event) void QtPropertyEditorView::keyPressEvent(QKeyEvent *event)
{ {
switch (event->key()) { switch (event->key()) {
@ -489,6 +510,7 @@ void QtTreePropertyBrowserPrivate::init(QWidget *parent)
QObject::connect(m_treeWidget, SIGNAL(collapsed(const QModelIndex &)), q_ptr, SLOT(slotCollapsed(const QModelIndex &))); QObject::connect(m_treeWidget, SIGNAL(collapsed(const QModelIndex &)), q_ptr, SLOT(slotCollapsed(const QModelIndex &)));
QObject::connect(m_treeWidget, SIGNAL(expanded(const QModelIndex &)), q_ptr, SLOT(slotExpanded(const QModelIndex &))); QObject::connect(m_treeWidget, SIGNAL(expanded(const QModelIndex &)), q_ptr, SLOT(slotExpanded(const QModelIndex &)));
QObject::connect(m_treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), q_ptr, SLOT(slotCurrentTreeItemChanged(QTreeWidgetItem*,QTreeWidgetItem*))); QObject::connect(m_treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), q_ptr, SLOT(slotCurrentTreeItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)));
QObject::connect(m_treeWidget, SIGNAL(hoverPropertyChanged(QtBrowserItem *)), q_ptr, SLOT(onHoverPropertyChanged(QtBrowserItem *)));
} }
QtBrowserItem *QtTreePropertyBrowserPrivate::currentItem() const QtBrowserItem *QtTreePropertyBrowserPrivate::currentItem() const
@ -688,6 +710,12 @@ void QtTreePropertyBrowserPrivate::slotExpanded(const QModelIndex &index)
emit q_ptr->expanded(idx); emit q_ptr->expanded(idx);
} }
void QtTreePropertyBrowserPrivate::onHoverPropertyChanged(QtBrowserItem *item)
{
emit q_ptr->hoverPropertyChanged(item);
}
void QtTreePropertyBrowserPrivate::slotCurrentBrowserItemChanged(QtBrowserItem *item) void QtTreePropertyBrowserPrivate::slotCurrentBrowserItemChanged(QtBrowserItem *item)
{ {
if (!m_browserChangedBlocked && item != currentItem()) if (!m_browserChangedBlocked && item != currentItem())

View File

@ -115,7 +115,7 @@ Q_SIGNALS:
void collapsed(QtBrowserItem *item); void collapsed(QtBrowserItem *item);
void expanded(QtBrowserItem *item); void expanded(QtBrowserItem *item);
void hoverPropertyChanged(QtBrowserItem *item);
protected: protected:
virtual void itemInserted(QtBrowserItem *item, QtBrowserItem *afterItem); virtual void itemInserted(QtBrowserItem *item, QtBrowserItem *afterItem);
virtual void itemRemoved(QtBrowserItem *item); virtual void itemRemoved(QtBrowserItem *item);
@ -130,7 +130,8 @@ private:
Q_PRIVATE_SLOT(d_func(), void slotCollapsed(const QModelIndex &)) Q_PRIVATE_SLOT(d_func(), void slotCollapsed(const QModelIndex &))
Q_PRIVATE_SLOT(d_func(), void slotExpanded(const QModelIndex &)) Q_PRIVATE_SLOT(d_func(), void slotExpanded(const QModelIndex &))
Q_PRIVATE_SLOT(d_func(), void slotCurrentBrowserItemChanged(QtBrowserItem *)) Q_PRIVATE_SLOT(d_func(), void slotCurrentBrowserItemChanged(QtBrowserItem *))
Q_PRIVATE_SLOT(d_func(), void slotCurrentTreeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)) Q_PRIVATE_SLOT(d_func(), void slotCurrentTreeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *))
Q_PRIVATE_SLOT(d_func(), void onHoverPropertyChanged(QtBrowserItem *))
}; };

View File

@ -69,6 +69,7 @@ DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr), sel
propertyEditor->show(); propertyEditor->show();
propertyEditor->treeWidget()->setContextMenuPolicy(Qt::CustomContextMenu); propertyEditor->treeWidget()->setContextMenuPolicy(Qt::CustomContextMenu);
propertyEditor->treeWidget()->setSelectionMode(QAbstractItemView::ExtendedSelection); propertyEditor->treeWidget()->setSelectionMode(QAbstractItemView::ExtendedSelection);
propertyEditor->treeWidget()->viewport()->setMouseTracking(true);
searchEdit = new QLineEdit(); searchEdit = new QLineEdit();
searchEdit->setClearButtonEnabled(true); searchEdit->setClearButtonEnabled(true);
@ -177,6 +178,7 @@ DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr), sel
connect(propertyEditor->treeWidget(), &QTreeWidget::customContextMenuRequested, this, connect(propertyEditor->treeWidget(), &QTreeWidget::customContextMenuRequested, this,
&DesignWidget::prepareMenuProperty); &DesignWidget::prepareMenuProperty);
connect(propertyEditor->treeWidget(), &QTreeWidget::itemDoubleClicked, this, &DesignWidget::onItemDoubleClicked); connect(propertyEditor->treeWidget(), &QTreeWidget::itemDoubleClicked, this, &DesignWidget::onItemDoubleClicked);
connect(propertyEditor, &QtTreePropertyBrowser::hoverPropertyChanged, this, &DesignWidget::onHoverPropertyChanged);
connect(treeView, &TreeView::customContextMenuRequested, this, &DesignWidget::prepareMenuTree); connect(treeView, &TreeView::customContextMenuRequested, this, &DesignWidget::prepareMenuTree);
connect(treeView, &TreeView::doubleClicked, this, &DesignWidget::onDoubleClicked); connect(treeView, &TreeView::doubleClicked, this, &DesignWidget::onDoubleClicked);
@ -832,4 +834,22 @@ void DesignWidget::onHoverIndexChanged(QModelIndex index)
Q_EMIT hover(DecalXY()); Q_EMIT hover(DecalXY());
} }
void DesignWidget::onHoverPropertyChanged(QtBrowserItem *item)
{
if (item!=nullptr) {
QtProperty *selectedProperty = item->property();
ElementType type = getElementTypeByName(selectedProperty->propertyId());
if (type != ElementType::NONE) {
IdString value = ctx->id(selectedProperty->valueText().toStdString());
if (value!=IdString()) {
auto node = treeModel->nodeForIdType(type, value);
if (node) {
Q_EMIT hover(getDecals((*node)->type(), (*node)->id()).at(0));
return;
}
}
}
}
Q_EMIT hover(DecalXY());
}
NEXTPNR_NAMESPACE_END NEXTPNR_NAMESPACE_END

View File

@ -83,6 +83,7 @@ class DesignWidget : public QWidget
void onDoubleClicked(const QModelIndex &index); void onDoubleClicked(const QModelIndex &index);
void onSearchInserted(); void onSearchInserted();
void onHoverIndexChanged(QModelIndex index); void onHoverIndexChanged(QModelIndex index);
void onHoverPropertyChanged(QtBrowserItem *item);
public Q_SLOTS: public Q_SLOTS:
void newContext(Context *ctx); void newContext(Context *ctx);
void updateTree(); void updateTree();