Przeglądaj źródła

Added sensor actions menu

Victor 3 lat temu
rodzic
commit
88dab445f6
5 zmienionych plików z 90 dodań i 1 usunięć
  1. 2 0
      unitemp.c
  2. 2 0
      views/General_view.c
  3. 79 0
      views/SensorActions_view.c
  4. 1 1
      views/SensorEdit_view.c
  5. 6 0
      views/UnitempViews.h

+ 2 - 0
unitemp.c

@@ -201,6 +201,7 @@ static bool unitemp_alloc(void) {
     unitemp_SensorsList_alloc();
     unitemp_SensorEdit_alloc();
     unitemp_SensorNameEdit_alloc();
+    unitemp_SensorActions_alloc();
 
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
 
@@ -211,6 +212,7 @@ static bool unitemp_alloc(void) {
  * @brief Освыбождение памяти после работы приложения
  */
 static void unitemp_free(void) {
+    unitemp_SensorActions_free();
     unitemp_SensorNameEdit_free();
     unitemp_SensorEdit_free();
     unitemp_SensorsList_free();

+ 2 - 0
views/General_view.c

@@ -301,6 +301,8 @@ static bool _input_callback(InputEvent* event, void* context) {
                 app->sensors_ready = false;
                 unitemp_MainMenu_switch();
             }
+        } else if(current_view == G_CAROUSEL_VIEW) {
+            unitemp_SensorActions_switch(app->sensors[sensor_index]);
         }
     }
 

+ 79 - 0
views/SensorActions_view.c

@@ -0,0 +1,79 @@
+#include "UnitempViews.h"
+#include <gui/modules/variable_item_list.h>
+#include <stdio.h>
+
+//Текущий вид
+static View* view;
+//Список
+static VariableItemList* variable_item_list;
+//Текущий датчик
+static Sensor* current_sensor;
+
+#define VIEW_ID SENSORACTIONS_VIEW
+
+/**
+ * @brief Функция обработки нажатия кнопки "Назад"
+ *
+ * @param context Указатель на данные приложения
+ * @return ID вида в который нужно переключиться
+ */
+static uint32_t _exit_callback(void* context) {
+    UNUSED(context);
+
+    //Возврат предыдущий вид
+    return GENERAL_VIEW;
+}
+/**
+ * @brief Функция обработки нажатия средней кнопки
+ *
+ * @param context Указатель на данные приложения
+ * @param index На каком элементе списка была нажата кнопка
+ */
+static void _enter_callback(void* context, uint32_t index) {
+    UNUSED(context);
+    switch(index) {
+    case 1:
+        unitemp_SensorEdit_switch(current_sensor);
+        break;
+    }
+}
+
+/**
+ * @brief Создание меню действий с датчиком
+ */
+void unitemp_SensorActions_alloc(void) {
+    variable_item_list = variable_item_list_alloc();
+    //Сброс всех элементов меню
+    variable_item_list_reset(variable_item_list);
+
+    variable_item_list_add(variable_item_list, "Info", 1, NULL, NULL);
+    variable_item_list_add(variable_item_list, "Edit", 1, NULL, NULL);
+    variable_item_list_add(variable_item_list, "Delete", 1, NULL, NULL);
+
+    //Добавление колбека на нажатие средней кнопки
+    variable_item_list_set_enter_callback(variable_item_list, _enter_callback, app);
+
+    //Создание вида из списка
+    view = variable_item_list_get_view(variable_item_list);
+    //Добавление колбека на нажатие кнопки "Назад"
+    view_set_previous_callback(view, _exit_callback);
+    //Добавление вида в диспетчер
+    view_dispatcher_add_view(app->view_dispatcher, VIEW_ID, view);
+}
+
+void unitemp_SensorActions_switch(Sensor* sensor) {
+    current_sensor = sensor;
+    //Обнуление последнего выбранного пункта
+    variable_item_list_set_selected_item(variable_item_list, 0);
+
+    view_dispatcher_switch_to_view(app->view_dispatcher, VIEW_ID);
+}
+
+void unitemp_SensorActions_free(void) {
+    //Очистка списка элементов
+    variable_item_list_free(variable_item_list);
+    //Очистка вида
+    view_free(view);
+    //Удаление вида после обработки
+    view_dispatcher_remove_view(app->view_dispatcher, VIEW_ID);
+}

+ 1 - 1
views/SensorEdit_view.c

@@ -126,7 +126,7 @@ static uint32_t _exit_callback(void* context) {
 
     if(!unitemp_sensor_isContains(editable_sensor)) unitemp_sensor_free(editable_sensor);
     //Возврат предыдущий вид
-    return MAINMENU_VIEW;
+    return GENERAL_VIEW;
 }
 /**
  * @brief Функция обработки нажатия средней кнопки

+ 6 - 0
views/UnitempViews.h

@@ -11,6 +11,7 @@ typedef enum UnitempViews {
     SENSORSLIST_VIEW,
     SENSOREDIT_VIEW,
     SENSORNAMEEDIT_VIEW,
+    SENSORACTIONS_VIEW,
 
     VIEWS_COUNT
 } UnitempViews;
@@ -45,4 +46,9 @@ void unitemp_SensorEdit_free(void);
 void unitemp_SensorNameEdit_alloc(void);
 void unitemp_SensorNameEdit_switch(Sensor* sensor);
 void unitemp_SensorNameEdit_free(void);
+
+/* Список действий с датчиком */
+void unitemp_SensorActions_alloc(void);
+void unitemp_SensorActions_switch(Sensor* sensor);
+void unitemp_SensorActions_free(void);
 #endif