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