From 9ddb769cb4487529dd9a098f5f9523da19f4f19e Mon Sep 17 00:00:00 2001 From: Christian Burger Date: Sun, 8 May 2022 21:37:06 +0200 Subject: [PATCH] added `HorizontalWindowManager` to `DemoApp` --- CMakeLists.txt | 15 ++++++++++++--- DemoApp.cpp | 20 ++++++++++++++++---- DemoApp.hpp | 6 +++++- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 95072b5..5f7b411 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,9 @@ set(CMAKE_CXX_STANDARD 17) include(CTest) enable_testing() -add_library(kNCurses Window.cpp PtyWindow.cpp SingleUserInput.cpp Debug.cpp TilingWindowManager.cpp VerticalTilingWindowManager.cpp) +add_library(kNCurses Window.cpp PtyWindow.cpp SingleUserInput.cpp Debug.cpp + TilingWindowManager.cpp VerticalTilingWindowManager.cpp + HorizontalTilingWindowManager.cpp) ### path to own system includes include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/include") @@ -44,8 +46,15 @@ target_link_libraries(kNCursesDemoApp kNCurses) ### installation and packaging set(NCURSES_SYSTEM_INCLUDE "include/kNCurses") -set_target_properties(kNCurses PROPERTIES PUBLIC_HEADER "${NCURSES_SYSTEM_INCLUDE}/Window.hpp;${NCURSES_SYSTEM_INCLUDE}/SingleUserInput.hpp;${NCURSES_SYSTEM_INCLUDE}/PtyWindow.hpp;${NCURSES_SYSTEM_INCLUDE}/VerticalTilingWindowManager.hpp;${NCURSES_SYSTEM_INCLUDE}/TilingWindowManager.hpp;" - VERSION "${CMAKE_PROJECT_VERSION}") +set_target_properties(kNCurses PROPERTIES + PUBLIC_HEADER "${NCURSES_SYSTEM_INCLUDE}/Window.hpp; + ${NCURSES_SYSTEM_INCLUDE}/SingleUserInput.hpp; + ${NCURSES_SYSTEM_INCLUDE}/PtyWindow.hpp; + ${NCURSES_SYSTEM_INCLUDE}/TilingWindowManager.hpp; + ${NCURSES_SYSTEM_INCLUDE}/VerticalTilingWindowManager.hpp; + ${NCURSES_SYSTEM_INCLUDE}/HorizontalTilingWindowManager.hpp; + " + VERSION "${CMAKE_PROJECT_VERSION}") include(GNUInstallDirs) install(TARGETS kNCurses ARCHIVE PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/kNCurses/") diff --git a/DemoApp.cpp b/DemoApp.cpp index a4a4df9..21a088a 100644 --- a/DemoApp.cpp +++ b/DemoApp.cpp @@ -5,6 +5,7 @@ #include "DemoApp.hpp" #include "Debug.hpp" #include +#include #include #include @@ -24,6 +25,7 @@ namespace krikkel::NCurses int DemoApp::run() { setUpWindows(); + forkShell(); mainLoop(); return 0; @@ -31,16 +33,26 @@ namespace krikkel::NCurses void DemoApp::setUpWindows() { - windowManager = new VerticalTilingWindowManager(Root_Window, &ncursesMutex); + windowManager + = new VerticalTilingWindowManager(Root_Window, &ncursesMutex); dummyWindowTop = new Window(windowManager); - dummyWindowTop->move(0, 0); ptyWindow = new PtyWindow(&ncursesMutex, 0, 0, 0, 0); windowManager->addWindow(ptyWindow); dummyWindowBottom = new Window(windowManager); windowManager->updateLayout(); windowManager->refresh(); + topWindowManager + = new HorizontalTilingWindowManager(dummyWindowTop, &ncursesMutex); + dummyWindowTopLeft = new Window(topWindowManager); + dummyWindowTopRight = new Window(topWindowManager); + topWindowManager->updateLayout(); + topWindowManager->refresh(); + } + + void DemoApp::forkShell() + { if(fork() == 0) { const char *shellPath = getenv("SHELL"); @@ -69,8 +81,8 @@ namespace krikkel::NCurses ptyWindow->writeUnicodeCharToClient(input.getRawInput()); { scoped_lock lock(ncursesMutex); - dummyWindowTop->addch(input.getRawInput()); - dummyWindowTop->refresh(); + dummyWindowTopRight->addch(input.getRawInput()); + dummyWindowTopRight->refresh(); } } if(input.isFunctionKey()) diff --git a/DemoApp.hpp b/DemoApp.hpp index 41b2844..2cdabbf 100644 --- a/DemoApp.hpp +++ b/DemoApp.hpp @@ -12,6 +12,7 @@ namespace krikkel::NCurses { class VerticalTilingWindowManager; + class HorizontalTilingWindowManager; class Window; class PtyWindow; @@ -22,12 +23,15 @@ namespace krikkel::NCurses private: VerticalTilingWindowManager *windowManager; - Window *dummyWindowTop, *dummyWindowBottom; + HorizontalTilingWindowManager *topWindowManager; + Window *dummyWindowTop, *dummyWindowBottom, *dummyWindowTopLeft, + *dummyWindowTopRight; PtyWindow *ptyWindow; std::recursive_mutex ncursesMutex; int run() override; void setUpWindows(); + void forkShell(); void mainLoop(); }; }