*/}}
Browse Source

node api changes

Yiming Wu 2 years ago
parent
commit
73d3db966d
4 changed files with 20 additions and 22 deletions
  1. 2 0
      la_interface.h
  2. 12 16
      resources/la_nodes_basic.c
  3. 5 5
      resources/la_templates.c
  4. 1 1
      resources/la_tns_drivers.c

+ 2 - 0
la_interface.h

@@ -1329,6 +1329,7 @@ STRUCTURE(laRackPage){
     laListItem Item;
     laSafeString* Name;
     laListHandle Racks;
+    int RackType;
 };
 #define LA_RACK_TYPE_INPUT (1<<0)
 #define LA_RACK_TYPE_DRIVER (1<<1)
@@ -1444,6 +1445,7 @@ void la_RegenerateWireColors();
 void laui_IntPropInfo(laUiList *uil, laPropPack *Base, laPropPack *UNUSED_This, laColumn *ExtraColumns, int context);
 void laui_FloatPropInfo(laUiList *uil, laPropPack *Base, laPropPack *UNUSED_This, laColumn *ExtraColumns, int context);
 
+void laui_RackPage(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn *UNUSED, int context);
 void laui_DefaultPropDetails(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn *UNUSED, int context);
 void laui_DefaultNodeOperationsPropUiDefine(laUiList *uil, laPropPack *This, laPropPack *OperatorProps, laColumn *UNUSED, int context);
 void laui_DefaultPropUiDefine(laUiList *uil, laPropPack *This, laPropPack *OperatorProps, laColumn *UNUSED, int context);

+ 12 - 16
resources/la_nodes_basic.c

