/* * nextpnr -- Next Generation Place and Route * * Copyright (C) 2018 Miodrag Milanovic * * 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 #include #include "nextpnr.h" #include "qtgroupboxpropertybrowser.h" #include "qtpropertymanager.h" #include "qttreepropertybrowser.h" #include "qtvariantproperty.h" NEXTPNR_NAMESPACE_BEGIN enum class ElementType { NONE, BEL, WIRE, PIP, NET, CELL }; 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); int getElementIndex(ElementType type); void updateButtons(); void addToHistory(QTreeWidgetItem *item); std::vector getDecals(ElementType type, IdString value); void updateHighlightGroup(QTreeWidgetItem *item, int group); Q_SIGNALS: void info(std::string text); void selected(std::vector decal); void highlight(std::vector decal, int group); private Q_SLOTS: void prepareMenuProperty(const QPoint &pos); void prepareMenuTree(const QPoint &pos); void onItemSelectionChanged(); void onItemDoubleClicked(QTreeWidgetItem *item, int column); public Q_SLOTS: void newContext(Context *ctx); void updateTree(); void onClickedBel(BelId bel); private: Context *ctx; QTreeWidget *treeWidget; QtVariantPropertyManager *variantManager; QtVariantPropertyManager *readOnlyManager; QtGroupPropertyManager *groupManager; QtVariantEditorFactory *variantFactory; QtTreePropertyBrowser *propertyEditor; QTreeWidgetItem *itemContextMenu; QMap propertyToId; QMap idToProperty; QMap nameToItem[6]; std::vector history; int history_index; bool history_ignore; QTreeWidgetItem *nets_root; QTreeWidgetItem *cells_root; QAction *actionFirst; QAction *actionPrev; QAction *actionNext; QAction *actionLast; QAction *actionClear; QColor highlightColors[8]; QMap highlightSelected; }; NEXTPNR_NAMESPACE_END #endif // DESIGNWIDGET_H