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
{ $DEFINE ShowCodeBeautifier}
{$DEFINE ShowCodeBeautifierParser}
{ $DEFINE ShowCodeBeautifierParser}
uses
Classes, SysUtils, AVL_Tree, FileProcs, KeywordFuncLists, CodeCache,

View File

@ -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,

View File

@ -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);