Files
exc/cpp/ui/ncurses/hw/hwcurses.cpp
T
lyrgb 9dbc24efc1 visualization of bsort, manager now responsible for updates and time
split timeractions from timers into seperate header
integrated the experiments into an improved displaynumbers, which
includes the vector as well as bars above them
outsourced the calculation of delta time to the manager to clean up main()
2026-07-17 00:04:28 +02:00

91 lines
2.3 KiB
C++

#include "timer.hpp"
#include "timeractions.hpp"
#include <chrono>
#include <clocale>
#include <cstdio>
#include <ctime>
#include <memory>
#include <ncurses.h>
#include <thread>
#include <unistd.h>
#include <utility>
#include <vector>
/*
todo
figure out namespaces, using, and auto
read about std function and std bind
try to do with objects / classes instead
centralize into event sender and subscriber
*/
void myupdatedisplay(const timer &timer_input) {
int x_offset = COLS / 4;
mvprintw(timer_input.triggercounter, timer_input.triggercounter + x_offset,
"test: █");
}
std::vector<int> mynumbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
std::vector<int> myothernumbers = {1, 4, 9, 8, 6, 2, 3, 5, 7};
void displaynumbers(int startx, int starty, std::vector<int> &input_numbers, cchar_t &input_char) {
for (size_t i = 0; i < input_numbers.size(); i++) {
/**
I make a horizontal line of i chars, which are supposed to represent mynumbers
above that, I want a line of bars.
_all_ bars stretch from LINES-1 to LINES-1-numbervalue
**/
mvprintw(LINES -1 - starty, i + startx, "%d,", input_numbers[i]);
mvwvline_set(stdscr, LINES-1-input_numbers[i]-starty, i+startx, &input_char, input_numbers[i]);
}
}
void myinitialize() {
setlocale(LC_ALL, "");
initscr();
nodelay(stdscr, FALSE);
refresh();
start_color();
init_pair(1, COLOR_RED, COLOR_GREEN);
attron(COLOR_PAIR(1));
printw("Hello World! 🌍 テスト 测试");
}
int main() {
myinitialize();
cchar_t my_c_char = {.attr= A_NORMAL, .chars={L'█'}, .ext_color = 0};
//create actions, then put them in timers, then put them into the timermanager
auto myaction = std::make_unique<swapaction>(mynumbers);
auto clocktimer =
std::make_unique<timer>("secondsprinter", 1, 10, std::move(myaction));
auto myothersort = std::make_unique<sortaction>(myothernumbers);
auto sorttimer =
std::make_unique<timer>("sorttimer", 0.1, std::move(myothersort));
timermanager mytimermanager;
mytimermanager.addtimer(std::move(clocktimer));
mytimermanager.addtimer(std::move(sorttimer));
while (true) {
erase();
mytimermanager.updatetimers();
displaynumbers(0,0,mynumbers, my_c_char);
displaynumbers(10, 10, myothernumbers, my_c_char);
refresh();
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
getch();
endwin();
return 0;
}