// Header #include "ui.h" // Functions uiManager* ui_create() { // Creating the UI Manager uiManager* result = malloc(sizeof(uiManager)); // 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); // Creating a canvas result->canvas = view_port_alloc(); view_port_draw_callback_set(result->canvas, ui_draw, result); view_port_input_callback_set(result->canvas, ui_input, result); gui_add_view_port(result->gui, result->canvas, GuiLayerFullscreen); // Returning the UI Manager return result; } void ui_input(InputEvent* event, void* ctx) { // Turning the context back into the UI Manager uiManager* manager = (uiManager*)ctx; // Getting input 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) { // Context into Result uiManager* manager = (uiManager*)ctx; // Switching page switch(manager->page){ 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, uiManager* manager) { // Menu Options canvas_set_font(canvas, FontPrimary); canvas_draw_str(canvas, 2, 11, "FlippyPass"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 22, 25, "View Passwords"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 22, 35, "View Archive"); canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 22, 45, "Create Password"); canvas_set_font(canvas, FontSecondary); 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, 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) { view_port_enabled_set(manager->canvas, false); gui_remove_view_port(manager->gui, manager->canvas); view_port_free(manager->canvas); furi_record_close(RECORD_GUI); free(manager); }