Save Changes.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /******************************************************************************/
  2. #include "stdafx.h"
  3. namespace EE{
  4. namespace Edit{
  5. /******************************************************************************/
  6. Bool SaveChanges::Elm::doSaveClose() {if(_save )if(!_save(T))return false; doClose(); return true;} // if failed to save then don't close
  7. void SaveChanges::Elm::doClose () {if(_close)_close(T);}
  8. /******************************************************************************/
  9. void SaveChanges::create()
  10. {
  11. Gui+=super::create("Save changes to following elements?").hide(); button[2].show(); flag|=WIN_RESIZABLE;
  12. T +=region.create();
  13. T +=save .create("Yes" ).func(Save , T); save.kbSet();
  14. T +=close .create("No" ).func(Close , T);
  15. T +=cancel.create("Cancel").func(Cancel, T);
  16. ListColumn lc[]=
  17. {
  18. ListColumn(MEMBER(Elm, display), LCW_DATA, "name"),
  19. };
  20. region+=list.create(lc, Elms(lc), true).elmHeight(0.035f).textSize(0.035f);
  21. rect(Rect_C(0, 0, 1.1f, 0.57f));
  22. }
  23. /******************************************************************************/
  24. void SaveChanges::set(C MemPtr<Elm> &elms, void (*after_save_close)(Bool all_saved, Ptr user), Ptr user)
  25. {
  26. T. elms =elms;
  27. T._after_save_close=after_save_close;
  28. T._user =user;
  29. list.setData(T.elms);
  30. if(elms.elms())activate();else{if(_after_save_close)_after_save_close(true, _user); hide();}
  31. }
  32. /******************************************************************************/
  33. void SaveChanges::clear () {_after_save_close=null; list.clear(); elms.del(); hide();}
  34. void SaveChanges::doSave () {Bool all_saved=true; FREPA (elms)all_saved&=elms[i].doSaveClose(); if(_after_save_close)_after_save_close(all_saved, _user); clear();} // save in specified order
  35. void SaveChanges::doClose() { FREPAO(elms) .doClose (); if(_after_save_close)_after_save_close(true , _user); clear();} // close in specified order
  36. /******************************************************************************/
  37. Rect SaveChanges::sizeLimit( )C {Rect r=super::sizeLimit(); r.min.set(0.9f, 0.3f); return r;}
  38. Window& SaveChanges::rect (C Rect &rect)
  39. {
  40. super::rect(rect);
  41. save .rect(Rect_D(clientWidth()*0.25f, -clientHeight()+0.035f, 0.22f, 0.05f));
  42. close .rect(Rect_D(clientWidth()*0.50f, -clientHeight()+0.035f, 0.22f, 0.05f));
  43. cancel.rect(Rect_D(clientWidth()*0.75f, -clientHeight()+0.035f, 0.22f, 0.05f));
  44. region.rect(Rect (0.05f, save.rect().max.y+0.025f, clientWidth()-0.05f, -0.025f));
  45. return T;
  46. }
  47. /******************************************************************************/
  48. }}
  49. /******************************************************************************/