HAL
graph_navigation_widget.h
Go to the documentation of this file.
1 // MIT License
2 //
3 // Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved.
4 // Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved.
5 // Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved.
6 // Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved.
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice and this permission notice shall be included in all
16 // copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 // SOFTWARE.
25 
26 #pragma once
27 
28 #include <QTreeWidget>
29 #include <QTableWidget>
30 #include <QFrame>
31 #include <QHash>
32 #include <QStringList>
33 #include <QTabWidget>
34 #include "hal_core/defines.h"
35 
36 #include "hal_core/netlist/net.h"
38 #include "gui/gui_def.h"
41 
42 namespace hal {
43 
44  class GraphNavigationWidget;
45 
56  {
57  GraphNavigationWidget* mNavigationWidget;
58  protected:
64  void keyPressEvent(QKeyEvent *event) override;
65 
72  void focusInEvent(QFocusEvent* event) override;
73  public:
81  : QTableWidget(parent), mNavigationWidget(nav) {;}
82  };
83 
94  {
95  GraphNavigationWidget* mNavigationWidget;
96  QList<QTreeWidgetItem*> selectedItemRecursion(QTreeWidgetItem* item) const;
97  protected:
103  void keyPressEvent(QKeyEvent *event) override;
110  void focusInEvent(QFocusEvent* event) override;
111 
119  bool event(QEvent *ev) override;
120  public:
128  : QTreeWidget(parent), mNavigationWidget(nav) {;}
129 
136 
142  QModelIndex firstIndex() const;
143  };
144 
152  {
153  Q_OBJECT
154 
157  public:
166  GraphNavigationWidget(bool onlyNavigate, QWidget* parent = nullptr);
167 
181 
196  void setup(Node origin, Net* via_net, SelectionRelay::Subfocus dir);
197 
205  SelectionRelay::Subfocus direction() const { return mDirection; }
206 
213  bool isEmpty() const;
214 
220  bool hasBothWidgets() const;
221 
226  void toggleWidget();
227 
228  Q_SIGNALS:
246  void navigationRequested(const Node& origin, const u32 via_net, const QSet<u32>& to_gates, const QSet<u32>& to_modules);
247 
252 
256  void resetFocus();
257 
258  public Q_SLOTS:
262  void closeRequest();
263 
264  private Q_SLOTS:
265  void handleNavigateSelected(int irow, int icol);
266  void handleAddToViewSelected(QTreeWidgetItem* item, int icol);
267 
268  protected:
269  void keyPressEvent(QKeyEvent *event) override;
270  void focusInEvent(QFocusEvent* event) override;
271 
272  private:
273  bool mOnlyNavigate;
274  QTabWidget* mTabs;
275 // QFrame* mNavigateFrame;
276 // QFrame* mAddToViewFrame;
277  GraphNavigationTableWidget* mNavigateWidget;
278  GraphNavigationTreeWidget* mAddToViewWidget;
279 
280  bool mNavigateVisible;
281  bool mAddToViewVisible;
282 
283  Node mOrigin;
284  Net* mViaNet;
285  SelectionRelay::Subfocus mDirection;
286 
287  QList<Node> mNavigateNodes;
288  QHash<QTreeWidgetItem*,Node> mAddToViewNodes;
289 
291  QSet<Module*> mModulesInView;
292 
294  QList<Endpoint*> mEndpointNotInView;
295 
296  QHash<Module*, QTreeWidgetItem*> mListedModules;
297 
298  void viaNetByNode();
299  void fillTable();
300  void resizeToFit();
301  void setModulesInView();
302  void setModuleInView(Module* m);
303  void addNavigateItem(Endpoint* ep, const Node &targetNode);
304  bool addToViewItem(Endpoint* ep);
305 
306  QTreeWidgetItem* itemFactory(const QStringList& fields, const Node& nd);
307  QStringList gateEntry(Gate* g, Endpoint* ep);
308  QStringList moduleEntry(Module* m, Endpoint* ep);
309 
310  static const int sDefaultColumnWidth[];
311  static const int sMaxHeight = 550;
312  static const int sLabelHeight = 24;
313  };
314 
315 }
Definition: gate.h:58
A widget used to select destinations when traversing through the graph.
void keyPressEvent(QKeyEvent *event) override
void focusInEvent(QFocusEvent *event) override
GraphNavigationTableWidget(GraphNavigationWidget *nav, QWidget *parent=nullptr)
void focusInEvent(QFocusEvent *event) override
void keyPressEvent(QKeyEvent *event) override
QList< QTreeWidgetItem * > selectedItems() const
GraphNavigationTreeWidget(GraphNavigationWidget *nav, QWidget *parent=nullptr)
SelectionRelay::Subfocus direction() const
void navigationRequested(const Node &origin, const u32 via_net, const QSet< u32 > &to_gates, const QSet< u32 > &to_modules)
void setup(SelectionRelay::Subfocus direction)
GraphNavigationWidget(bool onlyNavigate, QWidget *parent=nullptr)
void focusInEvent(QFocusEvent *event) override
void keyPressEvent(QKeyEvent *event) override
Definition: net.h:58
The Node class object represents a module or a gate.
Definition: gui_def.h:61
quint32 u32
Q_OBJECTQ_OBJECT
Q_SIGNALSQ_SIGNALS
Q_SLOTSQ_SLOTS
QObject * parent() const const
virtual bool event(QEvent *e) override
virtual bool event(QEvent *event) override