diff options
| -rw-r--r-- | UConfig.pas | 4 | ||||
| -rw-r--r-- | UMain.pas | 91 |
2 files changed, 82 insertions, 13 deletions
diff --git a/UConfig.pas b/UConfig.pas index 5e13616..41f6256 100644 --- a/UConfig.pas +++ b/UConfig.pas @@ -25,8 +25,8 @@ uses Classes, ULocale; resourcestring ConstAppTitle = 'Tux Commander'; - ConstAboutVersion = '0.6.47-dev'; - ConstAboutBuildDate = '2008-09-02'; + ConstAboutVersion = '0.6.48-dev'; + ConstAboutBuildDate = '2008-09-05'; {$IFDEF FPC} {$INCLUDE fpcver.inc} @@ -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; |
