| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #include "xremote_pause_set.h"
- struct XRemotePauseSet {
- View* view;
- XRemotePauseSetCallback callback;
- void* context;
- };
- typedef struct {
- int type;
- const char* name;
- int time;
- } XRemotePauseSetModel;
- static void xremote_pause_set_model_init(XRemotePauseSetModel* const model) {
- model->type = XRemoteRemoteItemTypePause;
- model->time = 1;
- }
- void xremote_pause_set_set_callback(
- XRemotePauseSet* instance,
- XRemotePauseSetCallback callback,
- void* context) {
- furi_assert(instance);
- furi_assert(callback);
- instance->callback = callback;
- instance->context = context;
- }
- void xremote_pause_set_draw(Canvas* canvas, XRemotePauseSetModel* model) {
- char seconds[14];
- snprintf(seconds, SECONDS_LENGHT, SECONDS_FORMAT, model->time);
- canvas_clear(canvas);
- canvas_set_color(canvas, ColorBlack);
- canvas_set_font(canvas, FontPrimary);
- canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "Pause duration");
- canvas_set_font(canvas, FontSecondary);
- canvas_draw_icon(canvas, 59, 22, &I_ButtonUp_10x5);
- canvas_draw_icon(canvas, 59, 42, &I_ButtonDown_10x5);
- canvas_draw_str_aligned(canvas, 64, 31, AlignCenter, AlignTop, seconds);
- elements_button_center(canvas, "Add");
- }
- bool xremote_pause_set_input(InputEvent* event, void* context) {
- furi_assert(context);
- XRemotePauseSet* instance = context;
- if(event->type == InputTypeRelease) {
- switch(event->key) {
- case InputKeyBack:
- instance->callback(XRemoteCustomEventPauseSetBack, instance->context);
- break;
- case InputKeyLeft:
- case InputKeyRight:
- break;
- case InputKeyUp:
- with_view_model(
- instance->view,
- XRemotePauseSetModel * model,
- {
- model->time++;
- if(model->time > 9) {
- model->time = 0;
- }
- },
- true);
- break;
- case InputKeyDown:
- with_view_model(
- instance->view,
- XRemotePauseSetModel * model,
- {
- model->time--;
- if(model->time < 0) {
- model->time = 9;
- }
- },
- true);
- break;
- case InputKeyOk:
- with_view_model(
- instance->view,
- XRemotePauseSetModel * model,
- {
- XRemote* app = instance->context;
- xremote_cross_remote_add_pause(app->cross_remote, model->time);
- },
- true);
- instance->callback(XRemoteCustomEventPauseSetOk, instance->context);
- break;
- case InputKeyMAX:
- break;
- }
- }
- return true;
- }
- XRemotePauseSet* xremote_pause_set_alloc() {
- XRemotePauseSet* instance = malloc(sizeof(XRemotePauseSet));
- instance->view = view_alloc();
- view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(XRemotePauseSetModel));
- view_set_context(instance->view, instance);
- view_set_draw_callback(instance->view, (ViewDrawCallback)xremote_pause_set_draw);
- view_set_enter_callback(instance->view, xremote_pause_set_enter);
- view_set_input_callback(instance->view, xremote_pause_set_input);
- with_view_model(
- instance->view,
- XRemotePauseSetModel * model,
- { xremote_pause_set_model_init(model); },
- true);
- return instance;
- }
- void xremote_pause_set_enter(void* context) {
- furi_assert(context);
- XRemotePauseSet* instance = (XRemotePauseSet*)context;
- with_view_model(
- instance->view,
- XRemotePauseSetModel * model,
- { xremote_pause_set_model_init(model); },
- true);
- }
- View* xremote_pause_set_get_view(XRemotePauseSet* instance) {
- furi_assert(instance);
- return instance->view;
- }
- void xremote_pause_set_free(XRemotePauseSet* instance) {
- furi_assert(instance);
- with_view_model(
- instance->view, XRemotePauseSetModel * model, { UNUSED(model); }, true);
- view_free(instance->view);
- free(instance);
- }
|