ADD: actions to the Slide Modern ToolBar Items in ViewerForm on macOS 11+

This commit is contained in:
rich2014 2026-05-09 17:49:55 +08:00
commit ae48e071ca
3 changed files with 84 additions and 5 deletions

View file

@ -657,7 +657,7 @@ object frmViewer: TfrmViewer
ShowCaption = False
end
object btnSlideShow: TToolButton
Tag = 1
Tag = 3
Left = 232
Top = 66
AutoSize = True

View file

@ -294,6 +294,7 @@ type
procedure btnPrevGifFrameClick(Sender: TObject);
procedure btnRedEyeClick(Sender: TObject);
procedure btnResizeClick(Sender: TObject);
procedure btnSlideShowSetState(const state: Boolean);
procedure btnSlideShowClick(Sender: TObject);
procedure DrawPreviewSelection(Sender: TObject; aCol, aRow: Integer);
procedure DrawPreviewTopleftChanged(Sender: TObject);
@ -545,6 +546,8 @@ type
const states: TViewerGifStates ); virtual;
procedure onImageEditStateChanged(
const viewer: TfrmViewer ); virtual;
procedure onSlideStateChanged(
const viewer: TfrmViewer ); virtual;
end;
procedure ShowViewer(const FilesToView: TStringList; WaitData: TWaitData = nil); overload;
@ -2212,7 +2215,7 @@ begin
end;
end;
Inc(i_timer);
if (btnSlideShow.Down) and (i_timer = 60 * btnSlideShow.Tag) then
if (btnSlideShow.Down) and (i_timer >= 60 * btnSlideShow.Tag) then
begin
if (ToolBar1.Visible) and (not ToolBar1.MouseInClient) then
begin
@ -2649,9 +2652,15 @@ begin
end;
end;
procedure TfrmViewer.btnSlideShowSetState(const state: Boolean);
begin
btnSlideShow.Down:= state;
viewerFormHandler.onSlideStateChanged( self );
end;
procedure TfrmViewer.btnSlideShowClick(Sender: TObject);
begin
btnSlideShow.Down:= not btnSlideShow.Down;
btnSlideShowSetState( not btnSlideShow.Down );
end;
procedure TfrmViewer.FormDestroy(Sender: TObject);
@ -4272,6 +4281,10 @@ procedure TViewerFormHandler.onImageEditStateChanged(
begin
end;
procedure TViewerFormHandler.onSlideStateChanged( const viewer: TfrmViewer );
begin
end;
initialization
viewerFormHandler:= TViewerFormHandler.Create;
TFormCommands.RegisterCommandsForm(TfrmViewer, HotkeysCategory, @rsHotkeyCategoryViewer);

View file

@ -42,8 +42,11 @@ type
const states: TViewerGifStates ); override;
procedure onImageEditStateChanged(
const viewer: TfrmViewer ); override;
procedure onSlideStateChanged(
const viewer: TfrmViewer ); override;
procedure onPenWidthChanged( Sender: TObject );
procedure onSlideStart( Sender: TObject );
end;
function getCurrentViewerForm: TfrmViewer;
@ -302,6 +305,15 @@ begin
form.btnResizeClick( nil );
end;
procedure viewerSlideAction( const Sender: id );
var
form: TfrmViewer;
begin
form:= getCurrentViewerForm;
if Assigned(form) then
form.btnSlideShowClick( nil );
end;
procedure onViewerGetPenWidthMenu( const menu: TMenu );
var
i: Integer;
@ -316,6 +328,20 @@ begin
end;
end;
procedure onViewerGetSlideMenu( const menu: TMenu );
var
i: Integer;
item: TMenuItem;
begin
for i:= 1 to 25 do begin
item:= TMenuItem.Create( menu );
item.Caption:= i.ToString;
item.Tag:= i;
item.OnClick:= @TCocoaViewerFormHandler(viewerFormHandler).onSlideStart;
menu.Items.Add( item );
end;
end;
const
viewerReloadItemConfig: TCocoaConfigToolBarItem = (
identifier: 'ViewerForm.Reload';
@ -617,7 +643,7 @@ const
onAction: @viewerResizeAction;
);
viewerSlideItemConfig: TCocoaConfigToolBarItem = (
viewerSlideItemConfig: TCocoaConfigToolBarItemMenu = (
identifier: 'ViewerForm.Slide';
priority: NSToolbarItemVisibilityPriorityStandard;
navigational: False;
@ -625,7 +651,11 @@ const
title: 'Slide Show';
tips: 'Slide Show';
bordered: True;
onAction: nil;
onAction: @viewerSlideAction;
showsIndicator: True;
menu: nil;
onGetMenu: @onViewerGetSlideMenu;
);
viewerFormConfig: TCocoaConfigForm = (
@ -860,6 +890,28 @@ begin
updatePaintState;
end;
procedure TCocoaViewerFormHandler.onSlideStateChanged(const viewer: TfrmViewer);
var
form: TfrmViewer;
item: NSToolBarItem;
imageName: String;
image: NSImage;
begin
form:= getCurrentViewerForm;
if Assigned(form) then begin
if form.btnSlideShow.Down then
imageName:= 'pause'
else
imageName:= 'play';
image:= NSImage.imageWithSystemSymbolName_accessibilityDescription(
StringToNSString(imageName), nil );
item:= TCocoaToolBarUtils.findItemByIdentifier( form, 'ViewerForm.Slide' );
item.setImage( image );
form.TimerViewer.Enabled:= form.btnSlideShow.Down;
end;
end;
procedure TCocoaViewerFormHandler.onPenWidthChanged( Sender: TObject );
var
toolBarMenuItem: TMenuItem absolute Sender;
@ -873,3 +925,17 @@ begin
end;
end;
procedure TCocoaViewerFormHandler.onSlideStart( Sender: TObject );
var
toolBarMenuItem: TMenuItem absolute Sender;
viewerMenuItem: TMenuItem;
form: TfrmViewer;
begin
form:= getCurrentViewerForm;
if Assigned(form) then begin
viewerMenuItem:= form.pmTimeShow.Items[toolBarMenuItem.Tag-1];
form.miPaintClick( viewerMenuItem );
form.btnSlideShowSetState( True );
end;
end;