Просмотр исходного кода

Added main menu, improved sensors summary view

Victor 3 лет назад
Родитель
Сommit
d45e0e7a70
5 измененных файлов с 105 добавлено и 34 удалено
  1. 0 21
      scenes/Scenes.h
  2. 7 4
      unitemp.c
  3. 64 0
      views/MainMenu_view.c
  4. 13 9
      views/Summary_view.c
  5. 21 0
      views/UnitempViews.h

+ 0 - 21
scenes/Scenes.h

@@ -1,21 +0,0 @@
-#ifndef UNITEMP_SCENES
-#define UNITEMP_SCENES
-
-#include "../unitemp.h"
-
-//Виды менюшек
-typedef enum UnitempViews {
-    TEMPHUM_VIEW,
-} UnitempViews;
-
-/**
- * @brief Создание сцены отображения данных температуры и влажности
- */
-void TempHum_secene_alloc(void);
-
-/**
- * @brief //Освобождение памяти сцены
- */
-void TempHum_secene_free(void);
-
-#endif

+ 7 - 4
unitemp.c

@@ -1,7 +1,7 @@
 #include "unitemp.h"
 #include "unitemp.h"
 #include "interfaces/SingleWireSensor.h"
 #include "interfaces/SingleWireSensor.h"
 #include "Sensors.h"
 #include "Sensors.h"
-#include "scenes/Scenes.h"
+#include "./views/UnitempViews.h"
 
 
 #include <furi_hal_power.h>
 #include <furi_hal_power.h>
 
 
