diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp b/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp index 8f8521d..d73c506 100644 --- a/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp @@ -42,7 +42,10 @@ MdiWindow *MdiArea::addSubWindow(MdiChild *mdiChild) mdiWin->setWindowState(mdiWin->windowState()|Qt::WindowMaximized); } + connect(mdiChild, SIGNAL(sessionValueChanged()), this, SIGNAL(sessionValueChanged())); + emit windowListChanged(); + emit sessionValueChanged(); return mdiWin; } @@ -87,6 +90,16 @@ QList<MdiChild*> MdiArea::getMdiChilds() const return childs; } +void MdiArea::enforceTaskSelectionAfterWindowClose(QAction* task) +{ + taskToSelectAfterWindowClose = task; +} + +void MdiArea::enforceCurrentTaskSelectionAfterWindowClose() +{ + enforceTaskSelectionAfterWindowClose(getTaskBar()->getActiveTask()); +} + QList<MdiWindow*> MdiArea::getWindowsToTile() const { QList<MdiWindow*> list; @@ -110,6 +123,7 @@ void MdiArea::taskActivated() } setActiveSubWindow(actionToWinMap[action]); + emit sessionValueChanged(); } void MdiArea::windowDestroyed(MdiWindow* window) @@ -121,7 +135,11 @@ void MdiArea::windowDestroyed(MdiWindow* window) QAction* taskToSelect = nullptr; if (!MAINWINDOW->isClosingApp()) { - taskToSelect = taskBar->getNextTask(action); + taskToSelect = taskToSelectAfterWindowClose; + taskToSelectAfterWindowClose = nullptr; + if (!taskToSelect || action == taskToSelect || !taskBar->getTasks().contains(taskToSelect)) + taskToSelect = taskBar->getNextTask(action); + if (!taskToSelect) taskToSelect = taskBar->getPrevTask(action); } @@ -132,6 +150,7 @@ void MdiArea::windowDestroyed(MdiWindow* window) delete action; emit windowListChanged(); + emit sessionValueChanged(); if (taskToSelect) taskBar->setActiveTask(taskToSelect); @@ -151,6 +170,7 @@ void MdiArea::windowActivated() QAction* action = winToActionMap[subWin]; action->setChecked(true); + emit sessionValueChanged(); } void MdiArea::tileHorizontally() @@ -212,16 +232,36 @@ void MdiArea::closeAllButActive() QList<QMdiSubWindow*> allButActive = subWindowList(); allButActive.removeOne(activeSubWindow()); - for (QMdiSubWindow *window : allButActive) + for (QMdiSubWindow*& window : allButActive) window->close(); } +void MdiArea::closeAllLeftToActive() +{ + QList<QAction*> tasks = taskBar->getTasks(); + QAction* activeTask = taskBar->getActiveTask(); + int activeIdx = tasks.indexOf(activeTask); + + for (QAction*& task : tasks.mid(0, activeIdx)) + actionToWinMap[task]->close(); +} + +void MdiArea::closeAllRightToActive() +{ + QList<QAction*> tasks = taskBar->getTasks(); + QAction* activeTask = taskBar->getActiveTask(); + int activeIdx = tasks.indexOf(activeTask); + + for (QAction*& task : tasks.mid(activeIdx + 1)) + actionToWinMap[task]->close(); +} + MdiWindow* MdiArea::getWindowByChild(MdiChild *child) { if (!child) return nullptr; - for (QMdiSubWindow *window : subWindowList()) + for (QMdiSubWindow*& window : subWindowList()) if (window->widget() == child) return dynamic_cast<MdiWindow*>(window); |
