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

Update Settings to Use Submenu

[Problem]
Right now, the Settings Scene uses a menu
to display the various options. The submenu
module actually works better for this.

[Solution]
Updated the Settings Scene to instead use the
submenu module, and added a nice little header
to it as well.

[Testing]
Confirmed working on device.
Gerald McAlister 2 лет назад
Родитель
Сommit
7f004dc6e3
5 измененных файлов с 31 добавлено и 12 удалено
  1. 4 0
      src/app_context.c
  2. 1 0
      src/app_context.h
  3. 9 10
      src/scenes/settings_scene.c
  4. 16 2
      src/tone_gen.c
  5. 1 0
      src/tone_gen.h

+ 4 - 0
src/app_context.c

@@ -1,4 +1,5 @@
 #include <gui/modules/menu.h>
+#include <gui/modules/submenu.h>
 #include <gui/modules/popup.h>
 
 #include "tone_gen.h"
@@ -78,6 +79,9 @@ AppContextStatus freeAppContextViews(struct AppContext_t** context) {
             case MENU:
                 menu_free(view->viewData);
                 break;
+            case SUBMENU:
+                submenu_free(view->viewData);
+                break;
             case VIEW:
                 view_free(view->viewData);
                 break;

+ 1 - 0
src/app_context.h

@@ -9,6 +9,7 @@
 
 typedef enum {
     MENU,
+    SUBMENU,
     VIEW,
     POPUP,
 } ViewType;

+ 9 - 10
src/scenes/settings_scene.c

@@ -1,4 +1,4 @@
-#include <gui/modules/menu.h>
+#include <gui/modules/submenu.h>
 #include <gui/modules/popup.h>
 
 #include "settings_scene.h"
@@ -40,34 +40,33 @@ void scene_on_enter_settings_scene(void* context) {
 
     // Setup our menu
     FURI_LOG_D(TAG, "Adding view menu");
-    struct View_t* menuView = app->activeViews[ToneGenAppView_SharedMenu];
+    struct View_t* menuView = app->activeViews[ToneGenAppView_Submenu];
 
     // Set the currently active view
-    menu_reset(menuView->viewData);
+    submenu_reset(menuView->viewData);
+
+    submenu_set_header(menuView->viewData, "Tone Settings");
 
     FURI_LOG_D(TAG, "Adding menu options for settings");
-    menu_add_item(
+    submenu_add_item(
         menuView->viewData,
         "Wave Type",
-        NULL,
         SettingsMenuOptions_WaveType,
         menu_callback_settings_scene,
         app);
-    menu_add_item(
+    submenu_add_item(
         menuView->viewData,
         "Amplitude",
-        NULL,
         SettingsMenuOptions_Amplitude,
         menu_callback_settings_scene,
         app);
-    menu_add_item(
+    submenu_add_item(
         menuView->viewData,
         "Period",
-        NULL,
         SettingsMenuOptions_Period,
         menu_callback_settings_scene,
         app);
-    view_dispatcher_switch_to_view(app->view_dispatcher, ToneGenAppView_SharedMenu);
+    view_dispatcher_switch_to_view(app->view_dispatcher, ToneGenAppView_Submenu);
 }
 
 /** main menu event handler - switches scene based on the event */

+ 16 - 2
src/tone_gen.c

@@ -1,5 +1,6 @@
 #include <gui/canvas.h>
 #include <gui/modules/menu.h>
+#include <gui/modules/submenu.h>
 
 /* generated by fbt from .png files in images folder */
 #include <tone_gen_icons.h>
@@ -46,6 +47,11 @@ int setupViews(struct AppContext_t** appContext) {
     sharedMenuView->viewId = ToneGenAppView_SharedMenu;
     sharedMenuView->type = MENU;
 
+    struct View_t* submenuView = malloc(sizeof(struct View_t));
+    submenuView->viewData = submenu_alloc();
+    submenuView->viewId = ToneGenAppView_Submenu;
+    submenuView->type = SUBMENU;
+
     struct View_t* playbackView = malloc(sizeof(struct View_t));
     playbackView->viewData = view_alloc();
     playbackView->viewId = ToneGenAppView_PlaybackView;
@@ -59,6 +65,12 @@ int setupViews(struct AppContext_t** appContext) {
         return -1;
     }
 
+    result = addViewToAppContext(appContext, submenuView);
+    if(result != APP_CONTEXT_OK) {
+        FURI_LOG_E(TAG, "There was a problem adding the view %d!", submenuView->viewId);
+        return -1;
+    }
+
     result = addViewToAppContext(appContext, playbackView);
     if(result != APP_CONTEXT_OK) {
         FURI_LOG_E(TAG, "There was a problem adding the view %d!", playbackView->viewId);
@@ -71,10 +83,12 @@ int setupViews(struct AppContext_t** appContext) {
         (*appContext)->view_dispatcher,
         sharedMenuView->viewId,
         menu_get_view(sharedMenuView->viewData));
-    FURI_LOG_I(TAG, "Adding next view to app context");
+    view_dispatcher_add_view(
+        (*appContext)->view_dispatcher,
+        submenuView->viewId,
+        submenu_get_view(submenuView->viewData));
     view_dispatcher_add_view(
         (*appContext)->view_dispatcher, playbackView->viewId, playbackView->viewData);
-    FURI_LOG_I(TAG, "Done making views");
 
     // On the playback view, ensure we only allocate for the model once
     FURI_LOG_I(TAG, "allocating view model for playback");

+ 1 - 0
src/tone_gen.h

@@ -18,6 +18,7 @@ typedef enum {
 // ids for the 2 types of view used by the app
 typedef enum {
     ToneGenAppView_SharedMenu,
+    ToneGenAppView_Submenu,
     ToneGenAppView_PlaybackView,
     ToneGenAppView_Popup,
     ToneGenAppView_count