From ba378b2a43ecf7bece799ed155f30b0844769d59 Mon Sep 17 00:00:00 2001 From: Christian Burger Date: Fri, 20 May 2022 20:41:45 +0200 Subject: [PATCH] window manager: inverting all windows' visibility Introducing a method that makes all visible windows invisible and vice- versa. --- DemoApp.cpp | 4 ++++ TilingWindowManager.cpp | 21 +++++++++++++++++++++ include/kNCurses/TilingWindowManager.hpp | 1 + 3 files changed, 26 insertions(+) diff --git a/DemoApp.cpp b/DemoApp.cpp index 1fe0f30..fc3c1df 100644 --- a/DemoApp.cpp +++ b/DemoApp.cpp @@ -130,6 +130,10 @@ namespace krikkel::NCurses windowManager->updateLayout(); windowManager->refresh(); break; + case KEY_F(4): + windowManager->invertWindowsVisibility(); + windowManager->updateLayout(); + windowManager->refresh(); case KEY_F(5): windowManager->refresh(); break; diff --git a/TilingWindowManager.cpp b/TilingWindowManager.cpp index ca4efda..3ddeb41 100644 --- a/TilingWindowManager.cpp +++ b/TilingWindowManager.cpp @@ -65,6 +65,27 @@ namespace krikkel::NCurses } } + void TilingWindowManager::invertWindowsVisibility() + { + list originallyVisibleStack(visibleStack); + list::iterator originallyVisibleStackIterator = originallyVisibleStack.begin(); + visibleStack.clear(); + + for(WindowStackElement currentWindowElement : stack) + if(originallyVisibleStackIterator != originallyVisibleStack.end() + && currentWindowElement == *originallyVisibleStackIterator) + { + currentWindowElement.first->hidden = true; + ++originallyVisibleStackIterator; + continue; + } + else + { + currentWindowElement.first->hidden = false; + visibleStack.push_back(currentWindowElement); + } + } + int TilingWindowManager::resize(int rows, int cols) { int result = Window::resize(rows, cols); diff --git a/include/kNCurses/TilingWindowManager.hpp b/include/kNCurses/TilingWindowManager.hpp index f900227..8ea8e2c 100644 --- a/include/kNCurses/TilingWindowManager.hpp +++ b/include/kNCurses/TilingWindowManager.hpp @@ -45,6 +45,7 @@ namespace krikkel::NCurses void hideWindow(Window *window); void showWindow(Window *window); + void invertWindowsVisibility(); protected: /// @todo rename to `nCursesMutex`?