easyeditoractions.pas.svn-base

来自「支持自定义语法高亮显示的编辑器控件」· SVN-BASE 代码 · 共 1,309 行 · 第 1/3 页

SVN-BASE
1,309
字号
unit EasyEditorActions;

interface

uses
  StdActns, EasyEditor, Classes, ActnList, StdCtrls;

type
  TExecuteTargetEvent =procedure (Sender: TObject; Target : TCustomEasyEdit) of object;
  TEasyEditBaseAction = class(TEditAction)
  private
    fLastTarget      : TObject;
    fOnExecuteTarget : TExecuteTargetEvent;
    fCustomEasyEdit  : TCustomEasyEdit;
  protected
    procedure GetLocalActionVariables (Target : TObject); virtual;
    function GetCustomEasyEdit(Target: TObject): TCustomEasyEdit; virtual;
    property OnExecuteTarget : TExecuteTargetEvent
       read fOnExecuteTarget write fOnExecuteTarget;
  public
    procedure UpdateTarget(Target: TObject); override;
    function  HandlesTarget(Target: TObject): Boolean; override;
    procedure ExecuteTarget(Target: TObject); override;
    property  CustomEasyEdit : TCustomEasyEdit read fCustomEasyEdit;
  published
  end;

  TEasyEditAction = class(TEasyEditBaseAction)
  protected
  public
  published
    property OnExecuteTarget;
  end;

  // Edit Actions

  TEasyEditBaseEditAction = class(TEasyEditBaseAction)
  private
    fCustomEdit      : TCustomEdit;
  protected
    procedure GetLocalActionVariables (Target : TObject); override;
    function GetCustomEdit(Target: TObject): TCustomEdit; virtual;
  public
    function HandlesTarget(Target: TObject): Boolean; override;
    procedure UpdateTarget(Target: TObject); override;
    property  CustomEdit : TCustomEdit read fCustomEdit;
  published
  end;

  TEasyEditCutAction = class(TEasyEditBaseEditAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditCopyAction = class(TEasyEditBaseEditAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditPasteAction = class(TEasyEditBaseEditAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditClearAction = class(TEasyEditBaseEditAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditSelectAllAction = class(TEasyEditBaseEditAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditUndoAction = class(TEasyEditBaseEditAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditRedoAction = class(TEasyEditBaseEditAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditAutoCorrectionAction = class(TEasyEditBaseEditAction)
  private
    procedure DoAutoCorrection ;
  public
    constructor create (AOwner : TComponent); override;
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  published
  end;

  // Block Actions

  TEasyEditBaseBlockAction = class(TEasyEditBaseAction)
  private
  protected
  public
    procedure UpdateTarget(Target: TObject); override;
  end;

  TEasyEditIndentAction = class(TEasyEditBaseBlockAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditUnindentAction = class(TEasyEditBaseBlockAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditLowercaseAction = class(TEasyEditBaseBlockAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditUppercaseAction = class(TEasyEditBaseBlockAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditCollapsableAction = class(TEasyEditBaseBlockAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditUncollapsableAction = class(TEasyEditBaseBlockAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditSortDownAction = class(TEasyEditBaseBlockAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditSortUpAction = class(TEasyEditBaseBlockAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditCommentAction = class(TEasyEditBaseBlockAction)
  private
    fLineCommentStart: string;
  public
    constructor create (AOwner : TComponent); override;
    procedure ExecuteTarget(Target: TObject); override;
  published
    property LineCommentStart: string read fLineCommentStart write
      fLineCommentStart;
  end;

  TEasyEditUnCommentAction = class(TEasyEditBaseBlockAction)
  private
    fLineCommentStart: string;
  public
    constructor create (AOwner : TComponent); override;
    procedure ExecuteTarget(Target: TObject); override;
  published
    property LineCommentStart: string read fLineCommentStart write
      fLineCommentStart;
  end;

  // Search Actions

  TEasyEditBaseSearchAction = class(TEasyEditBaseAction)
  private
  protected
  public
  end;

  TEasyEditSearchAndReplaceAction = class(TEasyEditBaseSearchAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditSearchAction = class(TEasyEditBaseSearchAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditSearchAgainAction = class(TEasyEditBaseSearchAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditSearchAndReplaceAgainAction = class(TEasyEditBaseSearchAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditIncSearchAction = class(TEasyEditBaseSearchAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditSearchBaseIdentifier = class(TEasyEditBaseSearchAction)
  private
    fSearchNext : Boolean;
  protected
    property SearchNext : Boolean read fSearchNext write fSearchNext;
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditSearchPrevIdentifier = class(TEasyEditSearchBaseIdentifier)
  public
    constructor create (AOwner : TComponent); override;
  end;

  TEasyEditSearchNextIdentifier = class(TEasyEditSearchBaseIdentifier)
  public
    constructor create (AOwner : TComponent); override;
  end;

  TEasyEditSearchBaseBracketAction = class(TEasyEditBaseSearchAction)
  private
    fBrackets        : string;
    fFindOpen        : Boolean;
  protected
    property FindOpen : Boolean read fFindOpen write fFindOpen;
  public
    procedure ExecuteTarget(Target: TObject); override;
    procedure UpdateTarget(Target: TObject); override;
  published
    property Brackets : string read fBrackets write fBrackets;
  end;

  TEasyEditSearchOpenBracketAction = class(TEasyEditSearchBaseBracketAction)
  public
    constructor create (AOwner : TComponent); override;
  end;

  TEasyEditSearchCloseBracketAction = class(TEasyEditSearchBaseBracketAction)
  public
    constructor create (AOwner : TComponent); override;
  end;

  // Dialog Actions

  TEasyEditBaseDialogAction = class(TEasyEditBaseAction)
  private
  protected
  public
  end;

  TEasyEditGotoLineAction = class(TEasyEditBaseDialogAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditPrintAction = class(TEasyEditBaseDialogAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditPrintPreviewAction = class(TEasyEditBaseDialogAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditCustomizeAction = class(TEasyEditBaseDialogAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  // Option Actions

  TEasyEditBaseOptionAction = class(TEasyEditBaseAction)
  private
  protected
  public
  end;

  TEasyEditShowFormattingMarksAction = class(TEasyEditBaseOptionAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditShowLineNumbersAction = class(TEasyEditBaseOptionAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditShowRulersAction = class(TEasyEditBaseOptionAction)
  private
    fHandledRulers : TEasyEditorRulerOptions;
  public
    constructor create (AOwner : TComponent); override;
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  published
    property HandledRulers : TEasyEditorRulerOptions read fHandledRulers write fHandledRulers;
  end;

  TEasyEditWordWrapAction = class(TEasyEditBaseOptionAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TEasyEditHiglightBracketsAction = class(TEasyEditBaseOptionAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;


implementation

uses Clipbrd, Windows, EasyKeyMap, EasyEditSource, EasyCustomDlg, Controls,
     EasySearchDlg, EasyReplDlg, EasyGoToDlg, EasyPrintDlg, EasyPreviewDlg,
     EasyClasses, EasyEditorSettings, EasyParser, EasySettings, EasyConsts, Dialogs;

type THackCustomEasyEdit = class (TCustomEasyEdit)
     public
       function GetSelBounds(ALine : Integer; var ALeft, ARight : integer) : boolean;
       function IncrementalSearch(Const s: TEasyString; DeleteLast: Boolean): Boolean;
     end;

function tHackCustomEasyEdit.GetSelBounds(ALine : Integer; var ALeft, ARight : integer) : boolean;
begin
  Result := Inherited GetSelBounds(aLine, ALine, False, ALeft, ARight);
end;
function tHackCustomEasyEdit.IncrementalSearch(Const s: TEasyString; DeleteLast: Boolean): Boolean;
begin
  Result := Inherited IncrementalSearch (s, DeleteLast);
end;


{ TEasyEditBaseAction }

procedure TEasyEditBaseAction.GetLocalActionVariables (Target : TObject);
begin
  fLastTarget            := Target;
  fCustomEasyEdit        := GetCustomEasyEdit(Target);
end;


function TEasyEditBaseAction.GetCustomEasyEdit(Target: TObject): TCustomEasyEdit;
begin
  IF Target is TCustomEasyEdit THEN
    Result := Target as TCustomEasyEdit
  ELSE
    Result := NIL;
end;

function TEasyEditBaseAction.HandlesTarget(Target: TObject): Boolean;
begin
//  Result := inherited HandlesTarget(Target);
//  if not Result then
  Result := Assigned(Target) and
            (Target is TCustomEasyEdit) and
             TCustomEasyEdit(Target).Focused;
  IF Result THEN
    IF (Target <> fLastTarget) THEN
      GetLocalActionVariables (Target)
end;

procedure TEasyEditBaseAction.UpdateTarget(Target: TObject);
begin
  IF (Target is TCustomEasyEdit) THEN
    IF NOT Enabled THEN
      Enabled := TRUE
    ELSE
  ELSE
    IF Enabled THEN
      Enabled := False;
end;

procedure TEasyEditBaseAction.ExecuteTarget(Target: TObject);
begin
  if Assigned (fOnExecuteTarget) THEN
    fOnExecuteTarget(Self, CustomEasyEdit)
  ELSE
    inherited ExecuteTarget (Target);
end;


procedure TEasyEditBaseEditAction.GetLocalActionVariables (Target : TObject);
Begin
  Inherited GetLocalActionVariables(Target);
  fCustomEdit := GetCustomEdit(Target);
End;

function TEasyEditBaseEditAction.GetCustomEdit(Target: TObject): TCustomEdit;
begin
  IF Target is TCustomEdit THEN
    Result := Target as TCustomEdit
  ELSE
    Result := NIL;
end;

function TEasyEditBaseEditAction.HandlesTarget(Target: TObject): Boolean;
begin
  Result := inherited HandlesTarget(Target);
  Result := Result OR (Assigned(CustomEdit) AND CustomEdit.Focused);
end;

procedure TEasyEditBaseEditAction.UpdateTarget(Target: TObject);
begin
  IF (Target is TCustomEasyEdit) OR
     (Target is TCustomEdit) THEN
    IF NOT Enabled THEN
      Enabled := TRUE
    ELSE
  ELSE
    IF Enabled THEN
      Enabled := False;
end;


type
  TCustomEditCrack = class(TCustomEdit);


{ TEasyEditCutAction }

procedure TEasyEditCutAction.ExecuteTarget(Target: TObject);
begin
  if Target is TCustomEasyEdit then
    CustomEasyEdit.CutBlock
  else

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?