Enhance user information handling: add exportPersonInfo function, improve TUI dialogs, and refactor related code for better clarity and functionality.
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include "main.h"
|
||||
#include "db_handler.h"
|
||||
#include "tui.h"
|
||||
|
||||
void uartDialog(char *uart_adress, int terminal_x, int terminal_y)
|
||||
@@ -118,9 +119,9 @@ void mainMenu(list_t *person_list, int terminal_x, int terminal_y)
|
||||
int start_y = (terminal_y - win_height) / 2;
|
||||
int start_x = (terminal_x - win_width) / 2;
|
||||
|
||||
char choices[6][30] = {"List all employees", "Find employee", "Edit database", "Save", "Save as...", "Exit"};
|
||||
char choices[6][30] = {"List all employees", "Find employee", "Edit database", "Save", "Export", "Exit"};
|
||||
|
||||
char keboard_input;
|
||||
char keyboard_input;
|
||||
int highlight = 0;
|
||||
|
||||
start_color();
|
||||
@@ -129,12 +130,6 @@ void mainMenu(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
wbkgd(mainmenu, COLOR_PAIR(1));
|
||||
|
||||
box(mainmenu, 0, 0);
|
||||
wattron(mainmenu, COLOR_PAIR(1));
|
||||
wattron(mainmenu, A_BOLD);
|
||||
mvwprintw(mainmenu, 0, (win_width - strlen("Administration")) / 2, "%s", "Administration");
|
||||
wattroff(mainmenu, A_BOLD);
|
||||
wattroff(mainmenu, COLOR_PAIR(1));
|
||||
keypad(mainmenu, true);
|
||||
|
||||
int text_x = (win_width - 52) / 2;
|
||||
@@ -143,6 +138,12 @@ void mainMenu(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
while (1)
|
||||
{
|
||||
box(mainmenu, 0, 0);
|
||||
wattron(mainmenu, COLOR_PAIR(1));
|
||||
wattron(mainmenu, A_BOLD);
|
||||
mvwprintw(mainmenu, 0, (win_width - strlen("Administration")) / 2, "%s", "Administration");
|
||||
wattroff(mainmenu, A_BOLD);
|
||||
wattroff(mainmenu, COLOR_PAIR(1));
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (i == highlight)
|
||||
@@ -160,9 +161,9 @@ void mainMenu(list_t *person_list, int terminal_x, int terminal_y)
|
||||
}
|
||||
wrefresh(mainmenu);
|
||||
flushinp();
|
||||
keboard_input = wgetch(mainmenu);
|
||||
keyboard_input = wgetch(mainmenu);
|
||||
|
||||
if (keboard_input == '\t')
|
||||
if (keyboard_input == '\t')
|
||||
{
|
||||
if (highlight < 5)
|
||||
highlight++;
|
||||
@@ -170,7 +171,7 @@ void mainMenu(list_t *person_list, int terminal_x, int terminal_y)
|
||||
highlight = 0;
|
||||
}
|
||||
|
||||
else if (keboard_input == '\n')
|
||||
else if (keyboard_input == '\n')
|
||||
{
|
||||
switch (highlight)
|
||||
{
|
||||
@@ -180,9 +181,10 @@ void mainMenu(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
case 1:
|
||||
personSearch(person_list, terminal_x, terminal_y);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (keboard_input == '\n')
|
||||
if (keyboard_input == '\n')
|
||||
{
|
||||
wclear(mainmenu);
|
||||
wrefresh(mainmenu);
|
||||
@@ -209,14 +211,6 @@ void personListing(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
WINDOW *personlisting = newwin(win_height, win_width, start_y, start_x);
|
||||
wbkgd(personlisting, COLOR_PAIR(1));
|
||||
box(personlisting, 0, 0);
|
||||
|
||||
wattron(personlisting, COLOR_PAIR(1));
|
||||
wattron(personlisting, A_BOLD);
|
||||
mvwprintw(personlisting, 0, (win_width - strlen("Filtered list")) / 2, "%s", "Filtered list");
|
||||
wattroff(personlisting, A_BOLD);
|
||||
wattroff(personlisting, COLOR_PAIR(1));
|
||||
keypad(personlisting, TRUE);
|
||||
|
||||
int max_rows = win_height - 2;
|
||||
int total_count = 0;
|
||||
@@ -229,10 +223,17 @@ void personListing(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
int offset = 0;
|
||||
int highlight = 0;
|
||||
int keboard_input;
|
||||
int keyboard_input;
|
||||
|
||||
while (1)
|
||||
{
|
||||
box(personlisting, 0, 0);
|
||||
wattron(personlisting, COLOR_PAIR(1));
|
||||
wattron(personlisting, A_BOLD);
|
||||
mvwprintw(personlisting, 0, (win_width - strlen("Filtered list")) / 2, "%s", "Filtered list");
|
||||
wattroff(personlisting, A_BOLD);
|
||||
wattroff(personlisting, COLOR_PAIR(1));
|
||||
keypad(personlisting, TRUE);
|
||||
werase(personlisting);
|
||||
box(personlisting, 0, 0);
|
||||
wattron(personlisting, COLOR_PAIR(1));
|
||||
@@ -247,7 +248,7 @@ void personListing(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
current = person_list->head;
|
||||
int idx = 0, row = 2;
|
||||
while (current && row < win_height - 1)
|
||||
while (current && row < win_height)
|
||||
{
|
||||
if (current->user.uuid)
|
||||
if (idx >= offset && row < win_height - 1)
|
||||
@@ -269,17 +270,17 @@ void personListing(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
wrefresh(personlisting);
|
||||
|
||||
keboard_input = wgetch(personlisting);
|
||||
if (keboard_input == KEY_UP)
|
||||
keyboard_input = wgetch(personlisting);
|
||||
if (keyboard_input == KEY_UP)
|
||||
{
|
||||
if (highlight > 0)
|
||||
if (highlight > 1)
|
||||
{
|
||||
highlight--;
|
||||
if (highlight < offset)
|
||||
offset--;
|
||||
}
|
||||
}
|
||||
else if (keboard_input == KEY_DOWN)
|
||||
else if (keyboard_input == KEY_DOWN)
|
||||
{
|
||||
if (highlight < total_count - 1)
|
||||
{
|
||||
@@ -288,7 +289,7 @@ void personListing(list_t *person_list, int terminal_x, int terminal_y)
|
||||
offset++;
|
||||
}
|
||||
}
|
||||
else if (keboard_input == '\n')
|
||||
else if (keyboard_input == '\n')
|
||||
{
|
||||
int idx = 0;
|
||||
node_t *selected = person_list->head;
|
||||
@@ -297,8 +298,9 @@ void personListing(list_t *person_list, int terminal_x, int terminal_y)
|
||||
selected = selected->next;
|
||||
idx++;
|
||||
}
|
||||
personInfo(selected, terminal_x, terminal_y);
|
||||
}
|
||||
else if (keboard_input == 27)
|
||||
else if (keyboard_input == 27 || keyboard_input == 'q')
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -311,8 +313,8 @@ void personListing(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
void personSearch(list_t *person_list, int terminal_x, int terminal_y)
|
||||
{
|
||||
int win_height = 20;
|
||||
int win_width = 76;
|
||||
int win_height = 11;
|
||||
int win_width = 50;
|
||||
int start_y = (terminal_y - win_height) / 2;
|
||||
int start_x = (terminal_x - win_width) / 2;
|
||||
|
||||
@@ -323,16 +325,8 @@ void personSearch(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
WINDOW *searchdialog = newwin(win_height, win_width, start_y, start_x);
|
||||
wbkgd(searchdialog, COLOR_PAIR(1));
|
||||
box(searchdialog, 0, 0);
|
||||
|
||||
wattron(searchdialog, COLOR_PAIR(1));
|
||||
wattron(searchdialog, A_BOLD);
|
||||
mvwprintw(searchdialog, 0, (win_width - strlen("Search")) / 2, "%s", "Search");
|
||||
wattroff(searchdialog, A_BOLD);
|
||||
wattroff(searchdialog, COLOR_PAIR(1));
|
||||
keypad(searchdialog, TRUE);
|
||||
|
||||
char choice;
|
||||
char keyboard_input;
|
||||
int highlight = 0;
|
||||
|
||||
int field_y = 2;
|
||||
@@ -342,10 +336,18 @@ void personSearch(list_t *person_list, int terminal_x, int terminal_y)
|
||||
char *fields[2] = {name, surname};
|
||||
int field_lens[2] = {31, 31};
|
||||
|
||||
uint16_t * uuids_found;
|
||||
uint16_t *uuids_found;
|
||||
|
||||
while (1)
|
||||
{
|
||||
box(searchdialog, 0, 0);
|
||||
|
||||
wattron(searchdialog, COLOR_PAIR(1));
|
||||
wattron(searchdialog, A_BOLD);
|
||||
mvwprintw(searchdialog, 0, (win_width - strlen("Search")) / 2, "%s", "Search");
|
||||
wattroff(searchdialog, A_BOLD);
|
||||
wattroff(searchdialog, COLOR_PAIR(1));
|
||||
keypad(searchdialog, TRUE);
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
@@ -353,7 +355,12 @@ void personSearch(list_t *person_list, int terminal_x, int terminal_y)
|
||||
wattron(searchdialog, COLOR_PAIR(2));
|
||||
else
|
||||
wattron(searchdialog, COLOR_PAIR(1));
|
||||
mvwprintw(searchdialog, field_y + i * 2, field_x, "%s [%30s]", prompts[i], fields[i]);
|
||||
|
||||
mvwprintw(searchdialog, field_y + i * 2, field_x, "%s ", prompts[i]);
|
||||
mvwprintw(searchdialog, field_y + i * 2, field_x + strlen(prompts[i]) + 3, "[%30s]", fields[i]);
|
||||
if (strcmp(fields[i], "\0") == 0)
|
||||
mvwprintw(searchdialog, field_y + i * 2, field_x + strlen(prompts[i]) + 3, "[______________________________]");
|
||||
|
||||
if (highlight == i)
|
||||
wattroff(searchdialog, COLOR_PAIR(2));
|
||||
else
|
||||
@@ -379,9 +386,9 @@ void personSearch(list_t *person_list, int terminal_x, int terminal_y)
|
||||
|
||||
wrefresh(searchdialog);
|
||||
|
||||
choice = wgetch(searchdialog);
|
||||
keyboard_input = wgetch(searchdialog);
|
||||
|
||||
if (choice == '\t')
|
||||
if (keyboard_input == '\t')
|
||||
{
|
||||
if (highlight < 3)
|
||||
{
|
||||
@@ -390,7 +397,7 @@ void personSearch(list_t *person_list, int terminal_x, int terminal_y)
|
||||
else
|
||||
highlight = 0;
|
||||
}
|
||||
else if (choice == '\n')
|
||||
else if (keyboard_input == '\n')
|
||||
{
|
||||
if (highlight < 2)
|
||||
{
|
||||
@@ -404,42 +411,157 @@ void personSearch(list_t *person_list, int terminal_x, int terminal_y)
|
||||
}
|
||||
else if (highlight == 2)
|
||||
{
|
||||
uint16_t count = searchUUIDByName(person_list, name, surname, &uuids_found);
|
||||
list_t found_pesons;
|
||||
found_pesons.head = NULL;
|
||||
node_t **last_ptr = &found_pesons.head;
|
||||
for (uint16_t i = 0; i < count; i++) {
|
||||
node_t *cur = person_list->head;
|
||||
while (cur) {
|
||||
if (cur->user.uuid == uuids_found[i]) {
|
||||
node_t *new_node = malloc(sizeof(node_t));
|
||||
if (new_node) {
|
||||
new_node->user = cur->user;
|
||||
new_node->next = NULL;
|
||||
*last_ptr = new_node;
|
||||
last_ptr = &new_node->next;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cur = cur->next;
|
||||
}
|
||||
}
|
||||
personListing(&found_pesons, terminal_x, terminal_y);
|
||||
uint16_t count = searchUUIDByName(person_list, name, surname, &uuids_found);
|
||||
list_t found_pesons;
|
||||
found_pesons.head = NULL;
|
||||
node_t **last_ptr = &found_pesons.head;
|
||||
for (uint16_t i = 0; i < count; i++)
|
||||
{
|
||||
node_t *cur = person_list->head;
|
||||
while (cur)
|
||||
{
|
||||
if (cur->user.uuid == uuids_found[i])
|
||||
{
|
||||
node_t *new_node = malloc(sizeof(node_t));
|
||||
if (new_node)
|
||||
{
|
||||
new_node->user = cur->user;
|
||||
new_node->next = NULL;
|
||||
*last_ptr = new_node;
|
||||
last_ptr = &new_node->next;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cur = cur->next;
|
||||
}
|
||||
}
|
||||
personListing(&found_pesons, terminal_x, terminal_y);
|
||||
}
|
||||
else if (highlight == 3)
|
||||
{
|
||||
delwin(searchdialog);
|
||||
touchwin(stdscr);
|
||||
refresh();
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (choice == 27)
|
||||
else if (keyboard_input == 27 || keyboard_input == 'q')
|
||||
{ // ESC
|
||||
delwin(searchdialog);
|
||||
touchwin(stdscr);
|
||||
refresh();
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void personInfo(node_t *_person, int terminal_x, int terminal_y)
|
||||
{
|
||||
int win_height = 14;
|
||||
int win_width = 50;
|
||||
int start_y = (terminal_y - win_height) / 2;
|
||||
int start_x = (terminal_x - win_width) / 2;
|
||||
|
||||
start_color();
|
||||
|
||||
WINDOW *personinfodialog = newwin(win_height, win_width, start_y, start_x);
|
||||
wbkgd(personinfodialog, COLOR_PAIR(6));
|
||||
|
||||
int max_rows = win_height - 2;
|
||||
int total_count = 0;
|
||||
box(personinfodialog, 0, 0);
|
||||
|
||||
wattron(personinfodialog, COLOR_PAIR(6));
|
||||
wattron(personinfodialog, A_BOLD);
|
||||
mvwprintw(personinfodialog, 0, (win_width - strlen("Search")) / 2, "%s", "Search");
|
||||
wattroff(personinfodialog, A_BOLD);
|
||||
wattroff(personinfodialog, COLOR_PAIR(6));
|
||||
keypad(personinfodialog, TRUE);
|
||||
|
||||
char buttons[2][20] = {"<Print to file...>", "<Back>"};
|
||||
char prompts[6][32] = {"Name", "Surname", "Department", "Last time event", "Total time", "Available"};
|
||||
|
||||
char keyboard_input;
|
||||
int highlight = 0;
|
||||
|
||||
int field_y = 2;
|
||||
int field_x = 4;
|
||||
int button_y = field_y + 15;
|
||||
int button_x = field_x;
|
||||
|
||||
while (1)
|
||||
{
|
||||
werase(personinfodialog);
|
||||
box(personinfodialog, 0, 0);
|
||||
wattron(personinfodialog, COLOR_PAIR(6));
|
||||
wattron(personinfodialog, A_BOLD);
|
||||
mvwprintw(personinfodialog, 0, (win_width - strlen("Person Information")) / 2, "%s", "Person Information");
|
||||
wattroff(personinfodialog, A_BOLD);
|
||||
|
||||
char last_time_event_str[64];
|
||||
printDateAndTimeInString(_person->user.last_time_event, last_time_event_str);
|
||||
|
||||
char total_time_str[64];
|
||||
printTimeInString(_person->user.total, total_time_str);
|
||||
|
||||
mvwprintw(personinfodialog, field_y, field_x, "%s: %s", prompts[0], _person->user.name);
|
||||
mvwprintw(personinfodialog, field_y + 1, field_x, "%s: %s", prompts[1], _person->user.surname);
|
||||
mvwprintw(personinfodialog, field_y + 2, field_x, "%s: %d", prompts[2], _person->user.department);
|
||||
mvwprintw(personinfodialog, field_y + 4, field_x, "%s: %s", prompts[3], last_time_event_str);
|
||||
mvwprintw(personinfodialog, field_y + 5, field_x, "%s: %s", prompts[4], total_time_str);
|
||||
mvwprintw(personinfodialog, field_y + 7, field_x, "%s: %s", prompts[5], _person->user.available ? "Yes" : "No");
|
||||
|
||||
wattroff(personinfodialog, COLOR_PAIR(6));
|
||||
|
||||
wrefresh(personinfodialog);
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
if (highlight == i)
|
||||
wattron(personinfodialog, COLOR_PAIR(2));
|
||||
else
|
||||
wattron(personinfodialog, COLOR_PAIR(6));
|
||||
wattron(personinfodialog, A_BOLD);
|
||||
mvwprintw(personinfodialog, field_y + 10, field_x + i * 20, "%s", buttons[i]);
|
||||
wattroff(personinfodialog, A_BOLD);
|
||||
if (highlight == i)
|
||||
wattroff(personinfodialog, COLOR_PAIR(2));
|
||||
else
|
||||
wattroff(personinfodialog, COLOR_PAIR(6));
|
||||
}
|
||||
|
||||
wrefresh(personinfodialog);
|
||||
|
||||
keyboard_input = wgetch(personinfodialog);
|
||||
|
||||
if (keyboard_input == '\t')
|
||||
{
|
||||
highlight = !highlight;
|
||||
}
|
||||
else if (keyboard_input == '\n')
|
||||
{
|
||||
if (highlight == 0)
|
||||
{
|
||||
exportPersonInfo(_person);
|
||||
}
|
||||
else if (highlight == 1)
|
||||
{
|
||||
delwin(personinfodialog);
|
||||
touchwin(stdscr);
|
||||
refresh();
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (keyboard_input == 27 || keyboard_input == 'q')
|
||||
{
|
||||
delwin(personinfodialog);
|
||||
touchwin(stdscr);
|
||||
refresh();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void exportDialog(list_t _list, int terminal_x, int terminal_y){
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user