MG: fixed method search diff proc, fixed synedit insert in empty line, small fixes, started define editor

git-svn-id: trunk@1468 -
This commit is contained in:
lazarus 2002-03-02 11:08:38 +00:00
parent 9891d77a52
commit 69a28ff329
9 changed files with 614 additions and 79 deletions

1
.gitattributes vendored
View File

@ -116,6 +116,7 @@ examples/toolbar.pp svneol=native#text/pascal
examples/trackbar.pp svneol=native#text/pascal
ide/buildlazdialog.pas svneol=native#text/pascal
ide/codetemplatedialog.pp svneol=native#text/pascal
ide/codetoolsdefines.pas svneol=native#text/pascal
ide/codetoolsoptions.pas svneol=native#text/pascal
ide/compiler.pp svneol=native#text/pascal
ide/compileroptions.pp svneol=native#text/pascal

View File

@ -1421,32 +1421,32 @@ begin
if FCurCodeTool<>nil then begin
Result:=FCurCodeTool.ConsistencyCheck;
if Result<>0 then begin
dec(Result,1000); exit;
dec(Result,10000); exit;
end;
end;
Result:=DefinePool.ConsistencyCheck;
if Result<>0 then begin
dec(Result,2000); exit;
dec(Result,20000); exit;
end;
Result:=DefineTree.ConsistencyCheck;
if Result<>0 then begin
dec(Result,3000); exit;
dec(Result,30000); exit;
end;
Result:=SourceCache.ConsistencyCheck;
if Result<>0 then begin
dec(Result,4000); exit;
dec(Result,40000); exit;
end;
Result:=GlobalValues.ConsistencyCheck;
if Result<>0 then begin
dec(Result,5000); exit;
dec(Result,50000); exit;
end;
Result:=SourceChangeCache.ConsistencyCheck;
if Result<>0 then begin
dec(Result,6000); exit;
dec(Result,60000); exit;
end;
Result:=FSourceTools.ConsistencyCheck;
if Result<>0 then begin
dec(Result,7000); exit;
dec(Result,70000); exit;
end;
finally
if (Result<>0) and (FCatchExceptions=false) then

View File

