mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-14 15:48:35 -07:00
Replace Terminal menu with MNTM menu
This commit is contained in:
@@ -348,47 +348,68 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MenuStyleTerminal: {
|
case MenuStyleMNTM: {
|
||||||
// Draw a border around the screen
|
// Reset canvas and set background
|
||||||
|
canvas_reset(canvas);
|
||||||
|
canvas_set_color(canvas, ColorBlack);
|
||||||
|
canvas_clear(canvas);
|
||||||
|
canvas_set_bitmap_mode(canvas, true);
|
||||||
|
canvas_set_font(canvas, FontPrimary);
|
||||||
|
canvas_draw_str(canvas, 5, 13, "Momentum");
|
||||||
|
canvas_draw_icon(canvas, 62, 4, &I_Release_arrow_18x15);
|
||||||
|
canvas_draw_line(canvas, 5, 15, 59, 15);
|
||||||
|
canvas_draw_line(canvas, 7, 17, 61, 17);
|
||||||
|
canvas_draw_line(canvas, 10, 19, 63, 19);
|
||||||
|
char title[20];
|
||||||
|
snprintf(title, sizeof(title), "%s", furi_hal_version_get_name_ptr());
|
||||||
|
canvas_draw_str(canvas, 5, 34, title);
|
||||||
|
DateTime curr_dt;
|
||||||
|
furi_hal_rtc_get_datetime(&curr_dt);
|
||||||
|
int hour = curr_dt.hour;
|
||||||
|
int min = curr_dt.minute;
|
||||||
|
if(hour > 12) {
|
||||||
|
hour -= 12;
|
||||||
|
}
|
||||||
|
if(hour == 0) {
|
||||||
|
hour = 12;
|
||||||
|
}
|
||||||
|
canvas_set_font(canvas, FontSecondary);
|
||||||
|
char clk[20];
|
||||||
|
snprintf(clk, sizeof(clk), "%02u:%02u", hour, min);
|
||||||
|
canvas_draw_str(canvas, 5, 46, clk);
|
||||||
|
|
||||||
|
// Draw the selected menu item
|
||||||
|
MenuItem* item = MenuItemArray_get(model->items, position);
|
||||||
|
FuriString* name = furi_string_alloc();
|
||||||
|
menu_short_name(item, name);
|
||||||
|
canvas_set_font(canvas, FontSecondary);
|
||||||
|
canvas_set_color(canvas, ColorBlack);
|
||||||
|
elements_bold_rounded_frame(canvas, 42, 23, 35, 33);
|
||||||
|
menu_centered_icon(canvas, item, 43, 24, 35, 32);
|
||||||
canvas_draw_frame(canvas, 0, 0, 128, 64);
|
canvas_draw_frame(canvas, 0, 0, 128, 64);
|
||||||
|
|
||||||
// current dir on the title bar
|
int startY = 15;
|
||||||
canvas_set_font(canvas, FontSecondary);
|
int itemHeight = 10;
|
||||||
char title[20];
|
int itemMaxVisible = 5;
|
||||||
snprintf(title, sizeof(title), "%s@fz: ~/Home", furi_hal_version_get_name_ptr());
|
size_t startItem = model->vertical_offset;
|
||||||
canvas_draw_str(canvas, 20, 10, title);
|
size_t endItem = startItem + itemMaxVisible;
|
||||||
|
endItem = (endItem > MenuItemArray_size(model->items)) ?
|
||||||
|
MenuItemArray_size(model->items) :
|
||||||
|
endItem;
|
||||||
|
size_t scroll_counter = menu_scroll_counter(model, item);
|
||||||
|
|
||||||
canvas_draw_str(canvas, 118, 9, "x"); // "X" button on the top-right corner
|
for(size_t i = startItem; i < endItem; i++) {
|
||||||
canvas_draw_frame(canvas, 116, 2, 8, 9);
|
MenuItem* item = MenuItemArray_get(model->items, i);
|
||||||
canvas_draw_frame(canvas, 0, 0, 128, 13);
|
FuriString* name = furi_string_alloc();
|
||||||
|
|
||||||
// Display the user's name line at the bottom
|
|
||||||
canvas_set_font(canvas, FontBatteryPercent);
|
|
||||||
char prefix[15];
|
|
||||||
snprintf(prefix, sizeof(prefix), "%s@fz:~$", furi_hal_version_get_name_ptr());
|
|
||||||
canvas_draw_str(canvas, 2, 56, prefix);
|
|
||||||
|
|
||||||
size_t name_start_x = 2 + (strlen(prefix) - 1) * 6;
|
|
||||||
|
|
||||||
for(size_t i = 0; i < 4 && (position + i) < items_count; i++) {
|
|
||||||
item = MenuItemArray_get(model->items, position + i);
|
|
||||||
menu_short_name(item, name);
|
menu_short_name(item, name);
|
||||||
|
int yPos = startY + ((i - startItem) * itemHeight);
|
||||||
size_t scroll_counter = menu_scroll_counter(model, item);
|
elements_scrollable_text_line(canvas, 83, yPos, 62, name, scroll_counter, false);
|
||||||
if(i == 0) {
|
furi_string_free(name);
|
||||||
// Display selected item to the right of the $ symbol
|
|
||||||
// May want to reduce spacing
|
|
||||||
elements_scrollable_text_line(
|
|
||||||
canvas, name_start_x, 56, 60, name, scroll_counter, false);
|
|
||||||
} else {
|
|
||||||
// Display the previous items above the user's name line
|
|
||||||
canvas_draw_str(canvas, 2, 56 - i * 12, item->label);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
furi_string_free(name);
|
||||||
|
canvas_commit(canvas);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -614,16 +635,13 @@ static void menu_process_up(Menu* menu) {
|
|||||||
|
|
||||||
switch(momentum_settings.menu_style) {
|
switch(momentum_settings.menu_style) {
|
||||||
case MenuStyleList:
|
case MenuStyleList:
|
||||||
case MenuStyleTerminal:
|
case MenuStyleMNTM:
|
||||||
if(position > 0) {
|
if(position > 0) {
|
||||||
position--;
|
position--;
|
||||||
if(vertical_offset && vertical_offset == position) {
|
|
||||||
vertical_offset--;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
position = count - 1;
|
position = count - 1;
|
||||||
vertical_offset = count - 8;
|
|
||||||
}
|
}
|
||||||
|
vertical_offset = position;
|
||||||
break;
|
break;
|
||||||
case MenuStyleWii:
|
case MenuStyleWii:
|
||||||
if(position % 2 || (position == count - 1 && count % 2)) {
|
if(position % 2 || (position == count - 1 && count % 2)) {
|
||||||
@@ -665,16 +683,13 @@ static void menu_process_down(Menu* menu) {
|
|||||||
|
|
||||||
switch(momentum_settings.menu_style) {
|
switch(momentum_settings.menu_style) {
|
||||||
case MenuStyleList:
|
case MenuStyleList:
|
||||||
case MenuStyleTerminal:
|
case MenuStyleMNTM:
|
||||||
if(position < count - 1) {
|
if(position < count - 1) {
|
||||||
position++;
|
position++;
|
||||||
if(vertical_offset < count - 8 && vertical_offset == position - 7) {
|
|
||||||
vertical_offset++;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
position = 0;
|
position = 0;
|
||||||
vertical_offset = 0;
|
|
||||||
}
|
}
|
||||||
|
vertical_offset = position;
|
||||||
break;
|
break;
|
||||||
case MenuStyleWii:
|
case MenuStyleWii:
|
||||||
if(position % 2 || (position == count - 1 && count % 2)) {
|
if(position % 2 || (position == count - 1 && count % 2)) {
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ typedef enum {
|
|||||||
MenuStyleVertical,
|
MenuStyleVertical,
|
||||||
MenuStyleC64,
|
MenuStyleC64,
|
||||||
MenuStyleCompact,
|
MenuStyleCompact,
|
||||||
MenuStyleTerminal,
|
MenuStyleMNTM,
|
||||||
MenuStyleCount,
|
MenuStyleCount,
|
||||||
} MenuStyle;
|
} MenuStyle;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user