improved codetools .p support and added GetText/SetText for carbon intf from Andrew Haines

git-svn-id: trunk@7918 -
This commit is contained in:
mattias 2005-10-05 21:55:08 +00:00
parent ea93b9cedf
commit 52d68d377f
4 changed files with 102 additions and 7 deletions

View File

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

View File

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

View File

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

View File

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