From 7a8db803eb2199bed4a30c97ec7e3df355d6bf0e Mon Sep 17 00:00:00 2001 From: James Pollack Date: Wed, 14 Oct 2015 19:35:37 +0100 Subject: [PATCH 01/10] move toolwindow tabs to the top --- interface/src/scripting/WebWindowClass.cpp | 2 +- interface/src/ui/ToolWindow.cpp | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index f9dc9e07ae..c78312e57a 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -52,7 +52,7 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid dockWidget->setWidget(_webView); - toolWindow->addDockWidget(Qt::RightDockWidgetArea, dockWidget); + toolWindow->addDockWidget(Qt::TopDockWidgetArea, dockWidget, Qt::Horizontal); _windowWidget = dockWidget; } else { diff --git a/interface/src/ui/ToolWindow.cpp b/interface/src/ui/ToolWindow.cpp index 95dd522415..78131c9a95 100644 --- a/interface/src/ui/ToolWindow.cpp +++ b/interface/src/ui/ToolWindow.cpp @@ -118,7 +118,18 @@ void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget) } void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget, Qt::Orientation orientation) { - QMainWindow::addDockWidget(area, dockWidget, orientation); + QList dockWidgets = findChildren(); + + setTabPosition(Qt::TopDockWidgetArea, QTabWidget::TabPosition::North); + + QMainWindow::addDockWidget(area, dockWidget, orientation); + + // We want to force tabbing, so retabify all of our widgets. + QDockWidget* lastDockWidget = dockWidget; + foreach(QDockWidget* nextDockWidget, dockWidgets) { + tabifyDockWidget(lastDockWidget, nextDockWidget); + lastDockWidget = nextDockWidget; + } connect(dockWidget, &QDockWidget::visibilityChanged, this, &ToolWindow::onChildVisibilityUpdated); } From 815b263954da579feb22f49fd53ff2767cdc6a9c Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Wed, 14 Oct 2015 13:26:19 -0700 Subject: [PATCH 02/10] convert tabs to spaces --- interface/src/scripting/WebWindowClass.cpp | 2 +- interface/src/ui/ToolWindow.cpp | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index c78312e57a..7e998ed8ff 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -52,7 +52,7 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid dockWidget->setWidget(_webView); - toolWindow->addDockWidget(Qt::TopDockWidgetArea, dockWidget, Qt::Horizontal); + toolWindow->addDockWidget(Qt::TopDockWidgetArea, dockWidget, Qt::Horizontal); _windowWidget = dockWidget; } else { diff --git a/interface/src/ui/ToolWindow.cpp b/interface/src/ui/ToolWindow.cpp index 78131c9a95..a1a108ab17 100644 --- a/interface/src/ui/ToolWindow.cpp +++ b/interface/src/ui/ToolWindow.cpp @@ -109,6 +109,7 @@ void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget) // We want to force tabbing, so retabify all of our widgets. QDockWidget* lastDockWidget = dockWidget; + foreach (QDockWidget* nextDockWidget, dockWidgets) { tabifyDockWidget(lastDockWidget, nextDockWidget); lastDockWidget = nextDockWidget; @@ -118,18 +119,19 @@ void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget) } void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget, Qt::Orientation orientation) { - QList dockWidgets = findChildren(); - - setTabPosition(Qt::TopDockWidgetArea, QTabWidget::TabPosition::North); + QList dockWidgets = findChildren(); + + setTabPosition(Qt::TopDockWidgetArea, QTabWidget::TabPosition::North); - QMainWindow::addDockWidget(area, dockWidget, orientation); + addDockWidget(area, dockWidget, orientation); - // We want to force tabbing, so retabify all of our widgets. - QDockWidget* lastDockWidget = dockWidget; - foreach(QDockWidget* nextDockWidget, dockWidgets) { - tabifyDockWidget(lastDockWidget, nextDockWidget); - lastDockWidget = nextDockWidget; - } + // We want to force tabbing, so retabify all of our widgets. + QDockWidget* lastDockWidget = dockWidget; + + foreach(QDockWidget* nextDockWidget, dockWidgets) { + tabifyDockWidget(lastDockWidget, nextDockWidget); + lastDockWidget = nextDockWidget; + } connect(dockWidget, &QDockWidget::visibilityChanged, this, &ToolWindow::onChildVisibilityUpdated); } From d45f48c8cd1663b9633278fb33c89e1af5523126 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Wed, 14 Oct 2015 13:55:04 -0700 Subject: [PATCH 03/10] fixbug --- interface/src/ui/ToolWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/ToolWindow.cpp b/interface/src/ui/ToolWindow.cpp index a1a108ab17..bb62929846 100644 --- a/interface/src/ui/ToolWindow.cpp +++ b/interface/src/ui/ToolWindow.cpp @@ -123,7 +123,7 @@ void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget, setTabPosition(Qt::TopDockWidgetArea, QTabWidget::TabPosition::North); - addDockWidget(area, dockWidget, orientation); + QMainWindow::addDockWidget(area, dockWidget, orientation); // We want to force tabbing, so retabify all of our widgets. QDockWidget* lastDockWidget = dockWidget; From 536351e9d5053d731bab08b3a910fb8d071379c6 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Wed, 14 Oct 2015 15:10:04 -0700 Subject: [PATCH 04/10] move set tab position to constructor --- interface/src/ui/ToolWindow.cpp | 5 ++--- interface/src/ui/ToolWindow.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/interface/src/ui/ToolWindow.cpp b/interface/src/ui/ToolWindow.cpp index bb62929846..de4b3887db 100644 --- a/interface/src/ui/ToolWindow.cpp +++ b/interface/src/ui/ToolWindow.cpp @@ -22,6 +22,8 @@ ToolWindow::ToolWindow(QWidget* parent) : _hasShown(false), _lastGeometry() { + setTabPosition(Qt::TopDockWidgetArea, QTabWidget::TabPosition::North); + # ifndef Q_OS_LINUX setDockOptions(QMainWindow::ForceTabbedDocks); # endif @@ -120,12 +122,9 @@ void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget) void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget, Qt::Orientation orientation) { QList dockWidgets = findChildren(); - - setTabPosition(Qt::TopDockWidgetArea, QTabWidget::TabPosition::North); QMainWindow::addDockWidget(area, dockWidget, orientation); - // We want to force tabbing, so retabify all of our widgets. QDockWidget* lastDockWidget = dockWidget; foreach(QDockWidget* nextDockWidget, dockWidgets) { diff --git a/interface/src/ui/ToolWindow.h b/interface/src/ui/ToolWindow.h index 03ae85a418..43ab1ac2ce 100644 --- a/interface/src/ui/ToolWindow.h +++ b/interface/src/ui/ToolWindow.h @@ -7,7 +7,7 @@ // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// +// #ifndef hifi_ToolWindow_h #define hifi_ToolWindow_h From a1e2292e62e8daf155ff2711ca457f1e80e6dcb7 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Wed, 14 Oct 2015 17:27:45 -0700 Subject: [PATCH 05/10] remove title bar from docked tool widgets --- interface/src/scripting/WebWindowClass.cpp | 1 + interface/src/ui/ToolWindow.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index 7e998ed8ff..51f0448897 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -45,6 +45,7 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid auto dockWidget = new QDockWidget(title, toolWindow); dockWidget->setFeatures(QDockWidget::DockWidgetMovable); + dockWidget->setTitleBarWidget(0); connect(dockWidget, &QDockWidget::visibilityChanged, this, &WebWindowClass::visibilityChanged); _webView = new QWebView(dockWidget); diff --git a/interface/src/ui/ToolWindow.cpp b/interface/src/ui/ToolWindow.cpp index de4b3887db..f5dcf279c9 100644 --- a/interface/src/ui/ToolWindow.cpp +++ b/interface/src/ui/ToolWindow.cpp @@ -39,11 +39,8 @@ bool ToolWindow::event(QEvent* event) { QMainWindow* mainWindow = qApp->getWindow(); QRect mainGeometry = mainWindow->geometry(); - int titleBarHeight = UIUtil::getWindowTitleBarHeight(this); - int topMargin = titleBarHeight; - - _lastGeometry = QRect(mainGeometry.topLeft().x(), mainGeometry.topLeft().y() + topMargin, - DEFAULT_WIDTH, mainGeometry.height() - topMargin); + _lastGeometry = QRect(mainGeometry.topLeft().x(), mainGeometry.topLeft().y(), + DEFAULT_WIDTH, mainGeometry.height()); } setGeometry(_lastGeometry); return true; @@ -124,9 +121,12 @@ void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget, QList dockWidgets = findChildren(); QMainWindow::addDockWidget(area, dockWidget, orientation); - + + QDockWidget* lastDockWidget = dockWidget; + lastDockWidget->setTitleBarWidget(new QWidget()); + foreach(QDockWidget* nextDockWidget, dockWidgets) { tabifyDockWidget(lastDockWidget, nextDockWidget); lastDockWidget = nextDockWidget; From c18aeef6b39a6b2c83a2813056876c851bfd96a6 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Wed, 14 Oct 2015 17:29:38 -0700 Subject: [PATCH 06/10] remove redundant call --- interface/src/scripting/WebWindowClass.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index 51f0448897..7e998ed8ff 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -45,7 +45,6 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid auto dockWidget = new QDockWidget(title, toolWindow); dockWidget->setFeatures(QDockWidget::DockWidgetMovable); - dockWidget->setTitleBarWidget(0); connect(dockWidget, &QDockWidget::visibilityChanged, this, &WebWindowClass::visibilityChanged); _webView = new QWebView(dockWidget); From 84973c590d2e5f9f7eb221c40f065782e91b0d29 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Wed, 14 Oct 2015 21:17:19 -0700 Subject: [PATCH 07/10] Update ToolWindow.h --- interface/src/ui/ToolWindow.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/ToolWindow.h b/interface/src/ui/ToolWindow.h index 43ab1ac2ce..03ae85a418 100644 --- a/interface/src/ui/ToolWindow.h +++ b/interface/src/ui/ToolWindow.h @@ -7,7 +7,7 @@ // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// +// #ifndef hifi_ToolWindow_h #define hifi_ToolWindow_h From c8b6fed0e041de9e59192543a423e990f8614d19 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Wed, 14 Oct 2015 21:18:17 -0700 Subject: [PATCH 08/10] Update ToolWindow.cpp --- interface/src/ui/ToolWindow.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/src/ui/ToolWindow.cpp b/interface/src/ui/ToolWindow.cpp index f5dcf279c9..c7de8b7424 100644 --- a/interface/src/ui/ToolWindow.cpp +++ b/interface/src/ui/ToolWindow.cpp @@ -122,7 +122,6 @@ void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget, QMainWindow::addDockWidget(area, dockWidget, orientation); - QDockWidget* lastDockWidget = dockWidget; lastDockWidget->setTitleBarWidget(new QWidget()); From 8b57b3c0ff1d203d86d75b7f4f3382e44c704cc1 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 15 Oct 2015 14:13:07 -0700 Subject: [PATCH 09/10] fix memory leak --- interface/src/scripting/WebWindowClass.cpp | 3 +++ interface/src/ui/ToolWindow.cpp | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index 7e998ed8ff..027a8eb123 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -52,6 +52,9 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid dockWidget->setWidget(_webView); + auto titleWidget = new QWidget(); + dockWidget->setTitleBarWidget(titleWidget); + toolWindow->addDockWidget(Qt::TopDockWidgetArea, dockWidget, Qt::Horizontal); _windowWidget = dockWidget; diff --git a/interface/src/ui/ToolWindow.cpp b/interface/src/ui/ToolWindow.cpp index f5dcf279c9..fb7e618428 100644 --- a/interface/src/ui/ToolWindow.cpp +++ b/interface/src/ui/ToolWindow.cpp @@ -33,16 +33,22 @@ ToolWindow::ToolWindow(QWidget* parent) : bool ToolWindow::event(QEvent* event) { QEvent::Type type = event->type(); if (type == QEvent::Show) { + if (!_hasShown) { _hasShown = true; QMainWindow* mainWindow = qApp->getWindow(); QRect mainGeometry = mainWindow->geometry(); - _lastGeometry = QRect(mainGeometry.topLeft().x(), mainGeometry.topLeft().y(), - DEFAULT_WIDTH, mainGeometry.height()); + int titleBarHeight = UIUtil::getWindowTitleBarHeight(this); + int topMargin = titleBarHeight; + + _lastGeometry = QRect(mainGeometry.topLeft().x(), mainGeometry.topLeft().y() + topMargin, + DEFAULT_WIDTH, mainGeometry.height() - topMargin); } + setGeometry(_lastGeometry); + return true; } else if (type == QEvent::Hide) { _lastGeometry = geometry(); @@ -125,7 +131,6 @@ void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget, QDockWidget* lastDockWidget = dockWidget; - lastDockWidget->setTitleBarWidget(new QWidget()); foreach(QDockWidget* nextDockWidget, dockWidgets) { tabifyDockWidget(lastDockWidget, nextDockWidget); From 112007e5a948deb64be34649abcaf4c4a44279a9 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 15 Oct 2015 14:58:05 -0700 Subject: [PATCH 10/10] cleanup --- interface/src/scripting/WebWindowClass.cpp | 2 +- interface/src/ui/ToolWindow.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index 027a8eb123..69523f5f9d 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -52,7 +52,7 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid dockWidget->setWidget(_webView); - auto titleWidget = new QWidget(); + auto titleWidget = new QWidget(dockWidget); dockWidget->setTitleBarWidget(titleWidget); toolWindow->addDockWidget(Qt::TopDockWidgetArea, dockWidget, Qt::Horizontal); diff --git a/interface/src/ui/ToolWindow.cpp b/interface/src/ui/ToolWindow.cpp index fb7e618428..f195535433 100644 --- a/interface/src/ui/ToolWindow.cpp +++ b/interface/src/ui/ToolWindow.cpp @@ -127,11 +127,9 @@ void ToolWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget* dockWidget, QList dockWidgets = findChildren(); QMainWindow::addDockWidget(area, dockWidget, orientation); - QDockWidget* lastDockWidget = dockWidget; - foreach(QDockWidget* nextDockWidget, dockWidgets) { tabifyDockWidget(lastDockWidget, nextDockWidget); lastDockWidget = nextDockWidget;