StateTreeController.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2011-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5  *
6  * ArmarX is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * ArmarX is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * @package
19  * @author
20  * @date
21  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22  * GNU General Public License
23  */
24 #pragma once
25 
26 #include <QAbstractItemModel>
27 #include <QSortFilterProxyModel>
28 #include <QTreeView>
29 
33 
38 
39 #include "../StatechartViewerPlugin/model/StateMimeData.h"
40 #include "../StatechartViewerPlugin/model/stateinstance/StateInstance.h"
41 #include "model/StateTreeModel.h"
42 #include "model/StateTreeNode.h"
43 
44 
45 class QProcess;
46 
47 namespace armarx
48 {
49 
50  class StatechartProfiles;
51  using StatechartProfilesPtr = std::shared_ptr<StatechartProfiles>;
52 
53 
54  class StateTreeController;
55  using StateTreeControllerPtr = std::shared_ptr<StateTreeController>;
56 
57  class StateTreeController : public QAbstractItemModel
58  {
59  Q_OBJECT
60 
61  public:
63  VariantInfoPtr variantInfo,
64  QList<QVariant> headerInfo,
65  QTreeView* treeView,
66  QLineEdit* filterLineEdit,
67  const ArmarXPackageToolInterfacePtr& packageTool,
68  const StatechartProfilesPtr& statechartProfiles,
69  StatechartProfilePtr currentProfile,
70  QObject* parent = 0);
71  ~StateTreeController() override;
72 
73  QVariant data(const QModelIndex& index, int role) const override;
74  Qt::ItemFlags flags(const QModelIndex& index) const override;
75  QVariant headerData(int section,
76  Qt::Orientation orientation,
77  int role = Qt::DisplayRole) const override;
78  QModelIndex
79  index(int row, int column, const QModelIndex& parentIndex = QModelIndex()) const override;
80  QModelIndex parent(const QModelIndex& index) const override;
81  int rowCount(const QModelIndex& parent = QModelIndex()) const override;
82  int columnCount(const QModelIndex& parent = QModelIndex()) const override;
83  StatechartGroupPtr loadAndAddGroup(QString groupDefinitionFile);
84  StatechartGroupPtr loadGroup(QString groupDefinitionFile);
85  StatechartGroupPtr addNewGroup(const QString& groupName,
86  const QString& groupPath,
87  const QString& description,
88  const QString& packageName,
89  const QList<QString> proxies,
90  bool generateContext,
91  const QMap<QString, QString>& statechartGroupConfigurations);
92 
93  void loadAllStates();
94 
98  bool nodeIsState(StateTreeNodePtr node);
99  bool nodeIsFolder(StateTreeNodePtr node);
100  bool nodeIsGroup(StateTreeNodePtr node);
102  bool selectedNodeIsState();
103  bool selectedNodeIsFolder();
104  bool selectedNodeIsGroup();
106  StateTreeNodePtr tryCreateNewState(QString name);
107  StateTreeNodePtr createNewState(QString name,
109  bool createDynamicRemoteState = false);
111  //StateTreeNodePtr get
112  void tryDeleteState();
113  void removeState(StateTreeNodePtr stateNode);
114  void tryDeleteFolder();
115  void removeFolder(StateTreeNodePtr folderNode);
116  void tryDeleteGroup();
117 
119 
120  void saveAll();
121 
122  StateTreeNodePtr getNode(QModelIndex index) const;
123 
125 
126  signals:
127  void closeAllTabsRequested();
128 
129  public slots:
130  void onContextMenu(const QPoint& point);
131  void onNewStateDefinition();
133  void onNewFolder();
134  void onDeleteNode();
135  void onMakeStatePublic(bool enable);
136  void onFindStateUsages();
137  void onRenameState();
138  void onOpenCMakeProject();
139  void onShowFullPath();
140  void onOpenStateCPP();
141  void onOpenGroup(QString groupFile = "");
142  void onExecuteGroup();
143  void onStatechartFinished(int exitCode);
144  //void onGenerateStateBaseClass();
145  //void onGenerateRsoBaseClass();
147  void onRenameGroup();
148  void onCloneGroup();
149  void onGroupProperties();
150  void collapseAll();
151  void selectNode(StateTreeNodePtr node);
152 
153  void executeGroup(StatechartGroupPtr group, QString startState = "");
154 
156 
157  void executeGroupWithDependencies(StatechartGroupPtr group, QString startState);
158 
160 
161  public:
162  void openStateCPP(StateTreeNodePtr node);
163 
164  private slots:
165  void processOutputReady();
166  void processErrorsReady();
167  void stateAddedOrRemoved();
168  void expandFilterResults(const QString& filterString);
169 
170  private:
171  QModelIndex getIndex(StateTreeNodePtr node);
172  QString buildStateUsageString(QList<statechartmodel::StateInstancePtr> instances);
173 
174  StateTreeNodePtr rootNode;
175  QList<QVariant> headerInfo;
176  QTreeView* treeView;
177  StateTreeModelPtr stateTreeModel;
178  InfixFilterModel* proxyModel;
179  GroupClonerPtr groupCloner;
180  GroupRenamerPtr groupRenamer;
181  StatechartGroupPtr activeGroup;
182  QMenu* contextMenuGroup;
183  QMenu* contextMenuFolder;
184  QMenu* contextMenuState;
185  QAction* actionNewStateDefinition;
186  QAction* actionNewDynamicRemoteStateDefinition;
187  QAction* actionNewFolder;
188  QAction* actionDeleteNode;
189  QAction* actionMakeStatePublic;
190  QAction* actionFindStateUsages;
191  QAction* actionRenameState;
192  QAction* actionOpenCMakeProject;
193  QAction* actionShowFullPath;
194  QAction* actionOpenStateCPP;
195  QAction* actionExecuteGroup;
196  //QAction *actionGenerateStateBaseClass;
197  //QAction *actionGenerateRsoBaseClass;
198  QAction* actionGenerateStateCPP;
199  QAction* actionCloneGroup;
200  QAction* actionRenameGroup;
201  QAction* actionGroupProperties;
203 
204  ArmarXPackageToolInterfacePtr packageTool;
205  EditorFileOpener opener;
206  QMap<QString, QProcess*> processes;
207  VariantInfoPtr variantInfo;
208  StatechartProfilesPtr profiles;
209  StatechartProfilePtr currentProfile;
210  Ice::CommunicatorPtr communicator;
211 
212  struct StateMimeData : AbstractStateMimeData
213  {
214  StateMimeData(statechartmodel::StatePtr state, StateTreeModelPtr stateTreeModel);
215  bool isInSameGroup(statechartmodel::StatePtr state) const override;
216  bool isPublic() const override;
217 
218  private:
219  StateTreeModelPtr stateTreeModel;
220  };
221 
222  // QAbstractItemModel interface
223  bool retrieveNewStateName(QString& newStateName,
224  StateTreeNodePtr& node,
225  bool& createCPPFiles,
226  bool askForCPPFiles);
227  /*!
228  * \brief Buffers the icons so that they are not loaded each time again
229  * \param path Path to icon, can be resource.
230  * \return Freshly loaded or buffered icon.
231  */
232  QIcon getIcon(const QString& path) const;
233  mutable QMap<QString, QIcon> icons;
234 
235  public:
236  QStringList mimeTypes() const override;
237  QMimeData* mimeData(const QModelIndexList& indexes) const override;
238  };
239 } // namespace armarx
armarx::StateTreeController::getNodeByState
StateTreeNodePtr getNodeByState(statechartmodel::StatePtr state)
Definition: StateTreeController.cpp:570
armarx::AbstractStateMimeData
The AbstractStateMimeData class is used to transport state data from the treeview to the stateview an...
Definition: StateMimeData.h:37
armarx::StateTreeController::getSelectedNode
StateTreeNodePtr getSelectedNode()
Definition: StateTreeController.cpp:576
armarx::StateTreeModelPtr
std::shared_ptr< StateTreeModel > StateTreeModelPtr
Definition: StateTreeModel.h:46
armarx::StateTreeController::createNewState
StateTreeNodePtr createNewState(QString name, StateTreeNodePtr parent, bool createDynamicRemoteState=false)
Definition: StateTreeController.cpp:723
cyberglove_with_calib_22dof.ic
ic
Definition: cyberglove_with_calib_22dof.py:22
armarx::StateTreeController::onRenameState
void onRenameState()
Definition: StateTreeController.cpp:1130
armarx::StateTreeController::saveAll
void saveAll()
Definition: StateTreeController.cpp:1781
armarx::StateTreeController::onCloneGroup
void onCloneGroup()
Definition: StateTreeController.cpp:1460
GfxTL::Orientation
ScalarT Orientation(const VectorXD< 2, ScalarT > &p1, const VectorXD< 2, ScalarT > &p2, const VectorXD< 2, ScalarT > &c)
Definition: Orientation.h:10
armarx::ArmarXPackageToolInterfacePtr
std::shared_ptr< ArmarXPackageToolInterface > ArmarXPackageToolInterfacePtr
Definition: ArmarXPackageToolInterface.h:71
armarx::StateTreeController::onStatechartFinished
void onStatechartFinished(int exitCode)
Definition: StateTreeController.cpp:1374
armarx::StateTreeNodePtr
std::shared_ptr< StateTreeNode > StateTreeNodePtr
Definition: StatechartGroupDefs.h:31
armarx::StateTreeController::tryDeleteState
void tryDeleteState()
Definition: StateTreeController.cpp:658
ScenarioManager::Data_Structure::ApplicationPtr
std::shared_ptr< Application > ApplicationPtr
Definition: Application.h:121
armarx::StateTreeController::selectNodeByState
void selectNodeByState(statechartmodel::StatePtr state)
Definition: StateTreeController.cpp:800
armarx::StateTreeController::flags
Qt::ItemFlags flags(const QModelIndex &index) const override
Definition: StateTreeController.cpp:306
armarx::StateTreeController::selectedNodeIsFolder
bool selectedNodeIsFolder()
Definition: StateTreeController.cpp:627
armarx::StateTreeController::selectedNodeIsFolderOrGroup
bool selectedNodeIsFolderOrGroup()
Definition: StateTreeController.cpp:639
armarx::StateTreeController::removeFolder
void removeFolder(StateTreeNodePtr folderNode)
Definition: StateTreeController.cpp:1741
armarx::StateTreeController::stopGroupExecutionWithDependencies
void stopGroupExecutionWithDependencies(StatechartGroupPtr group)
Definition: StateTreeController.cpp:1304
armarx::StatechartProfilePtr
std::shared_ptr< class StatechartProfile > StatechartProfilePtr
Definition: StatechartContext.h:51
armarx::StateTreeController::onRenameGroup
void onRenameGroup()
Definition: StateTreeController.cpp:1511
InfixFilterModel.h
armarx::EditorFileOpener
The EditorFileOpener class.
Definition: editorfileopener.h:39
armarx::StateTreeController::selectedNodeIsState
bool selectedNodeIsState()
Definition: StateTreeController.cpp:621
armarx::StateTreeController::removeNodeFromTree
void removeNodeFromTree(StateTreeNodePtr node)
Definition: StateTreeController.cpp:1768
armarx::StateTreeController::index
QModelIndex index(int row, int column, const QModelIndex &parentIndex=QModelIndex()) const override
Definition: StateTreeController.cpp:340
armarx::StateTreeController::collapseAll
void collapseAll()
Definition: StateTreeController.cpp:1595
armarx::StateTreeController::onMakeStatePublic
void onMakeStatePublic(bool enable)
Definition: StateTreeController.cpp:1110
armarx::StateTreeController::~StateTreeController
~StateTreeController() override
Definition: StateTreeController.cpp:205
armarx::StateTreeController::onDeleteNode
void onDeleteNode()
Definition: StateTreeController.cpp:1083
armarx::StateTreeController::loadAllStates
void loadAllStates()
Definition: StateTreeController.cpp:564
armarx::StateTreeController::addNewGroup
StatechartGroupPtr addNewGroup(const QString &groupName, const QString &groupPath, const QString &description, const QString &packageName, const QList< QString > proxies, bool generateContext, const QMap< QString, QString > &statechartGroupConfigurations)
Definition: StateTreeController.cpp:526
armarx::StateTreeController
Definition: StateTreeController.h:57
armarx::GroupClonerPtr
std::shared_ptr< GroupCloner > GroupClonerPtr
Definition: GroupCloner.h:46
armarx::StateTreeController::openStateCPP
void openStateCPP(StateTreeNodePtr node)
Definition: StateTreeController.cpp:1609
IceInternal::Handle<::Ice::Communicator >
armarx::StateTreeController::onOpenStateCPP
void onOpenStateCPP()
Definition: StateTreeController.cpp:1220
armarx::StateTreeController::columnCount
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Definition: StateTreeController.cpp:413
armarx::StatechartProfilesPtr
std::shared_ptr< StatechartProfiles > StatechartProfilesPtr
Definition: StatechartProfiles.h:36
ArmarXPackageToolInterface.h
armarx::StateTreeController::onNewStateDefinition
void onNewStateDefinition()
Definition: StateTreeController.cpp:993
armarx::StateTreeController::closeAllTabsRequested
void closeAllTabsRequested()
armarx::StateTreeController::nodeIsState
bool nodeIsState(StateTreeNodePtr node)
Definition: StateTreeController.cpp:595
armarx::StateTreeController::onNewFolder
void onNewFolder()
Definition: StateTreeController.cpp:1052
armarx::StateTreeController::loadGroup
StatechartGroupPtr loadGroup(QString groupDefinitionFile)
Definition: StateTreeController.cpp:500
StatechartProfiles.h
armarx::StateTreeController::stopGroupExecution
void stopGroupExecution(StatechartGroupPtr group)
Definition: StateTreeController.cpp:1232
armarx::StateTreeController::selectedNodeIsGroup
bool selectedNodeIsGroup()
Definition: StateTreeController.cpp:633
StateTreeModel.h
editorfileopener.h
armarx::StateTreeController::tryCreateNewState
StateTreeNodePtr tryCreateNewState(QString name)
Definition: StateTreeController.cpp:645
armarx::StateTreeController::onNewDynamicRemoteStateDefinition
void onNewDynamicRemoteStateDefinition()
Definition: StateTreeController.cpp:1035
armarx::StateTreeController::loadAndAddGroup
StatechartGroupPtr loadAndAddGroup(QString groupDefinitionFile)
Definition: StateTreeController.cpp:426
armarx::StateTreeController::tryDeleteGroup
void tryDeleteGroup()
Definition: StateTreeController.cpp:1747
armarx::StateTreeController::onShowFullPath
void onShowFullPath()
Definition: StateTreeController.cpp:1205
armarx::StateTreeController::removeState
void removeState(StateTreeNodePtr stateNode)
Definition: StateTreeController.cpp:1702
armarx::StateTreeController::executeGroup
void executeGroup(StatechartGroupPtr group, QString startState="")
Definition: StateTreeController.cpp:1244
armarx::StatechartGroupPtr
std::shared_ptr< StatechartGroup > StatechartGroupPtr
Definition: StatechartGroupDefs.h:34
armarx::StateTreeController::onExecuteGroup
void onExecuteGroup()
Definition: StateTreeController.cpp:1331
armarx::StateTreeController::onContextMenu
void onContextMenu(const QPoint &point)
Definition: StateTreeController.cpp:811
armarx::StateTreeController::mimeData
QMimeData * mimeData(const QModelIndexList &indexes) const override
Definition: StateTreeController.cpp:1812
armarx::StateTreeController::onGroupProperties
void onGroupProperties()
Definition: StateTreeController.cpp:1566
armarx::StateTreeController::getNode
StateTreeNodePtr getNode(QModelIndex index) const
Definition: StateTreeController.cpp:783
armarx::StateTreeController::createNewFolder
StateTreeNodePtr createNewFolder(QString name, StateTreeNodePtr parent)
Definition: StateTreeController.cpp:766
armarx::StateTreeController::onOpenCMakeProject
void onOpenCMakeProject()
Definition: StateTreeController.cpp:1188
armarx::StateTreeController::tryDeleteFolder
void tryDeleteFolder()
Definition: StateTreeController.cpp:1709
GroupRenamer.h
armarx::StateTreeController::nodeIsGroup
bool nodeIsGroup(StateTreeNodePtr node)
Definition: StateTreeController.cpp:607
GroupCloner.h
armarx::VariantInfoPtr
std::shared_ptr< VariantInfo > VariantInfoPtr
Definition: VariantInfo.h:39
armarx::StateTreeController::onGenerateStateCppFiles
void onGenerateStateCppFiles()
Definition: StateTreeController.cpp:1436
armarx::StateTreeController::parent
QModelIndex parent(const QModelIndex &index) const override
Definition: StateTreeController.cpp:371
armarx::StateTreeController::mimeTypes
QStringList mimeTypes() const override
Definition: StateTreeController.cpp:1803
armarx::StateTreeController::data
QVariant data(const QModelIndex &index, int role) const override
Definition: StateTreeController.cpp:230
armarx::statechartmodel::StatePtr
std::shared_ptr< State > StatePtr
Definition: State.h:48
armarx::InfixFilterModel
This proxy model reimplements the filterAcceptsRow function with a new behavior: All elements that fi...
Definition: InfixFilterModel.h:42
armarx::GroupRenamerPtr
std::shared_ptr< GroupRenamer > GroupRenamerPtr
Definition: GroupRenamer.h:33
armarx::StateTreeController::onFindStateUsages
void onFindStateUsages()
Definition: StateTreeController.cpp:1117
Application.h
armarx::StateTreeController::selectNode
void selectNode(StateTreeNodePtr node)
Definition: StateTreeController.cpp:1601
armarx::StateTreeController::headerData
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition: StateTreeController.cpp:329
armarx::StateTreeController::onOpenGroup
void onOpenGroup(QString groupFile="")
Definition: StateTreeController.cpp:1226
StateTreeNode.h
armarx::StateTreeController::executeGroupWithDependencies
void executeGroupWithDependencies(StatechartGroupPtr group, QString startState)
Definition: StateTreeController.cpp:1293
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::StateTreeController::getClosestParentFolderOrGroupNode
StateTreeNodePtr getClosestParentFolderOrGroupNode(StateTreeNodePtr node)
Definition: StateTreeController.cpp:589
armarx::StateTreeController::rowCount
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition: StateTreeController.cpp:390
armarx::StateTreeControllerPtr
std::shared_ptr< StateTreeController > StateTreeControllerPtr
Definition: StateEditorController.h:43
armarx::StateTreeController::nodeIsFolderOrGroup
bool nodeIsFolderOrGroup(StateTreeNodePtr node)
Definition: StateTreeController.cpp:613
armarx::StateTreeController::nodeIsFolder
bool nodeIsFolder(StateTreeNodePtr node)
Definition: StateTreeController.cpp:601
armarx::StateTreeController::StateTreeController
StateTreeController(Ice::CommunicatorPtr ic, VariantInfoPtr variantInfo, QList< QVariant > headerInfo, QTreeView *treeView, QLineEdit *filterLineEdit, const ArmarXPackageToolInterfacePtr &packageTool, const StatechartProfilesPtr &statechartProfiles, StatechartProfilePtr currentProfile, QObject *parent=0)
Definition: StateTreeController.cpp:64