@@ -471,18 +471,17 @@ void laui_MathNode(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn
 int OPINV_AddInputMapperPage(laOperator* a, laEvent *e){
     laRackPage* dp=memAcquireHyper(sizeof(laRackPage));
     strSafeSet(&dp->Name,"New Page");
-    lstAppendItem(&MAIN.InputMapping->Pages, dp); MAIN.InputMapping->CurrentPage=dp;
+    lstAppendItem(&MAIN.InputMapping->Pages, dp); MAIN.InputMapping->CurrentPage=dp; dp->RackType=LA_RACK_TYPE_INPUT;
     laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Add Page", 0);
     return LA_FINISHED;
 }
 int OPINV_AddNodesRack(laOperator* a, laEvent *e){
     laRackPage* dp=a->This?a->This->EndInstance:0; if(!dp) return LA_FINISHED;
     laNodeRack* ir=memAcquire(sizeof(laNodeRack));
-    char* type=strGetArgumentString(a->ExtraInstructionsP, "type");
     strSafeSet(&ir->Name,"New Rack");
     lstAppendItem(&dp->Racks, ir); ir->ParentPage=dp;
-    if(strSame(type,"DRIVER")){ ir->RackType=LA_RACK_TYPE_DRIVER; laNotifyUsers("la.drivers"); laRecordAndPush(0,"la.drivers","Add rack", 0); }
-    else{ ir->RackType=LA_RACK_TYPE_INPUT; laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Add rack", 0); }
+    ir->RackType=dp->RackType;
+    laNotifyInstanceUsers(dp); laRecordInstanceDifferences(dp,"la_node_rack"); laPushDifferences("Add Rack", 0);
     return LA_FINISHED;
 
 }
@@ -494,8 +493,7 @@ int OPINV_RebuildInputMapping(laOperator* a, laEvent *e){
 laBaseNode* la_CreateNode(laNodeRack* ir, laBaseNodeType* NodeType){
     laBaseNode* bn=memAcquire(NodeType->NodeSize);
     bn->Type=NodeType; NodeType->Init(bn); lstAppendItem(&ir->Nodes, bn); bn->InRack=ir;
-    if(ir->RackType==LA_RACK_TYPE_INPUT){ laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Add node", 0); }
-    else{ laNotifyUsers("la.drivers"); laRecordAndPush(0,"la.drivers","Add node", 0); }
+    laNotifyInstanceUsers(ir); laRecordInstanceDifferences(ir,"la_node_rack"); laPushDifferences("Add Node", 0);
     return bn;
 }
 void la_DestroyInputMapperNode(laBaseNode* bn){
@@ -548,22 +546,22 @@ int OPINV_MoveNodeToRack(laOperator* a, laEvent *e){
 
     char* direction=strGetArgumentString(a->ExtraInstructionsP,"direction");
     
-    if(n->InRack->RackType==LA_RACK_TYPE_DRIVER){ laNotifyUsers("la.drivers"); }
-    else{ laNotifyUsers("la.input_mapping"); }
     if(strSame(direction,"left")) target=n->InRack->Item.pPrev; else target=n->InRack->Item.pNext;
     if(!target) return LA_CANCELED;
 
     lstRemoveItem(&n->InRack->Nodes, n); lstAppendItem(&target->Nodes,n); n->InRack=target;
 
+    laNotifyInstanceUsers(n->InRack->ParentPage); laRecordInstanceDifferences(n->InRack->ParentPage,"la_node_page"); laPushDifferences("Move Node", 0);
+
     return LA_FINISHED;
 }
 int OPINV_DeleteNode(laOperator* a, laEvent *e){
     laBaseNode* n=a->This?a->This->EndInstance:0; if(!n||!n->InRack) return LA_CANCELED;
     laBaseNodeType* bnt=0; laNodeRack* target;
+    laNodeRack* parent=n->InRack;
 
-    if(n->InRack->RackType==LA_RACK_TYPE_DRIVER){ laDriverRequestRebuild(); laNotifyUsers("la.drivers"); }
-    else{ laMappingRequestRebuild(); laNotifyUsers("la.input_mapping"); }
     lstRemoveItem(&n->InRack->Nodes, n); n->Type->Destroy(n); memLeave(n);
+    laNotifyInstanceUsers(parent); laRecordInstanceDifferences(parent,"la_node_rack"); laPushDifferences("Delete Node", 0);
 
     return LA_FINISHED;
 }
@@ -573,8 +571,7 @@ int OPINV_MoveRack(laOperator* a, laEvent *e){
 
     if(strSame(direction,"left")) lstMoveUp(&r->ParentPage->Racks,r); else lstMoveDown(&r->ParentPage->Racks,r);
 
-    if(r->RackType==LA_RACK_TYPE_DRIVER){ laNotifyUsers("la.drivers");  laRecordAndPush(0,"la.drivers","Move rack", 0); }
-    else{ laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Move rack", 0); }
+    laNotifyInstanceUsers(r->ParentPage); laRecordInstanceDifferences(r->ParentPage,"la_rack_page"); laPushDifferences("Move Rack", 0);
     return LA_FINISHED;
 }
 int OPINV_InsertRack(laOperator* a, laEvent *e){
@@ -582,17 +579,16 @@ int OPINV_InsertRack(laOperator* a, laEvent *e){
     laNodeRack* r=memAcquire(sizeof(laNodeRack));
     strSafeSet(&r->Name,"New Rack");
     lstInsertItemAfter(&rr->ParentPage->Racks,r,rr); r->ParentPage=rr->ParentPage; r->RackType=rr->RackType;
-    if(r->RackType==LA_RACK_TYPE_DRIVER){ laNotifyUsers("la.drivers"); laRecordAndPush(0,"la.drivers","Insert rack", 0); }
-    else{ laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Insert rack", 0); }
+    laNotifyInstanceUsers(r->ParentPage); laRecordInstanceDifferences(r->ParentPage,"la_rack_page"); laPushDifferences("Insert Rack", 0);
     return LA_FINISHED;
 }
 int OPINV_DeleteRack(laOperator* a, laEvent *e){
     laNodeRack* rr=a->This?a->This->EndInstance:0; if(!rr) return LA_CANCELED;
     if(strSame(strGetArgumentString(a->ExtraInstructionsP,"confirm"),"true")){
         laBaseNode* n; while(n=lstPopItem(&rr->Nodes)){ n->Type->Destroy(n); memLeave(n); }
+        laRackPage* page=rr->ParentPage;
         strSafeDestroy(&rr->Name); lstRemoveItem(&rr->ParentPage->Racks, rr); memLeave(rr);
-        if(rr->RackType==LA_RACK_TYPE_DRIVER){ laNotifyUsers("la.drivers"); laRecordAndPush(0,"la.input_mapping","Delete rack", 0); }
-        else{ laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Delete rack", 0); }
+        laNotifyInstanceUsers(page); laRecordInstanceDifferences(page,"la_rack_page"); laPushDifferences("Delete Rack", 0);
         return LA_FINISHED;
     }
     laEnableOperatorPanel(a,a->This,e->x,e->y,200,200,0,0,0,0,0,0,0,0,e);

+ 5 - 5
resources/la_templates.c

@@ -1164,12 +1164,12 @@ void laui_NodeRack(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn
     laShowLabel(uil,c,"\n\n\n",0,0);
 }
 void laui_RackPage(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn *UNUSED, int context){
-    laColumn* c=laFirstColumn(uil);
+    laColumn* c=laFirstColumn(uil); laRackPage* r=This->EndInstance;
     laUiItem* g=laMakeGroup(uil,c,"Racks",0);{ g->Flags|=/*LA_UI_FLAGS_NO_GAP|LA_UI_FLAGS_NO_DECAL|*/LA_UI_FLAGS_NODE_CONTAINER;
         laUiList* gu=g->Page; laColumn* gc=laFirstColumn(gu); gu->AllowScale=1; gu->HeightCoeff=-3; g->State=LA_UI_ACTIVE;
-        laUiItem* hui=laShowItemFull(gu,gc,This,"racks",0,0,laui_NodeRack,context); hui->Expand=15; hui->Flags|=LA_UI_FLAGS_NO_DECAL;
+        laUiItem* hui=laShowItemFull(gu,gc,This,"racks",0,0,laui_NodeRack,r?r->RackType:0); hui->Expand=15; hui->Flags|=LA_UI_FLAGS_NO_DECAL;
     }
-    laShowItemFull(uil,c,This,"add_rack",0,(context==LA_RACK_TYPE_DRIVER)?"type=DRIVER;":0,0,0);
+    laShowItemFull(uil,c,This,"add_rack",0,0,0,0);
 }
 void laui_NodeCategory(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn *UNUSED, int context){
     laColumn* c=laFirstColumn(uil); laNodeCategory* nc=This->EndInstance;
@@ -1479,7 +1479,7 @@ void laui_InputMapper(laUiList *uil, laPropPack *This, laPropPack *Extra, laColu
         laShowItemFull(uil,cr,0,"la.input_mapping.pages",LA_WIDGET_COLLECTION_SELECTOR,0,0,0);
     }laEndCondition(uil,b2);
     
-    laShowItemFull(uil,c,0,"la.input_mapping.current_page",LA_WIDGET_COLLECTION_SINGLE,0,laui_RackPage,LA_RACK_TYPE_INPUT);
+    laShowItemFull(uil,c,0,"la.input_mapping.current_page",LA_WIDGET_COLLECTION_SINGLE,0,laui_RackPage,0);
 }
 void lauidetached_Drivers(laPanel* p){
     la_MakeDetachedProp(p, "la.drivers.current_page", "page");
@@ -1501,7 +1501,7 @@ void laui_Drivers(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn *
         laShowItemFull(uil,cr,Extra,"page",LA_WIDGET_COLLECTION_SELECTOR,0,0,0);
     }laEndCondition(uil,b2);
     
-    laShowItemFull(uil,c,Extra,"page",LA_WIDGET_COLLECTION_SINGLE,0,laui_RackPage,LA_RACK_TYPE_DRIVER);
+    laShowItemFull(uil,c,Extra,"page",LA_WIDGET_COLLECTION_SINGLE,0,laui_RackPage,0);
 }
 
 

+ 1 - 1
resources/la_tns_drivers.c

@@ -116,7 +116,7 @@ void tnsui_MakeTransformNode(laUiList *uil, laPropPack *This, laPropPack *Extra,
 int OPINV_AddDriverPage(laOperator* a, laEvent *e){
     laRackPage* dp=memAcquire(sizeof(laRackPage));
     strSafeSet(&dp->Name,"New Page");
-    lstAppendItem(&MAIN.Drivers->Pages, dp); MAIN.Drivers->CurrentPage=dp;
+    lstAppendItem(&MAIN.Drivers->Pages, dp); MAIN.Drivers->CurrentPage=dp; dp->RackType=LA_RACK_TYPE_DRIVER;
     laNotifyUsers("la.drivers.pages"); laRecordAndPush(0,"la.drivers","Add page", 0);
     return LA_FINISHED;
 }