[FL-2475] Text Box add three dots trim option (#1136)
* introduce text box debug application * text box: add strip to dots option * applications: update text box usage Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
parent
57312961e8
commit
9351076c89
@ -43,6 +43,7 @@ extern int32_t usb_test_app(void* p);
|
|||||||
extern int32_t vibro_test_app(void* p);
|
extern int32_t vibro_test_app(void* p);
|
||||||
extern int32_t bt_hid_app(void* p);
|
extern int32_t bt_hid_app(void* p);
|
||||||
extern int32_t battery_test_app(void* p);
|
extern int32_t battery_test_app(void* p);
|
||||||
|
extern int32_t text_box_test_app(void* p);
|
||||||
|
|
||||||
// Plugins
|
// Plugins
|
||||||
extern int32_t music_player_app(void* p);
|
extern int32_t music_player_app(void* p);
|
||||||
@ -304,6 +305,10 @@ const FlipperApplication FLIPPER_DEBUG_APPS[] = {
|
|||||||
#ifdef APP_BATTERY_TEST
|
#ifdef APP_BATTERY_TEST
|
||||||
{.app = battery_test_app, .name = "Battery Test", .stack_size = 1024, .icon = NULL},
|
{.app = battery_test_app, .name = "Battery Test", .stack_size = 1024, .icon = NULL},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef APP_TEXT_BOX_TEST
|
||||||
|
{.app = text_box_test_app, .name = "Text Box Test", .stack_size = 1024, .icon = NULL},
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
const size_t FLIPPER_DEBUG_APPS_COUNT = COUNT_OF(FLIPPER_DEBUG_APPS);
|
const size_t FLIPPER_DEBUG_APPS_COUNT = COUNT_OF(FLIPPER_DEBUG_APPS);
|
||||||
|
@ -165,6 +165,12 @@ CFLAGS += -DAPP_DISPLAY_TEST
|
|||||||
SRV_GUI = 1
|
SRV_GUI = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
APP_TEXT_BOX_TEST ?= 0
|
||||||
|
ifeq ($(APP_TEXT_BOX_TEST), 1)
|
||||||
|
CFLAGS += -DAPP_TEXT_BOX_TEST
|
||||||
|
SRV_GUI = 1
|
||||||
|
endif
|
||||||
|
|
||||||
APP_BATTERY_TEST ?= 0
|
APP_BATTERY_TEST ?= 0
|
||||||
ifeq ($(APP_BATTERY_TEST), 1)
|
ifeq ($(APP_BATTERY_TEST), 1)
|
||||||
CFLAGS += -DAPP_BATTERY_TEST
|
CFLAGS += -DAPP_BATTERY_TEST
|
||||||
|
@ -33,7 +33,8 @@ void archive_scene_delete_on_enter(void* context) {
|
|||||||
|
|
||||||
char delete_str[64];
|
char delete_str[64];
|
||||||
snprintf(delete_str, sizeof(delete_str), "\e#Delete %s?\e#", name);
|
snprintf(delete_str, sizeof(delete_str), "\e#Delete %s?\e#", name);
|
||||||
widget_add_text_box_element(app->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, delete_str);
|
widget_add_text_box_element(
|
||||||
|
app->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, delete_str, false);
|
||||||
|
|
||||||
view_dispatcher_switch_to_view(app->view_dispatcher, ArchiveViewWidget);
|
view_dispatcher_switch_to_view(app->view_dispatcher, ArchiveViewWidget);
|
||||||
}
|
}
|
||||||
|
126
applications/debug_tools/text_box_test.c
Normal file
126
applications/debug_tools/text_box_test.c
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
#include <furi.h>
|
||||||
|
#include <gui/gui.h>
|
||||||
|
#include <input/input.h>
|
||||||
|
#include <gui/elements.h>
|
||||||
|
|
||||||
|
#define TAG "TextBoxTest"
|
||||||
|
|
||||||
|
static void text_box_center_top_secondary_128x22(Canvas* canvas) {
|
||||||
|
canvas_draw_frame(canvas, 0, 0, 128, 22);
|
||||||
|
elements_text_box(canvas, 0, 0, 128, 22, AlignCenter, AlignTop, "secondary font test", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void text_box_right_bottom_bold_128x22(Canvas* canvas) {
|
||||||
|
canvas_draw_frame(canvas, 0, 0, 128, 22);
|
||||||
|
elements_text_box(
|
||||||
|
canvas, 0, 0, 128, 22, AlignRight, AlignBottom, "\e#Bold font test\e#", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void text_box_left_center_mixed_80x50(Canvas* canvas) {
|
||||||
|
canvas_draw_frame(canvas, 0, 0, 80, 50);
|
||||||
|
elements_text_box(
|
||||||
|
canvas,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
80,
|
||||||
|
50,
|
||||||
|
AlignLeft,
|
||||||
|
AlignCenter,
|
||||||
|
"\e#Never\e# gonna give you up\n\e!Never\e! gonna let you down",
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void text_box_center_center_secondary_110x44(Canvas* canvas) {
|
||||||
|
canvas_draw_frame(canvas, 4, 20, 110, 30);
|
||||||
|
elements_text_box(
|
||||||
|
canvas,
|
||||||
|
4,
|
||||||
|
20,
|
||||||
|
110,
|
||||||
|
30,
|
||||||
|
AlignCenter,
|
||||||
|
AlignCenter,
|
||||||
|
"Loooooooooooooo0000000ooong file name from happy 100500 Flipper 0wners",
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void (*text_box_test_render[])(Canvas* canvas) = {
|
||||||
|
text_box_center_top_secondary_128x22,
|
||||||
|
text_box_right_bottom_bold_128x22,
|
||||||
|
text_box_left_center_mixed_80x50,
|
||||||
|
text_box_center_center_secondary_110x44,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t idx;
|
||||||
|
} TextBoxTestState;
|
||||||
|
|
||||||
|
static void text_box_test_render_callback(Canvas* canvas, void* ctx) {
|
||||||
|
TextBoxTestState* state = acquire_mutex((ValueMutex*)ctx, 25);
|
||||||
|
canvas_clear(canvas);
|
||||||
|
|
||||||
|
text_box_test_render[state->idx](canvas);
|
||||||
|
|
||||||
|
release_mutex((ValueMutex*)ctx, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void text_box_test_input_callback(InputEvent* input_event, void* ctx) {
|
||||||
|
osMessageQueueId_t event_queue = ctx;
|
||||||
|
osMessageQueuePut(event_queue, input_event, 0, osWaitForever);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t text_box_test_app(void* p) {
|
||||||
|
osMessageQueueId_t event_queue = osMessageQueueNew(32, sizeof(InputEvent), NULL);
|
||||||
|
furi_check(event_queue);
|
||||||
|
|
||||||
|
TextBoxTestState _state = {.idx = 0};
|
||||||
|
|
||||||
|
ValueMutex state_mutex;
|
||||||
|
if(!init_mutex(&state_mutex, &_state, sizeof(TextBoxTestState))) {
|
||||||
|
FURI_LOG_E(TAG, "Cannot create mutex");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewPort* view_port = view_port_alloc();
|
||||||
|
|
||||||
|
view_port_draw_callback_set(view_port, text_box_test_render_callback, &state_mutex);
|
||||||
|
view_port_input_callback_set(view_port, text_box_test_input_callback, event_queue);
|
||||||
|
|
||||||
|
// Open GUI and register view_port
|
||||||
|
Gui* gui = furi_record_open("gui");
|
||||||
|
gui_add_view_port(gui, view_port, GuiLayerFullscreen);
|
||||||
|
|
||||||
|
uint32_t test_renders_num = SIZEOF_ARRAY(text_box_test_render);
|
||||||
|
InputEvent event;
|
||||||
|
while(osMessageQueueGet(event_queue, &event, NULL, osWaitForever) == osOK) {
|
||||||
|
TextBoxTestState* state = acquire_mutex_block(&state_mutex);
|
||||||
|
|
||||||
|
if(event.type == InputTypeShort) {
|
||||||
|
if(event.key == InputKeyRight) {
|
||||||
|
if(state->idx < test_renders_num - 1) {
|
||||||
|
state->idx++;
|
||||||
|
}
|
||||||
|
} else if(event.key == InputKeyLeft) {
|
||||||
|
if(state->idx > 0) {
|
||||||
|
state->idx--;
|
||||||
|
}
|
||||||
|
} else if(event.key == InputKeyBack) {
|
||||||
|
release_mutex(&state_mutex, state);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
release_mutex(&state_mutex, state);
|
||||||
|
view_port_update(view_port);
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove & free all stuff created by app
|
||||||
|
gui_remove_view_port(gui, view_port);
|
||||||
|
view_port_free(view_port);
|
||||||
|
osMessageQueueDelete(event_queue);
|
||||||
|
delete_mutex(&state_mutex);
|
||||||
|
|
||||||
|
furi_record_close("gui");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -547,7 +547,8 @@ void elements_text_box(
|
|||||||
uint8_t height,
|
uint8_t height,
|
||||||
Align horizontal,
|
Align horizontal,
|
||||||
Align vertical,
|
Align vertical,
|
||||||
const char* text) {
|
const char* text,
|
||||||
|
bool strip_to_dots) {
|
||||||
furi_assert(canvas);
|
furi_assert(canvas);
|
||||||
|
|
||||||
ElementTextBoxLine line[ELEMENTS_MAX_LINES_NUM];
|
ElementTextBoxLine line[ELEMENTS_MAX_LINES_NUM];
|
||||||
@ -571,6 +572,7 @@ void elements_text_box(
|
|||||||
uint8_t total_height_default = 0;
|
uint8_t total_height_default = 0;
|
||||||
uint16_t i = 0;
|
uint16_t i = 0;
|
||||||
bool full_text_processed = false;
|
bool full_text_processed = false;
|
||||||
|
uint16_t dots_width = canvas_string_width(canvas, "...");
|
||||||
|
|
||||||
canvas_set_font(canvas, FontSecondary);
|
canvas_set_font(canvas, FontSecondary);
|
||||||
|
|
||||||
@ -663,31 +665,29 @@ void elements_text_box(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set vertical alignment for all lines
|
// Set vertical alignment for all lines
|
||||||
if(full_text_processed) {
|
if(total_height_default < height) {
|
||||||
if(total_height_default < height) {
|
if(vertical == AlignTop) {
|
||||||
if(vertical == AlignTop) {
|
|
||||||
line[0].y = y + line[0].height;
|
|
||||||
} else if(vertical == AlignCenter) {
|
|
||||||
line[0].y = y + line[0].height + (height - total_height_default) / 2;
|
|
||||||
} else if(vertical == AlignBottom) {
|
|
||||||
line[0].y = y + line[0].height + (height - total_height_default);
|
|
||||||
}
|
|
||||||
if(line_num > 1) {
|
|
||||||
for(uint8_t i = 1; i < line_num; i++) {
|
|
||||||
line[i].y = line[i - 1].y + line[i - 1].leading_default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if(line_num > 1) {
|
|
||||||
uint8_t free_pixel_num = height - total_height_min;
|
|
||||||
uint8_t fill_pixel = 0;
|
|
||||||
uint8_t j = 1;
|
|
||||||
line[0].y = y + line[0].height;
|
line[0].y = y + line[0].height;
|
||||||
while(fill_pixel < free_pixel_num) {
|
} else if(vertical == AlignCenter) {
|
||||||
line[j].y = line[j - 1].y + line[j - 1].leading_min + 1;
|
line[0].y = y + line[0].height + (height - total_height_default) / 2;
|
||||||
fill_pixel++;
|
} else if(vertical == AlignBottom) {
|
||||||
j = j % (line_num - 1) + 1;
|
line[0].y = y + line[0].height + (height - total_height_default);
|
||||||
|
}
|
||||||
|
if(line_num > 1) {
|
||||||
|
for(uint8_t i = 1; i < line_num; i++) {
|
||||||
|
line[i].y = line[i - 1].y + line[i - 1].leading_default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if(line_num > 1) {
|
||||||
|
uint8_t free_pixel_num = height - total_height_min;
|
||||||
|
uint8_t fill_pixel = 0;
|
||||||
|
uint8_t j = 1;
|
||||||
|
line[0].y = y + line[0].height;
|
||||||
|
while(fill_pixel < free_pixel_num) {
|
||||||
|
line[j].y = line[j - 1].y + line[j - 1].leading_min + 1;
|
||||||
|
fill_pixel++;
|
||||||
|
j = j % (line_num - 1) + 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw line by line
|
// Draw line by line
|
||||||
@ -733,10 +733,17 @@ void elements_text_box(
|
|||||||
canvas_draw_glyph(canvas, line[i].x, line[i].y, line[i].text[j]);
|
canvas_draw_glyph(canvas, line[i].x, line[i].y, line[i].text[j]);
|
||||||
canvas_invert_color(canvas);
|
canvas_invert_color(canvas);
|
||||||
} else {
|
} else {
|
||||||
|
if((i == line_num - 1) && strip_to_dots) {
|
||||||
|
uint8_t next_symbol_width = canvas_glyph_width(canvas, line[i].text[j]);
|
||||||
|
if(line[i].x + next_symbol_width + dots_width > x + width) {
|
||||||
|
canvas_draw_str(canvas, line[i].x, line[i].y, "...");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
canvas_draw_glyph(canvas, line[i].x, line[i].y, line[i].text[j]);
|
canvas_draw_glyph(canvas, line[i].x, line[i].y, line[i].text[j]);
|
||||||
}
|
}
|
||||||
line[i].x += canvas_glyph_width(canvas, line[i].text[j]);
|
line[i].x += canvas_glyph_width(canvas, line[i].text[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
canvas_set_font(canvas, FontSecondary);
|
canvas_set_font(canvas, FontSecondary);
|
||||||
}
|
}
|
||||||
|
@ -194,17 +194,18 @@ void elements_string_fit_width(Canvas* canvas, string_t string, uint8_t width);
|
|||||||
|
|
||||||
/** Draw text box element
|
/** Draw text box element
|
||||||
*
|
*
|
||||||
* @param canvas Canvas instance
|
* @param canvas Canvas instance
|
||||||
* @param x x coordinate
|
* @param x x coordinate
|
||||||
* @param y y coordinate
|
* @param y y coordinate
|
||||||
* @param width width to fit text
|
* @param width width to fit text
|
||||||
* @param height height to fit text
|
* @param height height to fit text
|
||||||
* @param horizontal Align instance
|
* @param horizontal Align instance
|
||||||
* @param vertical Align instance
|
* @param vertical Align instance
|
||||||
* @param[in] text Formatted text. The following formats are available:
|
* @param[in] text Formatted text. The following formats are available:
|
||||||
* "\e#Bold text\e#" - bold font is used
|
* "\e#Bold text\e#" - bold font is used
|
||||||
* "\e*Monospaced text\e*" - monospaced font is used
|
* "\e*Monospaced text\e*" - monospaced font is used
|
||||||
* "\e#Inversed text\e#" - white text on black background
|
* "\e#Inversed text\e#" - white text on black background
|
||||||
|
* @param strip_to_dots Strip text to ... if does not fit to width
|
||||||
*/
|
*/
|
||||||
void elements_text_box(
|
void elements_text_box(
|
||||||
Canvas* canvas,
|
Canvas* canvas,
|
||||||
@ -214,7 +215,8 @@ void elements_text_box(
|
|||||||
uint8_t height,
|
uint8_t height,
|
||||||
Align horizontal,
|
Align horizontal,
|
||||||
Align vertical,
|
Align vertical,
|
||||||
const char* text);
|
const char* text,
|
||||||
|
bool strip_to_dots);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
7
applications/gui/modules/widget.c
Executable file → Normal file
7
applications/gui/modules/widget.c
Executable file → Normal file
@ -154,10 +154,11 @@ void widget_add_text_box_element(
|
|||||||
uint8_t height,
|
uint8_t height,
|
||||||
Align horizontal,
|
Align horizontal,
|
||||||
Align vertical,
|
Align vertical,
|
||||||
const char* text) {
|
const char* text,
|
||||||
|
bool strip_to_dots) {
|
||||||
furi_assert(widget);
|
furi_assert(widget);
|
||||||
WidgetElement* text_box_element =
|
WidgetElement* text_box_element = widget_element_text_box_create(
|
||||||
widget_element_text_box_create(x, y, width, height, horizontal, vertical, text);
|
x, y, width, height, horizontal, vertical, text, strip_to_dots);
|
||||||
widget_add_element(widget, text_box_element);
|
widget_add_element(widget, text_box_element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,17 +81,18 @@ void widget_add_string_element(
|
|||||||
|
|
||||||
/** Add Text Box Element
|
/** Add Text Box Element
|
||||||
*
|
*
|
||||||
* @param widget Widget instance
|
* @param widget Widget instance
|
||||||
* @param x x coordinate
|
* @param x x coordinate
|
||||||
* @param y y coordinate
|
* @param y y coordinate
|
||||||
* @param width width to fit text
|
* @param width width to fit text
|
||||||
* @param height height to fit text
|
* @param height height to fit text
|
||||||
* @param horizontal Align instance
|
* @param horizontal Align instance
|
||||||
* @param vertical Align instance
|
* @param vertical Align instance
|
||||||
* @param[in] text Formatted text. The following formats are available:
|
* @param[in] text Formatted text. The following formats are available:
|
||||||
* "\e#Bold text\e#" - bold font is used
|
* "\e#Bold text\e#" - bold font is used
|
||||||
* "\e*Monospaced text\e*" - monospaced font is used
|
* "\e*Monospaced text\e*" - monospaced font is used
|
||||||
* "\e#Inversed text\e#" - white text on black background
|
* "\e#Inversed text\e#" - white text on black background
|
||||||
|
* @param strip_to_dots Strip text to ... if does not fit to width
|
||||||
*/
|
*/
|
||||||
void widget_add_text_box_element(
|
void widget_add_text_box_element(
|
||||||
Widget* widget,
|
Widget* widget,
|
||||||
@ -101,7 +102,8 @@ void widget_add_text_box_element(
|
|||||||
uint8_t height,
|
uint8_t height,
|
||||||
Align horizontal,
|
Align horizontal,
|
||||||
Align vertical,
|
Align vertical,
|
||||||
const char* text);
|
const char* text,
|
||||||
|
bool strip_to_dots);
|
||||||
|
|
||||||
/** Add Button Element
|
/** Add Button Element
|
||||||
*
|
*
|
||||||
|
@ -60,7 +60,8 @@ WidgetElement* widget_element_text_box_create(
|
|||||||
uint8_t height,
|
uint8_t height,
|
||||||
Align horizontal,
|
Align horizontal,
|
||||||
Align vertical,
|
Align vertical,
|
||||||
const char* text);
|
const char* text,
|
||||||
|
bool strip_to_dots);
|
||||||
|
|
||||||
/** Create button element */
|
/** Create button element */
|
||||||
WidgetElement* widget_element_button_create(
|
WidgetElement* widget_element_button_create(
|
||||||
|
@ -10,6 +10,7 @@ typedef struct {
|
|||||||
Align horizontal;
|
Align horizontal;
|
||||||
Align vertical;
|
Align vertical;
|
||||||
string_t text;
|
string_t text;
|
||||||
|
bool strip_to_dots;
|
||||||
} GuiTextBoxModel;
|
} GuiTextBoxModel;
|
||||||
|
|
||||||
static void gui_text_box_draw(Canvas* canvas, WidgetElement* element) {
|
static void gui_text_box_draw(Canvas* canvas, WidgetElement* element) {
|
||||||
@ -26,7 +27,8 @@ static void gui_text_box_draw(Canvas* canvas, WidgetElement* element) {
|
|||||||
model->height,
|
model->height,
|
||||||
model->horizontal,
|
model->horizontal,
|
||||||
model->vertical,
|
model->vertical,
|
||||||
string_get_cstr(model->text));
|
string_get_cstr(model->text),
|
||||||
|
model->strip_to_dots);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +48,8 @@ WidgetElement* widget_element_text_box_create(
|
|||||||
uint8_t height,
|
uint8_t height,
|
||||||
Align horizontal,
|
Align horizontal,
|
||||||
Align vertical,
|
Align vertical,
|
||||||
const char* text) {
|
const char* text,
|
||||||
|
bool strip_to_dots) {
|
||||||
furi_assert(text);
|
furi_assert(text);
|
||||||
|
|
||||||
// Allocate and init model
|
// Allocate and init model
|
||||||
@ -58,6 +61,7 @@ WidgetElement* widget_element_text_box_create(
|
|||||||
model->horizontal = horizontal;
|
model->horizontal = horizontal;
|
||||||
model->vertical = vertical;
|
model->vertical = vertical;
|
||||||
string_init_set_str(model->text, text);
|
string_init_set_str(model->text, text);
|
||||||
|
model->strip_to_dots = strip_to_dots;
|
||||||
|
|
||||||
// Allocate and init Element
|
// Allocate and init Element
|
||||||
WidgetElement* gui_string = malloc(sizeof(WidgetElement));
|
WidgetElement* gui_string = malloc(sizeof(WidgetElement));
|
||||||
|
@ -21,7 +21,7 @@ void iButtonSceneDeleteConfirm::on_enter(iButtonApp* app) {
|
|||||||
|
|
||||||
app->set_text_store("\e#Delete %s?\e#", ibutton_key_get_name_p(key));
|
app->set_text_store("\e#Delete %s?\e#", ibutton_key_get_name_p(key));
|
||||||
widget_add_text_box_element(
|
widget_add_text_box_element(
|
||||||
widget, 0, 0, 128, 27, AlignCenter, AlignCenter, app->get_text_store());
|
widget, 0, 0, 128, 27, AlignCenter, AlignCenter, app->get_text_store(), false);
|
||||||
widget_add_button_element(widget, GuiButtonTypeLeft, "Cancel", widget_callback, app);
|
widget_add_button_element(widget, GuiButtonTypeLeft, "Cancel", widget_callback, app);
|
||||||
widget_add_button_element(widget, GuiButtonTypeRight, "Delete", widget_callback, app);
|
widget_add_button_element(widget, GuiButtonTypeRight, "Delete", widget_callback, app);
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ void iButtonSceneInfo::on_enter(iButtonApp* app) {
|
|||||||
|
|
||||||
app->set_text_store("%s", ibutton_key_get_name_p(key));
|
app->set_text_store("%s", ibutton_key_get_name_p(key));
|
||||||
widget_add_text_box_element(
|
widget_add_text_box_element(
|
||||||
widget, 0, 0, 128, 28, AlignCenter, AlignCenter, app->get_text_store());
|
widget, 0, 0, 128, 28, AlignCenter, AlignCenter, app->get_text_store(), false);
|
||||||
|
|
||||||
switch(ibutton_key_get_type(key)) {
|
switch(ibutton_key_get_type(key)) {
|
||||||
case iButtonKeyDS1990:
|
case iButtonKeyDS1990:
|
||||||
|
@ -13,7 +13,8 @@ void nfc_scene_delete_on_enter(void* context) {
|
|||||||
// Setup Custom Widget view
|
// Setup Custom Widget view
|
||||||
char temp_str[64];
|
char temp_str[64];
|
||||||
snprintf(temp_str, sizeof(temp_str), "\e#Delete %s?\e#", nfc->dev->dev_name);
|
snprintf(temp_str, sizeof(temp_str), "\e#Delete %s?\e#", nfc->dev->dev_name);
|
||||||
widget_add_text_box_element(nfc->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, temp_str);
|
widget_add_text_box_element(
|
||||||
|
nfc->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, temp_str, false);
|
||||||
widget_add_button_element(
|
widget_add_button_element(
|
||||||
nfc->widget, GuiButtonTypeLeft, "Back", nfc_scene_delete_widget_callback, nfc);
|
nfc->widget, GuiButtonTypeLeft, "Back", nfc_scene_delete_widget_callback, nfc);
|
||||||
widget_add_button_element(
|
widget_add_button_element(
|
||||||
|
@ -36,7 +36,7 @@ void nfc_scene_device_info_on_enter(void* context) {
|
|||||||
(nfc->dev->format == NfcDeviceSaveFormatBankCard);
|
(nfc->dev->format == NfcDeviceSaveFormatBankCard);
|
||||||
// Setup Custom Widget view
|
// Setup Custom Widget view
|
||||||
widget_add_text_box_element(
|
widget_add_text_box_element(
|
||||||
nfc->widget, 0, 0, 128, 22, AlignCenter, AlignTop, nfc->dev->dev_name);
|
nfc->widget, 0, 0, 128, 22, AlignCenter, AlignTop, nfc->dev->dev_name, false);
|
||||||
widget_add_button_element(
|
widget_add_button_element(
|
||||||
nfc->widget, GuiButtonTypeLeft, "Back", nfc_scene_device_info_widget_callback, nfc);
|
nfc->widget, GuiButtonTypeLeft, "Back", nfc_scene_device_info_widget_callback, nfc);
|
||||||
if(data_display_supported) {
|
if(data_display_supported) {
|
||||||
|
@ -47,7 +47,7 @@ static void nfc_scene_emulate_uid_widget_config(Nfc* nfc, bool data_received) {
|
|||||||
}
|
}
|
||||||
string_strim(info_str);
|
string_strim(info_str);
|
||||||
widget_add_text_box_element(
|
widget_add_text_box_element(
|
||||||
widget, 56, 43, 70, 21, AlignLeft, AlignTop, string_get_cstr(info_str));
|
widget, 56, 43, 70, 21, AlignLeft, AlignTop, string_get_cstr(info_str), true);
|
||||||
string_clear(info_str);
|
string_clear(info_str);
|
||||||
if(data_received) {
|
if(data_received) {
|
||||||
widget_add_button_element(
|
widget_add_button_element(
|
||||||
|
@ -24,7 +24,7 @@ void subghz_scene_delete_raw_on_enter(void* context) {
|
|||||||
char delete_str[64];
|
char delete_str[64];
|
||||||
snprintf(delete_str, sizeof(delete_str), "\e#Delete %s?\e#", subghz->file_name);
|
snprintf(delete_str, sizeof(delete_str), "\e#Delete %s?\e#", subghz->file_name);
|
||||||
widget_add_text_box_element(
|
widget_add_text_box_element(
|
||||||
subghz->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, delete_str);
|
subghz->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, delete_str, false);
|
||||||
|
|
||||||
widget_add_string_element(
|
widget_add_string_element(
|
||||||
subghz->widget, 38, 25, AlignLeft, AlignTop, FontSecondary, "RAW signal");
|
subghz->widget, 38, 25, AlignLeft, AlignTop, FontSecondary, "RAW signal");
|
||||||
|
@ -236,7 +236,15 @@ void subghz_read_raw_draw(Canvas* canvas, SubGhzReadRAWModel* model) {
|
|||||||
elements_button_center(canvas, "Send");
|
elements_button_center(canvas, "Send");
|
||||||
elements_button_right(canvas, "More");
|
elements_button_right(canvas, "More");
|
||||||
elements_text_box(
|
elements_text_box(
|
||||||
canvas, 4, 12, 110, 44, AlignCenter, AlignCenter, string_get_cstr(model->file_name));
|
canvas,
|
||||||
|
4,
|
||||||
|
12,
|
||||||
|
110,
|
||||||
|
44,
|
||||||
|
AlignCenter,
|
||||||
|
AlignCenter,
|
||||||
|
string_get_cstr(model->file_name),
|
||||||
|
true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SubGhzReadRAWStatusTX:
|
case SubGhzReadRAWStatusTX:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user