ADD: Modern Form Style - Quick Look Panel Control for macOS 11+

This commit is contained in:
rich2014 2024-09-10 23:03:19 +08:00
commit 35ff5616f3
2 changed files with 80 additions and 1 deletions

View file

@ -73,6 +73,11 @@ begin
performMacOSService( 'Finder/Show Info' );
end;
procedure quickLookAction( const Sender: id );
begin
showQuickLookPanel;
end;
function onGetMainFormMenu: TMenuItem;
var
menu: TMenuItem;
@ -236,6 +241,17 @@ const
onAction: @finderInfoAction;
);
quickLookItemConfig: TCocoaConfigToolBarItem = (
identifier: 'MainForm.QuickLook';
priority: NSToolbarItemVisibilityPriorityStandard;
navigational: False;
iconName: 'eye';
title: 'Preview';
tips: 'Preview...';
bordered: True;
onAction: @quickLookAction;
);
menuItemConfig: TCocoaConfigToolBarItemMenu = (
identifier: 'MainForm.Menu';
@ -315,6 +331,7 @@ const
'NSToolbarFlexibleSpaceItem',
'MainForm.FinderReveal',
'MainForm.FinderInfo',
'MainForm.QuickLook',
'NSToolbarFlexibleSpaceItem',
'MainForm.Menu',
'NSToolbarFlexibleSpaceItem',
@ -331,6 +348,7 @@ const
'MainForm.AirDrop',
'MainForm.FinderReveal',
'MainForm.FinderInfo',
'MainForm.QuickLook',
'MainForm.Menu',
'MainForm.Refresh',
'MainForm.MultiRename',
@ -358,6 +376,7 @@ begin
TCocoaToolBarUtils.toClass(menuItemConfig),
TCocoaToolBarUtils.toClass(finderRevealItemConfig),
TCocoaToolBarUtils.toClass(finderInfoItemConfig),
TCocoaToolBarUtils.toClass(quickLookItemConfig),
TCocoaToolBarUtils.toClass(refreshItemConfig),
TCocoaToolBarUtils.toClass(multiRenameItemConfig),
TCocoaToolBarUtils.toClass(swapPanelsItemConfig)

View file

@ -35,7 +35,8 @@ interface
uses
Classes, SysUtils, UnixType,
Cocoa_Extra, MacOSAll, CocoaAll, CocoaUtils, CocoaInt, CocoaConst, CocoaMenus,
Cocoa_Extra, MacOSAll, CocoaAll, QuickLookUI,
CocoaUtils, CocoaInt, CocoaConst, CocoaMenus,
InterfaceBase, Menus, Controls, Forms,
uDarwinFSWatch;
@ -155,6 +156,8 @@ procedure InitNSServiceProvider(
procedure performMacOSService( serviceName: String );
procedure showQuickLookPanel;
// MacOS Sharing
procedure showMacOSSharingServiceMenu;
procedure showMacOSAirDropDialog;
@ -646,6 +649,63 @@ begin
FreeAndNil( MacosServiceMenuHelper );
end;
type
{ TDCQLPreviewPanelMate }
TDCQLPreviewPanelMate = objcclass( NSObject, QLPreviewPanelDataSourceProtocol )
private
_urlArray: NSArray;
public
function numberOfPreviewItemsInPreviewPanel (panel: QLPreviewPanel): NSInteger;
function previewPanel_previewItemAtIndex (panel: QLPreviewPanel; index: NSInteger): QLPreviewItemProtocol;
public
function initWithItems( urlArray: NSArray ): id; message 'setUrlArray:';
procedure dealloc; override;
end;
function TDCQLPreviewPanelMate.numberOfPreviewItemsInPreviewPanel(
panel: QLPreviewPanel): NSInteger;
begin
Result:= _urlArray.count;
end;
function TDCQLPreviewPanelMate.previewPanel_previewItemAtIndex(panel: QLPreviewPanel;
index: NSInteger): QLPreviewItemProtocol;
begin
Result:= QLPreviewItemProtocol( _urlArray.objectAtIndex(index) );
end;
function TDCQLPreviewPanelMate.initWithItems(urlArray: NSArray): id;
begin
Result:= Inherited init;
_urlArray:= urlArray;
_urlArray.retain;
end;
procedure TDCQLPreviewPanelMate.dealloc;
begin
_urlArray.release;
Inherited;
end;
procedure showQuickLookPanel;
var
lclArray: TStringArray;
mate: TDCQLPreviewPanelMate;
panel: QLPreviewPanel;
begin
lclArray:= TDCCocoaApplication(NSApp).serviceMenuGetFilenames;
if lclArray = nil then
Exit;
mate:= TDCQLPreviewPanelMate.alloc.initWithItems( UrlArrayFromLCLToNS(lclArray) );
panel:= QLPreviewPanel.sharedPreviewPanel;
panel.setDataSource( mate );
panel.makeKeyAndOrderFront( nil );
mate.release;
end;
initialization
Initialize;