X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=taskasaur.c;h=dc90110ed1471d74d14cced772648cb8af96a25e;hb=cb5385b932956072fc14fd6531c45f12c9cc4925;hp=03c3ab443ea06a580f3fed6266834080004591ce;hpb=7dd95a0ec56529992866e603dcfaf395614d5bf2;p=taskasaur.git diff --git a/taskasaur.c b/taskasaur.c index 03c3ab4..dc90110 100644 --- a/taskasaur.c +++ b/taskasaur.c @@ -17,7 +17,6 @@ int set_selected_menu(BoardMenu* boardmenu, int index); MenuItem** todolist_to_menuitem(TodoItem** item_list, int list_length); Menu** make_menus(Board* board, int todolist_length); - int main(int argc, char** argv) { @@ -70,17 +69,86 @@ main(int argc, char** argv) break; case BINDING_MOVE_ITEM_DOWN: menu_driver(active_menu, MENU_MOVE_DOWN); + break; + case BINDING_MOVE_ITEM_LEFT: + if (boardmenu->selected-1 < 0) break; + { + Menu* from_menu; + Menu* to_menu; + + from_menu = boardmenu->menu_list[boardmenu->selected], + to_menu = boardmenu->menu_list[boardmenu->selected-1], + + insert_item( + to_menu, + get_menu_item( + from_menu, + get_selected_item(from_menu) + ), + min( + get_selected_item(from_menu), + get_menu_length(to_menu) + ) + ); + delete_item( + from_menu, + get_selected_item(from_menu) + ); + set_selected_menu(boardmenu, boardmenu->selected-1); + } + + break; + case BINDING_MOVE_ITEM_RIGHT: + if (boardmenu->selected >= boardmenu->menu_count-1) break; + // this is legit cpy paste please fix this + { + Menu* from_menu; + Menu* to_menu; + + from_menu = boardmenu->menu_list[boardmenu->selected], + to_menu = boardmenu->menu_list[boardmenu->selected+1], + + insert_item( + to_menu, + get_menu_item( + from_menu, + get_selected_item(from_menu) + ), + min( + get_selected_item(from_menu), + get_menu_length(to_menu) + ) + ); + delete_item( + from_menu, + get_selected_item(from_menu) + ); + set_selected_menu(boardmenu, boardmenu->selected+1); + } + break; case BINDING_DELETE_ITEM: menu_driver(active_menu, MENU_DELETE); break; - + case BINDING_APPEND_ITEM: + menu_driver(active_menu, MENU_APPEND); + break; + case BINDING_INSERT_ABOVE: + menu_driver(active_menu, MENU_INSERT_ABOVE); + break; + case BINDING_INSERT_BELOW: + menu_driver(active_menu, MENU_INSERT_BELOW); + break; + case BINDING_EDIT_ITEM: + menu_driver(active_menu, MENU_EDIT); + break; } for (int i = 0; i < boardmenu->menu_count; i++) { render_menu(boardmenu->menu_list[i]); } + } exit_tscurses(); @@ -106,6 +174,7 @@ set_selected_menu(BoardMenu* boardmenu, int index) { Menu* old_menu; Menu* new_menu; + int new_pos; old_menu = boardmenu->menu_list[boardmenu->selected]; new_menu = boardmenu->menu_list[index]; @@ -113,6 +182,11 @@ set_selected_menu(BoardMenu* boardmenu, int index) set_menu_focus(old_menu, false); set_menu_focus(new_menu, true); + /* also try to jump to a similar position if possible */ + /* rn theres a bug if old menu is empty */ + new_pos = min(get_selected_item(old_menu), get_menu_length(new_menu)-1); + set_selected_item(new_menu, new_pos); + boardmenu->selected = index; return 0;