richmemo: load rtf (tobe improved), paragraph set alignment for cocoa
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3837 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
d048bf3343
commit
e46d06509e
@ -7,11 +7,11 @@ interface
|
|||||||
{$modeswitch objectivec2}
|
{$modeswitch objectivec2}
|
||||||
|
|
||||||
uses
|
uses
|
||||||
CocoaAll, Types,
|
CocoaAll, Types, Classes, SysUtils,
|
||||||
LCLType, Controls, StdCtrls,
|
LCLType, Controls, StdCtrls,
|
||||||
CocoaPrivate, CocoaUtils,
|
CocoaPrivate, CocoaUtils,
|
||||||
CocoaWSCommon, CocoaWSStdCtrls,
|
CocoaWSCommon, CocoaWSStdCtrls,
|
||||||
WSRichMemo;
|
WSRichMemo, RichMemo;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -22,8 +22,11 @@ type
|
|||||||
// assumption is made that LCL creates NSTextView
|
// assumption is made that LCL creates NSTextView
|
||||||
class procedure SetParaAlignment(const AWinControl: TWinControl; TextStart, TextLen: Integer;
|
class procedure SetParaAlignment(const AWinControl: TWinControl; TextStart, TextLen: Integer;
|
||||||
const AAlign: TIntParaAlignment); override;
|
const AAlign: TIntParaAlignment); override;
|
||||||
|
class function GetParaAlignment(const AWinControl: TWinControl; TextStart: Integer;
|
||||||
|
var AAlign: TIntParaAlignment): Boolean; override;
|
||||||
class procedure InDelText(const AWinControl: TWinControl;
|
class procedure InDelText(const AWinControl: TWinControl;
|
||||||
const TextUTF8: String; DstStart, DstLen: Integer); override;
|
const TextUTF8: String; DstStart, DstLen: Integer); override;
|
||||||
|
class function LoadRichText(const AWinControl: TWinControl; Source: TStream): Boolean; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -55,10 +58,53 @@ begin
|
|||||||
|
|
||||||
rng.location:=TextStart;
|
rng.location:=TextStart;
|
||||||
rng.length:=TextLen;
|
rng.length:=TextLen;
|
||||||
|
if TextStart+TextLen>txt.textStorage.string_.length then
|
||||||
|
rng.length:=txt.textStorage.string_.length-TextStart;
|
||||||
|
|
||||||
rng:=txt.textStorage.string_.paragraphRangeForRange(rng);
|
rng:=txt.textStorage.string_.paragraphRangeForRange(rng);
|
||||||
txt.setAlignment_range(TxtAlign[AAlign], rng);
|
txt.setAlignment_range(TxtAlign[AAlign], rng);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class function TCocoaWSCustomRichMemo.GetParaAlignment(
|
||||||
|
const AWinControl: TWinControl; TextStart: Integer;
|
||||||
|
var AAlign: TIntParaAlignment): Boolean;
|
||||||
|
var
|
||||||
|
txt : TCocoaTextView;
|
||||||
|
rng : NSRange;
|
||||||
|
cur : NSRange;
|
||||||
|
al : NSTextAlignment;
|
||||||
|
const
|
||||||
|
TxtAlign : array [TIntParaAlignment] of integer = (
|
||||||
|
NSLeftTextAlignment, NSRightTextAlignment, NSCenterTextAlignment, NSJustifiedTextAlignment
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
txt:=MemoTextView(AWinControl);
|
||||||
|
if not Assigned(txt) then begin
|
||||||
|
Result:=false;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
cur:=txt.selectedRange;
|
||||||
|
rng.location:=TextStart;
|
||||||
|
rng.length:=1;
|
||||||
|
if TextStart+1>txt.textStorage.string_.length then
|
||||||
|
rng.length:=txt.textStorage.string_.length-TextStart;
|
||||||
|
|
||||||
|
|
||||||
|
rng:=txt.textStorage.string_.paragraphRangeForRange(rng);
|
||||||
|
txt.setSelectedRange(rng);
|
||||||
|
al:=txt.alignment;
|
||||||
|
case al of
|
||||||
|
NSRightTextAlignment: AAlign:=paRight;
|
||||||
|
NSCenterTextAlignment: AAlign:=paCenter;
|
||||||
|
NSJustifiedTextAlignment: AAlign:=paJustify;
|
||||||
|
else
|
||||||
|
AAlign:=paLeft;
|
||||||
|
end;
|
||||||
|
txt.setSelectedRange(cur);
|
||||||
|
Result:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
class procedure TCocoaWSCustomRichMemo.InDelText(
|
class procedure TCocoaWSCustomRichMemo.InDelText(
|
||||||
const AWinControl: TWinControl; const TextUTF8: String; DstStart,
|
const AWinControl: TWinControl; const TextUTF8: String; DstStart,
|
||||||
DstLen: Integer);
|
DstLen: Integer);
|
||||||
@ -68,9 +114,31 @@ var
|
|||||||
begin
|
begin
|
||||||
txt:=MemoTextView(AWinControl);
|
txt:=MemoTextView(AWinControl);
|
||||||
if not Assigned(txt) then Exit;
|
if not Assigned(txt) then Exit;
|
||||||
|
|
||||||
str := NSStringUtf8(TextUtf8);
|
str := NSStringUtf8(TextUtf8);
|
||||||
txt.textStorage.replaceCharactersInRange_withString(NSMakeRange(DstStart, DstLen), str);
|
txt.textStorage.replaceCharactersInRange_withString(NSMakeRange(DstStart, DstLen), str);
|
||||||
str.release;
|
str.release;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class function TCocoaWSCustomRichMemo.LoadRichText(
|
||||||
|
const AWinControl: TWinControl; Source: TStream): Boolean;
|
||||||
|
var
|
||||||
|
data: NSMutableData;
|
||||||
|
rng : NSRange;
|
||||||
|
txt : TCocoaTextView;
|
||||||
|
begin
|
||||||
|
//todo: avoid copying data.
|
||||||
|
if not Assigned(Source) or not Assigned(AWinControl) or (AWinControl.Handle=0) then Exit;
|
||||||
|
|
||||||
|
txt:=MemoTextView(AWinControl);
|
||||||
|
if Source.size>0 then begin
|
||||||
|
data:=NSMutableData(NSMutableData.alloc).initWithLength(Source.size);
|
||||||
|
Source.Read(data.mutableBytes^, Source.Size);
|
||||||
|
rng.length:=txt.textStorage.string_.length;
|
||||||
|
rng.location:=0;
|
||||||
|
txt.replaceCharactersInRange_withRTF(rng, data);
|
||||||
|
data.release;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
Loading…
Reference in New Issue
Block a user