Skip to content

Commit 7f004dc

Browse files
committed
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.
1 parent e6be51f commit 7f004dc

File tree

5 files changed

+31
-12
lines changed

5 files changed

+31
-12
lines changed

src/app_context.c

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <gui/modules/menu.h>
2+
#include <gui/modules/submenu.h>
23
#include <gui/modules/popup.h>
34

45
#include "tone_gen.h"
@@ -78,6 +79,9 @@ AppContextStatus freeAppContextViews(struct AppContext_t** context) {
7879
case MENU:
7980
menu_free(view->viewData);
8081
break;
82+
case SUBMENU:
83+
submenu_free(view->viewData);
84+
break;
8185
case VIEW:
8286
view_free(view->viewData);
8387
break;

src/app_context.h

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
typedef enum {
1111
MENU,
12+
SUBMENU,
1213
VIEW,
1314
POPUP,
1415
} ViewType;

src/scenes/settings_scene.c

+9-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include <gui/modules/menu.h>
1+
#include <gui/modules/submenu.h>
22
#include <gui/modules/popup.h>
33

44
#include "settings_scene.h"
@@ -40,34 +40,33 @@ void scene_on_enter_settings_scene(void* context) {
4040

4141
// Setup our menu
4242
FURI_LOG_D(TAG, "Adding view menu");
43-
struct View_t* menuView = app->activeViews[ToneGenAppView_SharedMenu];
43+
struct View_t* menuView = app->activeViews[ToneGenAppView_Submenu];
4444

4545
// Set the currently active view
46-
menu_reset(menuView->viewData);
46+
submenu_reset(menuView->viewData);
47+
48+
submenu_set_header(menuView->viewData, "Tone Settings");
4749

4850
FURI_LOG_D(TAG, "Adding menu options for settings");
49-
menu_add_item(
51+
submenu_add_item(
5052
menuView->viewData,
5153
"Wave Type",
52-
NULL,
5354
SettingsMenuOptions_WaveType,
5455
menu_callback_settings_scene,
5556
app);
56-
menu_add_item(
57+
submenu_add_item(
5758
menuView->viewData,
5859
"Amplitude",
59-
NULL,
6060
SettingsMenuOptions_Amplitude,
6161
menu_callback_settings_scene,
6262
app);
63-
menu_add_item(
63+
submenu_add_item(
6464
menuView->viewData,
6565
"Period",
66-
NULL,
6766
SettingsMenuOptions_Period,
6867
menu_callback_settings_scene,
6968
app);
70-
view_dispatcher_switch_to_view(app->view_dispatcher, ToneGenAppView_SharedMenu);
69+
view_dispatcher_switch_to_view(app->view_dispatcher, ToneGenAppView_Submenu);
7170
}
7271

7372
/** main menu event handler - switches scene based on the event */

src/tone_gen.c

+16-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <gui/canvas.h>
22
#include <gui/modules/menu.h>
3+
#include <gui/modules/submenu.h>
34

45
/* generated by fbt from .png files in images folder */
56
#include <tone_gen_icons.h>
@@ -46,6 +47,11 @@ int setupViews(struct AppContext_t** appContext) {
4647
sharedMenuView->viewId = ToneGenAppView_SharedMenu;
4748
sharedMenuView->type = MENU;
4849

50+
struct View_t* submenuView = malloc(sizeof(struct View_t));
51+
submenuView->viewData = submenu_alloc();
52+
submenuView->viewId = ToneGenAppView_Submenu;
53+
submenuView->type = SUBMENU;
54+
4955
struct View_t* playbackView = malloc(sizeof(struct View_t));
5056
playbackView->viewData = view_alloc();
5157
playbackView->viewId = ToneGenAppView_PlaybackView;
@@ -59,6 +65,12 @@ int setupViews(struct AppContext_t** appContext) {
5965
return -1;
6066
}
6167

68+
result = addViewToAppContext(appContext, submenuView);
69+
if(result != APP_CONTEXT_OK) {
70+
FURI_LOG_E(TAG, "There was a problem adding the view %d!", submenuView->viewId);
71+
return -1;
72+
}
73+
6274
result = addViewToAppContext(appContext, playbackView);
6375
if(result != APP_CONTEXT_OK) {
6476
FURI_LOG_E(TAG, "There was a problem adding the view %d!", playbackView->viewId);
@@ -71,10 +83,12 @@ int setupViews(struct AppContext_t** appContext) {
7183
(*appContext)->view_dispatcher,
7284
sharedMenuView->viewId,
7385
menu_get_view(sharedMenuView->viewData));
74-
FURI_LOG_I(TAG, "Adding next view to app context");
86+
view_dispatcher_add_view(
87+
(*appContext)->view_dispatcher,
88+
submenuView->viewId,
89+
submenu_get_view(submenuView->viewData));
7590
view_dispatcher_add_view(
7691
(*appContext)->view_dispatcher, playbackView->viewId, playbackView->viewData);
77-
FURI_LOG_I(TAG, "Done making views");
7892

7993
// On the playback view, ensure we only allocate for the model once
8094
FURI_LOG_I(TAG, "allocating view model for playback");

src/tone_gen.h

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ typedef enum {
1818
// ids for the 2 types of view used by the app
1919
typedef enum {
2020
ToneGenAppView_SharedMenu,
21+
ToneGenAppView_Submenu,
2122
ToneGenAppView_PlaybackView,
2223
ToneGenAppView_Popup,
2324
ToneGenAppView_count

0 commit comments

Comments
 (0)