ArmarXMainWindow.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 
28 
29 // Qt
30 #include <QMainWindow>
31 #include <QDir>
32 #include <QDockWidget>
33 #include <QAction>
34 #include <QPluginLoader>
35 
36 // Coin3D & SoQt
37 #include <Inventor/nodes/SoNode.h>
38 #include <Inventor/nodes/SoSeparator.h>
39 
40 // ArmarX
44 
45 #include <QSplashScreen>
46 
47 #include "Widgets/ViewerWidget.h"
49 
50 class QToolButton;
51 class QLabel;
52 class QScrollArea;
53 class QSignalMapper;
54 class QListWidgetItem;
55 class QActionGroup;
56 class QLineEdit;
57 
58 namespace Ui
59 {
60  class ArmarXMainWindow;
61 }
62 
63 // project
64 namespace armarx
65 {
66  class GuiUseCaseSelector;
67  class AddArmarXWidgetAction;
68 
69  class ArmarXDockWidget;
70 
71  struct Viewer3DInfo
72  {
73  SoNode* node;
74  QPointer<QDialog> sceneConfigDialog;
75  };
76 
81  public QMainWindow,
82  virtual public armarx::Logging
83  {
84  Q_OBJECT
85 
86  public:
87  ArmarXMainWindow(const armarx::ManagedIceObjectRegistryInterfacePtr& registry, const std::vector<std::string>& packages, const QString& configToLoad, bool disablePreloading);
88  ~ArmarXMainWindow() override;
89 
93  void loadPlugin(QString filePath);
94 
98  void closeEvent(QCloseEvent* event) override;
99 
101  void addToRecentlyOpenedFileList(QString configFilepath);
102 
107  std::vector<std::string> getDefaultPackageNames();
108 
113 
118  std::shared_ptr<std::recursive_mutex> getMutex3D();
119 
120  bool existsWidget(const QString& widgetName);
121  QString getLibraryPathFromPackage(const QString& packageName);
122 
123  QStringList getFavoriteWidgets();
124 
125  public slots:
126  void loadPluginsFromPackage(const QString& packageName);
127  void loadGuiConfig(QString configFilepath = "", bool showAsOpenGuiConfig = true);
128  void appendFileToWindowTitle(const QString& filepath = "");
129 
130  signals:
134  void closeRequest();
135 
136 
137  void updateSceneList(QMap<QString, Viewer3DInfo>);
138  private slots:
139  void closeAllWidgets();
140  void closeAllWidgetsWithDialog();
141  void saveGuiConfig();
142  void saveGuiConfigAs();
143  void updateStatusOfOpenWidgets();
144  void enterFullscreenMode();
145  void leaveFullscreenMode();
146  void toggleWidgetLock();
147 
148 
152  void pluginDialog();
153 
154 
155  // void listIndexes(const QModelIndexList & indexes);
156  ArmarXWidgetControllerPtr createArmarXWidget(QString widgetName, QString customInstanceName, QSettings* settings = NULL);
157  ArmarXWidgetControllerPtr addArmarXWidget(ArmarXWidgetControllerPtr newWidgetController, bool createViewerWidget = true);
158  void addArmarXWidgetCanceled(ArmarXWidgetControllerPtr newWidgetController);
159  void removeArmarXWidget(QObject* widget);
160  void removeViewerWidget(QObject* widget);
161 
162  void on_actionClear_tip_blacklist_triggered();
163 
164  void on_actionAbout_triggered();
165 
166  void on_actionLoadLastConfig_toggled(bool toggled);
167 
168  void on_actionArmarX_Documentation_triggered();
169 
170  void on_actionOpen_Use_Case_triggered();
171 
172  void on_actionClear_plugin_cache_triggered();
173 
174  void updateOpenWidgetButtonStatus(QString widgetName);
175 
176  void openWidgetButtonClicked();
177 
178  void onContextMenuFavoritesRequested(const QPoint& pos);
179  void onNumberOfMaxFavoritesChanged(int i);
180 
181  void updatefavoriteActions();
182  private:
186  void updateAvailableWidgetList();
187  void updateOpenWidgetList();
188 
192  void addArVizGodotIcon();
193 
197  Viewer3DWidgetPtr setupViewerWidget();
198 
202  void loadPlugins(const QString& pluginDir, bool searchRecursive = true);
203 
204 
205  void loadPlugins(const QSet<QString>& pluginDirs, bool searchRecursive = true);
206  void loadPlugins(const QStringList& fileNames);
207 
208  QAction* addActionToToolBar(QAction* action, bool allowText);
209 
210  PluginCache pluginCache;
211  QDir pluginsDir;
212  QStringList loadedPackages;
213  std::vector<QPluginLoader*> pluginsToLoad;
214  QList<QDir> directoriesToCheck;
215 
216  ::Ui::ArmarXMainWindow* ui;
217 
219 
220  std::vector<ArmarXGuiInterface*> plugins;
221  QStringList loadedPluginFilepaths;
222 
223  QList<QWidget*> widgetsList;
224  // WidgetCreatorMap availableWidgets;
225 
226  QMap<QString, Viewer3DInfo> viewer3DMap;
227 
228  QSignalMapper* signalMapper;
229  QActionGroup* layoutActions;
230  using OpenWidgetMap = QMap<QString, QPair<QDockWidget*, ArmarXWidgetControllerPtr> >;
231  OpenWidgetMap listOpenWidgets;
232  std::vector<ArmarXWidgetControllerPtr> pendingWidgets;
233  QListWidgetItem* viewerItem;
234 
235  QPointer<TipDialog> tipDialog;
236  const int widgetUsageHistoryLength = 100;
237 
238 
239  std::vector<std::string> defaultPackageNames;
240 
241 
242  // Emergency Stop
243  EmergencyStopWidgetPtr emergencyStopWidget;
244 
245  QAction* leaveFullScreenActionF11;
246  QAction* leaveFullScreenActionEsc;
247 
248  bool widgetsLocked;
249 
250  private:
251  QPointer<QDockWidget> getBiggestOpenWidget();
252  QMenu* getCategoryMenu(const std::string& categoryString, QMenu* menu, QIcon widgetIcon);
253  const std::string settingsFile;
254  QSettings mainSettings;
255  QString configFilepath;
256  QString guiWindowBaseName;
257  QTimer* connectionStatusTimer;
258  QSplashScreen* splashSceen;
259  QString splashscreenPrefix;
260  GuiUseCaseSelector* guiUseCaseSelector;
261  QStringList mainWidgets;
262  QToolButton* openWidgetButton;
263  QLineEdit* searchField;
264  AddArmarXWidgetAction* addWidgetAction;
265  std::shared_ptr<std::recursive_mutex> mutex3d;
266  QMap<QString, QAction*> actionList;
267 
268  QLabel* favoritesLabel;
269  std::vector<QAction*> favoriteActions;
270  QStringList favoriteActionWidgetNames;
271 
272  friend class WidgetNameDialog;
273  friend class Viewer3DWidget;
274  };
275 
279 
280  class WidgetNameDialog;
281 
286  public QDockWidget
287  {
288  public:
290  ~ArmarXDockWidget() override;
291  void setArmarXWidget(QWidget* widget);
292  void closeEvent(QCloseEvent* event) override;
293 
294  void lockWidget();
295  void unlockWidget();
296  private:
298  QScrollArea* scrollArea;
299 
300  QWidget* savedTitleBar;
301  };
302 
304  public QAction
305  {
306  Q_OBJECT
307  public:
308  AddArmarXWidgetAction(QString widgetName, QObject* parent = 0, ArmarXMainWindow* mainGui = 0);
309  ~AddArmarXWidgetAction() override;
310 
311  public slots:
312  void triggered(QString widgetName = QString());
313  void addArmarXWidget();
314  void dialogAccepted();
315  signals:
316  void clicked(QString widgetName, QString customInstanceName);
317  void accepted();
318  private:
319  ArmarXMainWindow* mainGui;
320  WidgetNameDialog* dialog;
321  };
322 
324  public QAction
325  {
326  Q_OBJECT
327  public:
328  OpenRecentlyOpenedFileAction(QString text, QObject* parent = 0, ArmarXMainWindow* mainGui = 0);
329  public slots :
330  void openFile();
331  private:
332  ArmarXMainWindow* mainGui;
333  };
334 
335 
336 
337 }
338 
armarx::Viewer3DInfo::sceneConfigDialog
QPointer< QDialog > sceneConfigDialog
Definition: ArmarXMainWindow.h:74
armarx::AddArmarXWidgetAction::triggered
void triggered(QString widgetName=QString())
Definition: ArmarXMainWindow.cpp:1505
armarx::ArmarXDockWidget::lockWidget
void lockWidget()
Definition: ArmarXMainWindow.cpp:1592
armarx::ArmarXMainWindow::getFavoriteWidgets
QStringList getFavoriteWidgets()
Definition: ArmarXMainWindow.cpp:378
armarx::ArmarXMainWindow::closeEvent
void closeEvent(QCloseEvent *event) override
emits the closeRequest signal
Definition: ArmarXMainWindow.cpp:520
armarx::ArmarXMainWindow::~ArmarXMainWindow
~ArmarXMainWindow() override
Definition: ArmarXMainWindow.cpp:244
armarx::ArmarXMainWindow
The ArmarXMainWindow class.
Definition: ArmarXMainWindow.h:80
armarx::Viewer3DWidget
The Viewer3DWidget class.
Definition: ViewerWidget.h:55
armarx::ArmarXMainWindow::updateRecentlyOpenedFileList
void updateRecentlyOpenedFileList()
Definition: ArmarXMainWindow.cpp:1374
RunningTask.h
armarx::AddArmarXWidgetAction::~AddArmarXWidgetAction
~AddArmarXWidgetAction() override
Definition: ArmarXMainWindow.cpp:1500
armarx::ArmarXMainWindow::appendFileToWindowTitle
void appendFileToWindowTitle(const QString &filepath="")
Definition: ArmarXMainWindow.cpp:845
plugins
EmergencyStopWidget.h
armarx::ArmarXMainWindow::loadPlugin
void loadPlugin(QString filePath)
loads a plugin with the given file path
Definition: ArmarXMainWindow.cpp:498
armarx::ArmarXMainWindow::addToRecentlyOpenedFileList
void addToRecentlyOpenedFileList(QString configFilepath)
Definition: ArmarXMainWindow.cpp:577
IceInternal::Handle< EmergencyStopWidget >
ArmarXGuiPlugin.h
armarx::ArmarXMainWindow::updateSceneList
void updateSceneList(QMap< QString, Viewer3DInfo >)
armarx::ArmarXDockWidget::ArmarXDockWidget
ArmarXDockWidget(QString name, ArmarXWidgetControllerPtr controller)
Definition: ArmarXMainWindow.cpp:1548
armarx::ArmarXMainWindow::existsWidget
bool existsWidget(const QString &widgetName)
Definition: ArmarXMainWindow.cpp:492
controller
Definition: AddOperation.h:39
Ui
ArmarX Headers.
Definition: ArmarXMainWindow.h:58
armarx::ArmarXMainWindow::getMutex3D
std::shared_ptr< std::recursive_mutex > getMutex3D()
Provides access to the coin3d mutex. Use this mutex to protect access to the 3d scene.
armarx::ArmarXMainWindow::getLibraryPathFromPackage
QString getLibraryPathFromPackage(const QString &packageName)
Definition: ArmarXMainWindow.cpp:368
armarx::ArmarXMainWindow::getViewerWidget
Viewer3DWidgetPtr getViewerWidget()
Provides access to a viewer widget, if existent.
Definition: ArmarXMainWindow.cpp:602
armarx::WidgetNameDialog
The WidgetNameDialog class.
Definition: WidgetNameDialog.h:42
armarx::ArmarXMainWindow::getDefaultPackageNames
std::vector< std::string > getDefaultPackageNames()
getDefaultPackageNames returns the names of all packages which are searched for plugins when the Arma...
Definition: ArmarXMainWindow.cpp:596
ViewerWidget.h
armarx::ArmarXDockWidget::setArmarXWidget
void setArmarXWidget(QWidget *widget)
Definition: ArmarXMainWindow.cpp:1568
armarx::ArmarXMainWindow::loadGuiConfig
void loadGuiConfig(QString configFilepath="", bool showAsOpenGuiConfig=true)
Definition: ArmarXMainWindow.cpp:614
armarx::ArmarXDockWidget::unlockWidget
void unlockWidget()
Definition: ArmarXMainWindow.cpp:1603
armarx::OpenRecentlyOpenedFileAction
Definition: ArmarXMainWindow.h:323
armarx::AddArmarXWidgetAction::AddArmarXWidgetAction
AddArmarXWidgetAction(QString widgetName, QObject *parent=0, ArmarXMainWindow *mainGui=0)
Definition: ArmarXMainWindow.cpp:1492
armarx::ArmarXMainWindow::ArmarXMainWindow
ArmarXMainWindow(const armarx::ManagedIceObjectRegistryInterfacePtr &registry, const std::vector< std::string > &packages, const QString &configToLoad, bool disablePreloading)
Definition: ArmarXMainWindow.cpp:114
armarx::OpenRecentlyOpenedFileAction::OpenRecentlyOpenedFileAction
OpenRecentlyOpenedFileAction(QString text, QObject *parent=0, ArmarXMainWindow *mainGui=0)
Definition: ArmarXMainWindow.cpp:1625
armarx::AddArmarXWidgetAction::accepted
void accepted()
armarx::ArmarXMainWindow::closeRequest
void closeRequest()
emitted, when the main window should be closed
armarx::Logging
Base Class for all Logging classes.
Definition: Logging.h:232
IceUtil::Handle< ManagedIceObjectRegistryInterface >
armarx::ArmarXDockWidget
The ArmarXDockWidget class.
Definition: ArmarXMainWindow.h:285
armarx::Viewer3DInfo::node
SoNode * node
Definition: ArmarXMainWindow.h:73
Logging.h
armarx::GuiUseCaseSelector
Definition: GuiUseCaseSelector.h:40
armarx::ArmarXMainWindow::loadPluginsFromPackage
void loadPluginsFromPackage(const QString &packageName)
Definition: ArmarXMainWindow.cpp:413
armarx::ArmarXDockWidget::~ArmarXDockWidget
~ArmarXDockWidget() override
Definition: ArmarXMainWindow.cpp:1562
armarx::AddArmarXWidgetAction
Definition: ArmarXMainWindow.h:303
armarx::AddArmarXWidgetAction::clicked
void clicked(QString widgetName, QString customInstanceName)
armarx::AddArmarXWidgetAction::addArmarXWidget
void addArmarXWidget()
Definition: ArmarXMainWindow.cpp:1525
armarx::OpenRecentlyOpenedFileAction::openFile
void openFile()
Definition: ArmarXMainWindow.cpp:1632
PluginCache.h
armarx::ArmarXDockWidget::closeEvent
void closeEvent(QCloseEvent *event) override
Definition: ArmarXMainWindow.cpp:1574
armarx::AddArmarXWidgetAction::dialogAccepted
void dialogAccepted()
Definition: ArmarXMainWindow.cpp:1541
armarx::Viewer3DInfo
Definition: ArmarXMainWindow.h:71
armarx::PluginCache
Definition: PluginCache.h:36
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
Application.h