analyzers/src/watch/nc_windows/main_window.cpp (76 lines of code) (raw):

//------------------------------------------------------------------------------ // Author: Vitali Adamenka // Description: Source for describe ncurses main window. // Copyright (c) 2015 EPAM Systems. All Rights Reserved. //------------------------------------------------------------------------------ /* This file is part of Nfstrace. Nfstrace is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2 of the License. Nfstrace is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Nfstrace. If not, see <http://www.gnu.org/licenses/>. */ //------------------------------------------------------------------------------ #include <stdexcept> #include <unistd.h> #include "main_window.h" //------------------------------------------------------------------------------ void MainWindow::init() { if(_window != nullptr) { destroy(); } _window = initscr(); if(_window == nullptr) { throw std::runtime_error("Initialization of Main window failed."); } noecho(); cbreak(); intrflush(stdscr, false); // flush main window curs_set(0); // disable blinking cursore keypad(_window, true); // init keyboard timeout(200); // set keyboard timeout start_color(); // set background color if(_window != nullptr) { werase(_window); } } void MainWindow::destroy() { nocbreak(); echo(); clrtoeol(); refresh(); endwin(); _window = nullptr; } void MainWindow::cleanStdin(int key) { while((key != EOF) && (key != '\n') && (key != ' ')) { key = getch(); } } MainWindow::MainWindow() : _window{nullptr} { init(); } MainWindow::~MainWindow() { destroy(); } int MainWindow::inputKeys() { int key = wgetch(_window); if(key != KEY_UP && key != KEY_DOWN && key != KEY_LEFT && key != KEY_RIGHT) { key = 0; } cleanStdin(key); return key; } void MainWindow::resize() { if(_window != nullptr) { destroy(); } init(); } void MainWindow::update() const { if(_window != nullptr) { refresh(); } } //------------------------------------------------------------------------------