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

Added settings menu, improved the rest of the menu

Victor 3 лет назад
Родитель
Сommit
19ad483bab
6 измененных файлов с 146 добавлено и 18 удалено
  1. 6 16
      unitemp.c
  2. 13 0
      unitemp.h
  3. 12 1
      views/MainMenu_view.c
  4. 107 0
      views/Settings_view.c
  5. 1 1
      views/Summary_view.c
  6. 7 0
      views/UnitempViews.h

+ 6 - 16
unitemp.c

@@ -13,13 +13,7 @@ void uintemp_celsiumToFarengate(Sensor* sensor) {
     sensor->temp = sensor->temp * (9.0 / 5.0) + 32;
     sensor->temp = sensor->temp * (9.0 / 5.0) + 32;
 }
 }
 
 
-/**
- * @brief Сохранение настроек на SD-карту
- * 
- * @return true Если сохранение прошло успешно
- * @return false Если во время сохранения произошла ошибка
- */
-static bool unitemp_saveSettings(void) {
+bool unitemp_saveSettings(void) {
     FURI_LOG_D(APP_NAME, "Saving settings...\r\n");
     FURI_LOG_D(APP_NAME, "Saving settings...\r\n");
 
 
     //Выделение памяти для потока
     //Выделение памяти для потока
@@ -58,13 +52,7 @@ static bool unitemp_saveSettings(void) {
     return true;
     return true;
 }
 }
 
 
-/**
- * @brief Загрузка настроек с SD-карты
- * 
- * @return true Загрузка успешная
- * @return false Произошла ошибка
- */
-static bool unitemp_loadSettings(void) {
+bool unitemp_loadSettings(void) {
     FURI_LOG_D(APP_NAME, "Loading settings...");
     FURI_LOG_D(APP_NAME, "Loading settings...");
     //Выделение памяти на поток
     //Выделение памяти на поток
     app->file_stream = file_stream_alloc(app->storage);
     app->file_stream = file_stream_alloc(app->storage);
@@ -168,7 +156,6 @@ static bool unitemp_loadSettings(void) {
         //Автоматическое управление
         //Автоматическое управление
         notification_message(app->notifications, &sequence_display_backlight_enforce_auto);
         notification_message(app->notifications, &sequence_display_backlight_enforce_auto);
     }
     }
-    app->settings.lastOTGState = furi_hal_power_is_otg_enabled();
 
 
     FURI_LOG_I(APP_NAME, "Settings have been successfully loaded\r\n");
     FURI_LOG_I(APP_NAME, "Settings have been successfully loaded\r\n");
     return true;
     return true;
@@ -202,6 +189,7 @@ static bool unitemp_alloc(void) {
 
 
     unitemp_Summary_alloc();
     unitemp_Summary_alloc();
     unitemp_MainMenu_alloc();
     unitemp_MainMenu_alloc();
+    unitemp_Settings_alloc();
 
 
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
 
 
@@ -215,8 +203,9 @@ static void unitemp_free(void) {
     //Автоматическое управление подсветкой
     //Автоматическое управление подсветкой
     notification_message(app->notifications, &sequence_display_backlight_enforce_auto);
     notification_message(app->notifications, &sequence_display_backlight_enforce_auto);
 
 
-    unitemp_Summary_free();
+    unitemp_Settings_free();
     unitemp_MainMenu_free();
     unitemp_MainMenu_free();
+    unitemp_Summary_free();
 
 
     view_dispatcher_free(app->view_dispatcher);
     view_dispatcher_free(app->view_dispatcher);
     furi_record_close(RECORD_GUI);
     furi_record_close(RECORD_GUI);
@@ -249,6 +238,7 @@ int32_t unitemp_app() {
 
 
     //Загрузка настроек из SD-карты
     //Загрузка настроек из SD-карты
     unitemp_loadSettings();
     unitemp_loadSettings();
+    app->settings.lastOTGState = furi_hal_power_is_otg_enabled();
     //Загрузка датчиков из SD-карты
     //Загрузка датчиков из SD-карты
     unitemp_sensors_load();
     unitemp_sensors_load();
     //Инициализация датчиков
     //Инициализация датчиков

+ 13 - 0
unitemp.h

@@ -75,5 +75,18 @@ typedef struct {
  */
  */
 void uintemp_celsiumToFarengate(Sensor* sensor);
 void uintemp_celsiumToFarengate(Sensor* sensor);
 
 
+/**
+ * @brief Сохранение настроек на SD-карту
+ * 
+ * @return Истина если сохранение успешное
+ */
+bool unitemp_saveSettings(void);
+/**
+ * @brief Загрузка настроек с SD-карты
+ * 
+ * @return Истина если загрузка успешная
+ */
+bool unitemp_loadSettings(void);
+
 extern Unitemp* app;
 extern Unitemp* app;
 #endif
 #endif

+ 12 - 1
views/MainMenu_view.c

@@ -27,7 +27,11 @@ static uint32_t _exit_callback(void* context) {
  */
  */
 static void _enter_callback(void* context, uint32_t index) {
 static void _enter_callback(void* context, uint32_t index) {
     UNUSED(context);
     UNUSED(context);
-    UNUSED(index);
+    if(index == 0) { //add new sensor
+    }
+    if(index == 1) { //Settings
+        unitemp_Settings_switch();
+    }
 }
 }
 
 
 /**
 /**
@@ -54,6 +58,13 @@ void unitemp_MainMenu_alloc(void) {
     view_dispatcher_add_view(app->view_dispatcher, VIEW_ID, view);
     view_dispatcher_add_view(app->view_dispatcher, VIEW_ID, view);
 }
 }
 
 
+void unitemp_MainMenu_switch(void) {
+    //Обнуление последнего выбранного пункта
+    variable_item_list_set_selected_item(variable_item_list, 0);
+    //Переключение в вид
+    view_dispatcher_switch_to_view(app->view_dispatcher, VIEW_ID);
+}
+
 void unitemp_MainMenu_free(void) {
 void unitemp_MainMenu_free(void) {
     //Очистка списка элементов
     //Очистка списка элементов
     variable_item_list_free(variable_item_list);
     variable_item_list_free(variable_item_list);

+ 107 - 0
views/Settings_view.c

@@ -0,0 +1,107 @@
+#include "UnitempViews.h"
+#include <gui/modules/variable_item_list.h>
+
+//Текущий вид
+static View* view;
+//Список
+static VariableItemList* variable_item_list;
+
+static const char states[2][9] = {"Auto", "Infinity"};
+static const char units[2][3] = {"*C", "*F"};
+
+//Элемент списка - бесконечная подсветка
+VariableItem* infinity_backlight_item;
+//Единица измерения температуры
+VariableItem* temperature_unit_item;
+#define VIEW_ID SETTINGS_VIEW
+
+/**
+ * @brief Функция обработки нажатия кнопки "Назад"
+ *
+ * @param context Указатель на данные приложения
+ * @return ID вида в который нужно переключиться
+ */
+static uint32_t _exit_callback(void* context) {
+    UNUSED(context);
+    app->settings.infinityBacklight =
+        (bool)variable_item_get_current_value_index(infinity_backlight_item);
+    app->settings.unit = (bool)variable_item_get_current_value_index(temperature_unit_item);
+    unitemp_saveSettings();
+    unitemp_loadSettings();
+
+    //Возврат предыдущий вид
+    return MAINMENU_VIEW;
+}
+/**
+ * @brief Функция обработки нажатия средней кнопки
+ *
+ * @param context Указатель на данные приложения
+ * @param index На каком элементе списка была нажата кнопка
+ */
+static void _enter_callback(void* context, uint32_t index) {
+    UNUSED(context);
+    UNUSED(index);
+}
+
+void _setting_change_callback(VariableItem* item) {
+    if(item == infinity_backlight_item) {
+        variable_item_set_current_value_text(
+            infinity_backlight_item,
+            states[variable_item_get_current_value_index(infinity_backlight_item)]);
+    }
+    if(item == temperature_unit_item) {
+        variable_item_set_current_value_text(
+            temperature_unit_item,
+            units[variable_item_get_current_value_index(temperature_unit_item)]);
+    }
+}
+
+/**
+ * @brief Создание меню редактирования настроек
+ */
+void unitemp_Settings_alloc(void) {
+    variable_item_list = variable_item_list_alloc();
+    //Сброс всех элементов меню
+    variable_item_list_reset(variable_item_list);
+
+    infinity_backlight_item = variable_item_list_add(
+        variable_item_list, "Backlight time", 2, _setting_change_callback, app);
+    temperature_unit_item =
+        variable_item_list_add(variable_item_list, "Temp. unit", 2, _setting_change_callback, app);
+
+    //Добавление колбека на нажатие средней кнопки
+    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_Settings_switch(void) {
+    //Обнуление последнего выбранного пункта
+    variable_item_list_set_selected_item(variable_item_list, 0);
+
+    variable_item_set_current_value_index(
+        infinity_backlight_item, (uint8_t)app->settings.infinityBacklight);
+    variable_item_set_current_value_text(
+        infinity_backlight_item,
+        states[variable_item_get_current_value_index(infinity_backlight_item)]);
+
+    variable_item_set_current_value_index(temperature_unit_item, (uint8_t)app->settings.unit);
+    variable_item_set_current_value_text(
+        temperature_unit_item,
+        units[variable_item_get_current_value_index(temperature_unit_item)]);
+    view_dispatcher_switch_to_view(app->view_dispatcher, VIEW_ID);
+}
+
+void unitemp_Settings_free(void) {
+    //Очистка списка элементов
+    variable_item_list_free(variable_item_list);
+    //Очистка вида
+    view_free(view);
+    //Удаление вида после обработки
+    view_dispatcher_remove_view(app->view_dispatcher, VIEW_ID);
+}

+ 1 - 1
views/Summary_view.c

@@ -52,7 +52,7 @@ static bool _input_callback(InputEvent* event, void* context) {
     }
     }
     //Вход в главное меню по короткому нажатию "Ок"
     //Вход в главное меню по короткому нажатию "Ок"
     if(event->key == InputKeyOk && event->type == InputTypeShort) {
     if(event->key == InputKeyOk && event->type == InputTypeShort) {
-        view_dispatcher_switch_to_view(app->view_dispatcher, MAINMENU_VIEW);
+        unitemp_MainMenu_switch();
     }
     }
 
 
     return true;
     return true;

+ 7 - 0
views/UnitempViews.h

@@ -7,6 +7,7 @@
 typedef enum UnitempViews {
 typedef enum UnitempViews {
     SUMMARY_VIEW,
     SUMMARY_VIEW,
     MAINMENU_VIEW,
     MAINMENU_VIEW,
+    SETTINGS_VIEW,
 
 
     VIEWS_COUNT
     VIEWS_COUNT
 } UnitempViews;
 } UnitempViews;
@@ -17,5 +18,11 @@ void unitemp_Summary_free(void);
 
 
 /* Главное меню */
 /* Главное меню */
 void unitemp_MainMenu_alloc(void);
 void unitemp_MainMenu_alloc(void);
+void unitemp_MainMenu_switch(void);
 void unitemp_MainMenu_free(void);
 void unitemp_MainMenu_free(void);
+
+/* Настройки */
+void unitemp_Settings_alloc(void);
+void unitemp_Settings_switch(void);
+void unitemp_Settings_free(void);
 #endif
 #endif