mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-01 10:32:37 +02:00
improved codetools .p support and added GetText/SetText for carbon intf from Andrew Haines
git-svn-id: trunk@7918 -
This commit is contained in:
parent
ea93b9cedf
commit
52d68d377f
@ -571,7 +571,7 @@ begin
|
||||
FCursorBeyondEOL:=true;
|
||||
FIndentSize:=2;
|
||||
FJumpCentered:=true;
|
||||
FSourceExtensions:='.pp;.pas;.lpr;.lpk;.dpr;.dpk';
|
||||
FSourceExtensions:='.pp;.pas;.p;.lpr;.lpk;.dpr;.dpk';
|
||||
FVisibleEditorLines:=20;
|
||||
FWriteExceptions:=true;
|
||||
FSourceTools:=TAVLTree.Create(@CompareCodeToolMainSources);
|
||||
|
@ -643,6 +643,7 @@ begin
|
||||
Add('ABSTRACT' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('CDECL' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('EXTDECL' ,{$ifdef FPC}@{$endif}AllwaysTrue); // used often for macros
|
||||
ADD('MWPASCAL' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('DEPRECATED' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('DISPID' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('DYNAMIC' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
@ -664,6 +665,7 @@ begin
|
||||
Add('ASSEMBLER' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('CDECL' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('EXTDECL' ,{$ifdef FPC}@{$endif}AllwaysTrue); // used often for macros
|
||||
ADD('MWPASCAL' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('COMPILERPROC' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('DEPRECATED' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('EXPORT' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
@ -694,6 +696,7 @@ begin
|
||||
Add('POPSTACK' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('CDECL' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('EXTDECL' ,{$ifdef FPC}@{$endif}AllwaysTrue); // used often for macros
|
||||
ADD('MWPASCAL' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('PASCAL' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('FAR' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
Add('NEAR' ,{$ifdef FPC}@{$endif}AllwaysTrue);
|
||||
|
@ -60,6 +60,7 @@ type
|
||||
private
|
||||
protected
|
||||
public
|
||||
class function GetText(const AWinControl: TWinControl; var AText: String): Boolean; override;
|
||||
class procedure SetText(const AWinControl: TWinControl; const AText: String); override;
|
||||
class procedure DestroyHandle(const AWinControl: TWinControl); override;
|
||||
end;
|
||||
@ -93,6 +94,34 @@ implementation
|
||||
|
||||
{ TCarbonWSWinControl }
|
||||
|
||||
function TCarbonWSWinControl.GetText(const AWinControl: TWinControl;
|
||||
var AText: String): Boolean;
|
||||
var
|
||||
CFString: CFStringRef;
|
||||
Str: Pointer;
|
||||
StrSize: CFIndex; //Integer;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(AWincontrol, 'GetText')
|
||||
then Exit;
|
||||
|
||||
Result := CopyControlTitleAsCFString(ControlRef(AWinControl.Handle), CFString) = NoErr;
|
||||
if Result = False then Exit;
|
||||
|
||||
// Try the quick way first
|
||||
Str := CFStringGetCStringPtr(CFString, DEFAULT_CFSTRING_ENCODING);
|
||||
// if that doesn't work this will
|
||||
if Str = nil then begin
|
||||
StrSize := CFStringGetLength(CFString)*SizeOf(WideChar);
|
||||
GetMem(Str,(StrSize));
|
||||
Result := CFStringGetCString(CFString, Str, StrSize, DEFAULT_CFSTRING_ENCODING);
|
||||
end;
|
||||
|
||||
CFRelease(Pointer(CFString));
|
||||
if Result = False then Exit;
|
||||
AText := PChar(Str);
|
||||
|
||||
end;
|
||||
|
||||
procedure TCarbonWSWinControl.SetText(const AWinControl: TWinControl; const AText: String);
|
||||
var
|
||||
CFString: CFStringRef;
|
||||
|
@ -106,6 +106,7 @@ type
|
||||
|
||||
class function GetSelStart(const ACustomEdit: TCustomEdit): integer; override;
|
||||
class function GetSelLength(const ACustomEdit: TCustomEdit): integer; override;
|
||||
class function GetText(const AWinControl: TWinControl; var AText: String): Boolean; override;
|
||||
|
||||
class procedure SetCharCase(const ACustomEdit: TCustomEdit; NewCase: TEditCharCase); override;
|
||||
class procedure SetEchoMode(const ACustomEdit: TCustomEdit; NewMode: TEchoMode); override;
|
||||
@ -114,7 +115,8 @@ type
|
||||
class procedure SetReadOnly(const ACustomEdit: TCustomEdit; NewReadOnly: boolean); override;
|
||||
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
|
||||
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
|
||||
|
||||
class procedure SetText(const AWinControl: TWinControl; const AText: String); override;
|
||||
|
||||
class procedure GetPreferredSize(const AWinControl: TWinControl;
|
||||
var PreferredWidth, PreferredHeight: integer); override;
|
||||
end;
|
||||
@ -225,7 +227,8 @@ var
|
||||
CFString: CFStringRef;
|
||||
R: Rect;
|
||||
Info: PWidgetInfo;
|
||||
IsResize: PBoolean;
|
||||
IsPassword: PBoolean;
|
||||
SingleLine: Boolean = True;
|
||||
begin
|
||||
Result := 0;
|
||||
Edit := AWinControl as TCustomEdit;
|
||||
@ -236,16 +239,20 @@ begin
|
||||
R.Bottom := AParams.Y + AParams.Height;
|
||||
|
||||
CFString := CFStringCreateWithCString(nil, Pointer(AParams.Caption), DEFAULT_CFSTRING_ENCODING);
|
||||
if CreateEditTextControl(WindowRef(AParams.WndParent), R, CFString, (Edit.PasswordChar <> #0),true, nil, Control) = noErr
|
||||
if CreateEditUniCodeTextControl(WindowRef(AParams.WndParent), R, CFString, (Edit.PasswordChar <> #0), nil, Control) = noErr
|
||||
then Result := TLCLIntfHandle(Control);
|
||||
CFRelease(Pointer(CFString));
|
||||
if Result = 0 then Exit;
|
||||
|
||||
New(IsResize);
|
||||
IsResize^ := Edit.PasswordChar <> #0;
|
||||
New(IsPassword);
|
||||
IsPassword^ := Edit.PasswordChar <> #0;
|
||||
|
||||
SetControlData(Control, kControlEntireControl, kControlEditTextSingleLineTag,
|
||||
SizeOf(Boolean), @SingleLine);
|
||||
|
||||
|
||||
Info := CreateWidgetInfo(Control, AWinControl);
|
||||
Info^.UserData := IsResize;
|
||||
Info^.UserData := IsPassword;
|
||||
Info^.DataOwner := True;
|
||||
TCarbonPrivateHandleClass(WSPrivate).RegisterEvents(Info);
|
||||
end;
|
||||
@ -286,6 +293,40 @@ begin
|
||||
Result := SelData.SelEnd - SelData.SelStart;
|
||||
end;
|
||||
|
||||
function TCarbonWSCustomEdit.GetText(const AWinControl: TWinControl;
|
||||
var AText: String): Boolean;
|
||||
var
|
||||
Control: ControlRef;
|
||||
TextType: ResType;
|
||||
CFString: CFStringRef;
|
||||
RecSize: FPCMacOSAll.Size;
|
||||
Str: Pointer;
|
||||
StrSize: CFIndex; //Integer;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(AWinControl, 'GetText')
|
||||
then Exit;
|
||||
|
||||
Result := False;
|
||||
Control := ControlRef(AWinControl.Handle);
|
||||
if PBoolean(GetWidgetInfo(Pointer(AWincontrol.Handle))^.UserData)^ = True then// IsPassword
|
||||
TextType := kControlEditTextPasswordCFStringTag
|
||||
else
|
||||
TextType := kControlEditTextCFStringTag;
|
||||
|
||||
if GetControlData(Control, kControlEntireControl, TextType,
|
||||
SizeOf(CFStringRef), @CFString, @RecSize) <> noErr
|
||||
then Exit;
|
||||
|
||||
StrSize := CFStringGetLength(CFString)*SizeOf(WideChar);
|
||||
GetMem(Str,(StrSize));
|
||||
Result := CFStringGetCString(CFString, Str, StrSize, DEFAULT_CFSTRING_ENCODING);
|
||||
|
||||
CFRelease(Pointer(CFString));
|
||||
|
||||
if Result = False then Exit;
|
||||
AText := PChar(Str);
|
||||
end;
|
||||
|
||||
procedure TCarbonWSCustomEdit.SetCharCase(const ACustomEdit: TCustomEdit; NewCase: TEditCharCase);
|
||||
begin
|
||||
// TODO
|
||||
@ -373,6 +414,28 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TCarbonWSCustomEdit.SetText(const AWinControl: TWinControl;
|
||||
const AText: String);
|
||||
var
|
||||
Control: ControlRef;
|
||||
TextType: ResType;
|
||||
CFString: CFStringRef;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(AWinControl, 'SetText')
|
||||
then Exit;
|
||||
|
||||
Control := ControlRef(AWinControl.Handle);
|
||||
if PBoolean(GetWidgetInfo(Pointer(AWincontrol.Handle))^.UserData)^ = True then// IsPassword
|
||||
TextType := kControlEditTextPasswordCFStringTag
|
||||
else
|
||||
TextType := kControlEditTextCFStringTag;
|
||||
|
||||
CFString := CFStringCreateWithCString(nil, Pointer(AText), DEFAULT_CFSTRING_ENCODING);
|
||||
SetControlData(Control, kControlEntireControl, TextType, SizeOf(CFStringRef), @CFString);
|
||||
|
||||
CFRelease(Pointer(CFString));
|
||||
end;
|
||||
|
||||
procedure TCarbonWSCustomEdit.GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer);
|
||||
begin
|
||||
//TODO
|
||||
|
Loading…
Reference in New Issue
Block a user