@@ -200,7 +200,8 @@ static bool unitemp_alloc(void) {
     //Диспетчер окон
     //Диспетчер окон
     app->view_dispatcher = view_dispatcher_alloc();
     app->view_dispatcher = view_dispatcher_alloc();
 
 
-    TempHum_secene_alloc();
+    unitemp_Summary_alloc();
+    unitemp_MainMenu_alloc();
 
 
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
 
 
@@ -214,7 +215,8 @@ static void unitemp_free(void) {
     //Автоматическое управление подсветкой
     //Автоматическое управление подсветкой
     notification_message(app->notifications, &sequence_display_backlight_enforce_auto);
     notification_message(app->notifications, &sequence_display_backlight_enforce_auto);
 
 
-    TempHum_secene_free();
+    unitemp_Summary_free();
+    unitemp_MainMenu_free();
 
 
     view_dispatcher_free(app->view_dispatcher);
     view_dispatcher_free(app->view_dispatcher);
     furi_record_close(RECORD_GUI);
     furi_record_close(RECORD_GUI);
@@ -252,10 +254,11 @@ int32_t unitemp_app() {
     //Инициализация датчиков
     //Инициализация датчиков
     unitemp_sensors_init();
     unitemp_sensors_init();
 
 
-    view_dispatcher_switch_to_view(app->view_dispatcher, TEMPHUM_VIEW);
+    view_dispatcher_switch_to_view(app->view_dispatcher, SUMMARY_VIEW);
 
 
     while(app->processing) {
     while(app->processing) {
         unitemp_sensors_updateValues();
         unitemp_sensors_updateValues();
+        furi_delay_ms(100);
     }
     }
 
 
     //Деинициализация датчиков
     //Деинициализация датчиков

+ 64 - 0
views/MainMenu_view.c

@@ -0,0 +1,64 @@
+#include "UnitempViews.h"
+#include <gui/modules/variable_item_list.h>
+
+//Текущий вид
+static View* view;
+//Список
+static VariableItemList* variable_item_list;
+
+#define VIEW_ID MAINMENU_VIEW
+
+/**
+ * @brief Функция обработки нажатия кнопки "Назад"
+ *
+ * @param context Указатель на данные приложения
+ * @return ID вида в который нужно переключиться
+ */
+static uint32_t _exit_callback(void* context) {
+    UNUSED(context);
+    //Возврат в общий вид
+    return SUMMARY_VIEW;
+}
+/**
+ * @brief Функция обработки нажатия средней кнопки
+ *
+ * @param context Указатель на данные приложения
+ * @param index На каком элементе списка была нажата кнопка
+ */
+static void _enter_callback(void* context, uint32_t index) {
+    UNUSED(context);
+    UNUSED(index);
+}
+
+/**
+ * @brief Создание списка действий с указанным датчиком
+ */
+void unitemp_MainMenu_alloc(void) {
+    variable_item_list = variable_item_list_alloc();
+    //Сброс всех элементов меню
+    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, "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);
+
+    //Добавление колбека на нажатие средней кнопки
+    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_MainMenu_free(void) {
+    //Очистка списка элементов
+    variable_item_list_free(variable_item_list);
+    //Очистка вида
+    view_free(view);
+    //Удаление вида после обработки
+    view_dispatcher_remove_view(app->view_dispatcher, VIEW_ID);
+}

+ 13 - 9
scenes/TempHum_scene.c → views/Summary_view.c

@@ -1,8 +1,8 @@
-#include "Scenes.h"
+#include "UnitempViews.h"
 
 
 static View* view;
 static View* view;
 
 
-static void TempHum_draw_callback(Canvas* canvas, void* _model) {
+static void _draw_callback(Canvas* canvas, void* _model) {
     UNUSED(_model);
     UNUSED(_model);
 
 
     //Рисование бара
     //Рисование бара
@@ -43,26 +43,30 @@ static void TempHum_draw_callback(Canvas* canvas, void* _model) {
     }
     }
 }
 }
 
 
-bool input_callback(InputEvent* event, void* context) {
+static bool _input_callback(InputEvent* event, void* context) {
     Unitemp* app = context;
     Unitemp* app = context;
 
 
-    //Вход по короткому нажатию
+    //Выход по короткому нажатию "назад"
     if(event->key == InputKeyBack && event->type == InputTypeShort) {
     if(event->key == InputKeyBack && event->type == InputTypeShort) {
         app->processing = false;
         app->processing = false;
     }
     }
+    //Вход в главное меню по короткому нажатию "Ок"
+    if(event->key == InputKeyOk && event->type == InputTypeShort) {
+        view_dispatcher_switch_to_view(app->view_dispatcher, MAINMENU_VIEW);
+    }
 
 
     return true;
     return true;
 }
 }
 
 
-void TempHum_secene_alloc(void) {
+void unitemp_Summary_alloc(void) {
     view = view_alloc();
     view = view_alloc();
     view_set_context(view, app);
     view_set_context(view, app);
-    view_set_draw_callback(view, TempHum_draw_callback);
-    view_set_input_callback(view, input_callback);
+    view_set_draw_callback(view, _draw_callback);
+    view_set_input_callback(view, _input_callback);
 
 
-    view_dispatcher_add_view(app->view_dispatcher, TEMPHUM_VIEW, view);
+    view_dispatcher_add_view(app->view_dispatcher, SUMMARY_VIEW, view);
 }
 }
 
 
-void TempHum_secene_free(void) {
+void unitemp_Summary_free(void) {
     view_free(view);
     view_free(view);
 }
 }

+ 21 - 0
views/UnitempViews.h

@@ -0,0 +1,21 @@
+#ifndef UNITEMP_SCENES
+#define UNITEMP_SCENES
+
+#include "../unitemp.h"
+
+//Виды менюшек
+typedef enum UnitempViews {
+    SUMMARY_VIEW,
+    MAINMENU_VIEW,
+
+    VIEWS_COUNT
+} UnitempViews;
+
+/* Общий вид на датчики */
+void unitemp_Summary_alloc(void);
+void unitemp_Summary_free(void);
+
+/* Главное меню */
+void unitemp_MainMenu_alloc(void);
+void unitemp_MainMenu_free(void);
+#endif