Skip to content

Commit 3df1e96

Browse files
committed
update micropython port code
1 parent 86de410 commit 3df1e96

5 files changed

Lines changed: 119 additions & 7 deletions

File tree

application.fam

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ App(
55
entry_point="mp_flipper_app",
66
stack_size=4 * 1024,
77
fap_category="Tools",
8-
fap_version="0.4",
8+
fap_version="0.5",
99
fap_description="compile and execute MicroPython scripts",
1010
fap_icon="icon.png",
1111
fap_author="Oliver Fabel",
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
#include <furi.h>
22
#include <gui/gui.h>
3+
#include <dialogs/dialogs.h>
34

45
typedef struct {
56
Gui* gui;
67
ViewPort* view_port;
78
Canvas* canvas;
89
FuriPubSub* input_event_queue;
910
FuriPubSubSubscription* input_event;
11+
DialogMessage* dialog_message;
12+
const char* dialog_message_button_left;
13+
const char* dialog_message_button_center;
14+
const char* dialog_message_button_right;
1015
} mp_flipper_context_t;

lib/micropython-port/mp_flipper_modflipperzero_canvas.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ inline void mp_flipper_canvas_draw_disc(uint8_t x, uint8_t y, uint8_t r) {
7171
inline void mp_flipper_canvas_set_font(uint8_t font) {
7272
mp_flipper_context_t* ctx = mp_flipper_context;
7373

74-
canvas_set_font(
75-
ctx->canvas, font == MP_FLIPPER_CANVAS_FONT_PRIMARY ? FontPrimary : FontSecondary);
74+
canvas_set_font(ctx->canvas, font == MP_FLIPPER_FONT_PRIMARY ? FontPrimary : FontSecondary);
7675
}
7776

7877
inline void mp_flipper_canvas_set_color(uint8_t color) {
@@ -88,11 +87,11 @@ inline void mp_flipper_canvas_set_text(uint8_t x, uint8_t y, const char* text) {
8887
}
8988

9089
inline void mp_flipper_canvas_set_text_align(uint8_t x, uint8_t y) {
91-
Align align_x = x == MP_FLIPPER_CANVAS_ALIGN_BEGIN ? AlignLeft : AlignRight;
92-
Align align_y = y == MP_FLIPPER_CANVAS_ALIGN_BEGIN ? AlignTop : AlignBottom;
90+
Align align_x = x == MP_FLIPPER_ALIGN_BEGIN ? AlignLeft : AlignRight;
91+
Align align_y = y == MP_FLIPPER_ALIGN_BEGIN ? AlignTop : AlignBottom;
9392

94-
text_align_x = x == MP_FLIPPER_CANVAS_ALIGN_CENTER ? AlignCenter : align_x;
95-
text_align_y = y == MP_FLIPPER_CANVAS_ALIGN_CENTER ? AlignCenter : align_y;
93+
text_align_x = x == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_x;
94+
text_align_y = y == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_y;
9695
}
9796

9897
inline void mp_flipper_canvas_update() {
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
#include <dialogs/dialogs.h>
2+
3+
#include <mp_flipper_modflipperzero.h>
4+
#include <mp_flipper_runtime.h>
5+
6+
#include "mp_flipper_context.h"
7+
8+
void mp_flipper_dialog_message_set_text(
9+
const char* text,
10+
uint8_t x,
11+
uint8_t y,
12+
uint8_t h,
13+
uint8_t v) {
14+
mp_flipper_context_t* ctx = mp_flipper_context;
15+
16+
Align align_x = x == MP_FLIPPER_ALIGN_BEGIN ? AlignLeft : AlignRight;
17+
Align align_y = y == MP_FLIPPER_ALIGN_BEGIN ? AlignTop : AlignBottom;
18+
19+
align_x = x == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_x;
20+
align_y = y == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_y;
21+
22+
dialog_message_set_text(ctx->dialog_message, text, x, y, align_x, align_y);
23+
}
24+
25+
void mp_flipper_dialog_message_set_header(
26+
const char* text,
27+
uint8_t x,
28+
uint8_t y,
29+
uint8_t h,
30+
uint8_t v) {
31+
mp_flipper_context_t* ctx = mp_flipper_context;
32+
33+
Align align_x = x == MP_FLIPPER_ALIGN_BEGIN ? AlignLeft : AlignRight;
34+
Align align_y = y == MP_FLIPPER_ALIGN_BEGIN ? AlignTop : AlignBottom;
35+
36+
align_x = x == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_x;
37+
align_y = y == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_y;
38+
39+
dialog_message_set_header(ctx->dialog_message, text, x, y, align_x, align_y);
40+
}
41+
42+
void mp_flipper_dialog_message_set_button(const char* text, uint8_t button) {
43+
mp_flipper_context_t* ctx = mp_flipper_context;
44+
45+
// left button
46+
if(button == MP_FLIPPER_INPUT_BUTTON_LEFT) {
47+
ctx->dialog_message_button_left = text;
48+
}
49+
// center button
50+
else if(button == MP_FLIPPER_INPUT_BUTTON_OK) {
51+
ctx->dialog_message_button_center = text;
52+
}
53+
// right button
54+
else if(button == MP_FLIPPER_INPUT_BUTTON_RIGHT) {
55+
ctx->dialog_message_button_right = text;
56+
}
57+
58+
dialog_message_set_buttons(
59+
ctx->dialog_message,
60+
ctx->dialog_message_button_left,
61+
ctx->dialog_message_button_center,
62+
ctx->dialog_message_button_right);
63+
}
64+
65+
uint8_t mp_flipper_dialog_message_show() {
66+
mp_flipper_context_t* ctx = mp_flipper_context;
67+
68+
gui_direct_draw_release(ctx->gui);
69+
70+
DialogsApp* dialog = furi_record_open(RECORD_DIALOGS);
71+
72+
uint8_t button = dialog_message_show(dialog, ctx->dialog_message);
73+
74+
furi_record_close(RECORD_DIALOGS);
75+
76+
ctx->canvas = gui_direct_draw_acquire(ctx->gui);
77+
78+
switch(button) {
79+
case DialogMessageButtonLeft:
80+
return MP_FLIPPER_INPUT_BUTTON_LEFT;
81+
case DialogMessageButtonCenter:
82+
return MP_FLIPPER_INPUT_BUTTON_OK;
83+
case DialogMessageButtonRight:
84+
return MP_FLIPPER_INPUT_BUTTON_RIGHT;
85+
case DialogMessageButtonBack:
86+
default:
87+
return MP_FLIPPER_INPUT_BUTTON_BACK;
88+
}
89+
}
90+
91+
void mp_flipper_dialog_message_clear() {
92+
mp_flipper_context_t* ctx = mp_flipper_context;
93+
94+
dialog_message_free(ctx->dialog_message);
95+
96+
ctx->dialog_message = dialog_message_alloc();
97+
98+
ctx->dialog_message_button_left = NULL;
99+
ctx->dialog_message_button_center = NULL;
100+
ctx->dialog_message_button_right = NULL;
101+
}

lib/micropython-port/mp_flipper_runtime.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ void* mp_flipper_context_alloc() {
7979

8080
ctx->canvas = gui_direct_draw_acquire(ctx->gui);
8181

82+
ctx->dialog_message = dialog_message_alloc();
83+
ctx->dialog_message_button_left = NULL;
84+
ctx->dialog_message_button_center = NULL;
85+
ctx->dialog_message_button_right = NULL;
86+
8287
return ctx;
8388
}
8489

@@ -93,6 +98,8 @@ void mp_flipper_context_free(void* context) {
9398

9499
view_port_free(ctx->view_port);
95100

101+
dialog_message_free(ctx->dialog_message);
102+
96103
furi_record_close(RECORD_GUI);
97104
furi_record_close(RECORD_INPUT_EVENTS);
98105

0 commit comments

Comments
 (0)