SynEdit: remove circular dependency between SynEdit and LazSynIMM

git-svn-id: trunk@64475 -
This commit is contained in:
ondrej 2021-02-05 12:40:36 +00:00
parent b6b32fe910
commit 33d906c98b
6 changed files with 195 additions and 120 deletions

View File

@ -115,7 +115,6 @@ type
end;
implementation
uses SynEdit;
{ LazSynIme }
@ -192,7 +191,7 @@ end;
procedure LazSynImeSimple.DoStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
begin
UpdateImeWinXY(TCustomSynEdit(FriendEdit).CaretXPix, TCustomSynEdit(FriendEdit).CaretYPix);
UpdateImeWinXY(FriendEdit.CaretXPix, FriendEdit.CaretYPix);
if Changes * [scCaretX, scCaretY] <> [] then
StopIme(False);
end;
@ -206,7 +205,7 @@ begin
imc := ImmGetContext(FriendEdit.Handle);
if (imc <> 0) then begin
UpdateImeWinFont(imc);
UpdateImeWinXY(TCustomSynEdit(FriendEdit).CaretXPix, TCustomSynEdit(FriendEdit).CaretYPix, imc);
UpdateImeWinXY(FriendEdit.CaretXPix, FriendEdit.CaretYPix, imc);
ImmReleaseContext(FriendEdit.Handle, imc);
end;
end;
@ -281,18 +280,18 @@ begin
FImeBlockSelection := TSynEditSelection.Create(ViewedTextBuffer, False);
FImeBlockSelection.InvalidateLinesMethod := @InvalidateLines;
TCustomSynEdit(FriendEdit).RegisterStatusChangedHandler(@DoStatusChanged, [scCaretX, scCaretY, scLeftChar, scTopLine, scModified]);
TCustomSynEdit(FriendEdit).RegisterCommandHandler(@DoOnCommand, nil, [hcfInit]);
TCustomSynEdit(FriendEdit).RegisterBeforeMouseDownHandler(@DoOnMouse);
FriendEdit.RegisterStatusChangedHandler(@DoStatusChanged, [scCaretX, scCaretY, scLeftChar, scTopLine, scModified]);
FriendEdit.RegisterCommandHandler(@DoOnCommand, nil, [hcfInit]);
FriendEdit.RegisterBeforeMouseDownHandler(@DoOnMouse);
end;
destructor LazSynImeSimple.Destroy;
begin
TextDrawer := nil;
FreeAndNil(FImeBlockSelection);
TCustomSynEdit(FriendEdit).UnregisterBeforeMouseDownHandler(@DoOnMouse);
TCustomSynEdit(FriendEdit).UnregisterCommandHandler(@DoOnCommand);
TCustomSynEdit(FriendEdit).UnRegisterStatusChangedHandler(@DoStatusChanged);
FriendEdit.UnregisterBeforeMouseDownHandler(@DoOnMouse);
FriendEdit.UnregisterCommandHandler(@DoOnCommand);
FriendEdit.UnRegisterStatusChangedHandler(@DoStatusChanged);
inherited Destroy;
end;
@ -328,7 +327,7 @@ begin
imc := ImmGetContext(FriendEdit.Handle);
if (imc <> 0) then begin
UpdateImeWinFont(imc);
UpdateImeWinXY(TCustomSynEdit(FriendEdit).CaretXPix, TCustomSynEdit(FriendEdit).CaretYPix, imc, True);
UpdateImeWinXY(FriendEdit.CaretXPix, FriendEdit.CaretYPix, imc, True);
ImmReleaseContext(FriendEdit.Handle, imc);
end;
end;
@ -354,8 +353,8 @@ begin
if ImeCount > 0 then begin
GetMem(p, ImeCount + 2);
try
TCustomSynEdit(FriendEdit).BeginUpdate;
if SelectionObj.SelAvail and (not SelectionObj.Persistent) and (eoOverwriteBlock in TCustomSynEdit(FriendEdit).Options2) then
FriendEdit.BeginUpdate;
if SelectionObj.SelAvail and (not SelectionObj.Persistent) and (eoOverwriteBlock in FriendEdit.Options2) then
SelectionObj.SelText := '';
ImmGetCompositionStringW(imc, GCS_RESULTSTR, p, ImeCount + 2);
p[ImeCount] := #0;
@ -367,7 +366,7 @@ begin
Msg.Result := 1;
finally
FreeMem(p, ImeCount + 2);
TCustomSynEdit(FriendEdit).EndUpdate;
FriendEdit.EndUpdate;
end;
end;
end;
@ -387,7 +386,7 @@ begin
imc := ImmGetContext(FriendEdit.Handle);
if (imc <> 0) then begin
UpdateImeWinFont(imc);
UpdateImeWinXY(TCustomSynEdit(FriendEdit).CaretXPix, TCustomSynEdit(FriendEdit).CaretYPix, imc, True);
UpdateImeWinXY(FriendEdit.CaretXPix, FriendEdit.CaretYPix, imc, True);
ImmReleaseContext(FriendEdit.Handle, imc);
end;
FInCompose := True;
@ -434,13 +433,13 @@ begin
if (FLeftPosForTarget < 1) or not FAdjustLeftCharForTargets then
exit;
r := FRightPosForTarget - TCustomSynEdit(FriendEdit).CharsInWindow;
r := FRightPosForTarget - FriendEdit.CharsInWindow;
if (TCustomSynEdit(FriendEdit).LeftChar < r) then
TCustomSynEdit(FriendEdit).LeftChar := r;
if (FriendEdit.LeftChar < r) then
FriendEdit.LeftChar := r;
if (TCustomSynEdit(FriendEdit).LeftChar > FLeftPosForTarget) then
TCustomSynEdit(FriendEdit).LeftChar := FLeftPosForTarget;
if (FriendEdit.LeftChar > FLeftPosForTarget) then
FriendEdit.LeftChar := FLeftPosForTarget;
end;
@ -515,19 +514,19 @@ begin
FImeMarkupSelection2.MarkupInfo.FrameStyle := slsSolid;
FImeMarkupSelection2.MarkupInfo.FrameEdges := sfeBottom;
FImeMarkupSelection3.MarkupInfo.Assign(TCustomSynEdit(FriendEdit).SelectedColor);
FImeMarkupSelection3.MarkupInfo.Assign(FriendEdit.SelectedColor);
TCustomSynEdit(FriendEdit).RegisterStatusChangedHandler(@DoStatusChanged, [scCaretX, scCaretY, scModified]);
TCustomSynEdit(FriendEdit).RegisterCommandHandler(@DoOnCommand, nil, [hcfInit]);
TCustomSynEdit(FriendEdit).RegisterBeforeMouseDownHandler(@DoOnMouse);
FriendEdit.RegisterStatusChangedHandler(@DoStatusChanged, [scCaretX, scCaretY, scModified]);
FriendEdit.RegisterCommandHandler(@DoOnCommand, nil, [hcfInit]);
FriendEdit.RegisterBeforeMouseDownHandler(@DoOnMouse);
end;
destructor LazSynImeFull.Destroy;
begin
TCustomSynEdit(FriendEdit).UnregisterBeforeMouseDownHandler(@DoOnMouse);
TCustomSynEdit(FriendEdit).UnregisterCommandHandler(@DoOnCommand);
TCustomSynEdit(FriendEdit).UnRegisterStatusChangedHandler(@DoStatusChanged);
FriendEdit.UnregisterBeforeMouseDownHandler(@DoOnMouse);
FriendEdit.UnregisterCommandHandler(@DoOnCommand);
FriendEdit.UnRegisterStatusChangedHandler(@DoStatusChanged);
TSynEditMarkupManager(MarkupMgr).RemoveMarkUp(FImeMarkupSelection);
TSynEditMarkupManager(MarkupMgr).RemoveMarkUp(FImeMarkupSelection2);
TSynEditMarkupManager(MarkupMgr).RemoveMarkUp(FImeMarkupSelection3);
@ -580,13 +579,13 @@ begin
dec(i);
end;
p1.x := x + i + 1;
p1 := FriendEdit.ClientToScreen(TCustomSynEdit(FriendEdit)
.ScreenXYToTextXY(TSynEdit(FriendEdit).TextXYToScreenXY(p1)));
p1 := FriendEdit.ClientToScreen(FriendEdit
.ScreenXYToTextXY(FriendEdit.TextXYToScreenXY(p1)));
// RowColumnToPixels(ViewedTextBuffer.LogicalToPhysicalPos(p1)));
cp^.pt.y := p1.y;
cp^.pt.x := p1.x;
cp^.cLineHeight := TCustomSynEdit(FriendEdit).LineHeight;
cp^.cLineHeight := FriendEdit.LineHeight;
cp^.rcDocument.TopLeft := FriendEdit.ClientToScreen(FriendEdit.ClientRect.TopLeft);
cp^.rcDocument.BottomRight := FriendEdit.ClientToScreen(FriendEdit.ClientRect.BottomRight);
{$IFDEF WinIMEDebug}
@ -697,13 +696,13 @@ begin
CaretObj.LineBytePos := FImeBlockSelection.StartLineBytePos;
grp := ViewedTextBuffer.UndoList.GroupUndo;
ViewedTextBuffer.UndoList.GroupUndo := True;
TCustomSynEdit(FriendEdit).BeginUpdate;
FriendEdit.BeginUpdate;
ViewedTextBuffer.UndoList.CurrentReason := ecImeStr;
{$IFDEF WinIMEFullDeferOverwrite}
if FHasPersistLock then
SelectionObj.DecPersistentLock;
FHasPersistLock := False;
if SelectionObj.SelAvail and (not SelectionObj.Persistent) and (eoOverwriteBlock in TCustomSynEdit(FriendEdit).Options2)
if SelectionObj.SelAvail and (not SelectionObj.Persistent) and (eoOverwriteBlock in FriendEdit.Options2)
then begin
SelectionObj.SelText := '';
FImeBlockSelection.StartLineBytePos := SelectionObj.StartLineBytePos;
@ -721,7 +720,7 @@ begin
{$ENDIF}
Msg.Result := 1;
finally
TCustomSynEdit(FriendEdit).EndUpdate;
FriendEdit.EndUpdate;
ViewedTextBuffer.UndoList.GroupUndo := grp;
FreeMem(p, ImeCount + 2);
end;
@ -890,16 +889,16 @@ procedure LazSynImeFull.WMImeStartComposition(var Msg: TMessage);
begin
//debugln(['TCustomSynEdit.WMImeStartComposition ']);
{$IFnDEF WinIMEFullDeferOverwrite}
if SelectionObj.SelAvail and (not SelectionObj.Persistent) and (eoOverwriteBlock in TCustomSynEdit(FriendEdit).Options2)
if SelectionObj.SelAvail and (not SelectionObj.Persistent) and (eoOverwriteBlock in FriendEdit.Options2)
then begin
{$IFnDEF WinIMEFullOverwriteSkipUndo}
ViewedTextBuffer.UndoList.ForceGroupEnd;
FUndoStamp1 := ViewedTextBuffer.UndoList.PeekItem;
{$ENDIF}
TCustomSynEdit(FriendEdit).BeginUpdate;
FriendEdit.BeginUpdate;
ViewedTextBuffer.UndoList.CurrentReason := ecImeStr;
SelectionObj.SelText := '';
TCustomSynEdit(FriendEdit).EndUpdate;
FriendEdit.EndUpdate;
{$IFnDEF WinIMEFullOverwriteSkipUndo}
FUndoStamp2 := ViewedTextBuffer.UndoList.PeekItem;
FNeedUndoOnCancel := FUndoStamp1 <> FUndoStamp2;
@ -915,7 +914,7 @@ begin
FHasPersistLock := True;
{$ENDIF}
FImeMarkupSelection3.MarkupInfo.Assign(TCustomSynEdit(FriendEdit).SelectedColor);
FImeMarkupSelection3.MarkupInfo.Assign(FriendEdit.SelectedColor);
FImeBlockSelection.StartLineBytePos := CaretObj.LineBytePos;
FInCompose := True;
Msg.Result := 1;
@ -930,7 +929,7 @@ begin
{$IFnDEF WinIMEFullDeferOverwrite}
{$IFnDEF WinIMEFullOverwriteSkipUndo}
if FNeedUndoOnCancel and (ViewedTextBuffer.UndoList.PeekItem = FUndoStamp2) then
TCustomSynEdit(FriendEdit).Undo;
FriendEdit.Undo;
{$ENDIF}
{$ENDIF}
{$IFDEF WinIMEFullDeferOverwrite}

