CustusX  15.3.4-beta
An IGT application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cxDockWidgets.cpp
Go to the documentation of this file.
1 #include "cxDockWidgets.h"
2 #include <QDockWidget>
3 #include <QMainWindow>
4 #include <QScrollArea>
5 #include <iostream>
6 
7 namespace cx
8 {
9 
10 DockWidgets::DockWidgets(QMainWindow* parent) :
11  mParent(parent)
12 {
13 
14 }
15 
16 QDockWidget* DockWidgets::addAsDockWidget(QWidget* widget, QString groupname)
17 {
18  QDockWidget* dockWidget = this->createDockWidget(widget);
19 // QMainWindow::addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
20 
21  this->tabifyWidget(dockWidget);
22 
23  mDockWidgets.insert(dockWidget);
24  dockWidget->setVisible(false); // default visibility
25 // this->restoreDockWidget(dockWidget); // restore if added after construction
26 
27  // this->addToWidgetGroupMap(dockWidget->toggleViewAction(), groupname);
28  return dockWidget;
29 }
30 
31 QDockWidget* DockWidgets::createDockWidget(QWidget* widget)
32 {
33  QScrollArea* scroller = this->addVerticalScroller(widget);
34  QDockWidget* dockWidget = new QDockWidget(widget->windowTitle(), mParent);
35  connect(widget, &QWidget::windowTitleChanged, this, &DockWidgets::onConsoleWindowTitleChanged);
36  dockWidget->setObjectName(widget->objectName() + "DockWidget");
37  dockWidget->setFocusPolicy(Qt::StrongFocus); // we really want to focus on the embedded widget, see focusInsideDockWidget()
38  dockWidget->setWidget(scroller);
39  return dockWidget;
40 }
41 
42 void DockWidgets::onConsoleWindowTitleChanged(const QString & title)
43 {
44  QWidget* widget = dynamic_cast<QWidget*>(sender());
45 
46  for (int i=0; i<3; ++i)
47  {
48  if (!widget)
49  return;
50  QDockWidget* dockWidget = dynamic_cast<QDockWidget*>(widget);
51  if (dockWidget)
52  {
53  dockWidget->setWindowTitle(title);
54  return;
55  }
56  widget = widget->parentWidget();
57  }
58 }
59 
60 QScrollArea* DockWidgets::addVerticalScroller(QWidget *widget)
61 {
62  QScrollArea* scroller = new QScrollArea(NULL);
63  scroller->setWidget(widget);
64  widget->setParent(scroller);
65  scroller->setWidgetResizable(true);
66  scroller->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
67  QSizePolicy policy = scroller->sizePolicy();
68  policy.setHorizontalPolicy(QSizePolicy::Minimum);
69  scroller->setSizePolicy(policy);
70  return scroller;
71 }
72 
73 void DockWidgets::tabifyWidget(QDockWidget* dockWidget)
74 {
75  for (std::set<QDockWidget*>::iterator iter = mDockWidgets.begin(); iter != mDockWidgets.end(); ++iter)
76  {
77  if (mParent->dockWidgetArea(*iter) == Qt::LeftDockWidgetArea)
78  {
79  mParent->tabifyDockWidget(*iter, dockWidget);
80  break;
81  }
82  }
83 }
84 
85 void DockWidgets::erase(QDockWidget* dockWidget)
86 {
87  this->mDockWidgets.erase(dockWidget);
88 }
89 
90 void DockWidgets::toggleDebug(QAction* action, bool checked)
91 {
92  for (std::set<QDockWidget*>::iterator iter = mDockWidgets.begin(); iter != mDockWidgets.end(); ++iter)
93  {
94  if (action == (*iter)->toggleViewAction())
95  {
96  if (!checked)
97  (*iter)->hide();
98  }
99  }
100 }
101 
103 {
104  for (std::set<QDockWidget*>::iterator iter = mDockWidgets.begin(); iter != mDockWidgets.end(); ++iter)
105  (*iter)->hide();
106 }
107 
108 } // namespace cx
QDockWidget * addAsDockWidget(QWidget *widget, QString groupname="")
void toggleDebug(QAction *action, bool checked)
DockWidgets(QMainWindow *parent)
void erase(QDockWidget *dockWidget)