summaryrefslogtreecommitdiff
path: root/UMain.pas
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@tbzatek.englab.brq.redhat.com>2008-09-05 14:36:42 +0200
committerTomas Bzatek <tbzatek@tbzatek.englab.brq.redhat.com>2008-09-05 14:36:42 +0200
commit959b06fb29ddfd48cac307aa4c0c0088c1f60547 (patch)
tree7ab27766e280fd48ae73442613a67f0fd38f01c9 /UMain.pas
parent872183212badc613d3ea7093ae563615edb0cdd7 (diff)
downloadtuxcmd-959b06fb29ddfd48cac307aa4c0c0088c1f60547.tar.xz
Add simple popup menu on path box allowing user to copy current path to clipboardv0.6.48
Expose copy file names shortcuts in the Commands menu
Diffstat (limited to 'UMain.pas')
-rw-r--r--UMain.pas91
1 files changed, 80 insertions, 11 deletions
diff --git a/UMain.pas b/UMain.pas
index f1181d1..ffb4b39 100644
--- a/UMain.pas
+++ b/UMain.pas
@@ -69,6 +69,7 @@ type
miPreferences: TGTKMenuItem;
mnuBookmarks, miAddBookmark, miEditBookmarks, BookmarkPopup, BookmarkPopupDelete, miBookmarksSeparator: TGTKMenuItem;
miShowDirectorySizes, miTargetSource: TGTKMenuItem;
+ miCopyNames, miCopyFullPaths: TGTKMenuItem;
ButtonBoxSpace: TGTKEventBox;
MounterBarHandleBox : TGTKHandleBox;
MounterBarTable: TGTKTable;
@@ -87,11 +88,14 @@ type
OpenTerminalButton: TGTKButton;
miNewTab: TGTKMenuItem;
LeftPasswordButton, RightPasswordButton: TGTKImageButton;
+ PathBoxPopupMenu: TGTKMenuItem;
+ miPathBoxRefresh, miPathBoxCopyPath: TGTKMenuItem;
procedure FormCreate(Sender: TObject); override;
procedure FormDestroy(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PanelSeparatorResize(Sender: TObject);
+ procedure PanelSeparatorMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
procedure miExitClick(Sender: TObject);
procedure miAboutClick(Sender: TObject);
procedure miRefreshClick(Sender: TObject);
@@ -99,6 +103,7 @@ type
procedure ListViewKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
procedure ListViewEnter(Sender: TObject; var Accept: boolean);
procedure PathLabelMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ procedure PathLabelMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
procedure PathButtonClick(Sender: TObject);
function CompareFunc(Sender: TObject; var model: PGtkTreeModel; var a, b: PGtkTreeIter): integer;
procedure F5ButtonClick(Sender: TObject);
@@ -174,6 +179,8 @@ type
procedure NotebookTabFocusOnlyEvent(Sender: TObject; const TabNum: integer);
procedure miFilePropertiesClick(Sender: TObject);
procedure PasswordButtonClick(Sender: TObject);
+ procedure miPathBoxCopyPathClick(Sender: TObject);
+ procedure miCopyNamesClick(Sender: TObject);
private
LeftLastFocused, Editing, QuickFind, RedrawLeftInactive, RedrawRightInactive, StartUp, LeftTabPopup: boolean;
LastWidth, RunningEscSensitive: integer;
@@ -390,7 +397,7 @@ begin
F6Button.CanFocus := False;
F7Button.CanFocus := False;
F8Button.CanFocus := False;
- PanelSeparator.PopupMenu := SplitterPopupMenu;
+ PanelSeparator.OnMouseUp := PanelSeparatorMouseUp;
LeftListView.PopupMenu := FilePopupMenu;
RightListView.PopupMenu := FilePopupMenu;
@@ -406,7 +413,9 @@ begin
LeftListView.OnEnter := ListViewEnter;
RightListView.OnEnter := ListViewEnter;
LeftPathLabelEventBox.OnMouseDown := PathLabelMouseDown;
+ LeftPathLabelEventBox.OnMouseUp := PathLabelMouseUp;
RightPathLabelEventBox.OnMouseDown := PathLabelMouseDown;
+ RightPathLabelEventBox.OnMouseUp := PathLabelMouseUp;
LeftUpButton.OnClick := PathButtonClick;
LeftRootButton.OnClick := PathButtonClick;
LeftHomeButton.OnClick := PathButtonClick;
@@ -788,6 +797,18 @@ begin
miShowDirectorySizes.OnClick := miShowDirectorySizesClick;
mnuCommands.Add(miShowDirectorySizes);
mnuCommands.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miCopyNames := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miCopyNames.Caption := '_Copy file names to clipboard';
+ miCopyNames.ShortCuts.AddName('<Shift>F2');
+ miCopyNames.OnClick := miCopyNamesClick;
+ mnuCommands.Add(miCopyNames);
+ miCopyFullPaths := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miCopyFullPaths.Caption := 'Copy _full path names to clipboard';
+ miCopyFullPaths.ShortCuts.AddName('<Control>F2');
+ miCopyFullPaths.StockIcon := 'gtk-copy';
+ miCopyFullPaths.OnClick := miCopyNamesClick;
+ mnuCommands.Add(miCopyFullPaths);
+ mnuCommands.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
miNewTab := TGTKMenuItem.CreateTyped(Self, itImageText);
miNewTab.Caption := LANGmiNewTab_Caption;
miNewTab.ShortCuts.AddName('<Control>T');
@@ -988,6 +1009,21 @@ begin
miCloseAllTabs.Caption := LANGmiCloseAllTabsCaption;
miCloseAllTabs.OnClick := miCloseAllTabsClick;
TabPopupMenu.Add(miCloseAllTabs);
+
+ // Path box popup menu
+ PathBoxPopupMenu := TGTKMenuItem.Create(Self);
+ miPathBoxRefresh := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miPathBoxRefresh.Caption := LANGmiRefresh_Caption;
+ miPathBoxRefresh.StockIcon := 'gtk-refresh';
+ miPathBoxRefresh.ShortCuts.AddName('<Control>R');
+ miPathBoxRefresh.OnClick := miRefreshClick;
+ PathBoxPopupMenu.Add(miPathBoxRefresh);
+ PathBoxPopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miPathBoxCopyPath := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miPathBoxCopyPath.Caption := '_Copy path to clipboard';
+ miPathBoxCopyPath.StockIcon := 'gtk-copy';
+ miPathBoxCopyPath.OnClick := miPathBoxCopyPathClick;
+ PathBoxPopupMenu.Add(miPathBoxCopyPath);
end;
procedure TFMain.ConstructColumns(ListView: TGTKListView);
@@ -1263,6 +1299,14 @@ begin
if not StartUp then ConfPanelSep := Round((PanelSeparator.Position / Width) * 100);
end;
+procedure TFMain.PanelSeparatorMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+begin
+ if Button = mbRight then begin
+ Accept := False;
+ SplitterPopupMenu.PopUp;
+ end;
+end;
+
procedure TFMain.miExitClick(Sender: TObject);
begin
Close;
@@ -1370,9 +1414,6 @@ begin
if Shift = [ssAlt] then begin
ShowBookmarkQuick(False);
Accept := False;
- end else
- if (Shift = [ssShift]) or (Shift = [ssCtrl]) then begin
- CopyFilenamesToClipboard(Shift = [ssCtrl], LeftPanel);
end else begin
DeactivateQuickFind(LeftPanel);
Accept:= False;
@@ -1598,9 +1639,18 @@ end;
procedure TFMain.PathLabelMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
begin
- if Button = mbLeft then
+ if Button in [mbLeft, mbRight] then begin
if Sender = LeftPathLabelEventBox then LeftListView.SetFocus
else if Sender = RightPathLabelEventBox then RightListView.SetFocus;
+ end;
+end;
+
+procedure TFMain.PathLabelMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+begin
+ if Button = mbRight then begin
+ Accept := False;
+ PathBoxPopupMenu.PopUp;
+ end;
end;
procedure TFMain.ActivateItem(const ItemIndex: longint; const MouseActivate: boolean);
@@ -6122,16 +6172,21 @@ begin
DataList := RightPanelData;
end;
+ clip := gtk_clipboard_get(gdk_atom_intern('CLIPBOARD', False));
+
SelCount := 0;
if DataList.Count > 0 then
for i := 0 to DataList.Count - 1 do
with PDataItem(DataList[i])^ do
if Selected and (not UpDir) then Inc(SelCount);
- if (SelCount = 0) and ((not Assigned(AListView.Selected)) or PDataItem(AListView.Selected.Data)^.UpDir)
- then Exit; // Silently do nothing
+ if (SelCount = 0) and ((not Assigned(AListView.Selected)) or PDataItem(AListView.Selected.Data)^.UpDir) then begin
+ // Empty the clipboard
+ gtk_clipboard_clear(clip);
+ Exit;
+ end;
if SelCount = 0 then begin
- s := PDataItem(AListView.Selected.Data)^.FName;
+ s := PDataItem(AListView.Selected.Data)^.FDisplayName;
if FullPaths then s := IncludeTrailingPathDelimiter(Engine.GetPath) + s;
end else begin
s := '';
@@ -6140,15 +6195,29 @@ begin
x := AListView.ConvertFromSorted(i);
if (x >= 0) and (x < DataList.Count) and PDataItem(DataList[x])^.Selected then begin
if FullPaths then s := s + IncludeTrailingPathDelimiter(Engine.GetPath);
- s := s + PDataItem(DataList[x])^.FName + #10;
+ s := s + PDataItem(DataList[x])^.FDisplayName + #10;
end;
end;
end;
- clip := gtk_clipboard_get(gdk_atom_intern('CLIPBOARD', False));
- gtk_clipboard_set_text(clip, PChar(StrToUTF8(s)), Length(StrToUTF8(s)));
+ gtk_clipboard_set_text(clip, PChar(s), Length(s));
end;
+procedure TFMain.miPathBoxCopyPathClick(Sender: TObject);
+var clip: PGtkClipboard;
+ s: string;
+begin
+ if LeftLastFocused then s := LeftPanelEngine.Path
+ else s := RightPanelEngine.Path;
+ clip := gtk_clipboard_get(gdk_atom_intern('CLIPBOARD', False));
+ gtk_clipboard_set_text(clip, PChar(StrToUTF8(s)), Length(StrToUTF8(s)));
+end;
+
+procedure TFMain.miCopyNamesClick(Sender: TObject);
+begin
+ if LeftListView.Focused then CopyFilenamesToClipboard(Sender = miCopyFullPaths, True) else
+ if RightListView.Focused then CopyFilenamesToClipboard(Sender = miCopyFullPaths, False);
+end;
(********************************************************************************************************************************)
function TFMain.HandleRunFromArchive(var APath: string; Engine: TPanelEngine; Command, FileTypeDesc: string; BypassDialog: boolean): boolean;