mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 17:55:55 +02:00
IDE: started auto indent
git-svn-id: trunk@20597 -
This commit is contained in:
parent
8f48f1eb62
commit
dfe698865a
@ -44,7 +44,7 @@ unit CodeBeautifier;
|
||||
interface
|
||||
|
||||
{ $DEFINE ShowCodeBeautifier}
|
||||
{$DEFINE ShowCodeBeautifierParser}
|
||||
{ $DEFINE ShowCodeBeautifierParser}
|
||||
|
||||
uses
|
||||
Classes, SysUtils, AVL_Tree, FileProcs, KeywordFuncLists, CodeCache,
|
||||
|
34
ide/main.pp
34
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,
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user