From 6c8eb7e0478e757b002d87990ab80133396aff1a Mon Sep 17 00:00:00 2001
From: 0penBrain <48731257+0penBrain@users.noreply.github.com>
Date: Mon, 17 Feb 2020 20:54:19 +0100
Subject: [PATCH] Add ability to remember which workbench is active for each
tab of the viewport
Can be enabled/disabled through preferences => Connected to 'SaveWBbyTab' parameter
Workbench is saved when it is changed or when a new subwindow is created
It is restored when subwindow is activated if one was previously saved
---
src/Gui/DlgSettings3DView.ui | 19 +++++++++++++++++++
src/Gui/DlgSettings3DViewImp.cpp | 2 ++
src/Gui/MainWindow.cpp | 21 +++++++++++++++++++++
3 files changed, 42 insertions(+)
diff --git a/src/Gui/DlgSettings3DView.ui b/src/Gui/DlgSettings3DView.ui
index a4bd3e0b5f..5ac9ed0186 100644
--- a/src/Gui/DlgSettings3DView.ui
+++ b/src/Gui/DlgSettings3DView.ui
@@ -40,6 +40,25 @@ lower right corner within opened files
+ -
+
+
+ If checked, application will remember which workbench is active for each tab of the viewport
+
+
+ Remember active workbench by tab
+
+
+ false
+
+
+ SaveWBbyTab
+
+
+ View
+
+
+
-
diff --git a/src/Gui/DlgSettings3DViewImp.cpp b/src/Gui/DlgSettings3DViewImp.cpp
index 7b79f8adae..7c4872014c 100644
--- a/src/Gui/DlgSettings3DViewImp.cpp
+++ b/src/Gui/DlgSettings3DViewImp.cpp
@@ -102,6 +102,7 @@ void DlgSettings3DViewImp::saveSettings()
ui->spinBoxZoomStep->onSave();
ui->checkBoxDragAtCursor->onSave();
ui->CheckBox_CornerCoordSystem->onSave();
+ ui->CheckBox_WbByTab->onSave();
ui->CheckBox_ShowFPS->onSave();
ui->CheckBox_useVBO->onSave();
ui->CheckBox_NaviCube->onSave();
@@ -134,6 +135,7 @@ void DlgSettings3DViewImp::loadSettings()
ui->spinBoxZoomStep->onRestore();
ui->checkBoxDragAtCursor->onRestore();
ui->CheckBox_CornerCoordSystem->onRestore();
+ ui->CheckBox_WbByTab->onRestore();
ui->CheckBox_ShowFPS->onRestore();
ui->CheckBox_useVBO->onRestore();
ui->CheckBox_NaviCube->onRestore();
diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp
index c58d20f9eb..f7f60d55f6 100644
--- a/src/Gui/MainWindow.cpp
+++ b/src/Gui/MainWindow.cpp
@@ -700,6 +700,15 @@ void MainWindow::activatePreviousWindow ()
void MainWindow::activateWorkbench(const QString& name)
{
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View");
+ bool saveWB = hGrp->GetBool("SaveWBbyTab", false);
+ QMdiSubWindow* subWin = d->mdiArea->activeSubWindow();
+ if (subWin /*!= nullptr*/ && saveWB) {
+ QString currWb = subWin->property("ownWB").toString();
+ if (currWb.isEmpty() || currWb != name) {
+ subWin->setProperty("ownWB", name);
+ }
+ }
// emit this signal
workbenchActivated(name);
updateActions(true);
@@ -1020,6 +1029,18 @@ void MainWindow::onWindowActivated(QMdiSubWindow* w)
if (!w) return;
MDIView* view = dynamic_cast(w->widget());
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View");
+ bool saveWB = hGrp->GetBool("SaveWBbyTab", false);
+ if (saveWB) {
+ QString currWb = w->property("ownWB").toString();
+ if (! currWb.isEmpty()) {
+ this->activateWorkbench(currWb);
+ }
+ else {
+ w->setProperty("ownWB", QString::fromStdString(WorkbenchManager::instance()->active()->name()));
+ }
+ }
+
// Even if windowActivated() signal is emitted mdi doesn't need to be a top-level window.
// This happens e.g. if two windows are top-level and one of them gets docked again.
// QWorkspace emits the signal then even though the other window is in front.