View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000989 | Double Commander | Graphical user interface | public | 2015-01-16 15:59 | 2019-06-08 15:26 |
Reporter | holger | Assigned To | Alexx2000 | ||
Priority | normal | Severity | feature | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Projection | none | ETA | none | ||
Product Version | 0.6.0 (trunk) | ||||
Target Version | 0.6.0 | Fixed in Version | 0.6.0 | ||
Summary | 0000989: View files in syncdirs | ||||
Description | Hello Alex, I absolutely like your new command syncdirs. When I compare directories, I often want to see the file on the left or on the right side. I added a popup menu which contains these functions. In addition I wanted to use a user defined compare-tool, same as the compare in general DC. This is also added. A patch for these functions is included. | ||||
Tags | No tags attached. | ||||
Attached Files | fsyncdirsdlg.patch (15,738 bytes)
Index: fsyncdirsdlg.lfm =================================================================== --- fsyncdirsdlg.lfm (revision 5790) +++ fsyncdirsdlg.lfm (working copy) @@ -13,15 +13,15 @@ Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState' ShowInTaskBar = stAlways - LCLVersion = '1.3' + LCLVersion = '1.2.6.0' object edPath1: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = btnSelDir1 Left = 3 - Height = 21 + Height = 28 Top = 3 - Width = 236 + Width = 232 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 3 TabOrder = 1 @@ -32,9 +32,9 @@ AnchorSideTop.Control = Owner AnchorSideRight.Control = btnSelDir2 Left = 407 - Height = 21 + Height = 28 Top = 3 - Width = 233 + Width = 229 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Around = 3 @@ -45,11 +45,11 @@ AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = Owner Left = 290 - Height = 21 + Height = 28 Top = 3 Width = 111 BorderSpacing.Top = 3 - ItemHeight = 13 + ItemHeight = 20 ItemIndex = 0 Items.Strings = ( '*.*' @@ -61,10 +61,10 @@ AnchorSideTop.Control = edPath1 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbExtFilter - Left = 242 - Height = 23 + Left = 238 + Height = 30 Top = 2 - Width = 42 + Width = 46 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 3 @@ -79,10 +79,10 @@ AnchorSideTop.Side = asrCenter AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom - Left = 643 - Height = 23 + Left = 639 + Height = 30 Top = 2 - Width = 42 + Width = 46 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 3 @@ -98,12 +98,12 @@ AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 - Height = 70 - Top = 28 + Height = 98 + Top = 35 Width = 691 Anchors = [akTop, akLeft, akRight] AutoSize = True - ClientHeight = 70 + ClientHeight = 98 ClientWidth = 691 TabOrder = 5 object LeftPanel1: TPanel @@ -110,21 +110,21 @@ AnchorSideLeft.Control = TopPanel AnchorSideTop.Control = TopPanel Left = 1 - Height = 62 + Height = 83 Top = 1 - Width = 89 + Width = 117 AutoSize = True BevelOuter = bvNone - ClientHeight = 62 - ClientWidth = 89 + ClientHeight = 83 + ClientWidth = 117 TabOrder = 0 object btnCompare: TButton AnchorSideLeft.Control = LeftPanel1 AnchorSideTop.Control = LeftPanel1 Left = 3 - Height = 23 + Height = 30 Top = 3 - Width = 69 + Width = 87 AutoSize = True BorderSpacing.Around = 3 Caption = 'Compare' @@ -137,9 +137,9 @@ AnchorSideTop.Control = btnCompare AnchorSideTop.Side = asrBottom Left = 3 - Height = 17 - Top = 29 - Width = 83 + Height = 24 + Top = 36 + Width = 111 BorderSpacing.Around = 3 Caption = 'only selected' Enabled = False @@ -150,10 +150,10 @@ AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = chkOnlySelected AnchorSideTop.Side = asrBottom - Left = 4 - Height = 13 - Top = 49 - Width = 80 + Left = 1 + Height = 20 + Top = 63 + Width = 115 Caption = '(in main window)' Enabled = False ParentColor = False @@ -163,23 +163,23 @@ AnchorSideLeft.Control = LeftPanel1 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TopPanel - Left = 95 - Height = 68 + Left = 123 + Height = 96 Top = 1 - Width = 75 + Width = 101 AutoSize = True BorderSpacing.Left = 5 BevelOuter = bvNone - ClientHeight = 68 - ClientWidth = 75 + ClientHeight = 96 + ClientWidth = 101 TabOrder = 1 object chkAsymmetric: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = LeftPanel2 Left = 0 - Height = 17 + Height = 24 Top = 0 - Width = 74 + Width = 100 Caption = 'asymmetric' Enabled = False TabOrder = 0 @@ -189,9 +189,9 @@ AnchorSideTop.Control = chkAsymmetric AnchorSideTop.Side = asrBottom Left = 0 - Height = 17 - Top = 17 - Width = 55 + Height = 24 + Top = 24 + Width = 73 Caption = 'Subdirs' TabOrder = 1 end @@ -200,9 +200,9 @@ AnchorSideTop.Control = chkSubDirs AnchorSideTop.Side = asrBottom Left = 0 - Height = 17 - Top = 34 - Width = 72 + Height = 24 + Top = 48 + Width = 94 Caption = 'by content' TabOrder = 2 end @@ -211,9 +211,9 @@ AnchorSideTop.Control = chkByContent AnchorSideTop.Side = asrBottom Left = 0 - Height = 17 - Top = 51 - Width = 75 + Height = 24 + Top = 72 + Width = 101 Caption = 'ignore date' TabOrder = 3 end @@ -222,8 +222,8 @@ AnchorSideLeft.Control = LeftPanel2 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TopPanel - Left = 175 - Height = 63 + Left = 229 + Height = 67 Top = 1 Width = 202 AutoSize = True @@ -331,10 +331,10 @@ AnchorSideTop.Control = TopPanel AnchorSideRight.Control = TopPanel AnchorSideRight.Side = asrBottom - Left = 600 - Height = 23 + Left = 579 + Height = 30 Top = 7 - Width = 84 + Width = 105 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Around = 6 @@ -349,10 +349,10 @@ AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSynchronize AnchorSideRight.Side = asrBottom - Left = 600 - Height = 23 - Top = 36 - Width = 84 + Left = 579 + Height = 30 + Top = 43 + Width = 105 Anchors = [akTop, akLeft, akRight] AutoSize = True Cancel = True @@ -363,8 +363,8 @@ end object StatusBar1: TStatusBar Left = 0 - Height = 20 - Top = 418 + Height = 28 + Top = 410 Width = 691 Panels = < item @@ -381,7 +381,7 @@ AnchorSideRight.Side = asrBottom Left = 0 Height = 20 - Top = 98 + Top = 133 Width = 691 Anchors = [akTop, akLeft, akRight] AutoFillColumns = True @@ -391,17 +391,17 @@ item SizePriority = 0 Title.Caption = 'Name' - Width = 100 + Width = 250 end item SizePriority = 0 Title.Caption = 'Size' - Width = 60 + Width = 150 end item SizePriority = 0 Title.Caption = 'Date' - Width = 130 + Width = 170 end item SizePriority = 0 @@ -411,16 +411,16 @@ item SizePriority = 0 Title.Caption = 'Date' - Width = 130 + Width = 170 end item SizePriority = 0 Title.Caption = 'Size' - Width = 60 + Width = 120 end item Title.Caption = 'Name' - Width = 181 + Width = 0 end> ExtendedSelect = False FixedCols = 0 @@ -431,13 +431,13 @@ OnHeaderClick = HeaderDGHeaderClick OnHeaderSizing = HeaderDGHeaderSizing ColWidths = ( - 100 - 60 - 130 + 250 + 150 + 170 30 - 130 - 60 - 181 + 170 + 120 + 0 ) end object MainDrawGrid: TDrawGrid @@ -448,8 +448,8 @@ AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = StatusBar1 Left = 0 - Height = 300 - Top = 118 + Height = 257 + Top = 153 Width = 691 Anchors = [akTop, akLeft, akRight, akBottom] AutoFillColumns = True @@ -459,6 +459,7 @@ FixedRows = 0 MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goSmoothScroll, goHeaderPushedLook, goDontScrollPartCell] + PopupMenu = PopupMenu1 RowCount = 0 ScrollBars = ssAutoVertical TabOrder = 8 @@ -665,4 +666,23 @@ C3FFC3C3C3FFC3C3C3FFC3C3C3FF } end + object PopupMenu1: TPopupMenu + left = 121 + top = 217 + object MenuItemViewLeft: TMenuItem + Caption = 'View left' + ShortCut = 114 + OnClick = MenuItemViewLeftClick + end + object MenuItemViewRight: TMenuItem + Caption = 'View right' + ShortCut = 8306 + OnClick = MenuItemViewRightClick + end + object MenuItemCompare: TMenuItem + Caption = 'Compare' + ShortCut = 16498 + OnClick = MainDrawGridDblClick + end + end end Index: fsyncdirsdlg.lrt =================================================================== --- fsyncdirsdlg.lrt (revision 5790) +++ fsyncdirsdlg.lrt (working copy) @@ -26,3 +26,6 @@ TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION=Date TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION=Size TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION=Name +TFRMSYNCDIRSDLG.MENUITEMVIEWLEFT.CAPTION=View left +TFRMSYNCDIRSDLG.MENUITEMVIEWRIGHT.CAPTION=View right +TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION=Compare Index: fsyncdirsdlg.pas =================================================================== --- fsyncdirsdlg.pas (revision 5790) +++ fsyncdirsdlg.pas (working copy) @@ -30,7 +30,7 @@ uses Classes, SysUtils, FileUtil, Masks, Forms, Controls, Graphics, Dialogs, - StdCtrls, ExtCtrls, Buttons, ComCtrls, Grids, uFileView, uFileSource, + StdCtrls, ExtCtrls, Buttons, ComCtrls, Grids, Menus, uFileView, uFileSource, uFileSourceCopyOperation, uFile, uFileSourceOperationMessageBoxesUI; type @@ -58,6 +58,10 @@ Label1: TLabel; LeftPanel1: TPanel; LeftPanel2: TPanel; + MenuItemCompare: TMenuItem; + MenuItemViewRight: TMenuItem; + MenuItemViewLeft: TMenuItem; + PopupMenu1: TPopupMenu; sbCopyRight: TSpeedButton; sbEqual: TSpeedButton; sbNotEqual: TSpeedButton; @@ -83,6 +87,8 @@ procedure HeaderDGHeaderSizing(sender: TObject; const IsColumn: boolean; const aIndex, aSize: Integer); procedure FilterSpeedButtonClick(Sender: TObject); + procedure MenuItemViewLeftClick(Sender: TObject); + procedure MenuItemViewRightClick(Sender: TObject); private { private declarations } FCancel: Boolean; @@ -130,7 +136,8 @@ uses fMain, uDebug, fDiffer, fSyncDirsPerformDlg, uGlobs, LCLType, LazUTF8, DCClassesUtf8, uFileSystemFileSource, uFileSourceOperationOptions, DCDateTimeUtils, - uFileSourceOperation, uDCUtils, uFileSourceUtil, uFileSourceOperationTypes; + uFileSourceOperation, uDCUtils, uFileSourceUtil, uFileSourceOperationTypes, + fViewer, uMainCommands; {$R *.lfm} @@ -558,6 +565,7 @@ var r: Integer; sr: TFileSyncRec; + sl:TStringList; begin r := MainDrawGrid.Row; if (r < 0) or (r >= FVisibleItems.Count) then Exit; @@ -566,7 +574,19 @@ or not Assigned(sr.FFileR) or not Assigned(sr.FFileL) or (sr.FState = srsEqual) then Exit; - ShowDiffer(sr.FFileL.FullPath, sr.FFileR.FullPath); + if gExternalTools[etDiffer].Enabled then + begin + sl:=TStringList.Create; + try + sl.add(sr.FFileL.FullPath); + sl.add(sr.FFileR.FullPath); + RunExtDiffer(sl); + finally + sl.free; + end; + end + else + ShowDiffer(sr.FFileL.FullPath, sr.FFileR.FullPath); end; procedure TfrmSyncDirsDlg.MainDrawGridDrawCell(Sender: TObject; aCol, @@ -694,6 +714,49 @@ FillFoundItemsDG end; + +procedure TfrmSyncDirsDlg.MenuItemViewLeftClick(Sender: TObject); +var + r: Integer; + sr: TFileSyncRec; + sl:TStringList; +begin + r := MainDrawGrid.Row; + if (r < 0) or (r >= FVisibleItems.Count) then Exit; + sr := TFileSyncRec(FVisibleItems.Objects[r]); + if not Assigned(sr) or not Assigned(sr.FFileL) then + Exit; + + sl:=TStringList.Create; + try + sl.add(sr.FFileL.FullPath); + ShowViewer(sl); + finally + sl.free; + end; +end; + +procedure TfrmSyncDirsDlg.MenuItemViewRightClick(Sender: TObject); +var + r: Integer; + sr: TFileSyncRec; + sl:TStringList; +begin + r := MainDrawGrid.Row; + if (r < 0) or (r >= FVisibleItems.Count) then Exit; + sr := TFileSyncRec(FVisibleItems.Objects[r]); + if not Assigned(sr) or not Assigned(sr.FFileR) then + Exit; + + sl:=TStringList.Create; + try + sl.add(sr.FFileR.FullPath); + ShowViewer(sl); + finally + sl.free; + end; +end; + procedure TfrmSyncDirsDlg.SetSortIndex(AValue: Integer); var s: string; Index: umaincommands.pas =================================================================== --- umaincommands.pas (revision 5790) +++ umaincommands.pas (working copy) @@ -236,6 +236,8 @@ procedure cm_ExecuteToolbarItem(const Params: array of string); end; + procedure RunExtDiffer(CompareList: TStringList); + implementation uses Forms, Controls, Dialogs, Clipbrd, strutils, LCLProc, HelpIntfs, StringHashList, @@ -2027,6 +2029,29 @@ ShowOptions(GetDefaultParam(Params)); end; +procedure RunExtDiffer(CompareList: TStringList); +var + i : Integer; + sCommand: String; +begin + with gExternalTools[etDiffer] do + begin + sCommand := QuoteStr(ReplaceEnvVars(Path)); + if Parameters <> EmptyStr then + sCommand := sCommand + ' ' + Parameters; + for i := 0 to CompareList.Count - 1 do + sCommand := sCommand + ' ' + QuoteStr(CompareList.Strings[i]); + try + ExecCmdFork(sCommand, RunInTerminal, '', KeepTerminalOpen); + except + on e: EInvalidCommandLine do + MessageDlg(rsToolErrorOpeningDiffer, + rsMsgInvalidCommandLine + ' (' + rsToolDiffer + '):' + LineEnding + e.Message, + mtError, [mbOK], 0); + end; + end; +end; + procedure TMainCommands.cm_CompareContents(const Params: array of string); var FilesToCompare: TStringList = nil; @@ -2040,29 +2065,6 @@ DirsToCompare.Add(aFile.FullPath); end; - procedure RunExtDiffer(CompareList: TStringList); - var - i : Integer; - sCommand: String; - begin - with gExternalTools[etDiffer] do - begin - sCommand := QuoteStr(ReplaceEnvVars(Path)); - if Parameters <> EmptyStr then - sCommand := sCommand + ' ' + Parameters; - for i := 0 to CompareList.Count - 1 do - sCommand := sCommand + ' ' + QuoteStr(CompareList.Strings[i]); - try - ExecCmdFork(sCommand, RunInTerminal, '', KeepTerminalOpen); - except - on e: EInvalidCommandLine do - MessageDlg(rsToolErrorOpeningDiffer, - rsMsgInvalidCommandLine + ' (' + rsToolDiffer + '):' + LineEnding + e.Message, - mtError, [mbOK], 0); - end; - end; - end; - var i : Integer; ActiveSelectedFiles: TFiles = nil; | ||||
Fixed in Revision | 5810, 5820 | ||||
Operating system | |||||
Widgetset | |||||
Architecture | |||||
Date Modified | Username | Field | Change |
---|---|---|---|
2015-01-16 15:59 | holger | New Issue | |
2015-01-16 15:59 | holger | File Added: fsyncdirsdlg.patch | |
2015-01-22 07:20 | Alexx2000 | Assigned To | => Alexx2000 |
2015-01-22 07:20 | Alexx2000 | Status | new => assigned |
2015-01-22 18:39 | Alexx2000 | Fixed in Revision | => 5810 |
2015-01-22 18:39 | Alexx2000 | Status | assigned => resolved |
2015-01-22 18:39 | Alexx2000 | Resolution | open => fixed |
2015-01-24 22:59 | Alexx2000 | Fixed in Revision | 5810 => 5810, 5820 |
2015-01-24 22:59 | Alexx2000 | Fixed in Version | => 0.6.0 |
2015-01-24 22:59 | Alexx2000 | Target Version | => 0.6.0 |
2019-06-08 15:26 | Alexx2000 | Status | resolved => closed |