*/}}
Browse Source

Collection category

Yiming Wu 1 year ago
parent
commit
51fe9a5c01
9 changed files with 75 additions and 45 deletions
  1. 10 2
      la_data.c
  2. 5 2
      la_data.h
  3. 5 3
      la_interface.h
  4. 36 22
      la_kernel.c
  5. 0 4
      la_resource.c
  6. 1 1
      resources/la_nodes_basic.c
  7. 4 1
      resources/la_operators.c
  8. 6 2
      resources/la_properties.c
  9. 8 8
      resources/la_templates.c

+ 10 - 2
la_data.c

@@ -770,6 +770,10 @@ laProp *la_MakeDetachedProp(laPanel* p, const char *From, const char *Rename){
         ep = np;
         ep->Detached = CreateNewBuffer(int, 1);
         ep->Detached[0] = ((laEnumItem *)ep->Items.pFirst)->Index;
+        break;
+    case LA_PROP_SUB:
+        sp=np; sp->GetCategory=((laSubProp*)np)->GetCategory;
+        break;
     }
     lstAppendItem(&p->PropLinkContainer->Props, np);
     la_AssignPropertyGeneralSub(np);
@@ -969,9 +973,9 @@ laProp *laAddSubGroup(laPropContainer *Container, const char *Identifier, const
     return p;
 }
 
