From: Daniel Liu Date: Sun, 13 Dec 2020 23:14:35 +0000 (-0500) Subject: menu test X-Git-Url: https://git.danieliu.xyz/?p=taskasaur.git;a=commitdiff_plain;h=103d9d622254eb6257565bd08da27376c12510fd menu test --- diff --git a/makefile b/makefile index 60abac4..1c1c3e9 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,10 @@ CC=gcc make: taskasaur taskasaur: - $(CC) -lncurses taskasaur.c -o taskasaur + $(CC) -lncurses -lmenu taskasaur.c -o taskasaur + +menutest: + $(CC) -lncurses -lmenu menutest.c -o menutest clean: - rm taskasaur + rm taskasaur menutest diff --git a/menutest.c b/menutest.c new file mode 100644 index 0000000..e76568e --- /dev/null +++ b/menutest.c @@ -0,0 +1,79 @@ +#include +#include +#include +#include + +WINDOW* create_list_win(int height, int width, int y, int x); + +int +main(int argc, char** argv) +{ + int height, width; + int ch; + + WINDOW* todo_win; + char* todos[] = {"eat bread", "eat milk", "eat cheese"}; + int todo_length; + ITEM** todo_items; + MENU* todo_menu; + ITEM* cur_item; + + // start ncurses + initscr(); + cbreak(); + noecho(); + curs_set(0); + start_color(); + + getmaxyx(stdscr, height, width); + refresh(); + + /* init todo menu stuff */ + + todo_win = create_list_win(20, 40, 5, 5); + todo_length = sizeof(todos)/sizeof(todos[0]); + + todo_items = malloc((todo_length+1)*sizeof(ITEM*)); + for (int i = 0; i < todo_length; i++) { + todo_items[i] = new_item(todos[i], ""); + } + todo_items[todo_length] = NULL; // last item needs to be a null pointer for some reason? + + todo_menu = new_menu(todo_items); + post_menu(todo_menu); + + /* todo_menu = new_menu(); */ + + /* for (int i = 0; i < todo_length; i++) { */ + /* mvwprintw(todo_win, i, 0, todos[i]); */ + /* } */ + wrefresh(todo_win); + + while ((ch = getch()) != 113) { // while not q + + // ofc the first thing we need is vim keys + switch (ch) { + case 106: // j + menu_driver(todo_menu, REQ_DOWN_ITEM); + break; + case 107: // k + menu_driver(todo_menu, REQ_UP_ITEM); + break; + } + + refresh(); + /* clear(); */ + } + + endwin(); + + return 0; +} + +WINDOW* +create_list_win(int height, int width, int y, int x) +{ + WINDOW* new_win = newwin(height, width, y, x); + wrefresh(new_win); + return new_win; +} diff --git a/taskasaur b/taskasaur index 700edbf..275b6ee 100755 Binary files a/taskasaur and b/taskasaur differ diff --git a/taskasaur.c b/taskasaur.c index 3b28bad..39eaca6 100644 --- a/taskasaur.c +++ b/taskasaur.c @@ -1,8 +1,9 @@ #include -#include -#include #include +#include #include +#include +#include void winch_handler(int sig); @@ -10,6 +11,8 @@ char** read_todo(FILE* file, int* length); WINDOW* create_list_win(int height, int width, int y, int x); +void draw_todo(WINDOW* todo_win, char** todo_list, int todo_length); + #include "config.h" int @@ -85,10 +88,7 @@ main(int argc, char** argv) refresh(); todo_win = create_list_win(20, 40, 5, 5); - for (int i = 0; i < todo_length; i++) { - mvwprintw(todo_win, i+1, 2, todos[i]); - } - wrefresh(todo_win); + draw_todo(todo_win, todos, todo_length); move(y,x); while ((ch = getch()) != 113) { // while not q @@ -146,13 +146,6 @@ read_todo(FILE* file, int* length) while ((nread = getline(&lineptr, &len, file)) != -1) { out_len++; out_arr = realloc(out_arr, (sizeof(char*))*out_len); // bad to keep resizing? - // remove new line character (maybe just write own new line func later) - /* lineptr = realloc(*lineptr, len-2); */ - /* *(lineptr+len-1) = '\0'; */ - /* printf(lineptr); */ - /* lineptr = realloc(lineptr, len-1); //maybe watch out for empty lines */ - /* *(lineptr+len-3) = '\0'; */ - out_arr[out_len-1] = lineptr; lineptr = NULL; @@ -167,7 +160,15 @@ WINDOW* create_list_win(int height, int width, int y, int x) { WINDOW* new_win = newwin(height, width, y, x); - box(new_win, 0, 0); wrefresh(new_win); return new_win; } + +void +draw_todo(WINDOW* todo_win, char** todo_list, int todo_length) { + for (int i = 0; i < todo_length; i++) { + mvwprintw(todo_win, i+1, 2, todo_list[i]); + } + box(todo_win, 0, 0); + wrefresh(todo_win); +}