This repository has been archived on 2026-04-25. You can view files and clone it, but cannot push or open issues or pull requests.
FlippyPass/project/backend/ui.c

216 lines
5.6 KiB
C
Raw Normal View History

2024-08-26 04:20:00 -05:00
// Header
#include "ui.h"
// Functions
2024-08-27 22:33:59 -05:00
UIManager* ui_create() {
2024-08-26 04:20:00 -05:00
// Creating the UI Manager
2024-08-27 22:33:59 -05:00
UIManager* result = malloc(sizeof(UIManager));
2024-08-26 04:20:00 -05:00
// Defining basic variables
result->running = true;
2024-08-27 00:11:56 -05:00
result->selection = 0;
2024-08-26 04:20:00 -05:00
result->page = 0;
2024-08-27 00:11:56 -05:00
result->press_avail = true;
2024-08-30 08:06:47 -05:00
result->is_pressing = false;
2024-08-27 00:11:56 -05:00
2024-08-26 23:37:32 -05:00
// Creating a GUI
result->gui = furi_record_open(RECORD_GUI);
2024-08-26 04:20:00 -05:00
// Creating a canvas
result->canvas = view_port_alloc();
view_port_draw_callback_set(result->canvas, ui_draw, result);
2024-08-26 23:48:45 -05:00
view_port_input_callback_set(result->canvas, ui_input, result);
2024-08-26 23:37:32 -05:00
gui_add_view_port(result->gui, result->canvas, GuiLayerFullscreen);
2024-09-01 13:58:20 -05:00
// Creating the manager
result->manager = manager_create();
manager_loadnames(result->manager, result->manager->page);
2024-08-26 04:20:00 -05:00
// Returning the UI Manager
return result;
}
2024-08-26 23:48:45 -05:00
void ui_input(InputEvent* event, void* ctx) {
// Turning the context back into the UI Manager
2024-08-27 22:33:59 -05:00
UIManager* manager = (UIManager*)ctx;
2024-08-26 23:48:45 -05:00
// Getting input
2024-08-27 00:11:56 -05:00
if (event->type == InputTypePress
&& manager->press_avail) {
manager->press_avail = false;
2024-08-30 08:06:47 -05:00
manager->is_pressing = true;
2024-08-27 00:11:56 -05:00
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;
2024-08-26 23:48:45 -05:00
}
}
2024-08-27 23:43:31 -05:00
void ui_quit(UIManager* manager) {
2024-08-30 08:06:47 -05:00
if (!(manager->is_pressing && manager->input == Back)) {return;}
2024-08-27 23:43:31 -05:00
if(manager->page == 0) {
manager->running = false;
} else {
2024-08-30 08:06:47 -05:00
manager->is_pressing = false;
2024-08-27 23:43:31 -05:00
manager->page = 0;
}
}
2024-08-26 23:48:45 -05:00
2024-08-26 04:20:00 -05:00
void ui_draw(Canvas* canvas, void* ctx) {
// Context into Result
2024-08-27 22:33:59 -05:00
UIManager* manager = (UIManager*)ctx;
2024-08-26 04:20:00 -05:00
// Switching page
switch(manager->page){
2024-08-27 00:11:56 -05:00
case 0: // Main Menu
ui_p_mainmenu(canvas, manager);
break;
case 1: // About Me
ui_p_about(canvas);
2024-08-26 04:20:00 -05:00
break;
2024-08-27 03:12:39 -05:00
case 2: // Create Password
ui_p_view(canvas, manager);
break;
2024-08-26 04:20:00 -05:00
}
}
2024-08-27 22:33:59 -05:00
void ui_p_mainmenu(Canvas* canvas, UIManager* manager) {
2024-08-27 00:11:56 -05:00
// Menu Options
2024-08-26 04:20:00 -05:00
canvas_set_font(canvas, FontPrimary);
canvas_draw_str(canvas, 2, 11, "FlippyPass");
2024-08-27 00:11:56 -05:00
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 22, 25, "View Passwords");
2024-08-26 04:20:00 -05:00
canvas_set_font(canvas, FontSecondary);
2024-08-27 00:12:44 -05:00
canvas_draw_str(canvas, 22, 45, "View Archive");
2024-08-26 04:20:00 -05:00
canvas_set_font(canvas, FontSecondary);
2024-08-27 00:12:44 -05:00
canvas_draw_str(canvas, 22, 35, "Create Password");
2024-08-27 00:11:56 -05:00
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 22, 55, "About");
// Cursor
2024-08-30 08:06:47 -05:00
if(manager->is_pressing) {
2024-08-27 00:11:56 -05:00
// We used a press
2024-08-30 08:06:47 -05:00
manager->is_pressing = false;
2024-08-27 00:11:56 -05:00
// Reacting
switch (manager->input){
case Up:
manager->selection--;
break;
case Down:
manager->selection++;
break;
case Ok:
switch(manager->selection) {
2024-08-27 03:12:39 -05:00
case 0: // View Passwords
manager->page = 2;
break;
2024-08-27 00:11:56 -05:00
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");
2024-08-26 04:20:00 -05:00
canvas_set_font(canvas, FontSecondary);
2024-08-27 00:11:56 -05:00
canvas_draw_str(canvas, 3, 23, "A really easy to use Password");
2024-08-26 04:20:00 -05:00
canvas_set_font(canvas, FontSecondary);
2024-08-27 00:11:56 -05:00
canvas_draw_str(canvas, 3, 32, "Manager for the Flipper-Zero.");
2024-08-26 23:37:32 -05:00
}
2024-08-27 22:33:59 -05:00
void ui_p_view(Canvas* canvas, UIManager* manager){
2024-08-27 03:12:39 -05:00
canvas_set_font(canvas, FontPrimary);
canvas_draw_str(canvas, 2, 11, "FlippyPass");
/* canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 15, 23, "Apple");
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 15, 33, "Microsoft");
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 15, 43, "Google");
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 15, 53, "Facebook"); */
// Counting through password names
for (int i = 0; i < 4; i++) {
if (manager->manager->names[i] != NULL) {
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 15, 23 + (i * 10), manager->manager->names[i]);
}
}
2024-08-27 22:33:59 -05:00
2024-08-30 08:06:47 -05:00
if (manager->is_pressing) {
manager->is_pressing = false;
2024-08-27 03:12:39 -05:00
switch (manager->input) {
case Up:
break;
case Down:
break;
case Ok:
break;
default:
break;
}
}
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 106, 62, "1/1");
}
2024-08-26 23:37:32 -05:00
2024-08-27 22:33:59 -05:00
void ui_delete(UIManager* manager) {
2024-08-26 23:37:32 -05:00
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);
2024-08-26 04:20:00 -05:00
}