HAL
module_elements_tree.cpp
Go to the documentation of this file.
3 #include "gui/gui_globals.h"
6 
7 #include <QMenu>
8 #include <QHeaderView>
9 #include <QApplication>
10 #include <QClipboard>
11 
12 namespace hal
13 {
14 
15  ModuleElementsTree::ModuleElementsTree(QWidget *parent) : QTreeView(parent), mModuleID(-1)
16  {
23  mProxyModel = new FilterElementsProxyModel(this);
24  mModel = new ModuleModel(mProxyModel);
25  mProxyModel->setSourceModel(mModel);
26  mProxyModel->setFilterNets(true);
27  setModel(mProxyModel);
28 
29  //connections
31  //connect(mModel, &ModuleTreeModel::numberOfSubmodulesChanged, this, &ModuleElementsTree::handleNumberSubmodulesChanged);
32  }
33 
35  {
36  Module* m = gNetlist->get_module_by_id(moduleID);
37  if(!m) return;
38 
39  setModule(m);
40  }
41 
43  {
44  if(!m) return;
45 
46  mModel->populateTree({m->get_id()});
47  setRootIndex(mProxyModel->mapFromSource(mModel->getIndexFromItem(mModel->getItem(m->get_id())))); // hide top-element m in TreeView
48 
49  mModuleID = m->get_id();
50  }
51 
53  {
54  mModel->clear();
55  mModuleID = -1;
56  }
57 
59  {
60  QModelIndex clickedIndex = indexAt(pos);
61  if(!clickedIndex.isValid())
62  return;
63 
64  ModuleItem* clickedItem = dynamic_cast<ModuleItem*>(mModel->getItemFromIndex(mProxyModel->mapToSource(clickedIndex)));
65  u32 id = clickedItem->id();
66  ModuleItem::TreeItemType type = clickedItem->getType();
67  QMenu menu;
68 
75 
77  type==ModuleItem::TreeItemType::Module ? std::vector<u32>({id}) : std::vector<u32>(),
78  type==ModuleItem::TreeItemType::Gate ? std::vector<u32>({id}) : std::vector<u32>(),
79  type==ModuleItem::TreeItemType::Net ? std::vector<u32>({id}) : std::vector<u32>());
80 
81  menu.exec(this->viewport()->mapToGlobal(pos));
82  }
83 
84  void ModuleElementsTree::handleNumberSubmodulesChanged(const int number)
85  {
86  Q_EMIT updateText(QString("Submodules(%1)").arg(number));
87  }
88 }
QModelIndex getIndexFromItem(BaseTreeItem *item) const
BaseTreeItem * getItemFromIndex(QModelIndex index) const
Enables filtering of nets or gates in the ModuleModel.
static void addPluginSubmenus(QMenu *contextMenu, Netlist *netlist, const std::vector< u32 > &modules, const std::vector< u32 > &gates, const std::vector< u32 > &nets)
static void addModuleSubmenu(QMenu *contextMenu, u32 id)
static void addGateSubmenu(QMenu *contextMenu, u32 id)
static void addNetSubmenu(QMenu *contextMenu, u32 id)
void handleContextMenuRequested(const QPoint &pos)
void updateText(const QString &newHeadline)
ModuleElementsTree(QWidget *parent=nullptr)
u32 get_id() const
Definition: module.cpp:82
An item in the ModuleModel.
Definition: module_item.h:48
u32 id() const
TreeItemType getType() const
A model for displaying multiple netlist elements.
Definition: module_model.h:54
ModuleItem * getItem(const QModelIndex &index) const
void clear() override
void populateTree(const QVector< u32 > &modIds={}, const QVector< u32 > &gatIds={}, const QVector< u32 > &netIds={})
Module * get_module_by_id(u32 module_id) const
Definition: netlist.cpp:613
Netlist * gNetlist
Definition: plugin_gui.cpp:80
quint32 u32
PinType type
void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
void setSelectionMode(QAbstractItemView::SelectionMode mode)
QWidget * viewport() const const
void setStretchLastSection(bool stretch)
QAction * exec()
bool isValid() const const
Q_EMITQ_EMIT
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const const override
virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const const override
virtual void setSourceModel(QAbstractItemModel *sourceModel) override
CustomContextMenu
QHeaderView * header() const const
virtual QModelIndex indexAt(const QPoint &point) const const override
virtual void setModel(QAbstractItemModel *model) override
virtual void setRootIndex(const QModelIndex &index) override
void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
void customContextMenuRequested(const QPoint &pos)
void setFocusPolicy(Qt::FocusPolicy policy)
QPoint mapToGlobal(const QPoint &pos) const const
void setSizePolicy(QSizePolicy)