From dfe698865a18feb25e42587e37947bee4fa4a608 Mon Sep 17 00:00:00 2001 From: mattias Date: Fri, 12 Jun 2009 14:15:21 +0000 Subject: [PATCH] IDE: started auto indent git-svn-id: trunk@20597 - --- components/codetools/codebeautifier.pas | 2 +- ide/main.pp | 34 ++++++++++++++----- ide/sourceeditor.pp | 44 ++++++++----------------- 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/components/codetools/codebeautifier.pas b/components/codetools/codebeautifier.pas index 8cff7a9003..683545722f 100644 --- a/components/codetools/codebeautifier.pas +++ b/components/codetools/codebeautifier.pas @@ -44,7 +44,7 @@ unit CodeBeautifier; interface { $DEFINE ShowCodeBeautifier} -{$DEFINE ShowCodeBeautifierParser} +{ $DEFINE ShowCodeBeautifierParser} uses Classes, SysUtils, AVL_Tree, FileProcs, KeywordFuncLists, CodeCache, diff --git a/ide/main.pp b/ide/main.pp index d9d539a098..d12fb3daba 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -77,8 +77,8 @@ uses LResources, StdCtrls, Forms, Buttons, Menus, FileUtil, Controls, GraphType, HelpIntfs, Graphics, ExtCtrls, Dialogs, InterfaceBase, LDockCtrl, UTF8Process, // codetools - FindDeclarationTool, LinkScanner, BasicCodeTools, AVL_Tree, Laz_XMLCfg, - CodeToolsStructs, CodeToolManager, CodeCache, DefineTemplates, + CodeBeautifier, FindDeclarationTool, LinkScanner, BasicCodeTools, AVL_Tree, + Laz_XMLCfg, CodeToolsStructs, CodeToolManager, CodeCache, DefineTemplates, // synedit SynEditKeyCmds, // IDE interface @@ -362,8 +362,8 @@ type Button: TMouseButton; Shift: TShiftstate; X, Y: Integer); procedure OnSrcNoteBookMouseLink( Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean); - procedure OnSrcNoteBookGetDesiredIndent(Sender: TObject; SrcEditor: TSourceEditor; - LogCaret: TPoint; Line: Integer; var Indent, BasedLine: Integer; + procedure OnSrcNoteBookGetIndent(Sender: TObject; SrcEditor: TSourceEditor; + LogCaret: TPoint; var Indent, BasedLine: Integer; var ReplaceIndent: Boolean); procedure OnSrcNotebookDeleteLastJumPoint(Sender: TObject); procedure OnSrcNotebookEditorVisibleChanged(Sender: TObject); @@ -1823,7 +1823,7 @@ begin SourceNotebook.OnCloseClicked := @OnSrcNotebookFileClose; SourceNotebook.OnClickLink := @OnSrcNoteBookClickLink; SourceNotebook.OnMouseLink := @OnSrcNoteBookMouseLink; - SourceNotebook.OnGetDesiredIndent := @OnSrcNoteBookGetDesiredIndent; + SourceNotebook.OnGetIndent := @OnSrcNoteBookGetIndent; SourceNotebook.OnCurrentCodeBufferChanged:=@OnSrcNotebookCurCodeBufferChanged; SourceNotebook.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint; SourceNotebook.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged; @@ -12390,6 +12390,8 @@ begin DoSwitchToFormSrc(ADesigner,ActiveSrcEdit,ActiveUnitInfo) else if ADesigner<>nil then GetDesignerUnit(ADesigner,ActiveSrcEdit,ActiveUnitInfo) + else if ActiveSrcEdit<>nil then + ActiveUnitInfo:=Project1.UnitWithEditorIndex(ActiveSrcEdit.PageIndex) else GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo); if (not (ctfSourceEditorNotNeeded in Flags)) @@ -13989,11 +13991,27 @@ begin ActiveUnitInfo.Source,X,Y,NewSource,NewX,NewY,NewTopLine); end; -procedure TMainIDE.OnSrcNoteBookGetDesiredIndent(Sender: TObject; - SrcEditor: TSourceEditor; LogCaret: TPoint; Line: Integer; var Indent, +procedure TMainIDE.OnSrcNoteBookGetIndent(Sender: TObject; + SrcEditor: TSourceEditor; LogCaret: TPoint; var Indent, BasedLine: Integer; var ReplaceIndent: Boolean); +var + CodeBuf: TCodeBuffer; + p: integer; + NestedComments: Boolean; + NewIndent: TFABIndentationPolicy; begin - // ToDo + {$IFNDEF EnableIndent} + exit; + {$ENDIF} + CodeBuf:=SrcEditor.CodeBuffer; + CodeBuf.LineColToPosition(LogCaret.Y,LogCaret.X,p); + debugln(['TMainIDE.OnSrcNoteBookGetIndent AAA1 ',dbgs(LogCaret),' p=',p,' ',CodeBuf.Filename,' ',CodeBuf.SourceLength]); + if p<1 then exit; + NestedComments:=CodeToolBoss.GetNestedCommentsFlagForFile(CodeBuf.Filename); + if not CodeToolBoss.Indenter.GetIndent(CodeBuf.Source,p,NestedComments,NewIndent) + then exit; + debugln(['TMainIDE.OnSrcNoteBookGetIndent AAA2 ',NewIndent.IndentValid,' ',NewIndent.Indent]); + if not NewIndent.IndentValid then exit; end; procedure TMainIDE.OnSrcNotebookMovingPage(Sender: TObject; OldPageIndex, diff --git a/ide/sourceeditor.pp b/ide/sourceeditor.pp index abcb92e728..ff3b984555 100644 --- a/ide/sourceeditor.pp +++ b/ide/sourceeditor.pp @@ -107,10 +107,6 @@ type TSourceEditor = class; - TOnGetIndentEvent = procedure(Sender: TObject; SrcEditor: TSourceEditor; - LogCaret: TPoint; Line: Integer; - var Indent, BasedLine: Integer; var ReplaceIndent: Boolean) of object; - { TSourceEditor } TSourceEditor = class(TSourceEditorInterface) @@ -123,7 +119,6 @@ type FCodeTemplates: TSynEditAutoComplete; FHasExecutionMarks: Boolean; FMarksRequested: Boolean; - FOnGetDesiredIndent: TOnGetIndentEvent; FPageName: string; FCodeBuffer: TCodeBuffer; @@ -166,8 +161,6 @@ type procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); - procedure EditorGetIndent(Sender: TObject; LogCaret: TPoint; Line: Integer; - var Indent, BasedLine: Integer; var ReplaceIndent: Boolean); procedure EditorStatusChanged(Sender: TObject; Changes: TSynStatusChanges); procedure SetCodeBuffer(NewCodeBuffer: TCodeBuffer); function GetSource: TStrings; @@ -392,8 +385,6 @@ type property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink; property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel; property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown; - property OnGetDesiredIndent: TOnGetIndentEvent - read FOnGetDesiredIndent write FOnGetDesiredIndent; property Owner: TComponent read FAOwner; property PageName: string read FPageName write SetPageName; property PopupMenu: TPopupMenu read FPopUpMenu write SetPopUpMenu; @@ -426,6 +417,10 @@ type ) of object; TOnShowCodeContext = procedure(JumpToError: boolean; out Abort: boolean) of object; + TOnGetIndentEvent = procedure(Sender: TObject; SrcEditor: TSourceEditor; + LogCaret: TPoint; + var Indent, BasedLine: Integer; var ReplaceIndent: Boolean) of object; + TSourceNotebookState = ( snIncrementalFind, @@ -544,7 +539,7 @@ type FActiveEditKeyBGColor: TColor; FActiveEditSymbolFGColor: TColor; FActiveEditSymbolBGColor: TColor; - FOnGetDesiredIndent: TOnGetIndentEvent; + FOnGetIndent: TOnGetIndentEvent; // PopupMenu procedure BuildPopupMenu; @@ -608,9 +603,8 @@ type Shift: TShiftstate; X,Y: Integer); procedure EditorMouseLink( Sender: TObject; X,Y: Integer; var AllowMouseLink: Boolean); - procedure EditorGetIndent(Sender: TObject; SrcEditor: TSourceEditor; - LogCaret: TPoint; Line: Integer; - var Indent, BasedLine: Integer; var ReplaceIndent: Boolean); + procedure EditorGetIndent(Sender: TObject; LogCaret: TPoint; Line: Integer; + var Indent, BasedLine: Integer; var ReplaceIndent: Boolean); procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); @@ -796,8 +790,8 @@ type read FOnCloseClicked write FOnCloseClicked; property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink; property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink; - property OnGetDesiredIndent: TOnGetIndentEvent - read FOnGetDesiredIndent write FOnGetDesiredIndent; + property OnGetIndent: TOnGetIndentEvent + read FOnGetIndent write FOnGetIndent; property OnDeleteLastJumpPoint: TNotifyEvent read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint; property OnEditorVisibleChanged: TNotifyEvent @@ -2544,7 +2538,6 @@ Begin OnClickLink := @EditorClickLink; OnMouseLink := @EditorMouseLink; OnKeyDown := @EditorKeyDown; - Beautifier.OnGetDesiredIndent := @EditorGetIndent; // IMPORTANT: when you change above, don't forget updating UnbindEditor end; @@ -3011,13 +3004,6 @@ begin OnKeyDown(Sender, Key, Shift); end; -procedure TSourceEditor.EditorGetIndent(Sender: TObject; LogCaret: TPoint; - Line: Integer; var Indent, BasedLine: Integer; var ReplaceIndent: Boolean); -begin - if Assigned(OnGetDesiredIndent) then - OnGetDesiredIndent(Sender, Self, LogCaret, Line, Indent, BasedLine, ReplaceIndent); -end; - Function TSourceEditor.GetCaretPosFromCursorPos(const CursorPos: TPoint): TPoint; var NewTopLine: Integer; @@ -3353,7 +3339,6 @@ begin OnClickLink := nil; OnMouseLink := nil; OnKeyDown := nil; - Beautifier.OnGetDesiredIndent := nil; end; if FEditPlugin<>nil then begin FEditPlugin.OnLinesInserted := nil; @@ -4819,7 +4804,7 @@ begin Result.OnClickLink := @EditorClickLink; Result.OnMouseLink := @EditorMouseLink; Result.OnKeyDown := @EditorKeyDown; - Result.OnGetDesiredIndent := @EditorGetIndent; + Result.EditorComponent.Beautifier.OnGetDesiredIndent := @EditorGetIndent; Result.EditorComponent.EndUpdate; {$IFDEF IDE_DEBUG} @@ -6699,12 +6684,11 @@ begin OnMouseLink(Sender, X, Y, AllowMouseLink); end; -procedure TSourceNotebook.EditorGetIndent(Sender: TObject; - SrcEditor: TSourceEditor; LogCaret: TPoint; Line: Integer; var Indent, - BasedLine: Integer; var ReplaceIndent: Boolean); +procedure TSourceNotebook.EditorGetIndent(Sender: TObject; LogCaret: TPoint; + Line: Integer; var Indent, BasedLine: Integer; var ReplaceIndent: Boolean); begin - if Assigned(OnGetDesiredIndent) then - OnGetDesiredIndent(Sender, SrcEditor, LogCaret, Line, Indent, BasedLine, ReplaceIndent); + if Assigned(OnGetIndent) then + OnGetIndent(Sender, GetActiveSE, LogCaret, Indent, BasedLine, ReplaceIndent); end; Procedure TSourceNotebook.HintTimer(sender: TObject);