diff --git a/project/flippypass.c b/project/flippypass.c index 2b42740..c0a13de 100644 --- a/project/flippypass.c +++ b/project/flippypass.c @@ -1,5 +1,6 @@ // Libraries #include + #include "ui.h" // Entry Point @@ -13,8 +14,14 @@ int32_t flippypass_app(void* p) { // Drawwing the UI while(ui->running) { // Do we want to quit? - if (ui->input == Back) { - ui->running = false; + if (ui->press_used + && ui->input == Back) { + if(ui->page == 0) { + ui->running = false; + } else { + ui->press_used = false; + ui->page = 0; + } } // Updating canvas diff --git a/project/ui.c b/project/ui.c index e22da0b..5be8010 100644 --- a/project/ui.c +++ b/project/ui.c @@ -8,8 +8,12 @@ uiManager* ui_create() { // Defining basic variables result->running = true; + result->selection = 0; result->page = 0; + result->press_avail = true; + result->press_used = false; + // Creating a GUI result->gui = furi_record_open(RECORD_GUI); @@ -28,61 +32,117 @@ void ui_input(InputEvent* event, void* ctx) { uiManager* manager = (uiManager*)ctx; // Getting input - switch(event->key) { - case InputKeyUp: - manager->input = Up; - break; - case InputKeyDown: - manager->input = Down; - break; - case InputKeyLeft: - manager->input = Left; - break; - case InputKeyRight: - manager->input = Right; - break; - case InputKeyOk: - manager->input = Ok; - break; - case InputKeyBack: - manager->input = Back; - break; - default: - break; + if (event->type == InputTypePress + && manager->press_avail) { + manager->press_avail = false; + manager->press_used = true; + + switch(event->key) { + case InputKeyUp: + manager->input = Up; + break; + case InputKeyDown: + manager->input = Down; + break; + case InputKeyLeft: + manager->input = Left; + break; + case InputKeyRight: + manager->input = Right; + break; + case InputKeyOk: + manager->input = Ok; + break; + case InputKeyBack: + manager->input = Back; + break; + default: + break; + } + } else if (event->type == InputTypeRelease) { + manager->press_avail = true; } } void ui_draw(Canvas* canvas, void* ctx) { - // Showing the Main Menu - ui_p_mainmenu(canvas); - // Context into Result uiManager* manager = (uiManager*)ctx; // Switching page switch(manager->page){ - case 0: - ui_p_mainmenu(canvas); + case 0: // Main Menu + ui_p_mainmenu(canvas, manager); + break; + case 1: // About Me + ui_p_about(canvas); break; } } -void ui_p_mainmenu(Canvas* canvas) { +void ui_p_mainmenu(Canvas* canvas, uiManager* manager) { + // Menu Options canvas_set_font(canvas, FontPrimary); canvas_draw_str(canvas, 2, 11, "FlippyPass"); - //canvas_draw_icon(canvas, 15, 16, &I_ButtonRight_4x7); + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 22, 25, "View Passwords"); canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 22, 23, "View Passwords"); + canvas_draw_str(canvas, 22, 35, "View Archive"); canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 22, 41, "Create Password"); + canvas_draw_str(canvas, 22, 45, "Create Password"); canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 22, 51, "About"); + canvas_draw_str(canvas, 22, 55, "About"); + + // Cursor + if(manager->press_used) { + // We used a press + manager->press_used = false; + + // Reacting + switch (manager->input){ + case Up: + manager->selection--; + break; + case Down: + manager->selection++; + break; + case Ok: + + switch(manager->selection) { + case 3: // About Me + manager->page = 1; + break; + default: + break; + } + + break; + default: + break; + } + + // Min & Max + if (manager->selection > 3) { + manager->selection = 0; + } else if (manager->selection < 0) { + manager->selection = 3; + } + } + + // Placing the spot at the cursor + canvas_draw_box(canvas, 15, 20 + (manager->selection * 10), 2, 2); +} +void ui_p_about(Canvas* canvas) { + canvas_set_font(canvas, FontPrimary); + canvas_draw_str(canvas, 2, 11, "FlippyPass"); canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 22, 32, "View Archive"); + canvas_draw_str(canvas, 3, 23, "A really easy to use Password"); + + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 3, 32, "Manager for the Flipper-Zero."); } void ui_delete(uiManager* manager) { diff --git a/project/ui.h b/project/ui.h index 81e61f7..203dfcd 100644 --- a/project/ui.h +++ b/project/ui.h @@ -5,6 +5,8 @@ // Libraries #include #include +#include + #include "app.h" // Structures @@ -21,8 +23,12 @@ typedef struct { Back } input; + int selection; int page; + bool running; + bool press_used; + bool press_avail; } uiManager; // Constructors @@ -32,7 +38,8 @@ uiManager* ui_create(); void ui_input(InputEvent* event, void* ctx); void ui_draw(Canvas* canvas, void* ctx); -void ui_p_mainmenu(Canvas* canvas); +void ui_p_mainmenu(Canvas* canvas, uiManager* manager); +void ui_p_about(Canvas* canvas); void ui_delete(uiManager* manager);