From 925b42ceb76260e1e135d2a428f80b51ff949dd5 Mon Sep 17 00:00:00 2001 From: PoliEcho Date: Wed, 12 Mar 2025 16:56:32 +0100 Subject: [PATCH] fix days drawing bug --- src/timetable.cpp | 141 +++++++++++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 65 deletions(-) diff --git a/src/timetable.cpp b/src/timetable.cpp index d07d1bf..90d1a5b 100644 --- a/src/timetable.cpp +++ b/src/timetable.cpp @@ -23,15 +23,17 @@ using nlohmann::json; const wchar_t *day_abriviations[] = {nullptr, L"Mo", L"Tu", L"We", L"Th", L"Fr", L"Sa", L"Su"}; -void draw_days(WINDOW**& day_windows, uint16_t cell_height,uint8_t num_of_days, json &resp_from_api); +void draw_days(WINDOW **&day_windows, uint16_t cell_height, uint8_t num_of_days, + json &resp_from_api); -void draw_lessons(WINDOW**& lesson_windows, uint8_t num_of_columns, uint16_t cell_width, std::vector &HourIdLookupTable, json &resp_from_api); +void draw_lessons(WINDOW **&lesson_windows, uint8_t num_of_columns, + uint16_t cell_width, std::vector &HourIdLookupTable, + json &resp_from_api); void draw_cells(uint8_t num_of_columns, uint8_t num_of_days, - uint16_t cell_width, uint16_t cell_height, - std::vector> &cells, - std::vector &HourIdLookupTable, - json &resp_from_api); + uint16_t cell_width, uint16_t cell_height, + std::vector> &cells, + std::vector &HourIdLookupTable, json &resp_from_api); uint8_t hour_id_to_index(const std::vector &HourIdLookupTable, uint8_t id) { @@ -79,7 +81,8 @@ json *find_atom_by_indexes(json &resp_from_api, uint8_t day_index, void timetable_page() { // DONT FORGET TO UNCOMMENT - json resp_from_api = bakaapi::get_data_from_endpoint("api/3/timetable/actual"); + json resp_from_api = + bakaapi::get_data_from_endpoint("api/3/timetable/actual"); /*std::ifstream f("test-data/timetable.json"); json resp_from_api = json::parse(f);*/ @@ -179,19 +182,22 @@ void timetable_page() { std::vector> cells( num_of_days, std::vector(num_of_columns)); - // init day windows + // init day windows for (uint8_t i = 0; i < num_of_days; i++) { day_windows[i] = newwin(cell_height, DEFAULT_OFFSET, i * cell_height + DEFAULT_OFFSET, 0); } - draw_days(day_windows, cell_height,num_of_days, resp_from_api); - + // init cell windows for (uint8_t i = 0; i < num_of_columns; i++) { lesson_windows[i] = newwin(DEFAULT_OFFSET, cell_width, 0, i * cell_width + DEFAULT_OFFSET); } - draw_lessons(lesson_windows, num_of_columns, cell_width, HourIdLookupTable, resp_from_api); + draw_lessons(lesson_windows, num_of_columns, cell_width, HourIdLookupTable, + resp_from_api); + // days have to be drawn after lessons for some reason i actualy have no idea + // why + draw_days(day_windows, cell_height, num_of_days, resp_from_api); // init the cell windows for (uint8_t i = 0; i < num_of_days; i++) { @@ -202,7 +208,7 @@ void timetable_page() { } } draw_cells(num_of_columns, num_of_days, cell_width, cell_height, cells, - HourIdLookupTable, resp_from_api); + HourIdLookupTable, resp_from_api); refresh(); @@ -254,27 +260,28 @@ void timetable_page() { hide_panel(infobox_panel); del_panel(infobox_panel); - + delwin(infobox_window); - + touchwin(stdscr); refresh(); - + // Redraw everithing - draw_days(day_windows, cell_height,num_of_days, resp_from_api); - draw_lessons(lesson_windows, num_of_columns, cell_width, HourIdLookupTable, resp_from_api); - draw_cells(num_of_columns, num_of_days, cell_width, cell_height, cells, + draw_days(day_windows, cell_height, num_of_days, resp_from_api); + draw_lessons(lesson_windows, num_of_columns, cell_width, HourIdLookupTable, resp_from_api); + draw_cells(num_of_columns, num_of_days, cell_width, cell_height, cells, + HourIdLookupTable, resp_from_api); for (uint8_t i = 0; i < selector_panels.size(); i++) { - top_panel(selector_panels[i]); + top_panel(selector_panels[i]); } update_panels(); doupdate(); - + is_info_box_open = false; continue; - } + } run_loop_again: switch (ch) { case KEY_UP: @@ -329,14 +336,14 @@ void timetable_page() { } } - std::wstring Teacher= L""; - try { - Teacher = get_data_for_atom(resp_from_api, atom, "Teachers", - "TeacherId", "Name"); - } catch(...) { - __asm__("nop"); - } - Teacher.insert(0,L"Teacher: "); + std::wstring Teacher = L""; + try { + Teacher = get_data_for_atom(resp_from_api, atom, "Teachers", + "TeacherId", "Name"); + } catch (...) { + __asm__("nop"); + } + Teacher.insert(0, L"Teacher: "); std::wstring Groups = L""; try { @@ -358,29 +365,32 @@ void timetable_page() { Groups = wrm_tr_le_whitespace(Groups); Groups.insert(0, L"Groups: "); - std::wstring Room= L""; + std::wstring Room = L""; try { - Room = get_data_for_atom(resp_from_api, atom, "Rooms", "RoomId", "Name"); - if(Room.empty()) { - Room = get_data_for_atom(resp_from_api, atom, "Rooms", "RoomId", "Abbrev");; + Room = + get_data_for_atom(resp_from_api, atom, "Rooms", "RoomId", "Name"); + if (Room.empty()) { + Room = get_data_for_atom(resp_from_api, atom, "Rooms", "RoomId", + "Abbrev"); + ; } } catch (...) { __asm__("nop"); } Room.insert(0, L"Room: "); - std::wstring Theme= L""; + std::wstring Theme = L""; try { - Theme = wrm_tr_le_whitespace(string_to_wstring(atom->at("Theme").get())); + Theme = wrm_tr_le_whitespace( + string_to_wstring(atom->at("Theme").get())); } catch (...) { __asm__("nop"); } Theme.insert(0, L"Theme: "); - wprint_in_middle( - infobox_window, 1, 0, getmaxx(infobox_window), Caption.c_str(), - COLOR_PAIR(COLOR_CYAN)); - + wprint_in_middle(infobox_window, 1, 0, getmaxx(infobox_window), + Caption.c_str(), COLOR_PAIR(COLOR_CYAN)); + // printing out of order to reduce wattro* directives wattron(infobox_window, COLOR_PAIR(COLOR_YELLOW)); mvwaddwstr(infobox_window, 3, 1, Teacher.c_str()); @@ -392,8 +402,6 @@ void timetable_page() { mvwaddwstr(infobox_window, 6, 1, Theme.c_str()); wattroff(infobox_window, COLOR_PAIR(COLOR_CYAN)); - - top_panel(infobox_panel); update_panels(); doupdate(); @@ -422,8 +430,8 @@ void timetable_page() { DEFAULT_OFFSET + y_offset + selected_cell.y * cell_height, DEFAULT_OFFSET + x_offset + selected_cell.x * cell_width); } - draw_cells(num_of_columns, num_of_days, cell_width, cell_height, - cells, HourIdLookupTable, resp_from_api); + draw_cells(num_of_columns, num_of_days, cell_width, cell_height, cells, + HourIdLookupTable, resp_from_api); update_panels(); doupdate(); @@ -438,20 +446,25 @@ void timetable_page() { endwin(); } -void draw_days(WINDOW**& day_windows, uint16_t cell_height,uint8_t num_of_days, json &resp_from_api) { +void draw_days(WINDOW **&day_windows, uint16_t cell_height, uint8_t num_of_days, + json &resp_from_api) { for (uint8_t i = 0; i < num_of_days; i++) { - // this wont draw left boarder window making it so it looks partially + // this wont draw left boarder window making it so it looks partially // offscreen wborder(day_windows[i], ' ', 0, 0, 0, ACS_HLINE, 0, ACS_HLINE, 0); - mvwaddwstr(day_windows[i], cell_height / 2, 0,day_abriviations[resp_from_api["Days"][i]["DayOfWeek"].get()]); + mvwaddwstr( + day_windows[i], cell_height / 2, 0, + day_abriviations[resp_from_api["Days"][i]["DayOfWeek"].get()]); wrefresh(day_windows[i]); } } -void draw_lessons(WINDOW**& lesson_windows, uint8_t num_of_columns, uint16_t cell_width, std::vector &HourIdLookupTable, json &resp_from_api) { - for (uint8_t i = 0; i < num_of_columns; i++) { - wborder(lesson_windows[i], 0, 0, ' ', 0, ACS_VLINE, ACS_VLINE, 0, 0); +void draw_lessons(WINDOW **&lesson_windows, uint8_t num_of_columns, + uint16_t cell_width, std::vector &HourIdLookupTable, + json &resp_from_api) { + for (uint8_t i = 0; i < num_of_columns; i++) { + wborder(lesson_windows[i], 0, 0, ' ', 0, ACS_VLINE, ACS_VLINE, 0, 0); std::wstring caption; std::wstring start_time; std::wstring end_time; @@ -459,7 +472,7 @@ void draw_lessons(WINDOW**& lesson_windows, uint8_t num_of_columns, uint16_t cel for (uint8_t j = 0; j < resp_from_api["Hours"].size(); j++) { if (resp_from_api["Hours"][j]["Id"].get() == HourIdLookupTable[i]) { - + std::string caption_ascii = resp_from_api["Hours"][j]["Caption"].get(); std::string start_time_ascii = @@ -480,21 +493,20 @@ void draw_lessons(WINDOW**& lesson_windows, uint8_t num_of_columns, uint16_t cel hour_id_found: - wprint_in_middle(lesson_windows[i], 0, 0, cell_width, - caption.c_str(), COLOR_PAIR(0)); + wprint_in_middle(lesson_windows[i], 0, 0, cell_width, caption.c_str(), + COLOR_PAIR(0)); mvwaddwstr(lesson_windows[i], 1, 1, start_time.c_str()); - print_in_middle(lesson_windows[i], 1, 0, cell_width, "-", - COLOR_PAIR(0)); - mvwaddwstr(lesson_windows[i], 1, cell_width - end_time.length() - 1, end_time.c_str()); + print_in_middle(lesson_windows[i], 1, 0, cell_width, "-", COLOR_PAIR(0)); + mvwaddwstr(lesson_windows[i], 1, cell_width - end_time.length() - 1, + end_time.c_str()); wrefresh(lesson_windows[i]); - } + } } void draw_cells(uint8_t num_of_columns, uint8_t num_of_days, - uint16_t cell_width, uint16_t cell_height, - std::vector> &cells, - std::vector &HourIdLookupTable, - json &resp_from_api) { + uint16_t cell_width, uint16_t cell_height, + std::vector> &cells, + std::vector &HourIdLookupTable, json &resp_from_api) { for (uint8_t i = 0; i < num_of_days; i++) { for (uint8_t j = 0; j < num_of_columns; j++) { @@ -562,12 +574,11 @@ void draw_cells(uint8_t num_of_columns, uint8_t num_of_days, __asm__("nop"); } - wprint_in_middle(cells[i][j], cell_height / 2, - 0, - cell_width, Subject_Abbrev.c_str(), - COLOR_PAIR(0)); + wprint_in_middle(cells[i][j], cell_height / 2, 0, cell_width, + Subject_Abbrev.c_str(), COLOR_PAIR(0)); mvwaddwstr(cells[i][j], cell_height - 2, - cell_width - wcslen(Room_Abbrev.c_str()) - 1, Room_Abbrev.c_str()); + cell_width - wcslen(Room_Abbrev.c_str()) - 1, + Room_Abbrev.c_str()); mvwaddwstr(cells[i][j], cell_height - 2, 1, Teacher_Abbrev.c_str()); wrefresh(cells[i][j]);