@ -118,16 +118,17 @@ type
property LastChild: TDefineTemplate read FLastChild;
procedure AddChild(ADefineTemplate: TDefineTemplate);
procedure InsertAfter(APrior: TDefineTemplate);
procedure Assign(ADefineTemplate: TDefineTemplate); virtual;
procedure Assign(ADefineTemplate: TDefineTemplate;
WithSubNodes, WithNextSiblings: boolean); virtual;
function IsEqual(ADefineTemplate: TDefineTemplate;
CheckSubNodes: boolean): boolean;
function FindChildByName(const AName: string): TDefineTemplate;
function LoadFromXMLConfig(XMLConfig: TXMLConfig;
const Path: string): boolean;
CheckSubNodes, CheckNextSiblings: boolean): boolean;
function FindChildByName(const AName: string): TDefineTemplate;
function LoadFromXMLConfig(XMLConfig: TXMLConfig;
const Path: string): boolean;
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
function CreateCopy: TDefineTemplate;
function SelfOrParentContainsFlag(AFlag: TDefineTemplateFlag): boolean;
function IsAutoGenerated: boolean;
function CreateCopy: TDefineTemplate;
function SelfOrParentContainsFlag(AFlag: TDefineTemplateFlag): boolean;
function IsAutoGenerated: boolean;
procedure Unbind;
procedure Clear;
constructor Create;
@ -183,6 +184,8 @@ type
const Path: string): boolean;
procedure ClearCache;
procedure Clear;
function IsEqual(SrcDefineTree: TDefineTree): boolean;
procedure Assign(SrcDefineTree: TDefineTree);
constructor Create;
destructor Destroy; override;
function ConsistencyCheck: integer; // 0 = ok
@ -379,45 +382,78 @@ procedure TDefineTemplate.AddChild(ADefineTemplate: TDefineTemplate);
// add as last child
begin
if ADefineTemplate=nil then exit;
ADefineTemplate.FPrior:=FLastChild;
FLastChild:=ADefineTemplate;
if FFirstChild=nil then FFirstChild:=ADefineTemplate;
if ADefineTemplate.FPrior<>nil then
ADefineTemplate.FPrior.FNext:=ADefineTemplate;
while ADefineTemplate<>nil do begin
ADefineTemplate.FParent:=Self;
inc(FChildCount);
ADefineTemplate:=ADefineTemplate.FNext;
if LastChild=nil then begin
while ADefineTemplate<>nil do begin
ADefineTemplate.fParent:=Self;
if ADefineTemplate.Prior=nil then FFirstChild:=ADefineTemplate;
if ADefineTemplate.Next=nil then FLastChild:=ADefineTemplate;
inc(FChildCount);
ADefineTemplate:=ADefineTemplate.Next;
end;
end else begin
ADefineTemplate.InsertAfter(LastChild);
end;
end;
procedure TDefineTemplate.InsertAfter(APrior: TDefineTemplate);
var ANode, LastSibling: TDefineTemplate;
begin
if APrior=nil then exit;
if FParent<>nil then begin
ANode:=Self;
while ANode<>nil do begin
dec(ANode.Parent.FChildCount);
ANode.FParent:=nil;
ANode:=ANode.Next;
end;
end;
LastSibling:=Self;
while LastSibling.Next<>nil do LastSibling:=LastSibling.Next;
FPrior:=APrior;
FNext:=APrior.Next;
LastSibling.FNext:=APrior.Next;
APrior.FNext:=Self;
if FNext<>nil then FNext.FPrior:=Self;
FParent:=APrior.FParent;
if LastSibling.Next<>nil then LastSibling.Next.FPrior:=LastSibling;
FParent:=APrior.Parent;
if Parent<>nil then begin
ANode:=Self;
while ANode<>nil do begin
ANode.FParent:=Parent;
inc(ANode.Parent.FChildCount);
ANode:=ANode.Next;
end;
if Parent.LastChild=APrior then Parent.FLastChild:=LastSibling;
end;
end;
procedure TDefineTemplate.Assign(ADefineTemplate: TDefineTemplate);
var ChildTemplate, CopyTemplate: TDefineTemplate;
procedure TDefineTemplate.Assign(ADefineTemplate: TDefineTemplate;
WithSubNodes, WithNextSiblings: boolean);
var ChildTemplate, CopyTemplate, NextTemplate: TDefineTemplate;
begin
if IsEqual(ADefineTemplate,WithSubNodes,WithNextSiblings) then exit;
Clear;
if ADefineTemplate=nil then exit;
ChildTemplate:=ADefineTemplate.FirstChild;
while ChildTemplate<>nil do begin
CopyTemplate:=ChildTemplate.CreateCopy;
AddChild(CopyTemplate);
ChildTemplate:=ChildTemplate.Next;
end;
Name:=ADefineTemplate.Name;
Description:=ADefineTemplate.Description;
Variable:=ADefineTemplate.Variable;
Value:=ADefineTemplate.Value;
Action:=ADefineTemplate.Action;
Flags:=ADefineTemplate.Flags;
if WithSubNodes then begin
ChildTemplate:=ADefineTemplate.FirstChild;
if ChildTemplate<>nil then begin
CopyTemplate:=TDefineTemplate.Create;
AddChild(CopyTemplate);
CopyTemplate.Assign(ChildTemplate,true,true);
end;
end;
if WithNextSiblings then begin
NextTemplate:=ADefineTemplate.FirstChild;
if NextTemplate<>nil then begin
CopyTemplate:=TDefineTemplate.Create;
CopyTemplate.InsertAfter(Self);
CopyTemplate.Assign(NextTemplate,WithSubNodes,true);
end;
end;
end;
procedure TDefineTemplate.Unbind;
@ -463,8 +499,10 @@ end;
function TDefineTemplate.CreateCopy: TDefineTemplate;
begin
writeln('TDefineTemplate.CreateCopy A ',ConsistencyCheck);
Result:=TDefineTemplate.Create;
Result.Assign(Self);
Result.Assign(Self,true,false);
writeln('TDefineTemplate.CreateCopy B ',ConsistencyCheck);
end;
destructor TDefineTemplate.Destroy;
@ -623,6 +661,14 @@ begin
inc(RealChildCount);
end;
end;
if (Parent<>nil) then begin
if (Prior=nil) and (Parent.FirstChild<>Self) then begin
Result:=-6; exit;
end;
if (Next=nil) and (Parent.LastChild<>Self) then begin
Result:=-7; exit;
end;
end;
if RealChildCount<>FChildCount then begin
Result:=-1; exit;
end;
@ -667,7 +713,7 @@ begin
end;
function TDefineTemplate.IsEqual(ADefineTemplate: TDefineTemplate;
CheckSubNodes: boolean): boolean;
CheckSubNodes, CheckNextSiblings: boolean): boolean;
var SrcNode, DestNode: TDefineTemplate;
begin
Result:=(ADefineTemplate<>nil)
@ -681,12 +727,14 @@ begin
if Result and CheckSubNodes then begin
SrcNode:=FirstChild;
DestNode:=ADefineTemplate.FirstChild;
while SrcNode<>nil do begin
Result:=SrcNode.IsEqual(DestNode,true);
if not Result then exit;
SrcNode:=SrcNode.Next;
DestNode:=DestNode.Next;
end;
if SrcNode<>nil then
Result:=SrcNode.IsEqual(DestNode,CheckSubNodes,true);
end;
if Result and CheckNextSiblings then begin
SrcNode:=Next;
DestNode:=ADefineTemplate.Next;
if SrcNode<>nil then
Result:=SrcNode.IsEqual(DestNode,CheckSubNodes,CheckNextSiblings);
end;
end;
@ -745,6 +793,25 @@ begin
ClearCache;
end;
function TDefineTree.IsEqual(SrcDefineTree: TDefineTree): boolean;
begin
Result:=false;
if (FFirstDefineTemplate=nil) xor (SrcDefineTree.FFirstDefineTemplate=nil)
then exit;
if (FFirstDefineTemplate<>nil)
and (not FFirstDefineTemplate.IsEqual(
SrcDefineTree.FFirstDefineTemplate,true,true))
then exit;
end;
procedure TDefineTree.Assign(SrcDefineTree: TDefineTree);
begin
if IsEqual(SrcDefineTree) then exit;
Clear;
FFirstDefineTemplate:=TDefineTemplate.Create;
FFirstDefineTemplate.Assign(SrcDefineTree.FFirstDefineTemplate,true,true);
end;
procedure TDefineTree.ClearCache;
begin
FCache.FreeAndClear;
@ -1121,7 +1188,7 @@ begin
if (ADefineTemplate=nil) then exit;
OldDefineTemplate:=FindDefineTemplateByName(ADefineTemplate.Name);
if OldDefineTemplate<>nil then begin
if not OldDefineTemplate.IsEqual(ADefineTemplate,true) then begin
if not OldDefineTemplate.IsEqual(ADefineTemplate,true,false) then begin
ClearCache;
end;
ADefineTemplate.InsertAfter(OldDefineTemplate);
@ -1139,7 +1206,7 @@ begin
if ADefineTemplate=nil then exit;
OldDefineTemplate:=FindDefineTemplateByName(ADefineTemplate.Name);
if OldDefineTemplate<>nil then begin
if not OldDefineTemplate.IsEqual(ADefineTemplate,true) then begin
if not OldDefineTemplate.IsEqual(ADefineTemplate,true,false) then begin
ClearCache;
end;
ADefineTemplate.InsertAfter(OldDefineTemplate);

