Browse Source

Fix for dock widget titlebars moving around when in advanced mode

QGC4.4
Michael Carpenter 12 years ago
parent
commit
65980cfb22
  1. 6
      qgroundcontrol.pro
  2. 24
      src/ui/MainWindow.cc
  3. 2
      src/ui/QGCSettingsWidget.cc
  4. 2
      src/ui/QGCSettingsWidget.ui
  5. 15
      src/ui/dockwidgettitlebareventfilter.cpp
  6. 19
      src/ui/dockwidgettitlebareventfilter.h

6
qgroundcontrol.pro

@ -372,7 +372,8 @@ HEADERS += src/MG.h \ @@ -372,7 +372,8 @@ HEADERS += src/MG.h \
src/ui/QGCHilXPlaneConfiguration.h \
src/ui/designer/QGCComboBox.h \
src/ui/designer/QGCTextLabel.h \
src/ui/submainwindow.h
src/ui/submainwindow.h \
src/ui/dockwidgettitlebareventfilter.h
# Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::HEADERS += src/ui/map3D/QGCGoogleEarthView.h
@ -537,7 +538,8 @@ SOURCES += src/main.cc \ @@ -537,7 +538,8 @@ SOURCES += src/main.cc \
src/ui/QGCHilXPlaneConfiguration.cc \
src/ui/designer/QGCComboBox.cc \
src/ui/designer/QGCTextLabel.cc \
src/ui/submainwindow.cpp
src/ui/submainwindow.cpp \
src/ui/dockwidgettitlebareventfilter.cpp
# Enable Google Earth only on Mac OS and Windows with Visual Studio compiler
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc

24
src/ui/MainWindow.cc

@ -38,7 +38,7 @@ This file is part of the QGROUNDCONTROL project @@ -38,7 +38,7 @@ This file is part of the QGROUNDCONTROL project
#include <QGCHilLink.h>
#include <QGCHilConfiguration.h>
#include <QGCHilFlightGearConfiguration.h>
#include "dockwidgettitlebareventfilter.h"
#include "QGC.h"
#include "MAVLinkSimulationLink.h"
#include "SerialLink.h"
@ -613,6 +613,7 @@ void MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString title,Q @@ -613,6 +613,7 @@ void MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString title,Q
QLabel *label = new QLabel(this);
label->setText(title);
widget->setTitleBarWidget(label);
label->installEventFilter(new DockWidgetTitleBarEventFilter());
}
else
{
@ -625,6 +626,8 @@ void MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString title,Q @@ -625,6 +626,8 @@ void MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString title,Q
QLabel *label = new QLabel(this);
label->setText(title);
dockToTitleBarMap[widget] = label;
label->installEventFilter(new DockWidgetTitleBarEventFilter());
label->hide();
}
widget->setObjectName(objectname);
widget->setWidget(child);
@ -1007,29 +1010,30 @@ void MainWindow::saveScreen() @@ -1007,29 +1010,30 @@ void MainWindow::saveScreen()
}
void MainWindow::enableDockWidgetTitleBars(bool enabled)
{
dockWidgetTitleBarEnabled = enabled;
QSettings settings;
settings.beginGroup("QGC_MAINWINDOW");
settings.setValue("DOCK_WIDGET_TITLEBARS",dockWidgetTitleBarEnabled);
settings.endGroup();
settings.sync();
if (!isAdvancedMode)
{
dockWidgetTitleBarEnabled = enabled;
QSettings settings;
settings.beginGroup("QGC_MAINWINDOW");
settings.setValue("DOCK_WIDGET_TITLEBARS",dockWidgetTitleBarEnabled);
settings.endGroup();
settings.sync();
if (enabled)
{
for (QMap<QDockWidget*,QWidget*>::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++)
{
QLabel *label = new QLabel(this);
label->setText(i.value()->windowTitle());
label->setText(i.key()->windowTitle());
i.key()->setTitleBarWidget(label);
label->setEnabled(false);
//label->setEnabled(false);
label->installEventFilter(new DockWidgetTitleBarEventFilter());
}
}
else
{
for (QMap<QDockWidget*,QWidget*>::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++)
{
i.key()->setTitleBarWidget(0);
i.key()->setTitleBarWidget(new QWidget(this));
}
}
}

2
src/ui/QGCSettingsWidget.cc

@ -44,7 +44,7 @@ QGCSettingsWidget::QGCSettingsWidget(QWidget *parent, Qt::WindowFlags flags) : @@ -44,7 +44,7 @@ QGCSettingsWidget::QGCSettingsWidget(QWidget *parent, Qt::WindowFlags flags) :
//Dock widget title bars
ui->titleBarCheckBox->setChecked(MainWindow::instance()->dockWidgetTitleBarsEnabled());
ui->titleBarCheckBox,SIGNAL(clicked(bool)),MainWindow::instance(),SLOT(enableDockWidgetTitleBars(bool));
connect(ui->titleBarCheckBox,SIGNAL(clicked(bool)),MainWindow::instance(),SLOT(enableDockWidgetTitleBars(bool)));
// Style
MainWindow::QGC_MAINWINDOW_STYLE style = (MainWindow::QGC_MAINWINDOW_STYLE)MainWindow::instance()->getStyle();

2
src/ui/QGCSettingsWidget.ui

@ -86,7 +86,7 @@ @@ -86,7 +86,7 @@
<string>Show Docked Widget title bars when NOT in advanced Mode.</string>
</property>
<property name="checked">
<bool>true</bool>
<bool>false</bool>
</property>
</widget>
</item>

15
src/ui/dockwidgettitlebareventfilter.cpp

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
#include "dockwidgettitlebareventfilter.h"
#include <QDebug>
#include <QEvent>
DockWidgetTitleBarEventFilter::DockWidgetTitleBarEventFilter(QObject *parent) : QObject(parent)
{
}
bool DockWidgetTitleBarEventFilter::eventFilter(QObject *object,QEvent *event)
{
qDebug() << event->type();
if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease)
{
return true;
}
return QObject::eventFilter(object,event);
}

19
src/ui/dockwidgettitlebareventfilter.h

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
#ifndef DOCKWIDGETTITLEBAREVENTFILTER_H
#define DOCKWIDGETTITLEBAREVENTFILTER_H
#include <QObject>
class DockWidgetTitleBarEventFilter : public QObject
{
Q_OBJECT
public:
explicit DockWidgetTitleBarEventFilter(QObject *parent = 0);
protected:
bool eventFilter(QObject *object,QEvent *event);
signals:
public slots:
};
#endif // DOCKWIDGETTITLEBAREVENTFILTER_H
Loading…
Cancel
Save