mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-29 16:49:56 +02:00
cocoa: Refactoring callback name. Added window LCL messages for window Close, CloseQuery, Activate, Deactive
git-svn-id: trunk@22848 -
This commit is contained in:
parent
510e73913d
commit
133e54ac19
@ -45,6 +45,18 @@ type
|
||||
procedure MouseMove(x,y: Integer); virtual; abstract;
|
||||
end;
|
||||
|
||||
{ TWindowCallback }
|
||||
|
||||
TWindowCallback = class(TObject)
|
||||
public
|
||||
Owner : NSWindow;
|
||||
constructor Create(AOwner: NSWindow);
|
||||
procedure Activate; virtual; abstract;
|
||||
procedure Deactivate; virtual; abstract;
|
||||
procedure CloseQuery(var CanClose: Boolean); virtual; abstract;
|
||||
procedure Close; virtual; abstract;
|
||||
end;
|
||||
|
||||
{ TCocoaWindowContentView }
|
||||
|
||||
TCocoaWindowContentView = objcclass(NSView)
|
||||
@ -88,8 +100,14 @@ type
|
||||
end;
|
||||
|
||||
TCocoaWindow = objcclass(NSWindow)
|
||||
protected
|
||||
function windowShouldClose(sender : id): LongBool; message 'windowShouldClose:';
|
||||
procedure windowWillClose(notification: NSNotification); message 'windowWillClose:';
|
||||
procedure windowDidBecomeKey(notification: NSNotification); message 'windowDidBecomeKey:';
|
||||
procedure windowDidResignKey(notification: NSNotification); message 'windowDidResignKey:';
|
||||
public
|
||||
callback : TCommonCallback;
|
||||
callback : TCommonCallback;
|
||||
wincallback : TWindowCallback;
|
||||
function acceptsFirstResponder: Boolean; override;
|
||||
procedure mouseUp(event: NSEvent); override;
|
||||
procedure mouseDown(event: NSEvent); override;
|
||||
@ -185,6 +203,30 @@ end;
|
||||
|
||||
{ TCocoaWindow }
|
||||
|
||||
function TCocoaWindow.windowShouldClose(sender: id): LongBool;
|
||||
var
|
||||
canClose : Boolean;
|
||||
begin
|
||||
canClose:=true;
|
||||
wincallback.CloseQuery(canClose);
|
||||
Result:=canClose;
|
||||
end;
|
||||
|
||||
procedure TCocoaWindow.windowWillClose(notification: NSNotification);
|
||||
begin
|
||||
wincallback.Close;
|
||||
end;
|
||||
|
||||
procedure TCocoaWindow.windowDidBecomeKey(notification: NSNotification);
|
||||
begin
|
||||
wincallback.Activate;
|
||||
end;
|
||||
|
||||
procedure TCocoaWindow.windowDidResignKey(notification: NSNotification);
|
||||
begin
|
||||
wincallback.Deactivate;
|
||||
end;
|
||||
|
||||
function TCocoaWindow.acceptsFirstResponder: Boolean;
|
||||
begin
|
||||
Result:=true;
|
||||
@ -254,5 +296,12 @@ begin
|
||||
Result:=True;
|
||||
end;
|
||||
|
||||
{ TWindowCallback }
|
||||
|
||||
constructor TWindowCallback.Create(AOwner: NSWindow);
|
||||
begin
|
||||
Owner:=AOwner;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
@ -7,15 +7,15 @@ interface
|
||||
|
||||
uses
|
||||
MacOSAll, CocoaAll,
|
||||
Controls,
|
||||
Controls, {todo: remove controls?}
|
||||
WSControls,
|
||||
CocoaPrivate, CocoaUtils, LCLMessageGlue;
|
||||
|
||||
type
|
||||
|
||||
{ TControlCallback }
|
||||
{ TLCLCommonCallback }
|
||||
|
||||
TControlCallback = class(TCommonCallback)
|
||||
TLCLCommonCallback = class(TCommonCallback)
|
||||
public
|
||||
Target : TControl;
|
||||
constructor Create(AOwner: NSObject; ATarget: TControl);
|
||||
@ -25,7 +25,6 @@ type
|
||||
procedure MouseMove(x,y: Integer); override;
|
||||
end;
|
||||
|
||||
|
||||
{ TCocoaWSWinControl }
|
||||
|
||||
TCocoaWSWinControl=class(TWSWinControl)
|
||||
@ -38,30 +37,30 @@ type
|
||||
|
||||
implementation
|
||||
|
||||
{ TControlCallback }
|
||||
{ TLCLCommonCallback }
|
||||
|
||||
constructor TControlCallback.Create(AOwner: NSObject; ATarget: TControl);
|
||||
constructor TLCLCommonCallback.Create(AOwner: NSObject; ATarget: TControl);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
Target:=ATarget;
|
||||
end;
|
||||
|
||||
procedure TControlCallback.MouseDown(x, y: Integer);
|
||||
procedure TLCLCommonCallback.MouseDown(x, y: Integer);
|
||||
begin
|
||||
LCLSendMouseDownMsg(Target,x,y,mbLeft, []);
|
||||
end;
|
||||
|
||||
procedure TControlCallback.MouseUp(x, y: Integer);
|
||||
procedure TLCLCommonCallback.MouseUp(x, y: Integer);
|
||||
begin
|
||||
LCLSendMouseUpMsg(Target,x,y,mbLeft, []);
|
||||
end;
|
||||
|
||||
procedure TControlCallback.MouseClick(clickCount: Integer);
|
||||
procedure TLCLCommonCallback.MouseClick(clickCount: Integer);
|
||||
begin
|
||||
LCLSendClickedMsg(Target);
|
||||
end;
|
||||
|
||||
procedure TControlCallback.MouseMove(x, y: Integer);
|
||||
procedure TLCLCommonCallback.MouseMove(x, y: Integer);
|
||||
begin
|
||||
LCLSendMouseMoveMsg(Target, x,y, []);
|
||||
end;
|
||||
|
@ -31,13 +31,25 @@ uses
|
||||
// Libs
|
||||
MacOSAll, CocoaAll,
|
||||
// LCL
|
||||
Controls, Forms, Graphics, LCLType, LMessages, LCLProc, Classes,
|
||||
Controls, {Forms, } Graphics, LCLType, LMessages, LCLProc, Classes,
|
||||
// Widgetset
|
||||
WSForms, WSLCLClasses, WSProc,
|
||||
WSForms, WSLCLClasses, WSProc, LCLMessageGlue,
|
||||
// LCL Cocoa
|
||||
CocoaPrivate, CocoaUtils, CocoaWSCommon;
|
||||
|
||||
type
|
||||
{ TLCLWindowCallback }
|
||||
|
||||
TLCLWindowCallback=class(TWindowCallback)
|
||||
public
|
||||
Target : TControl;
|
||||
constructor Create(AOwner: NSWindow; ATarget: TControl);
|
||||
procedure Activate; override;
|
||||
procedure Deactivate; override;
|
||||
procedure CloseQuery(var CanClose: Boolean); override;
|
||||
procedure Close; override;
|
||||
end;
|
||||
|
||||
|
||||
{ TCocoaWSScrollingWinControl }
|
||||
|
||||
@ -128,6 +140,36 @@ type
|
||||
|
||||
implementation
|
||||
|
||||
{ TLCLWindowCallback }
|
||||
|
||||
constructor TLCLWindowCallback.Create(AOwner: NSWindow; ATarget: TControl);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
Target:=ATarget;
|
||||
end;
|
||||
|
||||
procedure TLCLWindowCallback.Activate;
|
||||
begin
|
||||
LCLSendActivateMsg(Target, True, false);
|
||||
end;
|
||||
|
||||
procedure TLCLWindowCallback.Deactivate;
|
||||
begin
|
||||
LCLSendDeactivateStartMsg(Target);
|
||||
end;
|
||||
|
||||
procedure TLCLWindowCallback.CloseQuery(var CanClose: Boolean);
|
||||
begin
|
||||
// Message results : 0 - do nothing, 1 - destroy window
|
||||
CanClose:=LCLSendCloseQueryMsg(Target)>0;
|
||||
end;
|
||||
|
||||
procedure TLCLWindowCallback.Close;
|
||||
begin
|
||||
LCLSendCloseUpMsg(Target);
|
||||
end;
|
||||
|
||||
|
||||
{ TCocoaWSCustomForm }
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -151,8 +193,10 @@ begin
|
||||
Result:=0;
|
||||
Exit;
|
||||
end;
|
||||
TCocoaWindow(win).callback:=TControlCallback.Create(win, AWinControl);
|
||||
TCocoaWindow(win).callback:=TLCLCommonCallback.Create(win, AWinControl);
|
||||
TCocoaWindow(win).wincallback:=TLCLWindowCallback.Create(win, AWinControl);
|
||||
win.initWithContentRect_styleMask_backing_defer(CreateParamsToNSRect(AParams), WinMask, NSBackingStoreBuffered, False);
|
||||
win.setDelegate(win);
|
||||
win.setTitle(NSStringUtf8(AWinControl.Caption));
|
||||
|
||||
Result := TLCLIntfHandle(win);
|
||||
|
@ -273,7 +273,7 @@ function AllocButton(ATarget: TWinControl; const AParams: TCreateParams; btnBeze
|
||||
begin
|
||||
Result:=TCocoaButton.alloc;
|
||||
if Assigned(Result) then begin
|
||||
TCocoaButton(Result).callback:=TControlCallback.Create(Result, ATarget);
|
||||
TCocoaButton(Result).callback:=TLCLCommonCallback.Create(Result, ATarget);
|
||||
Result.initWithFrame(CreateParamsToNSRect(AParams));
|
||||
Result.setTitle(NSStringUTF8(AParams.Caption));
|
||||
if btnBezel<>0 then Result.setBezelStyle(btnBezel);
|
||||
@ -286,7 +286,7 @@ function AllocTextView(ATarget: TWinControl; const AParams: TCreateParams; field
|
||||
begin
|
||||
Result:=TCocoaTextView.alloc;
|
||||
if Assigned(Result) then begin
|
||||
TCocoaTextView(Result).callback:=TControlCallback.Create(Result, ATarget);
|
||||
TCocoaTextView(Result).callback:=TLCLCommonCallback.Create(Result, ATarget);
|
||||
Result.initWithFrame(CreateParamsToNSRect(AParams));
|
||||
DefaultViewSettings(Result);
|
||||
Result.setFieldEditor(fieldEditor);
|
||||
@ -297,7 +297,7 @@ function AllocTextField(ATarget: TWinControl; const AParams: TCreateParams): TCo
|
||||
begin
|
||||
Result:=TCocoaTextField(TCocoaTextField.alloc);
|
||||
if Assigned(Result) then begin
|
||||
TCocoaTextField(Result).callback:=TControlCallback.Create(Result, ATarget);
|
||||
TCocoaTextField(Result).callback:=TLCLCommonCallback.Create(Result, ATarget);
|
||||
Result.initWithFrame(CreateParamsToNSRect(AParams));
|
||||
SetNSControlValue(Result, AParams.Caption);
|
||||
DefaultViewSettings(Result);
|
||||
@ -308,7 +308,7 @@ function AllocSecureTextField(ATarget: TWinControl; const AParams: TCreateParams
|
||||
begin
|
||||
Result:=TCocoaSecureTextField(TCocoaSecureTextField.alloc);
|
||||
if Assigned(Result) then begin
|
||||
TCocoaSecureTextField(Result).callback:=TControlCallback.Create(Result, ATarget);
|
||||
TCocoaSecureTextField(Result).callback:=TLCLCommonCallback.Create(Result, ATarget);
|
||||
Result.initWithFrame(CreateParamsToNSRect(AParams));
|
||||
SetNSText(Result.currentEditor, AParams.Caption);
|
||||
DefaultViewSettings(Result);
|
||||
|
Loading…
Reference in New Issue
Block a user