mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-12 03:18:07 +02:00
195 lines
4.7 KiB
PHP
195 lines
4.7 KiB
PHP
{$mode ObjFPC}{$H+}
|
|
{$modeswitch objectivec2}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils,
|
|
Forms, Menus,
|
|
LazarusIDEStrConsts, SourceEditor, SynEditTypes,
|
|
CocoaAll, CocoaConfig, CocoaToolBar, Cocoa_Extra;
|
|
|
|
procedure initIDECocoaConfigForms;
|
|
|
|
implementation
|
|
|
|
type
|
|
TCocoaIDEMainFormHandler = class
|
|
private
|
|
searchingString: String;
|
|
procedure doFindNext(Data: PtrInt);
|
|
procedure doFocusSearchField( Sender: TObject );
|
|
end;
|
|
|
|
var
|
|
IDEMainFormHandler: TCocoaIDEMainFormHandler;
|
|
|
|
procedure TCocoaIDEMainFormHandler.doFindNext(Data: PtrInt);
|
|
begin
|
|
SourceEditorManager.ActiveEditor.DoFindAndReplace(
|
|
self.searchingString,
|
|
'',
|
|
[ssoFindContinue] );
|
|
self.searchingString:= '';
|
|
end;
|
|
|
|
procedure TCocoaIDEMainFormHandler.doFocusSearchField(Sender: TObject);
|
|
var
|
|
lclForm: TCustomForm;
|
|
cocoaItem: NSToolbarItem;
|
|
cocoaWindow: NSWindow;
|
|
begin
|
|
lclForm:= Screen.ActiveCustomForm;
|
|
cocoaItem:= TCocoaToolBarUtils.findItemByIdentifier( lclForm, 'MainIDE.Search' );
|
|
if NOT Assigned(cocoaItem) then
|
|
Exit;
|
|
cocoaWindow:= NSView(lclForm.Handle).window;
|
|
if NOT Assigned(cocoaWindow) then
|
|
Exit;
|
|
cocoaWindow.makeFirstResponder( TCocoaToolBarItemSearch(cocoaItem).searchField );
|
|
end;
|
|
|
|
procedure searchAction( const Sender: id );
|
|
var
|
|
searchField: NSSearchField absolute Sender;
|
|
begin
|
|
if NOT IDEMainFormHandler.searchingString.IsEmpty then
|
|
Exit;
|
|
IDEMainFormHandler.searchingString:= searchField.stringValue.UTF8String;
|
|
// on MainThread
|
|
Application.QueueAsyncCall( @IDEMainFormHandler.doFindNext, 0 );
|
|
end;
|
|
|
|
procedure jumpBackAction( const Sender: id );
|
|
begin
|
|
SourceEditorManager.JumpBackClicked( nil );
|
|
end;
|
|
|
|
procedure jumpForwardAction( const Sender: id );
|
|
begin
|
|
SourceEditorManager.JumpForwardClicked( nil );
|
|
end;
|
|
|
|
procedure onGetCommandMenu( const menu: TMenu );
|
|
function createSearchMenuItem: TMenuItem;
|
|
begin
|
|
Result:= TMenuItem.Create( menu );
|
|
Result.Caption:= cocoaMFSTBISearch;
|
|
Result.OnClick:= @IDEMainFormHandler.doFocusSearchField;
|
|
Result.ShortCut:= ShortCut( Word('F'), [ssCtrl, ssMeta] );
|
|
end;
|
|
|
|
begin
|
|
menu.Items.Add( createSearchMenuItem );
|
|
end;
|
|
|
|
|
|
const
|
|
backItemConfig: TCocoaConfigToolBarItem = (
|
|
identifier: 'MainIDE.Back';
|
|
priority: NSToolbarItemVisibilityPriorityHigh;
|
|
navigational: True;
|
|
iconName: 'arrow.left';
|
|
title: cocoaMFSTBIJumpBack;
|
|
tips: cocoaMFSTBIJumpBack;
|
|
bordered: True;
|
|
onAction: @jumpBackAction;
|
|
);
|
|
|
|
forwardItemConfig: TCocoaConfigToolBarItem = (
|
|
identifier: 'MainIDE.Forward';
|
|
priority: NSToolbarItemVisibilityPriorityHigh;
|
|
navigational: True;
|
|
iconName: 'arrow.right';
|
|
title: cocoaMFSTBIJumpForward;
|
|
tips: cocoaMFSTBIJumpForward;
|
|
bordered: True;
|
|
onAction: @jumpForwardAction;
|
|
);
|
|
|
|
searchItemConfig: TCocoaConfigToolBarItemSearch = (
|
|
identifier: 'MainIDE.Search';
|
|
priority: NSToolbarItemVisibilityPriorityLow;
|
|
iconName: '';
|
|
title: cocoaMFSTBISearch;
|
|
tips: cocoaMFSTBISearch;
|
|
bordered: True;
|
|
onAction: @searchAction;
|
|
|
|
sendWhole: False;
|
|
sendImmediately: False;
|
|
resignsWithCancel: True;
|
|
preferredWidth: 200;
|
|
);
|
|
|
|
commandItemConfig: TCocoaConfigToolBarItemMenu = (
|
|
identifier: 'MainIDE.Command';
|
|
iconName: 'ellipsis.circle';
|
|
title: cocoaMFSTBICommand;
|
|
tips: '';
|
|
bordered: True;
|
|
onAction: nil;
|
|
|
|
showsIndicator: False;
|
|
menu: nil;
|
|
onGetMenu: @onGetCommandMenu;
|
|
);
|
|
|
|
// 1. for docked IDE, integrate with MainIDEBar
|
|
// 2. for undocked IDE, integrate with MainIDEBar and SourceNotebook
|
|
mainIDEFormConfig: TCocoaConfigForm = (
|
|
name: 'MainIDE';
|
|
className: 'TSourceNotebook';
|
|
isMainForm: True;
|
|
|
|
titleBar: (
|
|
transparent: True;
|
|
separatorStyle: NSTitlebarSeparatorStyleAutomatic;
|
|
);
|
|
|
|
toolBar: (
|
|
identifier: 'MainIDE.ToolBar';
|
|
style: NSWindowToolbarStyleUnifiedCompact;
|
|
displayMode: NSToolbarDisplayModeIconOnly;
|
|
|
|
allowsUserCustomization: False;
|
|
autosavesConfiguration: False;
|
|
|
|
items: (
|
|
);
|
|
defaultItemsIdentifiers: (
|
|
'MainIDE.Back',
|
|
'MainIDE.Forward',
|
|
'MainIDE.Search',
|
|
'MainIDE.Command'
|
|
);
|
|
allowedItemsIdentifiers: (
|
|
'MainIDE.Back',
|
|
'MainIDE.Forward',
|
|
'MainIDE.Search',
|
|
'MainIDE.Command'
|
|
);
|
|
itemCreator: nil; // default item Creator
|
|
);
|
|
);
|
|
|
|
procedure initIDECocoaConfigForms;
|
|
begin
|
|
if NSAppKitVersionNumber < NSAppKitVersionNumber11_0 then
|
|
Exit;
|
|
|
|
mainIDEFormConfig.toolBar.items:= [
|
|
TCocoaToolBarUtils.toClass(backItemConfig),
|
|
TCocoaToolBarUtils.toClass(forwardItemConfig),
|
|
TCocoaToolBarUtils.toClass(commandItemConfig),
|
|
TCocoaToolBarUtils.toClass(searchItemConfig)
|
|
];
|
|
|
|
CocoaConfigForms:= [ mainIDEFormConfig ];
|
|
|
|
IDEMainFormHandler:= TCocoaIDEMainFormHandler.create;
|
|
end;
|
|
|
|
end.
|
|
|