ADD: 'Open with default App' Modern ToolBar Item in ViewForm on macOS

This commit is contained in:
rich2014 2026-05-19 14:20:06 +08:00
commit 0291126ba2
3 changed files with 51 additions and 21 deletions

View file

@ -460,7 +460,6 @@ type
{$ENDIF}
property Commands: TFormCommands read FCommands implements IFormCommands;
property FileName: String write SetFileName;
protected
procedure WMCommand(var Message: TLMCommand); message LM_COMMAND;
@ -491,6 +490,8 @@ type
procedure RotateImage(ADegree: Integer);
procedure MirrorImage(AVertically: Boolean = False);
property FileName: String read FFileName write SetFileName;
published
// Commands for hotkey manager
procedure cm_About(const Params: array of string);

View file

@ -159,6 +159,15 @@ begin
form.cm_DeleteFile( [] );
end;
procedure openWithAction( const Sender: id );
var
form: TfrmViewer;
begin
form:= getCurrentViewerForm;
if Assigned(form) then
TDarwinApplicationUtil.openWithDefaultApp( form.FileName );
end;
procedure viewerZoomInAction( const Sender: id );
var
form: TfrmViewer;
@ -389,6 +398,32 @@ const
onAction: @viewerNextAction;
);
viewerOpenWithItemConfig: TCocoaConfigToolBarItem = (
identifier: 'ViewerForm.OpenWithPreview';
priority: NSToolbarItemVisibilityPriorityStandard;
navigational: True;
iconName: 'square.and.arrow.up';
title: 'Open with';
tips: 'Open with default App';
bordered: True;
onAction: @openWithAction;
);
viewerSlideItemConfig: TCocoaConfigToolBarItemMenu = (
identifier: 'ViewerForm.Slide';
priority: NSToolbarItemVisibilityPriorityStandard;
navigational: True;
iconName: 'play.fill';
title: 'Slide Show';
tips: 'Slide Show';
bordered: True;
alternateIconName: 'stop.fill';
onAction: @viewerSlideAction;
showsIndicator: True;
onGetMenu: @onViewerGetSlideMenu;
);
viewerCopyFileItemConfig: TCocoaConfigToolBarItem = (
identifier: 'ViewerForm.CopyFile';
priority: NSToolbarItemVisibilityPriorityStandard;
@ -422,21 +457,6 @@ const
onAction: @viewerDeleteAction;
);
viewerSlideItemConfig: TCocoaConfigToolBarItemMenu = (
identifier: 'ViewerForm.Slide';
priority: NSToolbarItemVisibilityPriorityStandard;
navigational: True;
iconName: 'play.fill';
title: 'Slide Show';
tips: 'Slide Show';
bordered: True;
alternateIconName: 'stop.fill';
onAction: @viewerSlideAction;
showsIndicator: True;
onGetMenu: @onViewerGetSlideMenu;
);
viewerZoomInItemConfig: TCocoaConfigToolBarItem = (
identifier: 'ViewerForm.ZoomIn';
@ -715,19 +735,21 @@ const
'ViewerForm.Reload',
'ViewerForm.Prev',
'ViewerForm.Next',
'ViewerForm.OpenWithPreview',
'ViewerForm.Slide',
'ViewerForm.CopyFile',
'ViewerForm.MoveFile',
'ViewerForm.DeleteFile',
'ViewerForm.Slide'
'ViewerForm.DeleteFile'
);
allowedItemsIdentifiers: (
'ViewerForm.Reload',
'ViewerForm.Prev',
'ViewerForm.Next',
'ViewerForm.OpenWithPreview',
'ViewerForm.Slide',
'ViewerForm.CopyFile',
'ViewerForm.MoveFile',
'ViewerForm.DeleteFile',
'ViewerForm.Slide',
'ViewerForm.ZoomIn',
'ViewerForm.ZoomOut',
@ -764,10 +786,10 @@ begin
translateItemConfig( poFile, 'tfrmviewer.actreload.hint', viewerReloadItemConfig );
translateItemConfig( poFile, 'tfrmviewer.actloadprevfile.hint', viewerPrevItemConfig );
translateItemConfig( poFile, 'tfrmviewer.actloadnextfile.hint', viewerNextItemConfig );
translateItemConfig( poFile, 'tfrmviewer.btnslideshow.caption', viewerSlideItemConfig );
translateItemConfig( poFile, 'tfrmviewer.actcopyfile.hint', viewerCopyFileItemConfig );
translateItemConfig( poFile, 'tfrmviewer.actmovefile.hint', viewerMoveFileItemConfig );
translateItemConfig( poFile, 'tfrmviewer.actdeletefile.hint', viewerDeleteFileItemConfig );
translateItemConfig( poFile, 'tfrmviewer.btnslideshow.caption', viewerSlideItemConfig );
translateItemConfig( poFile, 'tfrmviewer.actzoomin.hint', viewerZoomInItemConfig );
translateItemConfig( poFile, 'tfrmviewer.actzoomout.hint', viewerZoomOutItemConfig );
@ -820,10 +842,11 @@ begin
TCocoaToolBarUtils.toClass(viewerReloadItemConfig),
TCocoaToolBarUtils.toClass(viewerPrevItemConfig),
TCocoaToolBarUtils.toClass(viewerNextItemConfig),
TCocoaToolBarUtils.toClass(viewerOpenWithItemConfig),
TCocoaToolBarUtils.toClass(viewerSlideItemConfig),
TCocoaToolBarUtils.toClass(viewerCopyFileItemConfig),
TCocoaToolBarUtils.toClass(viewerMoveFileItemConfig),
TCocoaToolBarUtils.toClass(viewerDeleteFileItemConfig),
TCocoaToolBarUtils.toClass(viewerSlideItemConfig),
TCocoaToolBarUtils.toClass(viewerZoomInItemConfig),
TCocoaToolBarUtils.toClass(viewerZoomOutItemConfig),

View file

@ -51,6 +51,7 @@ type
const isReadyFunc: TDarwinServiceMenuIsReadyFunc;
const getFilenamesFunc: TDarwinServiceMenuGetFilenamesFunc );
class procedure popUpMenuWithServiceSubmenu( const menu: TPopupMenu; const caption: String; const paths: TStringArray );
class procedure openWithDefaultApp( const filePath: String );
class procedure performService( const serviceName: String );
class procedure openSystemSecurityPreferences_PrivacyAllFiles;
public
@ -225,6 +226,11 @@ begin
menuManager.Free;
end;
class procedure TDarwinApplicationUtil.openWithDefaultApp( const filePath: String );
begin
NSWorkspace.sharedWorkspace.openFile( StringToNSString(filePath) );
end;
class procedure TDarwinApplicationUtil.performService(const serviceName: String
);
var