View File

@ -80,8 +80,8 @@ function TMethodJumpingCodeTool.FindJumpPoint(CursorPos: TCodeXYPosition;
var NewPos: TCodeXYPosition; var NewTopLine: integer): boolean;
const
JumpToProcAttr = [phpInUpperCase,phpTrimSpace,phpWithoutClassName,
phpWithVarModifiers,phpWithParameterNames,phpWithResultType];
JumpToProcAttr = [phpInUpperCase,phpWithoutClassName,phpWithVarModifiers,
phpWithParameterNames,phpWithResultType];
function JumpToProc(
FromProcNode: TCodeTreeNode; FromProcAttr: TProcHeadAttributes;
@ -254,7 +254,7 @@ writeln('TMethodJumpingCodeTool.FindJumpPoint D ',CleanCursorPos,', |',copy(Src,
if (CursorNode=nil)
or (not (CursorNode.Desc in [ctnProcedureHead,ctnProcedure])) then
exit;
// build the method name + parameter list (without default values)
// search corresponding proc node
Result:=FindBestProcNode(CursorNode,[phpAddClassName,phpInUpperCase],
TypeSectionNode,[phpIgnoreForwards,phpInUpperCase]);
{$IFDEF CTDEBUG}
@ -538,6 +538,7 @@ end;
function TMethodJumpingCodeTool.FindFirstDifferenceNode(
SearchForNodes, SearchInNodes: TAVLTree;
var DiffTxtPos: integer): TAVLTreeNode;
// search the first AVL node in SearchForNodes, that is not in SearchInNodes
var SearchInNode: TAVLTreeNode;
cmp: integer;
NodeTxt1, NodeTxt2: string;
@ -553,9 +554,9 @@ begin
//writeln('[TMethodJumpingCodeTool.FindFirstDifferenceNode] B ',SearchInNode<>nil);
cmp:=CompareCodeTreeNodeExt(Result.Data,SearchInNode.Data);
//NodeTxt1:=TCodeTreeNodeExtension(Result.Data).Txt;
//NodeTxt2:=TCodeTreeNodeExtension(SearchInNode.Data).Txt;
//writeln('[TMethodJumpingCodeTool.FindFirstDifferenceNode] ',NodeTxt1,' ?',cmp,'= ',NodeTxt2);
NodeTxt1:=TCodeTreeNodeExtension(Result.Data).Txt;
NodeTxt2:=TCodeTreeNodeExtension(SearchInNode.Data).Txt;
writeln('[TMethodJumpingCodeTool.FindFirstDifferenceNode] ',NodeTxt1,' ?',cmp,'= ',NodeTxt2);
if cmp<0 then begin
// result node not found in SearchInNodes
@ -592,11 +593,11 @@ begin
SearchInNode:=SearchInNodes.FindSuccessor(SearchInNode);
if (Result=nil) or (SearchInNode=nil) then exit;
end else begin
// search in successor
// node in SearchInNodes does not exists in SearchForNodes
// -> ignore and search next
SearchInNode:=SearchInNodes.FindSuccessor(SearchInNode);
end;
end;
Result:=nil;
end;
function TMethodJumpingCodeTool.JumpToNode(ANode: TCodeTreeNode;

View File

@ -84,7 +84,7 @@ type
phpWithOfObject, // extract 'of object'
phpWithComments, // extract comments
phpInUpperCase, // turn to uppercase
phpTrimSpace, // skip unneeded spaces
phpCommentsToSpace, // replace comments with a single space
phpWithoutBrackets, // skip start- and end-bracket of parameter list
phpIgnoreForwards, // skip forward procs
phpIgnoreProcsWithBody,// skip procs with begin..end
@ -2878,7 +2878,7 @@ begin
end else if (CurPos.StartPos>LastAtomEndPos)
and (ExtractMemStream.Position>0) then begin
// some code was skipped
if (not (phpTrimSpace in Attr))
if (phpCommentsToSpace in Attr)
or ((CurPos.StartPos<=SrcLen) and (IsIdentStartChar[Src[CurPos.StartPos]])
and (IsIdentChar[Src[LastAtomEndPos-1]]))
then begin

View File

@ -2840,7 +2840,6 @@ begin
else
fUndoList.AddChange(crPaste, Point(1, StartOfBlock.y),
EndOfBlock, SelText, smNormal);
if PasteMode = smColumn then
CaretXY := Point(Min(StartOfBlock.X, EndOfBlock.X),
Max(StartOfBlock.Y, EndOfBlock.Y) + 1);
@ -3264,6 +3263,8 @@ var
CaretX - 1 - Length(sLeftSide));
end;
sRightSide := Copy(LineText, CaretX, Length(LineText) - (CaretX - 1));
if eoTrimTrailingSpaces in Options then
sRightSide := TrimRight(sRightSide);
// step1: insert the first line of Value into current line
Start := PChar(Value);
P := GetEOL(Start);

452
ide/codetoolsdefines.pas Normal file
View File

@ -0,0 +1,452 @@
{ /***************************************************************************
codetoolsoptions.pas - Lazarus IDE unit
-----------------------------------------
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
Author: Mattias Gaertner
Abstract:
- TCodeToolsDefinesEditor
}
unit CodeToolsDefines;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LCLLinux, Forms, Controls, Buttons, StdCtrls, ComCtrls,
ExtCtrls, Menus, LResources, SynEdit, DefineTemplates, CodeToolManager,
CodeToolsOptions;
type
TCodeToolsDefinesEditor = class(TForm)
TheImageList: TImageList;
MainMenu: TMainMenu;
// exit menu
ExitMenuItem: TMenuItem;
SaveAndExitMenuItem: TMenuItem;
DontSaveAndExitMenuItem: TMenuItem;
// edit nodes
EditMenuItem: TMenuItem;
MoveNodeUpMenuItem: TMenuItem;
MoveNodeDownMenuItem: TMenuItem;
InsertDefineMenuItem: TMenuItem;
InsertDefineAllMenuItem: TMenuItem;
InsertUndefineMenuItem: TMenuItem;
InsertBlockMenuItem: TMenuItem;
InsertDirectoryMenuItem: TMenuItem;
InsertIfMenuItem: TMenuItem;
InsertIfDefMenuItem: TMenuItem;
InsertElseMenuItem: TMenuItem;
InsertEndIfMenuItem: TMenuItem;
DeleteNodeMenuItem: TMenuItem;
CopyToClipbrdMenuItem: TMenuItem;
PasteFromClipbrdMenuItem: TMenuItem;
// tools
ToolsMenuItem: TMenuItem;
OpenPreviewMenuItem: TMenuItem;
ShowMacroListMenuItem: TMenuItem;
// templates
InsertTemplateMenuItem: TMenuItem;
// define tree
DefineTreeView: TTreeView;
// selected item
SelectedItemGroupBox: TGroupBox;
TypeLabel: TLabel;
ProjectSpecificCheckBox: TCheckBox;
NameLabel: Tlabel;
NameEdit: TEdit;
DescriptionLabel: TLabel;
DescriptionEdit: TEdit;
VariableLabel: TLabel;
VariableEdit: TEdit;
ValueNoteBook: TNoteBook;
ValueAsTextSynEdit: TSynEdit;
ValueAsFilePathsSynEdit: TSynEdit;
MoveFilePathUpBitBtn: TBitBtn;
MoveFilePathDownBitBtn: TBitBtn;
DeleteFilePathBitBtn: TBitBtn;
InsertFilePathBitBtn: TBitBtn;
procedure SaveAndExitMenuItemClick(Sender: TObject);
procedure DontSaveAndExitMenuItemClick(Sender: TObject);
procedure FormResize(Sender: TObject);
private
FDefineTree: TDefineTree;
procedure CreateComponents;
function CreateSeperator : TMenuItem;
procedure RebuildDefineTreeView;
procedure AddDefineNodes(ANode, AParent: TDefineTemplate;
WithChilds,WithNextSiblings: boolean);
public
procedure Assign(ACodeToolBoss: TCodeToolManager;
Options: TCodeToolsOptions);
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
property DefineTree: TDefineTree read FDefineTree;
end;
function ShowCodeToolsDefinesEditor(ACodeToolBoss: TCodeToolManager;
Options: TCodeToolsOptions): TModalResult;
implementation
type
TWinControlClass = class of TWinControl;
function ShowCodeToolsDefinesEditor(ACodeToolBoss: TCodeToolManager;
Options: TCodeToolsOptions): TModalResult;
var CodeToolsDefinesEditor: TCodeToolsDefinesEditor;
begin
CodeToolsDefinesEditor:=TCodeToolsDefinesEditor.Create(Application);
CodeToolsDefinesEditor.Assign(ACodeToolBoss,Options);
Result:=CodeToolsDefinesEditor.ShowModal;
CodeToolsDefinesEditor.Free;
end;
{ TCodeToolsDefinesEditor }
procedure TCodeToolsDefinesEditor.SaveAndExitMenuItemClick(Sender: TObject);
begin
ModalResult:=mrOk;
end;
procedure TCodeToolsDefinesEditor.DontSaveAndExitMenuItemClick(Sender: TObject);
begin
ModalResult:=mrCancel;
end;
procedure TCodeToolsDefinesEditor.FormResize(Sender: TObject);
var MaxX, MaxY, SelGrpBoxTop, SelItemMaxX, SelItemMaxY,
ValNoteBookMaxX, ValNoteBookMaxY: integer;
begin
MaxX:=ClientWidth-2;
MaxY:=ClientHeight-2;
SelGrpBoxTop:=MaxY-300;
// define tree ---------------------------------------------------------------
with DefineTreeView do begin
Left:=3;
Top:=3;
Width:=MaxX-2*Left;
Height:=SelGrpBoxTop-2*Top;
end;
// selected item -------------------------------------------------------------
with SelectedItemGroupBox do begin
Left:=DefineTreeView.Left;
Top:=SelGrpBoxTop;
Width:=MaxX-2*Left;
Height:=MaxY-Top-30;
end;
SelItemMaxX:=SelectedItemGroupBox.ClientWidth-8;
SelItemMaxY:=SelectedItemGroupBox.ClientHeight-18;
with TypeLabel do begin
Left:=5;
Top:=3;
Width:=SelItemMaxX-2*Left;
end;
with ProjectSpecificCheckBox do begin
Left:=TypeLabel.Left;
Top:=TypeLabel.Top+TypeLabel.Height+5;
Width:=SelItemMaxX-2*Left;
end;
with DescriptionLabel do begin
Left:=ProjectSpecificCheckBox.Left;
Top:=ProjectSpecificCheckBox.Top+ProjectSpecificCheckBox.Height+5;
Width:=70;
end;
with DescriptionEdit do begin
Left:=DescriptionLabel.Left+DescriptionLabel.Width+5;
Top:=DescriptionLabel.Top;
Width:=SelItemMaxX-Left-5;
end;
with NameLabel do begin
Left:=DescriptionLabel.Left;
Top:=DescriptionLabel.Top+DescriptionLabel.Height+5;
Width:=70;
end;
with NameEdit do begin
Left:=NameLabel.Left+NameLabel.Width+5;
Top:=NameLabel.Top;
Width:=150;
end;
with VariableLabel do begin
Left:=NameEdit.Left+NameEdit.Width+30;
Top:=NameLabel.Top;
Width:=70;
end;
with VariableEdit do begin
Left:=VariableLabel.Left+VariableLabel.Width+5;
Top:=VariableLabel.Top;
Width:=SelItemMaxX-Left-5;
end;
with ValueNoteBook do begin
Left:=0;
Top:=VariableLabel.Top+VariableLabel.Height+8;
Width:=SelItemMaxX;
Height:=SelItemMaxY-Top-5;
end;
ValNoteBookMaxX:=ValueNoteBook.ClientWidth-7;//ValueAsTextSynEdit.Parent.ClientWidth;
ValNoteBookMaxY:=ValueNoteBook.ClientHeight-32;//ValueAsTextSynEdit.Parent.ClientHeight;
with ValueAsTextSynEdit do begin
Left:=0;
Top:=0;
Width:=ValNoteBookMaxX;
Height:=ValNoteBookMaxY;
end;
with ValueAsFilePathsSynEdit do begin
Left:=0;
Top:=0;
Width:=ValNoteBookMaxX-80;
Height:=ValNoteBookMaxY;
end;
with MoveFilePathUpBitBtn do begin
Left:=ValNoteBookMaxX-75;
Top:=5;
Width:=ValNoteBookMaxX-Left-5;
end;
with MoveFilePathDownBitBtn do begin
Left:=MoveFilePathUpBitBtn.Left;
Top:=MoveFilePathUpBitBtn.Top+MoveFilePathUpBitBtn.Height+5;
Width:=MoveFilePathUpBitBtn.Width;
end;
with DeleteFilePathBitBtn do begin
Left:=MoveFilePathUpBitBtn.Left;
Top:=MoveFilePathDownBitBtn.Top+MoveFilePathDownBitBtn.Height+5;
Width:=MoveFilePathUpBitBtn.Width;
end;
with InsertFilePathBitBtn do begin
Left:=MoveFilePathUpBitBtn.Left;
Top:=DeleteFilePathBitBtn.Top+DeleteFilePathBitBtn.Height+5;
Width:=MoveFilePathUpBitBtn.Width;
end;
end;
procedure TCodeToolsDefinesEditor.CreateComponents;
procedure CreateWinControl(var AWinControl: TWinControl;
AWinControlClass: TWinControlClass; const AName: string;
AParent: TWinControl);
begin
AWinControl:=AWinControlClass.Create(Self);
with AWinControl do begin
Name:=AName;
Parent:=AParent;
Visible:=true;
end;
end;
procedure AddMenuItem(var AMenuItem: TMenuItem; const AName, ACaption: string;
AParent: TMenuItem);
begin
AMenuItem:=TMenuItem.Create(nil);
AMenuItem.Name:=AName;
AMenuItem.Caption:=ACaption;
if AParent=nil then
MainMenu.Items.Add(AMenuItem)
else
AParent.Add(AMenuItem);
end;
begin
TheImageList:=TImageList.Create(Self);
with TheImageList do begin
Name:='TheImageList';
end;
// Main Menu -----------------------------------------------------------------
MainMenu := TMainMenu.Create(Self);
MainMenu.Name:='MainMenu';
Menu := MainMenu;
// exit menu
AddMenuItem(ExitMenuItem,'ExitMenuItem','Exit',nil);
AddMenuItem(SaveAndExitMenuItem,'SaveAndExitMenuItem','Save and Exit',
ExitMenuItem);
SaveAndExitMenuItem.OnClick:=@SaveAndExitMenuItemClick;
ExitMenuItem.Add(CreateSeperator);
AddMenuItem(DontSaveAndExitMenuItem,'DontSaveAndExitMenuItem',
'Exit without Save',ExitMenuItem);
DontSaveAndExitMenuItem.OnClick:=@DontSaveAndExitMenuItemClick;
// edit nodes
AddMenuItem(EditMenuItem,'EditMenuItem','Edit',nil);
AddMenuItem(MoveNodeUpMenuItem,'MoveNodeUpMenuItem','Move node up',
EditMenuItem);
AddMenuItem(MoveNodeDownMenuItem,'MoveNodeDownMenuItem','Move node down',
EditMenuItem);
EditMenuItem.Add(CreateSeperator);
AddMenuItem(InsertDefineMenuItem,'InsertDefineMenuItem','Insert Define',
EditMenuItem);
AddMenuItem(InsertDefineAllMenuItem,'InsertDefineAllMenuItem','Insert Define All',
EditMenuItem);
AddMenuItem(InsertUndefineMenuItem,'InsertUndefineMenuItem','Insert Undefine',
EditMenuItem);
AddMenuItem(InsertBlockMenuItem,'InsertBlockMenuItem','Insert Block',
EditMenuItem);
AddMenuItem(InsertDirectoryMenuItem,'InsertDirectoryMenuItem','Insert Directory',
EditMenuItem);
AddMenuItem(InsertIfMenuItem,'InsertIfMenuItem','Insert If',
EditMenuItem);
AddMenuItem(InsertIfDefMenuItem,'InsertIfDefMenuItem','Insert IfDef',
EditMenuItem);
AddMenuItem(InsertElseMenuItem,'InsertElseMenuItem','Insert Else',
EditMenuItem);
AddMenuItem(InsertEndIfMenuItem,'InsertEndIfMenuItem','Insert EndIf',
EditMenuItem);
EditMenuItem.Add(CreateSeperator);
AddMenuItem(DeleteNodeMenuItem,'DeleteNodeMenuItem','Delete node',
EditMenuItem);
EditMenuItem.Add(CreateSeperator);
AddMenuItem(CopyToClipbrdMenuItem,'CopyToClipbrdMenuItem','Copy to clipboard',
EditMenuItem);
AddMenuItem(PasteFromClipbrdMenuItem,'PasteFromClipbrdMenuItem',
'Paste from clipboard',EditMenuItem);
// tools
AddMenuItem(ToolsMenuItem,'ToolsMenuItem','Tools',nil);
AddMenuItem(OpenPreviewMenuItem,'OpenPreviewMenuItem','Open Preview',
ToolsMenuItem);
AddMenuItem(ShowMacroListMenuItem,'ShowMacroListMenuItem','Show Macros',
ToolsMenuItem);
// templates
AddMenuItem(InsertTemplateMenuItem,'InsertTemplateMenuItem',
'Insert Template',nil);
// define tree----------------------------------------------------------------
CreateWinControl(DefineTreeView,TTreeView,'DefineTreeView',Self);
with DefineTreeView do begin
Images:=TheImageList;
end;
// selected item
CreateWinControl(SelectedItemGroupBox,TGroupBox,'SelectedItemGroupBox',Self);
SelectedItemGroupBox.Caption:='Selected Node:';
CreateWinControl(TypeLabel,TLabel,'TypeLabel',SelectedItemGroupBox);
CreateWinControl(ProjectSpecificCheckBox,TCheckBox,'ProjectSpecificCheckBox',
SelectedItemGroupBox);
ProjectSpecificCheckBox.Caption:=
'Node and its children are only valid for this project';
CreateWinControl(NameLabel,TLabel,'NameLabel',SelectedItemGroupBox);
NameLabel.Caption:='Name:';
CreateWinControl(NameEdit,TEdit,'NameEdit',SelectedItemGroupBox);
CreateWinControl(DescriptionLabel,TLabel,'DescriptionLabel',
SelectedItemGroupBox);
DescriptionLabel.Caption:='Description:';
CreateWinControl(DescriptionEdit,TEdit,'DescriptionEdit',
SelectedItemGroupBox);
CreateWinControl(VariableLabel,TLabel,'VariableLabel',SelectedItemGroupBox);
VariableLabel.Caption:='Variable:';
CreateWinControl(VariableEdit,TEdit,'VariableEdit',SelectedItemGroupBox);
CreateWinControl(ValueNoteBook,TNoteBook,'ValueNoteBook',
SelectedItemGroupBox);
with ValueNoteBook do begin
Pages[0]:='Value as Text';
Pages.Add('Value as File Paths');
end;
CreateWinControl(ValueAsTextSynEdit,TSynEdit,'ValueAsTextSynEdit',
ValueNoteBook.Page[0]);
CreateWinControl(ValueAsFilePathsSynEdit,TSynEdit,'ValueAsFilePathsSynEdit',
ValueNoteBook.Page[1]);
CreateWinControl(MoveFilePathUpBitBtn,TBitBtn,'MoveFilePathUpBitBtn',
ValueNoteBook.Page[1]);
MoveFilePathUpBitBtn.Caption:='Move path up';
CreateWinControl(MoveFilePathDownBitBtn,TBitBtn,'MoveFilePathDownBitBtn',
ValueNoteBook.Page[1]);
MoveFilePathDownBitBtn.Caption:='Move path down';
CreateWinControl(DeleteFilePathBitBtn,TBitBtn,'DeleteFilePathBitBtn',
ValueNoteBook.Page[1]);
DeleteFilePathBitBtn.Caption:='Delete path';
CreateWinControl(InsertFilePathBitBtn,TBitBtn,'InsertFilePathBitBtn',
ValueNoteBook.Page[1]);
InsertFilePathBitBtn.Caption:='Insert path';
end;
function TCodeToolsDefinesEditor.CreateSeperator : TMenuItem;
begin
Result := TMenuItem.Create(Self);
Result.Caption := '-';
end;
procedure TCodeToolsDefinesEditor.RebuildDefineTreeView;
begin
DefineTreeView.Items.BeginUpdate;
DefineTreeView.Items.Clear;
AddDefineNodes(FDefineTree.RootTemplate,nil,true,true);
DefineTreeView.Items.EndUpdate;
end;
procedure TCodeToolsDefinesEditor.AddDefineNodes(
ANode, AParent: TDefineTemplate;
WithChilds, WithNextSiblings: boolean);
begin
end;
procedure TCodeToolsDefinesEditor.Assign(ACodeToolBoss: TCodeToolManager;
Options: TCodeToolsOptions);
begin
FDefineTree.Assign(ACodeToolBoss.DefineTree);
RebuildDefineTreeView;
end;
constructor TCodeToolsDefinesEditor.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
if LazarusResources.Find(ClassName)=nil then begin
SetBounds((Screen.Width-480) div 2,(Screen.Height-430) div 2, 485, 435);
Caption:='CodeTools Defines Editor';
OnResize:=@FormResize;
CreateComponents;
end;
FDefineTree:=TDefineTree.Create;
Resize;
end;
destructor TCodeToolsDefinesEditor.Destroy;
begin
FDefineTree.Free;
inherited Destroy;
end;
end.

View File

@ -117,6 +117,7 @@ const
ecEnvironmentOptions = ecUserFirst + 804;
ecEditorOptions = ecUserFirst + 805;
ecCodeToolsOptions = ecUserFirst + 806;
ecCodeToolsDefinesEd = ecUserFirst + 807;
ecAboutLazarus = ecUserFirst + 900;
@ -473,6 +474,7 @@ begin
ecFindBlockOtherEnd: Result:='find block other end';
ecFindBlockStart: Result:='find block start';
// run menu
ecBuild: Result:= 'build program/project';
ecBuildAll: Result:= 'build all files of program/project';
ecRun: Result:= 'run program';
@ -481,22 +483,25 @@ begin
ecStepOver: Result:= 'step over';
ecRunToCursor: Result:= 'run to cursor';
ecStopProgram: Result:= 'stop program';
ecRunParameters: Result:= 'run parameters';
ecCompilerOptions: Result:= 'compiler options';
// tools menu
ecExtToolSettings: Result:= 'external tools settings';
ecConfigBuildLazarus: Result:= 'configure build-lazarus';
ecBuildLazarus: Result:= 'build lazarus';
ecExtToolFirst..ecExtToolLast:
Result:='external tool '+IntToStr(cmd-ecExtToolFirst+1);
// environment menu
ecEnvironmentOptions: Result:= 'environment options';
ecEditorOptions: Result:= 'editor options';
ecCodeToolsOptions: Result:= 'codetools options';
ecCodeToolsDefinesEd: Result:= 'codetools defines editor';
// help menu
ecAboutLazarus: Result:= 'about lazarus';
ecBuildLazarus: Result:= 'build lazarus';
ecExtToolFirst..ecExtToolLast:
Result:='external tool '+IntToStr(cmd-ecExtToolFirst+1);
else
Result:='unknown editor command';
end;
@ -1196,6 +1201,7 @@ begin
Add(C,'General environment options',ecEnvironmentOptions,VK_UNKNOWN,[],VK_UNKNOWN,[]);
Add(C,'Editor options',ecEditorOptions,VK_UNKNOWN,[],VK_UNKNOWN,[]);
Add(C,'CodeTools options',ecCodeToolsOptions,VK_UNKNOWN,[],VK_UNKNOWN,[]);
Add(C,'CodeTools defines editor',ecCodeToolsDefinesEd,VK_UNKNOWN,[],VK_UNKNOWN,[]);
// help menu
C:=Categories[AddCategory('HelpMenu','Help menu commands')];

View File

@ -42,7 +42,7 @@ uses
Debugger, DBGOutputForm, GDBDebugger, RunParamsOpts, ExtToolDialog,
MacroPromptDlg, LMessages, ProjectDefs, Watchesdlg, BreakPointsdlg, ColumnDlg,
OutputFilter, BuildLazDialog, MiscOptions, EditDefineTree, CodeToolsOptions,
TypInfo, IDEOptionDefs{, CodeToolsDefines};
TypInfo, IDEOptionDefs, CodeToolsDefines;
const
Version_String = '0.8.2 alpha';
@ -166,6 +166,7 @@ type
itmEnvGeneralOptions: TMenuItem;
itmEnvEditorOptions: TMenuItem;
itmEnvCodeToolsOptions: TMenuItem;
itmEnvCodeToolsDefinesEditor: TMenuItem;
itmHelpAboutLazarus: TMenuItem;
@ -175,10 +176,10 @@ type
HintWindow1 : THintWindow;
// event handlers
procedure FormShow(Sender : TObject);
//procedure FormShow(Sender : TObject);
procedure FormClose(Sender : TObject; var Action: TCloseAction);
procedure FormCloseQuery(Sender : TObject; var CanClose: boolean);
procedure FormPaint(Sender : TObject);
//procedure FormPaint(Sender : TObject);
procedure MainMouseMoved(Sender: TObject; Shift: TShiftState; X,Y: Integer);
procedure MainMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X,Y: Integer);
@ -257,6 +258,7 @@ type
procedure mnuEnvGeneralOptionsClicked(Sender : TObject);
procedure mnuEnvEditorOptionsClicked(Sender : TObject);
procedure mnuEnvCodeToolsOptionsClicked(Sender : TObject);
procedure mnuEnvCodeToolsDefinesEditorClicked(Sender : TObject);
// help menu
procedure mnuHelpAboutLazarusClicked(Sender : TObject);
@ -715,7 +717,7 @@ begin
HintWindow1.AutoHide := False;
// MainIDE form events
OnShow := @FormShow;
//OnShow := @FormShow;
OnClose := @FormClose;
OnCloseQuery := @FormCloseQuery;
@ -952,17 +954,7 @@ Begin
end;
Procedure TMainIDE.FormPaint(Sender : TObject);
begin
end;
{------------------------------------------------------------------------------}
procedure TMainIDE.FormShow(Sender : TObject);
Begin
end;
procedure TMainIDE.FormClose(Sender : TObject; var Action: TCloseAction);
begin
SaveEnvironment;
@ -1625,6 +1617,12 @@ begin
itmEnvCodeToolsOptions.OnCLick := @mnuEnvCodeToolsOptionsClicked;
mnuEnvironment.Add(itmEnvCodeToolsOptions);
itmEnvCodeToolsDefinesEditor := TMenuItem.Create(nil);
itmEnvCodeToolsDefinesEditor.Name:='itmEnvCodeToolsDefinesEditor';
itmEnvCodeToolsDefinesEditor.Caption := 'CodeTools defines editor';
itmEnvCodeToolsDefinesEditor.OnCLick := @mnuEnvCodeToolsDefinesEditorClicked;
mnuEnvironment.Add(itmEnvCodeToolsDefinesEditor);
//--------------
// Help
//--------------
@ -2357,6 +2355,11 @@ begin
ShowCodeToolsOptions(CodeToolsOpts,@SourceNoteBook.GetSynEditPreviewSettings);
end;
procedure TMainIDE.mnuEnvCodeToolsDefinesEditorClicked(Sender : TObject);
begin
ShowCodeToolsDefinesEditor(CodeToolBoss,CodeToolsOpts);
end;
procedure TMainIDE.SaveEnvironment;
begin
SaveDesktopSettings(EnvironmentOptions);
@ -4425,7 +4428,7 @@ begin
end;
end;
procedure TMainIDE.GetUnitWithPageIndex(PageIndex:integer;
procedure TMainIDE.GetUnitWithPageIndex(PageIndex:integer;
var ActiveSourceEditor:TSourceEditor; var ActiveUnitInfo:TUnitInfo);
begin
if SourceNoteBook.NoteBook=nil then begin
@ -5143,7 +5146,7 @@ begin
FOpenEditorsOnCodeToolChange:=false;
CodeToolsOpts.AssignTo(CodeToolBoss);
if (not FileExists(EnvironmentOptions.CompilerFilename)) then begin
writeln('');
writeln('NOTE: Compiler Filename not set! (see Environment Options)');
@ -5184,13 +5187,13 @@ begin
AddTemplate(ADefTempl,false,
'NOTE: Could not create Define Template for Free Pascal Sources');
// create compiler macros for the lazarus sources
// create compiler macros for the lazarus sources
ADefTempl:=CreateLazarusSrcTemplate(
'$('+ExternalMacroStart+'LazarusDir)',
'$('+ExternalMacroStart+'LCLWidgetType)');
AddTemplate(ADefTempl,true,
'NOTE: Could not create Define Template for Lazarus Sources');
end;
end;
// build define tree
c:=CodeToolBoss.ConsistencyCheck;
if c<>0 then begin
@ -6173,6 +6176,7 @@ begin
itmEnvGeneralOptions.ShortCut:=CommandToShortCut(ecEnvironmentOptions);
itmEnvEditorOptions.ShortCut:=CommandToShortCut(ecEditorOptions);
itmEnvCodeToolsOptions.ShortCut:=CommandToShortCut(ecCodeToolsOptions);
itmEnvCodeToolsDefinesEditor.ShortCut:=CommandToShortCut(ecCodeToolsDefinesEd);
itmHelpAboutLazarus.ShortCut:=CommandToShortCut(ecAboutLazarus);
end;
@ -6212,6 +6216,9 @@ end.
{ =============================================================================
$Log$
Revision 1.238 2002/03/02 11:08:36 lazarus
MG: fixed method search diff proc, fixed synedit insert in empty line, small fixes, started define editor
Revision 1.237 2002/03/01 15:51:06 lazarus
MG: added selection keys and nil operand