SynchronizeChecklist.h 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. //----------------------------------------------------------------------------
  2. #ifndef SynchronizeChecklistH
  3. #define SynchronizeChecklistH
  4. //----------------------------------------------------------------------------
  5. #include "IEListView.hpp"
  6. #include "NortonLikeListView.hpp"
  7. #include <System.Classes.hpp>
  8. #include <Vcl.ComCtrls.hpp>
  9. #include <Vcl.Controls.hpp>
  10. #include <Vcl.ExtCtrls.hpp>
  11. #include <Vcl.ImgList.hpp>
  12. #include <Vcl.Menus.hpp>
  13. #include <Vcl.StdCtrls.hpp>
  14. #include "PngImageList.hpp"
  15. //----------------------------------------------------------------------------
  16. #include <Terminal.h>
  17. #include <System.Actions.hpp>
  18. #include <Vcl.ActnList.hpp>
  19. #include <System.ImageList.hpp>
  20. //----------------------------------------------------------------------------
  21. class TSynchronizeChecklistDialog : public TForm
  22. {
  23. __published:
  24. TPanel * Panel;
  25. TIEListView *ListView;
  26. TStatusBar *StatusBar;
  27. TPngImageList *ActionImages;
  28. TButton *OkButton;
  29. TButton *CancelButton;
  30. TButton *CheckAllButton;
  31. TButton *UncheckAllButton;
  32. TButton *CheckButton;
  33. TButton *UncheckButton;
  34. TPopupMenu *ListViewPopupMenu;
  35. TMenuItem *CheckItem;
  36. TMenuItem *UncheckItem;
  37. TMenuItem *N1;
  38. TMenuItem *SelectAllItem;
  39. TTimer *UpdateTimer;
  40. TButton *HelpButton;
  41. TButton *CustomCommandsButton2;
  42. TActionList *ActionList;
  43. TAction *CheckAction;
  44. TAction *UncheckAction;
  45. TAction *CheckAllAction;
  46. TAction *UncheckAllAction;
  47. TAction *SelectAllAction;
  48. TAction *CustomCommandsAction;
  49. TMenuItem *N2;
  50. TButton *ReverseButton;
  51. TAction *ReverseAction;
  52. TMenuItem *ReverseItem;
  53. TPngImageList *ActionImages120;
  54. TPngImageList *ActionImages144;
  55. TPngImageList *ActionImages192;
  56. TAction *CalculateSizeAction;
  57. TMenuItem *Calculate1;
  58. TButton *CalculateSizeButton;
  59. TAction *CalculateSizeAllAction;
  60. TAction *MoveAction;
  61. TButton *MoveButton;
  62. TMenuItem *MoveItem;
  63. TAction *CheckDirectoryAction;
  64. TAction *UncheckDirectoryAction;
  65. TMenuItem *N3;
  66. TMenuItem *CheckAllFilesinThisDirectory1;
  67. TMenuItem *UncheckAllActionsinThisDirectory1;
  68. TAction *BrowseLocalAction;
  69. TAction *BrowseRemoteAction;
  70. TMenuItem *BrowseLocalDirectory1;
  71. TMenuItem *BrowseLocalDirectory2;
  72. TMenuItem *Calculate3;
  73. TMenuItem *CalculateAll1;
  74. TPopupMenu *CalculateSizePopupMenu;
  75. TMenuItem *Calculate2;
  76. TMenuItem *CalculateAll2;
  77. void __fastcall HelpButtonClick(TObject * Sender);
  78. void __fastcall FormShow(TObject * Sender);
  79. void __fastcall StatusBarDrawPanel(TStatusBar *StatusBar,
  80. TStatusPanel *Panel, const TRect &Rect);
  81. void __fastcall ListViewChange(TObject *Sender, TListItem *Item,
  82. TItemChange Change);
  83. void __fastcall ListViewChanging(TObject *Sender, TListItem *Item,
  84. TItemChange Change, bool &AllowChange);
  85. void __fastcall CheckAllActionExecute(TObject *Sender);
  86. void __fastcall CheckActionExecute(TObject *Sender);
  87. void __fastcall ListViewSelectItem(TObject *Sender, TListItem *Item,
  88. bool Selected);
  89. void __fastcall UpdateTimerTimer(TObject *Sender);
  90. void __fastcall SelectAllActionExecute(TObject *Sender);
  91. void __fastcall StatusBarMouseDown(TObject *Sender, TMouseButton Button,
  92. TShiftState Shift, int X, int Y);
  93. void __fastcall ListViewCompare(TObject *Sender, TListItem *Item1,
  94. TListItem *Item2, int Data, int &Compare);
  95. void __fastcall ListViewSecondaryColumnHeader(TCustomIEListView *Sender,
  96. int Index, int &SecondaryColumn);
  97. void __fastcall ListViewContextPopup(TObject *Sender, TPoint &MousePos,
  98. bool &Handled);
  99. void __fastcall CustomCommandsActionExecute(TObject *Sender);
  100. void __fastcall ListViewAdvancedCustomDrawSubItem(TCustomListView *Sender, TListItem *Item,
  101. int SubItem, TCustomDrawState State, TCustomDrawStage Stage, bool &DefaultDraw);
  102. void __fastcall StatusBarResize(TObject *Sender);
  103. void __fastcall UncheckActionExecute(TObject *Sender);
  104. void __fastcall UncheckAllActionExecute(TObject *Sender);
  105. void __fastcall ReverseActionExecute(TObject *Sender);
  106. void __fastcall ListViewClick(TObject *Sender);
  107. void __fastcall OkButtonClick(TObject *Sender);
  108. void __fastcall CalculateSizeActionExecute(TObject *Sender);
  109. void __fastcall CalculateSizeAllActionExecute(TObject *Sender);
  110. void __fastcall MoveActionExecute(TObject *Sender);
  111. void __fastcall CheckDirectoryActionExecute(TObject *Sender);
  112. void __fastcall UncheckDirectoryActionExecute(TObject *Sender);
  113. void __fastcall BrowseLocalActionExecute(TObject *Sender);
  114. void __fastcall BrowseRemoteActionExecute(TObject *Sender);
  115. void __fastcall ListViewRecreate(TObject *Sender);
  116. void __fastcall CalculateSizeButtonDropDownClick(TObject *Sender);
  117. public:
  118. __fastcall TSynchronizeChecklistDialog(
  119. TComponent * AOwner, TSynchronizeMode Mode, int Params,
  120. const UnicodeString & LocalDirectory, const UnicodeString & RemoteDirectory,
  121. TCustomCommandMenuEvent OnCustomCommandMenu, TFullSynchronizeEvent OnSynchronize,
  122. TSynchronizeChecklistCalculateSize OnSynchronizeChecklistCalculateSize, TSynchronizeMoveEvent OnSynchronizeMove,
  123. TSynchronizeBrowseEvent OnSynchronizeBrowse, void * Token);
  124. virtual __fastcall ~TSynchronizeChecklistDialog();
  125. bool __fastcall Execute(TSynchronizeChecklist * Checklist);
  126. protected:
  127. bool FFormRestored;
  128. TSynchronizeChecklist * FChecklist;
  129. TSynchronizeMode FMode;
  130. int FParams;
  131. UnicodeString FLocalDirectory;
  132. UnicodeString FRemoteDirectory;
  133. TWndMethod FOrigListViewWindowProc;
  134. TWndMethod FOrigStatusBarWindowProc;
  135. int FTotals[1 + TSynchronizeChecklist::ActionCount];
  136. int FChecked[1 + TSynchronizeChecklist::ActionCount];
  137. __int64 FCheckedSize[1 + TSynchronizeChecklist::ActionCount];
  138. TListItem * FChangingItem;
  139. bool FChangingItemChecked;
  140. bool FChangingItemIgnore;
  141. bool FChangingItemMass;
  142. TCustomCommandMenuEvent FOnCustomCommandMenu;
  143. TSynchronizeChecklistCalculateSize FOnSynchronizeChecklistCalculateSize;
  144. TSynchronizeMoveEvent FOnSynchronizeMove;
  145. TSynchronizeBrowseEvent FOnSynchronizeBrowse;
  146. typedef std::map<const TSynchronizeChecklist::TItem *, TSynchronizeChecklist::TAction> TActions;
  147. TActions FActions;
  148. TFullSynchronizeEvent FOnSynchronize;
  149. void * FToken;
  150. bool FSynchronizing;
  151. std::unique_ptr<Exception> FException;
  152. std::map<const TSynchronizeChecklist::TItem *, TListItem *> FChecklistToListViewMap;
  153. int FDirectories;
  154. void __fastcall UpdateControls();
  155. void __fastcall UpdateCaption();
  156. virtual void __fastcall CreateParams(TCreateParams & Params);
  157. void __fastcall LoadItem(TListItem * Item);
  158. void __fastcall LoadList();
  159. void __fastcall ListViewWindowProc(TMessage & Message);
  160. void __fastcall StatusBarWindowProc(TMessage & Message);
  161. int __fastcall PanelAt(int X);
  162. void __fastcall CheckAll(bool Check);
  163. void __fastcall Check(bool Check);
  164. TListItem * __fastcall SelectAll(bool Select, int Action = 0,
  165. bool OnlyTheAction = true);
  166. void __fastcall UpdateStatusBarSize();
  167. int __fastcall PanelCount();
  168. inline const TSynchronizeChecklist::TItem * GetChecklistItem(TListItem * Item);
  169. TSynchronizeChecklist::TAction & GetChecklistItemAction(
  170. const TSynchronizeChecklist::TItem * ChecklistItem);
  171. void __fastcall AddSubItem(TListItem * Item, int & Index, const UnicodeString & S);
  172. TRect __fastcall GetColumnHeaderRect(int Index);
  173. virtual void __fastcall Dispatch(void * Message);
  174. void __fastcall UpdateImages();
  175. void __fastcall CMDpiChanged(TMessage & Message);
  176. bool __fastcall GetWindowParams(UnicodeString & WindowParams);
  177. void __fastcall ProcessedItem(void * Token, const TSynchronizeChecklist::TItem * ChecklistItem);
  178. void __fastcall UpdatedSynchronizationChecklistItems(const TSynchronizeChecklist::TItemList & Items);
  179. void __fastcall CountItemSize(const TSynchronizeChecklist::TItem * ChecklistItem, int Factor);
  180. void __fastcall CountItem(const TSynchronizeChecklist::TItem * ChecklistItem, int Factor);
  181. void __fastcall CountItemTotal(const TSynchronizeChecklist::TItem * ChecklistItem, int Factor);
  182. typedef std::pair<const TSynchronizeChecklist::TItem *, const TSynchronizeChecklist::TItem *> TSynchronizeMoveItems;
  183. TSynchronizeMoveItems __fastcall GetMoveItems();
  184. void __fastcall DeleteItem(TListItem * Item);
  185. void __fastcall CheckDirectory(bool Check);
  186. void __fastcall DoBrowse(TOperationSide Side);
  187. void __fastcall ListViewHintShow(TCMHintShow & HintShow);
  188. void __fastcall StatusBarHintShow(TCMHintShow & HintShow);
  189. DYNAMIC void __fastcall KeyDown(Word & Key, TShiftState Shift);
  190. void CalculateSize(bool All);
  191. };
  192. //----------------------------------------------------------------------------
  193. #endif