CE Item.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /******************************************************************************/
  2. #include "stdafx.h"
  3. namespace EE{
  4. namespace Edit{
  5. /******************************************************************************/
  6. Item& GetFolder(Memx<Item> &items, C Str &name)
  7. {
  8. REPA(items)if(items[i].base_name==name)return items[i];
  9. return items.New().set(Item::FOLDER, name);
  10. }
  11. Item& GetFile(Memx<Item> &items, C Str &name, C Str &full_name)
  12. {
  13. Str start=GetStart(name);
  14. if( start.length()==name.length())return items.New().set(Item::FILE, name, full_name);
  15. return GetFile(GetFolder(items, start).children, GetStartNot(name), full_name);
  16. }
  17. /******************************************************************************/
  18. void Item::replacePath(C Str &src, C Str &dest)
  19. {
  20. ReplacePath(full_name, src, dest);
  21. REPAO(children).replacePath(src, dest);
  22. }
  23. /******************************************************************************/
  24. Bool Item::save(File &f, StrLibrary &sl)C
  25. {
  26. f<<type;
  27. sl.putStr(f, base_name);
  28. sl.putStr(f, full_name);
  29. f.cmpUIntV(children.elms()); FREPA(children)if(!children[i].save(f, sl))return false;
  30. return f.ok();
  31. }
  32. Bool Item::load(File &f, StrLibrary &sl)
  33. {
  34. f>>type;
  35. sl.getStr(f, base_name); // base_name is not GetBase(full_name) because it is display name, while full_name is file name (folders have it empty)
  36. sl.getStr(f, full_name);
  37. children.setNum(f.decUIntV()); FREPA(children)if(!children[i].load(f, sl))goto error;
  38. if(f.ok())return true;
  39. error:
  40. /*del();*/ return false;
  41. }
  42. /******************************************************************************/
  43. }}
  44. /******************************************************************************/