IDE: started auto indent

git-svn-id: trunk@20597 -
This commit is contained in:
mattias 2009-06-12 14:15:21 +00:00
parent 8f48f1eb62
commit dfe698865a
3 changed files with 41 additions and 39 deletions

View File

@ -44,7 +44,7 @@ unit CodeBeautifier;
interface interface
{ $DEFINE ShowCodeBeautifier} { $DEFINE ShowCodeBeautifier}
{$DEFINE ShowCodeBeautifierParser} { $DEFINE ShowCodeBeautifierParser}
uses uses
Classes, SysUtils, AVL_Tree, FileProcs, KeywordFuncLists, CodeCache, Classes, SysUtils, AVL_Tree, FileProcs, KeywordFuncLists, CodeCache,

View File

@ -77,8 +77,8 @@ uses
LResources, StdCtrls, Forms, Buttons, Menus, FileUtil, Controls, GraphType, LResources, StdCtrls, Forms, Buttons, Menus, FileUtil, Controls, GraphType,
HelpIntfs, Graphics, ExtCtrls, Dialogs, InterfaceBase, LDockCtrl, UTF8Process, HelpIntfs, Graphics, ExtCtrls, Dialogs, InterfaceBase, LDockCtrl, UTF8Process,
// codetools // codetools
FindDeclarationTool, LinkScanner, BasicCodeTools, AVL_Tree, Laz_XMLCfg, CodeBeautifier, FindDeclarationTool, LinkScanner, BasicCodeTools, AVL_Tree,
CodeToolsStructs, CodeToolManager, CodeCache, DefineTemplates, Laz_XMLCfg, CodeToolsStructs, CodeToolManager, CodeCache, DefineTemplates,
// synedit // synedit
SynEditKeyCmds, SynEditKeyCmds,
// IDE interface // IDE interface
@ -362,8 +362,8 @@ type
Button: TMouseButton; Shift: TShiftstate; X, Y: Integer); Button: TMouseButton; Shift: TShiftstate; X, Y: Integer);
procedure OnSrcNoteBookMouseLink( procedure OnSrcNoteBookMouseLink(
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean); Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean);
procedure OnSrcNoteBookGetDesiredIndent(Sender: TObject; SrcEditor: TSourceEditor; procedure OnSrcNoteBookGetIndent(Sender: TObject; SrcEditor: TSourceEditor;
LogCaret: TPoint; Line: Integer; var Indent, BasedLine: Integer; LogCaret: TPoint; var Indent, BasedLine: Integer;
var ReplaceIndent: Boolean); var ReplaceIndent: Boolean);
procedure OnSrcNotebookDeleteLastJumPoint(Sender: TObject); procedure OnSrcNotebookDeleteLastJumPoint(Sender: TObject);
procedure OnSrcNotebookEditorVisibleChanged(Sender: TObject); procedure OnSrcNotebookEditorVisibleChanged(Sender: TObject);
@ -1823,7 +1823,7 @@ begin
SourceNotebook.OnCloseClicked := @OnSrcNotebookFileClose; SourceNotebook.OnCloseClicked := @OnSrcNotebookFileClose;
SourceNotebook.OnClickLink := @OnSrcNoteBookClickLink; SourceNotebook.OnClickLink := @OnSrcNoteBookClickLink;
SourceNotebook.OnMouseLink := @OnSrcNoteBookMouseLink; SourceNotebook.OnMouseLink := @OnSrcNoteBookMouseLink;
SourceNotebook.OnGetDesiredIndent := @OnSrcNoteBookGetDesiredIndent; SourceNotebook.OnGetIndent := @OnSrcNoteBookGetIndent;
SourceNotebook.OnCurrentCodeBufferChanged:=@OnSrcNotebookCurCodeBufferChanged; SourceNotebook.OnCurrentCodeBufferChanged:=@OnSrcNotebookCurCodeBufferChanged;
SourceNotebook.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint; SourceNotebook.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint;
SourceNotebook.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged; SourceNotebook.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged;
@ -12390,6 +12390,8 @@ begin
DoSwitchToFormSrc(ADesigner,ActiveSrcEdit,ActiveUnitInfo) DoSwitchToFormSrc(ADesigner,ActiveSrcEdit,ActiveUnitInfo)
else if ADesigner<>nil then else if ADesigner<>nil then
GetDesignerUnit(ADesigner,ActiveSrcEdit,ActiveUnitInfo) GetDesignerUnit(ADesigner,ActiveSrcEdit,ActiveUnitInfo)
else if ActiveSrcEdit<>nil then
ActiveUnitInfo:=Project1.UnitWithEditorIndex(ActiveSrcEdit.PageIndex)
else else
GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo); GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo);
if (not (ctfSourceEditorNotNeeded in Flags)) if (not (ctfSourceEditorNotNeeded in Flags))
@ -13989,11 +13991,27 @@ begin
ActiveUnitInfo.Source,X,Y,NewSource,NewX,NewY,NewTopLine); ActiveUnitInfo.Source,X,Y,NewSource,NewX,NewY,NewTopLine);
end; end;
procedure TMainIDE.OnSrcNoteBookGetDesiredIndent(Sender: TObject; procedure TMainIDE.OnSrcNoteBookGetIndent(Sender: TObject;
SrcEditor: TSourceEditor; LogCaret: TPoint; Line: Integer; var Indent, SrcEditor: TSourceEditor; LogCaret: TPoint; var Indent,
BasedLine: Integer; var ReplaceIndent: Boolean); BasedLine: Integer; var ReplaceIndent: Boolean);
var
CodeBuf: TCodeBuffer;
p: integer;
NestedComments: Boolean;
NewIndent: TFABIndentationPolicy;
begin 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; end;
procedure TMainIDE.OnSrcNotebookMovingPage(Sender: TObject; OldPageIndex, procedure TMainIDE.OnSrcNotebookMovingPage(Sender: TObject; OldPageIndex,

View File

@ -107,10 +107,6 @@ type
TSourceEditor = class; TSourceEditor = class;
TOnGetIndentEvent = procedure(Sender: TObject; SrcEditor: TSourceEditor;
LogCaret: TPoint; Line: Integer;
var Indent, BasedLine: Integer; var ReplaceIndent: Boolean) of object;
{ TSourceEditor } { TSourceEditor }
TSourceEditor = class(TSourceEditorInterface) TSourceEditor = class(TSourceEditorInterface)
@ -123,7 +119,6 @@ type
FCodeTemplates: TSynEditAutoComplete; FCodeTemplates: TSynEditAutoComplete;
FHasExecutionMarks: Boolean; FHasExecutionMarks: Boolean;
FMarksRequested: Boolean; FMarksRequested: Boolean;
FOnGetDesiredIndent: TOnGetIndentEvent;
FPageName: string; FPageName: string;
FCodeBuffer: TCodeBuffer; FCodeBuffer: TCodeBuffer;
@ -166,8 +161,6 @@ type
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState; procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); 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 EditorStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
procedure SetCodeBuffer(NewCodeBuffer: TCodeBuffer); procedure SetCodeBuffer(NewCodeBuffer: TCodeBuffer);
function GetSource: TStrings; function GetSource: TStrings;
@ -392,8 +385,6 @@ type
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink; property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel; property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel;
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown; property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
property OnGetDesiredIndent: TOnGetIndentEvent
read FOnGetDesiredIndent write FOnGetDesiredIndent;
property Owner: TComponent read FAOwner; property Owner: TComponent read FAOwner;
property PageName: string read FPageName write SetPageName; property PageName: string read FPageName write SetPageName;
property PopupMenu: TPopupMenu read FPopUpMenu write SetPopUpMenu; property PopupMenu: TPopupMenu read FPopUpMenu write SetPopUpMenu;
@ -426,6 +417,10 @@ type
) of object; ) of object;
TOnShowCodeContext = procedure(JumpToError: boolean; TOnShowCodeContext = procedure(JumpToError: boolean;
out Abort: boolean) of object; out Abort: boolean) of object;
TOnGetIndentEvent = procedure(Sender: TObject; SrcEditor: TSourceEditor;
LogCaret: TPoint;
var Indent, BasedLine: Integer; var ReplaceIndent: Boolean) of object;
TSourceNotebookState = ( TSourceNotebookState = (
snIncrementalFind, snIncrementalFind,
@ -544,7 +539,7 @@ type
FActiveEditKeyBGColor: TColor; FActiveEditKeyBGColor: TColor;
FActiveEditSymbolFGColor: TColor; FActiveEditSymbolFGColor: TColor;
FActiveEditSymbolBGColor: TColor; FActiveEditSymbolBGColor: TColor;
FOnGetDesiredIndent: TOnGetIndentEvent; FOnGetIndent: TOnGetIndentEvent;
// PopupMenu // PopupMenu
procedure BuildPopupMenu; procedure BuildPopupMenu;
@ -608,9 +603,8 @@ type
Shift: TShiftstate; X,Y: Integer); Shift: TShiftstate; X,Y: Integer);
procedure EditorMouseLink( procedure EditorMouseLink(
Sender: TObject; X,Y: Integer; var AllowMouseLink: Boolean); Sender: TObject; X,Y: Integer; var AllowMouseLink: Boolean);
procedure EditorGetIndent(Sender: TObject; SrcEditor: TSourceEditor; procedure EditorGetIndent(Sender: TObject; LogCaret: TPoint; Line: Integer;
LogCaret: TPoint; Line: Integer; var Indent, BasedLine: Integer; var ReplaceIndent: Boolean);
var Indent, BasedLine: Integer; var ReplaceIndent: Boolean);
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState; procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
@ -796,8 +790,8 @@ type
read FOnCloseClicked write FOnCloseClicked; read FOnCloseClicked write FOnCloseClicked;
property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink; property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink;
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink; property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
property OnGetDesiredIndent: TOnGetIndentEvent property OnGetIndent: TOnGetIndentEvent
read FOnGetDesiredIndent write FOnGetDesiredIndent; read FOnGetIndent write FOnGetIndent;
property OnDeleteLastJumpPoint: TNotifyEvent property OnDeleteLastJumpPoint: TNotifyEvent
read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint; read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint;
property OnEditorVisibleChanged: TNotifyEvent property OnEditorVisibleChanged: TNotifyEvent
@ -2544,7 +2538,6 @@ Begin
OnClickLink := @EditorClickLink; OnClickLink := @EditorClickLink;
OnMouseLink := @EditorMouseLink; OnMouseLink := @EditorMouseLink;
OnKeyDown := @EditorKeyDown; OnKeyDown := @EditorKeyDown;
Beautifier.OnGetDesiredIndent := @EditorGetIndent;
// IMPORTANT: when you change above, don't forget updating UnbindEditor // IMPORTANT: when you change above, don't forget updating UnbindEditor
end; end;
@ -3011,13 +3004,6 @@ begin
OnKeyDown(Sender, Key, Shift); OnKeyDown(Sender, Key, Shift);
end; 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; Function TSourceEditor.GetCaretPosFromCursorPos(const CursorPos: TPoint): TPoint;
var var
NewTopLine: Integer; NewTopLine: Integer;
@ -3353,7 +3339,6 @@ begin
OnClickLink := nil; OnClickLink := nil;
OnMouseLink := nil; OnMouseLink := nil;
OnKeyDown := nil; OnKeyDown := nil;
Beautifier.OnGetDesiredIndent := nil;
end; end;
if FEditPlugin<>nil then begin if FEditPlugin<>nil then begin
FEditPlugin.OnLinesInserted := nil; FEditPlugin.OnLinesInserted := nil;
@ -4819,7 +4804,7 @@ begin
Result.OnClickLink := @EditorClickLink; Result.OnClickLink := @EditorClickLink;
Result.OnMouseLink := @EditorMouseLink; Result.OnMouseLink := @EditorMouseLink;
Result.OnKeyDown := @EditorKeyDown; Result.OnKeyDown := @EditorKeyDown;
Result.OnGetDesiredIndent := @EditorGetIndent; Result.EditorComponent.Beautifier.OnGetDesiredIndent := @EditorGetIndent;
Result.EditorComponent.EndUpdate; Result.EditorComponent.EndUpdate;
{$IFDEF IDE_DEBUG} {$IFDEF IDE_DEBUG}
@ -6699,12 +6684,11 @@ begin
OnMouseLink(Sender, X, Y, AllowMouseLink); OnMouseLink(Sender, X, Y, AllowMouseLink);
end; end;
procedure TSourceNotebook.EditorGetIndent(Sender: TObject; procedure TSourceNotebook.EditorGetIndent(Sender: TObject; LogCaret: TPoint;
SrcEditor: TSourceEditor; LogCaret: TPoint; Line: Integer; var Indent, Line: Integer; var Indent, BasedLine: Integer; var ReplaceIndent: Boolean);
BasedLine: Integer; var ReplaceIndent: Boolean);
begin begin
if Assigned(OnGetDesiredIndent) then if Assigned(OnGetIndent) then
OnGetDesiredIndent(Sender, SrcEditor, LogCaret, Line, Indent, BasedLine, ReplaceIndent); OnGetIndent(Sender, GetActiveSE, LogCaret, Indent, BasedLine, ReplaceIndent);
end; end;
Procedure TSourceNotebook.HintTimer(sender: TObject); Procedure TSourceNotebook.HintTimer(sender: TObject);