-void laSubGroupExtraFunctions(laProp* p, laSubUIFilterF* UiFilter, laSubUIThemeF* GetTheme, laSubUIGapF GetGap){
+void laSubGroupExtraFunctions(laProp* p, laSubUIFilterF* UiFilter, laSubUIThemeF* GetTheme, laSubUIGapF GetGap, laSubUICategoryF GetCategory){
     laSubProp *sp=p;
-    sp->UiFilter=UiFilter; sp->GetTheme=GetTheme; sp->GetGap=GetGap;
+    sp->UiFilter=UiFilter; sp->GetTheme=GetTheme; sp->GetGap=GetGap; sp->GetCategory=GetCategory;
 }
 void laSubGroupDetachable(laProp *SubProp, laSubTypeDetachedGet DetachedGet, laSubTypeDetachedGetNext DetachedGetNext){
     laSubProp *sp = SubProp;
@@ -1933,6 +1937,7 @@ int laGetFloatRange(laPropPack *pp, real *min, real *max){
 int laCanGetState(laProp *sub){ laSubProp *sp = sub; if (sub->PropertyType == LA_PROP_SUB){ if (sp->GetState) return 1; } return 0; }
 int laCanGetTheme(laProp *sub){ laSubProp *sp = sub; if (sub->PropertyType == LA_PROP_SUB){ if (sp->GetTheme) return 1; } return 0; }
 int laCanGetGap(laProp *sub){ laSubProp *sp = sub; if (sub->PropertyType == LA_PROP_SUB){ if (sp->GetGap) return 1; } return 0; }
+int laCanGetCategory(laProp *sub){ laSubProp *sp = sub; if (sub->PropertyType == LA_PROP_SUB){ if (sp->GetCategory) return 1; } return 0; }
 int laGetUiState(laProp *sub, void *Instance){
     laSubProp *sp = sub; if (sub->PropertyType == LA_PROP_SUB){ if (sp->GetState) return sp->GetState(Instance); } return 0;
 }
@@ -1942,6 +1947,9 @@ laBoxedTheme* laGetUiTheme(laProp *sub, void* parent, void *Instance){
 int laGetUiGap(laProp *sub, void* parent, void *Instance){
     laSubProp *sp = sub; if (sub->PropertyType == LA_PROP_SUB){ if (sp->GetGap) return sp->GetGap(parent,Instance); } return 0;
 }
+void laGetCategory(laProp *sub, void* parent, void *Instance, char* buf, char** buf_ptr){
+    laSubProp *sp = sub; if (sub->PropertyType == LA_PROP_SUB){ if (sp->GetCategory) sp->GetCategory(parent,Instance, buf, buf_ptr); }
+}
 int laSetState(laProp *sub, void *FromInstance, void *Instance, int State){
     laSubProp *sp = sub;
     if (sub->PropertyType == LA_PROP_SUB){

+ 5 - 2
la_data.h

@@ -60,6 +60,7 @@ typedef void *(*laSubGetTypeF)(void *);// inst, returns type ref.
 typedef int (*laSubUIFilterF)(void* parent, void* inst); // 1 show, 0 discard.
 typedef void *(*laSubUIThemeF)(void* parent, void* inst); // return a theme, MAIN.CurrentTheme can always be referenced to produce invert.
 typedef int (*laSubUIGapF)(void* parent, void* inst);
+typedef void (*laSubUICategoryF)(void* parent, void* inst, char *copy_result, char** direct_result);
 typedef void* (*laRawGetF)(void *, int* r_size, int* return_is_a_copy);
 typedef int (*laRawGetSizeF)(void *);
 typedef void (*laRawSetF)(void *, void* data, int copy_size);
@@ -341,6 +342,7 @@ STRUCTURE(laSubProp){
     laSubUIFilterF UiFilter;
     laSubUIThemeF GetTheme;
     laSubUIGapF GetGap;
+    laSubUICategoryF GetCategory;
     int ListHandleOffset;
 
     laSubTypeDetachedGet DetachedGet;
@@ -792,7 +794,7 @@ laProp *laAddSubGroup(laPropContainer *Container, const char *Identifier, const
                       const char *TargetId, laGetNodeTypeFunc GetType, laWidget* DefaultWidget, laUiDefineFunc DefaultUiDef,
                       int OffsetSize, laSubGetInstanceF Get, laSubGetInstanceF GetActive, laSubGetNextF GetNext, laSubSetInstanceF Set,
                       laSubGetStateF GetState, laSubSetStateF SetState, int ListHandleOffset, u64bit Tag);
-void laSubGroupExtraFunctions(laProp* p, laSubUIFilterF* UiFilter, laSubUIThemeF* GetTheme, laSubUIGapF GetGap);
+void laSubGroupExtraFunctions(laProp* p, laSubUIFilterF* UiFilter, laSubUIThemeF* GetTheme, laSubUIGapF GetGap, laSubUICategoryF GetCategory);
 void laSubGroupDetachable(laProp *SubProp, laSubTypeDetachedGet DetachedGet, laSubTypeDetachedGetNext DetachedGetNext);
 
 laProp *laAddOperatorProperty(laPropContainer *Container, const char *Identifier, const char *Name, const char *Description,
@@ -813,9 +815,11 @@ void laAppendInstance(laSubProp *sub, void *FromInstance, void *Instance);
 int laGetUiState(laProp *sub, void *Instance);
 laBoxedTheme* laGetUiTheme(laProp *sub, void* parent, void *Instance);
 int laGetUiGap(laProp *sub, void* parent, void *Instance);
+void laGetCategory(laProp *sub, void* parent, void *Instance, char* buf, char** buf_ptr);
 int laCanGetState(laProp *sub);
 int laCanGetTheme(laProp *sub);
 int laCanGetGap(laProp *sub);
+int laCanGetCategory(laProp *sub);
 int laSetState(laProp *sub, void *FromInstance, void *Instance, int State);
 
 laPropContainer *la_SetGeneralRoot(laPropContainer **GeneralRoot, const char *Identifier, const char *Name, const char *Description);
@@ -829,7 +833,6 @@ void laSetRootInstance(void *root);
 
 void la_RegisterMainUiTypes();
 void la_RegisterMainThemes();
-void la_RegisterInternalTemplates();
 void la_RegisterInternalProps();
 
 void la_PrintPropStructure();

+ 5 - 3
la_interface.h

@@ -280,6 +280,8 @@ STRUCTURE(LA){
     laWindow *CurrentWindow;
     laPanel *CurrentPanel;
 
+    int InitDone;
+
     int SpecialKeyStates;
     laKeyMapper KeyMap;
 
@@ -313,6 +315,7 @@ STRUCTURE(LA){
     laListHandle Themes;
     laListHandle UiTypes;
     
+    laListHandle InitPanelTemplates;
     laListHandle PanelTemplates;
     laListHandle View2DTemplates;
     laUiDefineFunc MenuButtons;
@@ -847,6 +850,7 @@ STRUCTURE(laUiTemplate){
     laListItem Item;
     laSafeString *Title;
     laSafeString *Identifier;
+    laSafeString *CategoryName;
     laUiDefineFunc          Define;
     laUiDefineFunc          Header;
     laPanelDetachedPropFunc PropFunc;
@@ -1717,7 +1721,7 @@ laUiTemplate *laFindUiTemplate(char *Identifier);
 
 void la_DestroyUiTemplate(laUiTemplate* uit);
 void la_DestroyCanvasTemplate(laCanvasTemplate* uit);
-laUiTemplate *laRegisterUiTemplate(char *Identifier, char* Title, laUiDefineFunc func,laPanelDetachedPropFunc PropFunc, laUiDefineFunc header);
+laUiTemplate *laRegisterUiTemplate(char *Identifier, char* Title, laUiDefineFunc func,laPanelDetachedPropFunc PropFunc, laUiDefineFunc header, char* NewCategory);
 laCanvasTemplate *laRegisterCanvasTemplate(char *Identifier, char *ForContainer, laModalFunc ExtraModal, laCanvasDrawFunc Func, laUiDrawFunc SecondDraw, laUiInitFunc CustomInit, laUiDestroyFunc CustomDestroy);
 
 void laGet2DViewRange(laCanvasExtra *e, int *L, int *R, int *U, int *B);
@@ -1840,8 +1844,6 @@ void laui_DefaultPropUiDefine(laUiList *uil, laPropPack *This, laPropPack *Opera
 
 int laCopyToClipboard(unsigned char * text);
 
-void laRegisterInternalNodes() ;
-
 extern laUiType *_LA_UI_FIXED_GROUP;
 extern laUiType *_LA_UI_TAB;
 extern laUiType _LA_UI_CONDITION;      //NO PTR

+ 36 - 22
la_kernel.c

@@ -437,7 +437,7 @@ int laGetReady(){
 
     //tns_RegisterResourcesForSoftwareRender();
     la_RegisterGeneralProps();
-    la_RegisterInternalTemplates();
+    la_RegisterBuiltinTemplates();
     la_RegisterMainThemes();
     la_RegisterMainOperators();
     la_RegisterMainUiTypes();
@@ -466,6 +466,7 @@ int laGetReady(){
     laSaveProp("la.input_mapping");
 
     logPrint("Initialization Completed\n");
+    MAIN.InitDone=1;
 }
 
 void laShutoff(){
@@ -3296,17 +3297,6 @@ laUiList *laAddTabPage(laUiItem *ui, const char *Name){
 
     return uil;
 }
-laUiList *laAddTabPageInternal(laUiItem *ui, const char *Name){
-    laUiList *uil = memAcquireSimple(sizeof(laUiList));
-
-    if (!ui->Page) ui->Page = uil;
-    lstAppendItem(&ui->Subs, uil);
-    strSafeSet(&uil->TabName, Name);
-
-    //laFirstColumn(uil);
-
-    return uil;
-}
 laUiList *la_AddInstancePage(laUiItem *ui, void *Instance, laWidget* Widget){
     laUiList *uil = memAcquireSimple(sizeof(laUiList));
 
@@ -3819,6 +3809,9 @@ laUiTemplate *laFindUiTemplate(char *Identifier){
     for (uit = MAIN.PanelTemplates.pFirst; uit; uit = uit->Item.pNext){
         if (!strcmp(uit->Identifier->Ptr, Identifier)) return uit;
     }
+    for (uit = MAIN.InitPanelTemplates.pFirst; uit; uit = uit->Item.pNext){
+        if (!strcmp(uit->Identifier->Ptr, Identifier)) return uit;
+    }
     return 0;
 }
 
@@ -3833,14 +3826,15 @@ void la_DestroyCanvasTemplate(laCanvasTemplate* uit){
     laKeyMapItem* kmi; while(kmi=lstPopItem(&uit->KeyMapper.Items)){ la_FreeKeyMapItem(kmi); }
     memFree(uit);
 }
-laUiTemplate *laRegisterUiTemplate(char *Identifier, char* Title, laUiDefineFunc func,laPanelDetachedPropFunc PropFunc, laUiDefineFunc header){
+laUiTemplate *laRegisterUiTemplate(char *Identifier, char* Title, laUiDefineFunc func,laPanelDetachedPropFunc PropFunc, laUiDefineFunc header, char* NewCategory){
     laUiTemplate *uit = memAcquire(sizeof(laUiTemplate));
     strSafeSet(&uit->Identifier, Identifier);
     strSafeSet(&uit->Title, Title);
+    strSafeSet(&uit->CategoryName, NewCategory);
     uit->Define = func;
     uit->Header = header;
     uit->PropFunc = PropFunc;
-    lstAppendItem(&MAIN.PanelTemplates, uit);
+    if(MAIN.InitDone) lstAppendItem(&MAIN.PanelTemplates, uit); else lstAppendItem(&MAIN.InitPanelTemplates, uit);
     la_UDFAppendSharedTypePointer(Identifier, uit);
     return uit;
 }
@@ -4326,8 +4320,8 @@ int la_UpdateUiListRecursive(laUiList *uil, int U, int L, int R, int B, int Fast
                 real ElementWidth = ElementLimit ? 1.0f / ElementLimit : 1.0;
                 int MaxB = ElementB;
                 int CanGetTheme = laCanGetTheme(ui->PP.LastPs->p);laTheme* OriginalTheme=MAIN.CurrentTheme;
-                int CanGetGap= laCanGetGap(ui->PP.LastPs->p);
-                int Gap=0;
+                int CanGetGap= laCanGetGap(ui->PP.LastPs->p); int Gap=0;
+                int CanGetCategory= laCanGetCategory(ui->PP.LastPs->p); char _cat[256]; char* cat=_cat; int GotCategory=0;
 
                 if (!ElementLimit) RowPriority = 0;
 
@@ -4352,6 +4346,15 @@ int la_UpdateUiListRecursive(laUiList *uil, int U, int L, int R, int B, int Fast
                         int g=laGetUiGap(ui->PP.LastPs->p, ui->PP.LastPs->UseInstance, ui->PP.EndInstance); g=g<0?0:g;
                         Gap=g*LA_RH;
                     }else Gap=0;
+                    if(CanGetCategory){ _cat[0]=0; cat=_cat; GotCategory=0;
+                        laGetCategory(ui->PP.LastPs->p, ui->PP.LastPs->UseInstance, ui->PP.EndInstance, _cat, &cat); if(cat[0]) GotCategory=1;
+                    }else GotCategory=0;
+
+                    if(GotCategory){ Begin+=LA_RH*1.5+bt->TM; 
+                        if (RowPriority){
+                            Row += 1; Col=0; Begin = ElementB+bt->TM+LA_RH*1.5+bt->TM;
+                        }
+                    }
 
                     if (ElementLimit){
                         EL = tnsInterpolate(ui->TL, ui->TR, (Col)*ElementWidth);
@@ -4370,14 +4373,14 @@ int la_UpdateUiListRecursive(laUiList *uil, int U, int L, int R, int B, int Fast
                         if(FoundUil=la_GiveExistingPage(&TempPages, TInstance)){ lstAppendItem(&ui->Subs, FoundUil); iuil = FoundUil; }
                     }
                     if (!iuil){
-                            la_AddInstancePage(ui, TInstance, 0);
+                            la_AddInstancePage(ui, TInstance, 0); if(GotCategory){ strSafeSet(&ui->Page->TabName,cat); }
                             la_CalcUiTopInfluence(&uil->Columns, ui);
                             if (Template) laMakeUiListFromTemplate(ui->Page, Template, &ParentPanel->PP, &ParentPanel->PropLinkPP, &ui->PP, 0, &uil->Columns, ui->TemplateContext);
                             SubB = la_UpdateUiListRecursive(ui->Page, Gap+Begin+(NoDecal?0:bt->TM), EL+(NoDecal?0:bt->LM), ER-(NoDecal?0:bt->RM), B, Fast, ParentPanel) +(NoDecal?0:bt->TM);
                             ElementB = RowPriority ? (SubB > ElementB ? SubB : ElementB) : SubB;
                             iuil = ui->Page->Item.pNext;
                     }else{
-                        la_CalcUiTopInfluence(&uil->Columns, ui);
+                        la_CalcUiTopInfluence(&uil->Columns, ui); if(GotCategory){ strSafeSet(&iuil->TabName,cat); }
                         SubB = la_UpdateUiListRecursive(iuil, Gap+Begin+(NoDecal?0:bt->TM), EL+(NoDecal?0:bt->LM), ER-(NoDecal?0:bt->RM), B, Fast, ParentPanel) + (NoDecal?0:bt->TM);
                         ElementB = RowPriority ? (SubB > ElementB ? SubB : ElementB) : SubB;
                         la_CalcUiItemInfluence(&uil->Columns, ui);
@@ -4968,6 +4971,11 @@ int la_DrawUiListRecursive(laUiListDraw *uild, laUiList *uil, int L, int R, int
                         }
                     }
 
+                    if(sub->TabName && sub->TabName->Ptr){
+                        tnsDrawStringAuto(sub->TabName->Ptr,laThemeColor(bt,LA_BT_DISABLED|LA_BT_TEXT),ui->L+bt->LM+bt->LP,ui->R,sub->U-LA_RH,LA_TEXT_MONO);
+                        tnsFlush();
+                    }
+
                     if(CanGetTheme){
                         laTheme* t=laGetUiTheme(ui->PP.LastPs->p, ui->PP.LastPs->UseInstance, ui->PP.EndInstance);
                         la_SwitchThemeQuick(t, OriginalTheme);
@@ -6454,6 +6462,14 @@ int la_DrawWindow(laWindow *w){
     MAIN.CurrentWindow = w;
     la_WindowDefDraw(w, 0);
 }
+int laFinalize(){
+    if(!laValidateProperties()){ laShutoff(); return 0; }
+    
+    laUiTemplate* uit;
+    while(uit=lstPopItem(&MAIN.InitPanelTemplates)) lstAppendItem(&MAIN.PanelTemplates,uit);
+
+    return 1;
+}
 void laMainLoop(){
     laWindow *w = MAIN.Windows.pFirst, *NextW;
     laTimeRecorder FrameStartTime, FrameEndTime;
@@ -6461,12 +6477,10 @@ void laMainLoop(){
     real TimeInterval, Pause, TimeAccum = 0, FrameInterval;
     static int a = 0;
 
-    if(!laValidateProperties()){ laShutoff(); return; }
+    if(!laFinalize()) return;
 
     MAIN.DelayTriggered=1;
 
-    laCopyToClipboard("Hello clipboard!");
-
     while (1){
         laRecordTime(&FrameStartTime);
 
@@ -6511,4 +6525,4 @@ void laMainLoop(){
         MAIN.TimeAccum += (MAIN.LastFrameTime = Pause+TimeInterval);
         FrameInterval = 1.0 / MAIN.Animation.FrameRate;
     }
-}
+}

+ 0 - 4
la_resource.c

@@ -203,7 +203,3 @@ void la_RegisterMainThemes(){
         la_RefreshThemeColor(t);
     }
 }
-
-void la_RegisterInternalTemplates(){
-    la_RegisterBuiltinTemplates();
-}

+ 1 - 1
resources/la_nodes_basic.c

@@ -681,7 +681,7 @@ void la_RegisterInputMapperOperators(){
     pc=laAddPropertyContainer("la_node_rack", "Input Rack", "Input rack for putting input mapping nodes",0,0,sizeof(laNodeRack),0,0,1);
     laAddStringProperty(pc,"name","Name","Name of this rack",0,0,0,0,1,offsetof(laNodeRack,Name),0,0,0,0,LA_AS_IDENTIFIER);
     p=laAddSubGroup(pc,"nodes","Nodes","Nodes under this rack","la_base_node",laget_BaseNodeType,0,0,-1,0,0,0,0,0,0,offsetof(laNodeRack,Nodes),0);
-    laSubGroupExtraFunctions(p,0,laget_NodeGetTheme,laget_BaseNodeGap);
+    laSubGroupExtraFunctions(p,0,laget_NodeGetTheme,laget_BaseNodeGap,0);
     laAddSubGroup(pc,"parent_page","Parent Page","Parent page of this rack","la_rack_page",0,0,0,offsetof(laNodeRack,ParentPage),0,0,0,0,0,0,0,LA_UDF_REFER);
     laAddIntProperty(pc,"type", "Type", "Type of the rack", 0,0,0,0,0,0,0,0,offsetof(laNodeRack,RackType),0,0,0,0,0,0,0,0,0,0,LA_READ_ONLY);
     laAddOperatorProperty(pc,"add_node","Add Node","Add a node into this rack","OPINV_AddNode",'+',0);

+ 4 - 1
resources/la_operators.c

@@ -850,7 +850,7 @@ void laui_PanelTemplateSelect(laUiList *uil, laPropPack *This, laPropPack *Opera
 
     gp = OperatorProps->LastPs->p;
     
-    laShowItem(uil, c, OperatorProps, "template");
+    laShowItem(uil, c, OperatorProps, "template")->SymbolID=2;
 }
 
 int OPINV_NewLayout(laOperator *a, laEvent *e){
@@ -1838,6 +1838,8 @@ int OPINV_OpenInternetLink(laOperator *a, laEvent *e){
     return LA_FINISHED;
 }
 
+void laget_PanelTemplateCategory(void* rack_unused, laUiTemplate* uit, char* copy, char** ptr);
+
 void la_RegisterBuiltinOperators(){
     laPropContainer *pc; laProp *p;
     laOperatorType *at;
@@ -1867,6 +1869,7 @@ void la_RegisterBuiltinOperators(){
                           0, 0, 0, OPINV_NewPanel, OPMOD_NewPanel, L'🞆', LA_ACTUATOR_SYSTEM);
     pc = laDefineOperatorProps(at, 0);
     p = laAddSubGroup(pc, "template", "Template", "Template selection used to create the new panel", "panel_template", 0, 0, laui_TitleOnly, -1, laget_FirstPanelTemplate, laget_NewPanelGetActiveTemplate, laget_ListNext, 0, 0, laset_NewPanelSetTemplate,0,0);
+    laSubGroupExtraFunctions(p,0,0,0,laget_PanelTemplateCategory);
     at->UiDefine=laui_PanelTemplateSelect;
 
     laCreateOperatorType("LA_block_fold_title", "Fold Title", "Fold the tile bar of the block", 0, 0, 0, OPINV_BlockFoldTitle, 0, L'⯅', LA_ACTUATOR_SYSTEM);

+ 6 - 2
resources/la_properties.c

@@ -567,6 +567,9 @@ void laread_UiOperatorID(laUiItem *ui, char *Content){
 void *laget_PanelTemplate(void *UNUSED, void *UNUSED2){
     return MAIN.PanelTemplates.pFirst;
 }
+void laget_PanelTemplateCategory(void* rack_unused, laUiTemplate* uit, char* copy, char** ptr){
+    if(uit->CategoryName&&uit->CategoryName->Ptr) *ptr=uit->CategoryName->Ptr;
+}
 
 void lapost_Window(laWindow *w){
     la_CreateSystemWindow(w);
@@ -898,7 +901,8 @@ void la_RegisterInternalProps(){
             laAddSubGroup(p, "managed_props", "Managed Props", "Managed properties for saving", "managed_prop",0, 0, 0, -1, 0, 0, 0, 0, 0, 0, offsetof(LA, ManagedSaveProps), LA_UDF_IGNORE|LA_READ_ONLY);
             laAddSubGroup(p, "managed_udfs", "Managed UDFs", "Managed UDFs for saving", "managed_udf", 0, 0, laui_ManagedUDFOps, -1, 0, 0, 0, 0, 0, 0, offsetof(LA, ManagedUDFs), LA_UDF_IGNORE|LA_READ_ONLY);
             laAddSubGroup(p, "user_preferences", "User Preference", "Kernel Settings For LA Main Structure", "la_user_preference",0, 0, 0, -1, laget_Main, 0, 0, 0, 0, 0, 0, LA_UDF_LOCAL);
-            laAddSubGroup(p, "panel_templates", "Panel Templates", "Panel templates used to create new panel", "panel_template",0, 0, 0, -1, 0, 0, 0, 0, 0, 0, offsetof(LA, PanelTemplates), 0);
+            sp=laAddSubGroup(p, "panel_templates", "Panel Templates", "Panel templates used to create new panel", "panel_template",0, 0, 0, -1, 0, 0, 0, 0, 0, 0, offsetof(LA, PanelTemplates), 0);
+            laSubGroupExtraFunctions(sp,0,0,0,laget_PanelTemplateCategory);
 
             laAddSubGroup(p, "themes", "Themes", "Themes Loded In The Program", "theme",0, 0, laui_Theme, -1, 0, laget_ActiveTheme, 0, laset_ActiveTheme, 0, 0, offsetof(LA,Themes), 0);
 
@@ -907,7 +911,7 @@ void la_RegisterInternalProps(){
             LA_PROP_CONTROLLER=sp;
 
             sp=laAddSubGroup(p, "node_categories", "Node Categories", "Node categories","la_node_category",0,0,0,offsetof(LA,CurrentNodeCategory),0,0,0,0,0,0,offsetof(LA,NodeCategories),0);
-            laSubGroupExtraFunctions(sp,lafilter_NodeCategory,0,0);
+            laSubGroupExtraFunctions(sp,lafilter_NodeCategory,0,0,0);
 
             laAddSubGroup(p, "input_mapping", "Input Mapping", "Input mapping page collection","la_input_mapping_collection",0,0,0,offsetof(LA,InputMapping),0,0,0,0,0,0,0,LA_UDF_SINGLE);
             laAddSubGroup(p, "drivers", "Drivers", "Driver page collection","la_driver_collection",0,0,0,offsetof(LA,Drivers),0,0,0,0,0,0,0,LA_UDF_SINGLE);

+ 8 - 8
resources/la_templates.c

@@ -1493,12 +1493,12 @@ void laui_Drivers(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn *
 
 
 void la_RegisterBuiltinTemplates(){
-    laRegisterUiTemplate("LAUI_user_preferences", "User Preferences", laui_UserPreference, 0, 0);
-    laRegisterUiTemplate("LAUI_about", "About", laui_About, 0, 0);
-    laRegisterUiTemplate("LAUI_texture_inspector", "Texture Inspector", laui_TextureInspector, lauidetached_TextureInspector, 0);
-    laRegisterUiTemplate("LAUI_data_manager", "Data Manager", laui_IdleDataManager, lauidetached_IdleDataManager, 0);
-    laRegisterUiTemplate("LAUI_terminal", "Terminal", laui_terminal, 0, 0);
-    laRegisterUiTemplate("LAUI_controllers", "Controllers", laui_GameController, lauidetached_GameController, 0);
-    laRegisterUiTemplate("LAUI_input_mapper","Input Mapper",laui_InputMapper,0,0);
-    laRegisterUiTemplate("LAUI_drivers","Drivers",laui_Drivers,lauidetached_Drivers,0);
+    laRegisterUiTemplate("LAUI_input_mapper","Input Mapper",laui_InputMapper,0,0,"Controlling");
+    laRegisterUiTemplate("LAUI_drivers","Drivers",laui_Drivers,lauidetached_Drivers,0,0);
+    laRegisterUiTemplate("LAUI_controllers", "Controllers", laui_GameController, lauidetached_GameController, 0,0);
+    laRegisterUiTemplate("LAUI_user_preferences", "User Preferences", laui_UserPreference, 0, 0, "System");
+    laRegisterUiTemplate("LAUI_about", "About", laui_About, 0, 0, 0);
+    laRegisterUiTemplate("LAUI_texture_inspector", "Texture Inspector", laui_TextureInspector, lauidetached_TextureInspector, 0, 0);
+    laRegisterUiTemplate("LAUI_data_manager", "Data Manager", laui_IdleDataManager, lauidetached_IdleDataManager, 0, 0);
+    laRegisterUiTemplate("LAUI_terminal", "Terminal", laui_terminal, 0, 0, 0);
 }