| /* | |
| * nextpnr -- Next Generation Place and Route | |
| * | |
| * Copyright (C) 2018 Miodrag Milanovic <miodrag@symbioticeda.com> | |
| * | |
| * Permission to use, copy, modify, and/or distribute this software for any | |
| * purpose with or without fee is hereby granted, provided that the above | |
| * copyright notice and this permission notice appear in all copies. | |
| * | |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
| * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
| * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
| * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
| * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
| * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
| * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
| * | |
| */ | |
| #ifndef DESIGNWIDGET_H | |
| #define DESIGNWIDGET_H | |
| #include <QMouseEvent> | |
| #include <QTabWidget> | |
| #include <QTreeView> | |
| #include <QVariant> | |
| #include "nextpnr.h" | |
| #include "qtgroupboxpropertybrowser.h" | |
| #include "qtpropertymanager.h" | |
| #include "qttreepropertybrowser.h" | |
| #include "qtvariantproperty.h" | |
| #include "treemodel.h" | |
| 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 | |
| public: | |
| explicit DesignWidget(QWidget *parent = 0); | |
| ~DesignWidget(); | |
| private: | |
| void clearProperties(); | |
| QtProperty *addTopLevelProperty(const QString &id); | |
| QtProperty *addSubGroup(QtProperty *topItem, const QString &name); | |
| void addProperty(QtProperty *topItem, int propertyType, const QString &name, QVariant value, | |
| const ElementType &type = ElementType::NONE); | |
| QString getElementTypeName(ElementType type); | |
| ElementType getElementTypeByName(QString type); | |
| TreeModel::Model *getTreeByElementType(ElementType type); | |
| int getIndexByElementType(ElementType type); | |
| int getElementIndex(ElementType type); | |
| void updateButtons(); | |
| void addToHistory(int tab, QModelIndex item); | |
| std::vector<DecalXY> getDecals(ElementType type, IdString value); | |
| void updateHighlightGroup(QList<TreeModel::Item *> item, int group); | |
| void clearAllSelectionModels(); | |
| 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: | |
| void prepareMenuProperty(const QPoint &pos); | |
| void prepareMenuTree(int num, const QPoint &pos); | |
| void onSelectionChanged(int num, const QItemSelection &selected, const QItemSelection &deselected); | |
| void onItemDoubleClicked(QTreeWidgetItem *item, int column); | |
| void onDoubleClicked(const QModelIndex &index); | |
| void onSearchInserted(); | |
| void onHoverIndexChanged(int num, QModelIndex index); | |
| void onHoverPropertyChanged(QtBrowserItem *item); | |
| public Q_SLOTS: | |
| void newContext(Context *ctx); | |
| void updateTree(); | |
| void onClickedBel(BelId bel, bool keep); | |
| void onClickedWire(WireId wire, bool keep); | |
| void onClickedPip(PipId pip, bool keep); | |
| private: | |
| Context *ctx; | |
| QTabWidget *tabWidget; | |
| TreeView *treeView[6]; | |
| QItemSelectionModel *selectionModel[6]; | |
| TreeModel::Model *treeModel[6]; | |
| QLineEdit *searchEdit; | |
| QtVariantPropertyManager *variantManager; | |
| QtVariantPropertyManager *readOnlyManager; | |
| QtGroupPropertyManager *groupManager; | |
| QtVariantEditorFactory *variantFactory; | |
| QtTreePropertyBrowser *propertyEditor; | |
| QMap<QtProperty *, QString> propertyToId; | |
| QMap<QString, QtProperty *> idToProperty; | |
| std::vector<std::pair<int, QModelIndex>> history; | |
| int history_index; | |
| bool history_ignore; | |
| QAction *actionFirst; | |
| QAction *actionPrev; | |
| QAction *actionNext; | |
| QAction *actionLast; | |
| QAction *actionClear; | |
| QColor highlightColors[8]; | |
| QMap<TreeModel::Item *, int> highlightSelected; | |
| QString currentSearch; | |
| QList<QModelIndex> currentSearchIndexes; | |
| int currentIndex; | |
| int currentIndexTab; | |
| }; | |
| NEXTPNR_NAMESPACE_END | |
| #endif // DESIGNWIDGET_H |