Commit 41134dfc authored by Bryant's avatar Bryant

Fixed the titlebar styling of the dockwidgets in the main window.

parent 3731055a
...@@ -710,35 +710,10 @@ void MainWindow::addTool(SubMainWindow *parent,VIEW_SECTIONS view,QDockWidget* w ...@@ -710,35 +710,10 @@ void MainWindow::addTool(SubMainWindow *parent,VIEW_SECTIONS view,QDockWidget* w
QDockWidget* MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString title,QString objectname,VIEW_SECTIONS view,Qt::DockWidgetArea area,int minwidth,int minheight) QDockWidget* MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString title,QString objectname,VIEW_SECTIONS view,Qt::DockWidgetArea area,int minwidth,int minheight)
{ {
//if (child->objectName() == "")
//{
child->setObjectName(objectname); child->setObjectName(objectname);
//}
QDockWidget *widget = new QDockWidget(title,this); QDockWidget *widget = new QDockWidget(title,this);
if (!isAdvancedMode) dockWidgets.append(widget);
{ setDockWidgetTitleBar(widget);
if (dockWidgetTitleBarEnabled)
{
dockToTitleBarMap[widget] = widget->titleBarWidget();
QLabel *label = new QLabel(this);
label->setText(title);
widget->setTitleBarWidget(label);
label->installEventFilter(new DockWidgetTitleBarEventFilter());
}
else
{
dockToTitleBarMap[widget] = widget->titleBarWidget();
widget->setTitleBarWidget(new QWidget(this));
}
}
else
{
QLabel *label = new QLabel(this);
label->setText(title);
dockToTitleBarMap[widget] = label;
label->installEventFilter(new DockWidgetTitleBarEventFilter());
label->hide();
}
widget->setObjectName(child->objectName()); widget->setObjectName(child->objectName());
widget->setWidget(child); widget->setWidget(child);
if (minheight != 0 || minwidth != 0) if (minheight != 0 || minwidth != 0)
...@@ -843,6 +818,38 @@ void MainWindow::loadDockWidget(QString name) ...@@ -843,6 +818,38 @@ void MainWindow::loadDockWidget(QString name)
} }
} }
void MainWindow::setDockWidgetTitleBar(QDockWidget* widget)
{
QWidget* oldTitleBar = widget->titleBarWidget();
// In advanced mode, we use the default titlebar provided by Qt.
if (isAdvancedMode)
{
widget->setTitleBarWidget(0);
}
// Otherwise, if just a textlabel should be shown, make that the titlebar.
else if (dockWidgetTitleBarEnabled)
{
QLabel* label = new QLabel(this);
label->setText(widget->windowTitle());
label->installEventFilter(new DockWidgetTitleBarEventFilter());
widget->setTitleBarWidget(label);
}
// And if nothing should be shown, use an empty widget.
else
{
QWidget* newTitleBar = new QWidget(this);
widget->setTitleBarWidget(newTitleBar);
}
// Be sure to clean up the old titlebar. When using QDockWidget::setTitleBarWidget(),
// it doesn't delete the old titlebar object.
if (oldTitleBar)
{
delete oldTitleBar;
}
}
void MainWindow::showTool(bool show) void MainWindow::showTool(bool show)
{ {
//Called when a menu item is clicked on, regardless of view. //Called when a menu item is clicked on, regardless of view.
...@@ -1237,26 +1244,10 @@ void MainWindow::enableDockWidgetTitleBars(bool enabled) ...@@ -1237,26 +1244,10 @@ void MainWindow::enableDockWidgetTitleBars(bool enabled)
settings.setValue("DOCK_WIDGET_TITLEBARS",dockWidgetTitleBarEnabled); settings.setValue("DOCK_WIDGET_TITLEBARS",dockWidgetTitleBarEnabled);
settings.endGroup(); settings.endGroup();
settings.sync(); settings.sync();
if (!isAdvancedMode)
{ for (int i = 0; i < dockWidgets.size(); i++)
if (enabled)
{
for (QMap<QDockWidget*,QWidget*>::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++)
{
QLabel *label = new QLabel(this);
label->setText(i.key()->windowTitle());
i.key()->setTitleBarWidget(label);
//label->setEnabled(false);
label->installEventFilter(new DockWidgetTitleBarEventFilter());
}
}
else
{
for (QMap<QDockWidget*,QWidget*>::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++)
{ {
i.key()->setTitleBarWidget(new QWidget(this)); setDockWidgetTitleBar(dockWidgets[i]);
}
}
} }
} }
...@@ -1964,32 +1955,13 @@ void MainWindow::loadViewState() ...@@ -1964,32 +1955,13 @@ void MainWindow::loadViewState()
} }
void MainWindow::setAdvancedMode() void MainWindow::setAdvancedMode()
{ {
if (!isAdvancedMode) isAdvancedMode = !isAdvancedMode;
{ ui.actionAdvanced_Mode->setChecked(isAdvancedMode);
ui.actionAdvanced_Mode->setChecked(true); settings.setValue("ADVANCED_MODE",isAdvancedMode);
isAdvancedMode = true;
settings.setValue("ADVANCED_MODE",true);
for (QMap<QDockWidget*,QWidget*>::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++)
{
//QWidget *widget = i.value();
QWidget *widget = i.key()->titleBarWidget();
i.key()->setTitleBarWidget(i.value());
dockToTitleBarMap[i.key()] = widget;
} for (int i = 0; i < dockWidgets.size(); i++)
}
else
{
ui.actionAdvanced_Mode->setChecked(false);
isAdvancedMode = false;
settings.setValue("ADVANCED_MODE",false);
for (QMap<QDockWidget*,QWidget*>::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++)
{ {
//QWidget *widget = i.value(); setDockWidgetTitleBar(dockWidgets[i]);
QWidget *widget = i.key()->titleBarWidget();
i.key()->setTitleBarWidget(i.value());
dockToTitleBarMap[i.key()] = widget;
}
} }
} }
......
...@@ -476,12 +476,17 @@ private: ...@@ -476,12 +476,17 @@ private:
QList<QObject*> commsWidgetList; QList<QObject*> commsWidgetList;
QMap<QString,QString> customWidgetNameToFilenameMap; QMap<QString,QString> customWidgetNameToFilenameMap;
QMap<QAction*,QString > menuToDockNameMap; QMap<QAction*,QString > menuToDockNameMap;
QMap<QDockWidget*,QWidget*> dockToTitleBarMap; QList<QDockWidget*> dockWidgets;
QMap<VIEW_SECTIONS,QMap<QString,QWidget*> > centralWidgetToDockWidgetsMap; QMap<VIEW_SECTIONS,QMap<QString,QWidget*> > centralWidgetToDockWidgetsMap;
bool isAdvancedMode; bool isAdvancedMode; ///< If enabled dock widgets can be moved and floated.
bool dockWidgetTitleBarEnabled; bool dockWidgetTitleBarEnabled; ///< If enabled, dock widget titlebars are displayed when NOT in advanced mode.
Ui::MainWindow ui; Ui::MainWindow ui;
/** @brief Set the appropriate titlebar for a given dock widget.
* Relies on the isAdvancedMode and dockWidgetTitleBarEnabled member variables.
*/
void setDockWidgetTitleBar(QDockWidget* widget);
QString getWindowStateKey(); QString getWindowStateKey();
QString getWindowGeometryKey(); QString getWindowGeometryKey();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment