SynchronizeChecklist.h 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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. #include <System.Actions.hpp>
  16. #include <Vcl.ActnList.hpp>
  17. #include <System.ImageList.hpp>
  18. //----------------------------------------------------------------------------
  19. #include <Terminal.h>
  20. #include <GUITools.h>
  21. //----------------------------------------------------------------------------
  22. class TSynchronizeChecklistDialog : public TForm
  23. {
  24. __published:
  25. TPanel * Panel;
  26. TIEListView *ListView2;
  27. TStatusBar *StatusBar2;
  28. TPngImageList *ActionImages;
  29. TButton *OkButton;
  30. TButton *CancelButton;
  31. TButton *CheckAllButton;
  32. TButton *UncheckAllButton;
  33. TButton *CheckButton;
  34. TButton *UncheckButton;
  35. TPopupMenu *ListViewPopupMenu;
  36. TMenuItem *CheckItem;
  37. TMenuItem *UncheckItem;
  38. TMenuItem *N1;
  39. TMenuItem *SelectAllItem;
  40. TTimer *UpdateTimer;
  41. TButton *HelpButton;
  42. TButton *CustomCommandsButton2;
  43. TActionList *ActionList;
  44. TAction *CheckAction;
  45. TAction *UncheckAction;
  46. TAction *CheckAllAction;
  47. TAction *UncheckAllAction;
  48. TAction *SelectAllAction;
  49. TAction *CustomCommandsAction;
  50. TMenuItem *N2;
  51. TButton *ReverseButton;
  52. TAction *ReverseAction;
  53. TMenuItem *ReverseItem;
  54. TPngImageList *ActionImages120;
  55. TPngImageList *ActionImages144;
  56. TPngImageList *ActionImages192;
  57. TAction *CalculateSizeAction;
  58. TMenuItem *Calculate1;
  59. TButton *ToolsMenuButton;
  60. TAction *CalculateSizeAllAction;
  61. TAction *MoveAction;
  62. TButton *MoveButton;
  63. TMenuItem *MoveItem;
  64. TAction *CheckDirectoryAction;
  65. TAction *UncheckDirectoryAction;
  66. TMenuItem *N3;
  67. TMenuItem *CheckAllFilesinThisDirectory1;
  68. TMenuItem *UncheckAllActionsinThisDirectory1;
  69. TAction *ExploreLocalAction2;
  70. TAction *ExploreRemoteAction2;
  71. TMenuItem *ExploreLocalDirectory1;
  72. TMenuItem *ExploreRemoteDirectory1;
  73. TAction *FindMoveCandidateAction;
  74. TMenuItem *Calculate3;
  75. TMenuItem *CalculateAll1;
  76. TPopupMenu *ToolsPopupMenu;
  77. TMenuItem *Calculate2;
  78. TMenuItem *CalculateAll2;
  79. TMenuItem *N4;
  80. TMenuItem *FindMoveCandidate1;
  81. TPopupMenu *OkPopupMenu;
  82. TMenuItem *StartItem;
  83. TMenuItem *StartQueueItem;
  84. TMenuItem *LeftDirectory1;
  85. TMenuItem *RightDirectory1;
  86. TAction *RemotePathToClipboardAction;
  87. TMenuItem *CopyPathtoClipboard1;
  88. TAction *LocalPathToClipboardAction;
  89. TMenuItem *CopyPathtoClipboard2;
  90. void __fastcall HelpButtonClick(TObject * Sender);
  91. void __fastcall FormShow(TObject * Sender);
  92. void __fastcall StatusBar2DrawPanel(TStatusBar *StatusBar,
  93. TStatusPanel *Panel, const TRect &Rect);
  94. void __fastcall ListView2Change(TObject *Sender, TListItem *Item,
  95. TItemChange Change);
  96. void __fastcall ListView2Changing(TObject *Sender, TListItem *Item,
  97. TItemChange Change, bool &AllowChange);
  98. void __fastcall CheckAllActionExecute(TObject *Sender);
  99. void __fastcall CheckActionExecute(TObject *Sender);
  100. void __fastcall ListView2SelectItem(TObject *Sender, TListItem *Item,
  101. bool Selected);
  102. void __fastcall UpdateTimerTimer(TObject *Sender);
  103. void __fastcall SelectAllActionExecute(TObject *Sender);
  104. void __fastcall StatusBar2MouseDown(TObject *Sender, TMouseButton Button,
  105. TShiftState Shift, int X, int Y);
  106. void __fastcall ListView2Compare(TObject *Sender, TListItem *Item1,
  107. TListItem *Item2, int Data, int &Compare);
  108. void __fastcall ListView2SecondaryColumnHeader(TCustomIEListView *Sender,
  109. int Index, int &SecondaryColumn);
  110. void __fastcall ListView2ContextPopup(TObject *Sender, TPoint &MousePos,
  111. bool &Handled);
  112. void __fastcall CustomCommandsActionExecute(TObject *Sender);
  113. void __fastcall ListView2AdvancedCustomDrawSubItem(TCustomListView *Sender, TListItem *Item,
  114. int SubItem, TCustomDrawState State, TCustomDrawStage Stage, bool &DefaultDraw);
  115. void __fastcall StatusBar2Resize(TObject *Sender);
  116. void __fastcall UncheckActionExecute(TObject *Sender);
  117. void __fastcall UncheckAllActionExecute(TObject *Sender);
  118. void __fastcall ReverseActionExecute(TObject *Sender);
  119. void __fastcall ListView2Click(TObject *Sender);
  120. void __fastcall OkButtonClick(TObject *Sender);
  121. void __fastcall CalculateSizeActionExecute(TObject *Sender);
  122. void __fastcall CalculateSizeAllActionExecute(TObject *Sender);
  123. void __fastcall MoveActionExecute(TObject *Sender);
  124. void __fastcall CheckDirectoryActionExecute(TObject *Sender);
  125. void __fastcall UncheckDirectoryActionExecute(TObject *Sender);
  126. void __fastcall ExploreLocalAction2Execute(TObject *Sender);
  127. void __fastcall ExploreRemoteAction2Execute(TObject *Sender);
  128. void __fastcall ListView2Recreate(TObject *Sender);
  129. void __fastcall ToolsMenuButtonClick(TObject *Sender);
  130. void __fastcall FindMoveCandidateActionExecute(TObject *Sender);
  131. void __fastcall FormAfterMonitorDpiChanged(TObject *Sender, int OldDPI, int NewDPI);
  132. void __fastcall StartItemClick(TObject *Sender);
  133. void __fastcall OkButtonDropDownClick(TObject *Sender);
  134. void __fastcall StartQueueItemClick(TObject *Sender);
  135. void __fastcall LocalPathToClipboardActionExecute(TObject *Sender);
  136. void __fastcall RemotePathToClipboardActionExecute(TObject *Sender);
  137. public:
  138. __fastcall TSynchronizeChecklistDialog(
  139. TComponent * AOwner, TSynchronizeMode Mode, int Params,
  140. const UnicodeString & Directory1, const UnicodeString & Directory2,
  141. TCustomCommandMenuEvent OnCustomCommandMenu, TFullSynchronizeEvent OnSynchronize,
  142. TQueueSynchronizeEvent OnQueueSynchronize,
  143. TSynchronizeChecklistCalculateSize OnSynchronizeChecklistCalculateSize, TSynchronizeMoveEvent OnSynchronizeMove,
  144. TSynchronizeExploreEvent OnSynchronizeExplore, void * Token);
  145. virtual __fastcall ~TSynchronizeChecklistDialog();
  146. bool __fastcall Execute(TSynchronizeChecklist * Checklist);
  147. protected:
  148. bool FFormRestored;
  149. TSynchronizeChecklist * FChecklist;
  150. TSynchronizeMode FMode;
  151. int FParams;
  152. UnicodeString FDirectory1;
  153. UnicodeString FDirectory2;
  154. TWndMethod FOrigListViewWindowProc;
  155. TWndMethod FOrigStatusBarWindowProc;
  156. int FTotals[1 + TSynchronizeChecklist::ActionCount];
  157. int FChecked[1 + TSynchronizeChecklist::ActionCount];
  158. __int64 FCheckedSize[1 + TSynchronizeChecklist::ActionCount];
  159. TListItem * FChangingItem;
  160. bool FChangingItemChecked;
  161. bool FChangingItemIgnore;
  162. bool FChangingItemMass;
  163. TCustomCommandMenuEvent FOnCustomCommandMenu;
  164. TSynchronizeChecklistCalculateSize FOnSynchronizeChecklistCalculateSize;
  165. TSynchronizeMoveEvent FOnSynchronizeMove;
  166. TSynchronizeExploreEvent FOnSynchronizeExplore;
  167. typedef std::map<const TSynchronizeChecklist::TItem *, TSynchronizeChecklist::TAction> TActions;
  168. TActions FActions;
  169. TFullSynchronizeEvent FOnSynchronize;
  170. TQueueSynchronizeEvent FOnQueueSynchronize;
  171. void * FToken;
  172. bool FSynchronizing;
  173. std::unique_ptr<Exception> FException;
  174. std::map<const TSynchronizeChecklist::TItem *, TListItem *> FChecklistToListViewMap;
  175. int FDirectories;
  176. int FMoveCandidatesValidForSort;
  177. typedef std::vector<const TSynchronizeChecklist::TItem *> TChecklistItems;
  178. typedef std::map<UnicodeString, TChecklistItems> TMoveCandidatesFileNameMap;
  179. TMoveCandidatesFileNameMap FMoveCandidatesFileName;
  180. typedef std::map<__int64, TChecklistItems> TMoveCandidatesSizeMap;
  181. TMoveCandidatesSizeMap FMoveCandidatesSize;
  182. void __fastcall UpdateControls();
  183. void __fastcall UpdateCaption();
  184. virtual void __fastcall CreateParams(TCreateParams & Params);
  185. void __fastcall LoadItem(TListItem * Item);
  186. void __fastcall LoadList();
  187. void __fastcall ListViewWindowProc(TMessage & Message);
  188. void __fastcall StatusBarWindowProc(TMessage & Message);
  189. int __fastcall PanelAt(int X);
  190. void __fastcall CheckAll(bool Check);
  191. void __fastcall Check(bool Check);
  192. TListItem * __fastcall SelectAll(bool Select, int Action = 0,
  193. bool OnlyTheAction = true);
  194. void __fastcall UpdateStatusBarSize();
  195. int __fastcall PanelCount();
  196. inline const TSynchronizeChecklist::TItem * GetChecklistItem(TListItem * Item);
  197. TSynchronizeChecklist::TAction & GetChecklistItemAction(
  198. const TSynchronizeChecklist::TItem * ChecklistItem);
  199. void __fastcall AddSubItem(TListItem * Item, int & Index, const UnicodeString & S);
  200. TRect __fastcall GetColumnHeaderRect(int Index);
  201. virtual void __fastcall Dispatch(void * Message);
  202. void __fastcall UpdateImages();
  203. bool __fastcall GetWindowParams(UnicodeString & WindowParams);
  204. void __fastcall ProcessedItem(void * Token, const TSynchronizeChecklist::TItem * ChecklistItem);
  205. void __fastcall UpdatedSynchronizationChecklistItems(const TSynchronizeChecklist::TItemList & Items);
  206. void __fastcall CountItemSize(const TSynchronizeChecklist::TItem * ChecklistItem, int Factor);
  207. void __fastcall CountItem(const TSynchronizeChecklist::TItem * ChecklistItem, int Factor);
  208. void __fastcall CountItemTotal(const TSynchronizeChecklist::TItem * ChecklistItem, int Factor);
  209. void __fastcall DeleteItem(const TSynchronizeChecklist::TItem * ChecklistItem);
  210. void __fastcall CheckDirectory(bool Check);
  211. void __fastcall DoExplore(TOperationSide Side);
  212. void __fastcall ListViewHintShow(TCMHintShow & HintShow);
  213. void __fastcall StatusBarHintShow(TCMHintShow & HintShow);
  214. DYNAMIC void __fastcall KeyDown(Word & Key, TShiftState Shift);
  215. void CalculateSize(bool All);
  216. TIEListViewColProperties * GetColProperties();
  217. bool IterateItems(TListItem *& Item, TItemStates States);
  218. bool IterateSelectedItems(TListItem *& Item);
  219. void DoSynchronize(bool Queue);
  220. void PathToClipboard(bool Local);
  221. INTERFACE_HOOK
  222. };
  223. //----------------------------------------------------------------------------
  224. #endif