|  | @@ -508,12 +508,15 @@ void laread_ConditionNodeType(laUiConditionNode *ucn, int Type){
 | 
	
		
			
				|  |  |      ucn->Type = Type;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void* laget_FirstDriverPage(void* unused, void* unused2){
 | 
	
		
			
				|  |  | -    return MAIN.Drivers->Pages.pFirst;
 | 
	
		
			
				|  |  | +void* laget_FirstDriverPage(laRackPageCollection* rpc, void* unused2){
 | 
	
		
			
				|  |  | +    return rpc->Pages.pFirst;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void* laget_CurrentRackPage(laRackPageCollection* c){
 | 
	
		
			
				|  |  |      return c->CurrentPage;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +void laset_CurrentRackPage(laRackPageCollection* c,laRackPage* rp){
 | 
	
		
			
				|  |  | +    memAssignRef(c,&c->CurrentPage,rp);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  void* laget_CurrentAnimationAction(void* unused_a){
 | 
	
		
			
				|  |  |      return MAIN.Animation->CurrentAction;
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -753,7 +756,7 @@ void lapost_DetachedProp(laProp *Prop){
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void latouched_NodeInSocket(void* unused, int hint){
 | 
	
		
			
				|  |  | -    laDriverRequestRebuild(); laMappingRequestRebuild();
 | 
	
		
			
				|  |  | +    laGraphRequestRebuild();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int lafilter_NodeCategory(void* unused, laNodeCategory* c){
 | 
	
	
		
			
				|  | @@ -1024,13 +1027,16 @@ void la_RegisterInternalProps(){
 | 
	
		
			
				|  |  |              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);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  |              laAddSubGroup(p, "animation", "Animation", "Animation data","la_animation",0,0,0,offsetof(LA,Animation),0,0,0,0,0,0,0,LA_UDF_SINGLE);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              laAddStringProperty(p, "identifier", "Identifier", "Identifier", 0,0,0,0,0,0,0,laget_MainIdentifier, 0,0,LA_AS_IDENTIFIER|LA_READ_ONLY);
 | 
	
		
			
				|  |  |              laAddSubGroup(p, "test_ucn", "TEST UCN", "---", "udf_content_node",0,0,0,offsetof(LA, TEST_Link), 0,0,0,0,0,0,0,0);
 | 
	
		
			
				|  |  |              
 | 
	
		
			
				|  |  | +            ep=laAddEnumProperty(p, "detached_view_switch", "View Detached", "Use detached view on panels", LA_WIDGET_ENUM_HIGHLIGHT,0,0,0,0,offsetof(LA, DetachedViewSwitch),0,0,0,0,0,0,0,0,0,LA_UDF_IGNORE);
 | 
	
		
			
				|  |  | +            laAddEnumItemAs(ep, "LINKED", "Linked", "View is linked to global current states", 0, U'🔗');
 | 
	
		
			
				|  |  | +            laAddEnumItemAs(ep, "DETACHED", "Detached", "View is detached from global states and is pinned to panel", 1, U'📌');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              laAddIntProperty(p, "example_int", "Example Integer", "Example integer", 0,0,0,100,0,1, 50,0,offsetof(LA, example_int), 0,0,0,0,0,0,0,0,0,0,0);
 | 
	
		
			
				|  |  |              laAddStringProperty(p, "example_string", "Example String", "Example string", 0,0,0,0,1, offsetof(LA,example_string), 0,0,0,0,0);
 | 
	
		
			
				|  |  |              laAddStringProperty(p, "unknown_prop", "Unknown Property", "Placeholder for unknown property, probably due to a wrong property path, or not setting LA_AS_IDENTIFIER in any of the properties.",
 | 
	
	
		
			
				|  | @@ -1049,8 +1055,8 @@ void la_RegisterInternalProps(){
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          p = laAddPropertyContainer("la_driver_collection", "Driver Collection", "Driver collection", 0,0,sizeof(laRackPageCollection), 0,0,1);{
 | 
	
		
			
				|  |  |              laAddSubGroup(p, "pages", "Pages", "Rack pages","la_rack_page",0,0,0,-1,0,laget_CurrentRackPage,0,0,0,0,offsetof(laRackPageCollection,Pages),0);
 | 
	
		
			
				|  |  | -            sp=laAddSubGroup(p, "current_page", "Current Page", "Current page","la_rack_page",0,0,0,offsetof(laRackPageCollection,CurrentPage),0,0,0,0,0,0,0,LA_UDF_REFER);
 | 
	
		
			
				|  |  | -            laSubGroupDetachable(sp,laget_FirstDriverPage,laget_ListNext);
 | 
	
		
			
				|  |  | +            sp=laAddSubGroup(p, "current_page", "Current Page", "Current page","la_rack_page",0,0,0,offsetof(laRackPageCollection,CurrentPage),laget_FirstDriverPage,0,laget_ListNext,laset_CurrentRackPage,0,0,0,LA_UDF_REFER);
 | 
	
		
			
				|  |  | +            //laSubGroupDetachable(sp,laget_FirstDriverPage,laget_ListNext);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          p = laAddPropertyContainer("la_rack_page", "Rack Page", "A page of nodes", 0,laui_IdentifierOnly, sizeof(laRackPage), 0,0,2);{
 | 
	
	
		
			
				|  | @@ -1059,6 +1065,13 @@ void la_RegisterInternalProps(){
 | 
	
		
			
				|  |  |              laAddIntProperty(p,"type", "Type", "Type of the rack", 0,0,0,0,0,0,0,0,offsetof(laRackPage,RackType),0,0,0,0,0,0,0,0,0,0,LA_READ_ONLY);
 | 
	
		
			
				|  |  |              laAddIntProperty(p,"has_rack", "Has Rack", "Has rack", 0,0,0,0,0,0,0,0,offsetof(laRackPage,Racks.pFirst),0,0,0,0,0,0,0,0,0,0,LA_READ_ONLY|LA_UDF_IGNORE);
 | 
	
		
			
				|  |  |              laAddSubGroup(p, "racks", "Racks", "Racks for nodes","la_node_rack",0,0,0,-1,0,0,0,0,0,0,offsetof(laRackPage,Racks),0);
 | 
	
		
			
				|  |  | +            ep=laAddEnumProperty(p, "trigger", "Trigger", "Trigger evaluation on event",0,0,0,0,0,offsetof(laRackPage,TriggerMode),0,0,0,0,0,0,0,0,0,0);
 | 
	
		
			
				|  |  | +            laAddEnumItemAs(ep, "ALWAYS", "Always", "Always evalueave this page",LA_PAGE_TRIGGER_ALWAYS,0);
 | 
	
		
			
				|  |  | +            laAddEnumItemAs(ep, "NONE", "None", "This page is only evaluated when called from other pages",LA_PAGE_TRIGGER_NONE,0);
 | 
	
		
			
				|  |  | +            ep=laAddEnumProperty(p, "use_script", "Use Script", "Use script instead of nodes",0,0,0,0,0,offsetof(laRackPage,UseScript),0,0,0,0,0,0,0,0,0,0);
 | 
	
		
			
				|  |  | +            laAddEnumItemAs(ep, "NODES", "Nodes", "Use nodes to express logic",0,0);
 | 
	
		
			
				|  |  | +            laAddEnumItemAs(ep, "SCRIPT", "Script", "Use scripts to express logic",1,0);
 | 
	
		
			
				|  |  | +            laAddStringProperty(p, "script", "Script", "Script content",LA_WIDGET_STRING_MULTI,0,0,0,1,offsetof(laRackPage, Script), 0,0,0,0,0);
 | 
	
		
			
				|  |  |              laAddOperatorProperty(p,"add_rack","Add Rack", "Add a rack into the page", "LA_add_rack", '+', 0);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1567,6 +1580,8 @@ void la_RegisterInternalProps(){
 | 
	
		
			
				|  |  |          laAddSubGroup(p, "parent", "Parent", "Object parent", "tns_object",0,0,0,offsetof(tnsObject, ParentObject), 0,0,0,0,0,0,0,LA_UDF_REFER);
 | 
	
		
			
				|  |  |          laAddSubGroup(p, "children", "Children", "The Children Of This Object", "tns_child_object",0,0,0,-1, 0,0,0,0,0,0,offsetof(tnsObject, ChildObjects), 0);
 | 
	
		
			
				|  |  |          laAddSubGroup(p, "__actions__", "Actions", "Animation actions", "la_animation_action",0,0,0,-1,0,laget_CurrentAnimationAction,0,laset_CurrentAnimationAction,0,0,offsetof(tnsObject, Actions), 0);
 | 
	
		
			
				|  |  | +        laAddSubGroup(p, "drivers", "Drivers", "Driver page collection","la_driver_collection",0,0,0,offsetof(tnsObject,Drivers),0,0,0,0,0,0,0,LA_UDF_SINGLE);
 | 
	
		
			
				|  |  | +        laAddOperatorProperty(p, "add_driver_page", "Add Page", "Add a driver page","LA_add_driver_page",'+',0);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      p = laAddPropertyContainer("tns_mesh_object", "Mesh Object", "Mesh object", 0,0,sizeof(tnsMeshObject), tnspost_Object, 0,2);{
 | 
	
		
			
				|  |  |          laPropContainerExtraFunctions(p,0,0,tnstouched_Object,0/*tnspropagate_Object*/,0);
 |