@ProjectEx.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. /******************************************************************************/
  2. /******************************************************************************/
  3. class ProjectEx : ProjectHierarchy
  4. {
  5. class OuterRegion : Region
  6. {
  7. bool resize_on;
  8. void setRegionWidth(flt w);
  9. virtual GuiObj* test(C GuiPC &gpc, C Vec2 &pos, GuiObj* &mouse_wheel)override;
  10. virtual void update(C GuiPC &gpc)override;
  11. void draw();
  12. virtual GuiObj& show()override; // if there's no window active and no fullscreen editor then set keyboard focus
  13. virtual GuiObj& hide()override;
  14. public:
  15. OuterRegion();
  16. };
  17. class ElmList : List<ListElm>
  18. {
  19. enum INCLUDE_CHILDREN_SIZE : byte
  20. {
  21. ICS_NEVER ,
  22. ICS_FOLDED,
  23. ICS_ALWAYS,
  24. ICS_NUM ,
  25. };
  26. enum INCLUDE_TEXTURE_SIZE : byte
  27. {
  28. ITS_ELM ,
  29. ITS_ELM_TEX,
  30. ITS_TEX ,
  31. ITS_NUM ,
  32. };
  33. class Warning : GuiImage
  34. {
  35. virtual GuiObj* test(C GuiPC &gpc, C Vec2 &pos, GuiObj* &mouse_wheel)override;
  36. void create(int data_abs_index, bool error, flt offset);
  37. };
  38. class SoundPlay : Button
  39. {
  40. UID lit_id, play_id;
  41. public:
  42. SoundPlay();
  43. };
  44. class AppCheck : CheckBox
  45. {
  46. UID app_id;
  47. public:
  48. AppCheck();
  49. };
  50. INCLUDE_CHILDREN_SIZE ics;
  51. INCLUDE_TEXTURE_SIZE its;
  52. bool show_all_elms, // if all elements are being listed
  53. show_all_elm_types,
  54. show_elm_type[ELM_NUM],
  55. show_only_folder,
  56. show_only_obj ,
  57. show_only_mtrl ,
  58. show_only_anim ,
  59. show_only_sound ,
  60. file_size,
  61. tex_sharpness,
  62. include_texture_size_in_object,
  63. include_unpublished_elm_size,
  64. flat_is,
  65. flat_want,
  66. list_all_children,
  67. tapped_open;
  68. int tapped_vis, icon_col, name_col, size_col, tex_sharp_col;
  69. flt tapped_time;
  70. UID lit_elm_id;
  71. Memc<ListElm> data;
  72. Memx<Warning> warnings;
  73. Memx<AppCheck> app_checks;
  74. SoundPlay sound_play;
  75. Menu menu;
  76. ListElm* curToListElm( )C;
  77. ListElm* litToListElm( )C;
  78. Elm* operator()( )C;
  79. EEItem* visToItem( int visible )C;
  80. EEItem* absToItem( int absolute)C;
  81. Elm* visToElm ( int visible )C;
  82. Elm* absToElm ( int absolute)C;
  83. int itemToVis (C EEItem *data)C;
  84. int itemToAbs (C EEItem *data)C;
  85. int elmToVis (C Elm *data)C;
  86. int elmToAbs (C Elm *data)C;
  87. bool identitySort()C; // if list is sorted in identity mode
  88. virtual void update(C GuiPC &gpc)override;
  89. public:
  90. ElmList();
  91. };
  92. class ElmChange : Edit::_Undo::Change
  93. {
  94. enum TYPE
  95. {
  96. NONE ,
  97. REMOVE ,
  98. RESTORE ,
  99. PUBLISH_DISABLE,
  100. PUBLISH_ENABLE ,
  101. SET_PARENT ,
  102. SET_NAME ,
  103. };
  104. TYPE type;
  105. Str name; // keep 'name' even though we could extract it from 'type', because 'type' will get changed in 'swap', while 'name' needs to remain constant
  106. Memc<UID> elms;
  107. Memc<Edit::IDParam<UID> > elm_parents;
  108. Memc<Edit::IDParam<Str> > elm_names;
  109. virtual void swap(ptr user)override;
  110. public:
  111. ElmChange();
  112. };
  113. Memc<UID> existing_enums , // binary sorted container of existing (not removed) ELM_ENUM elements
  114. existing_obj_classes, // binary sorted container of existing (not removed) ELM_OBJ_CLASS elements
  115. existing_fonts , // binary sorted container of existing (not removed) ELM_FONT elements
  116. publish_fonts , // binary sorted container of existing (not removed) ELM_FONT elements that are publishable
  117. existing_apps ; // binary sorted container of existing (not removed) ELM_APP elements
  118. ComboBox list_options;
  119. Button show_removed, theater;
  120. TextLine filter;
  121. bool filter_is_id;
  122. UID filter_id;
  123. Str filter_path; // temp variable used during 'setFilter' which holds the full path of current element
  124. OuterRegion outer_region;
  125. Region region;
  126. UID lit_elm_id;
  127. Str lit_elm_name;
  128. ElmList list;
  129. UID list_cur;
  130. EEItem *list_cur_item;
  131. Memc<UID> list_sel, menu_list_sel, drag_list_sel;
  132. Memc<EEItem*> list_sel_item, menu_list_sel_item;
  133. ImagePtr icon_folder, icon_file, icon_obj, icon_class, icon_mesh, icon_mtrl, icon_water_mtrl, icon_phys_mtrl, icon_anim, icon_env, icon_world, icon_mini_map, icon_image, icon_image_atlas, icon_icon_setts, icon_icon, icon_enum, icon_font, icon_panel_image, icon_ts, icon_panel, icon_gui, icon_gui_skin, icon_sound, icon_video, icon_lib, icon_app, icon_code, icon_play, icon_stop, arrow_right, arrow_down, warning, exclamation, icon_light, icon_particles;
  134. MenuBar menu;
  135. Node<MenuElm> obj_class_node, param_type_node, font_node;
  136. Sound sound;
  137. Mesh mesh_mem; // use 'Mesh' so it can store 'BoneMap'
  138. Skeleton skel_mem;
  139. EditSkeleton edit_skel_mem;
  140. Skeleton slot_skel_mem; // skeleton used for copying slots only
  141. flt save_time;
  142. Edit::Undo<ElmChange> elm_undos;
  143. bool file_size_getter_step; // 0=game files, 1=textures
  144. FileSizeGetter file_size_getter;
  145. // normally following functions should use 'menu_list_sel' however they can be also called through 'list_options' which doesn't use that
  146. static void NewFolder (ProjectEx &proj);
  147. static void NewMtrl (ProjectEx &proj);
  148. static void NewWaterMtrl (ProjectEx &proj);
  149. static void NewPhysMtrl (ProjectEx &proj);
  150. static void NewAnim (ProjectEx &proj);
  151. static void NewObject (ProjectEx &proj);
  152. static void NewObjectClass(ProjectEx &proj);
  153. static void NewEnum (ProjectEx &proj);
  154. static void NewImage (ProjectEx &proj);
  155. static void NewImageAtlas (ProjectEx &proj);
  156. static void NewIconSetts (ProjectEx &proj);
  157. static void NewIcon (ProjectEx &proj);
  158. static void NewFont (ProjectEx &proj);
  159. static void NewPanelImage (ProjectEx &proj);
  160. static void NewTextStyle (ProjectEx &proj);
  161. static void NewPanel (ProjectEx &proj);
  162. static void NewGuiSkin (ProjectEx &proj);
  163. static void NewGui (ProjectEx &proj);
  164. static void NewSound (ProjectEx &proj);
  165. static void NewVideo (ProjectEx &proj);
  166. static void NewRawFile (ProjectEx &proj);
  167. static void NewLib (ProjectEx &proj);
  168. static void NewApp (ProjectEx &proj);
  169. static void NewCode (ProjectEx &proj);
  170. static void NewEnv (ProjectEx &proj);
  171. static void NewMiniMap (ProjectEx &proj);
  172. static void NewWorld (ProjectEx &proj);
  173. static void ElmRename (ProjectEx &proj);
  174. static void ReplaceName (ProjectEx &proj);
  175. static void Remove (ProjectEx &proj);
  176. static void Restore (ProjectEx &proj);
  177. static void Reload (ProjectEx &proj);
  178. static void CancelReload (ProjectEx &proj);
  179. static void SplitAnim (ProjectEx &proj);
  180. static void EnablePublish(ProjectEx &proj);
  181. static void DisablePublish(ProjectEx &proj);
  182. static void UndoElmChange (ProjectEx &proj);
  183. static void RedoElmChange (ProjectEx &proj);
  184. static void Duplicate (ProjectEx &proj);
  185. static void CopyTo (ProjectEx &proj);
  186. static void Expand (ProjectEx &proj);
  187. static void ExpandAll (ProjectEx &proj);
  188. static void Collapse (ProjectEx &proj);
  189. static void ExploreElm (ProjectEx &proj);
  190. static void Export (ProjectEx &proj);
  191. static void Properties (ProjectEx &proj);
  192. static void FilterChanged (ProjectEx &proj);
  193. static void ShowRemoved (ProjectEx &proj);
  194. static void ShowTheater (ProjectEx &proj);
  195. static void SoundPlay (ProjectEx &proj);
  196. static void ImageMipMapOn (ProjectEx &proj);
  197. static void ImageMipMapOff(ProjectEx &proj);
  198. static void MtrlRGB1 (ProjectEx &proj);
  199. static void MtrlRGB (ProjectEx &proj);
  200. static void MtrlMulRGB (ProjectEx &proj);
  201. static void MtrlRGBCur (ProjectEx &proj);
  202. static void MtrlAlpha (ProjectEx &proj);
  203. static void MtrlCullOn (ProjectEx &proj);
  204. static void MtrlCullOff (ProjectEx &proj);
  205. static void MtrlFlipNrmYOn (ProjectEx &proj);
  206. static void MtrlFlipNrmYOff (ProjectEx &proj);
  207. static void MtrlReloadBaseTex (ProjectEx &proj);
  208. static void MtrlMulTexCol (ProjectEx &proj);
  209. static void MtrlMulTexRough (ProjectEx &proj);
  210. static void MtrlMoveToObj (ProjectEx &proj);
  211. static void MtrlMerge (ProjectEx &proj);
  212. static void MtrlConvertToAtlas (ProjectEx &proj);
  213. static void MtrlConvertToDeAtlas (ProjectEx &proj);
  214. static void MtrlMobileTexSizeFull (ProjectEx &proj);
  215. static void MtrlMobileTexSizeHalf (ProjectEx &proj);
  216. static void MtrlMobileTexSizeQuarter(ProjectEx &proj);
  217. static void AnimClip (ProjectEx &proj);
  218. static void AnimLinear (ProjectEx &proj);
  219. static void AnimCubic (ProjectEx &proj);
  220. static void AnimLoopOn (ProjectEx &proj);
  221. static void AnimLoopOff(ProjectEx &proj);
  222. static void SoundImportAs(ptr mode);
  223. static void SoundMulVolume(ProjectEx&proj);
  224. static void TransformSet (ProjectEx &proj);
  225. static void TransformApply (ProjectEx &proj);
  226. static void TransformBottom (ProjectEx &proj);
  227. static void TransformBack (ProjectEx &proj);
  228. static void TransformCenter (ProjectEx &proj);
  229. static void TransformCenterXZ (ProjectEx &proj);
  230. static void TransformRotYMinBox(ProjectEx &proj);
  231. static void MeshRemVtxTex1 (ProjectEx &proj);
  232. static void MeshRemVtxTex2 (ProjectEx &proj);
  233. static void MeshRemVtxTex12(ProjectEx &proj);
  234. static void MeshRemVtxCol (ProjectEx &proj);
  235. static void MeshRemVtxSkin (ProjectEx &proj);
  236. static void SetBody (ProjectEx &proj);
  237. void columnVisible(int column, bool visible);
  238. static void ShowFileSize(ProjectEx &proj);
  239. void showFileSize();
  240. static void ShowTexSharp(ProjectEx &proj);
  241. void showTexSharp();
  242. static void IncludeUnpublishedElmSize(ProjectEx &proj);
  243. void includeUnpublishedElmSize(bool on);
  244. static void IncludeTextureSizeInObject(ProjectEx &proj);
  245. void includeTextureSizeInObject(bool on);
  246. void checkIncludeChildrenSize();
  247. void checkIncludeTextureSize();
  248. static void IncludeChildrenSize(ptr ics);
  249. void includeChildrenSize(ElmList::INCLUDE_CHILDREN_SIZE ics);
  250. static void IncludeTextureSize(ptr its);
  251. void includeTextureSize(ElmList::INCLUDE_TEXTURE_SIZE its);
  252. static void ListOnlyFolder(ProjectEx &proj);
  253. static void ListOnlyObj (ProjectEx &proj);
  254. static void ListOnlyMtrl (ProjectEx &proj);
  255. static void ListOnlyAnim (ProjectEx &proj);
  256. static void ListOnlySound (ProjectEx &proj);
  257. static void ListFlat (ProjectEx &proj);
  258. void setListPadding();
  259. // get
  260. C ImagePtr& elmIcon(ELM_TYPE type);
  261. bool contains(C Elm &a, C Elm *b)C; // if 'a' contains 'b'
  262. Enum* getEnumFromName(C Str &enum_name);
  263. C UID& curApp(); // warning: this relies on 'existing_apps' being setup properly
  264. GuiSkinPtr appGuiSkin()C;
  265. bool includeTex(C UID &tex_id);
  266. Elm* getObjMeshElm(C UID &obj_id, bool send_to_server=true, bool set_gui=true);
  267. Elm* getObjSkelElm(C UID &obj_id, bool send_to_server=true, bool set_gui=true);
  268. Elm* getObjPhysElm(C UID &obj_id, bool send_to_server=true, bool set_gui=true);
  269. // create
  270. static cchar8 *explore_desc,
  271. *dis_publish_desc,
  272. * en_publish_desc,
  273. * reload_desc;
  274. void setNewElm(Node<MenuElm> &n, C Str &prefix=S);
  275. void disableMenu(Menu &menu);
  276. void updateMenu();
  277. void create();
  278. // operations
  279. bool testElmsNum();
  280. void explore(Elm &elm);
  281. Str newElmName(ELM_TYPE type, C UID &parent_id);
  282. void newElm(ELM_TYPE type);
  283. Elm* newElm(ELM_TYPE type, C UID &parent_id, C Str *name=null, bool refresh_elm_list=true);
  284. Elm* newWorld(C Str &name, int area_size, int hm_res, C UID &parent_id, bool set_cur);
  285. void setMtrl(Elm &mtrl, ImporterClass::Import::MaterialEx &src, C Str &src_file=S);
  286. Elm& newMtrl(ImporterClass::Import::MaterialEx &src, C UID parent_id=UIDZero, C Str &src_file=S); // create new material from 'src' !! this doesn't set elm list and doesn't send to the server !!
  287. void setElmName(Elm &elm, C Str &name, C TimeStamp &time=TimeStamp().getUTC());
  288. void setElmNames(Memc<Edit::IDParam<Str> > &elms, bool adjust_elms=false); // 'adjust_elms'=if this is performed because of undo, and in that case we need to remember current names, so we can undo this change later
  289. void renameElm(C UID &elm_id, C Str &name);
  290. void replaceName(C MemPtr<UID> &elm_ids, C Str &from, C Str &to);
  291. void closeElm(C UID &elm_id); // close elements that keep handles to files (sounds/vidoes)
  292. void paramEditObjChanged(C UID *obj_id=null);
  293. // remove
  294. void remove(ElmNode &node, Memc<UID> &ids, Memc<UID> &removed, C TimeStamp &time); // process recursively to remove only parents without their children
  295. void remove(Memc<UID> &ids, bool parents_only, bool set_undo=true);
  296. void restore(Memc<UID> &ids, bool set_undo=true);
  297. // publish
  298. void disablePublish(ElmNode &node, Memc<UID> &ids, Memc<UID> &processed, C TimeStamp &time); // process recursively to disable only parents without their children
  299. void disablePublish(Memc<UID> &ids, bool parents_only, bool set_undo=true);
  300. void enablePublish(Memc<UID> &ids, bool set_undo=true);
  301. void reload(Memc<UID> &elm_ids);
  302. void cancelReload(C MemPtr<UID> &elm_ids);
  303. void removeMeshVtx(C MemPtr<UID> &elm_ids, uint flag);
  304. bool forceImageSize(Str &file, C VecI2 &size, bool relative, TimeStamp &file_time, C TimeStamp &time);
  305. void imageMipMap(C MemPtr<UID> &elm_ids, bool on);
  306. void mtrlRGB(C MemPtr<UID> &elm_ids, C Vec &rgb, bool mul=false);
  307. void mtrlAlpha(C MemPtr<UID> &elm_ids);
  308. void mtrlCull(C MemPtr<UID> &elm_ids, bool on);
  309. void mtrlFlipNrmY(C MemPtr<UID> &elm_ids, bool on);
  310. void mtrlDownsizeTexMobile(C MemPtr<UID> &elm_ids, byte downsize);
  311. void mtrlTexQualityiOS(C MemPtr<UID> &elm_ids, bool quality);
  312. bool mtrlMulTexCol(C MemPtr<UID> &elm_ids);
  313. bool mtrlMulTexRough(C MemPtr<UID> &elm_ids);
  314. void mtrlMoveToObj(C MemPtr<UID> &elm_ids);
  315. bool mtrlGet(C UID &elm_id, EditMaterial &mtrl);
  316. bool mtrlSync(C UID &elm_id, C EditMaterial &mtrl, bool reload_textures, bool adjust_params, cptr undo_change_type="sync");
  317. bool mtrlSync(C UID &elm_id, C Edit::Material &mtrl, bool reload_textures, bool adjust_params);
  318. uint createBaseTextures(Image &base_0, Image &base_1, C EditMaterial &material, bool changed_flip_normal_y);
  319. uint mtrlCreateBaseTextures(EditMaterial &material, bool changed_flip_normal_y);
  320. bool mtrlCreateReflectionTexture(Image &reflection, C EditMaterial &material);
  321. void mtrlCreateReflectionTexture(EditMaterial &material);
  322. void mtrlCreateDetailTexture(EditMaterial &material);
  323. void mtrlCreateMacroTexture(EditMaterial &material);
  324. void mtrlCreateLightTexture(EditMaterial &material);
  325. bool mtrlReloadTextures(C UID &elm_id, bool base, bool reflection, bool detail, bool macro, bool light);
  326. void mtrlReloadTextures(C MemPtr<UID> &elm_ids, bool base, bool reflection, bool detail, bool macro, bool light);
  327. Animation* getAnim(C UID &elm_id, Animation &temp)C;
  328. bool animGet(C UID &elm_id, Animation &anim)C;
  329. bool animSet(C UID &elm_id, C Animation &anim);
  330. void setAnimParams(Elm &elm_anim);
  331. void animClip(C MemPtr<UID> &elm_ids);
  332. void animLinear(C MemPtr<UID> &elm_ids, bool linear);
  333. void animLoop(C MemPtr<UID> &elm_ids, bool loop);
  334. void animSetTargetSkel(C MemPtr<UID> &anim_ids, C UID &skel_id);
  335. void transformSet(C MemPtr<UID> &elm_ids);
  336. void transformApply(C MemPtr<UID> &elm_ids);
  337. void transformApply(C MemPtr<UID> &elm_ids, C Matrix &matrix);
  338. void transformBottom(C MemPtr<UID> &elm_ids);
  339. void transformBack(C MemPtr<UID> &elm_ids);
  340. void transformCenter(C MemPtr<UID> &elm_ids);
  341. void transformCenterXZ(C MemPtr<UID> &elm_ids);
  342. void transformRotYMinBox(C MemPtr<UID> &elm_ids);
  343. void objSetBody(C MemPtr<UID> &elm_ids, C UID &body_id);
  344. void soundImportAs(C MemPtr<UID> &elm_ids, SOUND_CODEC codec=SOUND_NONE, int rel_bit_rate=-1);
  345. void mulSoundVolume(C MemPtr<UID> &elm_ids, flt volume);
  346. void adjustAnimations(C UID &skel_id, C EditSkeleton &old_edit_skel, C Skeleton &old_skel, C Skeleton &new_skel, C MemPtr<Mems<IndexWeight> > &bone_weights, int old_bone_as_root=-1);
  347. void offsetAnimations(C Skeleton &old_skel, C Skeleton &new_skel, C UID &skel_id);
  348. /*void updateSkelBoneTypes()
  349. {
  350. REPA(elms)
  351. {
  352. Elm &elm=elms[i]; if(elm.type==ELM_SKEL)
  353. {
  354. Skeleton skel; if(skel.load(gamePath(elm)))
  355. {
  356. Skeleton temp=skel; temp.setBoneTypes();
  357. if(conditionalAdjustAnimations(elm.id, skel, temp, null))
  358. {
  359. temp.save(gamePath(elm));
  360. elm.skelData().newVer();
  361. elm.skelData().file_time.getUTC();
  362. }
  363. }
  364. }
  365. }
  366. }*/
  367. bool validElm(Elm &elm);
  368. void duplicate(Memc<UID> &ids, MemPtr<UID> duplicated=null, C Str &suffix=" Copy");
  369. virtual void eraseElm(C UID &elm_id)override;
  370. virtual bool eraseTex(C UID &tex_id)override;
  371. virtual void eraseWorldAreaObjs(C UID &world_id, C VecI2 &area_xy)override;
  372. virtual void eraseRemoved()override;
  373. void setElmParent(Memc<Edit::IDParam<UID> > &elms, bool adjust_elms=false, bool as_undo=false); // 'adjust_elms'=if this is performed because of undo, and in that case we need to remember current parents, so we can undo this change later
  374. void drag(Memc<UID> &elms, GuiObj *focus_obj, C Vec2 &screen_pos);
  375. void collapse (Memc<UID> &ids, Memc<EEItem*> &items);
  376. void expand (Memc<UID> &ids, Memc<EEItem*> &items);
  377. void expandAll(Memc<UID> &ids, Memc<EEItem*> &items);
  378. void expandAll(ElmNode &node);
  379. void floodExisting(ElmNode &node, bool no_publish=false);
  380. void setExisting();
  381. static int CompareEnum(C Str &a, C Str &b);
  382. void enumChanged(C UID &enum_id=UIDZero); // 'enum_id' can also point to OBJ_CLASS
  383. void meshVariationChanged();
  384. void fontChanged();
  385. void panelChanged(C UID &elm_id);
  386. void panelImageChanged(C UID &elm_id);
  387. void mtrlTexChanged();
  388. // update
  389. static void DragElmsStart(ProjectEx &proj);
  390. void dragElmsStart();
  391. static void DragElmsCancel(ProjectEx &proj);
  392. static void DragElmsFinish(ProjectEx &proj, GuiObj *obj, C Vec2 &screen_pos);
  393. void update();
  394. // gui
  395. static int CompareChildren(C int &a, C int &b);
  396. static int CompareChildren(C EEItem &a, C Elm &b);
  397. bool hasInvalid(ElmNode &node);
  398. void getActiveAppElms(Memt<Elm*> &app_elms, C UID &app_id, ElmNode &node, bool inside_valid);
  399. void getActiveAppElms(Memt<Elm*> &app_elms);
  400. void activateSources(int rebuild=0); // -1=never, 0=auto, 1=always
  401. static void ActivateApp(ElmList::AppCheck &app_check);
  402. bool activateApp(C UID &elm_id );
  403. void setList(EEItem &item, int depth, bool parent_removed, bool parent_contains_name);
  404. void includeElmFileSize(ListElm &e, ElmNode &node);
  405. void includeElmNotVisibleFileSize(ListElm &e, ElmNode &node);
  406. bool hasVisibleChildren(C ElmNode &node)C;
  407. void setList(ElmNode &node, int depth=0, int vis_parent=-1, bool parent_removed=false, bool parent_contains_name=false, bool parent_no_publish=false);
  408. bool setFilter(ElmNode &node);
  409. bool setFilter(Memx<EEItem> &items);
  410. ProjectEx& editing(C UID &elm_id, bool force_open_parents=true);
  411. bool editing(Memx<EEItem> &items, C Str &name);
  412. ProjectEx& editing(C Str &name);
  413. void setList(bool set_hierarchy=true, bool set_existing=true);
  414. void clearListSel(); // clear list selection
  415. void setListSel(Memc<UID> &list_sel, MemPtr<EEItem*> list_sel_item=null);
  416. void setListCurSel(); // needs to be called before adding/removing elements from 'elms'
  417. void setMenuListSel();
  418. ProjectEx& refresh(bool set_hierarchy=true, bool set_existing=true);
  419. void elmOpenParents(C UID &id, bool set_list=true);
  420. void elmSelect(C MemPtr<UID> &elm_ids);
  421. bool elmReload(C MemPtr<UID> &elm_ids, bool remember_result=false, bool refresh_elm_list=true);
  422. void elmLocate(C UID &id, bool set_cur=false);
  423. void elmHighlight(C UID &id, C Str &name, bool force=false);
  424. void elmToggle(EEItem *item);
  425. void elmToggle(Elm *elm);
  426. void elmToggle(ListElm *elm);
  427. void elmToggle(C UID &id);
  428. void elmActivate(Elm *elm);
  429. void elmNext(C UID &elm_id, int dir=1);
  430. void resize();
  431. void elmMenu(C Vec2 &pos, bool touch=false);
  432. bool drop(C Str &name, C UID &parent_id, Memt<UID> &new_folders);
  433. void drop(Memc<Str> &names, C UID &parent_id);
  434. void drop(Memc<Str> &names, GuiObj *focus_obj, C Vec2 &screen_pos);
  435. // process dependencies
  436. virtual void meshSetAutoTanBin(Elm &elm, C MaterialPtr &material)override;
  437. virtual void animTransformChanged(Elm &elm_anim)override;
  438. virtual void skelTransformChanged(C UID &skel_id)override;
  439. virtual void objChanged(Elm &obj)override;
  440. virtual void meshChanged(Elm &mesh)override;
  441. void elmChanging(Elm &elm);
  442. void elmChanged(Elm &elm);
  443. // sync
  444. void receivedData(Elm &elm, File &data, File &extra);
  445. void syncElm(Elm &elm, Elm &src, File &src_data, File &src_extra, bool sync_long);
  446. virtual bool syncWaypoint(C UID &world_id, C UID &waypoint_id, Version &src_ver, EditWaypoint &src)override;
  447. virtual bool syncLake(C UID &world_id, C UID &lake_id, Version &src_ver, Lake &src)override;
  448. virtual bool syncRiver(C UID &world_id, C UID &river_id, Version &src_ver, River &src)override;
  449. virtual void hmDel(C UID &world_id, C VecI2 &area_xy, C TimeStamp *time=null)override;
  450. virtual Heightmap* hmGet(C UID &world_id, C VecI2 &area_xy, Heightmap &temp)override;
  451. virtual uint hmUpdate(C UID &world_id, C VecI2 &area_xy, uint area_sync_flag, C AreaVer &src_area, Heightmap &src_hm)override;
  452. virtual void objGet(C UID &world_id, C VecI2 &area_xy, C Memc<UID> &obj_ids, Memc<ObjData> &objs)override; // assumes that 'obj_ids' is sorted
  453. virtual bool syncObj(C UID &world_id, C VecI2 &area_xy, Memc<ObjData> &objs, Map<VecI2, Memc<ObjData> > *obj_modified=null, Memc<UID> *local_newer=null)override;
  454. void syncCodes();
  455. void syncCodes(C Memc<ElmCodeData> &elm_code_datas);
  456. void syncCodes(C Memc<ElmCodeBase> &elm_code_bases, bool resync);
  457. // Editor Network Interface
  458. bool codeGet(C UID &elm_id, Str &data);
  459. bool codeSet(C UID &elm_id, C Str &data);
  460. bool fileRead(C UID &elm_id, File &f);
  461. bool fileSet(C UID &elm_id, File &f);
  462. bool imageGet(C UID &elm_id, Image &image);
  463. bool imageSet(C UID &elm_id, File &image, bool has_color, bool has_alpha);
  464. bool imageSet(C UID &elm_id, C Image &image);
  465. bool meshSet(C UID &elm_id, File &data);
  466. bool modifyObj(C UID &obj_id, C MemPtr<Edit::ObjChange> &changes);
  467. // External Code Sync
  468. bool codeCheck();
  469. Str codeSyncPath();
  470. void codeExplore();
  471. bool codeExport (bool gui);
  472. bool codeImport(bool gui);
  473. // io
  474. virtual void flush(SAVE_MODE save_mode=SAVE_DEFAULT)override;
  475. void flushElm(C UID &elm_id);
  476. void getFileSizes();
  477. void savedTex(C UID &tex_id, int size);
  478. bool saveTex(C Image &img, C UID &tex_id);
  479. void pauseServer();
  480. void resumeServer();
  481. virtual LOAD_RESULT open(C UID &id, C Str &name, C Str &path, Str &error, bool ignore_lock=false)override;
  482. virtual bool save(SAVE_MODE save_mode=SAVE_DEFAULT)override;
  483. virtual ProjectEx& del()override;
  484. virtual void close()override;
  485. void pause();
  486. void resume();
  487. // outer region
  488. inline void hide ( );
  489. inline bool visible( )C;
  490. inline void visible( bool on );
  491. inline void draw ( );
  492. inline C Rect& rect ( );
  493. inline void rect (C Rect &rect);
  494. inline Vec2 size ( );
  495. public:
  496. ProjectEx();
  497. };
  498. /******************************************************************************/
  499. /******************************************************************************/
  500. extern ProjectEx Proj;
  501. /******************************************************************************/