Interface_Command.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * Copyright (C) =USTC= Fu Li
  3. *
  4. * Author : Fu Li
  5. * Create : 2004-10-5
  6. * Home : http://www.crazy-bit.com/
  7. * Mail : crazybit@263.net
  8. * History :
  9. */
  10. #ifndef __FOO_INTERFACE_COMMAND__2004_10_05__H__
  11. #define __FOO_INTERFACE_COMMAND__2004_10_05__H__
  12. class FCObjCanvas ; // external class
  13. class FCCmdArtPrider ; // interface for FCObjCanvas::Execute
  14. class FCCmdOnceExecute ; // this command execute once and can't be UNDO/REDO
  15. //=============================================================================
  16. /**
  17. * Interface for FCObjCanvas::Execute.
  18. */
  19. class FCCmdArtPrider
  20. {
  21. public:
  22. FCCmdArtPrider() : m_bDeleteAfterExecute(false) {}
  23. virtual ~FCCmdArtPrider() {}
  24. void SetDeleteFlagAfterExecute (bool bFlag) {m_bDeleteAfterExecute=bFlag;}
  25. bool IsNeedDeleteAfterExecute() const {return m_bDeleteAfterExecute ? true : false;}
  26. /// Operation on canvas.
  27. virtual void Execute (FCObjCanvas& canvas, FCObjProgress* pProgress) =0 ;
  28. /// Undo.
  29. virtual void Undo (FCObjCanvas& canvas) =0 ;
  30. /// Redo.
  31. virtual void Redo (FCObjCanvas& canvas) =0 ;
  32. private:
  33. int m_bDeleteAfterExecute ;
  34. };
  35. //=============================================================================
  36. /**
  37. * This command execute once and can't be UNDO/REDO.
  38. */
  39. class FCCmdOnceExecute : public FCCmdArtPrider
  40. {
  41. virtual void Undo (FCObjCanvas& canvas) {assert(false);}
  42. virtual void Redo (FCObjCanvas& canvas) {assert(false);}
  43. public:
  44. FCCmdOnceExecute() {SetDeleteFlagAfterExecute(true);}
  45. };
  46. //=============================================================================
  47. /**
  48. * Composite command.
  49. */
  50. class FCCmdComposite : public FCCmdArtPrider,
  51. private PCL_Interface_Composite<FCCmdArtPrider>
  52. {
  53. protected:
  54. virtual void Execute (FCObjCanvas& canvas, FCObjProgress* pProgress)
  55. {
  56. for (int i=0 ; i < PCL_GetObjectCount() ; i++)
  57. PCL_GetObject(i)->Execute (canvas, pProgress) ;
  58. }
  59. virtual void Undo (FCObjCanvas& canvas)
  60. {
  61. for (int i=PCL_GetObjectCount()-1 ; i >= 0 ; i--)
  62. PCL_GetObject(i)->Undo(canvas) ;
  63. }
  64. virtual void Redo (FCObjCanvas& canvas)
  65. {
  66. for (int i=0 ; i < PCL_GetObjectCount() ; i++)
  67. PCL_GetObject(i)->Redo(canvas) ;
  68. }
  69. public:
  70. /// Add a command to composite command.
  71. void PushImgCommand (FCCmdArtPrider* pCmd)
  72. {
  73. assert (pCmd) ;
  74. if (pCmd)
  75. PCL_PushObject (pCmd) ;
  76. }
  77. };
  78. //=============================================================================
  79. // inline Implement
  80. //=============================================================================
  81. #endif