mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
[FL-3743] SubGhz: UI update (#3352)
* [FL-3743]SubGhz: screen refactoring * SubGhz: fix syntax * SubGhz: gui * SubGhz: add animation icon ant in read_info scene * SubGhz: up speed animation icon Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
@@ -251,9 +251,9 @@ void subghz_view_receiver_draw(Canvas* canvas, SubGhzViewReceiverModel* model) {
|
||||
}
|
||||
|
||||
if(model->device_type == SubGhzRadioDeviceTypeInternal) {
|
||||
canvas_draw_icon(canvas, 108, 0, &I_Internal_antenna_20x12);
|
||||
canvas_draw_icon(canvas, 109, 0, &I_Internal_ant_1_9x11);
|
||||
} else {
|
||||
canvas_draw_icon(canvas, 108, 0, &I_External_antenna_20x12);
|
||||
canvas_draw_icon(canvas, 109, 0, &I_External_ant_1_9x11);
|
||||
}
|
||||
|
||||
subghz_view_rssi_draw(canvas, model);
|
||||
|
||||
@@ -178,7 +178,7 @@ void subghz_frequency_analyzer_draw(Canvas* canvas, SubGhzFrequencyAnalyzerModel
|
||||
subghz_frequency_analyzer_log_frequency_draw(canvas, model);
|
||||
} else {
|
||||
canvas_draw_str(canvas, 0, 8, "Frequency Analyzer");
|
||||
canvas_draw_icon(canvas, 108, 0, &I_Internal_antenna_20x12);
|
||||
canvas_draw_icon(canvas, 109, 0, &I_Internal_ant_1_9x11);
|
||||
canvas_draw_str(canvas, 0, 64, "RSSI");
|
||||
subghz_frequency_analyzer_draw_rssi(canvas, model->rssi, 20, 64);
|
||||
|
||||
|
||||
@@ -294,9 +294,9 @@ void subghz_read_raw_draw(Canvas* canvas, SubGhzReadRAWModel* model) {
|
||||
canvas, 106, 2, AlignRight, AlignTop, furi_string_get_cstr(model->sample_write));
|
||||
|
||||
if(model->device_type == SubGhzRadioDeviceTypeInternal) {
|
||||
canvas_draw_icon(canvas, 108, 0, &I_Internal_antenna_20x12);
|
||||
canvas_draw_icon(canvas, 109, 0, &I_Internal_ant_1_9x11);
|
||||
} else {
|
||||
canvas_draw_icon(canvas, 108, 0, &I_External_antenna_20x12);
|
||||
canvas_draw_icon(canvas, 109, 0, &I_External_ant_1_9x11);
|
||||
}
|
||||
canvas_draw_line(canvas, 0, 14, 115, 14);
|
||||
canvas_draw_line(canvas, 0, 48, 115, 48);
|
||||
|
||||
@@ -16,6 +16,9 @@ typedef struct {
|
||||
FuriString* key_str;
|
||||
bool show_button;
|
||||
SubGhzRadioDeviceType device_type;
|
||||
SubGhzViewTransmitterModelType model_type;
|
||||
IconAnimation* icon_int_ant;
|
||||
IconAnimation* icon_ext_ant;
|
||||
} SubGhzViewTransmitterModel;
|
||||
|
||||
void subghz_view_transmitter_set_callback(
|
||||
@@ -58,6 +61,17 @@ void subghz_view_transmitter_set_radio_device_type(
|
||||
true);
|
||||
}
|
||||
|
||||
void subghz_view_transmitter_set_model_type(
|
||||
SubGhzViewTransmitter* subghz_transmitter,
|
||||
SubGhzViewTransmitterModelType model_type) {
|
||||
furi_assert(subghz_transmitter);
|
||||
with_view_model(
|
||||
subghz_transmitter->view,
|
||||
SubGhzViewTransmitterModel * model,
|
||||
{ model->model_type = model_type; },
|
||||
true);
|
||||
}
|
||||
|
||||
static void subghz_view_transmitter_button_right(Canvas* canvas, const char* str) {
|
||||
const uint8_t button_height = 12;
|
||||
const uint8_t vertical_offset = 3;
|
||||
@@ -100,13 +114,21 @@ void subghz_view_transmitter_draw(Canvas* canvas, SubGhzViewTransmitterModel* mo
|
||||
canvas, 0, 0, AlignLeft, AlignTop, furi_string_get_cstr(model->key_str));
|
||||
canvas_draw_str(canvas, 78, 7, furi_string_get_cstr(model->frequency_str));
|
||||
canvas_draw_str(canvas, 113, 7, furi_string_get_cstr(model->preset_str));
|
||||
|
||||
if(model->show_button) {
|
||||
if(model->device_type == SubGhzRadioDeviceTypeInternal) {
|
||||
canvas_draw_icon(canvas, 108, 39, &I_Internal_antenna_20x12);
|
||||
if(model->model_type == SubGhzViewTransmitterModelTypeInfo) {
|
||||
elements_button_center(canvas, "Send");
|
||||
elements_button_right(canvas, "Save");
|
||||
} else {
|
||||
canvas_draw_icon(canvas, 108, 39, &I_External_antenna_20x12);
|
||||
//default type SubGhzViewTransmitterModelTypeTx
|
||||
subghz_view_transmitter_button_right(canvas, "Send");
|
||||
}
|
||||
|
||||
if(model->device_type == SubGhzRadioDeviceTypeInternal) {
|
||||
canvas_draw_icon_animation(canvas, 109, 40, model->icon_int_ant);
|
||||
} else {
|
||||
canvas_draw_icon_animation(canvas, 109, 40, model->icon_ext_ant);
|
||||
}
|
||||
subghz_view_transmitter_button_right(canvas, "Send");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,13 +162,32 @@ bool subghz_view_transmitter_input(InputEvent* event, void* context) {
|
||||
true);
|
||||
|
||||
if(can_be_sent && event->key == InputKeyOk && event->type == InputTypePress) {
|
||||
with_view_model(
|
||||
subghz_transmitter->view,
|
||||
SubGhzViewTransmitterModel * model,
|
||||
{
|
||||
icon_animation_start(model->icon_int_ant);
|
||||
icon_animation_start(model->icon_ext_ant);
|
||||
},
|
||||
false);
|
||||
subghz_transmitter->callback(
|
||||
SubGhzCustomEventViewTransmitterSendStart, subghz_transmitter->context);
|
||||
return true;
|
||||
} else if(can_be_sent && event->key == InputKeyOk && event->type == InputTypeRelease) {
|
||||
with_view_model(
|
||||
subghz_transmitter->view,
|
||||
SubGhzViewTransmitterModel * model,
|
||||
{
|
||||
icon_animation_stop(model->icon_int_ant);
|
||||
icon_animation_stop(model->icon_ext_ant);
|
||||
},
|
||||
false);
|
||||
subghz_transmitter->callback(
|
||||
SubGhzCustomEventViewTransmitterSendStop, subghz_transmitter->context);
|
||||
return true;
|
||||
} else if(can_be_sent && event->key == InputKeyRight && event->type == InputTypeShort) {
|
||||
subghz_transmitter->callback(
|
||||
SubGhzCustomEventViewTransmitterSendSave, subghz_transmitter->context);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -181,6 +222,11 @@ SubGhzViewTransmitter* subghz_view_transmitter_alloc() {
|
||||
model->frequency_str = furi_string_alloc();
|
||||
model->preset_str = furi_string_alloc();
|
||||
model->key_str = furi_string_alloc();
|
||||
model->model_type = SubGhzViewTransmitterModelTypeTx;
|
||||
model->icon_int_ant = icon_animation_alloc(&A_SubGhz_Internal_ant);
|
||||
view_tie_icon_animation(subghz_transmitter->view, model->icon_int_ant);
|
||||
model->icon_ext_ant = icon_animation_alloc(&A_SubGhz_External_ant);
|
||||
view_tie_icon_animation(subghz_transmitter->view, model->icon_ext_ant);
|
||||
},
|
||||
true);
|
||||
return subghz_transmitter;
|
||||
@@ -196,6 +242,8 @@ void subghz_view_transmitter_free(SubGhzViewTransmitter* subghz_transmitter) {
|
||||
furi_string_free(model->frequency_str);
|
||||
furi_string_free(model->preset_str);
|
||||
furi_string_free(model->key_str);
|
||||
icon_animation_free(model->icon_int_ant);
|
||||
icon_animation_free(model->icon_ext_ant);
|
||||
},
|
||||
true);
|
||||
view_free(subghz_transmitter->view);
|
||||
|
||||
@@ -6,6 +6,11 @@
|
||||
|
||||
typedef struct SubGhzViewTransmitter SubGhzViewTransmitter;
|
||||
|
||||
typedef enum {
|
||||
SubGhzViewTransmitterModelTypeTx,
|
||||
SubGhzViewTransmitterModelTypeInfo,
|
||||
} SubGhzViewTransmitterModelType;
|
||||
|
||||
typedef void (*SubGhzViewTransmitterCallback)(SubGhzCustomEvent event, void* context);
|
||||
|
||||
void subghz_view_transmitter_set_callback(
|
||||
@@ -17,6 +22,10 @@ void subghz_view_transmitter_set_radio_device_type(
|
||||
SubGhzViewTransmitter* subghz_transmitter,
|
||||
SubGhzRadioDeviceType device_type);
|
||||
|
||||
void subghz_view_transmitter_set_model_type(
|
||||
SubGhzViewTransmitter* subghz_transmitter,
|
||||
SubGhzViewTransmitterModelType model_type);
|
||||
|
||||
SubGhzViewTransmitter* subghz_view_transmitter_alloc();
|
||||
|
||||
void subghz_view_transmitter_free(SubGhzViewTransmitter* subghz_transmitter);
|
||||
|
||||
Reference in New Issue
Block a user