View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0002357 | Double Commander | Graphical user interface | public | 2019-09-18 13:26 | 2021-10-29 23:21 |
| Reporter | liquidvacuum | Assigned To | Alexx2000 | ||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | closed | Resolution | fixed | ||
| Projection | none | ETA | none | ||
| Target Version | 1.0.0 | Fixed in Version | 1.0.0 | ||
| Summary | 0002357: Add delete actions is Syncronize directories dialog | ||||
| Description | Необходимо добавить действия "Удалить слева" и "Удалить с обоих сторон" в диалоге "Синхронизировать каталоги" в режиме неассиметричного сравнения. Патч приложен. There is need to add the actions "Delete left" and "Delete both" in the "Synchronize directories" dialog in the non-asymmetric comparison mode. Patch attached. | ||||
| Tags | No tags attached. | ||||
| Attached Files | 01-sync-delete.diff (20,574 bytes)
diff --git a/doublecmd-0.9.6.orig/language/doublecmd.be.po b/doublecmd-0.9.6/language/doublecmd.be.po
index 82e6c52..47035da 100644
--- a/doublecmd-0.9.6.orig/language/doublecmd.be.po
+++ b/doublecmd-0.9.6/language/doublecmd.be.po
@@ -15,6 +15,10 @@ msgstr ""
msgid "Comparing... %d%% (ESC to cancel)"
msgstr "���������... �d%% (ESC ��� �������)"
+#: fsyncdirsdlg.rsdeleteleft
+msgid "Right: Delete %d file(s)"
+msgstr "����: ����� %d ����(�)"
+
#: fsyncdirsdlg.rsdeleteright
msgid "Right: Delete %d file(s)"
msgstr "�����: ����� %d ����(�)"
@@ -8401,9 +8405,17 @@ msgstr ""
msgid "Select for copying <- (right to left)"
msgstr ""
+#: tfrmsyncdirsdlg.actselectdeleteleft.caption
+msgid "Select for deleting <- (left)"
+msgstr "���� �� ������� <- (�����)"
+
#: tfrmsyncdirsdlg.actselectdeleteright.caption
msgid "Select for deleting -> (right)"
-msgstr ""
+msgstr "���� �� ������� -> (������)"
+
+#: tfrmsyncdirsdlg.actselectdeleteboth.caption
+msgid "Select for deleting <-> (both)"
+msgstr "���� �� ������� <-> (a������)"
#: tfrmsyncdirsdlg.btnclose.caption
msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION"
diff --git a/doublecmd-0.9.6.orig/language/doublecmd.ru.po b/doublecmd-0.9.6/language/doublecmd.ru.po
index f16bd2c..3692b26 100644
--- a/doublecmd-0.9.6.orig/language/doublecmd.ru.po
+++ b/doublecmd-0.9.6/language/doublecmd.ru.po
@@ -15,6 +15,10 @@ msgstr ""
msgid "Comparing... %d%% (ESC to cancel)"
msgstr "���������... %d%% (ESC �� �����)"
+#: fsyncdirsdlg.rsdeleteleft
+msgid "Left: Delete %d file(s)"
+msgstr "�����: ������ ���� (%d ��.)"
+
#: fsyncdirsdlg.rsdeleteright
msgid "Right: Delete %d file(s)"
msgstr "������: ������ ���� (%d ��.)"
@@ -8633,10 +8637,18 @@ msgstr "������ ����������� ����������"
msgid "Select for copying <- (right to left)"
msgstr "������� �� ���������� <- (������ ������)"
+#: tfrmsyncdirsdlg.actselectdeleterleft.caption
+msgid "Select for deleting <- (left)"
+msgstr "������� �� ������� <- (�����)"
+
#: tfrmsyncdirsdlg.actselectdeleteright.caption
msgid "Select for deleting -> (right)"
msgstr "������� �� ������� -> (������)"
+#: tfrmsyncdirsdlg.actselectdeleteboth.caption
+msgid "Select for deleting <-> (both)"
+msgstr "������� �� ������� <-> (���)"
+
#: tfrmsyncdirsdlg.btnclose.caption
msgctxt "tfrmsyncdirsdlg.btnclose.caption"
msgid "Close"
diff --git a/doublecmd-0.9.6.orig/src/fsyncdirsdlg.lfm b/doublecmd-0.9.6/src/fsyncdirsdlg.lfm
index 71cab03..e30c607 100644
--- a/doublecmd-0.9.6.orig/src/fsyncdirsdlg.lfm
+++ b/doublecmd-0.9.6/src/fsyncdirsdlg.lfm
@@ -538,7 +538,7 @@ object frmSyncDirsDlg: TfrmSyncDirsDlg
left = 56
top = 152
Bitmap = {
- 4C69070000001000000010000000C3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ 4C69090000001000000010000000C3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
@@ -706,6 +706,70 @@ object frmSyncDirsDlg: TfrmSyncDirsDlg
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D
+ 1BFF3D8D1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D
+ 1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFF3D8D1BFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D
+ 1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFF3D8D1BFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D
+ 1BFF3D8D1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000
+ 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
+ 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 3FFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48
+ FFFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC483FFFCC483FFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48
+ 3FFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFCC483FFFCC483FFFCC483FFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFCC483FFFCC483FFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFCC483FFFCC483FFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48
+ 3FFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFCC483FFFCC483FFFCC483FFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48
+ 3FFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC483FFFCC483FFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000
+ 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
+ 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000
FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF
FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000
@@ -805,9 +869,15 @@ object frmSyncDirsDlg: TfrmSyncDirsDlg
object miSeparator2: TMenuItem
Caption = '-'
end
+ object miSelectDeleteLeft: TMenuItem
+ Action = actSelectDeleteLeft
+ end
object miSelectDeleteRight: TMenuItem
Action = actSelectDeleteRight
end
+ object miSelectDeleteBoth: TMenuItem
+ Action = actSelectDeleteBoth
+ end
end
object ActionList: TActionList
left = 376
@@ -832,9 +902,17 @@ object frmSyncDirsDlg: TfrmSyncDirsDlg
Caption = 'Reverse copy direction'
OnExecute = actExecute
end
+ object actSelectDeleteLeft: TAction
+ Caption = 'Select for deleting <- (left)'
+ OnExecute = actExecute
+ end
object actSelectDeleteRight: TAction
Caption = 'Select for deleting -> (right)'
OnExecute = actExecute
end
+ object actSelectDeleteBoth: TAction
+ Caption = 'Select for deleting <-> (both)'
+ OnExecute = actExecute
+ end
end
end
diff --git a/doublecmd-0.9.6.orig/src/fsyncdirsdlg.pas b/doublecmd-0.9.6/src/fsyncdirsdlg.pas
index c9fbe38..346b2f5 100644
--- a/doublecmd-0.9.6.orig/src/fsyncdirsdlg.pas
+++ b/doublecmd-0.9.6/src/fsyncdirsdlg.pas
@@ -37,8 +37,8 @@ const
type
- TSyncRecState = (srsUnknown, srsEqual, srsNotEq, srsCopyLeft, srsCopyRight, srsDeleteRight,
- srsDoNothing);
+ TSyncRecState = (srsUnknown, srsEqual, srsNotEq, srsCopyLeft, srsCopyRight, srsDeleteLeft,
+ srsDeleteRight, srsDeleteBoth, srsDoNothing);
{ TDrawGrid }
@@ -50,7 +50,9 @@ type
{ TfrmSyncDirsDlg }
TfrmSyncDirsDlg = class(TForm, IFormCommands)
+ actSelectDeleteLeft: TAction;
actSelectDeleteRight: TAction;
+ actSelectDeleteBoth: TAction;
actSelectCopyReverse: TAction;
actSelectClear: TAction;
actSelectCopyLeftToRight: TAction;
@@ -79,7 +81,9 @@ type
Label1: TLabel;
LeftPanel1: TPanel;
LeftPanel2: TPanel;
+ miSelectDeleteLeft: TMenuItem;
miSelectDeleteRight: TMenuItem;
+ miSelectDeleteBoth: TMenuItem;
miSeparator2: TMenuItem;
miSelectCopyReverse: TMenuItem;
miSeparator1: TMenuItem;
@@ -173,7 +177,9 @@ type
destructor Destroy; override;
published
procedure cm_SelectClear(const {%H-}Params:array of string);
+ procedure cm_SelectDeleteLeft(const {%H-}Params:array of string);
procedure cm_SelectDeleteRight(const {%H-}Params:array of string);
+ procedure cm_SelectDeleteBoth(const {%H-}Params:array of string);
procedure cm_SelectCopyDefault(const {%H-}Params:array of string);
procedure cm_SelectCopyReverse(const {%H-}Params:array of string);
procedure cm_SelectCopyLeftToRight(const {%H-}Params:array of string);
@@ -184,6 +190,7 @@ resourcestring
rsComparingPercent = 'Comparing... %d%% (ESC to cancel)';
rsLeftToRightCopy = 'Left to Right: Copy %d files, total size: %d bytes';
rsRightToLeftCopy = 'Right to Left: Copy %d files, total size: %d bytes';
+ rsDeleteLeft = 'Left: Delete %d file(s)';
rsDeleteRight = 'Right: Delete %d file(s)';
rsFilesFound = 'Files found: %d (Identical: %d, Different: %d, '
+ 'Unique left: %d, Unique right: %d)';
@@ -543,17 +550,17 @@ var
var
i,
- DeleteRightCount,
+ DeleteLeftCount, DeleteRightCount,
CopyLeftCount, CopyRightCount: Integer;
CopyLeftSize, CopyRightSize: Int64;
fsr: TFileSyncRec;
- DeleteRight,
+ DeleteLeft, DeleteRight,
CopyLeft, CopyRight: Boolean;
- DeleteRightFiles,
+ DeleteLeftFiles, DeleteRightFiles,
CopyLeftFiles, CopyRightFiles: TFiles;
Dest: string;
begin
- DeleteRightCount := 0;
+ DeleteLeftCount := 0; DeleteRightCount := 0;
CopyLeftCount := 0; CopyRightCount := 0;
CopyLeftSize := 0; CopyRightSize := 0;
for i := 0 to FVisibleItems.Count - 1 do
@@ -571,10 +578,19 @@ begin
Inc(CopyRightCount);
Inc(CopyRightSize, fsr.FFileL.Size);
end;
+ srsDeleteLeft:
+ begin
+ Inc(DeleteLeftCount);
+ end;
srsDeleteRight:
begin
Inc(DeleteRightCount);
end;
+ srsDeleteBoth:
+ begin
+ Inc(DeleteLeftCount);
+ Inc(DeleteRightCount);
+ end;
end;
end;
with TfrmSyncDirsPerformDlg.Create(Self) do
@@ -595,8 +611,11 @@ begin
chkLeftToRight.Checked := True;
edRightPath.Enabled := True;
end;
+ chkDeleteLeft.Enabled := DeleteLeftCount > 0;
+ chkDeleteLeft.Checked := chkDeleteLeft.Enabled;
chkDeleteRight.Enabled := DeleteRightCount > 0;
chkDeleteRight.Checked := chkDeleteRight.Enabled;
+ chkDeleteLeft.Caption := Format(rsDeleteLeft, [DeleteLeftCount]);
chkDeleteRight.Caption := Format(rsDeleteRight, [DeleteRightCount]);
chkLeftToRight.Caption :=
Format(rsLeftToRightCopy, [CopyRightCount, CopyRightSize]);
@@ -612,12 +631,14 @@ begin
end;
CopyLeft := chkRightToLeft.Checked;
CopyRight := chkLeftToRight.Checked;
+ DeleteLeft := chkDeleteLeft.Checked;
DeleteRight := chkDeleteRight.Checked;
i := 0;
while i < FVisibleItems.Count do
begin
CopyLeftFiles := TFiles.Create('');
CopyRightFiles := TFiles.Create('');
+ DeleteLeftFiles := TFiles.Create('');
DeleteRightFiles := TFiles.Create('');
if FVisibleItems.Objects[i] <> nil then
repeat
@@ -630,6 +651,13 @@ begin
if CopyLeft then CopyLeftFiles.Add(fsr.FFileR.Clone);
srsDeleteRight:
if DeleteRight then DeleteRightFiles.Add(fsr.FFileR.Clone);
+ srsDeleteLeft:
+ if DeleteLeft then DeleteLeftFiles.Add(fsr.FFileL.Clone);
+ srsDeleteBoth:
+ begin
+ if DeleteRight then DeleteRightFiles.Add(fsr.FFileR.Clone);
+ if DeleteLeft then DeleteLeftFiles.Add(fsr.FFileL.Clone);
+ end;
end;
i := i + 1;
until (i = FVisibleItems.Count) or (FVisibleItems.Objects[i] = nil);
@@ -644,6 +672,11 @@ begin
if not CopyFiles(FCmpFileSourceL, FCmpFileSourceR, CopyRightFiles,
FCmpFilePathR + Dest) then Break;
end else CopyRightFiles.Free;
+ if DeleteLeftFiles.Count > 0 then
+ begin
+ if not DeleteFiles(FCmpFileSourceL, DeleteLeftFiles) then Break;
+ end
+ else DeleteLeftFiles.Free;
if DeleteRightFiles.Count > 0 then
begin
if not DeleteFiles(FCmpFileSourceR, DeleteRightFiles) then Break;
@@ -792,6 +825,7 @@ begin
srsNotEq: Font.Color := clRed;
srsCopyLeft: Font.Color := clBlue;
srsCopyRight: Font.Color := clGreen;
+ srsDeleteLeft: Font.Color := clGreen;
srsDeleteRight: Font.Color := clBlue;
else Font.Color := clWindowText;
end;
@@ -914,8 +948,8 @@ end;
procedure TfrmSyncDirsDlg.pmGridMenuPopup(Sender: TObject);
begin
- miSeparator2.Visible := chkAsymmetric.Checked;
- miSelectDeleteRight.Visible := chkAsymmetric.Checked;
+ miSelectDeleteLeft.Visible := not chkAsymmetric.Checked;
+ miSelectDeleteBoth.Visible := not chkAsymmetric.Checked;
end;
procedure TfrmSyncDirsDlg.SetSortIndex(AValue: Integer);
@@ -1060,6 +1094,7 @@ begin
and
((r.FState = srsCopyLeft) and filter.copyLeft or
(r.FState = srsCopyRight) and filter.copyRight or
+ (r.FState = srsDeleteLeft) and filter.copyRight or
(r.FState = srsDeleteRight) and filter.copyLeft or
(r.FState = srsEqual) and filter.eq or
(r.FState = srsNotEq) and filter.neq or
@@ -1417,7 +1452,14 @@ begin
else
ca := srsDoNothing;
srsDeleteRight:
- ca := srsDoNothing;
+ if not chkAsymmetric.Checked then
+ ca := sr.FState
+ else
+ ca := srsDoNothing;
+ srsDeleteLeft:
+ ca := sr.FState;
+ srsDeleteBoth:
+ ca := sr.FState;
srsDoNothing:
if Assigned(sr.FFileL) then
ca := srsCopyRight
@@ -1453,10 +1495,16 @@ var
NewAction:= SyncRec.FState;
srsNotEq:
begin
- if (SyncRec.FAction = srsCopyLeft) and Assigned(SyncRec.FFileL) then
- NewAction:= srsCopyRight
- else if (SyncRec.FAction = srsCopyRight) and Assigned(SyncRec.FFileR) then
- NewAction:= srsCopyLeft
+ if SyncRec.FAction = srsCopyLeft then
+ if not Assigned(SyncRec.FFileL) then
+ NewAction:= srsDoNothing
+ else
+ NewAction:= srsCopyRight
+ else if SyncRec.FAction = srsCopyRight then
+ if not Assigned(SyncRec.FFileR) then
+ NewAction:= srsDoNothing
+ else
+ NewAction:= srsCopyLeft
else
NewAction:= SyncRec.FAction
end;
@@ -1470,11 +1518,23 @@ var
if not Assigned(SyncRec.FFileL) then
NewAction:= srsDoNothing;
end;
+ srsDeleteLeft:
+ begin
+ if not Assigned(SyncRec.FFileL) then
+ NewAction:= srsDoNothing;
+ end;
srsDeleteRight:
begin
if not Assigned(SyncRec.FFileR) then
NewAction:= srsDoNothing;
end;
+ srsDeleteBoth:
+ begin
+ if not Assigned(SyncRec.FFileL) then
+ NewAction:= srsDeleteRight;
+ if not Assigned(SyncRec.FFileR) then
+ NewAction:= srsDeleteLeft;
+ end;
end;
SyncRec.FAction:= NewAction;
MainDrawGrid.InvalidateRow(R);
@@ -1594,11 +1654,21 @@ begin
SetSyncRecState(srsDoNothing);
end;
+procedure TfrmSyncDirsDlg.cm_SelectDeleteLeft(const Params: array of string);
+begin
+ SetSyncRecState(srsDeleteLeft);
+end;
+
procedure TfrmSyncDirsDlg.cm_SelectDeleteRight(const Params: array of string);
begin
SetSyncRecState(srsDeleteRight);
end;
+procedure TfrmSyncDirsDlg.cm_SelectDeleteBoth(const Params: array of string);
+begin
+ SetSyncRecState(srsDeleteBoth);
+end;
+
procedure TfrmSyncDirsDlg.cm_SelectCopyDefault(const Params: array of string);
begin
SetSyncRecState(srsUnknown);
diff --git a/doublecmd-0.9.6.orig/src/fsyncdirsperformdlg.lfm b/doublecmd-0.9.6/src/fsyncdirsperformdlg.lfm
index d43f2b5..20485df 100644
--- a/doublecmd-0.9.6.orig/src/fsyncdirsperformdlg.lfm
+++ b/doublecmd-0.9.6/src/fsyncdirsperformdlg.lfm
@@ -1,6 +1,6 @@
object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
Left = 234
- Height = 200
+ Height = 219
Top = 137
Width = 326
AutoSize = True
@@ -73,7 +73,7 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
AnchorSideRight.Side = asrBottom
Left = 0
Height = 6
- Top = 121
+ Top = 140
Width = 326
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 3
@@ -85,7 +85,7 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
- Top = 133
+ Top = 152
Width = 121
BorderSpacing.Left = 6
BorderSpacing.Top = 6
@@ -99,7 +99,7 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
AnchorSideTop.Side = asrBottom
Left = 6
Height = 26
- Top = 158
+ Top = 177
Width = 314
Align = alNone
Anchors = [akTop, akLeft, akRight]
@@ -115,7 +115,7 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
ShowButtons = [pbOK, pbCancel]
ShowBevel = False
end
- object chkDeleteRight: TCheckBox
+ object chkDeleteLeft: TCheckBox
AnchorSideLeft.Control = chkLeftToRight
AnchorSideTop.Control = edLeftPath
AnchorSideTop.Side = asrBottom
@@ -126,4 +126,15 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
BorderSpacing.Top = 6
TabOrder = 4
end
+ object chkDeleteRight: TCheckBox
+ AnchorSideLeft.Control = chkLeftToRight
+ AnchorSideTop.Control = chkDeleteLeft
+ AnchorSideTop.Side = asrBottom
+ Left = 6
+ Height = 19
+ Top = 118
+ Width = 20
+ BorderSpacing.Top = 6
+ TabOrder = 4
+ end
end
diff --git a/doublecmd-0.9.6.orig/src/fsyncdirsperformdlg.pas b/doublecmd-0.9.6/src/fsyncdirsperformdlg.pas
index a1828f2..127e86a 100644
--- a/doublecmd-0.9.6.orig/src/fsyncdirsperformdlg.pas
+++ b/doublecmd-0.9.6/src/fsyncdirsperformdlg.pas
@@ -15,6 +15,7 @@ type
TfrmSyncDirsPerformDlg = class(TForm)
Bevel1: TBevel;
ButtonPanel1: TButtonPanel;
+ chkDeleteLeft: TCheckBox;
chkDeleteRight: TCheckBox;
chkConfirmOverwrites: TCheckBox;
chkLeftToRight: TCheckBox;
01-sync-delete-1.0.0.diff (21,151 bytes)
diff --git a/doublecmd-1.0.0.orig/language/doublecmd.be.po b/doublecmd-1.0.0/language/doublecmd.be.po
index fde43f0..22bcf20 100644
--- a/doublecmd-1.0.0.orig/language/doublecmd.be.po
+++ b/doublecmd-1.0.0/language/doublecmd.be.po
@@ -16,6 +16,10 @@ msgstr ""
msgid "Comparing... %d%% (ESC to cancel)"
msgstr "Параўнанне... ‰d%% (ESC каб скасаваць)"
+#: fsyncdirsdlg.rsdeleteleft
+msgid "Left: Delete %d file(s)"
+msgstr "Лева: выдаліць %d файл(аў)"
+
#: fsyncdirsdlg.rsdeleteright
msgid "Right: Delete %d file(s)"
msgstr "Права: выдаліць %d файл(аў)"
@@ -8517,9 +8521,17 @@ msgstr ""
msgid "Select for copying <- (right to left)"
msgstr ""
+#: tfrmsyncdirsdlg.actselectdeleteleft.caption
+msgid "Select for deleting <- (left)"
+msgstr "Абраць для выдалення <- (злева)"
+
#: tfrmsyncdirsdlg.actselectdeleteright.caption
msgid "Select for deleting -> (right)"
-msgstr ""
+msgstr "Абраць для выдалення -> (зправа)"
+
+#: tfrmsyncdirsdlg.actselectdeleteboth.caption
+msgid "Select for deleting <-> (both)"
+msgstr "Абраць для выдалення <-> (абодва)"
#: tfrmsyncdirsdlg.btnclose.caption
msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION"
diff --git a/doublecmd-1.0.0.orig/language/doublecmd.ru.po b/doublecmd-1.0.0/language/doublecmd.ru.po
index cbe4be6..fecc39f 100644
--- a/doublecmd-1.0.0.orig/language/doublecmd.ru.po
+++ b/doublecmd-1.0.0/language/doublecmd.ru.po
@@ -15,6 +15,10 @@ msgstr ""
msgid "Comparing... %d%% (ESC to cancel)"
msgstr "Сравнение... %d%% (ESC для отмены)"
+#: fsyncdirsdlg.rsdeleteleft
+msgid "Left: Delete %d file(s)"
+msgstr "Слева: Удалить файлы (%d шт.)"
+
#: fsyncdirsdlg.rsdeleteright
msgid "Right: Delete %d file(s)"
msgstr "Справа: Удалить файлы (%d шт.)"
@@ -8716,10 +8720,18 @@ msgstr "Поменять направление копирования"
msgid "Select for copying <- (right to left)"
msgstr "Отметить для копирования <- (справа налево)"
+#: tfrmsyncdirsdlg.actselectdeleterleft.caption
+msgid "Select for deleting <- (left)"
+msgstr "Отметить для удаления <- (слева)"
+
#: tfrmsyncdirsdlg.actselectdeleteright.caption
msgid "Select for deleting -> (right)"
msgstr "Отметить для удаления -> (справа)"
+#: tfrmsyncdirsdlg.actselectdeleteboth.caption
+msgid "Select for deleting <-> (both)"
+msgstr "Отметить для удаления <-> (оба)"
+
#: tfrmsyncdirsdlg.btnclose.caption
msgctxt "tfrmsyncdirsdlg.btnclose.caption"
msgid "Close"
diff --git a/doublecmd-1.0.0.orig/src/fsyncdirsdlg.lfm b/doublecmd-1.0.0/src/fsyncdirsdlg.lfm
index 5cd022e..a373238 100644
--- a/doublecmd-1.0.0.orig/src/fsyncdirsdlg.lfm
+++ b/doublecmd-1.0.0/src/fsyncdirsdlg.lfm
@@ -538,7 +538,7 @@ object frmSyncDirsDlg: TfrmSyncDirsDlg
left = 56
top = 152
Bitmap = {
- 4C69070000001000000010000000C3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ 4C69090000001000000010000000C3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
@@ -706,6 +706,70 @@ object frmSyncDirsDlg: TfrmSyncDirsDlg
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D
+ 1BFF3D8D1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D
+ 1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFF3D8D1BFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D
+ 1BFF3D8D1BFF3D8D1BFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFF3D8D1BFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D
+ 1BFF3D8D1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000
+ 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
+ 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 3FFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48
+ FFFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC483FFFCC483FFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48
+ 3FFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFCC483FFFCC483FFFCC483FFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFCC483FFFCC483FFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFCC483FFFCC483FFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48
+ 3FFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFCC483FFFCC483FFFCC483FFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48
+ 3FFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC483FFFCC483FFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3
+ C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000
+ 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
+ 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000
FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF
FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000
@@ -805,9 +869,15 @@ object frmSyncDirsDlg: TfrmSyncDirsDlg
object miSeparator2: TMenuItem
Caption = '-'
end
+ object miSelectDeleteLeft: TMenuItem
+ Action = actSelectDeleteLeft
+ end
object miSelectDeleteRight: TMenuItem
Action = actSelectDeleteRight
end
+ object miSelectDeleteBoth: TMenuItem
+ Action = actSelectDeleteBoth
+ end
object miSeparator3: TMenuItem
Caption = '-'
end
@@ -844,10 +914,18 @@ object frmSyncDirsDlg: TfrmSyncDirsDlg
Caption = 'Reverse copy direction'
OnExecute = actExecute
end
+ object actSelectDeleteLeft: TAction
+ Caption = 'Select for deleting <- (left)'
+ OnExecute = actExecute
+ end
object actSelectDeleteRight: TAction
Caption = 'Select for deleting -> (right)'
OnExecute = actExecute
end
+ object actSelectDeleteBoth: TAction
+ Caption = 'Select for deleting <-> (both)'
+ OnExecute = actExecute
+ end
object actDeleteLeft: TAction
Caption = '<- Delete left'
OnExecute = actExecute
diff --git a/doublecmd-1.0.0.orig/src/fsyncdirsdlg.pas b/doublecmd-1.0.0/src/fsyncdirsdlg.pas
index d4e09dd..eccb9b9 100644
--- a/doublecmd-1.0.0.orig/src/fsyncdirsdlg.pas
+++ b/doublecmd-1.0.0/src/fsyncdirsdlg.pas
@@ -37,8 +37,8 @@ const
type
- TSyncRecState = (srsUnknown, srsEqual, srsNotEq, srsCopyLeft, srsCopyRight, srsDeleteRight,
- srsDoNothing);
+ TSyncRecState = (srsUnknown, srsEqual, srsNotEq, srsCopyLeft, srsCopyRight, srsDeleteLeft,
+ srsDeleteRight, srsDeleteBoth, srsDoNothing);
{ TDrawGrid }
@@ -53,7 +53,9 @@ type
actDeleteLeft: TAction;
actDeleteRight: TAction;
actDeleteBoth: TAction;
+ actSelectDeleteLeft: TAction;
actSelectDeleteRight: TAction;
+ actSelectDeleteBoth: TAction;
actSelectCopyReverse: TAction;
actSelectClear: TAction;
actSelectCopyLeftToRight: TAction;
@@ -86,7 +88,9 @@ type
miDeleteRight: TMenuItem;
miDeleteLeft: TMenuItem;
miSeparator3: TMenuItem;
+ miSelectDeleteLeft: TMenuItem;
miSelectDeleteRight: TMenuItem;
+ miSelectDeleteBoth: TMenuItem;
miSeparator2: TMenuItem;
miSelectCopyReverse: TMenuItem;
miSeparator1: TMenuItem;
@@ -186,7 +190,9 @@ type
procedure CopyToClipboard;
published
procedure cm_SelectClear(const {%H-}Params:array of string);
+ procedure cm_SelectDeleteLeft(const {%H-}Params:array of string);
procedure cm_SelectDeleteRight(const {%H-}Params:array of string);
+ procedure cm_SelectDeleteBoth(const {%H-}Params:array of string);
procedure cm_SelectCopyDefault(const {%H-}Params:array of string);
procedure cm_SelectCopyReverse(const {%H-}Params:array of string);
procedure cm_SelectCopyLeftToRight(const {%H-}Params:array of string);
@@ -202,6 +208,7 @@ resourcestring
rsComparingPercent = 'Comparing... %d%% (ESC to cancel)';
rsLeftToRightCopy = 'Left to Right: Copy %d files, total size: %d bytes';
rsRightToLeftCopy = 'Right to Left: Copy %d files, total size: %d bytes';
+ rsDeleteLeft = 'Left: Delete %d file(s)';
rsDeleteRight = 'Right: Delete %d file(s)';
rsFilesFound = 'Files found: %d (Identical: %d, Different: %d, '
+ 'Unique left: %d, Unique right: %d)';
@@ -543,17 +550,17 @@ var
var
i,
- DeleteRightCount,
+ DeleteLeftCount, DeleteRightCount,
CopyLeftCount, CopyRightCount: Integer;
CopyLeftSize, CopyRightSize: Int64;
fsr: TFileSyncRec;
- DeleteRight,
+ DeleteLeft, DeleteRight,
CopyLeft, CopyRight: Boolean;
- DeleteRightFiles,
+ DeleteLeftFiles, DeleteRightFiles,
CopyLeftFiles, CopyRightFiles: TFiles;
Dest: string;
begin
- DeleteRightCount := 0;
+ DeleteLeftCount := 0; DeleteRightCount := 0;
CopyLeftCount := 0; CopyRightCount := 0;
CopyLeftSize := 0; CopyRightSize := 0;
for i := 0 to FVisibleItems.Count - 1 do
@@ -571,10 +578,19 @@ begin
Inc(CopyRightCount);
Inc(CopyRightSize, fsr.FFileL.Size);
end;
+ srsDeleteLeft:
+ begin
+ Inc(DeleteLeftCount);
+ end;
srsDeleteRight:
begin
Inc(DeleteRightCount);
end;
+ srsDeleteBoth:
+ begin
+ Inc(DeleteLeftCount);
+ Inc(DeleteRightCount);
+ end;
end;
end;
with TfrmSyncDirsPerformDlg.Create(Self) do
@@ -595,8 +611,11 @@ begin
chkLeftToRight.Checked := True;
edRightPath.Enabled := True;
end;
+ chkDeleteLeft.Enabled := DeleteLeftCount > 0;
+ chkDeleteLeft.Checked := chkDeleteLeft.Enabled;
chkDeleteRight.Enabled := DeleteRightCount > 0;
chkDeleteRight.Checked := chkDeleteRight.Enabled;
+ chkDeleteLeft.Caption := Format(rsDeleteLeft, [DeleteLeftCount]);
chkDeleteRight.Caption := Format(rsDeleteRight, [DeleteRightCount]);
chkLeftToRight.Caption :=
Format(rsLeftToRightCopy, [CopyRightCount, CopyRightSize]);
@@ -612,12 +631,14 @@ begin
end;
CopyLeft := chkRightToLeft.Checked;
CopyRight := chkLeftToRight.Checked;
+ DeleteLeft := chkDeleteLeft.Checked;
DeleteRight := chkDeleteRight.Checked;
i := 0;
while i < FVisibleItems.Count do
begin
CopyLeftFiles := TFiles.Create('');
CopyRightFiles := TFiles.Create('');
+ DeleteLeftFiles := TFiles.Create('');
DeleteRightFiles := TFiles.Create('');
if FVisibleItems.Objects[i] <> nil then
repeat
@@ -630,6 +651,13 @@ begin
if CopyLeft then CopyLeftFiles.Add(fsr.FFileR.Clone);
srsDeleteRight:
if DeleteRight then DeleteRightFiles.Add(fsr.FFileR.Clone);
+ srsDeleteLeft:
+ if DeleteLeft then DeleteLeftFiles.Add(fsr.FFileL.Clone);
+ srsDeleteBoth:
+ begin
+ if DeleteRight then DeleteRightFiles.Add(fsr.FFileR.Clone);
+ if DeleteLeft then DeleteLeftFiles.Add(fsr.FFileL.Clone);
+ end;
end;
i := i + 1;
until (i = FVisibleItems.Count) or (FVisibleItems.Objects[i] = nil);
@@ -644,6 +672,11 @@ begin
if not CopyFiles(FCmpFileSourceL, FCmpFileSourceR, CopyRightFiles,
FCmpFilePathR + Dest) then Break;
end else CopyRightFiles.Free;
+ if DeleteLeftFiles.Count > 0 then
+ begin
+ if not DeleteFiles(FCmpFileSourceL, DeleteLeftFiles) then Break;
+ end
+ else DeleteLeftFiles.Free;
if DeleteRightFiles.Count > 0 then
begin
if not DeleteFiles(FCmpFileSourceR, DeleteRightFiles) then Break;
@@ -792,6 +825,7 @@ begin
srsNotEq: Font.Color := clRed;
srsCopyLeft: Font.Color := clBlue;
srsCopyRight: Font.Color := clGreen;
+ srsDeleteLeft: Font.Color := clGreen;
srsDeleteRight: Font.Color := clBlue;
else Font.Color := clWindowText;
end;
@@ -924,8 +958,8 @@ end;
procedure TfrmSyncDirsDlg.pmGridMenuPopup(Sender: TObject);
begin
- miSeparator2.Visible := chkAsymmetric.Checked;
- miSelectDeleteRight.Visible := chkAsymmetric.Checked;
+ miSelectDeleteLeft.Visible := not chkAsymmetric.Checked;
+ miSelectDeleteBoth.Visible := not chkAsymmetric.Checked;
end;
procedure TfrmSyncDirsDlg.SetSortIndex(AValue: Integer);
@@ -1070,6 +1104,7 @@ begin
and
((r.FState = srsCopyLeft) and filter.copyLeft or
(r.FState = srsCopyRight) and filter.copyRight or
+ (r.FState = srsDeleteLeft) and filter.copyRight or
(r.FState = srsDeleteRight) and filter.copyLeft or
(r.FState = srsEqual) and filter.eq or
(r.FState = srsNotEq) and filter.neq or
@@ -1427,7 +1462,14 @@ begin
else
ca := srsDoNothing;
srsDeleteRight:
- ca := srsDoNothing;
+ if not chkAsymmetric.Checked then
+ ca := sr.FState
+ else
+ ca := srsDoNothing;
+ srsDeleteLeft:
+ ca := sr.FState;
+ srsDeleteBoth:
+ ca := sr.FState;
srsDoNothing:
if Assigned(sr.FFileL) then
ca := srsCopyRight
@@ -1463,10 +1505,16 @@ var
NewAction:= SyncRec.FState;
srsNotEq:
begin
- if (SyncRec.FAction = srsCopyLeft) and Assigned(SyncRec.FFileL) then
- NewAction:= srsCopyRight
- else if (SyncRec.FAction = srsCopyRight) and Assigned(SyncRec.FFileR) then
- NewAction:= srsCopyLeft
+ if SyncRec.FAction = srsCopyLeft then
+ if not Assigned(SyncRec.FFileL) then
+ NewAction:= srsDoNothing
+ else
+ NewAction:= srsCopyRight
+ else if SyncRec.FAction = srsCopyRight then
+ if not Assigned(SyncRec.FFileR) then
+ NewAction:= srsDoNothing
+ else
+ NewAction:= srsCopyLeft
else
NewAction:= SyncRec.FAction
end;
@@ -1480,11 +1528,23 @@ var
if not Assigned(SyncRec.FFileL) then
NewAction:= srsDoNothing;
end;
+ srsDeleteLeft:
+ begin
+ if not Assigned(SyncRec.FFileL) then
+ NewAction:= srsDoNothing;
+ end;
srsDeleteRight:
begin
if not Assigned(SyncRec.FFileR) then
NewAction:= srsDoNothing;
end;
+ srsDeleteBoth:
+ begin
+ if not Assigned(SyncRec.FFileL) then
+ NewAction:= srsDeleteRight;
+ if not Assigned(SyncRec.FFileR) then
+ NewAction:= srsDeleteLeft;
+ end;
end;
SyncRec.FAction:= NewAction;
MainDrawGrid.InvalidateRow(R);
@@ -1852,11 +1912,21 @@ begin
SetSyncRecState(srsDoNothing);
end;
+procedure TfrmSyncDirsDlg.cm_SelectDeleteLeft(const Params: array of string);
+begin
+ SetSyncRecState(srsDeleteLeft);
+end;
+
procedure TfrmSyncDirsDlg.cm_SelectDeleteRight(const Params: array of string);
begin
SetSyncRecState(srsDeleteRight);
end;
+procedure TfrmSyncDirsDlg.cm_SelectDeleteBoth(const Params: array of string);
+begin
+ SetSyncRecState(srsDeleteBoth);
+end;
+
procedure TfrmSyncDirsDlg.cm_SelectCopyDefault(const Params: array of string);
begin
SetSyncRecState(srsUnknown);
diff --git a/doublecmd-1.0.0.orig/src/fsyncdirsperformdlg.lfm b/doublecmd-1.0.0/src/fsyncdirsperformdlg.lfm
old mode 100644
new mode 100755
index 04e9322..2a62566
--- a/doublecmd-1.0.0.orig/src/fsyncdirsperformdlg.lfm
+++ b/doublecmd-1.0.0/src/fsyncdirsperformdlg.lfm
@@ -1,6 +1,6 @@
object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
Left = 234
- Height = 200
+ Height = 219
Top = 137
Width = 326
AutoSize = True
@@ -73,7 +73,7 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
AnchorSideRight.Side = asrBottom
Left = 0
Height = 6
- Top = 121
+ Top = 140
Width = 326
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 3
@@ -85,7 +85,7 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
- Top = 133
+ Top = 152
Width = 121
BorderSpacing.Left = 6
BorderSpacing.Top = 6
@@ -99,7 +99,7 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
AnchorSideTop.Side = asrBottom
Left = 6
Height = 26
- Top = 158
+ Top = 177
Width = 314
Align = alNone
Anchors = [akTop, akLeft, akRight]
@@ -115,7 +115,7 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
ShowButtons = [pbOK, pbCancel]
ShowBevel = False
end
- object chkDeleteRight: TCheckBox
+ object chkDeleteLeft: TCheckBox
AnchorSideLeft.Control = chkLeftToRight
AnchorSideTop.Control = edLeftPath
AnchorSideTop.Side = asrBottom
@@ -126,4 +126,15 @@ object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg
BorderSpacing.Top = 6
TabOrder = 4
end
+ object chkDeleteRight: TCheckBox
+ AnchorSideLeft.Control = chkLeftToRight
+ AnchorSideTop.Control = chkDeleteLeft
+ AnchorSideTop.Side = asrBottom
+ Left = 6
+ Height = 19
+ Top = 118
+ Width = 20
+ BorderSpacing.Top = 6
+ TabOrder = 4
+ end
end
diff --git a/doublecmd-1.0.0.orig/src/fsyncdirsperformdlg.pas b/doublecmd-1.0.0/src/fsyncdirsperformdlg.pas
old mode 100644
new mode 100755
index 31e2ce3..fac3f19
--- a/doublecmd-1.0.0.orig/src/fsyncdirsperformdlg.pas
+++ b/doublecmd-1.0.0/src/fsyncdirsperformdlg.pas
@@ -15,6 +15,7 @@ type
TfrmSyncDirsPerformDlg = class(TForm)
Bevel1: TBevel;
ButtonPanel1: TButtonPanel;
+ chkDeleteLeft: TCheckBox;
chkDeleteRight: TCheckBox;
chkConfirmOverwrites: TCheckBox;
chkLeftToRight: TCheckBox;
| ||||
| Fixed in Revision | 9068 | ||||
| Operating system | |||||
| Widgetset | |||||
| Architecture | |||||
|
|
В версии 1.0 аналогичная возможность уже давно есть. Делать патчи имеет смысл только для текущей разрабатываемой версии (сейчас 1.0). |
|
|
Не посмотрел, прошу прощения. Реализация получилась разная: в версии 1.0 при выборе команды удаления выбранные файлы удаляются немедленно, в предлагаемом мною варианте - помечаются для удаления, а удаляются при нажатии на кнопку "Синхронизировать" (как в режиме асимметричного сравнения). Возможно, принцип "выбрать, подумать, выполнить" как для копирования, так и для удаления для кого-то будет более удобным. Если будет предложен патч для версии 1.0 с возможностью выбора поведения команд удаления по настройке в параметрах настройки, он будет принят? |
|
|
liquidvacuum, у вас там неточность: +#: fsyncdirsdlg.rsdeleteleft +msgid "Right: Delete %d file(s)" +msgstr "Лева: выдаліць %d файл(аў)" по идее должно быть "Left". |
|
|
Первоначально я тоже так пробовал. >>>Если будет предложен патч для версии 1.0 с возможностью выбора поведения команд удаления по настройке в параметрах настройки, он будет принят? Можно просто дополнительно добавить и эти две команды. Будет два варианта: пометить для удаления и удалить сразу. |
|
|
Добавил патч для версии 1.0 (01-sync-delete-1.0.0.diff). Исправлены ошибки в doublecmd.be.po (спасибо Skif_off) |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2019-09-18 13:26 | liquidvacuum | New Issue | |
| 2019-09-18 13:26 | liquidvacuum | File Added: 01-sync-delete.diff | |
| 2019-09-18 13:41 | Alexx2000 | Note Added: 0003268 | |
| 2019-09-18 13:41 | Alexx2000 | Status | new => feedback |
| 2019-09-18 23:14 | liquidvacuum | Note Added: 0003269 | |
| 2019-09-18 23:14 | liquidvacuum | Status | feedback => new |
| 2019-09-19 14:44 | Skif_off | Note Added: 0003270 | |
| 2019-09-19 23:51 | Alexx2000 | Note Added: 0003271 | |
| 2019-09-21 00:09 | liquidvacuum | File Added: 01-sync-delete-1.0.0.diff | |
| 2019-09-21 00:12 | liquidvacuum | Note Added: 0003276 | |
| 2019-09-26 14:15 | Alexx2000 | Fixed in Revision | => 9068 |
| 2019-09-26 14:15 | Alexx2000 | Assigned To | => Alexx2000 |
| 2019-09-26 14:15 | Alexx2000 | Status | new => resolved |
| 2019-09-26 14:15 | Alexx2000 | Resolution | open => fixed |
| 2019-09-26 14:15 | Alexx2000 | Fixed in Version | => 1.0.0 |
| 2019-09-26 14:15 | Alexx2000 | Target Version | => 1.0.0 |
| 2021-10-29 23:21 | Alexx2000 | Status | resolved => closed |