Victor 3 лет назад
Родитель
Сommit
c334791203
6 измененных файлов с 122 добавлено и 6 удалено
  1. 4 0
      unitemp.c
  2. 2 0
      unitemp.h
  3. 1 0
      views/General_view.c
  4. 1 5
      views/MainMenu_view.c
  5. 113 0
      views/SensorActions_view.c
  6. 1 1
      views/UnitempViews.h

+ 4 - 0
unitemp.c

@@ -203,6 +203,9 @@ static bool unitemp_alloc(void) {
     unitemp_SensorEdit_alloc();
     unitemp_SensorNameEdit_alloc();
     unitemp_SensorActions_alloc();
+    app->widget = widget_alloc();
+    view_dispatcher_add_view(
+        app->view_dispatcher, VIEW_SENSOR_DELETE, widget_get_view(app->widget));
 
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
 
@@ -213,6 +216,7 @@ static bool unitemp_alloc(void) {
  * @brief Освыбождение памяти после работы приложения
  */
 static void unitemp_free(void) {
+    widget_free(app->widget);
     unitemp_SensorActions_free();
     unitemp_SensorNameEdit_free();
     unitemp_SensorEdit_free();

+ 2 - 0
unitemp.h

@@ -9,6 +9,7 @@
 //Экран
 #include <gui/gui.h>
 #include <gui/view_dispatcher.h>
+#include <gui/modules/widget.h>
 //Уведомления
 #include <notification/notification.h>
 #include <notification/notification_messages.h>
@@ -61,6 +62,7 @@ typedef struct {
     Gui* gui;
     ViewDispatcher* view_dispatcher;
     NotificationApp* notifications;
+    Widget* widget;
 } Unitemp;
 
 /* Объявление прототипов функций */

+ 1 - 0
views/General_view.c

@@ -370,6 +370,7 @@ static bool _input_callback(InputEvent* event, void* context) {
             if(selector) {
                 //Переход в карусель
                 current_view = G_CAROUSEL_VIEW;
+                carousel_info_selector = CAROUSEL_VALUES;
             } else {
                 //Переход в главное меню при выключенном селекторе
                 app->sensors_ready = false;

+ 1 - 5
views/MainMenu_view.c

@@ -30,10 +30,7 @@ static void _enter_callback(void* context, uint32_t index) {
     if(index == 0) { //Add new sensor
         unitemp_SensorsList_switch();
     }
-    if(index == 1) { //Edit sensor
-        //
-    }
-    if(index == 2) { //Settings
+    if(index == 1) { //Settings
         unitemp_Settings_switch();
     }
 }
@@ -47,7 +44,6 @@ void unitemp_MainMenu_alloc(void) {
     variable_item_list_reset(variable_item_list);
 
     variable_item_list_add(variable_item_list, "Add new sensor", 1, NULL, NULL);
-    variable_item_list_add(variable_item_list, "Edit sensor", 1, NULL, NULL);
     variable_item_list_add(variable_item_list, "Settings", 1, NULL, NULL);
     variable_item_list_add(variable_item_list, "Help", 1, NULL, NULL);
     variable_item_list_add(variable_item_list, "About", 1, NULL, NULL);

+ 113 - 0
views/SensorActions_view.c

@@ -11,6 +11,116 @@ static Sensor* current_sensor;
 
 #define VIEW_ID VIEW_SENSOR_ACTIONS
 
+/* ================== Подтверждение удаления ================== */
+/**
+ * @brief Функция обработки нажатия кнопки "Назад"
+ * 
+ * @param context Указатель на данные приложения
+ * @return ID вида в который нужно переключиться
+ */
+static uint32_t _delete_exit_callback(void* context) {
+    UNUSED(context);
+    //Возвращаем ID вида, в который нужно вернуться
+    return VIEW_SENSOR_ACTIONS;
+}
+/**
+ * @brief Обработчик нажатий на кнопку в виджете
+ * 
+ * @param result Какая из кнопок была нажата
+ * @param type Тип нажатия
+ * @param context Указатель на данные плагина
+ */
+static void _delete_click_callback(GuiButtonType result, InputType type, void* context) {
+    UNUSED(context);
+    //Коротко нажата левая кнопка (Cancel)
+    if(result == GuiButtonTypeLeft && type == InputTypeShort) {
+        unitemp_SensorActions_switch(current_sensor);
+    }
+    //Коротко нажата правая кнопка (Delete)
+    if(result == GuiButtonTypeRight && type == InputTypeShort) {
+        //Удаление датчика
+        //
+        //Выход из меню
+        unitemp_General_switch();
+    }
+}
+/**
+ * @brief Переключение в виджет удаления датчика
+ */
+static void _delete_widget_switch(void) {
+    //Очистка виджета
+    widget_reset(app->widget);
+    //Добавление кнопок
+    widget_add_button_element(
+        app->widget, GuiButtonTypeLeft, "Cancel", _delete_click_callback, app);
+    widget_add_button_element(
+        app->widget, GuiButtonTypeRight, "Delete", _delete_click_callback, app);
+
+    char delete_str[32];
+    snprintf(delete_str, sizeof(delete_str), "\e#Delete %s?\e#", current_sensor->name);
+    widget_add_text_box_element(
+        app->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, delete_str, false);
+
+    if(current_sensor->type->interface == &ONE_WIRE) {
+        OneWireSensor* s = current_sensor->instance;
+
+        snprintf(
+            delete_str,
+            sizeof(delete_str),
+            "\e#Type:\e# %s",
+            unitemp_onewire_sensor_getModel(current_sensor));
+        widget_add_text_box_element(
+            app->widget, 0, 16, 128, 23, AlignLeft, AlignTop, delete_str, false);
+        snprintf(delete_str, sizeof(delete_str), "\e#GPIO:\e# %s", s->bus->gpio->name);
+        widget_add_text_box_element(
+            app->widget, 0, 28, 128, 23, AlignLeft, AlignTop, delete_str, false);
+
+        snprintf(
+            delete_str,
+            sizeof(delete_str),
+            "\e#ID:\e# %02X%02X%02X%02X%02X%02X%02X%02X",
+            s->deviceID[0],
+            s->deviceID[1],
+            s->deviceID[2],
+            s->deviceID[3],
+            s->deviceID[4],
+            s->deviceID[5],
+            s->deviceID[6],
+            s->deviceID[7]);
+        widget_add_text_box_element(
+            app->widget, 0, 40, 128, 23, AlignLeft, AlignTop, delete_str, false);
+    }
+
+    if(current_sensor->type->interface == &SINGLE_WIRE) {
+        snprintf(delete_str, sizeof(delete_str), "\e#Type:\e# %s", current_sensor->type->typename);
+        widget_add_text_box_element(
+            app->widget, 0, 16, 128, 23, AlignLeft, AlignTop, delete_str, false);
+        snprintf(
+            delete_str,
+            sizeof(delete_str),
+            "\e#GPIO:\e# %s",
+            ((SingleWireSensor*)current_sensor->instance)->gpio->name);
+        widget_add_text_box_element(
+            app->widget, 0, 28, 128, 23, AlignLeft, AlignTop, delete_str, false);
+    }
+
+    if(current_sensor->type->interface == &I2C) {
+        snprintf(delete_str, sizeof(delete_str), "\e#Type:\e# %s", current_sensor->type->typename);
+        widget_add_text_box_element(
+            app->widget, 0, 16, 128, 23, AlignLeft, AlignTop, delete_str, false);
+        snprintf(
+            delete_str,
+            sizeof(delete_str),
+            "\e#I2C addr:\e# 0x%02X",
+            ((I2CSensor*)current_sensor->instance)->currentI2CAdr);
+        widget_add_text_box_element(
+            app->widget, 0, 28, 128, 23, AlignLeft, AlignTop, delete_str, false);
+    }
+
+    view_set_previous_callback(widget_get_view(app->widget), _delete_exit_callback);
+    view_dispatcher_switch_to_view(app->view_dispatcher, VIEW_SENSOR_DELETE);
+}
+
 /**
  * @brief Функция обработки нажатия кнопки "Назад"
  *
@@ -35,6 +145,9 @@ static void _enter_callback(void* context, uint32_t index) {
     case 0:
         unitemp_SensorEdit_switch(current_sensor);
         break;
+    case 1:
+        _delete_widget_switch();
+        break;
     }
 }
 

+ 1 - 1
views/UnitempViews.h

@@ -12,7 +12,7 @@ typedef enum UnitempViews {
     VIEW_SENSOR_EDIT,
     VIEW_SENSOR_NAME_EDIT,
     VIEW_SENSOR_ACTIONS,
-    VIEW_SENSOR_INFO,
+    VIEW_SENSOR_DELETE,
 
     VIEWS_COUNT
 } UnitempViews;