cocoa: Refactoring callback name. Added window LCL messages for window Close, CloseQuery, Activate, Deactive

git-svn-id: trunk@22848 -
This commit is contained in:
dmitry 2009-11-28 12:26:04 +00:00
parent 510e73913d
commit 133e54ac19
4 changed files with 110 additions and 18 deletions

View File

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

View File

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

View File

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

View File

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