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 examples/trackbar.pp svneol=native#text/pascal
ide/buildlazdialog.pas svneol=native#text/pascal ide/buildlazdialog.pas svneol=native#text/pascal
ide/codetemplatedialog.pp 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/codetoolsoptions.pas svneol=native#text/pascal
ide/compiler.pp svneol=native#text/pascal ide/compiler.pp svneol=native#text/pascal
ide/compileroptions.pp svneol=native#text/pascal ide/compileroptions.pp svneol=native#text/pascal

View File

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

View File

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

View File

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

View File

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

View File

@ -2840,7 +2840,6 @@ begin
else else
fUndoList.AddChange(crPaste, Point(1, StartOfBlock.y), fUndoList.AddChange(crPaste, Point(1, StartOfBlock.y),
EndOfBlock, SelText, smNormal); EndOfBlock, SelText, smNormal);
if PasteMode = smColumn then if PasteMode = smColumn then
CaretXY := Point(Min(StartOfBlock.X, EndOfBlock.X), CaretXY := Point(Min(StartOfBlock.X, EndOfBlock.X),
Max(StartOfBlock.Y, EndOfBlock.Y) + 1); Max(StartOfBlock.Y, EndOfBlock.Y) + 1);
@ -3264,6 +3263,8 @@ var
CaretX - 1 - Length(sLeftSide)); CaretX - 1 - Length(sLeftSide));
end; end;
sRightSide := Copy(LineText, CaretX, Length(LineText) - (CaretX - 1)); 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 // step1: insert the first line of Value into current line
Start := PChar(Value); Start := PChar(Value);
P := GetEOL(Start); 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; ecEnvironmentOptions = ecUserFirst + 804;
ecEditorOptions = ecUserFirst + 805; ecEditorOptions = ecUserFirst + 805;
ecCodeToolsOptions = ecUserFirst + 806; ecCodeToolsOptions = ecUserFirst + 806;
ecCodeToolsDefinesEd = ecUserFirst + 807;
ecAboutLazarus = ecUserFirst + 900; ecAboutLazarus = ecUserFirst + 900;
@ -473,6 +474,7 @@ begin
ecFindBlockOtherEnd: Result:='find block other end'; ecFindBlockOtherEnd: Result:='find block other end';
ecFindBlockStart: Result:='find block start'; ecFindBlockStart: Result:='find block start';
// run menu
ecBuild: Result:= 'build program/project'; ecBuild: Result:= 'build program/project';
ecBuildAll: Result:= 'build all files of program/project'; ecBuildAll: Result:= 'build all files of program/project';
ecRun: Result:= 'run program'; ecRun: Result:= 'run program';
@ -481,22 +483,25 @@ begin
ecStepOver: Result:= 'step over'; ecStepOver: Result:= 'step over';
ecRunToCursor: Result:= 'run to cursor'; ecRunToCursor: Result:= 'run to cursor';
ecStopProgram: Result:= 'stop program'; ecStopProgram: Result:= 'stop program';
ecRunParameters: Result:= 'run parameters'; ecRunParameters: Result:= 'run parameters';
ecCompilerOptions: Result:= 'compiler options'; ecCompilerOptions: Result:= 'compiler options';
// tools menu
ecExtToolSettings: Result:= 'external tools settings'; ecExtToolSettings: Result:= 'external tools settings';
ecConfigBuildLazarus: Result:= 'configure build-lazarus'; ecConfigBuildLazarus: Result:= 'configure build-lazarus';
ecEnvironmentOptions: Result:= 'environment options';
ecEditorOptions: Result:= 'editor options';
ecCodeToolsOptions: Result:= 'codetools options';
// help menu
ecAboutLazarus: Result:= 'about lazarus';
ecBuildLazarus: Result:= 'build lazarus'; ecBuildLazarus: Result:= 'build lazarus';
ecExtToolFirst..ecExtToolLast: ecExtToolFirst..ecExtToolLast:
Result:='external tool '+IntToStr(cmd-ecExtToolFirst+1); 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';
else else
Result:='unknown editor command'; Result:='unknown editor command';
end; end;
@ -1196,6 +1201,7 @@ begin
Add(C,'General environment options',ecEnvironmentOptions,VK_UNKNOWN,[],VK_UNKNOWN,[]); Add(C,'General environment options',ecEnvironmentOptions,VK_UNKNOWN,[],VK_UNKNOWN,[]);
Add(C,'Editor options',ecEditorOptions,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 options',ecCodeToolsOptions,VK_UNKNOWN,[],VK_UNKNOWN,[]);
Add(C,'CodeTools defines editor',ecCodeToolsDefinesEd,VK_UNKNOWN,[],VK_UNKNOWN,[]);
// help menu // help menu
C:=Categories[AddCategory('HelpMenu','Help menu commands')]; C:=Categories[AddCategory('HelpMenu','Help menu commands')];

View File

@ -42,7 +42,7 @@ uses
Debugger, DBGOutputForm, GDBDebugger, RunParamsOpts, ExtToolDialog, Debugger, DBGOutputForm, GDBDebugger, RunParamsOpts, ExtToolDialog,
MacroPromptDlg, LMessages, ProjectDefs, Watchesdlg, BreakPointsdlg, ColumnDlg, MacroPromptDlg, LMessages, ProjectDefs, Watchesdlg, BreakPointsdlg, ColumnDlg,
OutputFilter, BuildLazDialog, MiscOptions, EditDefineTree, CodeToolsOptions, OutputFilter, BuildLazDialog, MiscOptions, EditDefineTree, CodeToolsOptions,
TypInfo, IDEOptionDefs{, CodeToolsDefines}; TypInfo, IDEOptionDefs, CodeToolsDefines;
const const
Version_String = '0.8.2 alpha'; Version_String = '0.8.2 alpha';
@ -166,6 +166,7 @@ type
itmEnvGeneralOptions: TMenuItem; itmEnvGeneralOptions: TMenuItem;
itmEnvEditorOptions: TMenuItem; itmEnvEditorOptions: TMenuItem;
itmEnvCodeToolsOptions: TMenuItem; itmEnvCodeToolsOptions: TMenuItem;
itmEnvCodeToolsDefinesEditor: TMenuItem;
itmHelpAboutLazarus: TMenuItem; itmHelpAboutLazarus: TMenuItem;
@ -175,10 +176,10 @@ type
HintWindow1 : THintWindow; HintWindow1 : THintWindow;
// event handlers // event handlers
procedure FormShow(Sender : TObject); //procedure FormShow(Sender : TObject);
procedure FormClose(Sender : TObject; var Action: TCloseAction); procedure FormClose(Sender : TObject; var Action: TCloseAction);
procedure FormCloseQuery(Sender : TObject; var CanClose: boolean); 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 MainMouseMoved(Sender: TObject; Shift: TShiftState; X,Y: Integer);
procedure MainMouseDown(Sender: TObject; Button: TMouseButton; procedure MainMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X,Y: Integer); Shift: TShiftState; X,Y: Integer);
@ -257,6 +258,7 @@ type
procedure mnuEnvGeneralOptionsClicked(Sender : TObject); procedure mnuEnvGeneralOptionsClicked(Sender : TObject);
procedure mnuEnvEditorOptionsClicked(Sender : TObject); procedure mnuEnvEditorOptionsClicked(Sender : TObject);
procedure mnuEnvCodeToolsOptionsClicked(Sender : TObject); procedure mnuEnvCodeToolsOptionsClicked(Sender : TObject);
procedure mnuEnvCodeToolsDefinesEditorClicked(Sender : TObject);
// help menu // help menu
procedure mnuHelpAboutLazarusClicked(Sender : TObject); procedure mnuHelpAboutLazarusClicked(Sender : TObject);
@ -715,7 +717,7 @@ begin
HintWindow1.AutoHide := False; HintWindow1.AutoHide := False;
// MainIDE form events // MainIDE form events
OnShow := @FormShow; //OnShow := @FormShow;
OnClose := @FormClose; OnClose := @FormClose;
OnCloseQuery := @FormCloseQuery; OnCloseQuery := @FormCloseQuery;
@ -952,17 +954,7 @@ Begin
end; end;
Procedure TMainIDE.FormPaint(Sender : TObject);
begin
end;
{------------------------------------------------------------------------------} {------------------------------------------------------------------------------}
procedure TMainIDE.FormShow(Sender : TObject);
Begin
end;
procedure TMainIDE.FormClose(Sender : TObject; var Action: TCloseAction); procedure TMainIDE.FormClose(Sender : TObject; var Action: TCloseAction);
begin begin
SaveEnvironment; SaveEnvironment;
@ -1625,6 +1617,12 @@ begin
itmEnvCodeToolsOptions.OnCLick := @mnuEnvCodeToolsOptionsClicked; itmEnvCodeToolsOptions.OnCLick := @mnuEnvCodeToolsOptionsClicked;
mnuEnvironment.Add(itmEnvCodeToolsOptions); mnuEnvironment.Add(itmEnvCodeToolsOptions);
itmEnvCodeToolsDefinesEditor := TMenuItem.Create(nil);
itmEnvCodeToolsDefinesEditor.Name:='itmEnvCodeToolsDefinesEditor';
itmEnvCodeToolsDefinesEditor.Caption := 'CodeTools defines editor';
itmEnvCodeToolsDefinesEditor.OnCLick := @mnuEnvCodeToolsDefinesEditorClicked;
mnuEnvironment.Add(itmEnvCodeToolsDefinesEditor);
//-------------- //--------------
// Help // Help
//-------------- //--------------
@ -2357,6 +2355,11 @@ begin
ShowCodeToolsOptions(CodeToolsOpts,@SourceNoteBook.GetSynEditPreviewSettings); ShowCodeToolsOptions(CodeToolsOpts,@SourceNoteBook.GetSynEditPreviewSettings);
end; end;
procedure TMainIDE.mnuEnvCodeToolsDefinesEditorClicked(Sender : TObject);
begin
ShowCodeToolsDefinesEditor(CodeToolBoss,CodeToolsOpts);
end;
procedure TMainIDE.SaveEnvironment; procedure TMainIDE.SaveEnvironment;
begin begin
SaveDesktopSettings(EnvironmentOptions); SaveDesktopSettings(EnvironmentOptions);
@ -6173,6 +6176,7 @@ begin
itmEnvGeneralOptions.ShortCut:=CommandToShortCut(ecEnvironmentOptions); itmEnvGeneralOptions.ShortCut:=CommandToShortCut(ecEnvironmentOptions);
itmEnvEditorOptions.ShortCut:=CommandToShortCut(ecEditorOptions); itmEnvEditorOptions.ShortCut:=CommandToShortCut(ecEditorOptions);
itmEnvCodeToolsOptions.ShortCut:=CommandToShortCut(ecCodeToolsOptions); itmEnvCodeToolsOptions.ShortCut:=CommandToShortCut(ecCodeToolsOptions);
itmEnvCodeToolsDefinesEditor.ShortCut:=CommandToShortCut(ecCodeToolsDefinesEd);
itmHelpAboutLazarus.ShortCut:=CommandToShortCut(ecAboutLazarus); itmHelpAboutLazarus.ShortCut:=CommandToShortCut(ecAboutLazarus);
end; end;
@ -6212,6 +6216,9 @@ end.
{ ============================================================================= { =============================================================================
$Log$ $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 Revision 1.237 2002/03/01 15:51:06 lazarus
MG: added selection keys and nil operand MG: added selection keys and nil operand