Sfoglia il codice sorgente

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

rich2014 1 anno fa
parent
commit
35ff5616f3

+ 19 - 0
src/platform/unix/darwin/ucocoamodernformconfig.pas

@@ -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)

+ 61 - 1
src/platform/unix/darwin/umydarwin.pas

@@ -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;