Compare commits

..

2 Commits

Author SHA1 Message Date
0119429514 fix window overflowing off screen & refactor init_wins() a bit
Some checks failed
/ sync-to-origin (push) Has been cancelled
2025-01-26 14:50:05 +01:00
025c51c3ad first attempt at fixing window sowing outside of screen at marks page 2025-01-26 14:01:36 +01:00

View File

@ -6,6 +6,7 @@
#include <cstring> #include <cstring>
#include <curses.h> #include <curses.h>
#include <fstream> #include <fstream>
#include <iostream>
#include <menu.h> #include <menu.h>
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
#include <panel.h> #include <panel.h>
@ -41,11 +42,13 @@ SOFTWARE.
#define NLINES 10 #define NLINES 10
#define NCOLS 40 #define NCOLS 40
#define DEFAULT_X_OFFSET 10
#define DEFAULT_Y_OFFSET 2
void init_wins(WINDOW **wins, int n, json marks_json); void init_wins(WINDOW **wins, int n, json marks_json);
void win_show(WINDOW *win, char *label, int label_color, int width); void win_show(WINDOW *win, char *label, int label_color, int width);
void marks_page() { void marks_page() {
// DONT FORGET TO UNCOMMENT // DONT FORGET TO UNCOMMENT
// json resp_from_api = bakaapi::get_grades(); // json resp_from_api = bakaapi::get_grades();
std::ifstream f("test-data/marks2.json"); std::ifstream f("test-data/marks2.json");
@ -70,6 +73,8 @@ void marks_page() {
noecho(); noecho();
keypad(stdscr, TRUE); keypad(stdscr, TRUE);
std::clog << COLS << " " << LINES << std::endl;
/* Initialize all the colors */ /* Initialize all the colors */
for (uint8_t i = 0; i < 8; i++) { for (uint8_t i = 0; i < 8; i++) {
init_pair(i, i, COLOR_BLACK); init_pair(i, i, COLOR_BLACK);
@ -119,42 +124,39 @@ void init_wins(WINDOW **wins, int n, json marks_json) {
int x, y, i; int x, y, i;
char label[1500]; char label[1500];
y = 2; y = DEFAULT_Y_OFFSET;
x = 10; x = DEFAULT_X_OFFSET;
uint8_t curent_color = 0; uint8_t curent_color = 0;
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
wins[i] = newwin(NLINES, NCOLS, y, x);
{ // Calculate label and max_text_length to determine window width
std::string sub_name = marks_json["Subjects"][i]["Subject"]["Name"]; std::string sub_name = marks_json["Subjects"][i]["Subject"]["Name"];
std::string sub_avg_s = marks_json["Subjects"][i]["AverageText"]; std::string sub_avg_s = marks_json["Subjects"][i]["AverageText"];
sprintf(label, "%s - avg: %s", sub_name.c_str(), sub_avg_s.c_str()); sprintf(label, "%s - avg: %s", sub_name.c_str(), sub_avg_s.c_str());
}
curent_color++;
if (curent_color >= 7) {
curent_color = 1;
}
// search what mark or label is longest
size_t max_text_length = strlen(label); size_t max_text_length = strlen(label);
for (int i = 0; i < marks_json["Subjects"][n]["Marks"][i].size(); i++) { for (int j = 0; j < marks_json["Subjects"][i]["Marks"].size(); j++) {
size_t tocomp = std::string caption = marks_json["Subjects"][i]["Marks"][j]["Caption"];
rm_tr_le_whitespace(marks_json["Subjects"][n]["Marks"][i]["Caption"]) std::string theme = marks_json["Subjects"][i]["Marks"][j]["Theme"];
.length(); caption = rm_tr_le_whitespace(caption);
if (max_text_length < tocomp) { theme = rm_tr_le_whitespace(theme);
max_text_length = tocomp; max_text_length =
} std::max({max_text_length, caption.length(), theme.length()});
tocomp =
rm_tr_le_whitespace(marks_json["Subjects"][n]["Marks"][i]["Theme"])
.length();
if (max_text_length < tocomp) {
max_text_length = tocomp;
}
} }
int width = max_text_length + 4; int width = max_text_length + 4;
win_show(wins[i], label, curent_color, width);
x += width + 10; // hanndle windows overflowing off screen
if (x + width > COLS) {
x = DEFAULT_X_OFFSET;
y += NLINES + 10;
}
wins[i] = newwin(NLINES, NCOLS, y, x);
win_show(wins[i], label, curent_color + 1, width);
curent_color = (curent_color + 1) % 7;
x += width + 5;
} }
} }