|
|
@@ -3,6 +3,11 @@
|
|
|
|
|
|
#include "app.h"
|
|
|
|
|
|
+/* =========================== Subview handling ================================
|
|
|
+ * Note that these are not the Flipper subviews, but the subview system
|
|
|
+ * implemented inside ProtoView.
|
|
|
+ * ========================================================================== */
|
|
|
+
|
|
|
/* Return the ID of the currently selected subview, of the current
|
|
|
* view. */
|
|
|
int get_current_subview(ProtoViewApp *app) {
|
|
|
@@ -41,6 +46,34 @@ bool process_subview_updown(ProtoViewApp *app, InputEvent input, int last_subvie
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+/* ============================= Text input ====================================
|
|
|
+ * Normally we just use our own private UI widgets. However for the text input
|
|
|
+ * widget, that is quite complex, visualizes a keyboard and must be standardized
|
|
|
+ * for user coherent experience, we use the one provided by the Flipper
|
|
|
+ * framework. The following two functions allow to show the keyboard to get
|
|
|
+ * text and later dismiss it.
|
|
|
+ * ========================================================================== */
|
|
|
+
|
|
|
+/* Show the keyboard, take the user input and store it into the specified
|
|
|
+ * 'buffer' of 'buflen' total bytes. When the user is done, the done_callback
|
|
|
+ * is called passing the application context to it. Such callback needs
|
|
|
+ * to do whatever it wants with the input buffer and dismissi the keyboard
|
|
|
+ * calling: dismiss_keyboard(app); */
|
|
|
+void show_keyboard(ProtoViewApp *app, char *buffer, uint32_t buflen,
|
|
|
+ void (*done_callback)(void*))
|
|
|
+{
|
|
|
+ app->show_text_input = true;
|
|
|
+ app->text_input_buffer = buffer;
|
|
|
+ app->text_input_buffer_len = buflen;
|
|
|
+ app->text_input_done_callback = done_callback;
|
|
|
+}
|
|
|
+
|
|
|
+void dismiss_keyboard(ProtoViewApp *app) {
|
|
|
+ view_dispatcher_stop(app->view_dispatcher);
|
|
|
+}
|
|
|
+
|
|
|
+/* =========================== Canvas extensions ============================ */
|
|
|
+
|
|
|
void canvas_draw_str_with_border(Canvas* canvas, uint8_t x, uint8_t y, const char* str, Color text_color, Color border_color)
|
|
|
{
|
|
|
struct {
|