Hover on items in tree
This commit is contained in:
parent
4cc49ef6e3
commit
ad84df7974
@ -109,6 +109,7 @@ BaseMainWindow::BaseMainWindow(std::unique_ptr<Context> context, ArchArgs args,
|
||||
connect(designview, &DesignWidget::selected, fpgaView, &FPGAViewWidget::onSelectedArchItem);
|
||||
connect(designview, &DesignWidget::zoomSelected, fpgaView, &FPGAViewWidget::zoomSelected);
|
||||
connect(designview, &DesignWidget::highlight, fpgaView, &FPGAViewWidget::onHighlightGroupChanged);
|
||||
connect(designview, &DesignWidget::hover, fpgaView, &FPGAViewWidget::onHoverItemChanged);
|
||||
|
||||
// Click event on device view
|
||||
connect(fpgaView, &FPGAViewWidget::clickedBel, designview, &DesignWidget::onClickedBel);
|
||||
|
@ -30,15 +30,34 @@
|
||||
|
||||
NEXTPNR_NAMESPACE_BEGIN
|
||||
|
||||
TreeView::TreeView(QWidget *parent) : QTreeView(parent) {}
|
||||
|
||||
TreeView::~TreeView() {}
|
||||
|
||||
void TreeView::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
QModelIndex index = indexAt(event->pos());
|
||||
if (index!=current) {
|
||||
current = index;
|
||||
Q_EMIT hoverIndexChanged(index);
|
||||
}
|
||||
QTreeView::mouseMoveEvent(event);
|
||||
}
|
||||
|
||||
void TreeView::leaveEvent(QEvent *event)
|
||||
{
|
||||
Q_EMIT hoverIndexChanged(QModelIndex());
|
||||
}
|
||||
|
||||
DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr), selectionModel(nullptr)
|
||||
{
|
||||
// Add tree view
|
||||
treeView = new QTreeView();
|
||||
treeView = new TreeView();
|
||||
treeModel = new TreeModel::Model();
|
||||
treeView->setModel(treeModel);
|
||||
treeView->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
|
||||
treeView->viewport()->setMouseTracking(true);
|
||||
// Add property view
|
||||
variantManager = new QtVariantPropertyManager(this);
|
||||
readOnlyManager = new QtVariantPropertyManager(this);
|
||||
@ -159,8 +178,9 @@ DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr), sel
|
||||
&DesignWidget::prepareMenuProperty);
|
||||
connect(propertyEditor->treeWidget(), &QTreeWidget::itemDoubleClicked, this, &DesignWidget::onItemDoubleClicked);
|
||||
|
||||
connect(treeView, &QTreeView::customContextMenuRequested, this, &DesignWidget::prepareMenuTree);
|
||||
connect(treeView, &QTreeView::doubleClicked, this, &DesignWidget::onDoubleClicked);
|
||||
connect(treeView, &TreeView::customContextMenuRequested, this, &DesignWidget::prepareMenuTree);
|
||||
connect(treeView, &TreeView::doubleClicked, this, &DesignWidget::onDoubleClicked);
|
||||
connect(treeView, &TreeView::hoverIndexChanged, this, &DesignWidget::onHoverIndexChanged);
|
||||
selectionModel = treeView->selectionModel();
|
||||
connect(selectionModel, &QItemSelectionModel::selectionChanged, this, &DesignWidget::onSelectionChanged);
|
||||
|
||||
@ -388,7 +408,6 @@ void DesignWidget::onSelectionChanged(const QItemSelection &, const QItemSelecti
|
||||
ElementType type = clickItem->type();
|
||||
if (type == ElementType::NONE)
|
||||
return;
|
||||
std::vector<DecalXY> decals;
|
||||
|
||||
addToHistory(index);
|
||||
|
||||
@ -800,4 +819,17 @@ void DesignWidget::onSearchInserted()
|
||||
if (currentSearchIndexes.size() > 0 && currentIndex < currentSearchIndexes.size())
|
||||
selectionModel->setCurrentIndex(currentSearchIndexes.at(currentIndex), QItemSelectionModel::ClearAndSelect);
|
||||
}
|
||||
|
||||
void DesignWidget::onHoverIndexChanged(QModelIndex index)
|
||||
{
|
||||
if (index.isValid()) {
|
||||
TreeModel::Item *item = treeModel->nodeFromIndex(index);
|
||||
if (item->type() != ElementType::NONE) {
|
||||
Q_EMIT hover(getDecals(item->type(), item->id()).at(0));
|
||||
return;
|
||||
}
|
||||
}
|
||||
Q_EMIT hover(DecalXY());
|
||||
}
|
||||
|
||||
NEXTPNR_NAMESPACE_END
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include <QTreeView>
|
||||
#include <QVariant>
|
||||
#include <QMouseEvent>
|
||||
#include "nextpnr.h"
|
||||
#include "qtgroupboxpropertybrowser.h"
|
||||
#include "qtpropertymanager.h"
|
||||
@ -31,6 +32,22 @@
|
||||
|
||||
NEXTPNR_NAMESPACE_BEGIN
|
||||
|
||||
class TreeView : public QTreeView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TreeView(QWidget *parent = 0);
|
||||
~TreeView();
|
||||
void mouseMoveEvent(QMouseEvent *event) override;
|
||||
void leaveEvent(QEvent *event) override;
|
||||
|
||||
Q_SIGNALS:
|
||||
void hoverIndexChanged(QModelIndex index);
|
||||
private:
|
||||
QModelIndex current;
|
||||
};
|
||||
|
||||
class DesignWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -55,6 +72,7 @@ class DesignWidget : public QWidget
|
||||
Q_SIGNALS:
|
||||
void selected(std::vector<DecalXY> decal, bool keep);
|
||||
void highlight(std::vector<DecalXY> decal, int group);
|
||||
void hover(DecalXY decal);
|
||||
void zoomSelected();
|
||||
|
||||
private Q_SLOTS:
|
||||
@ -64,6 +82,7 @@ class DesignWidget : public QWidget
|
||||
void onItemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||
void onDoubleClicked(const QModelIndex &index);
|
||||
void onSearchInserted();
|
||||
void onHoverIndexChanged(QModelIndex index);
|
||||
public Q_SLOTS:
|
||||
void newContext(Context *ctx);
|
||||
void updateTree();
|
||||
@ -74,7 +93,7 @@ class DesignWidget : public QWidget
|
||||
private:
|
||||
Context *ctx;
|
||||
|
||||
QTreeView *treeView;
|
||||
TreeView *treeView;
|
||||
QItemSelectionModel *selectionModel;
|
||||
TreeModel::Model *treeModel;
|
||||
QLineEdit *searchEdit;
|
||||
|
@ -559,6 +559,14 @@ void FPGAViewWidget::onHighlightGroupChanged(std::vector<DecalXY> decals, int gr
|
||||
pokeRenderer();
|
||||
}
|
||||
|
||||
void FPGAViewWidget::onHoverItemChanged(DecalXY decal)
|
||||
{
|
||||
QMutexLocker locked(&rendererArgsLock_);
|
||||
rendererArgs_->hoveredDecal = decal;
|
||||
rendererArgs_->changed = true;
|
||||
pokeRenderer();
|
||||
}
|
||||
|
||||
void FPGAViewWidget::resizeGL(int width, int height) {}
|
||||
|
||||
boost::optional<FPGAViewWidget::PickedElement> FPGAViewWidget::pickElement(float worldx, float worldy)
|
||||
|
@ -113,6 +113,7 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions
|
||||
void newContext(Context *ctx);
|
||||
void onSelectedArchItem(std::vector<DecalXY> decals, bool keep);
|
||||
void onHighlightGroupChanged(std::vector<DecalXY> decals, int group);
|
||||
void onHoverItemChanged(DecalXY decal);
|
||||
void pokeRenderer(void);
|
||||
void zoomIn();
|
||||
void zoomOut();
|
||||
|
Loading…
Reference in New Issue
Block a user