Save Changes.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /******************************************************************************/
  2. namespace Edit{
  3. /******************************************************************************/
  4. STRUCT(SaveChanges , ClosableWindow)
  5. //{
  6. struct Elm
  7. {
  8. Str name, display;
  9. UID id;
  10. Ptr user;
  11. // set
  12. Elm& set (C Str &name, C Str &display, C UID &id=UIDZero, Ptr user=null) {T.name=name; T.display=display; T.id=id; T.user=user; return T;}
  13. Elm& save (Bool (*func)(Elm &elm)=null ) {T._save =func; return T;}
  14. Elm& close(void (*func)(Elm &elm)=null ) {T._close=func; return T;}
  15. // operations
  16. Bool doSaveClose();
  17. void doClose ();
  18. Elm() {id.zero(); user=null; _save=null; _close=null;}
  19. private:
  20. Bool (*_save )(Elm &elm);
  21. void (*_close)(Elm &elm);
  22. };
  23. Memc<Elm> elms;
  24. List<Elm> list;
  25. Region region;
  26. Button save, close, cancel;
  27. // statics
  28. static void Save (SaveChanges &sc) {sc.doSave ();}
  29. static void Close (SaveChanges &sc) {sc.doClose();}
  30. static void Cancel(SaveChanges &sc) {sc.hide ();}
  31. // manage
  32. void create();
  33. // set
  34. void set(C MemPtr<Elm> &elms, void (*after_save_close)(Bool all_saved, Ptr user)=null, Ptr user=null);
  35. T1(TYPE) void set(C MemPtr<Elm> &elms, void (*after_save_close)(Bool all_saved, TYPE *user) , TYPE *user ) {set(elms, (void(*)(Bool, Ptr))after_save_close, user);}
  36. T1(TYPE) void set(C MemPtr<Elm> &elms, void (*after_save_close)(Bool all_saved, TYPE &user) , TYPE &user ) {set(elms, (void(*)(Bool, Ptr))after_save_close, &user);}
  37. // operations
  38. void clear ();
  39. void doSave ();
  40. void doClose();
  41. virtual Rect sizeLimit( )C;
  42. virtual Window& rect (C Rect &rect) ;
  43. SaveChanges() {_after_save_close=null; _user=null;}
  44. private:
  45. void (*_after_save_close)(Bool all_saved, Ptr user);
  46. Ptr _user;
  47. };
  48. /******************************************************************************/
  49. } // namespace
  50. /******************************************************************************/