Commit 661b9aeb authored by John Tapsell's avatar John Tapsell

Fix changing the dock window title when not in advanced mode

parent ca68c1e9
......@@ -506,7 +506,8 @@ HEADERS += src/MG.h \
src/ui/px4_configuration/QGCPX4AirframeConfig.h \
src/ui/QGCBaseParamWidget.h \
src/ui/px4_configuration/QGCPX4MulticopterConfig.h \
src/ui/px4_configuration/QGCPX4SensorCalibration.h
src/ui/px4_configuration/QGCPX4SensorCalibration.h \
src/ui/dockwidgeteventfilter.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
......@@ -728,7 +729,8 @@ SOURCES += src/main.cc \
src/ui/px4_configuration/QGCPX4AirframeConfig.cc \
src/ui/QGCBaseParamWidget.cc \
src/ui/px4_configuration/QGCPX4MulticopterConfig.cc \
src/ui/px4_configuration/QGCPX4SensorCalibration.cc
src/ui/px4_configuration/QGCPX4SensorCalibration.cc \
src/ui/dockwidgeteventfilter.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
......
......@@ -40,6 +40,7 @@ This file is part of the QGROUNDCONTROL project
#include <QGCHilFlightGearConfiguration.h>
#include <QDeclarativeView>
#include "dockwidgettitlebareventfilter.h"
#include "dockwidgeteventfilter.h"
#include "QGC.h"
#include "MAVLinkSimulationLink.h"
#include "SerialLink.h"
......@@ -895,7 +896,8 @@ void MainWindow::setDockWidgetTitleBar(QDockWidget* widget)
{
QLabel* label = new QLabel(this);
label->setText(widget->windowTitle());
label->installEventFilter(new DockWidgetTitleBarEventFilter());
label->installEventFilter(new DockWidgetTitleBarEventFilter()); //Ignore mouse clicks
widget->installEventFilter(new DockWidgetEventFilter()); //Update label if window title changes
widget->setTitleBarWidget(label);
}
// And if nothing should be shown, use an empty widget.
......
......@@ -33,26 +33,12 @@ QGCToolWidget::QGCToolWidget(const QString& title, QWidget *parent, QSettings* s
}
//qDebug() << "WidgetTitle" << widgetTitle;
setObjectName(widgetTitle);
createActions();
toolLayout = ui->toolLayout;
toolLayout->setAlignment(Qt::AlignTop);
toolLayout->setSpacing(8);
QDockWidget* dock = dynamic_cast<QDockWidget*>(this->parentWidget());
if (dock) {
dock->setWindowTitle(widgetTitle);
dock->setObjectName(widgetTitle+"DOCK");
}
// Try with parent
dock = dynamic_cast<QDockWidget*>(parent);
if (dock) {
dock->setWindowTitle(widgetTitle);
dock->setObjectName(widgetTitle+"DOCK");
}
this->setWindowTitle(widgetTitle);
this->setTitle(widgetTitle);
QList<UASInterface*> systems = UASManager::instance()->getUASList();
foreach (UASInterface* uas, systems)
{
......@@ -63,7 +49,6 @@ QGCToolWidget::QGCToolWidget(const QString& title, QWidget *parent, QSettings* s
}
}
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(addUAS(UASInterface*)));
if (!instances()->contains(widgetTitle)) instances()->insert(widgetTitle, this);
// Enforce storage if this not loaded from settings
// is MUST NOT BE SAVED if it was loaded from settings!
......@@ -80,13 +65,7 @@ QGCToolWidget::~QGCToolWidget()
void QGCToolWidget::setParent(QWidget *parent)
{
QWidget::setParent(parent);
// Try with parent
QDockWidget* dock = dynamic_cast<QDockWidget*>(parent);
if (dock)
{
dock->setWindowTitle(getTitle());
dock->setObjectName(getTitle()+"DOCK");
}
setTitle(getTitle()); //Update titles
}
/**
......@@ -654,34 +633,20 @@ void QGCToolWidget::setTitle()
}
}
void QGCToolWidget::setWindowTitle(const QString& title)
void QGCToolWidget::setTitle(const QString& title)
{
// Sets title and calls setWindowTitle on QWidget
widgetTitle = title;
QWidget::setWindowTitle(title);
}
void QGCToolWidget::setTitle(QString title)
{
// Remove references to old title
/*QSettings settings;
settings.beginGroup(widgetTitle);
settings.remove("");
settings.endGroup();
settings.sync();*/
if (instances()->contains(widgetTitle)) instances()->remove(widgetTitle);
if (!instances()->contains(title)) instances()->insert(title, this);
// Switch to new title
// Sets title and calls setWindowTitle on QWidget
widgetTitle = title;
if (!instances()->contains(title)) instances()->insert(title, this);
QWidget::setWindowTitle(title);
QDockWidget* parent = dynamic_cast<QDockWidget*>(this->parentWidget());
if (parent) parent->setWindowTitle(title);
// Store all widgets
//storeWidgetsToSettings();
setObjectName(widgetTitle);
QDockWidget* dock = dynamic_cast<QDockWidget*>(this->parentWidget());
if (dock) {
dock->setWindowTitle(widgetTitle);
dock->setObjectName(widgetTitle+"DOCK");
}
emit titleChanged(title);
if (mainMenuAction) mainMenuAction->setText(title);
}
......
#include <QDockWidget>
#include <QEvent>
#include <QLabel>
#include "dockwidgeteventfilter.h"
DockWidgetEventFilter::DockWidgetEventFilter(QObject *parent) : QObject(parent) {}
bool DockWidgetEventFilter::eventFilter(QObject *object,QEvent *event)
{
if (event->type() == QEvent::WindowTitleChange)
{
QDockWidget *dock = dynamic_cast<QDockWidget *>(object);
if(dock) {
QLabel *label = dynamic_cast<QLabel *>(dock->titleBarWidget());
if(label)
label->setText(dock->windowTitle());
}
}
return QObject::eventFilter(object,event);
}
#ifndef DOCKWIDGETEVENTFILTER_H
#define DOCKWIDGETEVENTFILTER_H
#include <QObject>
/** Event filter to update a QLabel titleBarWidget if the window's title changes */
class DockWidgetEventFilter : public QObject
{
Q_OBJECT
public:
DockWidgetEventFilter(QObject *parent = 0);
protected:
virtual bool eventFilter(QObject *object,QEvent *event) override;
};
#endif // DOCKWIDGETEVENTFILTER_H
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