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

Update App Context to Add Views to Dispatcher + Add SUpport for Variable Item Lists

[Problem]
Right now, I need to add views to the dispatcher in the main code, even though
all of the properties are in the view when added to the app context.

[Solution]
Updated the app context to add views to the view dispatcher, and also added
support for variable item lists.

[Testing]
Tested on device and confirmed everything still runs.
Gerald McAlister 2 лет назад
Родитель
Сommit
296928b848
4 измененных файлов с 48 добавлено и 14 удалено
  1. 28 1
      src/app_context.c
  2. 1 0
      src/app_context.h
  3. 18 13
      src/tone_gen.c
  4. 1 0
      src/tone_gen.h

+ 28 - 1
src/app_context.c

@@ -1,6 +1,7 @@
 #include <gui/modules/menu.h>
-#include <gui/modules/submenu.h>
 #include <gui/modules/popup.h>
+#include <gui/modules/submenu.h>
+#include <gui/modules/variable_item_list.h>
 
 #include "tone_gen.h"
 #include "app_context.h"
@@ -65,6 +66,29 @@ AppContextStatus addViewToAppContext(struct AppContext_t** context, struct View_
         return APP_CONTEXT_NOT_ENOUGH_VIEWS;
     }
     (*context)->activeViews[view->viewId] = view;
+    switch(view->type) {
+    case MENU:
+        view_dispatcher_add_view(
+            (*context)->view_dispatcher, view->viewId, menu_get_view(view->viewData));
+        break;
+    case SUBMENU:
+        view_dispatcher_add_view(
+            (*context)->view_dispatcher, view->viewId, submenu_get_view(view->viewData));
+        break;
+    case VIEW:
+        view_dispatcher_add_view((*context)->view_dispatcher, view->viewId, view->viewData);
+        break;
+    case VARIABLE_ITEM_LIST:
+        view_dispatcher_add_view(
+            (*context)->view_dispatcher,
+            view->viewId,
+            variable_item_list_get_view(view->viewData));
+        break;
+    case POPUP:
+        view_dispatcher_add_view(
+            (*context)->view_dispatcher, view->viewId, popup_get_view(view->viewData));
+        break;
+    }
     return APP_CONTEXT_OK;
 }
 
@@ -85,6 +109,9 @@ AppContextStatus freeAppContextViews(struct AppContext_t** context) {
             case VIEW:
                 view_free(view->viewData);
                 break;
+            case VARIABLE_ITEM_LIST:
+                variable_item_list_free(view->viewData);
+                break;
             case POPUP:
                 popup_free(view->viewData);
                 break;

+ 1 - 0
src/app_context.h

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

+ 18 - 13
src/tone_gen.c

@@ -1,6 +1,7 @@
 #include <gui/canvas.h>
 #include <gui/modules/menu.h>
 #include <gui/modules/submenu.h>
+#include <gui/modules/variable_item_list.h>
 
 /* generated by fbt from .png files in images folder */
 #include <tone_gen_icons.h>
@@ -57,7 +58,17 @@ int setupViews(struct AppContext_t** appContext) {
     playbackView->viewId = ToneGenAppView_PlaybackView;
     playbackView->type = VIEW;
 
-    // Add views to the app context for management later
+    FURI_LOG_I(TAG, "creating var-item-list view");
+    struct View_t* variableItemListView = malloc(sizeof(struct View_t));
+    FURI_LOG_I(TAG, "allocating view data");
+    variableItemListView->viewData = variable_item_list_alloc();
+    FURI_LOG_I(TAG, "setting view id");
+    variableItemListView->viewId = ToneGenAppView_VariableItemList;
+    FURI_LOG_I(TAG, "setting view type");
+    variableItemListView->type = VARIABLE_ITEM_LIST;
+    FURI_LOG_I(TAG, "moving on");
+
+    // Add views to the app context to be managed there
     FURI_LOG_I(TAG, "Adding views to app context");
     AppContextStatus result = addViewToAppContext(appContext, sharedMenuView);
     if(result != APP_CONTEXT_OK) {
@@ -77,18 +88,12 @@ int setupViews(struct AppContext_t** appContext) {
         return -1;
     }
 
-    // Add views to the view dispatcher for usage later
-    FURI_LOG_I(TAG, "Adding views to view dispatcher");
-    view_dispatcher_add_view(
-        (*appContext)->view_dispatcher,
-        sharedMenuView->viewId,
-        menu_get_view(sharedMenuView->viewData));
-    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, "Adding variable item list view");
+    result = addViewToAppContext(appContext, variableItemListView);
+    if(result != APP_CONTEXT_OK) {
+        FURI_LOG_E(TAG, "There was a problem adding the view %d!", variableItemListView->viewId);
+        return -1;
+    }
 
     // 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

@@ -19,6 +19,7 @@ typedef enum {
 typedef enum {
     ToneGenAppView_SharedMenu,
     ToneGenAppView_Submenu,
+    ToneGenAppView_VariableItemList,
     ToneGenAppView_PlaybackView,
     ToneGenAppView_Popup,
     ToneGenAppView_count