View File

@ -152,25 +152,6 @@ type
TSynDropFilesEvent = procedure(Sender: TObject; X, Y: integer; AFiles: TStrings)
of object;
THookedCommandEvent = procedure(Sender: TObject; AfterProcessing: boolean;
var Handled: boolean; var Command: TSynEditorCommand;
var AChar: TUTF8Char;
Data: pointer; HandlerData: pointer) of object;
THookedCommandFlag = (
hcfInit, // run before On[User]CommandProcess (outside UndoBlock / should not do execution)
hcfPreExec, // Run before CommandProcessor (unless handled by On[User]CommandProcess)
hcfPostExec, // Run after CommandProcessor (unless handled by On[User]CommandProcess)
hcfFinish // Run at the very end
);
THookedCommandFlags = set of THookedCommandFlag;
THookedKeyTranslationEvent = procedure(Sender: TObject;
Code: word; SState: TShiftState; var Data: pointer; var IsStartOfCombo: boolean;
var Handled: boolean; var Command: TSynEditorCommand;
FinishComboOnly: Boolean; var ComboKeyStrokes: TSynEditKeyStrokes) of object;
TSynUndoRedoItemEvent = function (Caller: TObject; Item: TSynEditUndoItem): Boolean of object;
TPaintEvent = procedure(Sender: TObject; ACanvas: TCanvas) of object;
TChangeUpdatingEvent = procedure(ASender: TObject; AnUpdating: Boolean) of object;
@ -609,15 +590,10 @@ type
procedure UpdateScreenCaret;
procedure AquirePrimarySelection;
function GetChangeStamp: int64;
function GetCharsInWindow: Integer;
function GetCharWidth: integer;
function GetDefSelectionMode: TSynSelectionMode;
function GetFoldedCodeLineColor: TSynSelectedColor;
function GetFoldState: String;
function GetHiddenCodeLineColor: TSynSelectedColor;
function GetLeftChar: Integer;
function GetLineHeight: integer;
function GetLinesInWindow: Integer;
function GetModified: Boolean;
function GetMouseActions: TSynEditMouseActions;
function GetMouseSelActions: TSynEditMouseActions;
@ -627,7 +603,6 @@ type
function GetRightEdge: Integer;
function GetRightEdgeColor: TColor;
function GetTextBetweenPoints(aStartPoint, aEndPoint: TPoint): String;
function GetTopLine: Integer;
procedure SetBlockTabIndent(AValue: integer);
procedure SetBracketMatchColor(AValue: TSynSelectedColor);
procedure SetTextCursor(AValue: TCursor);
@ -663,8 +638,6 @@ type
function GetBlockEnd: TPoint;
function GetBracketHighlightStyle: TSynEditBracketHighlightStyle;
function GetCanPaste: Boolean;
function GetCanRedo: Boolean;
function GetCanUndo: Boolean;
function GetCaretXY: TPoint;
function GetFoldedCodeColor: TSynSelectedColor;
function GetMarkup(Index: integer): TSynEditMarkup;
@ -676,13 +649,11 @@ type
function GetIncrementColor : TSynSelectedColor;
function GetLineHighlightColor: TSynSelectedColor;
function GetOnGutterClick : TGutterClickEvent;
function GetSelectedColor : TSynSelectedColor;
function GetBracketMatchColor : TSynSelectedColor;
function GetMouseLinkColor : TSynSelectedColor;
function GetTrimSpaceType: TSynEditStringTrimmingType;
procedure SetBracketHighlightStyle(const AValue: TSynEditBracketHighlightStyle);
procedure SetOnGutterClick(const AValue : TGutterClickEvent);
procedure SetSelectedColor(const AValue : TSynSelectedColor);
procedure SetSpecialLineColors(const AValue : TSpecialLineColorsEvent);
procedure SetSpecialLineMarkup(const AValue : TSpecialLineMarkupEvent);
function GetHookedCommandHandlersCount: integer;
@ -729,7 +700,6 @@ type
procedure SetLastMouseCaret(const AValue: TPoint);
function CurrentMaxLeftChar: Integer;
function CurrentMaxLineLen: Integer;
procedure SetLeftChar(Value: Integer);
procedure SetLineText(Value: string);
procedure SetMaxLeftChar(Value: integer);
procedure SetMaxUndo(const Value: Integer);
@ -747,7 +717,6 @@ type
procedure SetTabWidth(Value: integer);
procedure SynSetText(const Value: string);
function CurrentMaxTopView: Integer;
procedure SetTopLine(Value: Integer);
procedure ScrollAfterTopLineChanged;
procedure SetWantTabs(const Value: boolean);
procedure SetWordBlock(Value: TPoint);
@ -835,6 +804,15 @@ type
function CheckDragDropAccecpt(ANewCaret: TPoint; ASource: TObject; out ADropMove: boolean): boolean;
protected
function GetCharsInWindow: Integer; override;
function GetCharWidth: integer; override;
function GetLeftChar: Integer; override;
function GetLineHeight: integer; override;
function GetLinesInWindow: Integer; override;
function GetTopLine: Integer; override;
procedure SetLeftChar(Value: Integer); override;
procedure SetTopLine(Value: Integer); override;
procedure SetHighlighter(const Value: TSynCustomHighlighter); virtual;
procedure UpdateShowing; override;
procedure SetColor(Value: TColor); override;
@ -851,7 +829,10 @@ type
function GetTextBuffer: TSynEditStrings; override;
procedure SetLines(Value: TStrings); override;
function GetMarkupMgr: TObject; override;
function GetCanRedo: Boolean; override;
function GetCanUndo: Boolean; override;
function GetCaretObj: TSynEditCaret; override;
function GetSelectedColor : TSynSelectedColor; override;
procedure FontChanged(Sender: TObject); override;
procedure HighlighterAttrChanged(Sender: TObject);
Procedure LineCountChanged(Sender: TSynEditStrings; AIndex, ACount : Integer);
@ -875,6 +856,7 @@ type
procedure SetName(const Value: TComponentName); override;
procedure SetOptions(Value: TSynEditorOptions); override;
procedure SetOptions2(Value: TSynEditorOptions2); override;
procedure SetSelectedColor(const AValue : TSynSelectedColor); override;
procedure SetSelTextPrimitive(PasteMode: TSynSelectionMode; Value: PChar;
AddToUndoList: Boolean = false);
procedure UndoItem(Item: TSynEditUndoItem);
@ -906,15 +888,15 @@ type
destructor Destroy; override;
procedure AfterLoadFromFile;
procedure BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF};
procedure BeginUpdate(WithUndoBlock: Boolean = True);
procedure EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF};
procedure EndUpdate;
procedure BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; override;
procedure BeginUpdate(WithUndoBlock: Boolean = True); override;
procedure EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; override;
procedure EndUpdate; override;
public
// Caret
function CaretXPix: Integer;
function CaretYPix: Integer;
function CaretXPix: Integer; override;
function CaretYPix: Integer; override;
procedure EnsureCursorPosVisible;
procedure MoveCaretToVisibleArea;
procedure MoveCaretIgnoreEOL(const NewCaret: TPoint);
@ -975,11 +957,9 @@ type
property Marks: TSynEditMarkList read fMarkList;
// Undo/Redo
procedure ClearUndo;
procedure Redo;
procedure Undo;
property CanRedo: boolean read GetCanRedo;
property CanUndo: boolean read GetCanUndo;
procedure ClearUndo; override;
procedure Redo; override;
procedure Undo; override;
// Clipboard
procedure CopyToClipboard;
@ -1049,47 +1029,47 @@ type
First visible (scrolled in) screen line is 1
First column is 1 => column does not take scrolling into account
*)
function ScreenXYToTextXY(AScreenXY: TPhysPoint; LimitToLines: Boolean = True): TPhysPoint;
function TextXYToScreenXY(APhysTextXY: TPhysPoint): TPhysPoint;
function ScreenXYToTextXY(AScreenXY: TPhysPoint; LimitToLines: Boolean = True): TPhysPoint; override;
function TextXYToScreenXY(APhysTextXY: TPhysPoint): TPhysPoint; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure RegisterCommandHandler(AHandlerProc: THookedCommandEvent;
AHandlerData: pointer; AFlags: THookedCommandFlags = [hcfPreExec, hcfPostExec]);
procedure UnregisterCommandHandler(AHandlerProc: THookedCommandEvent);
AHandlerData: pointer; AFlags: THookedCommandFlags = [hcfPreExec, hcfPostExec]); override;
procedure UnregisterCommandHandler(AHandlerProc: THookedCommandEvent); override;
procedure RegisterMouseActionSearchHandler(AHandlerProc: TSynEditMouseActionSearchProc);
procedure UnregisterMouseActionSearchHandler(AHandlerProc: TSynEditMouseActionSearchProc);
procedure RegisterMouseActionExecHandler(AHandlerProc: TSynEditMouseActionExecProc);
procedure UnregisterMouseActionExecHandler(AHandlerProc: TSynEditMouseActionExecProc);
procedure RegisterMouseActionSearchHandler(AHandlerProc: TSynEditMouseActionSearchProc); override;
procedure UnregisterMouseActionSearchHandler(AHandlerProc: TSynEditMouseActionSearchProc); override;
procedure RegisterMouseActionExecHandler(AHandlerProc: TSynEditMouseActionExecProc); override;
procedure UnregisterMouseActionExecHandler(AHandlerProc: TSynEditMouseActionExecProc); override;
procedure RegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent);
procedure UnRegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent);
procedure RegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent); override;
procedure UnRegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent); override;
procedure RegisterUndoRedoItemHandler(AHandlerProc: TSynUndoRedoItemEvent);
procedure UnRegisterUndoRedoItemHandler(AHandlerProc: TSynUndoRedoItemEvent);
procedure RegisterUndoRedoItemHandler(AHandlerProc: TSynUndoRedoItemEvent); override;
procedure UnRegisterUndoRedoItemHandler(AHandlerProc: TSynUndoRedoItemEvent); override;
procedure RegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent; AChanges: TSynStatusChanges);
procedure UnRegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
procedure RegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent; AChanges: TSynStatusChanges); override;
procedure UnRegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent); override;
procedure RegisterBeforeMouseDownHandler(AHandlerProc: TMouseEvent);
procedure UnregisterBeforeMouseDownHandler(AHandlerProc: TMouseEvent);
procedure RegisterBeforeMouseDownHandler(AHandlerProc: TMouseEvent); override;
procedure UnregisterBeforeMouseDownHandler(AHandlerProc: TMouseEvent); override;
procedure RegisterQueryMouseCursorHandler(AHandlerProc: TSynQueryMouseCursorEvent);
procedure UnregisterQueryMouseCursorHandler(AHandlerProc: TSynQueryMouseCursorEvent);
procedure RegisterQueryMouseCursorHandler(AHandlerProc: TSynQueryMouseCursorEvent); override;
procedure UnregisterQueryMouseCursorHandler(AHandlerProc: TSynQueryMouseCursorEvent); override;
procedure RegisterBeforeKeyDownHandler(AHandlerProc: TKeyEvent);
procedure UnregisterBeforeKeyDownHandler(AHandlerProc: TKeyEvent);
procedure RegisterBeforeKeyUpHandler(AHandlerProc: TKeyEvent);
procedure UnregisterBeforeKeyUpHandler(AHandlerProc: TKeyEvent);
procedure RegisterBeforeKeyPressHandler(AHandlerProc: TKeyPressEvent);
procedure UnregisterBeforeKeyPressHandler(AHandlerProc: TKeyPressEvent);
procedure RegisterBeforeUtf8KeyPressHandler(AHandlerProc: TUTF8KeyPressEvent);
procedure UnregisterBeforeUtf8KeyPressHandler(AHandlerProc: TUTF8KeyPressEvent);
procedure RegisterBeforeKeyDownHandler(AHandlerProc: TKeyEvent); override;
procedure UnregisterBeforeKeyDownHandler(AHandlerProc: TKeyEvent); override;
procedure RegisterBeforeKeyUpHandler(AHandlerProc: TKeyEvent); override;
procedure UnregisterBeforeKeyUpHandler(AHandlerProc: TKeyEvent); override;
procedure RegisterBeforeKeyPressHandler(AHandlerProc: TKeyPressEvent); override;
procedure UnregisterBeforeKeyPressHandler(AHandlerProc: TKeyPressEvent); override;
procedure RegisterBeforeUtf8KeyPressHandler(AHandlerProc: TUTF8KeyPressEvent); override;
procedure UnregisterBeforeUtf8KeyPressHandler(AHandlerProc: TUTF8KeyPressEvent); override;
procedure RegisterPaintEventHandler(APaintEventProc: TSynPaintEventProc; AnEvents: TSynPaintEvents);
procedure UnRegisterPaintEventHandler(APaintEventProc: TSynPaintEventProc);
procedure RegisterScrollEventHandler(AScrollEventProc: TSynScrollEventProc; AnEvents: TSynScrollEvents);
procedure UnRegisterScrollEventHandler(AScrollEventProc: TSynScrollEventProc);
procedure RegisterPaintEventHandler(APaintEventProc: TSynPaintEventProc; AnEvents: TSynPaintEvents); override;
procedure UnRegisterPaintEventHandler(APaintEventProc: TSynPaintEventProc); override;
procedure RegisterScrollEventHandler(AScrollEventProc: TSynScrollEventProc; AnEvents: TSynScrollEvents); override;
procedure UnRegisterScrollEventHandler(AScrollEventProc: TSynScrollEventProc); override;
function SearchReplace(const ASearch, AReplace: string;
AOptions: TSynSearchOptions): integer;
@ -1125,13 +1105,7 @@ type
procedure AddKey(Command: TSynEditorCommand; Key1: word; SS1: TShiftState;
Key2: word; SS2: TShiftState);
public
property CharsInWindow: Integer read GetCharsInWindow;
property CharWidth: integer read GetCharWidth;
property LeftChar: Integer read GetLeftChar write SetLeftChar;
property LineHeight: integer read GetLineHeight;
property LinesInWindow: Integer read GetLinesInWindow;
property MaxLeftChar: integer read fMaxLeftChar write SetMaxLeftChar default 1024;
property TopLine: Integer read GetTopLine write SetTopLine;
property ScrollOnEditLeftOptions: TSynScrollOnEditOptions read FScrollOnEditLeftOptions write SetScrollOnEditLeftOptions;
property ScrollOnEditRightOptions: TSynScrollOnEditOptions read FScrollOnEditRightOptions write SetScrollOnEditRightOptions;
@ -1164,7 +1138,6 @@ type
property HideSelection: boolean read fHideSelection write SetHideSelection default false;
property DefaultSelectionMode: TSynSelectionMode read GetDefSelectionMode write SetDefSelectionMode default smNormal;
property SelectionMode: TSynSelectionMode read GetSelectionMode write SetSelectionMode default smNormal;
property SelectedColor: TSynSelectedColor read GetSelectedColor write SetSelectedColor;
// Cursor
procedure UpdateCursorOverride;

View File

@ -49,7 +49,8 @@ uses
// LCL
LCLIntf, LCLType, Graphics, Controls, Clipbrd, ImgList,
// SynEdit
SynEditHighlighter, SynEditMiscProcs, SynEditTypes, LazSynEditText, SynEditPointClasses, SynEditMouseCmds;
SynEditHighlighter, SynEditMiscProcs, SynEditTypes, LazSynEditText, SynEditPointClasses, SynEditMouseCmds,
SynEditTextBase;
const
SYNEDIT_DEFAULT_MOUSE_OPTIONS = [];
@ -85,6 +86,10 @@ const
type
TSynUndoRedoItemEvent = function (Caller: TObject; Item: TSynEditUndoItem): Boolean of object;
TSynSelectedColor = class;
{ TSynWordBreaker }
TSynWordBreaker = class
@ -142,11 +147,14 @@ type
FOptions2: TSynEditorOptions2;
function GetMarkupMgr: TObject; virtual; abstract;
function GetLines: TStrings; virtual; abstract;
function GetCanRedo: boolean; virtual; abstract;
function GetCanUndo: boolean; virtual; abstract;
function GetCaretObj: TSynEditCaret; virtual; abstract;
function GetReadOnly: boolean; virtual;
function GetIsBackwardSel: Boolean;
function GetSelText: string;
function GetSelAvail: Boolean;
function GetSelectedColor: TSynSelectedColor; virtual; abstract;
procedure SetLines(Value: TStrings); virtual; abstract;
function GetViewedTextBuffer: TSynEditStringsLinked; virtual; abstract;
function GetFoldedTextBuffer: TObject; virtual; abstract;
@ -157,6 +165,16 @@ type
procedure StatusChanged(AChanges: TSynStatusChanges); virtual; abstract;
procedure SetOptions(AOptions: TSynEditorOptions); virtual; abstract;
procedure SetOptions2(AOptions2: TSynEditorOptions2); virtual; abstract;
procedure SetSelectedColor(const aSelectedColor: TSynSelectedColor); virtual; abstract;
function GetCharsInWindow: Integer; virtual; abstract;
function GetCharWidth: integer; virtual; abstract;
function GetLeftChar: Integer; virtual; abstract;
function GetLineHeight: integer; virtual; abstract;
function GetLinesInWindow: Integer; virtual; abstract;
function GetTopLine: Integer; virtual; abstract;
procedure SetLeftChar(Value: Integer); virtual; abstract;
procedure SetTopLine(Value: Integer); virtual; abstract;
property MarkupMgr: TObject read GetMarkupMgr;
property FoldedTextBuffer: TObject read GetFoldedTextBuffer; // TSynEditFoldedView
@ -167,12 +185,80 @@ type
constructor Create(AOwner: TComponent); override;
function FindGutterFromGutterPartList(const APartList: TObject): TObject; virtual; abstract;
public
// Caret
function CaretXPix: Integer; virtual; abstract;
function CaretYPix: Integer; virtual; abstract;
function ScreenXYToTextXY(AScreenXY: TPhysPoint; LimitToLines: Boolean = True): TPhysPoint; virtual; abstract;
function TextXYToScreenXY(APhysTextXY: TPhysPoint): TPhysPoint; virtual; abstract;
public
// Undo Redo
procedure BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; virtual; abstract;
procedure BeginUpdate(WithUndoBlock: Boolean = True); virtual; abstract;
procedure EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; virtual; abstract;
procedure EndUpdate; virtual; abstract;
// Undo/Redo
procedure ClearUndo; virtual; abstract;
procedure Redo; virtual; abstract;
procedure Undo; virtual; abstract;
property CanRedo: boolean read GetCanRedo;
property CanUndo: boolean read GetCanUndo;
public
// handlers
procedure RegisterCommandHandler(AHandlerProc: THookedCommandEvent;
AHandlerData: pointer; AFlags: THookedCommandFlags = [hcfPreExec, hcfPostExec]); virtual; abstract;
procedure UnregisterCommandHandler(AHandlerProc: THookedCommandEvent); virtual; abstract;
procedure RegisterMouseActionSearchHandler(AHandlerProc: TSynEditMouseActionSearchProc); virtual; abstract;
procedure UnregisterMouseActionSearchHandler(AHandlerProc: TSynEditMouseActionSearchProc); virtual; abstract;
procedure RegisterMouseActionExecHandler(AHandlerProc: TSynEditMouseActionExecProc); virtual; abstract;
procedure UnregisterMouseActionExecHandler(AHandlerProc: TSynEditMouseActionExecProc); virtual; abstract;
procedure RegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent); virtual; abstract;
procedure UnRegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent); virtual; abstract;
procedure RegisterUndoRedoItemHandler(AHandlerProc: TSynUndoRedoItemEvent); virtual; abstract;
procedure UnRegisterUndoRedoItemHandler(AHandlerProc: TSynUndoRedoItemEvent); virtual; abstract;
procedure RegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent; AChanges: TSynStatusChanges); virtual; abstract;
procedure UnRegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent); virtual; abstract;
procedure RegisterBeforeMouseDownHandler(AHandlerProc: TMouseEvent); virtual; abstract;
procedure UnregisterBeforeMouseDownHandler(AHandlerProc: TMouseEvent); virtual; abstract;
procedure RegisterQueryMouseCursorHandler(AHandlerProc: TSynQueryMouseCursorEvent); virtual; abstract;
procedure UnregisterQueryMouseCursorHandler(AHandlerProc: TSynQueryMouseCursorEvent); virtual; abstract;
procedure RegisterBeforeKeyDownHandler(AHandlerProc: TKeyEvent); virtual; abstract;
procedure UnregisterBeforeKeyDownHandler(AHandlerProc: TKeyEvent); virtual; abstract;
procedure RegisterBeforeKeyUpHandler(AHandlerProc: TKeyEvent); virtual; abstract;
procedure UnregisterBeforeKeyUpHandler(AHandlerProc: TKeyEvent); virtual; abstract;
procedure RegisterBeforeKeyPressHandler(AHandlerProc: TKeyPressEvent); virtual; abstract;
procedure UnregisterBeforeKeyPressHandler(AHandlerProc: TKeyPressEvent); virtual; abstract;
procedure RegisterBeforeUtf8KeyPressHandler(AHandlerProc: TUTF8KeyPressEvent); virtual; abstract;
procedure UnregisterBeforeUtf8KeyPressHandler(AHandlerProc: TUTF8KeyPressEvent); virtual; abstract;
procedure RegisterPaintEventHandler(APaintEventProc: TSynPaintEventProc; AnEvents: TSynPaintEvents); virtual; abstract;
procedure UnRegisterPaintEventHandler(APaintEventProc: TSynPaintEventProc); virtual; abstract;
procedure RegisterScrollEventHandler(AScrollEventProc: TSynScrollEventProc; AnEvents: TSynScrollEvents); virtual; abstract;
procedure UnRegisterScrollEventHandler(AScrollEventProc: TSynScrollEventProc); virtual; abstract;
public
property Lines: TStrings read GetLines write SetLines;
// See SYNEDIT_UNIMPLEMENTED_OPTIONS for deprecated Values
property Options: TSynEditorOptions read FOptions write SetOptions default SYNEDIT_DEFAULT_OPTIONS;
property Options2: TSynEditorOptions2 read FOptions2 write SetOptions2 default SYNEDIT_DEFAULT_OPTIONS2;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default FALSE;
property SelectedColor: TSynSelectedColor read GetSelectedColor write SetSelectedColor;
property CharsInWindow: Integer read GetCharsInWindow;
property CharWidth: integer read GetCharWidth;
property LeftChar: Integer read GetLeftChar write SetLeftChar;
property LineHeight: integer read GetLineHeight;
property LinesInWindow: Integer read GetLinesInWindow;
property TopLine: Integer read GetTopLine write SetTopLine;
property MouseOptions: TSynEditorMouseOptions read FMouseOptions write SetMouseOptions
default SYNEDIT_DEFAULT_MOUSE_OPTIONS;

View File

@ -42,7 +42,7 @@ interface
uses
Classes, Menus, LCLType, SysUtils,
SynEdit, SynEditKeyCmds, SynEditTypes, SynEditStrConst;
SynEdit, SynEditKeyCmds, SynEditTypes, SynEditStrConst, SynEditMiscClasses;
type

View File

@ -41,7 +41,7 @@ unit SynEditTypes;
interface
uses
SysUtils, types, Controls;
SysUtils, types, Classes, Controls, LCLType, SynEditKeyCmds;
const
TSynSpecialChars = [#128..#255]; // MG: special chars. Meaning depends on system encoding/codepage.
@ -217,6 +217,23 @@ type
);
TLazSynBorderSides = set of TLazSynBorderSide;
THookedCommandEvent = procedure(Sender: TObject; AfterProcessing: boolean;
var Handled: boolean; var Command: TSynEditorCommand;
var AChar: TUtf8Char;
Data: pointer; HandlerData: pointer) of object;
THookedCommandFlag = (
hcfInit, // run before On[User]CommandProcess (outside UndoBlock / should not do execution)
hcfPreExec, // Run before CommandProcessor (unless handled by On[User]CommandProcess)
hcfPostExec, // Run after CommandProcessor (unless handled by On[User]CommandProcess)
hcfFinish // Run at the very end
);
THookedCommandFlags = set of THookedCommandFlag;
THookedKeyTranslationEvent = procedure(Sender: TObject;
Code: word; SState: TShiftState; var Data: pointer; var IsStartOfCombo: boolean;
var Handled: boolean; var Command: TSynEditorCommand;
FinishComboOnly: Boolean; var ComboKeyStrokes: TSynEditKeyStrokes) of object;
const
SynFrameEdgeToSides: array [TSynFrameEdges] of TLazSynBorderSides =
( [], // sfeNone

View File

@ -43,7 +43,7 @@ interface
uses
Classes, SysUtils, Types,
FileUtil, LCLType, Menus,
SynEdit, SynEditKeyCmds, SynEditPlugins, SynEditStrConst;
SynEdit, SynEditKeyCmds, SynEditPlugins, SynEditStrConst, SynEditTypes;
type
TSynMacroState = (msStopped, msRecording, msPlaying, msPaused); // msPaused = paused recording