*/}}

la_data.h 33 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079
  1. /*
  2. * LaGUI: A graphical application framework.
  3. * Copyright (C) 2022-2023 Wu Yiming
  4. *
  5. * This program is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. #pragma once
  19. #include "la_5.h"
  20. #include "la_tns.h"
  21. /* | given to | given to | array | */
  22. /* | user | user calls | setting| */
  23. /* | callback | and is used | needs | */
  24. /* | callback | to recieve | offset | */
  25. /* | callback | array config| hint | */
  26. /* +----------+-------------+--------+ */
  27. /* | The | | | */
  28. /* | DataBlock| The | The | */
  29. /* return value | Name | Instance | Actual Data | Offset | */
  30. /*\ / \_ \ / _/ */
  31. /* \ / \_ \ / _/ */
  32. /* \ / \_ \ / _/ */
  33. /* \ / \_ \ / _/ */
  34. /* \ / \ \ / _/ */
  35. typedef int (*laArrayGetLenF)(void *);
  36. typedef int (*laIntGetF)(void *);
  37. typedef void (*laIntSetF)(void *, int);
  38. typedef void (*laIntReadF)(void *, int);
  39. typedef void (*laIntArrayGetAllF)(void *, int *);
  40. typedef void (*laIntArraySetF)(void *, int, int); //idx,n
  41. typedef void (*laIntArraySetAllF)(void *, int);
  42. typedef void (*laIntArraySetAllArrayF)(void *, int *);
  43. typedef void (*laIntArrayReadAllF)(void *, int *);
  44. typedef real (*laFloatGetF)(void *);
  45. typedef void (*laFloatSetF)(void *, real);
  46. typedef void (*laFloatReadF)(void *, real);
  47. typedef void (*laFloatArrayGetAllF)(void *, real *);
  48. typedef void (*laFloatArraySetF)(void *, int, real); //idx,n
  49. typedef void (*laFloatArraySetAllF)(void *, real);
  50. typedef void (*laFloatArraySetAllArrayF)(void *, real *);
  51. typedef void (*laFloatArrayReadAllF)(void *, real *);
  52. typedef int (*laEnumGetF)(void *);
  53. typedef int (*laEnumGetLengthF)(void *);
  54. typedef void (*laEnumSetF)(void *, int);
  55. typedef void (*laEnumReadF)(void *, int);
  56. typedef void (*laEnumArraySetF)(void *, int, int); //idx,n
  57. typedef void (*laEnumArraySetAllF)(void *, int *);
  58. typedef void (*laEnumArrayReadAllF)(void *, int *);
  59. typedef void (*laEnumArrayGetAllF)(void *, int *);
  60. typedef void (*laStringSetF)(void *, char *);
  61. typedef void (*laStringGetF)(void *, char *copy_result, char** direct_result);
  62. typedef void (*laStringReadF)(void *, char *);
  63. typedef int (*laStringGetLenF)(void *);
  64. typedef void (*laSubReadF)(void *, void *); //from,set
  65. typedef void *(*laSubGetInstanceF)(void *, void *); //from,iterator
  66. typedef void (*laSubSetInstanceF)(void *, void *);
  67. typedef void *(*laSubGetNextF)(void *, void *); //this,iterator
  68. typedef int (*laSubGetAmountF)(void *);
  69. typedef int (*laSubGetStateF)(void *);
  70. typedef int (*laSubSetStateF)(void *, void *, int);
  71. typedef void *(*laSubTypeDetachedGet)(void *, void *);
  72. typedef void *(*laSubTypeDetachedGetNext)(void *, void *);
  73. typedef void *(*laSubGetTypeF)(void *);// inst, returns type ref.
  74. typedef int (*laSubUIFilterF)(void* parent, void* inst); // 1 show, 0 discard.
  75. typedef int (*laSubSaveFilterF)(void* parent, void* inst); // 1 save, 0 discard.
  76. typedef void *(*laSubUIThemeF)(void* parent, void* inst); // return a theme, MAIN.CurrentTheme can always be referenced to produce invert.
  77. typedef int (*laSubUIGapF)(void* parent, void* inst);
  78. typedef void (*laSubUICategoryF)(void* parent, void* inst, char *copy_result, char** direct_result);
  79. typedef void* (*laRawGetF)(void *, int* r_size, int* return_is_a_copy);
  80. typedef int (*laRawGetSizeF)(void *);
  81. typedef void (*laRawSetF)(void *, void* data, int copy_size);
  82. typedef void (*laContainerPostReadFunc)(void *);
  83. typedef laPropContainer* (*laGetNodeTypeFunc)(void *);
  84. typedef void (*laContainerBeforeFreeF)(void *);
  85. typedef void (*laContainerResetF)(void *);
  86. typedef void (*laContainerUndoTouchedF)(void *, u64bit hint);
  87. typedef void (*laContainerpUDFPropagateF)(void *, void* udf, int Force);
  88. typedef int (*laActionHolderVerifyF)(void* Holder, laPropContainer* HolderType, void* inst, laPropContainer* InstType);
  89. #define LA_PROP_GENERAL_ROOT (1<<7)
  90. #define LA_PROP_SUB (1<<8)
  91. #define LA_PROP_INT (1<<9)
  92. #define LA_PROP_FLOAT (1<<10)
  93. #define LA_PROP_STRING (1<<11)
  94. #define LA_PROP_ENUM (1<<12)
  95. #define LA_PROP_STRING (1<<13)
  96. #define LA_PROP_ARRAY (1<<14)
  97. #define LA_PROP_PANEL (1<<15)
  98. #define LA_PROP_UI (1<<16)
  99. #define LA_PROP_OPERATOR (1<<17)
  100. #define LA_PROP_MENU (1<<18)
  101. #define LA_PROP_SELF_CONDITION (1<<19)
  102. #define LA_PROP_BIN (1<<20)
  103. #define LA_PROP_REF_LIST (1<<21)
  104. #define LA_PROP_GENERIC_BITS (~LA_PROP_ARRAY)
  105. #define LA_PROP_IS_FOLDER (1<<22)
  106. #define LA_PROP_IS_FILE (1<<23)
  107. #define LA_PROP_RAW (1<<24)
  108. #define LA_PROP_IS_LINEAR_SRGB (1<<24)
  109. #define LA_PROP_READ_PROGRESS (1<<25)
  110. #define LA_PROP_OTHER_ALLOC (1<<3)
  111. #define LA_PROP_HYPER_BITS (1|2)
  112. #define LA_RAW_CSTR_MAX_LEN 4096
  113. #define LA_PROP_KEY_INTERPOLATION_ROTATION 1
  114. typedef void (*laUiDefineFunc)(void *uil, void *collection_inst, void *this_inst, void *extra_col, int temlpate_context);
  115. typedef void (*laPanelDetachedPropFunc)(void *panel);
  116. //typedef void(*laUnlinkFunc)(void*, void*);//this instance,target instance
  117. NEED_STRUCTURE(laCanvasTemplate);
  118. NEED_STRUCTURE(laKeyMapper);
  119. STRUCTURE(laSaverDummy){
  120. laListItem Item;
  121. real pad;
  122. };
  123. STRUCTURE(laPropContainer){
  124. laListItem Item;
  125. const char *Identifier;
  126. const char *Name;
  127. const char *Description;
  128. uint32_t IconID;
  129. int NodeSize;
  130. laContainerBeforeFreeF BeforeFree;
  131. laContainerUndoTouchedF UndoTouched;
  132. laContainerResetF Reset;
  133. laContainerpUDFPropagateF UDFPropagate;
  134. laContainerPostReadFunc PostRead;
  135. laContainerPostReadFunc PostReadIm;
  136. int Hyper;
  137. int OtherAlloc;
  138. laActionHolderVerifyF ActionHolderVerify;
  139. laCanvasTemplate *Template2D;
  140. laListHandle Props;
  141. laUiDefineFunc UiDefine;
  142. laUiDefineFunc MenuUiDefine;
  143. laListHandle FailedNodes;
  144. laListHandle TrashBin;
  145. laListHandle LocalUsers;
  146. int validated;
  147. laProp* SaverDummy;
  148. };
  149. NEED_STRUCTURE(laUiType);
  150. NEED_STRUCTURE(laPanel);
  151. NEED_STRUCTURE(laPropStep);
  152. STRUCTURE(laPropPack){
  153. laPropStep *Go;
  154. void *EndInstance;
  155. laPropStep *LastPs;
  156. laPropPack *RawThis;
  157. char LastIndex;
  158. //char ReusedPs;
  159. };
  160. STRUCTURE(laProp){
  161. laListItem Item;
  162. laPropContainer *Container;
  163. int PropertyType;
  164. int ReadOnly;
  165. //laProp* Detached;
  166. laPropPack DetachedPP;
  167. int Len;
  168. char ElementBytes;
  169. uint32_t IconID;
  170. const char *Identifier;
  171. const char *Name;
  172. const char *Description;
  173. const char *Prefix;
  174. const char *Unit;
  175. const char *ExtraInstructions;
  176. laArrayGetLenF GetLen;
  177. laPropContainer *SubExtra; //?
  178. laPropContainer *SubProp;
  179. laUiDefineFunc UiDefine;
  180. laUiType *DefaultUiType;
  181. int DefaultFlags;
  182. int Offset;
  183. char OffsetIsPointer;
  184. char UDFIsRefer;
  185. char UDFNoCreate;
  186. char UDFIgnore;
  187. char UDFOnly;
  188. char UDFIsSingle;
  189. char UDFHideInSave;
  190. char UDFSingleManageable;
  191. char UDFReadProgress;
  192. char IsRadAngle;
  193. char CanTranslate;
  194. char Keyable;
  195. char KeySpecialInterpolation;
  196. //int SignalThrow;
  197. //int SignalCatch;
  198. u64bit Tag;
  199. laListHandle UserPanels;
  200. };
  201. STRUCTURE(laPropUserPanel){
  202. laListItem Item;
  203. laPanel *Panel;
  204. laListHandle UserPacks;
  205. };
  206. STRUCTURE(laPropUser){
  207. laListItem Item;
  208. laPropStep *User;
  209. unsigned int FrameDistinguish;
  210. };
  211. STRUCTURE(laPropStep){
  212. laPropStep *pNext;
  213. laProp *p;
  214. char Type;
  215. void *UseInstance;
  216. };
  217. STRUCTURE(laPropLink){
  218. laListItem Item;
  219. laPropPack Recieve;
  220. laSafeString *Identifier;
  221. laProp *Prop;
  222. laPropStep FakePS;
  223. laPropPack PP;
  224. void *DataStowage;
  225. };
  226. STRUCTURE(laIntProp){
  227. laProp Base;
  228. laIntGetF Get;
  229. laIntSetF Set;
  230. laIntArraySetF SetArr;
  231. laIntArraySetAllF SetAll;
  232. laIntArraySetAllArrayF SetAllArr;
  233. laIntArrayGetAllF GetAll;
  234. laIntReadF Read;
  235. laIntArrayReadAllF ReadAll;
  236. int Step;
  237. int Min, Max;
  238. int DefVal;
  239. const int *DefArr;
  240. int *Detached;
  241. };
  242. STRUCTURE(laFloatProp){
  243. laProp Base;
  244. laFloatGetF Get;
  245. laFloatSetF Set;
  246. laFloatArraySetF SetArr;
  247. laFloatArraySetAllF SetAll;
  248. laFloatArraySetAllArrayF SetAllArr;
  249. laFloatArrayGetAllF GetAll;
  250. laFloatReadF Read;
  251. laFloatArrayReadAllF ReadAll;
  252. real Step;
  253. real Min, Max;
  254. real DefVal;
  255. const real *DefArr;
  256. real *Detached;
  257. };
  258. STRUCTURE(laEnumItem){
  259. laListItem Item;
  260. const char *Identifier;
  261. const char *Name;
  262. const char *Description;
  263. int Index;
  264. uint32_t IconID;
  265. };
  266. STRUCTURE(laEnumProp){
  267. laProp Base;
  268. laEnumGetF Get;
  269. laEnumGetLengthF GetLen;
  270. laEnumSetF Set;
  271. laEnumArraySetF SetArr;
  272. laEnumArraySetAllF SetAll;
  273. laEnumArrayGetAllF GetAll;
  274. laEnumReadF Read;
  275. laEnumArrayReadAllF ReadAll;
  276. laListHandle Items; //id start from 1.
  277. int DefVal;
  278. const int *DefArr;
  279. int *Detached;
  280. };
  281. STRUCTURE(laStringProp){
  282. laProp Base;
  283. laStringGetF Get;
  284. laStringSetF Set;
  285. laStringGetLenF Getstrlen;
  286. laStringReadF Read;
  287. char IsSafeString;
  288. const char *DefStr;
  289. char *Detached;
  290. };
  291. NEED_STRUCTURE(laOperatorType)
  292. STRUCTURE(laOperatorProp){
  293. laProp Base;
  294. const char *OperatorID;
  295. laOperatorType *OperatorType;
  296. };
  297. STRUCTURE(laRawProp){
  298. laProp Base;
  299. laRawGetF RawGet;
  300. laRawSetF RawSet;
  301. laRawGetSizeF RawGetSize;
  302. };
  303. STRUCTURE(laSubProp){
  304. laProp Base;
  305. laSubGetInstanceF Get;
  306. laSubGetInstanceF GetActive;
  307. laSubSetInstanceF Set;
  308. laSubGetNextF GetNext;
  309. laSubGetStateF GetState;
  310. laSubSetStateF SetState;
  311. laSubGetAmountF GetAmount;
  312. laSubUIFilterF UiFilter;
  313. laSubSaveFilterF SaveFilter;
  314. laSubUIThemeF GetTheme;
  315. laSubUIGapF GetGap;
  316. laSubUICategoryF GetCategory;
  317. int ListHandleOffset;
  318. laSubTypeDetachedGet DetachedGet;
  319. laSubTypeDetachedGetNext DetachedGetNext;
  320. const char *TargetID;
  321. laGetNodeTypeFunc GetType;
  322. int IsDetached;
  323. void *Detached;
  324. int IsRefList;
  325. };
  326. STRUCTURE(laPropIterator){
  327. laListItemPointer *Linker;
  328. void *Parent;
  329. void *Handle;
  330. };
  331. STRUCTURE(laResourceFolder){
  332. laListItem Item;
  333. laSafeString* Path;
  334. };
  335. STRUCTURE(laRoot){
  336. laPropContainer *Root;
  337. void *RootInstance;
  338. };
  339. STRUCTURE(laUDFPostRead){
  340. laListItem Item;
  341. void *Instance;
  342. laContainerPostReadFunc Func;
  343. };
  344. STRUCTURE(laPtrSync){
  345. laListItem Item; //hash
  346. void *RefDB;
  347. //void* ReadRef;
  348. void *Parent; //key
  349. laSubProp *Prop; //must be sub
  350. };
  351. STRUCTURE(laPtrSyncCommand){
  352. laListItem Item;
  353. laPtrSync *Target;
  354. void *ReadInstance;
  355. laUID ReadNUID;
  356. };
  357. STRUCTURE(laUDFPropSegment){
  358. laListItem Item;
  359. laPropPack *PPP;
  360. laPropPack PP;
  361. laSafeString *Path;
  362. };
  363. STRUCTURE(laUDFH2Instance){
  364. laListItem Item;
  365. laPropContainer* pc;
  366. void* Instance;
  367. };
  368. STRUCTURE(laUDF){
  369. int Opened;
  370. FILE *DiskFile;
  371. laSafeString *FileName;
  372. laListHandle H2Instances;
  373. laUDFH2Instance* CurrentH2Instance;
  374. laListHandle PropsToOperate;
  375. //laListHandle PointerSync;
  376. //laListHandle PointerRecording;
  377. short NumSegmets;
  378. short Modified;
  379. short HasInstances;
  380. short Managed;
  381. u8bit *FileContent;
  382. u64bit Seek;
  383. u64bit FileContentSize;
  384. long TotalRefs;
  385. laListHandle HyperRecords; //writing
  386. //laListHandle LinkedFiles; //writing and reading
  387. laListHandle OwnHyperItems; //reading
  388. };
  389. STRUCTURE(laUDFHyperRecordItem){
  390. laListItem Item;
  391. void* HyperUserMem;
  392. laPropContainer* pc;
  393. u64bit Seek;
  394. };
  395. STRUCTURE(laUDFRegistry){
  396. laListItem Item;
  397. laSafeString* Path;
  398. };
  399. STRUCTURE(laUDFOwnHyperItem){
  400. laListItem Item;
  401. laUID NUID;
  402. laUDFRegistry* Registry;
  403. u64bit Seek;
  404. };
  405. STRUCTURE(laTrashRestoreExtra){
  406. void *Instance;
  407. laListHandle Instances;
  408. };
  409. STRUCTURE(laManagedUDF){
  410. laListItem Item;
  411. laUDF* udf;
  412. laSafeString *BaseName; // update together
  413. laListHandle PropSegments;
  414. };
  415. STRUCTURE(laManagedSaveProp){
  416. laListItem Item;
  417. laSafeString* Path;
  418. };
  419. NEED_STRUCTURE(laUDFContentInstance);
  420. STRUCTURE(laUDFContentNode){
  421. laListItem Item;
  422. laListHandle Instances;
  423. laSafeString *Identifier;
  424. laSafeString *FullPath;
  425. unsigned long FileSeek;
  426. laPropPack PP;
  427. laPropStep FakePS;
  428. laUDFContentInstance *Parent;
  429. };
  430. STRUCTURE(laUDFContentInstance){
  431. laListItem Item;
  432. laSafeString *Identifier;
  433. u64bit FileSeek;
  434. laUDFContentNode *Parent;
  435. laListHandle Children;
  436. };
  437. typedef void (*laDiffPushEverythingF)();
  438. typedef void (*laDiffCommandUndoF)(void* Data);
  439. typedef void (*laDiffCommandRedoF)(void* Data);
  440. typedef void (*laDiffCommandFreeF)(void* Data, int FromOlder);
  441. STRUCTURE(laDiffCommandCustom){
  442. laListItem Item;
  443. void* Data;
  444. laDiffCommandUndoF Undo;
  445. laDiffCommandRedoF Redo;
  446. laDiffCommandFreeF Free;
  447. };
  448. STRUCTURE(laDiff){
  449. laListItem Item;
  450. laListHandle Commands;
  451. laListHandle CustomCommands;
  452. laListHandle ExtraTouched;
  453. laSafeString* Description;
  454. u64bit Hint;
  455. };
  456. STRUCTURE(laDiffExtraTouched){
  457. laListItem Item;
  458. laDBInst* dbi;//ref, not owner
  459. };;
  460. STRUCTURE(laDiffCommand){
  461. laListItem Item;
  462. laDBInst* Instance;
  463. laProp* p;
  464. void* Data; //for sub, this is dbinst.
  465. };
  466. STRUCTURE(laDiffCommandRaw){
  467. laListItem Item;
  468. laDBInst* Instance;
  469. laProp* p;
  470. void* Data; int DataSize;
  471. };
  472. STRUCTURE(laDiffCommandInst){
  473. laListItem Item;
  474. laDBInst* OriginalPrev;
  475. laDBInst* OriginalNext;
  476. laDBInst* BeforePrev;
  477. laDBInst* BeforeNext;
  478. laDBInst* DBInst;
  479. };
  480. STRUCTURE(laDiffCommandSub){
  481. laDiffCommand Base;
  482. laListHandle AddedInst;
  483. laListHandle RemovedInst;
  484. laListHandle MovedInst;
  485. };
  486. STRUCTURE(laDiffTemp){
  487. laListItem Item;
  488. void* p;
  489. void* tPrev;
  490. void* tNext;
  491. void* nPrev;
  492. void* nNext;
  493. };
  494. STRUCTURE(laDBRecordedProp){
  495. laListItem Item;
  496. laSafeString* OriginalPath;
  497. };
  498. STRUCTURE(laDBInstPendingRelink){
  499. laListItem Item;
  500. laDBInst* dbi; void* from; void* to;
  501. };
  502. STRUCTURE(laDBInst){
  503. laListItem Item;
  504. laListItem Item2;//DBInstLink
  505. void* OriginalInstance;
  506. laPropContainer* pc;
  507. laListHandle Props;
  508. };
  509. STRUCTURE(laDBProp){
  510. laListItem Item;
  511. laProp* p;
  512. void* Data;
  513. //---------------
  514. };
  515. ;
  516. STRUCTURE(laDBRawProp){
  517. laListItem Item;
  518. laProp* p;
  519. void* Data;
  520. //---------------
  521. int DataSize;
  522. };
  523. STRUCTURE(laDBSubProp){
  524. laListItem Item;
  525. laProp* p;
  526. void* Data;
  527. //---------------
  528. laListHandle Instances;
  529. };
  530. STRUCTURE(laDiffPtrSync){
  531. laListItem Item;
  532. void* instance;
  533. laDBProp* dbp;
  534. laDiffCommand* dc;
  535. };
  536. STRUCTURE(laDiffPost){
  537. laListItem Item;
  538. void* instance;
  539. laContainerUndoTouchedF Touched;
  540. };
  541. #define LA_ANIMATION_PLAY_MODE_REPEAT 0
  542. #define LA_ANIMATION_PLAY_MODE_HOLD 1
  543. #define LA_ANIMATION_PLAY_MODE_BOUNCE 2
  544. #define LA_ANIMATION_MIX_REPLACE 0
  545. #define LA_ANIMATION_MIX_ADD 1
  546. NEED_STRUCTURE(laAction);
  547. STRUCTURE(laActionHolder){
  548. laListItem Item;
  549. void* Instance; int ActionOffset,PropOffset;
  550. laPropContainer* Container;
  551. laSafeString* Name;
  552. laSafeString* CategoryTitle;
  553. };
  554. STRUCTURE(laActionHolderPath){
  555. laListItem Item;
  556. laPropPack PP;
  557. char* OriginalPath;
  558. };
  559. STRUCTURE(laAnimation){
  560. real _PAD;
  561. laAction* CurrentAction;
  562. laListHandle ActionHolders;
  563. laListHandle ActionHolderPaths;
  564. real PlayHead;
  565. int PlayStatus;
  566. laTimeRecorder TimeOrigin;
  567. real RunPlayHead;
  568. };
  569. STRUCTURE(laAction){
  570. laListItem Item;
  571. laSafeString* Name;
  572. void* HolderInstance; laPropContainer* HolderContainer; // for verification
  573. laListHandle Channels;
  574. int FrameCount;
  575. real Length;
  576. real PlayHead,Offset;
  577. int PlayMode;
  578. int Solo, Mute;
  579. int PlayByDefault;
  580. int MixMode;
  581. };
  582. STRUCTURE(laActionProp){
  583. laListItem Item;
  584. void* For;
  585. laProp* Prop;
  586. int DataSize; // sizeof
  587. laSafeString* CachedName;
  588. uint64_t Data[16];
  589. int Reset;
  590. };
  591. STRUCTURE(laActionChannel){
  592. laListItem Item;
  593. laActionProp* AP;
  594. laListHandle Keys;
  595. };
  596. STRUCTURE(laActionKey){
  597. laListItem Item;
  598. int At,OriginaAt;
  599. int Selected;
  600. int DataSize;
  601. void* Data;
  602. };
  603. STRUCTURE(laRetargetedAction){
  604. void** Instances;
  605. real PlayHead;
  606. int PlayStatus;
  607. int Direction;
  608. };
  609. STRUCTURE(laActionRetarget){
  610. int DetachedInNode;
  611. int ActionCount;
  612. real PlaySync;
  613. laListHandle* Actions;
  614. laRetargetedAction* Retargeted;
  615. void* HolderInstance;
  616. };
  617. #define LA_ACTION_FRAME(aa,override_playhead) (((((override_playhead)>=0)?(override_playhead):(aa)->PlayHead)+FLT_EPSILON)*(real)((aa)->FrameCount))
  618. /* Only little endian are supported right now */
  619. #define LA_UDF_IDENTIFIER "UDF_LE"
  620. #define LA_UDF_EXTENSION_FLOAT32 (1<<0)
  621. #define LA_UDF_EXTENSION_RAW (1<<1)
  622. #define LA_UDF_EXTENSION_BITS (LA_UDF_EXTENSION_RAW)
  623. #define LA_UDF_MARK_TIMESTAMP 3
  624. #define LA_UDF_MODE_APPEND 0
  625. #define LA_UDF_MODE_OVERWRITE 1
  626. #define LA_UDF_SINGLE (1<<0)
  627. #define LA_UDF_COLLECTION (1<<1)
  628. #define LA_UDF_REFER (1<<2)
  629. #define LA_UDF_ITEM (1<<3) //ItemType
  630. #define LA_UDF_ACTIVE (1<<4)
  631. #define LA_UDF_STATE (1<<5)
  632. #define LA_UDF_REGULAR_MARK_64 (1<<6)
  633. #define LA_UDF_ARRAY_MARK_64 (1<<7)
  634. #define LA_UDF_HYPER_ITEM (1<<8) //ItemType
  635. #define LA_UDF_SHARE_RESOURCE (1<<9)
  636. #define LA_UDF_USE_VERSION (1<<10) //Use History
  637. #define LA_UDF_REGULAR_MARK_32 (1<<10)
  638. #define LA_UDF_ARRAY_MARK_32 (1<<11)
  639. #define LA_UDF_STRING_MARK (1<<12)
  640. #define LA_UDF_HYPER_MARK (1<<13)
  641. #define LA_UDF_ONLY (1<<14)
  642. #define LA_UDF_RAW_MARK (1<<14)
  643. //#define LA_UDF_LINKED_ITEM (1<<15) //ItemType
  644. #define LA_UDF_IGNORE (1<<16)
  645. #define LA_DETACHABLE (1<<17)
  646. #define LA_UDF_VARIABLE_NODE_SIZE (1<<18)
  647. #define LA_UDF_FIXED_NODE_SIZE (1<<19)
  648. #define LA_UDF_LOCAL (1<<20)
  649. #define LA_RAD_ANGLE (1<<21)
  650. #define LA_UDF_PRINT_STATICS (1<<22)
  651. #define LA_UDF_NUID_SEEK (1<<23)
  652. #define LA_UDF_NUID_LINK_FILES (1<<24)
  653. #define LA_AS_IDENTIFIER (1<<25)
  654. #define LA_UDF_USE_LINK_NODE (1<<26)
  655. #define LA_READ_ONLY (1<<27)
  656. #define LA_HIDE_IN_SAVE (1<<28)
  657. #define LA_TRANSLATE (1<<29)
  658. #define LA_PROP_KEYABLE (1<<30)
  659. #define LA_PROP_ROTATION (1<<31)
  660. STRUCTURE(laThreadNotifier){
  661. laListItem Item;
  662. char Path[256];
  663. };
  664. laPropContainer *laDefineRoot();
  665. NEED_STRUCTURE(laOperatorType)
  666. NEED_STRUCTURE(laOperator)
  667. NEED_STRUCTURE(laEvent)
  668. void laset_InstanceUID(void* instance, char* buf);
  669. void *laget_ListNext(laListItem *Item, void *UNUSED);
  670. void *laget_ListPrev(laListItem *Item, void *UNUSED);
  671. void *laget_List2Next(laListItem2 *Item, void *UNUSED);
  672. void *laget_List2Prev(laListItem2 *Item, void *UNUSED);
  673. void la_DEBUG_VerifyThisContainer(laPanel *pa, laPropContainer *pc);
  674. void la_DEBUG_VerifyPanelPropsDestroyed(laPanel *p);
  675. void la_CopyPropPack(laPropPack *From, laPropPack *To);
  676. void laPropPackToLocal(laPropPack* ToPP, laPropPack* pp);
  677. laPropContainer* la_EnsureSubTarget(laSubProp* sp, void* optional_instance);
  678. laPropContainer *la_ContainerLookup(char *ID);
  679. laProp *la_PropLookup(laListHandle *lst, char *ID);
  680. void la_UsePropPack(laPropPack *pp, int ForceRecalc);
  681. void la_StopUsingPropPack(laPropPack *pp);
  682. void la_SetPropMathcerContext(laPanel *p);
  683. void laNotifyUsersPP(laPropPack *pp);
  684. void laNotifyUsersPPPath(laPropPack *pp, char *path);
  685. void laNotifySubPropUsers(laProp *p, void *Instance);
  686. void laNotifyUsers(char *Path);
  687. void laNotifyInstanceUsers(void *Instance);
  688. void laThreadNotifyUsers(char *Path);
  689. void laNotifyDetached(void* OldInstance, void* NewInstance);
  690. void laDetachedTrySet(char* prop_identifier,void* NewInstance);
  691. int laIsPropertyReadOnly(laPropPack *pp);
  692. int laGetPrefixP(laPropPack *p, char buf[8][64]);
  693. int laGetPrefix(laProp *p, char buf[8][64]);
  694. laPropContainer* laGetInstanceType(laPropPack* pp, void* instance);
  695. laUiDefineFunc laGetPropertyUiDefine(laPropPack* pp, void* instance);
  696. int laSetInt(laPropPack *pp, int n);
  697. int laGetInt(laPropPack *pp);
  698. int laSetFloat(laPropPack *pp, real n);
  699. real laGetFloat(laPropPack *pp);
  700. int laGetArrayLength(laPropPack *pp);
  701. int laSetIntArraySingle(laPropPack *pp, int index, int n);
  702. int laSetIntArrayAll(laPropPack *pp, int n);
  703. int laSetIntArrayAllArray(laPropPack *pp, int *arr);
  704. int laGetIntArray(laPropPack *pp, int *result);
  705. int laSetFloatArraySingle(laPropPack *pp, int index, real n);
  706. int laSetFloatArrayAll(laPropPack *pp, real n);
  707. int laSetFloatArrayAllArray(laPropPack *pp, real *arr);
  708. int laGetFloatArray(laPropPack *pp, real *result);
  709. laEnumItem *laGetEnum(laPropPack *pp);
  710. int laGetEnumEntryLen(laPropPack *pp);
  711. laEnumItem *laGetEnumArrayIndexed(laPropPack *pp, int index);
  712. int laGetEnumArray(laPropPack *pp, laEnumItem **result);
  713. laEnumItem *laGetEnumFromIdentifier(laEnumProp *p, char *Identifier);
  714. int laEnumHasIcon(laPropPack *pp);
  715. int laSetEnumExternal(laPropPack *pp, int n);
  716. int laSetEnum(laPropPack *pp, int n);
  717. int laSetEnumArrayIndexedExternal(laPropPack *pp, int index, int n);
  718. int laSetEnumArrayIndexed(laPropPack *pp, int index, int n);
  719. int laSetEnumArrayAllArray(laPropPack* pp, laEnumItem** ei);
  720. int laSetEnumArrayAll(laPropPack* pp, int EnumN);
  721. int laSetString(laPropPack *pp, char *str);
  722. int laGetString(laPropPack *pp, char *result, char** direct_result);
  723. int laActuateProp(laPropPack *This, laPropPack *RunPP, laOperator *OptionalFrom, laEvent *e);
  724. int laGetIntRange(laPropPack *pp, int *min, int *max);
  725. int laGetFloatRange(laPropPack *pp, real *min, real *max);
  726. void* laGetRaw(laPropPack *pp, int* r_size, int* return_is_a_copy);
  727. int laSetRaw(laPropPack *pp, void* data, int _size);
  728. int laTryGetInstanceIdentifier(void* Instance, laPropContainer* pc, char* identifier, char** here);
  729. void laMarkPropChanged(laPropPack* pp);
  730. void laMarkMemChanged(void* memuser);
  731. void laMarkMemClean(void* memuser);
  732. void *la_FindMatchingInstance(void *From, laProp *Sub, laProp *p, laPropStep *Value);
  733. void la_FreePropStepCache(laPropStep *GoTarget);
  734. void la_StepPropPack(laPropPack *pp);
  735. void la_GetPropPackFullPath(laPropPack *pp, char *result);
  736. void la_GetPropPackPath(laPropPack *pp, char *result);
  737. laItemUserLinker *laUseDataBlock(void* HyperUserMem, laProp *Which, unsigned int FrameDistinguish, void *User, laUserRemoveFunc Remover, int ForceRecalc);
  738. void laStopUsingDataBlock(void* HyperUserMem, laProp *prop, laPanel *p);
  739. void laDataBlockNoLongerExists(void *HyperUserMem, laListHandle* UserList);
  740. void la_PrintUserList(void* HyperUserMem);
  741. void laThrowToTrashBin(void* Data, char *ContainerString);
  742. void la_FreeProperty(laProp* p);
  743. void la_FreePropertyContainer(laPropContainer* pc);
  744. laSaverDummy* laGetSaverDummy(void* instance, laSubProp* p);
  745. void laPurgeSaverDummy(void* instance, laSubProp* p);
  746. laPropContainer *laAddPropertyContainer(const char *Identifier, const char *Name, const char *Description, uint32_t IconID, laUiDefineFunc DefaultUiDefine,
  747. int NodeSize, laContainerPostReadFunc PostRead, laContainerPostReadFunc PostReadIm, int IsHyper);
  748. laProp* laPropContainerManageable(laPropContainer* pc, int offset_of_dummy_list);
  749. void laPropContainerExtraFunctions(laPropContainer* pc, laContainerBeforeFreeF BeforeFree, laContainerResetF Reset, laContainerUndoTouchedF Touched, laContainerpUDFPropagateF UDFPropagate, laUiDefineFunc MenuUi);
  750. void laContainerAnimationFunctions(laPropContainer* pc, laActionHolderVerifyF ActionHolderVerify);
  751. const char *la_GetPropertyTypeString(int Type);
  752. NEED_STRUCTURE(laWidget);
  753. laProp *la_CreateProperty(laPropContainer *Container, int Type, const char *Identifier, const char *Name, const char *Description,
  754. const char *Prefix, const char *Unit, laWidget* DefaultWidget, u64bit Tag);
  755. void la_ClearDetachedProp(laPanel* p);
  756. laProp *la_MakeDetachedProp(laPanel* p, const char *From, const char *Rename);
  757. laProp *laAddIntProperty(laPropContainer *Container, const char *Identifier, const char *Name, const char *Description, laWidget* DefaultWidget,
  758. const char *Prefix, const char *Unit, int Max, int Min, int Step, int DefVal, const int *DefArr,
  759. int OffsetSize, laIntGetF Get, laIntSetF Set, int ArrayLength, laArrayGetLenF GetLen,
  760. laIntArraySetF SetArr, laIntArrayGetAllF GetAll, laIntArraySetAllF SetAll, laIntArraySetAllArrayF SetAllArr,
  761. laIntReadF Read, laIntArrayReadAllF ReadAll,
  762. u64bit Tag);
  763. laProp *laAddFloatProperty(laPropContainer *Container, const char *Identifier, const char *Name, const char *Description, laWidget* DefaultWidget,
  764. const char *Prefix, const char *Unit, real Max, real Min, real Step, real DefVal, const real *DefArr,
  765. int OffsetSize, laFloatGetF Get, laFloatSetF Set, int ArrayLength, laArrayGetLenF GetLen,
  766. laFloatArraySetF SetArr, laFloatArrayGetAllF GetAll, laFloatArraySetAllF SetAll, laFloatArraySetAllArrayF SetAllArr,
  767. laFloatReadF Read, laFloatArrayReadAllF ReadAll,
  768. u64bit Tag);
  769. laProp *laAddEnumProperty(laPropContainer *Container, const char *Identifier, const char *Name, const char *Description, laWidget* DefaultWidget,
  770. const char *Prefix, const char *Unit, int DefVal, const int *DefArr,
  771. int OffsetSize, laEnumGetF Get, laEnumSetF Set, int ArrayLength, laArrayGetLenF GetLen,
  772. laEnumArraySetF SetArr, laEnumArrayGetAllF GetAll, laEnumArraySetAllF SetAll,
  773. laEnumReadF Read, laEnumArrayReadAllF ReadAll,
  774. u64bit Tag);
  775. int laAddEnumItem(laProp *p, const char *Identifier, const char *Name, const char *Description, uint32_t IconID);
  776. int laAddEnumItemAs(laProp *p, const char *Identifier, const char *Name, const char *Description, int Index, uint32_t IconID);
  777. laProp *laAddStringProperty(laPropContainer *Container, const char *Identifier, const char *Name, const char *Description, laWidget* DefaultWidget,
  778. const char *Prefix, const char *Unit, const char *DefStr,
  779. int IsSafeString, int OffsetSize, laStringGetLenF GetLen, laStringGetF Get, laStringSetF Set,
  780. laStringReadF Read,
  781. u64bit Tag);
  782. laProp *laAddSubGroup(laPropContainer *Container, const char *Identifier, const char *Name, const char *Description,
  783. const char *TargetId, laGetNodeTypeFunc GetType, laWidget* DefaultWidget, laUiDefineFunc DefaultUiDef,
  784. int OffsetSize, laSubGetInstanceF Get, laSubGetInstanceF GetActive, laSubGetNextF GetNext, laSubSetInstanceF Set,
  785. laSubGetStateF GetState, laSubSetStateF SetState, int ListHandleOffset, u64bit Tag);
  786. void laSubGroupExtraFunctions(laProp* p, laSubUIFilterF* UiFilter, laSubSaveFilterF* SaveFilter, laSubUIThemeF* GetTheme, laSubUIGapF GetGap, laSubUICategoryF GetCategory);
  787. void laSubGroupDetachable(laProp *SubProp, laSubTypeDetachedGet DetachedGet, laSubTypeDetachedGetNext DetachedGetNext);
  788. laProp *laAddOperatorProperty(laPropContainer *Container, const char *Identifier, const char *Name, const char *Description,
  789. const char *OperatorID, uint32_t IconID, laWidget* DefaultWidget);
  790. laProp *laAddRawProperty(laPropContainer *Container, const char *Identifier, const char *Name, const char *Description, int OffsetSize, laRawGetSizeF GetSize, laRawGetF RawGet, laRawSetF RawSet, u64bit Tag);
  791. //void laPropertySignal(laProp* p, int Throw, int Catch);
  792. NEED_STRUCTURE(laBoxedTheme);
  793. void *laGetInstance(laProp *sub, void *ThisInstance, laPropIterator *pi);
  794. void *laGetNextInstance(laProp *sub, void *FromInstance, laPropIterator *pi);
  795. void *laGetActiveInstanceStrict(laProp *sub, void *FromInstance);
  796. void *laGetActiveInstance(laProp *sub, void *FromInstance, laPropIterator *pi);
  797. void laSetActiveInstance(laProp *sub, void *FromInstance, void *Instance);
  798. void laAppendInstance(laSubProp *sub, void *FromInstance, void *Instance);
  799. int laGetUiState(laProp *sub, void *Instance);
  800. laBoxedTheme* laGetUiTheme(laProp *sub, void* parent, void *Instance);
  801. int laGetUiGap(laProp *sub, void* parent, void *Instance);
  802. void laGetCategory(laProp *sub, void* parent, void *Instance, char* buf, char** buf_ptr);
  803. int laCanGetState(laProp *sub);
  804. int laCanGetTheme(laProp *sub);
  805. int laCanGetGap(laProp *sub);
  806. int laCanGetCategory(laProp *sub);
  807. int laSetState(laProp *sub, void *FromInstance, void *Instance, int State);
  808. laPropContainer *la_SetGeneralRoot(laPropContainer **GeneralRoot, const char *Identifier, const char *Name, const char *Description);
  809. int la_GetPropFromPath(laPropPack *Self, laPropPack *Base, const char *Path, void **SpecifiedInstance);
  810. laProp *la_GetGeneralPropFromPath(laProp *General, const char *Path);
  811. int laValidateProperties();
  812. void laSetRootInstance(void *root);
  813. void la_RegisterMainUiTypes();
  814. void la_RegisterMainThemes();
  815. void la_RegisterInternalProps();
  816. void la_PrintPropStructure();
  817. laProp *la_GetGeneralProp(laProp *p);
  818. void* laget_InstanceActiveUDF(void* instance);
  819. void laset_InstanceUDF(void* instance, void* set);
  820. void la_UDFAppendSharedTypePointer(char *ID, void *Pointer);
  821. void la_AppendLinkedFile(laUDF *File);
  822. void la_GetWorkingDirectoryInternal();
  823. int laGetRelativeDirectory(char *FullFrom, char *FullTo, char *Result);
  824. void laGetUDFRelativeDirectory(laUDF *From, laUDF *To, char *Result);
  825. void laGetFullPath(char *FullFrom, char *Relative, char *Result);
  826. laUDF *laPrepareUDF(char *FileName);
  827. int laWriteProp(laUDF *udf, char *Path);
  828. int laWritePropP(laUDF *udf, laPropPack *pp);
  829. int laPackUDF(laUDF *udf, int UseInstanceList, int DoBackup);
  830. void laSaveProp(char* path);
  831. void laClearSaveProp();
  832. int laRegisterModifications(int ReturnIfAnyMod, int ReturnIfAnyEmpty, int* rempty, int RegisterToUDF);
  833. laUDF *laOpenUDF(char *FileName, int ReadToMemory, laUDFRegistry* ReadRegistryRef, laManagedUDF** UseManaged);
  834. void laCloseUDF(laUDF *udf);
  835. int laExtractUDF(laUDF *udf, laManagedUDF* mUDF, int Mode, laListHandle *Parent);
  836. int laLoadHyperResources(char* uid_search);
  837. laUDFOwnHyperItem* laFindHyperItem(laPropContainer* pc, char* uid);
  838. laUDFRegistry* laFindUDFRegistry(char* Path);
  839. laUDFRegistry* laCreateUDFRegistry(char* Path);
  840. void laClearUDFRegistries();
  841. void laRefreshUDFRegistries();
  842. laManagedUDF* la_FindManagedUDF(char* FileName);
  843. laManagedUDF* la_EnsureManagedUDF(char* FileName, int PutAtTop);
  844. void la_MakeDummyManagedUDF();
  845. void laStopManageUDF(laManagedUDF* m);
  846. void laClearManagedUDF();
  847. void laSaveManagedUDF();
  848. void laPropagateUDF(laPropContainer* pc, void* inst, int force);
  849. //================== manifest
  850. void laAddResourceFolder(char* Path);
  851. void laRemoveResourceFolder(laResourceFolder* rf);
  852. void la_ClearUDFRegistryAndFolders();
  853. //================== undo
  854. void laFreeOlderDifferences(int KeepHowMany);
  855. void laFreeNewerDifferences();
  856. void laPrintDBInstInfo();
  857. void la_NoLongerRecordUndo();
  858. void laAddRootDBInst(char* path);
  859. void laPushDifferences(char* Description, u64bit hint);
  860. void laRecordCustomDifferences(void* Data, laDiffCommandUndoF Undo, laDiffCommandRedoF Redo, laDiffCommandFreeF Free);
  861. int laRecordDifferences(laPropPack* base, char* path);
  862. int laRecordInstanceDifferences(void* instance, const char* container);
  863. void laRecordAndPush(laPropPack* base, char* path, char* description, uint64_t hint);
  864. void laRecordAndPushProp(laPropPack* base, char* path);
  865. void laRecordEverythingAndPush();
  866. void laSetDiffCallback(laDiffPushEverythingF PushEverything);
  867. void laUndo();
  868. void laRedo();
  869. //======================= animation
  870. #define LA_ANIMATION_STATUS_PAUSED 0
  871. #define LA_ANIMATION_STATUS_PLAY_FWD 1
  872. #define LA_ANIMATION_STATUS_PLAY_REV 2
  873. int la_GetKeyablePropertyStorageSize(laProp* p);
  874. void la_AnimationEvaluateActions(int ClampOffsets);
  875. laRetargetedAction* la_AnimationGetRetargetedAction(laActionRetarget* ar, laAction* aa);
  876. laAction* laAnimiationNewAction(laActionHolder* ah, char* Name);
  877. laActionChannel* laAnimationEnsureChannel(laAction* aa, void* hyper1, laProp* p);
  878. laActionChannel* laAnimationEnsureFrame(laActionChannel* ac, int frame);
  879. void laAnimationStoreKeyValue(laActionChannel* ac, laActionKey* ak);
  880. laActionKey* laAnimationInsertKeyFrame(laAction* aa, void* hyper1, laProp* p, int* error);
  881. void laAnimationRemoveFrame(laActionChannel* ac, laActionKey* ak);
  882. void laAnimationRemoveChannel(laAction* aa, laActionChannel* ac);
  883. void laAnimationRemoveAction(laAction* aa);
  884. void* laAnimationGetRetargetedPropInstance(laProp* p, void* Instance);
  885. void laAnimationEnsureRetarget(void* HolderInstance, laListHandle* action_list, laActionRetarget** retarget);
  886. laActionRetarget* laAnimationCopyRetargetFrom(laActionRetarget* from_ar);
  887. void laAnimationClearRetarget(laActionRetarget **ar_ptr);
  888. void laAnimationSetPlayStatus(int PlayStatus);
  889. void laAnimationSetPlayHead(real time);
  890. int laAnimationSyncRetarget(laActionRetarget* ar, real PlayHead);
  891. int laAnimationEvaluateRetargetedActions(laActionRetarget* ar);
  892. void la_AnimationPreFrame();
  893. void la_AnimationPostFrame();
  894. int laAnimationRegisterHolderPath(const char* Path);
  895. void laAnimationUpdateHolderList();