ArmarXWidgetController.h
Go to the documentation of this file.
1 /*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package ArmarX::Gui
17 * @author Mirko Waechter ( mirko.waechter at kit dot edu)
18 * @date 2012
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22 
23 #pragma once
24 
26 
27 #include <IceUtil/Shared.h>
28 
29 #include <QSettings>
30 #include <QPointer>
31 #include <QWidget>
32 
33 #include <memory>
34 #include <mutex>
35 
36 
37 class SoNode;
38 class QDialog;
39 class QMainWindow;
40 
41 namespace armarx
42 {
43  class ArmarXWidgetController;
44  class TipDialog;
52  public QObject,
53  virtual public Logging,
54  virtual public IceUtil::Shared
55  {
56  Q_OBJECT
57  public:
58  explicit ArmarXWidgetController();
59  ~ArmarXWidgetController() override;
60 
75  virtual QPointer<QWidget> getWidget();
76 
92  virtual QPointer<QDialog> getConfigDialog(QWidget* parent = 0);
93 
101  virtual void configured() {}
102 
113  virtual QPointer<QWidget> getCustomTitlebarWidget(QWidget* parent = 0);
114 
136  virtual QString getWidgetName() const = 0;
137 
142  virtual QIcon getWidgetIcon() const;
143 
159  static QIcon GetWidgetIcon();
160 
165  virtual QIcon getWidgetCategoryIcon() const;
181  static QIcon GetWidgetCategoryIcon();
182 
188  virtual void loadSettings(QSettings* settings) = 0;
189 
195  virtual void saveSettings(QSettings* settings) = 0;
196 
202  virtual SoNode* getScene()
203  {
204  return 0;
205  }
212  virtual QPointer<QDialog> getSceneConfigDialog(QWidget* parent = nullptr);
213 
214 
219  virtual bool onClose()
220  {
221  return true;
222  }
223 
228  virtual void postDocking()
229  {
230 
231  }
232 
239  bool setInstanceName(QString instanceName);
240  QString getInstanceName();
241  virtual void setMainWindow(QMainWindow* mainWindow);
245  virtual QMainWindow* getMainWindow();
246 
251  QPointer<TipDialog> getTipDialog() const;
252  void setTipDialog(QPointer<TipDialog> tipDialog);
253 
254  // This is all total madness. Why do we put mutexes and locks into shared pointers?
255  using RecursiveMutex = std::recursive_mutex;
256  using RecursiveMutexPtr = std::shared_ptr<RecursiveMutex>;
257  using RecursiveMutexLock = std::unique_lock<RecursiveMutex>;
258  using RecursiveMutexLockPtr = std::shared_ptr<RecursiveMutexLock>;
263  virtual void setMutex3D(RecursiveMutexPtr const& mutex3D);
264 
265  template <typename Class>
267  {
268  ArmarXWidgetControllerPtr ptr = new Class();
269  return ptr;
270  }
271 
272  static int showMessageBox(const QString& msg);
273 
282  void enableMainWidgetAsync(bool enable);
283 
284 
285  virtual void onLockWidget();
286  virtual void onUnlockWidget();
287  signals:
290  public slots:
291  void configAccepted();
292  void configRejected();
293  void enableMainWidget(bool enable);
294 
295  private:
296  QString __instanceName;
297  QPointer<QWidget> __widget;
298  QMainWindow* __appMainWindow;
299  QPointer<TipDialog> tipDialog;
300  protected:
301  std::shared_ptr<std::recursive_mutex> mutex3D;
302  };
303 }
304 
305 namespace std
306 {
307 
308  ARMARXCORE_IMPORT_EXPORT ostream& operator<< (ostream& stream, const QString& string);
309 
310  ARMARXCORE_IMPORT_EXPORT ostream& operator<<(ostream& stream, const QPointF& point);
311 
312  ARMARXCORE_IMPORT_EXPORT ostream& operator<<(ostream& stream, const QRectF& rect);
313 
314  ARMARXCORE_IMPORT_EXPORT ostream& operator<<(ostream& stream, const QSizeF& rect);
315 
316 }
317 
armarx::ArmarXWidgetController::mutex3D
std::shared_ptr< std::recursive_mutex > mutex3D
Definition: ArmarXWidgetController.h:301
armarx::ArmarXWidgetController::configRejected
void configRejected()
Definition: ArmarXWidgetController.cpp:152
armarx::ArmarXWidgetController::createInstance
static ArmarXWidgetControllerPtr createInstance()
Definition: ArmarXWidgetController.h:266
armarx::ArmarXWidgetController::getCustomTitlebarWidget
virtual QPointer< QWidget > getCustomTitlebarWidget(QWidget *parent=0)
getTitleToolbar returns a pointer to the a toolbar widget of this controller.
Definition: ArmarXWidgetController.cpp:69
armarx::ArmarXWidgetController::onUnlockWidget
virtual void onUnlockWidget()
Definition: ArmarXWidgetController.cpp:185
armarx::ArmarXWidgetController::RecursiveMutex
std::recursive_mutex RecursiveMutex
Definition: ArmarXWidgetController.h:255
armarx::ArmarXWidgetController::getScene
virtual SoNode * getScene()
Reimplementing this function and returning a SoNode* will show this SoNode in the 3DViewerWidget,...
Definition: ArmarXWidgetController.h:202
armarx::ArmarXWidgetController::configured
virtual void configured()
This function must be implemented by the user, if he supplies a config dialog.
Definition: ArmarXWidgetController.h:101
armarx::ArmarXWidgetController::loadSettings
virtual void loadSettings(QSettings *settings)=0
Implement to load the settings that are part of the GUI configuration.
armarx::ArmarXWidgetController::getConfigDialog
virtual QPointer< QDialog > getConfigDialog(QWidget *parent=0)
getConfigDialog returns a pointer to the a configuration widget of this controller.
Definition: ArmarXWidgetController.cpp:64
armarx::ArmarXWidgetController
Definition: ArmarXWidgetController.h:51
armarx::ArmarXWidgetController::saveSettings
virtual void saveSettings(QSettings *settings)=0
Implement to save the settings as part of the GUI configuration.
armarx::ArmarXWidgetController::RecursiveMutexLockPtr
std::shared_ptr< RecursiveMutexLock > RecursiveMutexLockPtr
Definition: ArmarXWidgetController.h:258
armarx::ArmarXWidgetController::getInstanceName
QString getInstanceName()
Definition: ArmarXWidgetController.cpp:115
armarx::ArmarXWidgetController::RecursiveMutexLock
std::unique_lock< RecursiveMutex > RecursiveMutexLock
Definition: ArmarXWidgetController.h:257
armarx::ArmarXWidgetController::enableMainWidget
void enableMainWidget(bool enable)
Definition: ArmarXWidgetController.cpp:157
armarx::ArmarXWidgetController::getMainWindow
virtual QMainWindow * getMainWindow()
Returns the ArmarX MainWindow.
Definition: ArmarXWidgetController.cpp:125
armarx::ArmarXWidgetController::setTipDialog
void setTipDialog(QPointer< TipDialog > tipDialog)
Definition: ArmarXWidgetController.cpp:135
armarx::ArmarXWidgetController::configAccepted
void configAccepted()
Definition: ArmarXWidgetController.cpp:146
armarx::ArmarXWidgetController::getSceneConfigDialog
virtual QPointer< QDialog > getSceneConfigDialog(QWidget *parent=nullptr)
Reimplementing this function and returning a QDialog* will enable a configuration button which opens ...
Definition: ArmarXWidgetController.cpp:94
armarx::ArmarXWidgetController::getTipDialog
QPointer< TipDialog > getTipDialog() const
Returns the default instance for the TipDialog used by all widgets (if not set otherwise).
Definition: ArmarXWidgetController.cpp:130
armarx::ArmarXWidgetController::setMutex3D
virtual void setMutex3D(RecursiveMutexPtr const &mutex3D)
This mutex is used to protect 3d scene updates. Usually called by the ArmarXGui main window on creati...
Definition: ArmarXWidgetController.cpp:141
armarx::ArmarXWidgetController::GetWidgetIcon
static QIcon GetWidgetIcon()
Implement this function to supply an icon for the menu (if you implemented static QString GetWidgetNa...
Definition: ArmarXWidgetController.cpp:79
armarx::ArmarXWidgetController::RecursiveMutexPtr
std::shared_ptr< RecursiveMutex > RecursiveMutexPtr
Definition: ArmarXWidgetController.h:256
armarx::ArmarXWidgetController::postDocking
virtual void postDocking()
postDocking is called after the widget has been docked into the main window.
Definition: ArmarXWidgetController.h:228
armarx::ArmarXWidgetController::GetWidgetCategoryIcon
static QIcon GetWidgetCategoryIcon()
Implement this function to supply an icon for the menu (if you implemented static QString GetWidgetNa...
Definition: ArmarXWidgetController.cpp:89
std::operator<<
ARMARXCORE_IMPORT_EXPORT ostream & operator<<(ostream &stream, const armarx::RunningTaskIceBase &task)
armarx::ArmarXWidgetController::setInstanceName
bool setInstanceName(QString instanceName)
sets the name of this instance.
Definition: ArmarXWidgetController.cpp:99
armarx::ArmarXWidgetController::showMessageBox
static int showMessageBox(const QString &msg)
Definition: ArmarXWidgetController.cpp:166
armarx::ArmarXWidgetController::onClose
virtual bool onClose()
onClose is called before the DockWidget is closed.
Definition: ArmarXWidgetController.h:219
armarx::Logging
Base Class for all Logging classes.
Definition: Logging.h:232
armarx::ArmarXWidgetController::enableMainWidgetAsync
void enableMainWidgetAsync(bool enable)
This function enables/disables the main widget asynchronously (if called from a non qt thread).
Definition: ArmarXWidgetController.cpp:174
std
Definition: Application.h:66
IceUtil::Handle< ArmarXWidgetController >
armarx::ArmarXWidgetController::onLockWidget
virtual void onLockWidget()
Definition: ArmarXWidgetController.cpp:183
armarx::ArmarXWidgetController::getWidgetName
virtual QString getWidgetName() const =0
Implement this function to specify the default name of your Widget.
armarx::ArmarXWidgetController::getWidget
virtual QPointer< QWidget > getWidget()
getWidget returns a pointer to the a widget of this controller.
Definition: ArmarXWidgetController.cpp:54
armarx::ArmarXWidgetController::getWidgetCategoryIcon
virtual QIcon getWidgetCategoryIcon() const
Implement this function to supply an icon for the category.
Definition: ArmarXWidgetController.cpp:84
armarx::ArmarXWidgetController::getWidgetIcon
virtual QIcon getWidgetIcon() const
Implement this function to supply an icon for the menu.
Definition: ArmarXWidgetController.cpp:74
ARMARXCORE_IMPORT_EXPORT
#define ARMARXCORE_IMPORT_EXPORT
Definition: ImportExport.h:38
Logging.h
armarx::ArmarXWidgetController::setMainWindow
virtual void setMainWindow(QMainWindow *mainWindow)
Definition: ArmarXWidgetController.cpp:120
armarx::ArmarXWidgetController::ArmarXWidgetController
ArmarXWidgetController()
Definition: ArmarXWidgetController.cpp:39
armarx::ArmarXWidgetController::~ArmarXWidgetController
~ArmarXWidgetController() override
Definition: ArmarXWidgetController.cpp:44
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28