15 mMainWindow(mainWindow)
22 QDockWidget* dockWidget = this->createDockWidget(widget);
23 mMainWindow->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
25 this->tabifyWidget(dockWidget);
28 item.mWidget = dockWidget;
29 dockWidget->setVisible(
false);
31 item.mGroup = groupname;
32 item.mName = widget->windowTitle();
33 mMainWindow->restoreDockWidget(dockWidget);
35 item.mOwningService = owningPlugin;
37 connect(dockWidget->toggleViewAction(), &QAction::triggered,
this, &DynamicMainWindowWidgets::onWidgetActionTriggered);
39 mItems.push_back(item);
46 item.mWidget = toolbar;
47 item.mGroup = groupname;
48 item.mName = toolbar->windowTitle();
49 mItems.push_back(item);
51 mMainWindow->addToolBar(toolbar);
57 QDockWidget* DynamicMainWindowWidgets::createDockWidget(QWidget* widget)
59 QScrollArea* scroller = this->addVerticalScroller(widget);
60 QDockWidget* dockWidget =
new QDockWidget(widget->windowTitle(), mMainWindow);
61 connect(widget, &QWidget::windowTitleChanged,
this, &DynamicMainWindowWidgets::onConsoleWindowTitleChanged);
62 dockWidget->setObjectName(widget->objectName() +
"DockWidget");
63 dockWidget->setFocusPolicy(Qt::StrongFocus);
64 dockWidget->setWidget(scroller);
70 for (
unsigned i=0; i<mItems.size(); ++i)
72 DynamicWidget item = mItems[i];
74 if (item.mName != name)
79 QDockWidget* dockWidget =
dynamic_cast<QDockWidget*
>(item.mWidget);
93 for (
unsigned i=0; i<desktop.
mPresets.size(); ++i)
94 this->restorePreset(desktop.
mPresets[i]);
97 void DynamicMainWindowWidgets::restorePreset(
const Desktop::Preset& preset)
99 QToolBar* tb = mMainWindow->findChild<QToolBar*>(preset.
name);
102 mMainWindow->removeToolBar(tb);
103 mMainWindow->addToolBar(Qt::TopToolBarArea, tb);
108 QDockWidget* dw = mMainWindow->findChild<QDockWidget*>(preset.
name+
"DockWidget");
114 QDockWidget* first = this->getFirstDockWidget(Qt::DockWidgetArea(preset.
position));
116 mMainWindow->tabifyDockWidget(first, dw);
118 mMainWindow->addDockWidget(Qt::DockWidgetArea(preset.
position), dw);
122 mMainWindow->addDockWidget(Qt::DockWidgetArea(preset.
position), dw);
127 CX_LOG_WARNING() << QString(
"Attempted to restore a nonexitent preset widget: [%1]").arg(preset.
name);
130 void DynamicMainWindowWidgets::onWidgetActionTriggered(
bool checked)
132 QAction* action =
dynamic_cast<QAction*
>(sender());
135 QWidget* widget =
dynamic_cast<QWidget*
>(action->parent());
147 for (
unsigned i=0; i<mItems.size(); )
149 DynamicWidget item = mItems[i];
151 if (item.mOwningService != service)
158 mItems.erase(mItems.begin()+i);
160 QDockWidget* dockWidget =
dynamic_cast<QDockWidget*
>(item.mWidget);
162 mMainWindow->removeDockWidget(dockWidget);
167 void DynamicMainWindowWidgets::onConsoleWindowTitleChanged(
const QString & title)
169 QWidget* widget =
dynamic_cast<QWidget*
>(sender());
171 for (
int i=0; i<3; ++i)
175 QDockWidget* dockWidget =
dynamic_cast<QDockWidget*
>(widget);
178 dockWidget->setWindowTitle(title);
181 widget = widget->parentWidget();
185 QScrollArea* DynamicMainWindowWidgets::addVerticalScroller(QWidget *widget)
187 QScrollArea* scroller =
new QScrollArea(NULL);
188 scroller->setWidget(widget);
189 widget->setParent(scroller);
190 scroller->setWidgetResizable(
true);
191 scroller->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
192 QSizePolicy policy = scroller->sizePolicy();
193 policy.setHorizontalPolicy(QSizePolicy::Minimum);
194 scroller->setSizePolicy(policy);
198 void DynamicMainWindowWidgets::tabifyWidget(QDockWidget* dockWidget)
200 QDockWidget* widget = this->getFirstDockWidget(Qt::LeftDockWidgetArea);
203 mMainWindow->tabifyDockWidget(widget, dockWidget);
206 QDockWidget* DynamicMainWindowWidgets::getFirstDockWidget(Qt::DockWidgetArea area)
208 for (
unsigned i=0; i<mItems.size(); ++i)
210 QDockWidget* widget =
dynamic_cast<QDockWidget*
>(mItems[i].mWidget);
213 if (mMainWindow->dockWidgetArea(widget) == Qt::LeftDockWidgetArea)
221 for (
unsigned i=0; i<mItems.size(); ++i)
223 mItems[i].mWidget->hide();
241 void DynamicMainWindowWidgets::addToWidgetGroupMap(ActionGroupMap& groups, QAction* action, QString groupname)
245 action->setMenuRole(QAction::NoRole);
247 if (!groups.count(groupname))
249 QActionGroup* group =
new QActionGroup(
this);
250 group->setExclusive(
false);
251 groups[groupname] = group;
253 QAction* heading =
new QAction(groupname,
this);
254 heading->setDisabled(
true);
255 groups[groupname]->addAction(heading);
258 groups[groupname]->addAction(action);
265 QMenu* popupMenu =
new QMenu;
267 ActionGroupMap groups;
268 ActionGroupMap tgroups;
269 for (
unsigned i=0; i<mItems.size(); ++i)
271 QDockWidget* widget =
dynamic_cast<QDockWidget*
>(mItems[i].mWidget);
273 this->addToWidgetGroupMap(groups, widget->toggleViewAction(), mItems[i].mGroup);
274 QToolBar* toolbar =
dynamic_cast<QToolBar*
>(mItems[i].mWidget);
276 this->addToWidgetGroupMap(tgroups, toolbar->toggleViewAction(), mItems[i].mGroup);
279 QMenu* widgets = popupMenu->addMenu(
"Widgets");
281 for(std::map<QString, QActionGroup*>::iterator it = groups.begin(); it != groups.end(); ++it)
283 widgets->addSeparator();
284 widgets->addActions(it->second->actions());
287 QMenu* toolbars = popupMenu->addMenu(
"Toolbars");
289 for(std::map<QString, QActionGroup*>::iterator it = tgroups.begin(); it != tgroups.end(); ++it)
291 toolbars->addSeparator();
292 toolbars->addActions(it->second->actions());
std::vector< Preset > mPresets
void registerToolBar(QToolBar *toolbar, QString groupname="Toolbars")
DynamicMainWindowWidgets(QMainWindow *mainWindow)
void restoreFrom(const Desktop &desktop)
QMenu * createPopupMenu()
QByteArray mMainWindowState
void showWidget(QString name)
Data class for CustusX desktop.
void owningServiceRemoved(QObject *service)
QDockWidget * addAsDockWidget(QWidget *widget, QString groupname, QObject *owningPlugin=NULL)