mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
ADD: actions to the GIF Modern ToolBar Items in ViewerForm on macOS 11+
This commit is contained in:
parent
c753d6f3cc
commit
75954f00f6
2 changed files with 139 additions and 11 deletions
|
|
@ -73,6 +73,8 @@ type
|
|||
|
||||
TViewerShowMode = (vsmText, vsmImage, vsmPlugin, vsmCode, vsmFolder);
|
||||
|
||||
TViewerGifStates = set of (vgsIsGif, vgsPlaying, vgsPrevFrame, vgsNextFrame);
|
||||
|
||||
{ TDrawGrid }
|
||||
|
||||
TDrawGrid = class(Grids.TDrawGrid)
|
||||
|
|
@ -538,6 +540,9 @@ type
|
|||
procedure onShowModeChanged(
|
||||
const viewer: TfrmViewer;
|
||||
const mode: TViewerShowMode ); virtual;
|
||||
procedure onGifStateChanged(
|
||||
const viewer: TfrmViewer;
|
||||
const states: TViewerGifStates ); virtual;
|
||||
end;
|
||||
|
||||
procedure ShowViewer(const FilesToView: TStringList; WaitData: TWaitData = nil); overload;
|
||||
|
|
@ -2090,9 +2095,23 @@ begin
|
|||
end;
|
||||
|
||||
procedure TfrmViewer.UpdateAnimState;
|
||||
var
|
||||
states: TViewerGifStates;
|
||||
begin
|
||||
states:= [vgsIsGif];
|
||||
|
||||
if NOT GifAnim.Paused then
|
||||
Include( states, vgsPlaying );
|
||||
|
||||
btnPrevGifFrame.Enabled:= GifAnim.Paused and (GifAnim.CurrentFrameIndex > 0);
|
||||
if btnPrevGifFrame.Enabled then
|
||||
Include( states, vgsPrevFrame );
|
||||
|
||||
btnNextGifFrame.Enabled:= GifAnim.Paused and (GifAnim.CurrentFrameIndex < GifAnim.FrameCount - 1);
|
||||
if btnNextGifFrame.Enabled then
|
||||
Include( states, vgsNextFrame );
|
||||
|
||||
viewerFormHandler.onGifStateChanged( self, states );
|
||||
end;
|
||||
|
||||
procedure TfrmViewer.btnPrevGifFrameClick(Sender: TObject);
|
||||
|
|
@ -2530,9 +2549,9 @@ procedure TfrmViewer.btnGifToBmpClick(Sender: TObject);
|
|||
begin
|
||||
GifAnim.Pause;
|
||||
btnGifMove.ImageIndex:= 12;
|
||||
UpdateAnimState;
|
||||
Image.Picture.Bitmap:= GifAnim.CurrentView;
|
||||
cm_SaveAs(['']);
|
||||
UpdateAnimState;
|
||||
end;
|
||||
|
||||
procedure TfrmViewer.btnPaintHightlight(Sender: TObject);
|
||||
|
|
@ -2942,6 +2961,8 @@ end;
|
|||
function TfrmViewer.LoadGraphics(const sFileName:String): Boolean;
|
||||
|
||||
procedure UpdateToolbar(bImage: Boolean);
|
||||
var
|
||||
gifStates: TViewerGifStates;
|
||||
begin
|
||||
btnHightlight.Enabled:= bImage and (not miFullScreen.Checked);
|
||||
btnPaint.Enabled:= bImage and (not miFullScreen.Checked);
|
||||
|
|
@ -2957,6 +2978,12 @@ function TfrmViewer.LoadGraphics(const sFileName:String): Boolean;
|
|||
btnGifSeparator.Enabled:= not bImage;
|
||||
btnNextGifFrame.Enabled:= not bImage;
|
||||
btnPrevGifFrame.Enabled:= not bImage;
|
||||
|
||||
if bImage then
|
||||
gifStates:= []
|
||||
else
|
||||
gifStates:= [vgsIsGif];
|
||||
viewerFormHandler.onGifStateChanged( self, gifStates );
|
||||
end;
|
||||
|
||||
var
|
||||
|
|
@ -4222,6 +4249,12 @@ procedure TViewerFormHandler.onShowModeChanged(
|
|||
begin
|
||||
end;
|
||||
|
||||
procedure TViewerFormHandler.onGifStateChanged(
|
||||
const viewer: TfrmViewer;
|
||||
const states: TViewerGifStates);
|
||||
begin
|
||||
end;
|
||||
|
||||
initialization
|
||||
viewerFormHandler:= TViewerFormHandler.Create;
|
||||
TFormCommands.RegisterCommandsForm(TfrmViewer, HotkeysCategory, @rsHotkeyCategoryViewer);
|
||||
|
|
|
|||
|
|
@ -31,10 +31,15 @@ var
|
|||
|
||||
type
|
||||
|
||||
{ TCocoaViewerFormHandler }
|
||||
|
||||
TCocoaViewerFormHandler = class( TViewerFormHandler )
|
||||
procedure onShowModeChanged(
|
||||
const viewer: TfrmViewer;
|
||||
const mode: TViewerShowMode ); override;
|
||||
procedure onGifStateChanged(
|
||||
const viewer: TfrmViewer;
|
||||
const states: TViewerGifStates); override;
|
||||
end;
|
||||
|
||||
function getCurrentViewerForm: TfrmViewer;
|
||||
|
|
@ -180,6 +185,42 @@ begin
|
|||
form.cm_MirrorHorz( [] );
|
||||
end;
|
||||
|
||||
procedure viewerGifMoveAction( const Sender: id );
|
||||
var
|
||||
form: TfrmViewer;
|
||||
begin
|
||||
form:= getCurrentViewerForm;
|
||||
if Assigned(form) then
|
||||
form.btnGifMoveClick( nil );
|
||||
end;
|
||||
|
||||
procedure viewerGifPrevAction( const Sender: id );
|
||||
var
|
||||
form: TfrmViewer;
|
||||
begin
|
||||
form:= getCurrentViewerForm;
|
||||
if Assigned(form) then
|
||||
form.btnPrevGifFrameClick( nil );
|
||||
end;
|
||||
|
||||
procedure viewerGifNextAction( const Sender: id );
|
||||
var
|
||||
form: TfrmViewer;
|
||||
begin
|
||||
form:= getCurrentViewerForm;
|
||||
if Assigned(form) then
|
||||
form.btnNextGifFrameClick( nil );
|
||||
end;
|
||||
|
||||
procedure viewerGifExportAction( const Sender: id );
|
||||
var
|
||||
form: TfrmViewer;
|
||||
begin
|
||||
form:= getCurrentViewerForm;
|
||||
if Assigned(form) then
|
||||
form.btnGifToBmpClick( nil );
|
||||
end;
|
||||
|
||||
procedure onViewerGetPenWidthMenu( const menu: TMenu );
|
||||
var
|
||||
i: Integer;
|
||||
|
|
@ -208,7 +249,7 @@ const
|
|||
identifier: 'ViewerForm.Prev';
|
||||
priority: NSToolbarItemVisibilityPriorityStandard;
|
||||
navigational: True;
|
||||
iconName: 'arrow.left';
|
||||
iconName: 'chevron.left';
|
||||
title: 'Prev';
|
||||
tips: 'Prev';
|
||||
bordered: True;
|
||||
|
|
@ -219,7 +260,7 @@ const
|
|||
identifier: 'ViewerForm.Next';
|
||||
priority: NSToolbarItemVisibilityPriorityStandard;
|
||||
navigational: True;
|
||||
iconName: 'arrow.right';
|
||||
iconName: 'chevron.right';
|
||||
title: 'Next';
|
||||
tips: 'Next';
|
||||
bordered: True;
|
||||
|
|
@ -319,44 +360,48 @@ const
|
|||
identifier: 'ViewerForm.GifMove';
|
||||
priority: NSToolbarItemVisibilityPriorityStandard;
|
||||
navigational: False;
|
||||
iconName: 'play.circle';
|
||||
appValidates: True;
|
||||
iconName: 'play.fill';
|
||||
title: '';
|
||||
tips: '';
|
||||
bordered: True;
|
||||
onAction: nil;
|
||||
onAction: @viewerGifMoveAction;
|
||||
);
|
||||
|
||||
viewerGifPrevItemConfig: TCocoaConfigToolBarItem = (
|
||||
identifier: 'ViewerForm.GifPrev';
|
||||
priority: NSToolbarItemVisibilityPriorityStandard;
|
||||
navigational: False;
|
||||
iconName: 'arrow.left.circle';
|
||||
appValidates: True;
|
||||
iconName: 'arrow.left';
|
||||
title: 'GifPrev';
|
||||
tips: 'GifPrev';
|
||||
bordered: True;
|
||||
onAction: nil;
|
||||
onAction: @viewerGifPrevAction;
|
||||
);
|
||||
|
||||
viewerGifNextItemConfig: TCocoaConfigToolBarItem = (
|
||||
identifier: 'ViewerForm.GifNext';
|
||||
priority: NSToolbarItemVisibilityPriorityStandard;
|
||||
navigational: False;
|
||||
iconName: 'arrow.right.circle';
|
||||
appValidates: True;
|
||||
iconName: 'arrow.right';
|
||||
title: 'GifNext';
|
||||
tips: 'GifNext';
|
||||
bordered: True;
|
||||
onAction: nil;
|
||||
onAction: @viewerGifNextAction;
|
||||
);
|
||||
|
||||
viewerGifExportItemConfig: TCocoaConfigToolBarItem = (
|
||||
identifier: 'ViewerForm.GifExport';
|
||||
priority: NSToolbarItemVisibilityPriorityStandard;
|
||||
navigational: False;
|
||||
iconName: 'arrow.down.circle';
|
||||
appValidates: True;
|
||||
iconName: 'arrow.down.circle.fill';
|
||||
title: 'GifExport';
|
||||
tips: 'GifExport';
|
||||
bordered: True;
|
||||
onAction: nil;
|
||||
onAction: @viewerGifExportAction;
|
||||
);
|
||||
|
||||
viewerHighLightItemConfig: TCocoaConfigToolBarItem = (
|
||||
|
|
@ -612,3 +657,53 @@ begin
|
|||
viewerDeattachImageToolBar( viewer )
|
||||
end;
|
||||
|
||||
procedure TCocoaViewerFormHandler.onGifStateChanged(
|
||||
const viewer: TfrmViewer;
|
||||
const states: TViewerGifStates);
|
||||
var
|
||||
moveEnabled: Boolean;
|
||||
prevEnabled: Boolean;
|
||||
nextEnabled: Boolean;
|
||||
exportEnabled: Boolean;
|
||||
|
||||
toolBar: NSToolBar;
|
||||
item: NSToolBarItem;
|
||||
|
||||
moveImageName: String;
|
||||
moveImage: NSImage;
|
||||
begin
|
||||
if vgsIsGif in states then begin
|
||||
moveEnabled:= True;
|
||||
prevEnabled:= vgsPrevFrame in states;
|
||||
nextEnabled:= vgsNextFrame in states;
|
||||
exportEnabled:= True;
|
||||
end else begin
|
||||
moveEnabled:= False;
|
||||
prevEnabled:= False;
|
||||
nextEnabled:= False;
|
||||
exportEnabled:= False;
|
||||
end;
|
||||
|
||||
viewerAttachImageToolBar( viewer );
|
||||
toolBar:= TCocoaToolBarUtils.getToolBar( viewer );
|
||||
if toolBar = nil then
|
||||
Exit;
|
||||
|
||||
item:= TCocoaToolBarUtils.findItemByIdentifier( toolBar , 'ViewerForm.GifMove');
|
||||
item.setEnabled( moveEnabled );
|
||||
if vgsPlaying in states then
|
||||
moveImageName:= 'pause.fill'
|
||||
else
|
||||
moveImageName:= 'play.fill';
|
||||
moveImage:= NSImage.imageWithSystemSymbolName_accessibilityDescription(
|
||||
StringToNSString(moveImageName), nil );
|
||||
item.setImage( moveImage );
|
||||
|
||||
item:= TCocoaToolBarUtils.findItemByIdentifier( toolBar , 'ViewerForm.GifPrev');
|
||||
item.setEnabled( prevEnabled );
|
||||
item:= TCocoaToolBarUtils.findItemByIdentifier( toolBar , 'ViewerForm.GifNext');
|
||||
item.setEnabled( nextEnabled );
|
||||
item:= TCocoaToolBarUtils.findItemByIdentifier( toolBar , 'ViewerForm.GifExport');
|
||||
item.setEnabled( exportEnabled );
|
||||
end;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue