SynEdit: Free up Gutter.OnResize / OnChange

git-svn-id: trunk@35335 -
This commit is contained in:
martin 2012-02-12 19:02:44 +00:00
parent cb02facd7d
commit 3e7296c6d4
3 changed files with 45 additions and 5 deletions

View File

@ -1892,11 +1892,11 @@ begin
fBookMarkOpt.OnChange := {$IFDEF FPC}@{$ENDIF}BookMarkOptionsChanged;
FLeftGutter := CreateGutter(self, gsLeft, FTextDrawer);
FLeftGutter.OnChange := {$IFDEF FPC}@{$ENDIF}GutterChanged;
FLeftGutter.OnResize := {$IFDEF FPC}@{$ENDIF}GutterResized;
FLeftGutter.RegisterChangeHandler({$IFDEF FPC}@{$ENDIF}GutterChanged);
FLeftGutter.RegisterResizeHandler({$IFDEF FPC}@{$ENDIF}GutterResized);
FRightGutter := CreateGutter(self, gsRight, FTextDrawer);
FRightGutter.OnChange := {$IFDEF FPC}@{$ENDIF}GutterChanged;
FRightGutter.OnResize := {$IFDEF FPC}@{$ENDIF}GutterResized;
FRightGutter.RegisterChangeHandler({$IFDEF FPC}@{$ENDIF}GutterChanged);
FRightGutter.RegisterResizeHandler({$IFDEF FPC}@{$ENDIF}GutterResized);
ControlStyle := ControlStyle + [csOpaque, csSetCaption, csTripleClicks, csQuadClicks];
Height := 150;
@ -2210,6 +2210,10 @@ begin
FreeAndNil(fPlugins);
end;
RemoveHandlers;
FLeftGutter.UnRegisterChangeHandler({$IFDEF FPC}@{$ENDIF}GutterChanged);
FLeftGutter.UnRegisterResizeHandler({$IFDEF FPC}@{$ENDIF}GutterResized);
FRightGutter.UnRegisterChangeHandler({$IFDEF FPC}@{$ENDIF}GutterChanged);
FRightGutter.UnRegisterResizeHandler({$IFDEF FPC}@{$ENDIF}GutterResized);
FreeAndNil(FHookedKeyTranslationList);
fHookedCommandHandlers:=nil;

View File

@ -63,6 +63,8 @@ type
property Width;
property Parts;
property MouseActions;
property OnResize;
property OnChange;
end;
{ TSynGutterSeparator }

View File

@ -5,7 +5,7 @@ unit SynGutterBase;
interface
uses
Classes, SysUtils, Graphics, Controls, Menus, math, SynEditMarks,
Classes, SysUtils, Graphics, Controls, Menus, math, LCLProc, SynEditMarks,
SynEditMiscClasses, SynTextDrawer, SynEditMouseCmds, SynEditFoldedView;
type
@ -38,6 +38,8 @@ type
FOnResize: TNotifyEvent;
FOnChange: TNotifyEvent;
FMouseActions: TSynEditMouseInternalActions;
FOnResizeHandler: TMethodList;
FOnChangeHandler: TMethodList;
function GetMouseActions: TSynEditMouseActions;
procedure SetAutoSize(const AValue: boolean);
@ -70,6 +72,10 @@ type
function MaybeHandleMouseAction(var AnInfo: TSynEditMouseActionInfo;
HandleActionProc: TSynEditMouseActionHandler): Boolean; virtual;
procedure ResetMouseActions; virtual; // set mouse-actions according to current Options / may clear them
procedure RegisterResizeHandler(AHandler: TNotifyEvent);
procedure UnregisterResizeHandler(AHandler: TNotifyEvent);
procedure RegisterChangeHandler(AHandler: TNotifyEvent);
procedure UnregisterChangeHandler(AHandler: TNotifyEvent);
property Left: Integer read FLeft;
property Top: Integer read FTop;
property Height:Integer read FHeight;
@ -214,12 +220,16 @@ uses SynEdit;
constructor TSynGutterBase.Create(AOwner: TSynEditBase; ASide: TSynGutterSide;
ATextDrawer: TheTextDrawer);
begin
FOnResizeHandler := TMethodList.Create;
FOnChangeHandler := TMethodList.Create;
inherited Create;
FSide := ASide;
FSynEdit := AOwner;
CreatePartList;
FMouseActions := CreateMouseActions;
FInDoChange := False;
FChangeLock := 0;
FTextDrawer := ATextDrawer;
@ -237,6 +247,8 @@ begin
FOnResize := nil;
FreeAndNil(FGutterPartList);
FreeAndNil(FMouseActions);
FreeAndNil(FOnChangeHandler);
FreeAndNil(FOnResizeHandler);
inherited Destroy;
end;
@ -306,6 +318,26 @@ begin
FMouseActions.ResetUserActions;
end;
procedure TSynGutterBase.RegisterResizeHandler(AHandler: TNotifyEvent);
begin
FOnResizeHandler.Add(TMethod(AHandler));
end;
procedure TSynGutterBase.UnregisterResizeHandler(AHandler: TNotifyEvent);
begin
FOnResizeHandler.Remove(TMethod(AHandler));
end;
procedure TSynGutterBase.RegisterChangeHandler(AHandler: TNotifyEvent);
begin
FOnChangeHandler.Add(TMethod(AHandler));
end;
procedure TSynGutterBase.UnregisterChangeHandler(AHandler: TNotifyEvent);
begin
FOnChangeHandler.Remove(TMethod(AHandler));
end;
procedure TSynGutterBase.SetColor(const Value: TColor);
begin
if FColor <> Value then
@ -430,6 +462,7 @@ begin
FInDoChange := False;
end;
end;
FOnChangeHandler.CallNotifyEvents(Self);
if Assigned(FOnChange) then
FOnChange(Self);
end;
@ -441,6 +474,7 @@ begin
exit;
end;
FNeedOnResize := False;
FOnResizeHandler.CallNotifyEvents(Self);
if Assigned(FOnResize) then
FOnResize(Self)
else