From 320f5ba63aac67a35de2b3ee3df3b19421fd6cd4 Mon Sep 17 00:00:00 2001 From: Christian Burger Date: Fri, 6 May 2022 22:05:57 +0200 Subject: [PATCH] improved demo a bit, refactoring a bit --- App.cpp | 32 ++++++++++++++++++-------------- PtyWindow.cpp | 10 ++++------ Window.cpp | 5 +++++ include/NCurses/PtyWindow.hpp | 6 +++--- include/NCurses/Window.hpp | 1 + 5 files changed, 31 insertions(+), 23 deletions(-) diff --git a/App.cpp b/App.cpp index b8d9725..47e9d18 100644 --- a/App.cpp +++ b/App.cpp @@ -27,11 +27,11 @@ namespace krikkel::NCurses std::recursive_mutex ncursesMutex; VerticalTilingWindowManager windowManager(Root_Window, &ncursesMutex); - Window *dummyWindow = new Window(&windowManager); - dummyWindow->move(0, 0); + Window *dummyWindowTop = new Window(&windowManager); + dummyWindowTop->move(0, 0); PtyWindow *ptyWindow = new PtyWindow(&ncursesMutex, 0, 0, 0, 0); windowManager.addWindow(ptyWindow); - new Window(&windowManager); + Window *dummyWindowBottom = new Window(&windowManager); windowManager.updateLayout(); windowManager.refresh(); @@ -60,8 +60,8 @@ namespace krikkel::NCurses ptyWindow->writeUnicodeCharToClient(input.getRawInput()); { scoped_lock lock(ncursesMutex); - dummyWindow->addch(input.getRawInput()); - dummyWindow->refresh(); + dummyWindowTop->addch(input.getRawInput()); + dummyWindowTop->refresh(); } } if(input.isFunctionKey()) @@ -72,22 +72,26 @@ namespace krikkel::NCurses windowManager.updateLayout(); break; case KEY_F(1): - windowManager.hideWindow(ptyWindow); + if(dummyWindowTop->isHidden()) + windowManager.showWindow(dummyWindowTop); + else + windowManager.hideWindow(dummyWindowTop); windowManager.updateLayout(); windowManager.refresh(); break; case KEY_F(2): - windowManager.showWindow(ptyWindow); + if(ptyWindow->isHidden()) + windowManager.showWindow(ptyWindow); + else + windowManager.hideWindow(ptyWindow); windowManager.updateLayout(); windowManager.refresh(); break; case KEY_F(3): - windowManager.hideWindow(dummyWindow); - windowManager.updateLayout(); - windowManager.refresh(); - break; - case KEY_F(4): - windowManager.showWindow(dummyWindow); + if(dummyWindowBottom->isHidden()) + windowManager.showWindow(dummyWindowBottom); + else + windowManager.hideWindow(dummyWindowBottom); windowManager.updateLayout(); windowManager.refresh(); break; @@ -95,7 +99,7 @@ namespace krikkel::NCurses windowManager.refresh(); break; default: - ptyWindow->writeKeyToClient(input.mapKeyNcursesToVTerm()); + ptyWindow->writeFunctionKeyToClient(input.mapKeyNcursesToVTerm()); } } } diff --git a/PtyWindow.cpp b/PtyWindow.cpp index 0a93767..9355f85 100644 --- a/PtyWindow.cpp +++ b/PtyWindow.cpp @@ -52,7 +52,7 @@ namespace krikkel::NCurses /// @todo block all signals, this thread does not handle any readPtyClientThread = - std::thread(&PtyWindow::readFromPtyClientThreadMethod, this); + std::thread(&PtyWindow::readFromPtyClientThreadMethod, this); } PtyWindow::~PtyWindow() @@ -67,9 +67,8 @@ namespace krikkel::NCurses return fdPtyClient; } - void PtyWindow::writeToClient(const char *output, size_t length) + void PtyWindow::writeToPtyClient(const char *output, size_t length) { - scoped_lock lock(ptyMutex); write(fdPtyHost, output, length); //__debug_log("written to PTY client: '" + __debug_make_bytes_printable(std::string(output, length)) + '\''); } @@ -80,7 +79,7 @@ namespace krikkel::NCurses vterm_keyboard_unichar(pseudoTerminal, character, VTERM_MOD_NONE); } - void PtyWindow::writeKeyToClient(VTermKey key) + void PtyWindow::writeFunctionKeyToClient(VTermKey key) { scoped_lock lock(ptyMutex); //__debug_log("writing key: " + std::to_string(key)); @@ -160,7 +159,6 @@ namespace krikkel::NCurses int PtyWindow::handlerMoveCursor(VTermPos pos, VTermPos oldpos, int visible) { scoped_lock lock(*ncursesMutex); - /// @todo maybe use `mvcur()` instead? cursorX = pos.col; cursorY = pos.row; refresh(); @@ -330,6 +328,6 @@ namespace krikkel::NCurses void PtyWindow::staticHandlerOutput(const char *s, size_t len, void *user) { PtyWindow *instance = static_cast(user); - instance->writeToClient(s, len); + instance->writeToPtyClient(s, len); } } \ No newline at end of file diff --git a/Window.cpp b/Window.cpp index b00e31e..55bf085 100644 --- a/Window.cpp +++ b/Window.cpp @@ -42,6 +42,11 @@ namespace krikkel::NCurses return ::wget_wch(w, character); } + bool Window::isHidden() + { + return hidden; + } + SingleUserInput Window::readSingleUserInput() { wint_t input; diff --git a/include/NCurses/PtyWindow.hpp b/include/NCurses/PtyWindow.hpp index 5ce2caa..65e49b1 100644 --- a/include/NCurses/PtyWindow.hpp +++ b/include/NCurses/PtyWindow.hpp @@ -25,12 +25,11 @@ namespace krikkel::NCurses ~PtyWindow(); int getFdPtyClient() const; - void writeToClient(const char * string, size_t length); void writeUnicodeCharToClient(wint_t character); - void writeKeyToClient(VTermKey key); + void writeFunctionKeyToClient(VTermKey key); int refresh() override; - virtual int resize(int rows, int cols) override; + int resize(int rows, int cols) override; private: int fdPtyHost, fdPtyClient; @@ -48,6 +47,7 @@ namespace krikkel::NCurses std::thread readPtyClientThread; void readFromPtyClientThreadMethod(); void readFromPtyClient(); + void writeToPtyClient(const char * string, size_t length); int handlerDamage(VTermRect rect); int handlerMoveRect(VTermRect dest, VTermRect src); diff --git a/include/NCurses/Window.hpp b/include/NCurses/Window.hpp index 8115004..26e8bc3 100644 --- a/include/NCurses/Window.hpp +++ b/include/NCurses/Window.hpp @@ -51,6 +51,7 @@ namespace krikkel::NCurses int ins_wch(const cchar_t *character); int get_wch(wint_t *character); + bool isHidden(); SingleUserInput readSingleUserInput(); virtual int resize(int rows, int cols); virtual int refresh() override;