mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 05:29:29 +02:00
MG: updates for codetools defines editor
git-svn-id: trunk@1478 -
This commit is contained in:
parent
64825ceb38
commit
43f4a972db
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -208,7 +208,7 @@ images/codetoolsdefines/ctdefinestate_autoproj_22x22.xpm -text svneol=native#ima
|
|||||||
images/codetoolsdefines/ctdefinestate_none_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/ctdefinestate_none_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/codetoolsdefines/ctdefinestate_projspec_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/ctdefinestate_projspec_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/codetoolsdefines/define_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/define_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/codetoolsdefines/defineall_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/definerecurse_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/codetoolsdefines/directory_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/directory_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/codetoolsdefines/else_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/else_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/codetoolsdefines/elseif_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/elseif_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
@ -216,6 +216,8 @@ images/codetoolsdefines/if_22x22.xpm -text svneol=native#image/x-xpixmap
|
|||||||
images/codetoolsdefines/ifdef_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/ifdef_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/codetoolsdefines/ifndef_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/ifndef_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/codetoolsdefines/undefine_22x22.xpm -text svneol=native#image/x-xpixmap
|
images/codetoolsdefines/undefine_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
|
images/codetoolsdefines/undefineall_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
|
images/codetoolsdefines/undefinerecurse_22x22.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/color.ico -text svneol=unset#image/x-icon
|
images/color.ico -text svneol=unset#image/x-icon
|
||||||
images/color.xpm -text svneol=native#image/x-xpixmap
|
images/color.xpm -text svneol=native#image/x-xpixmap
|
||||||
images/components/default.ico -text svneol=unset#image/x-icon
|
images/components/default.ico -text svneol=unset#image/x-icon
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
The information is stored in a TDefineTree, which contains nodes of type
|
The information is stored in a TDefineTree, which contains nodes of type
|
||||||
TDefineTemplate. Each TDefineTemplate is a tree of defines, undefines,
|
TDefineTemplate. Each TDefineTemplate is a tree of defines, undefines,
|
||||||
definealls, ifdefs, ifndefs, elses, elseifs and directories.
|
definerecurses, ifdefs, ifndefs, elses, elseifs and directories.
|
||||||
|
|
||||||
Simply give a TDefineTree a directory and it will return all predefined
|
Simply give a TDefineTree a directory and it will return all predefined
|
||||||
variables for that directory. These values can be used to parse a unit in
|
variables for that directory. These values can be used to parse a unit in
|
||||||
@ -54,9 +54,9 @@ uses
|
|||||||
KeywordFuncLists, FileProcs;
|
KeywordFuncLists, FileProcs;
|
||||||
|
|
||||||
const
|
const
|
||||||
ExternalMacroStart: char = '#'; // !!! it is hardcoded in linkscanner.pas
|
ExternalMacroStart: char = '#'; // !!! this is hardcoded in linkscanner.pas
|
||||||
{$ifdef win32}
|
{$ifdef win32}
|
||||||
SpecialChar: char = '/';
|
SpecialChar: char = '/'; // used to use PathDelim, e.g. /\
|
||||||
{$else}
|
{$else}
|
||||||
SpecialChar: char = '\';
|
SpecialChar: char = '\';
|
||||||
{$endif}
|
{$endif}
|
||||||
@ -89,9 +89,20 @@ type
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// TDefineTemplate is a list of TDefineEntry
|
// TDefineTemplate is a list of TDefineEntry
|
||||||
// TDefineEntry stores a define action, the variablename and the value
|
// TDefineEntry stores a define action, the variablename and the value
|
||||||
TDefineAction = (da_None, da_Block, da_Define, da_Undefine, da_DefineAll,
|
TDefineAction = (da_None, da_Block, da_Define, da_DefineRecurse, da_Undefine,
|
||||||
da_If, da_IfDef, da_IfNDef, da_ElseIf, da_Else, da_Directory);
|
da_UndefineRecurse, da_UndefineAll, da_If, da_IfDef, da_IfNDef, da_ElseIf,
|
||||||
|
da_Else, da_Directory);
|
||||||
|
|
||||||
|
const
|
||||||
|
DefineActionBlocks = [da_Block, da_Directory, da_If, da_IfDef, da_IfNDef,
|
||||||
|
da_ElseIf, da_Else];
|
||||||
|
DefineActionNames: array[TDefineAction] of string = (
|
||||||
|
'None', 'Block', 'Define', 'DefineRecurse', 'Undefine', 'UndefineRecurse',
|
||||||
|
'UndefineAll', 'If', 'IfDef', 'IfNDef', 'ElseIf', 'Else', 'Directory'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
TDefineTemplateFlag = (dtfAutoGenerated, dtfProjectSpecific);
|
TDefineTemplateFlag = (dtfAutoGenerated, dtfProjectSpecific);
|
||||||
TDefineTemplateFlags = set of TDefineTemplateFlag;
|
TDefineTemplateFlags = set of TDefineTemplateFlag;
|
||||||
|
|
||||||
@ -117,12 +128,15 @@ type
|
|||||||
property FirstChild: TDefineTemplate read FFirstChild;
|
property FirstChild: TDefineTemplate read FFirstChild;
|
||||||
property LastChild: TDefineTemplate read FLastChild;
|
property LastChild: TDefineTemplate read FLastChild;
|
||||||
procedure AddChild(ADefineTemplate: TDefineTemplate);
|
procedure AddChild(ADefineTemplate: TDefineTemplate);
|
||||||
procedure InsertAfter(APrior: TDefineTemplate);
|
procedure InsertBehind(APrior: TDefineTemplate);
|
||||||
|
procedure InsertInFront(ANext: TDefineTemplate);
|
||||||
procedure Assign(ADefineTemplate: TDefineTemplate;
|
procedure Assign(ADefineTemplate: TDefineTemplate;
|
||||||
WithSubNodes, WithNextSiblings: boolean); virtual;
|
WithSubNodes, WithNextSiblings: boolean); virtual;
|
||||||
function IsEqual(ADefineTemplate: TDefineTemplate;
|
function IsEqual(ADefineTemplate: TDefineTemplate;
|
||||||
CheckSubNodes, CheckNextSiblings: boolean): boolean;
|
CheckSubNodes, CheckNextSiblings: boolean): boolean;
|
||||||
function FindChildByName(const AName: string): TDefineTemplate;
|
function FindChildByName(const AName: string): TDefineTemplate;
|
||||||
|
function FindByName(const AName: string;
|
||||||
|
WithSubChilds, WithNextSiblings: boolean): 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);
|
||||||
@ -173,13 +187,15 @@ type
|
|||||||
read FFirstDefineTemplate write FFirstDefineTemplate;
|
read FFirstDefineTemplate write FFirstDefineTemplate;
|
||||||
procedure AddFirst(ADefineTemplate: TDefineTemplate);
|
procedure AddFirst(ADefineTemplate: TDefineTemplate);
|
||||||
procedure Add(ADefineTemplate: TDefineTemplate);
|
procedure Add(ADefineTemplate: TDefineTemplate);
|
||||||
function FindDefineTemplateByName(const AName: string): TDefineTemplate;
|
function FindDefineTemplateByName(const AName: string;
|
||||||
procedure ReplaceSameName(ADefineTemplate: TDefineTemplate);
|
OnlyRoots: boolean): TDefineTemplate;
|
||||||
procedure ReplaceSameNameAddFirst(ADefineTemplate: TDefineTemplate);
|
procedure ReplaceRootSameName(ADefineTemplate: TDefineTemplate);
|
||||||
procedure RemoveDefineTemplateByName(const AName: string);
|
procedure ReplaceRootSameNameAddFirst(ADefineTemplate: TDefineTemplate);
|
||||||
|
procedure RemoveRootDefineTemplateByName(const AName: string);
|
||||||
property OnReadValue: TOnReadValue read FOnReadValue write FOnReadValue;
|
property OnReadValue: TOnReadValue read FOnReadValue write FOnReadValue;
|
||||||
property ErrorTemplate: TDefineTemplate read FErrorTemplate;
|
property ErrorTemplate: TDefineTemplate read FErrorTemplate;
|
||||||
property ErrorDescription: string read FErrorDescription;
|
property ErrorDescription: string read FErrorDescription;
|
||||||
|
function ExtractDefineTree(ProjectSpecific: boolean): TDefineTree;
|
||||||
function LoadFromXMLConfig(XMLConfig: TXMLConfig;
|
function LoadFromXMLConfig(XMLConfig: TXMLConfig;
|
||||||
const Path: string): boolean;
|
const Path: string): boolean;
|
||||||
function SaveToXMLConfig(XMLConfig: TXMLConfig;
|
function SaveToXMLConfig(XMLConfig: TXMLConfig;
|
||||||
@ -226,6 +242,8 @@ const
|
|||||||
'AutoGenerated', 'ProjectSpecific'
|
'AutoGenerated', 'ProjectSpecific'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
function DefineActionNameToAction(const s: string): TDefineAction;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -240,6 +258,13 @@ type
|
|||||||
|
|
||||||
// some useful functions
|
// some useful functions
|
||||||
|
|
||||||
|
function DefineActionNameToAction(const s: string): TDefineAction;
|
||||||
|
begin
|
||||||
|
for Result:=Low(TDefineAction) to High(TDefineAction) do
|
||||||
|
if AnsiCompareText(s,DefineActionNames[Result])=0 then exit;
|
||||||
|
Result:=da_None;
|
||||||
|
end;
|
||||||
|
|
||||||
function CompareFilenames(const FileName1, Filename2: string): integer;
|
function CompareFilenames(const FileName1, Filename2: string): integer;
|
||||||
begin
|
begin
|
||||||
{$ifdef CaseInsensitiveFilenames}
|
{$ifdef CaseInsensitiveFilenames}
|
||||||
@ -393,38 +418,75 @@ begin
|
|||||||
ADefineTemplate:=ADefineTemplate.Next;
|
ADefineTemplate:=ADefineTemplate.Next;
|
||||||
end;
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
ADefineTemplate.InsertAfter(LastChild);
|
ADefineTemplate.InsertBehind(LastChild);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDefineTemplate.InsertAfter(APrior: TDefineTemplate);
|
procedure TDefineTemplate.InsertBehind(APrior: TDefineTemplate);
|
||||||
var ANode, LastSibling: TDefineTemplate;
|
// insert this and all next siblings behind APrior
|
||||||
|
var ANode, LastSibling, NewParent: TDefineTemplate;
|
||||||
begin
|
begin
|
||||||
if APrior=nil then exit;
|
if APrior=nil then exit;
|
||||||
|
NewParent:=APrior.Parent;
|
||||||
if FParent<>nil then begin
|
if FParent<>nil then begin
|
||||||
ANode:=Self;
|
ANode:=Self;
|
||||||
while ANode<>nil do begin
|
while ANode<>nil do begin
|
||||||
dec(ANode.Parent.FChildCount);
|
if ANode=APrior then raise Exception.Create('internal error: '
|
||||||
|
+'TDefineTemplate.InsertBehind: APrior=ANode');
|
||||||
|
dec(FParent.FChildCount);
|
||||||
ANode.FParent:=nil;
|
ANode.FParent:=nil;
|
||||||
ANode:=ANode.Next;
|
ANode:=ANode.Next;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
LastSibling:=Self;
|
LastSibling:=Self;
|
||||||
while LastSibling.Next<>nil do LastSibling:=LastSibling.Next;
|
while LastSibling.Next<>nil do LastSibling:=LastSibling.Next;
|
||||||
FPrior:=APrior;
|
FParent:=NewParent;
|
||||||
LastSibling.FNext:=APrior.Next;
|
|
||||||
APrior.FNext:=Self;
|
|
||||||
if LastSibling.Next<>nil then LastSibling.Next.FPrior:=LastSibling;
|
|
||||||
FParent:=APrior.Parent;
|
|
||||||
if Parent<>nil then begin
|
if Parent<>nil then begin
|
||||||
ANode:=Self;
|
ANode:=Self;
|
||||||
while ANode<>nil do begin
|
while (ANode<>nil) do begin
|
||||||
ANode.FParent:=Parent;
|
ANode.FParent:=Parent;
|
||||||
inc(ANode.Parent.FChildCount);
|
inc(Parent.FChildCount);
|
||||||
ANode:=ANode.Next;
|
ANode:=ANode.Next;
|
||||||
end;
|
end;
|
||||||
if Parent.LastChild=APrior then Parent.FLastChild:=LastSibling;
|
if Parent.LastChild=APrior then Parent.FLastChild:=LastSibling;
|
||||||
end;
|
end;
|
||||||
|
FPrior:=APrior;
|
||||||
|
LastSibling.FNext:=APrior.Next;
|
||||||
|
APrior.FNext:=Self;
|
||||||
|
if LastSibling.Next<>nil then LastSibling.Next.FPrior:=LastSibling;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TDefineTemplate.InsertInFront(ANext: TDefineTemplate);
|
||||||
|
// insert this and all next siblings in front of ANext
|
||||||
|
var ANode, LastSibling: TDefineTemplate;
|
||||||
|
begin
|
||||||
|
if ANext=nil then exit;
|
||||||
|
if FParent<>nil then begin
|
||||||
|
ANode:=Self;
|
||||||
|
while ANode<>nil do begin
|
||||||
|
if ANode=ANext then raise Exception.Create('internal error: '
|
||||||
|
+'TDefineTemplate.InsertInFront: ANext=ANode');
|
||||||
|
dec(FParent.FChildCount);
|
||||||
|
ANode.FParent:=nil;
|
||||||
|
ANode:=ANode.Next;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
LastSibling:=Self;
|
||||||
|
while LastSibling.Next<>nil do LastSibling:=LastSibling.Next;
|
||||||
|
FParent:=ANext.Parent;
|
||||||
|
if Parent<>nil then begin
|
||||||
|
ANode:=Self;
|
||||||
|
while ANode<>nil do begin
|
||||||
|
ANode.FParent:=Parent;
|
||||||
|
inc(Parent.FChildCount);
|
||||||
|
ANode:=ANode.Next;
|
||||||
|
end;
|
||||||
|
if Parent.FirstChild=ANext then Parent.FFirstChild:=Self;
|
||||||
|
end;
|
||||||
|
FPrior:=ANext.Prior;
|
||||||
|
if Prior<>nil then Prior.FNext:=Self;
|
||||||
|
LastSibling.FNext:=ANext;
|
||||||
|
ANext.FPrior:=LastSibling;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDefineTemplate.Assign(ADefineTemplate: TDefineTemplate;
|
procedure TDefineTemplate.Assign(ADefineTemplate: TDefineTemplate;
|
||||||
@ -452,7 +514,7 @@ begin
|
|||||||
NextTemplate:=ADefineTemplate.Next;
|
NextTemplate:=ADefineTemplate.Next;
|
||||||
if NextTemplate<>nil then begin
|
if NextTemplate<>nil then begin
|
||||||
CopyTemplate:=TDefineTemplate.Create;
|
CopyTemplate:=TDefineTemplate.Create;
|
||||||
CopyTemplate.InsertAfter(Self);
|
CopyTemplate.InsertBehind(Self);
|
||||||
CopyTemplate.Assign(NextTemplate,WithSubNodes,true);
|
CopyTemplate.Assign(NextTemplate,WithSubNodes,true);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -516,13 +578,13 @@ end;
|
|||||||
|
|
||||||
function TDefineTemplate.LoadFromXMLConfig(XMLConfig: TXMLConfig;
|
function TDefineTemplate.LoadFromXMLConfig(XMLConfig: TXMLConfig;
|
||||||
const Path: string): boolean;
|
const Path: string): boolean;
|
||||||
var ActionStr, IndexedPath: string;
|
var IndexedPath: string;
|
||||||
i, LvlCount: integer;
|
i, LvlCount: integer;
|
||||||
DefTempl, LastDefTempl: TDefineTemplate;
|
DefTempl, LastDefTempl: TDefineTemplate;
|
||||||
f: TDefineTemplateFlag;
|
f: TDefineTemplateFlag;
|
||||||
begin
|
begin
|
||||||
Clear;
|
Clear;
|
||||||
LvlCount:=XMLConfig.GetValue(Path+'/Count/Value',0);
|
LvlCount:=XMLConfig.GetValue(Path+'Count/Value',0);
|
||||||
DefTempl:=nil;
|
DefTempl:=nil;
|
||||||
for i:=0 to LvlCount-1 do begin
|
for i:=0 to LvlCount-1 do begin
|
||||||
if i=0 then begin
|
if i=0 then begin
|
||||||
@ -538,43 +600,22 @@ begin
|
|||||||
inc(DefTempl.FParent.FChildCount);
|
inc(DefTempl.FParent.FChildCount);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
IndexedPath:=Path+'/'+IntToStr(i);
|
IndexedPath:=Path+IntToStr(i)+'/';
|
||||||
DefTempl.Name:=XMLConfig.GetValue(IndexedPath+'/Name/Value','no name');
|
DefTempl.Name:=XMLConfig.GetValue(IndexedPath+'Name/Value','no name');
|
||||||
DefTempl.Description:=XMLConfig.GetValue(IndexedPath+'/Description/Value','');
|
DefTempl.Description:=XMLConfig.GetValue(IndexedPath+'Description/Value','');
|
||||||
DefTempl.Value:=XMLConfig.GetValue(IndexedPath+'/Value/Value','');
|
DefTempl.Value:=XMLConfig.GetValue(IndexedPath+'Value/Value','');
|
||||||
DefTempl.Variable:=XMLConfig.GetValue(IndexedPath+'/Variable/Value','');
|
DefTempl.Variable:=XMLConfig.GetValue(IndexedPath+'Variable/Value','');
|
||||||
ActionStr:=UpperCaseStr(XMLConfig.GetValue(IndexedPath+'/Action/Value',''));
|
DefTempl.Action:=DefineActionNameToAction(
|
||||||
if ActionStr='BLOCK' then
|
XMLConfig.GetValue(IndexedPath+'Action/Value',''));
|
||||||
Action:=da_Block
|
|
||||||
else if ActionStr='DEFINE' then
|
|
||||||
Action:=da_Define
|
|
||||||
else if ActionStr='UNDEFINE' then
|
|
||||||
Action:=da_Undefine
|
|
||||||
else if ActionStr='DEFINEALL' then
|
|
||||||
Action:=da_DefineAll
|
|
||||||
else if ActionStr='IF' then
|
|
||||||
Action:=da_If
|
|
||||||
else if ActionStr='IFDEF' then
|
|
||||||
Action:=da_IfDef
|
|
||||||
else if ActionStr='IFNDEF' then
|
|
||||||
Action:=da_IfNDef
|
|
||||||
else if ActionStr='ELSEIF' then
|
|
||||||
Action:=da_ElseIf
|
|
||||||
else if ActionStr='ELSE' then
|
|
||||||
Action:=da_Else
|
|
||||||
else if ActionStr='DIRECTORY' then
|
|
||||||
Action:=da_Directory
|
|
||||||
else
|
|
||||||
Action:=da_None;
|
|
||||||
Flags:=[];
|
Flags:=[];
|
||||||
for f:=Low(TDefineTemplateFlag) to High(TDefineTemplateFlag) do begin
|
for f:=Low(TDefineTemplateFlag) to High(TDefineTemplateFlag) do begin
|
||||||
if XMLConfig.GetValue(IndexedPath+'/Flags/'+DefineTemplateFlagNames[f]
|
if XMLConfig.GetValue(IndexedPath+'Flags/'+DefineTemplateFlagNames[f]
|
||||||
+'/Value',false)
|
+'/Value',false)
|
||||||
then
|
then
|
||||||
Include(Flags,f);
|
Include(Flags,f);
|
||||||
end;
|
end;
|
||||||
// load childs
|
// load childs
|
||||||
if XMLConfig.GetValue(IndexedPath+'/Count/Value',0)>0 then begin
|
if XMLConfig.GetValue(IndexedPath+'Count/Value',0)>0 then begin
|
||||||
FFirstChild:=TDefineTemplate.Create;
|
FFirstChild:=TDefineTemplate.Create;
|
||||||
if not FFirstChild.LoadFromXMLConfig(XMLConfig,IndexedPath) then begin
|
if not FFirstChild.LoadFromXMLConfig(XMLConfig,IndexedPath) then begin
|
||||||
Result:=false; exit;
|
Result:=false; exit;
|
||||||
@ -586,7 +627,7 @@ end;
|
|||||||
|
|
||||||
procedure TDefineTemplate.SaveToXMLConfig(XMLConfig: TXMLConfig;
|
procedure TDefineTemplate.SaveToXMLConfig(XMLConfig: TXMLConfig;
|
||||||
const Path: string);
|
const Path: string);
|
||||||
var ActionStr, IndexedPath: string;
|
var IndexedPath: string;
|
||||||
Index, LvlCount: integer;
|
Index, LvlCount: integer;
|
||||||
DefTempl: TDefineTemplate;
|
DefTempl: TDefineTemplate;
|
||||||
f: TDefineTemplateFlag;
|
f: TDefineTemplateFlag;
|
||||||
@ -601,28 +642,15 @@ begin
|
|||||||
DefTempl:=Self;
|
DefTempl:=Self;
|
||||||
Index:=1;
|
Index:=1;
|
||||||
repeat
|
repeat
|
||||||
IndexedPath:=Path+'/'+IntToStr(Index);
|
IndexedPath:=Path+IntToStr(Index)+'/';
|
||||||
XMLConfig.SetValue(IndexedPath+'/Name/Value',DefTempl.Name);
|
XMLConfig.SetValue(IndexedPath+'Name/Value',DefTempl.Name);
|
||||||
XMLConfig.SetValue(IndexedPath+'/Description/Value',DefTempl.Description);
|
XMLConfig.SetValue(IndexedPath+'Description/Value',DefTempl.Description);
|
||||||
XMLConfig.SetValue(IndexedPath+'/Value/Value',DefTempl.Value);
|
XMLConfig.SetValue(IndexedPath+'Value/Value',DefTempl.Value);
|
||||||
XMLConfig.SetValue(IndexedPath+'/Variable/Value',DefTempl.Variable);
|
XMLConfig.SetValue(IndexedPath+'Variable/Value',DefTempl.Variable);
|
||||||
case DefTempl.Action of
|
XMLConfig.SetValue(IndexedPath+'Action/Value',
|
||||||
da_Block : ActionStr:='Block';
|
DefineActionNames[DefTempl.Action]);
|
||||||
da_Define : ActionStr:='Define';
|
|
||||||
da_Undefine : ActionStr:='Undefine';
|
|
||||||
da_DefineAll : ActionStr:='DefineAll';
|
|
||||||
da_If : ActionStr:='If';
|
|
||||||
da_IfDef : ActionStr:='IfDef';
|
|
||||||
da_IfNDef : ActionStr:='IfNDef';
|
|
||||||
da_ElseIf : ActionStr:='ElseIf';
|
|
||||||
da_Else : ActionStr:='Else';
|
|
||||||
da_Directory : ActionStr:='Directory';
|
|
||||||
else
|
|
||||||
ActionStr:='None';
|
|
||||||
end;
|
|
||||||
XMLConfig.SetValue(IndexedPath+'/Action/Value',ActionStr);
|
|
||||||
for f:=Low(TDefineTemplateFlag) to High(TDefineTemplateFlag) do begin
|
for f:=Low(TDefineTemplateFlag) to High(TDefineTemplateFlag) do begin
|
||||||
XMLConfig.SetValue(IndexedPath+'/Flags/'+DefineTemplateFlagNames[f]
|
XMLConfig.SetValue(IndexedPath+'Flags/'+DefineTemplateFlagNames[f]
|
||||||
+'/Value',f in Flags);
|
+'/Value',f in Flags);
|
||||||
end;
|
end;
|
||||||
// save childs
|
// save childs
|
||||||
@ -683,20 +711,7 @@ procedure TDefineTemplate.WriteDebugReport;
|
|||||||
var ActionStr: string;
|
var ActionStr: string;
|
||||||
begin
|
begin
|
||||||
if ANode=nil then exit;
|
if ANode=nil then exit;
|
||||||
case ANode.Action of
|
ActionStr:=DefineActionNames[ANode.Action];
|
||||||
da_Block : ActionStr:='Block';
|
|
||||||
da_Define : ActionStr:='Define';
|
|
||||||
da_Undefine : ActionStr:='Undefine';
|
|
||||||
da_DefineAll : ActionStr:='DefineAll';
|
|
||||||
da_If : ActionStr:='If';
|
|
||||||
da_IfDef : ActionStr:='IfDef';
|
|
||||||
da_IfNDef : ActionStr:='IfNDef';
|
|
||||||
da_ElseIf : ActionStr:='ElseIf';
|
|
||||||
da_Else : ActionStr:='Else';
|
|
||||||
da_Directory : ActionStr:='Directory';
|
|
||||||
else
|
|
||||||
ActionStr:='None';
|
|
||||||
end;
|
|
||||||
writeln(Prefix,'Self=',HexStr(Cardinal(ANode),8),
|
writeln(Prefix,'Self=',HexStr(Cardinal(ANode),8),
|
||||||
' Consistency=',ANode.ConsistencyCheck,
|
' Consistency=',ANode.ConsistencyCheck,
|
||||||
' Next=',HexStr(Cardinal(ANode.Next),8),
|
' Next=',HexStr(Cardinal(ANode.Next),8),
|
||||||
@ -778,10 +793,31 @@ end;
|
|||||||
|
|
||||||
function TDefineTemplate.FindChildByName(const AName: string): TDefineTemplate;
|
function TDefineTemplate.FindChildByName(const AName: string): TDefineTemplate;
|
||||||
begin
|
begin
|
||||||
Result:=FirstChild;
|
if FirstChild<>nil then begin
|
||||||
while Result<>nil do begin
|
Result:=FirstChild.FindByName(AName,false,true)
|
||||||
if AnsiCompareText(Result.Name,AName)=0 then exit;
|
end else
|
||||||
Result:=Result.Next;
|
Result:=nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDefineTemplate.FindByName(const AName: string; WithSubChilds,
|
||||||
|
WithNextSiblings: boolean): TDefineTemplate;
|
||||||
|
var ANode: TDefineTemplate;
|
||||||
|
begin
|
||||||
|
if AnsiCompareText(AName,Name)=0 then begin
|
||||||
|
Result:=Self;
|
||||||
|
end else begin
|
||||||
|
if WithSubChilds and (FirstChild<>nil) then
|
||||||
|
Result:=FirstChild.FindByName(AName,true,true)
|
||||||
|
else
|
||||||
|
Result:=nil;
|
||||||
|
if (Result=nil) and WithNextSiblings then begin
|
||||||
|
ANode:=Next;
|
||||||
|
while (ANode<>nil) do begin
|
||||||
|
Result:=ANode.FindByName(AName,WithSubChilds,false);
|
||||||
|
if Result<>nil then break;
|
||||||
|
ANode:=ANode.Next;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1042,30 +1078,36 @@ var
|
|||||||
case DefTempl.Action of
|
case DefTempl.Action of
|
||||||
da_Block:
|
da_Block:
|
||||||
// calculate children
|
// calculate children
|
||||||
begin
|
CalculateTemplate(DefTempl.FirstChild,CurPath);
|
||||||
CalculateTemplate(DefTempl.FirstChild,CurPath);
|
|
||||||
end;
|
|
||||||
da_Define:
|
da_Define:
|
||||||
// Define for a single Directory (not SubDirs)
|
// Define for a single Directory (not SubDirs)
|
||||||
begin
|
if FilenameIsMatching(CurPath,ExpandedDirectory,true) then begin
|
||||||
if FilenameIsMatching(CurPath,ExpandedDirectory,true) then begin
|
|
||||||
DirDef.Values.Variables[DefTempl.Variable]:=
|
|
||||||
ReadValue(DefTempl.Value);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
da_Undefine:
|
|
||||||
// Undefine for a single Directory (not SubDirs)
|
|
||||||
begin
|
|
||||||
if FilenameIsMatching(CurPath,ExpandedDirectory,true) then begin
|
|
||||||
DirDef.Values.Undefine(DefTempl.Variable);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
da_DefineAll:
|
|
||||||
begin
|
|
||||||
// Define for current and sub directories
|
|
||||||
DirDef.Values.Variables[DefTempl.Variable]:=
|
DirDef.Values.Variables[DefTempl.Variable]:=
|
||||||
ReadValue(DefTempl.Value);
|
ReadValue(DefTempl.Value);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
da_DefineRecurse:
|
||||||
|
// Define for current and sub directories
|
||||||
|
DirDef.Values.Variables[DefTempl.Variable]:=
|
||||||
|
ReadValue(DefTempl.Value);
|
||||||
|
|
||||||
|
da_Undefine:
|
||||||
|
// Undefine for a single Directory (not SubDirs)
|
||||||
|
if FilenameIsMatching(CurPath,ExpandedDirectory,true) then begin
|
||||||
|
DirDef.Values.Undefine(DefTempl.Variable);
|
||||||
|
end;
|
||||||
|
|
||||||
|
da_UndefineRecurse:
|
||||||
|
// Undefine for current and sub directories
|
||||||
|
DirDef.Values.Undefine(DefTempl.Variable);
|
||||||
|
|
||||||
|
da_UndefineAll:
|
||||||
|
// Undefine every value for current and sub directories
|
||||||
|
begin
|
||||||
|
DirDef.Values.Clear;
|
||||||
|
end;
|
||||||
|
|
||||||
da_If, da_ElseIf:
|
da_If, da_ElseIf:
|
||||||
begin
|
begin
|
||||||
// test expression in value
|
// test expression in value
|
||||||
@ -1080,22 +1122,19 @@ var
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
da_IfDef:
|
da_IfDef:
|
||||||
begin
|
// test if variable is defined
|
||||||
// test if variable is defined
|
if DirDef.Values.IsDefined(DefTempl.Variable) then
|
||||||
if DirDef.Values.IsDefined(DefTempl.Variable) then
|
CalculateIfChilds;
|
||||||
CalculateIfChilds;
|
|
||||||
end;
|
|
||||||
da_IfNDef:
|
da_IfNDef:
|
||||||
begin
|
// test if variable is not defined
|
||||||
// test if variable is not defined
|
if not DirDef.Values.IsDefined(DefTempl.Variable) then
|
||||||
if not DirDef.Values.IsDefined(DefTempl.Variable) then
|
CalculateIfChilds;
|
||||||
CalculateIfChilds;
|
|
||||||
end;
|
|
||||||
da_Else:
|
da_Else:
|
||||||
begin
|
// execute childs
|
||||||
// execute childs
|
CalculateTemplate(DefTempl.FirstChild,CurPath);
|
||||||
CalculateTemplate(DefTempl.FirstChild,CurPath);
|
|
||||||
end;
|
|
||||||
da_Directory:
|
da_Directory:
|
||||||
begin
|
begin
|
||||||
// template for a sub directory
|
// template for a sub directory
|
||||||
@ -1164,7 +1203,7 @@ begin
|
|||||||
LastDefTempl:=RootTemplate;
|
LastDefTempl:=RootTemplate;
|
||||||
while LastDefTempl.Next<>nil do
|
while LastDefTempl.Next<>nil do
|
||||||
LastDefTempl:=LastDefTempl.Next;
|
LastDefTempl:=LastDefTempl.Next;
|
||||||
ADefineTemplate.InsertAfter(LastDefTempl);
|
ADefineTemplate.InsertBehind(LastDefTempl);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1175,23 +1214,25 @@ begin
|
|||||||
if RootTemplate=nil then
|
if RootTemplate=nil then
|
||||||
RootTemplate:=ADefineTemplate
|
RootTemplate:=ADefineTemplate
|
||||||
else begin
|
else begin
|
||||||
RootTemplate.InsertAfter(ADefineTemplate);
|
RootTemplate.InsertBehind(ADefineTemplate);
|
||||||
RootTemplate:=ADefineTemplate;
|
RootTemplate:=ADefineTemplate;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TDefineTree.FindDefineTemplateByName(
|
function TDefineTree.FindDefineTemplateByName(
|
||||||
const AName: string): TDefineTemplate;
|
const AName: string; OnlyRoots: boolean): TDefineTemplate;
|
||||||
begin
|
begin
|
||||||
Result:=RootTemplate;
|
Result:=RootTemplate;
|
||||||
while (Result<>nil) and (AnsiCompareText(Result.Name,AName)<>0) do
|
if RootTemplate<>nil then
|
||||||
Result:=Result.Next;
|
Result:=RootTemplate.FindByName(AName,not OnlyRoots,true)
|
||||||
|
else
|
||||||
|
Result:=nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDefineTree.RemoveDefineTemplateByName(const AName: string);
|
procedure TDefineTree.RemoveRootDefineTemplateByName(const AName: string);
|
||||||
var ADefTempl: TDefineTemplate;
|
var ADefTempl: TDefineTemplate;
|
||||||
begin
|
begin
|
||||||
ADefTempl:=FindDefineTemplateByName(AName);
|
ADefTempl:=FindDefineTemplateByName(AName,true);
|
||||||
if ADefTempl<>nil then begin
|
if ADefTempl<>nil then begin
|
||||||
if ADefTempl=FFirstDefineTemplate then
|
if ADefTempl=FFirstDefineTemplate then
|
||||||
FFirstDefineTemplate:=FFirstDefineTemplate.Next;
|
FFirstDefineTemplate:=FFirstDefineTemplate.Next;
|
||||||
@ -1200,18 +1241,32 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDefineTree.ReplaceSameName(ADefineTemplate: TDefineTemplate);
|
function TDefineTree.ExtractDefineTree(ProjectSpecific: boolean): TDefineTree;
|
||||||
|
var ARootNode, NewRootNode: TDefineTemplate;
|
||||||
|
begin
|
||||||
|
Result:=TDefineTree.Create;
|
||||||
|
ARootNode:=RootTemplate;
|
||||||
|
while ARootNode<>nil do begin
|
||||||
|
if (not ARootNode.IsAutoGenerated) then begin
|
||||||
|
//NewRootNode:=ARootNode.ExtractCopy(ProjectSpecific);
|
||||||
|
|
||||||
|
end;
|
||||||
|
ARootNode:=ARootNode.Next;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TDefineTree.ReplaceRootSameName(ADefineTemplate: TDefineTemplate);
|
||||||
// if there is a DefineTemplate with the same name then replace it
|
// if there is a DefineTemplate with the same name then replace it
|
||||||
// else add as last
|
// else add as last
|
||||||
var OldDefineTemplate: TDefineTemplate;
|
var OldDefineTemplate: TDefineTemplate;
|
||||||
begin
|
begin
|
||||||
if (ADefineTemplate=nil) then exit;
|
if (ADefineTemplate=nil) then exit;
|
||||||
OldDefineTemplate:=FindDefineTemplateByName(ADefineTemplate.Name);
|
OldDefineTemplate:=FindDefineTemplateByName(ADefineTemplate.Name,true);
|
||||||
if OldDefineTemplate<>nil then begin
|
if OldDefineTemplate<>nil then begin
|
||||||
if not OldDefineTemplate.IsEqual(ADefineTemplate,true,false) then begin
|
if not OldDefineTemplate.IsEqual(ADefineTemplate,true,false) then begin
|
||||||
ClearCache;
|
ClearCache;
|
||||||
end;
|
end;
|
||||||
ADefineTemplate.InsertAfter(OldDefineTemplate);
|
ADefineTemplate.InsertBehind(OldDefineTemplate);
|
||||||
if OldDefineTemplate=FFirstDefineTemplate then
|
if OldDefineTemplate=FFirstDefineTemplate then
|
||||||
FFirstDefineTemplate:=FFirstDefineTemplate.Next;
|
FFirstDefineTemplate:=FFirstDefineTemplate.Next;
|
||||||
OldDefineTemplate.Unbind;
|
OldDefineTemplate.Unbind;
|
||||||
@ -1220,16 +1275,17 @@ begin
|
|||||||
Add(ADefineTemplate);
|
Add(ADefineTemplate);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDefineTree.ReplaceSameNameAddFirst(ADefineTemplate: TDefineTemplate);
|
procedure TDefineTree.ReplaceRootSameNameAddFirst(
|
||||||
|
ADefineTemplate: TDefineTemplate);
|
||||||
var OldDefineTemplate: TDefineTemplate;
|
var OldDefineTemplate: TDefineTemplate;
|
||||||
begin
|
begin
|
||||||
if ADefineTemplate=nil then exit;
|
if ADefineTemplate=nil then exit;
|
||||||
OldDefineTemplate:=FindDefineTemplateByName(ADefineTemplate.Name);
|
OldDefineTemplate:=FindDefineTemplateByName(ADefineTemplate.Name,true);
|
||||||
if OldDefineTemplate<>nil then begin
|
if OldDefineTemplate<>nil then begin
|
||||||
if not OldDefineTemplate.IsEqual(ADefineTemplate,true,false) then begin
|
if not OldDefineTemplate.IsEqual(ADefineTemplate,true,false) then begin
|
||||||
ClearCache;
|
ClearCache;
|
||||||
end;
|
end;
|
||||||
ADefineTemplate.InsertAfter(OldDefineTemplate);
|
ADefineTemplate.InsertBehind(OldDefineTemplate);
|
||||||
if OldDefineTemplate=FFirstDefineTemplate then
|
if OldDefineTemplate=FFirstDefineTemplate then
|
||||||
FFirstDefineTemplate:=FFirstDefineTemplate.Next;
|
FFirstDefineTemplate:=FFirstDefineTemplate.Next;
|
||||||
OldDefineTemplate.Unbind;
|
OldDefineTemplate.Unbind;
|
||||||
@ -1334,7 +1390,7 @@ function TDefinePool.CreateFPCTemplate(
|
|||||||
if copy(UpLine,1,15)='MACRO DEFINED: ' then begin
|
if copy(UpLine,1,15)='MACRO DEFINED: ' then begin
|
||||||
MacroName:=copy(UpLine,16,length(Line)-15);
|
MacroName:=copy(UpLine,16,length(Line)-15);
|
||||||
NewDefTempl:=TDefineTemplate.Create('Define '+MacroName,
|
NewDefTempl:=TDefineTemplate.Create('Define '+MacroName,
|
||||||
'Default ppc386 macro',MacroName,'',da_DefineAll);
|
'Default ppc386 macro',MacroName,'',da_DefineRecurse);
|
||||||
end else if copy(UpLine,1,6)='MACRO ' then begin
|
end else if copy(UpLine,1,6)='MACRO ' then begin
|
||||||
Line:=copy(Line,7,length(Line)-6);
|
Line:=copy(Line,7,length(Line)-6);
|
||||||
i:=1;
|
i:=1;
|
||||||
@ -1345,14 +1401,14 @@ function TDefinePool.CreateFPCTemplate(
|
|||||||
if copy(Line,1,7)='set to ' then begin
|
if copy(Line,1,7)='set to ' then begin
|
||||||
MacroValue:=copy(Line,8,length(Line)-7);
|
MacroValue:=copy(Line,8,length(Line)-7);
|
||||||
NewDefTempl:=TDefineTemplate.Create('Define '+MacroName,
|
NewDefTempl:=TDefineTemplate.Create('Define '+MacroName,
|
||||||
'Default ppc386 macro',MacroName,MacroValue,da_DefineAll);
|
'Default ppc386 macro',MacroName,MacroValue,da_DefineRecurse);
|
||||||
end;
|
end;
|
||||||
end else if copy(UpLine,1,17)='USING UNIT PATH: ' then begin
|
end else if copy(UpLine,1,17)='USING UNIT PATH: ' then begin
|
||||||
UnitSearchPath:=UnitSearchPath+copy(Line,18,length(Line)-17)+#13;
|
UnitSearchPath:=UnitSearchPath+copy(Line,18,length(Line)-17)+#13;
|
||||||
end;
|
end;
|
||||||
if NewDefTempl<>nil then begin
|
if NewDefTempl<>nil then begin
|
||||||
if LastDefTempl<>nil then
|
if LastDefTempl<>nil then
|
||||||
NewDefTempl.InsertAfter(LastDefTempl);
|
NewDefTempl.InsertBehind(LastDefTempl);
|
||||||
LastDefTempl:=NewDefTempl;
|
LastDefTempl:=NewDefTempl;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -1432,9 +1488,9 @@ begin
|
|||||||
TargetOS:=copy(Buf,1,i-1);
|
TargetOS:=copy(Buf,1,i-1);
|
||||||
NewDefTempl:=TDefineTemplate.Create('Define TargetOS',
|
NewDefTempl:=TDefineTemplate.Create('Define TargetOS',
|
||||||
'Default ppc386 target Operating System',
|
'Default ppc386 target Operating System',
|
||||||
ExternalMacroStart+'TargetOS',TargetOS,da_DefineAll);
|
ExternalMacroStart+'TargetOS',TargetOS,da_DefineRecurse);
|
||||||
if DefTempl<>nil then
|
if DefTempl<>nil then
|
||||||
NewDefTempl.InsertAfter(DefTempl);
|
NewDefTempl.InsertBehind(DefTempl);
|
||||||
DefTempl:=NewDefTempl;
|
DefTempl:=NewDefTempl;
|
||||||
if TargetOS='linux' then
|
if TargetOS='linux' then
|
||||||
SrcOS:='unix'
|
SrcOS:='unix'
|
||||||
@ -1442,9 +1498,9 @@ begin
|
|||||||
SrcOS:=TargetOS;
|
SrcOS:=TargetOS;
|
||||||
NewDefTempl:=TDefineTemplate.Create('Define SrcOS',
|
NewDefTempl:=TDefineTemplate.Create('Define SrcOS',
|
||||||
'Default ppc386 source Operating System',
|
'Default ppc386 source Operating System',
|
||||||
ExternalMacroStart+'SrcOS',SrcOS,da_DefineAll);
|
ExternalMacroStart+'SrcOS',SrcOS,da_DefineRecurse);
|
||||||
if DefTempl<>nil then
|
if DefTempl<>nil then
|
||||||
NewDefTempl.InsertAfter(DefTempl);
|
NewDefTempl.InsertBehind(DefTempl);
|
||||||
DefTempl:=NewDefTempl;
|
DefTempl:=NewDefTempl;
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
@ -1472,9 +1528,9 @@ begin
|
|||||||
TargetProcessor:=copy(Buf,1,i-1);
|
TargetProcessor:=copy(Buf,1,i-1);
|
||||||
NewDefTempl:=TDefineTemplate.Create('Define TargetProcessor',
|
NewDefTempl:=TDefineTemplate.Create('Define TargetProcessor',
|
||||||
'Default ppc386 target Operating System',
|
'Default ppc386 target Operating System',
|
||||||
ExternalMacroStart+'TargetProcessor',TargetProcessor,da_DefineAll);
|
ExternalMacroStart+'TargetProcessor',TargetProcessor,da_DefineRecurse);
|
||||||
if DefTempl<>nil then
|
if DefTempl<>nil then
|
||||||
NewDefTempl.InsertAfter(DefTempl);
|
NewDefTempl.InsertBehind(DefTempl);
|
||||||
DefTempl:=NewDefTempl;
|
DefTempl:=NewDefTempl;
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
@ -1770,7 +1826,7 @@ begin
|
|||||||
FindStandardPPUSources;
|
FindStandardPPUSources;
|
||||||
DefTempl:=TDefineTemplate.Create('FPC Unit Links',
|
DefTempl:=TDefineTemplate.Create('FPC Unit Links',
|
||||||
'Source filenames for the standard fpc units',
|
'Source filenames for the standard fpc units',
|
||||||
UnitLinks,UnitLinkList,da_DefineAll);
|
UnitLinks,UnitLinkList,da_DefineRecurse);
|
||||||
Result.AddChild(DefTempl);
|
Result.AddChild(DefTempl);
|
||||||
|
|
||||||
// The free pascal sources build a world of their own,
|
// The free pascal sources build a world of their own,
|
||||||
@ -1781,7 +1837,7 @@ begin
|
|||||||
Result.AddChild(MainDir);
|
Result.AddChild(MainDir);
|
||||||
DefTempl:=TDefineTemplate.Create('Reset SrcPath',
|
DefTempl:=TDefineTemplate.Create('Reset SrcPath',
|
||||||
'SrcPath Init',
|
'SrcPath Init',
|
||||||
ExternalMacroStart+'SrcPath','',da_DefineAll);
|
ExternalMacroStart+'SrcPath','',da_DefineRecurse);
|
||||||
MainDir.AddChild(DefTempl);
|
MainDir.AddChild(DefTempl);
|
||||||
|
|
||||||
// compiler
|
// compiler
|
||||||
@ -1801,7 +1857,7 @@ begin
|
|||||||
s:=s+';'+Dir+'rtl'+DS+TargetOS+DS;
|
s:=s+';'+Dir+'rtl'+DS+TargetOS+DS;
|
||||||
RTLDir.AddChild(TDefineTemplate.Create('Include Path',
|
RTLDir.AddChild(TDefineTemplate.Create('Include Path',
|
||||||
'include directory objpas, inc, processor specific',
|
'include directory objpas, inc, processor specific',
|
||||||
ExternalMacroStart+'IncPath',s,da_DefineAll));
|
ExternalMacroStart+'IncPath',s,da_DefineRecurse));
|
||||||
|
|
||||||
// fcl
|
// fcl
|
||||||
FCLDir:=TDefineTemplate.Create('FCL','Free Pascal Component Library','','fcl',
|
FCLDir:=TDefineTemplate.Create('FCL','Free Pascal Component Library','','fcl',
|
||||||
@ -1812,7 +1868,7 @@ begin
|
|||||||
ExternalMacroStart+'IncPath',
|
ExternalMacroStart+'IncPath',
|
||||||
IncPathMacro
|
IncPathMacro
|
||||||
+';'+Dir+'fcl/inc/'
|
+';'+Dir+'fcl/inc/'
|
||||||
,da_DefineAll));
|
,da_DefineRecurse));
|
||||||
|
|
||||||
// packages
|
// packages
|
||||||
PackagesDir:=TDefineTemplate.Create('Packages','Package directories','',
|
PackagesDir:=TDefineTemplate.Create('Packages','Package directories','',
|
||||||
@ -1883,7 +1939,7 @@ begin
|
|||||||
'','interfaces',da_Directory);
|
'','interfaces',da_Directory);
|
||||||
SubDirTempl.AddChild(TDefineTemplate.Create('LCL Path',
|
SubDirTempl.AddChild(TDefineTemplate.Create('LCL Path',
|
||||||
'adds lcl to SrcPath',ExternalMacroStart+'SrcPath',
|
'adds lcl to SrcPath',ExternalMacroStart+'SrcPath',
|
||||||
LazarusSrcDir+ds+'lcl;'+SrcPath,da_DefineAll));
|
LazarusSrcDir+ds+'lcl;'+SrcPath,da_DefineRecurse));
|
||||||
DirTempl.AddChild(SubDirTempl);
|
DirTempl.AddChild(SubDirTempl);
|
||||||
|
|
||||||
// components
|
// components
|
||||||
@ -1894,7 +1950,7 @@ begin
|
|||||||
LazarusSrcDir+ds+'lcl'
|
LazarusSrcDir+ds+'lcl'
|
||||||
+';'+LazarusSrcDir+ds+'lcl'+ds+'interfaces'+ds+WidgetType
|
+';'+LazarusSrcDir+ds+'lcl'+ds+'interfaces'+ds+WidgetType
|
||||||
+';'+SrcPath
|
+';'+SrcPath
|
||||||
,da_DefineAll));
|
,da_DefineRecurse));
|
||||||
MainDir.AddChild(DirTempl);
|
MainDir.AddChild(DirTempl);
|
||||||
|
|
||||||
// tools
|
// tools
|
||||||
@ -1947,7 +2003,7 @@ begin
|
|||||||
'..'+ds+'lcl'
|
'..'+ds+'lcl'
|
||||||
+';..'+ds+'lcl'+ds+'interfaces'+ds+WidgetType
|
+';..'+ds+'lcl'+ds+'interfaces'+ds+WidgetType
|
||||||
+';'+SrcPath
|
+';'+SrcPath
|
||||||
,da_DefineAll));
|
,da_DefineRecurse));
|
||||||
|
|
||||||
if MainDir<>nil then begin
|
if MainDir<>nil then begin
|
||||||
Result:=TDefineTemplate.Create(StdDefTemplLazarusSources,
|
Result:=TDefineTemplate.Create(StdDefTemplLazarusSources,
|
||||||
@ -1971,7 +2027,7 @@ begin
|
|||||||
+LazarusSrcDir+PathDelim+'lcl'+PathDelim+'interfaces'
|
+LazarusSrcDir+PathDelim+'lcl'+PathDelim+'interfaces'
|
||||||
+PathDelim+WidgetType
|
+PathDelim+WidgetType
|
||||||
+';$('+ExternalMacroStart+'SrcPath)'
|
+';$('+ExternalMacroStart+'SrcPath)'
|
||||||
,da_DefineAll));
|
,da_DefineRecurse));
|
||||||
Result:=TDefineTemplate.Create(StdDefTemplLCLProject,
|
Result:=TDefineTemplate.Create(StdDefTemplLCLProject,
|
||||||
'LCL Project','','',da_Block);
|
'LCL Project','','',da_Block);
|
||||||
Result.Flags:=[dtfAutoGenerated];
|
Result.Flags:=[dtfAutoGenerated];
|
||||||
|
@ -247,7 +247,7 @@
|
|||||||
+'. . . . . . . . . . . . . . . . . . . . ",'#10'". . . . . . . . . . . . '
|
+'. . . . . . . . . . . . . . . . . . . . ",'#10'". . . . . . . . . . . . '
|
||||||
+'. . . . . . . . . . "};'#10
|
+'. . . . . . . . . . "};'#10
|
||||||
);
|
);
|
||||||
LazarusResources.Add('defineall_22x22','XPM',
|
LazarusResources.Add('definerecurse_22x22','XPM',
|
||||||
'/* XPM */'#10'static char * defineall_22x22_xpm[] = {'#10'"22 22 144 2",'
|
'/* XPM */'#10'static char * defineall_22x22_xpm[] = {'#10'"22 22 144 2",'
|
||||||
+#10'" '#9'c None",'#10'". '#9'c #FFFFFF",'#10'"+ '#9'c #FFF9F9",'#10'"@ '
|
+#10'" '#9'c None",'#10'". '#9'c #FFFFFF",'#10'"+ '#9'c #FFF9F9",'#10'"@ '
|
||||||
+#9'c #FFD9D9",'#10'"# '#9'c #F5F5F5",'#10'"$ '#9'c #C7C7C7",'#10'"% '#9'c'
|
+#9'c #FFD9D9",'#10'"# '#9'c #F5F5F5",'#10'"$ '#9'c #C7C7C7",'#10'"% '#9'c'
|
||||||
@ -658,3 +658,142 @@
|
|||||||
+'. . . . . . . . . . . . . . ",'#10'". . . . . . . . . . . . . . . . . . '
|
+'. . . . . . . . . . . . . . ",'#10'". . . . . . . . . . . . . . . . . . '
|
||||||
+'. . . . "};'#10
|
+'. . . . "};'#10
|
||||||
);
|
);
|
||||||
|
LazarusResources.Add('undefineall_22x22','XPM',
|
||||||
|
'/* XPM */'#10'static char * undefineall_22x22_xpm[] = {'#10'"22 22 132 2"'
|
||||||
|
+','#10'" '#9'c None",'#10'". '#9'c #FFFFFF",'#10'"+ '#9'c #EBE5E5",'#10
|
||||||
|
+'"@ '#9'c #FEB0B0",'#10'"# '#9'c #FFBCBC",'#10'"$ '#9'c #FFFDFD",'#10'"% '
|
||||||
|
+#9'c #A3A3A3",'#10'"& '#9'c #665555",'#10'"* '#9'c #F24343",'#10'"= '#9'c'
|
||||||
|
+' #FF1F1F",'#10'"- '#9'c #FF4343",'#10'"; '#9'c #FF6B6B",'#10'"> '#9'c #F'
|
||||||
|
+'FABAB",'#10'", '#9'c #FFE4E4",'#10'"'' '#9'c #E2E7FE",'#10'") '#9'c #153'
|
||||||
|
+'BF7",'#10'"! '#9'c #BEBEBE",'#10'"~ '#9'c #493535",'#10'"{ '#9'c #763096'
|
||||||
|
+'",'#10'"] '#9'c #BD174C",'#10'"^ '#9'c #FF1919",'#10'"/ '#9'c #FF2424",'
|
||||||
|
+#10'"( '#9'c #FF2323",'#10'"_ '#9'c #FF4040",'#10'": '#9'c #FF9292",'#10
|
||||||
|
+'"< '#9'c #4563F9",'#10'"[ '#9'c #0A32F7",'#10'"} '#9'c #D2D2D2",'#10'"| '
|
||||||
|
+#9'c #473535",'#10'"1 '#9'c #2F31D4",'#10'"2 '#9'c #0A31F6",'#10'"3 '#9'c'
|
||||||
|
+' #1830EA",'#10'"4 '#9'c #E22239",'#10'"5 '#9'c #FF2222",'#10'"6 '#9'c #F'
|
||||||
|
+'F1A1A",'#10'"7 '#9'c #FF4444",'#10'"8 '#9'c #FFE8E8",'#10'"9 '#9'c #1233'
|
||||||
|
+'F2",'#10'"0 '#9'c #213DF0",'#10'"a '#9'c #403A3A",'#10'"b '#9'c #E06767"'
|
||||||
|
+','#10'"c '#9'c #BD1D52",'#10'"d '#9'c #0F30F1",'#10'"e '#9'c #70299C",'
|
||||||
|
+#10'"f '#9'c #FF5959",'#10'"g '#9'c #EA2F2F",'#10'"h '#9'c #FF0E0E",'#10
|
||||||
|
+'"i '#9'c #93247B",'#10'"j '#9'c #0931F7",'#10'"k '#9'c #BD275C",'#10'"l '
|
||||||
|
+#9'c #D3D3D3",'#10'"m '#9'c #404040",'#10'"n '#9'c #DED6D6",'#10'"o '#9'c'
|
||||||
|
+' #FFD2D2",'#10'"p '#9'c #F99CA1",'#10'"q '#9'c #3638DA",'#10'"r '#9'c #1'
|
||||||
|
+'F2DE1",'#10'"s '#9'c #F93D41",'#10'"t '#9'c #FFEAEA",'#10'"u '#9'c #E62F'
|
||||||
|
+'2F",'#10'"v '#9'c #F90E13",'#10'"w '#9'c #0E31F3",'#10'"x '#9'c #2B2FD9"'
|
||||||
|
+','#10'"y '#9'c #C1C1C1",'#10'"z '#9'c #3E3E3E",'#10'"A '#9'c #E0E0E0",'
|
||||||
|
+#10'"B '#9'c #858CED",'#10'"C '#9'c #0E33F5",'#10'"D '#9'c #1336F4",'#10
|
||||||
|
+'"E '#9'c #D1D8FD",'#10'"F '#9'c #2D2DD6",'#10'"G '#9'c #0B31F5",'#10'"H '
|
||||||
|
+#9'c #E2142B",'#10'"I '#9'c #B3B3B3",'#10'"J '#9'c #414141",'#10'"K '#9'c'
|
||||||
|
+' #E3E3E3",'#10'"L '#9'c #0F36F7",'#10'"M '#9'c #ADB5DA",'#10'"N '#9'c #6'
|
||||||
|
+'276E9",'#10'"O '#9'c #9F74C2",'#10'"P '#9'c #FF0606",'#10'"Q '#9'c #FF3D'
|
||||||
|
+'3D",'#10'"R '#9'c #424242",'#10'"S '#9'c #FFFBFB",'#10'"T '#9'c #1339F7"'
|
||||||
|
+','#10'"U '#9'c #1634C8",'#10'"V '#9'c #405FF9",'#10'"W '#9'c #FFA8A8",'
|
||||||
|
+#10'"X '#9'c #FFA9A9",'#10'"Y '#9'c #B8B8B8",'#10'"Z '#9'c #494949",'#10
|
||||||
|
+'"` '#9'c #E5E5E5",'#10'" .'#9'c #F9A8AD",'#10'"..'#9'c #2646F5",'#10'"+.'
|
||||||
|
+#9'c #193EF5",'#10'"@.'#9'c #E7E7E7",'#10'"#.'#9'c #0C32F6",'#10'"$.'#9'c'
|
||||||
|
+' #7087FA",'#10'"%.'#9'c #FF0D0D",'#10'"&.'#9'c #D12348",'#10'"*.'#9'c #0'
|
||||||
|
+'D31F4",'#10'"=.'#9'c #1230EF",'#10'"-.'#9'c #F94448",'#10'";.'#9'c #405A'
|
||||||
|
+'F4",'#10'">.'#9'c #FF1616",'#10'",.'#9'c #1830E9",'#10'"''.'#9'c #F91B1F'
|
||||||
|
+'",'#10'").'#9'c #5873FA",'#10'"!.'#9'c #9F93E1",'#10'"~.'#9'c #0D33F6",'
|
||||||
|
+#10'"{.'#9'c #0F32F3",'#10'"].'#9'c #F92328",'#10'"^.'#9'c #FFE9E9",'#10
|
||||||
|
+'"/.'#9'c #6981FA",'#10'"(.'#9'c #B8BFE4",'#10'"_.'#9'c #0E35F7",'#10'":.'
|
||||||
|
+#9'c #F9FAFF",'#10'"<.'#9'c #3657F8",'#10'"[.'#9'c #363E63",'#10'"}.'#9'c'
|
||||||
|
+' #0C34F7",'#10'"|.'#9'c #1238F7",'#10'"1.'#9'c #5C76FA",'#10'"2.'#9'c #8'
|
||||||
|
+'690C5",'#10'"3.'#9'c #0A31F4",'#10'"4.'#9'c #1037F6",'#10'"5.'#9'c #4D6A'
|
||||||
|
+'F9",'#10'"6.'#9'c #5A75FA",'#10'"7.'#9'c #1339F3",'#10'"8.'#9'c #0B32F2"'
|
||||||
|
+','#10'"9.'#9'c #CBD0E7",'#10'"0.'#9'c #C2C8EA",'#10'"a.'#9'c #AFB0B5",'
|
||||||
|
+#10'". . . . . . . . . . . . . . . . . . . . . . ",'#10'". . + @ # $ . . '
|
||||||
|
+'. . . . . . . . . . . . . . ",'#10'". % & * = - ; > , . . . . . . . '' )'
|
||||||
|
+' . . . . ",'#10'". ! ~ { ] ^ / ( _ : . . + @ # $ < [ . . . . ",'#10'". }'
|
||||||
|
+' | 1 2 3 4 5 6 7 8 % & * = - 9 0 , . . . ",'#10'". } a b c d 2 e 6 f . !'
|
||||||
|
+' ~ g h i j k _ : . . ",'#10'". l m n o p q j r s t } | u v w x 5 6 7 8 .'
|
||||||
|
+' ",'#10'". y z A . . . B C D E } a b F G H = 6 f . . ",'#10'". I J K . .'
|
||||||
|
+' . . E L L M m N j O f ( P Q t . ",'#10'". I R K . + @ # S E T [ U [ V .'
|
||||||
|
+' . , W X . . ",'#10'". Y Z ` % & * = - ; ...j +.. . . . . . . . ",'#10
|
||||||
|
+'". @.I . ! ~ g h ^ / k w #.[ $.. . . . . . . ",'#10'". . . . } | u %./ &'
|
||||||
|
+'.*.=.-.;.j $.. . . . . . ",'#10'". . . . } a b >.v G ,.''.f . V j ).. . '
|
||||||
|
+'. . . ",'#10'". . . . l m n !.~.{.].P Q ^.. ).j /.. . . . ",'#10'". . . '
|
||||||
|
+'. y z (._.) :., W X . . . /.j <.. . . ",'#10'". . . . I [.}.|.:.. . . . '
|
||||||
|
+'. . . . $.j 1.. . ",'#10'". . . . 2.3.4.'' . . . . . . . . . . 5.6.. . "'
|
||||||
|
+','#10'". . . . 7.8.9.. . . . . . . . . . . . . . . ",'#10'". . . . 0.a..'
|
||||||
|
+' . . . . . . . . . . . . . . . ",'#10'". . . . . . . . . . . . . . . . .'
|
||||||
|
+' . . . . . ",'#10'". . . . . . . . . . . . . . . . . . . . . . "};'#10
|
||||||
|
);
|
||||||
|
LazarusResources.Add('undefinerecurse_22x22','XPM',
|
||||||
|
'/* XPM */'#10'static char * undefinerecurse_22x22_xpm[] = {'#10'"22 22 18'
|
||||||
|
+'4 2",'#10'" '#9'c None",'#10'". '#9'c #FFFFFF",'#10'"+ '#9'c #FFF9F9",'
|
||||||
|
+#10'"@ '#9'c #FFD9D9",'#10'"# '#9'c #F5F5F5",'#10'"$ '#9'c #C7C7C7",'#10
|
||||||
|
+'"% '#9'c #F6CDCD",'#10'"& '#9'c #FF5656",'#10'"* '#9'c #FF4949",'#10'"= '
|
||||||
|
+#9'c #FF9B9B",'#10'"- '#9'c #FFC5C5",'#10'"; '#9'c #FFEDED",'#10'"> '#9'c'
|
||||||
|
+' #FFFDFD",'#10'", '#9'c #6D7FF2",'#10'"'' '#9'c #0423EA",'#10'") '#9'c #'
|
||||||
|
+'A0A6CF",'#10'"! '#9'c #22308B",'#10'"~ '#9'c #373737",'#10'"{ '#9'c #D49'
|
||||||
|
+'595",'#10'"] '#9'c #FF2828",'#10'"^ '#9'c #FF0E0E",'#10'"/ '#9'c #FF1D1D'
|
||||||
|
+'",'#10'"( '#9'c #FF3232",'#10'"_ '#9'c #FF6767",'#10'": '#9'c #FF8484",'
|
||||||
|
+#10'"< '#9'c #FFA6A6",'#10'"[ '#9'c #7671DE",'#10'"} '#9'c #3C54EE",'#10
|
||||||
|
+'"| '#9'c #D4D9FB",'#10'"1 '#9'c #0925E7",'#10'"2 '#9'c #3323C4",'#10'"3 '
|
||||||
|
+#9'c #E11229",'#10'"4 '#9'c #FF0D0D",'#10'"5 '#9'c #FF0F0F",'#10'"6 '#9'c'
|
||||||
|
+' #FF0707",'#10'"7 '#9'c #FF0000",'#10'"8 '#9'c #BC184D",'#10'"9 '#9'c #0'
|
||||||
|
+'423E9",'#10'"0 '#9'c #2430DD",'#10'"a '#9'c #FFAEAE",'#10'"b '#9'c #FFE5'
|
||||||
|
+'E5",'#10'"c '#9'c #FFFCFC",'#10'"d '#9'c #F9F9FE",'#10'"e '#9'c #EFEFEF"'
|
||||||
|
+','#10'"f '#9'c #6C6C6C",'#10'"g '#9'c #060F44",'#10'"h '#9'c #182BD9",'
|
||||||
|
+#10'"i '#9'c #0922E5",'#10'"j '#9'c #0422E9",'#10'"k '#9'c #1C1FD3",'#10
|
||||||
|
+'"l '#9'c #CF1137",'#10'"m '#9'c #FF2424",'#10'"n '#9'c #F93C41",'#10'"o '
|
||||||
|
+#9'c #0923E5",'#10'"p '#9'c #1321DB",'#10'"q '#9'c #FF1414",'#10'"r '#9'c'
|
||||||
|
+' #FF1A1A",'#10'"s '#9'c #FF5B5B",'#10'"t '#9'c #FFF1F1",'#10'"u '#9'c #F'
|
||||||
|
+'DFDFD",'#10'"v '#9'c #7E7E7E",'#10'"w '#9'c #000000",'#10'"x '#9'c #A75C'
|
||||||
|
+'5C",'#10'"y '#9'c #751C89",'#10'"z '#9'c #0B23E3",'#10'"A '#9'c #581DA1"'
|
||||||
|
+','#10'"B '#9'c #3C1FB9",'#10'"C '#9'c #E12940",'#10'"D '#9'c #FF3F3F",'
|
||||||
|
+#10'"E '#9'c #FF1616",'#10'"F '#9'c #FF1212",'#10'"G '#9'c #FF1E1E",'#10
|
||||||
|
+'"H '#9'c #FFB3B3",'#10'"I '#9'c #868686",'#10'"J '#9'c #060606",'#10'"K '
|
||||||
|
+#9'c #A46464",'#10'"L '#9'c #FF2222",'#10'"M '#9'c #FF0303",'#10'"N '#9'c'
|
||||||
|
+' #FF0404",'#10'"O '#9'c #3C24BE",'#10'"P '#9'c #581FA3",'#10'"Q '#9'c #F'
|
||||||
|
+'F1515",'#10'"R '#9'c #FF1111",'#10'"S '#9'c #FF2E2E",'#10'"T '#9'c #FF30'
|
||||||
|
+'30",'#10'"U '#9'c #FFBFBF",'#10'"V '#9'c #9D6C6C",'#10'"W '#9'c #FF2929"'
|
||||||
|
+','#10'"X '#9'c #FF0101",'#10'"Y '#9'c #FF0202",'#10'"Z '#9'c #1120DD",'
|
||||||
|
+#10'"` '#9'c #1923D9",'#10'" .'#9'c #F94145",'#10'"..'#9'c #FF4444",'#10
|
||||||
|
+'"+.'#9'c #FF0909",'#10'"@.'#9'c #FF3E3E",'#10'"#.'#9'c #FFD2D2",'#10'"$.'
|
||||||
|
+#9'c #818181",'#10'"%.'#9'c #867C7C",'#10'"&.'#9'c #FF9696",'#10'"*.'#9'c'
|
||||||
|
+' #821577",'#10'"=.'#9'c #431BB0",'#10'"-.'#9'c #0722E6",'#10'";.'#9'c #1'
|
||||||
|
+'A20D5",'#10'">.'#9'c #FF2020",'#10'",.'#9'c #FF2626",'#10'"''.'#9'c #FF5'
|
||||||
|
+'E5E",'#10'").'#9'c #FFDBDB",'#10'"!.'#9'c #FFF4F4",'#10'"~.'#9'c #FFC0C0'
|
||||||
|
+'",'#10'"{.'#9'c #F9888D",'#10'"].'#9'c #0A25E6",'#10'"^.'#9'c #1F24D5",'
|
||||||
|
+#10'"/.'#9'c #FF1313",'#10'"(.'#9'c #9C105E",'#10'"_.'#9'c #241FCD",'#10
|
||||||
|
+'":.'#9'c #FF0A0A",'#10'"<.'#9'c #FF3333",'#10'"[.'#9'c #FFCACA",'#10'"}.'
|
||||||
|
+#9'c #858585",'#10'"|.'#9'c #1A36EB",'#10'"1.'#9'c #E1B8CF",'#10'"2.'#9'c'
|
||||||
|
+' #FFA9A9",'#10'"3.'#9'c #FF8383",'#10'"4.'#9'c #76339F",'#10'"5.'#9'c #3'
|
||||||
|
+'C1BB5",'#10'"6.'#9'c #FF0606",'#10'"7.'#9'c #FF2323",'#10'"8.'#9'c #FFBC'
|
||||||
|
+'BC",'#10'"9.'#9'c #F8F8F8",'#10'"0.'#9'c #767676",'#10'"a.'#9'c #1935EB"'
|
||||||
|
+','#10'"b.'#9'c #9CA8F6",'#10'"c.'#9'c #FFFAFA",'#10'"d.'#9'c #FFDDDD",'
|
||||||
|
+#10'"e.'#9'c #6D5CCF",'#10'"f.'#9'c #823395",'#10'"g.'#9'c #FF6E6E",'#10
|
||||||
|
+'"h.'#9'c #FFE0E0",'#10'"i.'#9'c #E6E6E6",'#10'"j.'#9'c #5F5F5F",'#10'"k.'
|
||||||
|
+#9'c #0F0F0F",'#10'"l.'#9'c #949599",'#10'"m.'#9'c #0C2AEA",'#10'"n.'#9'c'
|
||||||
|
+' #0625EA",'#10'"o.'#9'c #2942EB",'#10'"p.'#9'c #0524E9",'#10'"q.'#9'c #E'
|
||||||
|
+'1CDE4",'#10'"r.'#9'c #FFFBFB",'#10'"s.'#9'c #E3E3E3",'#10'"t.'#9'c #5858'
|
||||||
|
+'58",'#10'"u.'#9'c #0C154A",'#10'"v.'#9'c #0625E8",'#10'"w.'#9'c #0928EA"'
|
||||||
|
+','#10'"x.'#9'c #BCC4F9",'#10'"y.'#9'c #0827EA",'#10'"z.'#9'c #E1E1E1",'
|
||||||
|
+#10'"A.'#9'c #2A3BA7",'#10'"B.'#9'c #0D2AE4",'#10'"C.'#9'c #E1E5FC",'#10
|
||||||
|
+'"D.'#9'c #FFCF0F",'#10'"E.'#9'c #8292F4",'#10'"F.'#9'c #1935E9",'#10'"G.'
|
||||||
|
+#9'c #0520CD",'#10'"H.'#9'c #9A9A9A",'#10'"I.'#9'c #122FEB",'#10'"J.'#9'c'
|
||||||
|
+' #1532EB",'#10'"K.'#9'c #0E2CEA",'#10'"L.'#9'c #0625E9",'#10'"M.'#9'c #2'
|
||||||
|
+'D3CA2",'#10'"N.'#9'c #101010",'#10'"O.'#9'c #CFD5FB",'#10'"P.'#9'c #8B9A'
|
||||||
|
+'F5",'#10'"Q.'#9'c #475EEF",'#10'"R.'#9'c #B9BEE4",'#10'"S.'#9'c #5D5D5D"'
|
||||||
|
+','#10'"T.'#9'c #0C0C0C",'#10'"U.'#9'c #9B9B9B",'#10'"V.'#9'c #888888",'
|
||||||
|
+#10'"W.'#9'c #2F2F2F",'#10'"X.'#9'c #BCBCBC",'#10'"Y.'#9'c #FCFCFC",'#10
|
||||||
|
+'"Z.'#9'c #E8E8E8",'#10'"`.'#9'c #C9C9C9",'#10'". . . . . + @ @ + . . . .'
|
||||||
|
+' . . . . . . . . . ",'#10'". . # $ $ % & * = - ; > . . , '' . . . . . . '
|
||||||
|
+'",'#10'". . ) ! ~ { ] ^ / ( _ : < [ '' } . . . . . . ",'#10'"| '' '' '' '
|
||||||
|
+''' 1 2 3 4 5 6 7 8 9 0 a b c . . . . ",'#10'"d | e f g h i j k l m n o p'
|
||||||
|
+' q r s < t . . . ",'#10'". . u v w x / y z 9 A B j C D E F G H . . . ",'
|
||||||
|
+#10'". . . I J K L M N O 9 9 P 4 Q R S T U . . . ",'#10'". . . I J V W X '
|
||||||
|
+'Y 6 Z j ` ...4 +.@.#.. . . ",'#10'". . . $.w %.&.r N *.'' =.-.;.r >.,.'
|
||||||
|
+'''.).. . . ",'#10'". . . I J I !.~.{.].^./.(.j _.N :.<.[.. . . ",'#10'".'
|
||||||
|
+' . . }.J I . . |.'' 1.2.3.4.j 5.6.7.8.. . . ",'#10'". . 9.0.w }.d a.'' b'
|
||||||
|
+'.. . c.d.e.'' f.g.h.. . . ",'#10'". . i.j.k.l.m.n.b.. . . . . . o.p.q.r.'
|
||||||
|
+'. . . ",'#10'". . s.t.u.v.w.x.. . . . w . . . y.a.. . . . ",'#10'". . z.'
|
||||||
|
+'A.j B.C.. . . . . w . . D.E.'' E.. . . ",'#10'". C.F.9 G.H.. . . . . . w'
|
||||||
|
+' w w D.D.I.J.. . . ",'#10'". K.L.M.N.H.. . . . . . w . . D.D.O.P.. . . "'
|
||||||
|
+','#10'". Q.R.S.T.U.. . . . . . w . . . . . . . . . ",'#10'". . e V.W.X..'
|
||||||
|
+' . . . . . w . . . . . . . . . ",'#10'". . Y.Z.`.# . . . . . . w . . D.D'
|
||||||
|
+'.D.D.. . . ",'#10'". . . . . . . . . . . . w w w D.D.D.D.. . . ",'#10'".'
|
||||||
|
+' . . . . . . . . . . . . . . D.D.D.D.. . . "};'#10
|
||||||
|
);
|
||||||
|
@ -16,7 +16,16 @@
|
|||||||
Author: Mattias Gaertner
|
Author: Mattias Gaertner
|
||||||
|
|
||||||
Abstract:
|
Abstract:
|
||||||
- TCodeToolsDefinesEditor
|
- TCodeToolsDefinesEditor is an editor for the CodeTools DefineTree used by
|
||||||
|
the IDE. The DefineTree defines all values, that are not in the sources,
|
||||||
|
but are provided by for example Makefiles, compiler command lines and
|
||||||
|
compiler config files.
|
||||||
|
|
||||||
|
There are three types of nodes:
|
||||||
|
- auto generated: These are created by the IDE.
|
||||||
|
- project specific: These nodes are saved in the project info file (.lpi)
|
||||||
|
- the rest are global nodes, saved in the codetoolsoptions.xml file.
|
||||||
|
|
||||||
}
|
}
|
||||||
unit CodeToolsDefines;
|
unit CodeToolsDefines;
|
||||||
|
|
||||||
@ -47,8 +56,10 @@ type
|
|||||||
MoveNodeLvlDownMenuItem: TMenuItem;
|
MoveNodeLvlDownMenuItem: TMenuItem;
|
||||||
InsertBehindMenuItem: TMenuItem;
|
InsertBehindMenuItem: TMenuItem;
|
||||||
InsertBehindDefineMenuItem: TMenuItem;
|
InsertBehindDefineMenuItem: TMenuItem;
|
||||||
InsertBehindDefineAllMenuItem: TMenuItem;
|
InsertBehindDefineRecurseMenuItem: TMenuItem;
|
||||||
InsertBehindUndefineMenuItem: TMenuItem;
|
InsertBehindUndefineMenuItem: TMenuItem;
|
||||||
|
InsertBehindUndefineRecurseMenuItem: TMenuItem;
|
||||||
|
InsertBehindUndefineAllMenuItem: TMenuItem;
|
||||||
InsertBehindBlockMenuItem: TMenuItem;
|
InsertBehindBlockMenuItem: TMenuItem;
|
||||||
InsertBehindDirectoryMenuItem: TMenuItem;
|
InsertBehindDirectoryMenuItem: TMenuItem;
|
||||||
InsertBehindIfMenuItem: TMenuItem;
|
InsertBehindIfMenuItem: TMenuItem;
|
||||||
@ -58,8 +69,10 @@ type
|
|||||||
InsertBehindElseMenuItem: TMenuItem;
|
InsertBehindElseMenuItem: TMenuItem;
|
||||||
InsertAsChildMenuItem: TMenuItem;
|
InsertAsChildMenuItem: TMenuItem;
|
||||||
InsertAsChildDefineMenuItem: TMenuItem;
|
InsertAsChildDefineMenuItem: TMenuItem;
|
||||||
InsertAsChildDefineAllMenuItem: TMenuItem;
|
InsertAsChildDefineRecurseMenuItem: TMenuItem;
|
||||||
InsertAsChildUndefineMenuItem: TMenuItem;
|
InsertAsChildUndefineMenuItem: TMenuItem;
|
||||||
|
InsertAsChildUndefineRecurseMenuItem: TMenuItem;
|
||||||
|
InsertAsChildUndefineAllMenuItem: TMenuItem;
|
||||||
InsertAsChildBlockMenuItem: TMenuItem;
|
InsertAsChildBlockMenuItem: TMenuItem;
|
||||||
InsertAsChildDirectoryMenuItem: TMenuItem;
|
InsertAsChildDirectoryMenuItem: TMenuItem;
|
||||||
InsertAsChildIfMenuItem: TMenuItem;
|
InsertAsChildIfMenuItem: TMenuItem;
|
||||||
@ -100,18 +113,30 @@ type
|
|||||||
DeleteFilePathBitBtn: TBitBtn;
|
DeleteFilePathBitBtn: TBitBtn;
|
||||||
InsertFilePathBitBtn: TBitBtn;
|
InsertFilePathBitBtn: TBitBtn;
|
||||||
|
|
||||||
procedure SaveAndExitMenuItemClick(Sender: TObject);
|
// misc
|
||||||
procedure DontSaveAndExitMenuItemClick(Sender: TObject);
|
|
||||||
procedure FormResize(Sender: TObject);
|
procedure FormResize(Sender: TObject);
|
||||||
procedure DefineTreeViewMouseUp(Sender: TObject; Button: TMouseButton;
|
procedure DefineTreeViewMouseUp(Sender: TObject; Button: TMouseButton;
|
||||||
Shift: TShiftState; X,Y: integer);
|
Shift: TShiftState; X,Y: integer);
|
||||||
|
procedure ProjectSpecificCheckBoxClick(Sender: TObject);
|
||||||
|
|
||||||
|
// exit menu
|
||||||
|
procedure SaveAndExitMenuItemClick(Sender: TObject);
|
||||||
|
procedure DontSaveAndExitMenuItemClick(Sender: TObject);
|
||||||
|
|
||||||
|
// value notebook
|
||||||
procedure ValueNoteBookPageChanged(Sender: TObject);
|
procedure ValueNoteBookPageChanged(Sender: TObject);
|
||||||
procedure MoveFilePathUpBitBtnClick(Sender: TObject);
|
procedure MoveFilePathUpBitBtnClick(Sender: TObject);
|
||||||
procedure MoveFilePathDownBitBtnClick(Sender: TObject);
|
procedure MoveFilePathDownBitBtnClick(Sender: TObject);
|
||||||
procedure DeleteFilePathBitBtnClick(Sender: TObject);
|
procedure DeleteFilePathBitBtnClick(Sender: TObject);
|
||||||
procedure InsertFilePathBitBtnClick(Sender: TObject);
|
procedure InsertFilePathBitBtnClick(Sender: TObject);
|
||||||
|
|
||||||
|
// edit menu
|
||||||
procedure InsertNodeMenuItemClick(Sender: TObject);
|
procedure InsertNodeMenuItemClick(Sender: TObject);
|
||||||
procedure ProjectSpecificCheckBoxClick(Sender: TObject);
|
procedure MoveNodeUpMenuItemClick(Sender: TObject);
|
||||||
|
procedure MoveNodeDownMenuItemClick(Sender: TObject);
|
||||||
|
procedure MoveNodeLvlUpMenuItemClick(Sender: TObject);
|
||||||
|
procedure MoveNodeLvlDownMenuItemClick(Sender: TObject);
|
||||||
|
procedure DeleteNodeMenuItemClick(Sender: TObject);
|
||||||
private
|
private
|
||||||
FDefineTree: TDefineTree;
|
FDefineTree: TDefineTree;
|
||||||
FLastSelectedNode: TTreeNode;
|
FLastSelectedNode: TTreeNode;
|
||||||
@ -127,6 +152,9 @@ type
|
|||||||
procedure SetTypeLabel;
|
procedure SetTypeLabel;
|
||||||
function ValueToFilePathText(const AValue: string): string;
|
function ValueToFilePathText(const AValue: string): string;
|
||||||
procedure InsertNewNode(Behind: boolean; Action: TDefineAction);
|
procedure InsertNewNode(Behind: boolean; Action: TDefineAction);
|
||||||
|
function FindUniqueName: string;
|
||||||
|
function ConsistencyCheck: integer;
|
||||||
|
procedure SetValuesEditable(AValue: boolean);
|
||||||
public
|
public
|
||||||
procedure Assign(ACodeToolBoss: TCodeToolManager;
|
procedure Assign(ACodeToolBoss: TCodeToolManager;
|
||||||
Options: TCodeToolsOptions);
|
Options: TCodeToolsOptions);
|
||||||
@ -141,12 +169,6 @@ function ShowCodeToolsDefinesEditor(ACodeToolBoss: TCodeToolManager;
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
const
|
|
||||||
DefineActionNames: array[TDefineAction] of string = (
|
|
||||||
'None', 'Block', 'Define', 'Undefine', 'DefineAll',
|
|
||||||
'If', 'IfDef', 'IfNDef', 'ElseIf', 'Else', 'Directory'
|
|
||||||
);
|
|
||||||
|
|
||||||
type
|
type
|
||||||
TWinControlClass = class of TWinControl;
|
TWinControlClass = class of TWinControl;
|
||||||
|
|
||||||
@ -288,7 +310,10 @@ end;
|
|||||||
|
|
||||||
procedure TCodeToolsDefinesEditor.ValueNoteBookPageChanged(Sender: TObject);
|
procedure TCodeToolsDefinesEditor.ValueNoteBookPageChanged(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
if ValueNoteBook.PageIndex=0 then ValueAsPathToValueAsText;
|
if ValueNoteBook.PageIndex=0 then
|
||||||
|
ValueAsPathToValueAsText
|
||||||
|
else
|
||||||
|
ValueAsFilePathsSynEdit.Text:=ValueToFilePathText(ValueAsTextSynEdit.Text);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCodeToolsDefinesEditor.MoveFilePathUpBitBtnClick(Sender: TObject);
|
procedure TCodeToolsDefinesEditor.MoveFilePathUpBitBtnClick(Sender: TObject);
|
||||||
@ -333,8 +358,10 @@ var Behind: boolean;
|
|||||||
begin
|
begin
|
||||||
Behind:=(TMenuItem(Sender).Parent=InsertBehindMenuItem);
|
Behind:=(TMenuItem(Sender).Parent=InsertBehindMenuItem);
|
||||||
if Sender=InsertBehindDefineMenuItem then Action:=da_Define
|
if Sender=InsertBehindDefineMenuItem then Action:=da_Define
|
||||||
else if Sender=InsertBehindDefineAllMenuItem then Action:=da_DefineAll
|
else if Sender=InsertBehindDefineRecurseMenuItem then Action:=da_DefineRecurse
|
||||||
else if Sender=InsertBehindUndefineMenuItem then Action:=da_Undefine
|
else if Sender=InsertBehindUndefineMenuItem then Action:=da_Undefine
|
||||||
|
else if Sender=InsertBehindUndefineRecurseMenuItem then Action:=da_UndefineRecurse
|
||||||
|
else if Sender=InsertBehindUndefineAllMenuItem then Action:=da_UndefineAll
|
||||||
else if Sender=InsertBehindBlockMenuItem then Action:=da_Block
|
else if Sender=InsertBehindBlockMenuItem then Action:=da_Block
|
||||||
else if Sender=InsertBehindDirectoryMenuItem then Action:=da_Directory
|
else if Sender=InsertBehindDirectoryMenuItem then Action:=da_Directory
|
||||||
else if Sender=InsertBehindIfMenuItem then Action:=da_If
|
else if Sender=InsertBehindIfMenuItem then Action:=da_If
|
||||||
@ -343,8 +370,10 @@ begin
|
|||||||
else if Sender=InsertBehindElseIfMenuItem then Action:=da_ElseIf
|
else if Sender=InsertBehindElseIfMenuItem then Action:=da_ElseIf
|
||||||
else if Sender=InsertBehindElseMenuItem then Action:=da_Else
|
else if Sender=InsertBehindElseMenuItem then Action:=da_Else
|
||||||
else if Sender=InsertAsChildDefineMenuItem then Action:=da_Define
|
else if Sender=InsertAsChildDefineMenuItem then Action:=da_Define
|
||||||
else if Sender=InsertAsChildDefineAllMenuItem then Action:=da_DefineAll
|
else if Sender=InsertAsChildDefineRecurseMenuItem then Action:=da_DefineRecurse
|
||||||
else if Sender=InsertAsChildUndefineMenuItem then Action:=da_Undefine
|
else if Sender=InsertAsChildUndefineMenuItem then Action:=da_Undefine
|
||||||
|
else if Sender=InsertAsChildUndefineRecurseMenuItem then Action:=da_UndefineRecurse
|
||||||
|
else if Sender=InsertAsChildUndefineAllMenuItem then Action:=da_UndefineAll
|
||||||
else if Sender=InsertAsChildBlockMenuItem then Action:=da_Block
|
else if Sender=InsertAsChildBlockMenuItem then Action:=da_Block
|
||||||
else if Sender=InsertAsChildDirectoryMenuItem then Action:=da_Directory
|
else if Sender=InsertAsChildDirectoryMenuItem then Action:=da_Directory
|
||||||
else if Sender=InsertAsChildIfMenuItem then Action:=da_If
|
else if Sender=InsertAsChildIfMenuItem then Action:=da_If
|
||||||
@ -355,17 +384,136 @@ begin
|
|||||||
InsertNewNode(Behind,Action);
|
InsertNewNode(Behind,Action);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolsDefinesEditor.MoveNodeUpMenuItemClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
SelTreeNode: TTreeNode;
|
||||||
|
SelDefNode, PrevDefNode: TDefineTemplate;
|
||||||
|
begin
|
||||||
|
SelTreeNode:=DefineTreeView.Selected;
|
||||||
|
if (SelTreeNode=nil) or (SelTreeNode.GetPrevSibling=nil) then exit;
|
||||||
|
SelDefNode:=TDefineTemplate(SelTreeNode.Data);
|
||||||
|
PrevDefNode:=SelDefNode.Prior;
|
||||||
|
// move node up in TreeView
|
||||||
|
SelTreeNode.MoveTo(SelTreeNode.GetPrevSibling,naInsert);
|
||||||
|
// move node up in DefineTree
|
||||||
|
SelDefNode.Unbind;
|
||||||
|
SelDefNode.InsertInFront(PrevDefNode);
|
||||||
|
SelTreeNode.MakeVisible;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolsDefinesEditor.MoveNodeDownMenuItemClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
SelTreeNode: TTreeNode;
|
||||||
|
SelDefNode, NextDefNode: TDefineTemplate;
|
||||||
|
begin
|
||||||
|
SelTreeNode:=DefineTreeView.Selected;
|
||||||
|
if (SelTreeNode=nil) or (SelTreeNode.GetNextSibling=nil) then exit;
|
||||||
|
SelDefNode:=TDefineTemplate(SelTreeNode.Data);
|
||||||
|
NextDefNode:=SelDefNode.Next;
|
||||||
|
// move node down in TreeView
|
||||||
|
if SelTreeNode.GetNextSibling.GetNextSibling<>nil then
|
||||||
|
SelTreeNode.MoveTo(SelTreeNode.GetNextSibling.GetNextSibling,naInsert)
|
||||||
|
else
|
||||||
|
SelTreeNode.MoveTo(SelTreeNode.GetNextSibling,naAdd);
|
||||||
|
// move node down in DefineTree
|
||||||
|
SelDefNode.Unbind;
|
||||||
|
SelDefNode.InsertBehind(NextDefNode);
|
||||||
|
SelTreeNode.MakeVisible;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolsDefinesEditor.MoveNodeLvlUpMenuItemClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
SelTreeNode: TTreeNode;
|
||||||
|
SelDefNode, PrevDefNode: TDefineTemplate;
|
||||||
|
begin
|
||||||
|
SelTreeNode:=DefineTreeView.Selected;
|
||||||
|
if (SelTreeNode=nil) or (SelTreeNode.Parent=nil) then exit;
|
||||||
|
SelDefNode:=TDefineTemplate(SelTreeNode.Data);
|
||||||
|
if SelDefNode.IsAutoGenerated then begin
|
||||||
|
MessageDlg('Node is readonly','Auto generated nodes can not be edited.',
|
||||||
|
mtInformation,[mbCancel],0);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
// move node one lvl up in TreeView
|
||||||
|
if SelTreeNode.Parent.GetNextSibling<>nil then
|
||||||
|
SelTreeNode.MoveTo(SelTreeNode.Parent.GetNextSibling,naInsert)
|
||||||
|
else
|
||||||
|
SelTreeNode.MoveTo(SelTreeNode.Parent,naAdd);
|
||||||
|
// move node one lvl up in DefineTree
|
||||||
|
PrevDefNode:=SelDefNode.Parent;
|
||||||
|
SelDefNode.Unbind;
|
||||||
|
SelDefNode.InsertBehind(PrevDefNode);
|
||||||
|
SetNodeImages(SelTreeNode,true);
|
||||||
|
SelTreeNode.MakeVisible;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolsDefinesEditor.MoveNodeLvlDownMenuItemClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
SelTreeNode: TTreeNode;
|
||||||
|
SelDefNode, PrevDefNode: TDefineTemplate;
|
||||||
|
begin
|
||||||
|
SelTreeNode:=DefineTreeView.Selected;
|
||||||
|
if (SelTreeNode=nil) or (SelTreeNode.GetPrevSibling=nil) then exit;
|
||||||
|
SelDefNode:=TDefineTemplate(SelTreeNode.Data);
|
||||||
|
PrevDefNode:=SelDefNode.Prior;
|
||||||
|
if (SelDefNode.IsAutoGenerated) or (PrevDefNode.IsAutoGenerated) then begin
|
||||||
|
MessageDlg('Node is readonly','Auto generated nodes can not be edited.',
|
||||||
|
mtInformation,[mbCancel],0);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
if (not (PrevDefNode.Action in DefineActionBlocks)) then begin
|
||||||
|
MessageDlg('Invalid previous node',
|
||||||
|
'Previous node can not contain child nodes.',
|
||||||
|
mtInformation,[mbCancel],0);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
// move node one lvl down in TreeView
|
||||||
|
SelTreeNode.MoveTo(SelTreeNode.GetPrevSibling,naAddChild);
|
||||||
|
// move node one lvl up in DefineTree
|
||||||
|
SelDefNode.Unbind;
|
||||||
|
PrevDefNode.AddChild(SelDefNode);
|
||||||
|
SetNodeImages(SelTreeNode.Parent,true);
|
||||||
|
SelTreeNode.MakeVisible;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolsDefinesEditor.DeleteNodeMenuItemClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
SelTreeNode: TTreeNode;
|
||||||
|
SelDefNode: TDefineTemplate;
|
||||||
|
begin
|
||||||
|
SelTreeNode:=DefineTreeView.Selected;
|
||||||
|
if (SelTreeNode=nil) then exit;
|
||||||
|
SelDefNode:=TDefineTemplate(SelTreeNode.Data);
|
||||||
|
if (SelDefNode.IsAutoGenerated) then begin
|
||||||
|
MessageDlg('Node is readonly','Auto generated nodes can not be edited.',
|
||||||
|
mtInformation,[mbCancel],0);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
if FLastSelectedNode=SelTreeNode then FLastSelectedNode:=nil;
|
||||||
|
writeln(' AAA1 ',ConsistencyCheck);
|
||||||
|
// delete node in TreeView
|
||||||
|
SelTreeNode.Free;
|
||||||
|
// delete node in DefineTree
|
||||||
|
SelDefNode.Unbind;
|
||||||
|
SelDefNode.Free;
|
||||||
|
writeln(' AAA2 ',ConsistencyCheck);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCodeToolsDefinesEditor.ProjectSpecificCheckBoxClick(Sender: TObject);
|
procedure TCodeToolsDefinesEditor.ProjectSpecificCheckBoxClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
SelTreeNode: TTreeNode;
|
SelTreeNode: TTreeNode;
|
||||||
SelDefNode: TDefineTemplate;
|
SelDefNode: TDefineTemplate;
|
||||||
begin
|
begin
|
||||||
if not SelectedItemGroupBox.Enabled then exit;
|
|
||||||
SelTreeNode:=DefineTreeView.Selected;
|
SelTreeNode:=DefineTreeView.Selected;
|
||||||
if SelTreeNode=nil then exit;
|
if SelTreeNode=nil then exit;
|
||||||
SelDefNode:=TDefineTemplate(SelTreeNode.Data);
|
SelDefNode:=TDefineTemplate(SelTreeNode.Data);
|
||||||
if ProjectSpecificCheckBox.Checked=(dtfProjectSpecific in SelDefNode.Flags)
|
if ProjectSpecificCheckBox.Checked=(dtfProjectSpecific in SelDefNode.Flags)
|
||||||
then exit;
|
then exit;
|
||||||
|
if SelDefNode.IsAutoGenerated then begin
|
||||||
|
MessageDlg('Node is readonly','Auto generated nodes can not be edited.',
|
||||||
|
mtInformation,[mbCancel],0);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
if ProjectSpecificCheckBox.Checked then
|
if ProjectSpecificCheckBox.Checked then
|
||||||
Include(SelDefNode.Flags,dtfProjectSpecific)
|
Include(SelDefNode.Flags,dtfProjectSpecific)
|
||||||
else
|
else
|
||||||
@ -417,8 +565,10 @@ begin
|
|||||||
Height:=22;
|
Height:=22;
|
||||||
Name:='TheImageList';
|
Name:='TheImageList';
|
||||||
AddResImg('define_22x22');
|
AddResImg('define_22x22');
|
||||||
AddResImg('defineall_22x22');
|
AddResImg('definerecurse_22x22');
|
||||||
AddResImg('undefine_22x22');
|
AddResImg('undefine_22x22');
|
||||||
|
AddResImg('undefinerecurse_22x22');
|
||||||
|
AddResImg('undefineall_22x22');
|
||||||
AddResImg('block_22x22');
|
AddResImg('block_22x22');
|
||||||
AddResImg('directory_22x22');
|
AddResImg('directory_22x22');
|
||||||
AddResImg('if_22x22');
|
AddResImg('if_22x22');
|
||||||
@ -451,37 +601,56 @@ begin
|
|||||||
AddMenuItem(EditMenuItem,'EditMenuItem','Edit',nil);
|
AddMenuItem(EditMenuItem,'EditMenuItem','Edit',nil);
|
||||||
AddMenuItem(MoveNodeUpMenuItem,'MoveNodeUpMenuItem','Move node up',
|
AddMenuItem(MoveNodeUpMenuItem,'MoveNodeUpMenuItem','Move node up',
|
||||||
EditMenuItem);
|
EditMenuItem);
|
||||||
|
MoveNodeUpMenuItem.OnClick:=@MoveNodeUpMenuItemClick;
|
||||||
|
|
||||||
AddMenuItem(MoveNodeDownMenuItem,'MoveNodeDownMenuItem','Move node down',
|
AddMenuItem(MoveNodeDownMenuItem,'MoveNodeDownMenuItem','Move node down',
|
||||||
EditMenuItem);
|
EditMenuItem);
|
||||||
|
MoveNodeDownMenuItem.OnClick:=@MoveNodeDownMenuItemClick;
|
||||||
|
|
||||||
AddMenuItem(MoveNodeLvlUpMenuItem,'MoveNodeLvlUpMenuItem','Move node one level up',
|
AddMenuItem(MoveNodeLvlUpMenuItem,'MoveNodeLvlUpMenuItem','Move node one level up',
|
||||||
EditMenuItem);
|
EditMenuItem);
|
||||||
|
MoveNodeLvlUpMenuItem.OnClick:=@MoveNodeLvlUpMenuItemClick;
|
||||||
|
|
||||||
AddMenuItem(MoveNodeLvlDownMenuItem,'MoveNodeLvlDownMenuItem','Move node one level down',
|
AddMenuItem(MoveNodeLvlDownMenuItem,'MoveNodeLvlDownMenuItem','Move node one level down',
|
||||||
EditMenuItem);
|
EditMenuItem);
|
||||||
|
MoveNodeLvlDownMenuItem.OnClick:=@MoveNodeLvlDownMenuItemClick;
|
||||||
|
|
||||||
EditMenuItem.Add(CreateSeperator);
|
EditMenuItem.Add(CreateSeperator);
|
||||||
AddMenuItem(InsertBehindMenuItem,'InsertBehindMenuItem','Insert node behind',
|
AddMenuItem(InsertBehindMenuItem,'InsertBehindMenuItem','Insert node below',
|
||||||
EditMenuItem);
|
EditMenuItem);
|
||||||
AddMenuItem(InsertAsChildMenuItem,'InsertAsChildMenuItem','Insert node as child',
|
AddMenuItem(InsertAsChildMenuItem,'InsertAsChildMenuItem','Insert node as child',
|
||||||
EditMenuItem);
|
EditMenuItem);
|
||||||
EditMenuItem.Add(CreateSeperator);
|
EditMenuItem.Add(CreateSeperator);
|
||||||
AddMenuItem(DeleteNodeMenuItem,'DeleteNodeMenuItem','Delete node',
|
AddMenuItem(DeleteNodeMenuItem,'DeleteNodeMenuItem','Delete node',
|
||||||
EditMenuItem);
|
EditMenuItem);
|
||||||
EditMenuItem.Add(CreateSeperator);
|
DeleteNodeMenuItem.OnClick:=@DeleteNodeMenuItemClick;
|
||||||
|
|
||||||
|
{ EditMenuItem.Add(CreateSeperator);
|
||||||
AddMenuItem(CopyToClipbrdMenuItem,'CopyToClipbrdMenuItem','Copy to clipboard',
|
AddMenuItem(CopyToClipbrdMenuItem,'CopyToClipbrdMenuItem','Copy to clipboard',
|
||||||
EditMenuItem);
|
EditMenuItem);
|
||||||
AddMenuItem(PasteFromClipbrdMenuItem,'PasteFromClipbrdMenuItem',
|
AddMenuItem(PasteFromClipbrdMenuItem,'PasteFromClipbrdMenuItem',
|
||||||
'Paste from clipboard',EditMenuItem);
|
'Paste from clipboard',EditMenuItem);}
|
||||||
|
|
||||||
// insert node behind submenu
|
// insert node behind submenu
|
||||||
AddMenuItem(InsertBehindDefineMenuItem,'InsertBehindDefineMenuItem','Define',
|
AddMenuItem(InsertBehindDefineMenuItem,'InsertBehindDefineMenuItem','Define',
|
||||||
InsertBehindMenuItem);
|
InsertBehindMenuItem);
|
||||||
AddMenuItem(InsertBehindDefineAllMenuItem,'InsertBehindDefineAllMenuItem','Define All',
|
AddMenuItem(InsertBehindDefineRecurseMenuItem,
|
||||||
|
'InsertBehindDefineRecurseMenuItem','Define Recurse',
|
||||||
InsertBehindMenuItem);
|
InsertBehindMenuItem);
|
||||||
AddMenuItem(InsertBehindUndefineMenuItem,'InsertBehindUndefineMenuItem','Undefine',
|
AddMenuItem(InsertBehindUndefineMenuItem,
|
||||||
|
'InsertBehindUndefineMenuItem','Undefine',
|
||||||
|
InsertBehindMenuItem);
|
||||||
|
AddMenuItem(InsertBehindUndefineRecurseMenuItem,
|
||||||
|
'InsertBehindUndefineRecurseMenuItem','Undefine Recurse',
|
||||||
|
InsertBehindMenuItem);
|
||||||
|
AddMenuItem(InsertBehindUndefineAllMenuItem,
|
||||||
|
'InsertBehindUndefineAllMenuItem','Undefine All',
|
||||||
InsertBehindMenuItem);
|
InsertBehindMenuItem);
|
||||||
InsertBehindMenuItem.Add(CreateSeperator);
|
InsertBehindMenuItem.Add(CreateSeperator);
|
||||||
AddMenuItem(InsertBehindBlockMenuItem,'InsertBehindBlockMenuItem','Block',
|
AddMenuItem(InsertBehindBlockMenuItem,'InsertBehindBlockMenuItem','Block',
|
||||||
InsertBehindMenuItem);
|
InsertBehindMenuItem);
|
||||||
AddMenuItem(InsertBehindDirectoryMenuItem,'InsertBehindDirectoryMenuItem','Directory',
|
AddMenuItem(InsertBehindDirectoryMenuItem,
|
||||||
|
'InsertBehindDirectoryMenuItem','Directory',
|
||||||
InsertBehindMenuItem);
|
InsertBehindMenuItem);
|
||||||
InsertBehindMenuItem.Add(CreateSeperator);
|
InsertBehindMenuItem.Add(CreateSeperator);
|
||||||
AddMenuItem(InsertBehindIfMenuItem,'InsertBehindIfMenuItem','If',
|
AddMenuItem(InsertBehindIfMenuItem,'InsertBehindIfMenuItem','If',
|
||||||
@ -501,14 +670,23 @@ begin
|
|||||||
// insert node as child submenu
|
// insert node as child submenu
|
||||||
AddMenuItem(InsertAsChildDefineMenuItem,'InsertAsChildDefineMenuItem','Define',
|
AddMenuItem(InsertAsChildDefineMenuItem,'InsertAsChildDefineMenuItem','Define',
|
||||||
InsertAsChildMenuItem);
|
InsertAsChildMenuItem);
|
||||||
AddMenuItem(InsertAsChildDefineAllMenuItem,'InsertAsChildDefineAllMenuItem','Define All',
|
AddMenuItem(InsertAsChildDefineRecurseMenuItem,
|
||||||
|
'InsertAsChildDefineRecurseMenuItem','Define Recurse',
|
||||||
InsertAsChildMenuItem);
|
InsertAsChildMenuItem);
|
||||||
AddMenuItem(InsertAsChildUndefineMenuItem,'InsertAsChildUndefineMenuItem','Undefine',
|
AddMenuItem(InsertAsChildUndefineMenuItem,
|
||||||
|
'InsertAsChildUndefineMenuItem','Undefine',
|
||||||
|
InsertAsChildMenuItem);
|
||||||
|
AddMenuItem(InsertAsChildUndefineRecurseMenuItem,
|
||||||
|
'InsertAsChildUndefineRecurseMenuItem','Undefine Recurse',
|
||||||
|
InsertAsChildMenuItem);
|
||||||
|
AddMenuItem(InsertAsChildUndefineAllMenuItem,
|
||||||
|
'InsertAsChildUndefineAllMenuItem','Undefine All',
|
||||||
InsertAsChildMenuItem);
|
InsertAsChildMenuItem);
|
||||||
InsertAsChildMenuItem.Add(CreateSeperator);
|
InsertAsChildMenuItem.Add(CreateSeperator);
|
||||||
AddMenuItem(InsertAsChildBlockMenuItem,'InsertAsChildBlockMenuItem','Block',
|
AddMenuItem(InsertAsChildBlockMenuItem,'InsertAsChildBlockMenuItem','Block',
|
||||||
InsertAsChildMenuItem);
|
InsertAsChildMenuItem);
|
||||||
AddMenuItem(InsertAsChildDirectoryMenuItem,'InsertAsChildDirectoryMenuItem','Directory',
|
AddMenuItem(InsertAsChildDirectoryMenuItem,
|
||||||
|
'InsertAsChildDirectoryMenuItem','Directory',
|
||||||
InsertAsChildMenuItem);
|
InsertAsChildMenuItem);
|
||||||
InsertAsChildMenuItem.Add(CreateSeperator);
|
InsertAsChildMenuItem.Add(CreateSeperator);
|
||||||
AddMenuItem(InsertAsChildIfMenuItem,'InsertAsChildIfMenuItem','If',
|
AddMenuItem(InsertAsChildIfMenuItem,'InsertAsChildIfMenuItem','If',
|
||||||
@ -526,11 +704,11 @@ begin
|
|||||||
InsertAsChildMenuItem[i].OnClick:=@InsertNodeMenuItemClick;
|
InsertAsChildMenuItem[i].OnClick:=@InsertNodeMenuItemClick;
|
||||||
|
|
||||||
// tools
|
// tools
|
||||||
AddMenuItem(ToolsMenuItem,'ToolsMenuItem','Tools',nil);
|
{ AddMenuItem(ToolsMenuItem,'ToolsMenuItem','Tools',nil);
|
||||||
AddMenuItem(OpenPreviewMenuItem,'OpenPreviewMenuItem','Open Preview',
|
AddMenuItem(OpenPreviewMenuItem,'OpenPreviewMenuItem','Open Preview',
|
||||||
ToolsMenuItem);
|
ToolsMenuItem);
|
||||||
AddMenuItem(ShowMacroListMenuItem,'ShowMacroListMenuItem','Show Macros',
|
AddMenuItem(ShowMacroListMenuItem,'ShowMacroListMenuItem','Show Macros',
|
||||||
ToolsMenuItem);
|
ToolsMenuItem);}
|
||||||
|
|
||||||
// templates
|
// templates
|
||||||
AddMenuItem(InsertTemplateMenuItem,'InsertTemplateMenuItem',
|
AddMenuItem(InsertTemplateMenuItem,'InsertTemplateMenuItem',
|
||||||
@ -658,29 +836,31 @@ begin
|
|||||||
ADefineTemplate:=TDefineTemplate(ANode.Data);
|
ADefineTemplate:=TDefineTemplate(ANode.Data);
|
||||||
case ADefineTemplate.Action of
|
case ADefineTemplate.Action of
|
||||||
da_Define: ANode.ImageIndex:=0;
|
da_Define: ANode.ImageIndex:=0;
|
||||||
da_DefineAll: ANode.ImageIndex:=1;
|
da_DefineRecurse: ANode.ImageIndex:=1;
|
||||||
da_Undefine: ANode.ImageIndex:=2;
|
da_Undefine: ANode.ImageIndex:=2;
|
||||||
da_Block: ANode.ImageIndex:=3;
|
da_UndefineRecurse: ANode.ImageIndex:=3;
|
||||||
da_Directory: ANode.ImageIndex:=4;
|
da_UndefineAll: ANode.ImageIndex:=4;
|
||||||
da_If: ANode.ImageIndex:=5;
|
da_Block: ANode.ImageIndex:=5;
|
||||||
da_IfDef: ANode.ImageIndex:=6;
|
da_Directory: ANode.ImageIndex:=6;
|
||||||
da_IfNDef: ANode.ImageIndex:=7;
|
da_If: ANode.ImageIndex:=7;
|
||||||
da_ElseIf: ANode.ImageIndex:=8;
|
da_IfDef: ANode.ImageIndex:=8;
|
||||||
da_Else: ANode.ImageIndex:=9;
|
da_IfNDef: ANode.ImageIndex:=9;
|
||||||
|
da_ElseIf: ANode.ImageIndex:=10;
|
||||||
|
da_Else: ANode.ImageIndex:=11;
|
||||||
else
|
else
|
||||||
ANode.ImageIndex:=-1;
|
ANode.ImageIndex:=-1;
|
||||||
end;
|
end;
|
||||||
ANode.SelectedIndex:=ANode.ImageIndex;
|
ANode.SelectedIndex:=ANode.ImageIndex;
|
||||||
if ADefineTemplate.IsAutoGenerated then begin
|
if ADefineTemplate.IsAutoGenerated then begin
|
||||||
if ADefineTemplate.IsProjectSpecific then
|
if ADefineTemplate.IsProjectSpecific then
|
||||||
ANode.StateIndex:=13
|
ANode.StateIndex:=15
|
||||||
else
|
else
|
||||||
ANode.StateIndex:=11;
|
ANode.StateIndex:=13;
|
||||||
end else begin
|
end else begin
|
||||||
if ADefineTemplate.IsProjectSpecific then
|
if ADefineTemplate.IsProjectSpecific then
|
||||||
ANode.StateIndex:=12
|
ANode.StateIndex:=14
|
||||||
else
|
else
|
||||||
ANode.StateIndex:=10;
|
ANode.StateIndex:=12;
|
||||||
end;
|
end;
|
||||||
if WithSubNodes then begin
|
if WithSubNodes then begin
|
||||||
ANode:=ANode.GetFirstChild;
|
ANode:=ANode.GetFirstChild;
|
||||||
@ -697,21 +877,15 @@ var s: string;
|
|||||||
begin
|
begin
|
||||||
s:=ValueAsFilePathsSynEdit.Text;
|
s:=ValueAsFilePathsSynEdit.Text;
|
||||||
l:=length(s);
|
l:=length(s);
|
||||||
if (l>0) and (s[l] in [#13,#10]) then begin
|
|
||||||
// remove line end at end of Text, that was added automatically
|
|
||||||
dec(l);
|
|
||||||
if (l>0) and (s[l] in [#13,#10]) and (s[l]<>s[l+1]) then
|
|
||||||
dec(l);
|
|
||||||
SetLength(s,l);
|
|
||||||
end;
|
|
||||||
// replace line ends with semicolon
|
// replace line ends with semicolon
|
||||||
i:=1;
|
i:=1;
|
||||||
j:=1;
|
j:=1;
|
||||||
while i<=l do begin
|
while i<=l do begin
|
||||||
if s[i] in [#10,#13] then begin
|
if s[i] in [#10,#13] then begin
|
||||||
inc(i);
|
inc(i);
|
||||||
if (i<l) and (s[i] in [#10,#13]) and (s[i]<>s[i+1]) then
|
if (i<l) and (s[i] in [#10,#13]) and (s[i-1]<>s[i]) then begin
|
||||||
inc(i);
|
inc(i);
|
||||||
|
end;
|
||||||
s[j]:=';';
|
s[j]:=';';
|
||||||
inc(j);
|
inc(j);
|
||||||
end else begin
|
end else begin
|
||||||
@ -720,7 +894,9 @@ begin
|
|||||||
inc(j);
|
inc(j);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
SetLength(s,j-1);
|
dec(j);
|
||||||
|
while (j>=1) and (s[j]=';') do dec(j);
|
||||||
|
SetLength(s,j);
|
||||||
ValueAsTextSynEdit.Text:=s;
|
ValueAsTextSynEdit.Text:=s;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -764,7 +940,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
if SelTreeNode<>nil then begin
|
if SelTreeNode<>nil then begin
|
||||||
SelDefNode:=TDefineTemplate(SelTreeNode.Data);
|
SelDefNode:=TDefineTemplate(SelTreeNode.Data);
|
||||||
SelectedItemGroupBox.Enabled:=true;
|
SetValuesEditable(not SelDefNode.IsAutoGenerated);
|
||||||
ProjectSpecificCheckBox.Checked:=dtfProjectSpecific in SelDefNode.Flags;
|
ProjectSpecificCheckBox.Checked:=dtfProjectSpecific in SelDefNode.Flags;
|
||||||
NameEdit.Text:=SelDefNode.Name;
|
NameEdit.Text:=SelDefNode.Name;
|
||||||
DescriptionEdit.Text:=SelDefNode.Description;
|
DescriptionEdit.Text:=SelDefNode.Description;
|
||||||
@ -781,7 +957,7 @@ begin
|
|||||||
ValueAsFilePathsSynEdit.Options:=ValueAsTextSynEdit.Options;
|
ValueAsFilePathsSynEdit.Options:=ValueAsTextSynEdit.Options;
|
||||||
ValueAsFilePathsSynEdit.ReadOnly:=ValueAsTextSynEdit.ReadOnly;
|
ValueAsFilePathsSynEdit.ReadOnly:=ValueAsTextSynEdit.ReadOnly;
|
||||||
end else begin
|
end else begin
|
||||||
SelectedItemGroupBox.Enabled:=false;
|
SetValuesEditable(false);
|
||||||
NameEdit.Text:='';
|
NameEdit.Text:='';
|
||||||
DescriptionEdit.Text:='';
|
DescriptionEdit.Text:='';
|
||||||
VariableEdit.Text:='';
|
VariableEdit.Text:='';
|
||||||
@ -823,11 +999,10 @@ end;
|
|||||||
|
|
||||||
procedure TCodeToolsDefinesEditor.InsertNewNode(Behind: boolean;
|
procedure TCodeToolsDefinesEditor.InsertNewNode(Behind: boolean;
|
||||||
Action: TDefineAction);
|
Action: TDefineAction);
|
||||||
var SelTreeNode, NodeInFront, ParentNode, ANode, FirstNode,
|
var SelTreeNode, NodeInFront, ParentNode,
|
||||||
NewTreeNode: TTreeNode;
|
NewTreeNode: TTreeNode;
|
||||||
NewDefNode: TDefineTemplate;
|
NewDefNode: TDefineTemplate;
|
||||||
NewName, NewDescription, NewVariable, NewValue: string;
|
NewName, NewDescription, NewVariable, NewValue: string;
|
||||||
i: integer;
|
|
||||||
begin
|
begin
|
||||||
SelTreeNode:=DefineTreeView.Selected;
|
SelTreeNode:=DefineTreeView.Selected;
|
||||||
NodeInFront:=nil;
|
NodeInFront:=nil;
|
||||||
@ -853,31 +1028,20 @@ begin
|
|||||||
end;
|
end;
|
||||||
if (ParentNode<>nil) and (TDefineTemplate(ParentNode.Data).IsAutoGenerated)
|
if (ParentNode<>nil) and (TDefineTemplate(ParentNode.Data).IsAutoGenerated)
|
||||||
then begin
|
then begin
|
||||||
MessageDlg('Invalid Parent','Auto created nodes can not be edited,'#13
|
MessageDlg('Invalid parent','Auto created nodes can not be edited,'#13
|
||||||
+'nor can they have non auto created child nodes.',mtInformation,[mbCancel]
|
+'nor can they have non auto created child nodes.',mtInformation,[mbCancel]
|
||||||
,0);
|
,0);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
// find an unique name
|
if (ParentNode<>nil)
|
||||||
if ParentNode<>nil then
|
and (not (TDefineTemplate(ParentNode.Data).Action in DefineActionBlocks)) then
|
||||||
FirstNode:=ParentNode.GetFirstChild
|
begin
|
||||||
else
|
MessageDlg('Invalid parent node',
|
||||||
FirstNode:=nil;
|
'Parent node can not contain child nodes.',
|
||||||
if FirstNode=nil then FirstNode:=NodeInFront;
|
mtInformation,[mbCancel],0);
|
||||||
if FirstNode<>nil then begin
|
exit;
|
||||||
while FirstNode.GetPrevSibling<>nil do
|
|
||||||
FirstNode:=FirstNode.GetPrevSibling;
|
|
||||||
end;
|
end;
|
||||||
i:=0;
|
NewName:=FindUniqueName;
|
||||||
repeat
|
|
||||||
inc(i);
|
|
||||||
ANode:=FirstNode;
|
|
||||||
while ANode<>nil do begin
|
|
||||||
if TDefineTemplate(ANode.Data).Name='NewNode'+IntToStr(i) then break;
|
|
||||||
ANode:=ANode.GetNextSibling;
|
|
||||||
end;
|
|
||||||
until ANode=nil;
|
|
||||||
NewName:='NewNode'+IntToStr(i);
|
|
||||||
NewDescription:=NewName;
|
NewDescription:=NewName;
|
||||||
NewVariable:='';
|
NewVariable:='';
|
||||||
NewValue:='';
|
NewValue:='';
|
||||||
@ -895,7 +1059,7 @@ begin
|
|||||||
|
|
||||||
// add node to define tree
|
// add node to define tree
|
||||||
if NodeInFront<>nil then
|
if NodeInFront<>nil then
|
||||||
NewDefNode.InsertAfter(TDefineTemplate(NodeInFront.Data))
|
NewDefNode.InsertBehind(TDefineTemplate(NodeInFront.Data))
|
||||||
else if ParentNode<>nil then
|
else if ParentNode<>nil then
|
||||||
TDefineTemplate(ParentNode.Data).AddChild(NewDefNode)
|
TDefineTemplate(ParentNode.Data).AddChild(NewDefNode)
|
||||||
else
|
else
|
||||||
@ -903,6 +1067,99 @@ begin
|
|||||||
|
|
||||||
SetNodeImages(NewTreeNode,true);
|
SetNodeImages(NewTreeNode,true);
|
||||||
DefineTreeView.Selected:=NewTreeNode;
|
DefineTreeView.Selected:=NewTreeNode;
|
||||||
|
ShowSelectedValues;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCodeToolsDefinesEditor.FindUniqueName: string;
|
||||||
|
var i: integer;
|
||||||
|
begin
|
||||||
|
i:=1;
|
||||||
|
while (DefineTree.FindDefineTemplateByName('NewNode'+IntToStr(i),false)<>nil)
|
||||||
|
do inc(i);
|
||||||
|
Result:='NewNode'+IntToStr(i);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCodeToolsDefinesEditor.ConsistencyCheck: integer;
|
||||||
|
|
||||||
|
function CheckNode(ATreeNode: TTreeNode): integer;
|
||||||
|
var ADefNode, DummyDefNode: TDefineTemplate;
|
||||||
|
begin
|
||||||
|
if ATreeNode=nil then exit;
|
||||||
|
ADefNode:=TDefineTemplate(ATreeNode.Data);
|
||||||
|
//writeln(' CheckNode "',ATreeNode.Text,'" "',ADefNode.Name,'"');
|
||||||
|
if ADefNode=nil then begin
|
||||||
|
Result:=-1; exit;
|
||||||
|
end;
|
||||||
|
if (ATreeNode.GetPrevSibling<>nil)
|
||||||
|
and (TDefineTemplate(ATreeNode.GetPrevSibling.Data)<>ADefNode.Prior) then
|
||||||
|
begin
|
||||||
|
Result:=-2; exit;
|
||||||
|
end;
|
||||||
|
if (ATreeNode.GetNextSibling<>nil)
|
||||||
|
and (TDefineTemplate(ATreeNode.GetNextSibling.Data)<>ADefNode.Next) then
|
||||||
|
begin
|
||||||
|
write(' ERROR: ',ATreeNode.GetNextSibling.Text,' ');
|
||||||
|
if ADefNode.Next<>nil then write('ADefNode.Next=',ADefNode.Next.Name,' ')
|
||||||
|
else write('ADefNode.Next=nil ');
|
||||||
|
DummyDefNode:=TDefineTemplate(ATreeNode.GetNextSibling.Data);
|
||||||
|
if DummyDefNode<>nil then
|
||||||
|
writeln('ATreeNode.GetNextSibling.Next=',DummyDefNode.Name)
|
||||||
|
else
|
||||||
|
writeln('ATreeNode.GetNextSibling.Next=nil');
|
||||||
|
writeln('=============================================');
|
||||||
|
DefineTreeView.WriteDebugReport('TV ',true);
|
||||||
|
writeln('=============================================');
|
||||||
|
DefineTree.WriteDebugReport;
|
||||||
|
writeln('=============================================');
|
||||||
|
Result:=-3; exit;
|
||||||
|
end;
|
||||||
|
if (ATreeNode.GetFirstChild<>nil)
|
||||||
|
and (TDefineTemplate(ATreeNode.GetFirstChild.Data)<>ADefNode.FirstChild)
|
||||||
|
then begin
|
||||||
|
Result:=-4; exit;
|
||||||
|
end;
|
||||||
|
Result:=CheckNode(ATreeNode.GetFirstChild);
|
||||||
|
if Result<0 then exit;
|
||||||
|
Result:=CheckNode(ATreeNode.GetNextSibling);
|
||||||
|
if Result<0 then exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=DefineTreeView.ConsistencyCheck;
|
||||||
|
if Result<0 then begin
|
||||||
|
dec(Result,100000);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
Result:=DefineTree.ConsistencyCheck;
|
||||||
|
if Result<0 then begin
|
||||||
|
dec(Result,200000);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
Result:=CheckNode(DefineTreeView.Items.GetFirstNode);
|
||||||
|
if Result<0 then begin
|
||||||
|
dec(Result,300000);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
Result:=0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolsDefinesEditor.SetValuesEditable(AValue: boolean);
|
||||||
|
begin
|
||||||
|
SelectedItemGroupBox.Enabled:=true;
|
||||||
|
TypeLabel.Enabled:=AValue;
|
||||||
|
ProjectSpecificCheckBox.Enabled:=AValue;
|
||||||
|
NameLabel.Enabled:=AValue;
|
||||||
|
NameEdit.Enabled:=AValue;
|
||||||
|
DescriptionLabel.Enabled:=AValue;
|
||||||
|
DescriptionEdit.Enabled:=AValue;
|
||||||
|
VariableLabel.Enabled:=AValue;
|
||||||
|
VariableEdit.Enabled:=AValue;
|
||||||
|
ValueAsTextSynEdit.ReadOnly:=not AValue;
|
||||||
|
ValueAsFilePathsSynEdit.ReadOnly:=not AValue;
|
||||||
|
MoveFilePathUpBitBtn.Enabled:=AValue;
|
||||||
|
MoveFilePathDownBitBtn.Enabled:=AValue;
|
||||||
|
DeleteFilePathBitBtn.Enabled:=AValue;
|
||||||
|
InsertFilePathBitBtn.Enabled:=AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCodeToolsDefinesEditor.Assign(ACodeToolBoss: TCodeToolManager;
|
procedure TCodeToolsDefinesEditor.Assign(ACodeToolBoss: TCodeToolManager;
|
||||||
|
@ -41,7 +41,7 @@ implementation
|
|||||||
function FindCurrentProjectDirTemplate: TDefineTemplate;
|
function FindCurrentProjectDirTemplate: TDefineTemplate;
|
||||||
begin
|
begin
|
||||||
Result:=CodeToolBoss.DefineTree.FindDefineTemplateByName(
|
Result:=CodeToolBoss.DefineTree.FindDefineTemplateByName(
|
||||||
ProjectDirDefTemplName);
|
ProjectDirDefTemplName,true);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function FindCurrentProjectDirSrcPathTemplate: TDefineTemplate;
|
function FindCurrentProjectDirSrcPathTemplate: TDefineTemplate;
|
||||||
@ -95,7 +95,6 @@ begin
|
|||||||
DontUseConfigFile
|
DontUseConfigFile
|
||||||
AdditionalConfigFile
|
AdditionalConfigFile
|
||||||
}
|
}
|
||||||
|
|
||||||
// define macros for project directory
|
// define macros for project directory
|
||||||
ProjectDir:='$('+ExternalMacroStart+'ProjectDir)';
|
ProjectDir:='$('+ExternalMacroStart+'ProjectDir)';
|
||||||
|
|
||||||
@ -108,44 +107,44 @@ begin
|
|||||||
if CompOpts.DelphiCompat then begin
|
if CompOpts.DelphiCompat then begin
|
||||||
// set mode DELPHI
|
// set mode DELPHI
|
||||||
ProjTempl.AddChild(TDefineTemplate.Create('MODE',
|
ProjTempl.AddChild(TDefineTemplate.Create('MODE',
|
||||||
'set FPC mode to DELPHI',CompilerModeVars[cmDELPHI],'1',da_DefineAll));
|
'set FPC mode to DELPHI',CompilerModeVars[cmDELPHI],'1',da_DefineRecurse));
|
||||||
end else if CompOpts.TPCompatible then begin
|
end else if CompOpts.TPCompatible then begin
|
||||||
// set mode TP
|
// set mode TP
|
||||||
ProjTempl.AddChild(TDefineTemplate.Create('MODE',
|
ProjTempl.AddChild(TDefineTemplate.Create('MODE',
|
||||||
'set FPC mode to TP',CompilerModeVars[cmTP],'1',da_DefineAll));
|
'set FPC mode to TP',CompilerModeVars[cmTP],'1',da_DefineRecurse));
|
||||||
end else if CompOpts.GPCCompat then begin
|
end else if CompOpts.GPCCompat then begin
|
||||||
// set mode GPC
|
// set mode GPC
|
||||||
ProjTempl.AddChild(TDefineTemplate.Create('MODE',
|
ProjTempl.AddChild(TDefineTemplate.Create('MODE',
|
||||||
'set FPC mode to GPC',CompilerModeVars[cmGPC],'1',da_DefineAll));
|
'set FPC mode to GPC',CompilerModeVars[cmGPC],'1',da_DefineRecurse));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Checks -------------------------------------------------------------------
|
// Checks -------------------------------------------------------------------
|
||||||
if CompOpts.IOChecks then begin
|
if CompOpts.IOChecks then begin
|
||||||
// set IO checking on
|
// set IO checking on
|
||||||
ProjTempl.AddChild(TDefineTemplate.Create('IOCHECKS on',
|
ProjTempl.AddChild(TDefineTemplate.Create('IOCHECKS on',
|
||||||
'set IOCHECKS on','IOCHECKS','1',da_DefineAll));
|
'set IOCHECKS on','IOCHECKS','1',da_DefineRecurse));
|
||||||
end;
|
end;
|
||||||
if CompOpts.RangeChecks then begin
|
if CompOpts.RangeChecks then begin
|
||||||
// set Range checking on
|
// set Range checking on
|
||||||
ProjTempl.AddChild(TDefineTemplate.Create('RANGECHECKS on',
|
ProjTempl.AddChild(TDefineTemplate.Create('RANGECHECKS on',
|
||||||
'set RANGECHECKS on','RANGECHECKS','1',da_DefineAll));
|
'set RANGECHECKS on','RANGECHECKS','1',da_DefineRecurse));
|
||||||
end;
|
end;
|
||||||
if CompOpts.OverflowChecks then begin
|
if CompOpts.OverflowChecks then begin
|
||||||
// set Overflow checking on
|
// set Overflow checking on
|
||||||
ProjTempl.AddChild(TDefineTemplate.Create('OVERFLOWCHECKS on',
|
ProjTempl.AddChild(TDefineTemplate.Create('OVERFLOWCHECKS on',
|
||||||
'set OVERFLOWCHECKS on','OVERFLOWCHECKS','1',da_DefineAll));
|
'set OVERFLOWCHECKS on','OVERFLOWCHECKS','1',da_DefineRecurse));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Hidden used units --------------------------------------------------------
|
// Hidden used units --------------------------------------------------------
|
||||||
if CompOpts.UseLineInfoUnit then begin
|
if CompOpts.UseLineInfoUnit then begin
|
||||||
// use lineinfo unit
|
// use lineinfo unit
|
||||||
ProjTempl.AddChild(TDefineTemplate.Create('Use LINEINFO unit',
|
ProjTempl.AddChild(TDefineTemplate.Create('Use LINEINFO unit',
|
||||||
'use LineInfo unit',ExternalMacroStart+'UseLineInfo','1',da_DefineAll));
|
'use LineInfo unit',ExternalMacroStart+'UseLineInfo','1',da_DefineRecurse));
|
||||||
end;
|
end;
|
||||||
if CompOpts.UseHeaptrc then begin
|
if CompOpts.UseHeaptrc then begin
|
||||||
// use heaptrc unit
|
// use heaptrc unit
|
||||||
ProjTempl.AddChild(TDefineTemplate.Create('Use HEAPTRC unit',
|
ProjTempl.AddChild(TDefineTemplate.Create('Use HEAPTRC unit',
|
||||||
'use HeapTrc unit',ExternalMacroStart+'UseHeapTrcUnit','1',da_DefineAll));
|
'use HeapTrc unit',ExternalMacroStart+'UseHeapTrcUnit','1',da_DefineRecurse));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Paths --------------------------------------------------------------------
|
// Paths --------------------------------------------------------------------
|
||||||
@ -157,7 +156,7 @@ begin
|
|||||||
'include path addition',ExternalMacroStart+'INCPATH',
|
'include path addition',ExternalMacroStart+'INCPATH',
|
||||||
ConvertTransferMacrosToExternalMacros(CompOpts.IncludeFiles)+';'
|
ConvertTransferMacrosToExternalMacros(CompOpts.IncludeFiles)+';'
|
||||||
+'$('+ExternalMacroStart+'INCPATH)',
|
+'$('+ExternalMacroStart+'INCPATH)',
|
||||||
da_DefineAll));
|
da_DefineRecurse));
|
||||||
end;
|
end;
|
||||||
// compiled unit path (ppu/ppw/dcu files)
|
// compiled unit path (ppu/ppw/dcu files)
|
||||||
s:=CompOpts.OtherUnitFiles;
|
s:=CompOpts.OtherUnitFiles;
|
||||||
@ -173,7 +172,7 @@ begin
|
|||||||
'unit path addition',ExternalMacroStart+'UnitPath',
|
'unit path addition',ExternalMacroStart+'UnitPath',
|
||||||
ConvertTransferMacrosToExternalMacros(s)+';'
|
ConvertTransferMacrosToExternalMacros(s)+';'
|
||||||
+'$('+ExternalMacroStart+'UnitPath)',
|
+'$('+ExternalMacroStart+'UnitPath)',
|
||||||
da_DefineAll));
|
da_DefineRecurse));
|
||||||
end;
|
end;
|
||||||
// source path (unitpath + sources for the CodeTools, hidden to the compiler)
|
// source path (unitpath + sources for the CodeTools, hidden to the compiler)
|
||||||
if s<>'' then begin
|
if s<>'' then begin
|
||||||
@ -182,7 +181,7 @@ begin
|
|||||||
'source path addition',ExternalMacroStart+'SrcPath',
|
'source path addition',ExternalMacroStart+'SrcPath',
|
||||||
ConvertTransferMacrosToExternalMacros(s+';'+SrcPath)+';'
|
ConvertTransferMacrosToExternalMacros(s+';'+SrcPath)+';'
|
||||||
+'$('+ExternalMacroStart+'SrcPath)',
|
+'$('+ExternalMacroStart+'SrcPath)',
|
||||||
da_DefineAll));
|
da_DefineRecurse));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// LCL Widget Type ----------------------------------------------------------
|
// LCL Widget Type ----------------------------------------------------------
|
||||||
@ -197,7 +196,7 @@ begin
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// replace project defines in DefineTree
|
// replace project defines in DefineTree
|
||||||
CodeToolBoss.DefineTree.ReplaceSameName(ProjTempl);
|
CodeToolBoss.DefineTree.ReplaceRootSameName(ProjTempl);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure SetAdditionalGlobalSrcPathToCodeToolBoss(const SrcPath: string);
|
procedure SetAdditionalGlobalSrcPathToCodeToolBoss(const SrcPath: string);
|
||||||
@ -208,11 +207,11 @@ begin
|
|||||||
'Global Source Path addition',ExternalMacroStart+'SRCPATH',
|
'Global Source Path addition',ExternalMacroStart+'SRCPATH',
|
||||||
ConvertTransferMacrosToExternalMacros(SrcPath)+';'
|
ConvertTransferMacrosToExternalMacros(SrcPath)+';'
|
||||||
+'$('+ExternalMacroStart+'SRCPATH)',
|
+'$('+ExternalMacroStart+'SRCPATH)',
|
||||||
da_DefineAll);
|
da_DefineRecurse);
|
||||||
DefTempl.Flags:=[dtfAutoGenerated];
|
DefTempl.Flags:=[dtfAutoGenerated];
|
||||||
CodeToolBoss.DefineTree.ReplaceSameName(DefTempl);
|
CodeToolBoss.DefineTree.ReplaceRootSameName(DefTempl);
|
||||||
end else begin
|
end else begin
|
||||||
CodeToolBoss.DefineTree.RemoveDefineTemplateByName('GlobalSrcPathAdd');
|
CodeToolBoss.DefineTree.RemoveRootDefineTemplateByName('GlobalSrcPathAdd');
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
11
ide/main.pp
11
ide/main.pp
@ -2308,15 +2308,15 @@ Begin
|
|||||||
CompilerTemplate:=CodeToolBoss.DefinePool.CreateFPCTemplate(
|
CompilerTemplate:=CodeToolBoss.DefinePool.CreateFPCTemplate(
|
||||||
EnvironmentOptions.CompilerFilename,CompilerUnitSearchPath);
|
EnvironmentOptions.CompilerFilename,CompilerUnitSearchPath);
|
||||||
if CompilerTemplate<>nil then begin
|
if CompilerTemplate<>nil then begin
|
||||||
CodeToolBoss.DefineTree.ReplaceSameNameAddFirst(CompilerTemplate);
|
CodeToolBoss.DefineTree.ReplaceRootSameNameAddFirst(CompilerTemplate);
|
||||||
// create compiler macros to simulate the Makefiles of the FPC sources
|
// create compiler macros to simulate the Makefiles of the FPC sources
|
||||||
FPCSrcTemplate:=CodeToolBoss.DefinePool.CreateFPCSrcTemplate(
|
FPCSrcTemplate:=CodeToolBoss.DefinePool.CreateFPCSrcTemplate(
|
||||||
CodeToolBoss.GlobalValues.Variables[ExternalMacroStart+'FPCSrcDir'],
|
CodeToolBoss.GlobalValues.Variables[ExternalMacroStart+'FPCSrcDir'],
|
||||||
CompilerUnitSearchPath);
|
CompilerUnitSearchPath);
|
||||||
if FPCSrcTemplate<>nil then begin
|
if FPCSrcTemplate<>nil then begin
|
||||||
CodeToolBoss.DefineTree.RemoveDefineTemplateByName(
|
CodeToolBoss.DefineTree.RemoveRootDefineTemplateByName(
|
||||||
FPCSrcTemplate.Name);
|
FPCSrcTemplate.Name);
|
||||||
FPCSrcTemplate.InsertAfter(CompilerTemplate);
|
FPCSrcTemplate.InsertBehind(CompilerTemplate);
|
||||||
end else begin
|
end else begin
|
||||||
MessageDlg('FPC Source Directory error',
|
MessageDlg('FPC Source Directory error',
|
||||||
'Please check the freepascal source directory',
|
'Please check the freepascal source directory',
|
||||||
@ -4894,6 +4894,7 @@ begin
|
|||||||
with SrcEdit.EditorComponent do begin
|
with SrcEdit.EditorComponent do begin
|
||||||
BlockBegin:=CaretXY;
|
BlockBegin:=CaretXY;
|
||||||
BlockEnd:=CaretXY;
|
BlockEnd:=CaretXY;
|
||||||
|
LeftChar:=Max(CaretXY.X-CharsInWindow,1);
|
||||||
end;
|
end;
|
||||||
SrcEdit.ErrorLine:=CaretXY.Y;
|
SrcEdit.ErrorLine:=CaretXY.Y;
|
||||||
end;
|
end;
|
||||||
@ -5146,7 +5147,6 @@ begin
|
|||||||
FOpenEditorsOnCodeToolChange:=false;
|
FOpenEditorsOnCodeToolChange:=false;
|
||||||
|
|
||||||
CodeToolsOpts.AssignTo(CodeToolBoss);
|
CodeToolsOpts.AssignTo(CodeToolBoss);
|
||||||
|
|
||||||
if (not FileExists(EnvironmentOptions.CompilerFilename)) then begin
|
if (not FileExists(EnvironmentOptions.CompilerFilename)) then begin
|
||||||
writeln('');
|
writeln('');
|
||||||
writeln('NOTE: Compiler Filename not set! (see Environment Options)');
|
writeln('NOTE: Compiler Filename not set! (see Environment Options)');
|
||||||
@ -6216,6 +6216,9 @@ end.
|
|||||||
|
|
||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.239 2002/03/05 08:14:58 lazarus
|
||||||
|
MG: updates for codetools defines editor
|
||||||
|
|
||||||
Revision 1.238 2002/03/02 11:08:36 lazarus
|
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
|
MG: fixed method search diff proc, fixed synedit insert in empty line, small fixes, started define editor
|
||||||
|
|
||||||
|
@ -1304,6 +1304,9 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.51 2002/03/05 08:14:59 lazarus
|
||||||
|
MG: updates for codetools defines editor
|
||||||
|
|
||||||
Revision 1.50 2002/02/25 23:18:54 lazarus
|
Revision 1.50 2002/02/25 23:18:54 lazarus
|
||||||
MG: jump history will now try to save relative filenames
|
MG: jump history will now try to save relative filenames
|
||||||
|
|
||||||
|
157
images/codetoolsdefines/undefineall_22x22.xpm
Normal file
157
images/codetoolsdefines/undefineall_22x22.xpm
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * undefineall_22x22_xpm[] = {
|
||||||
|
"22 22 132 2",
|
||||||
|
" c None",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #EBE5E5",
|
||||||
|
"@ c #FEB0B0",
|
||||||
|
"# c #FFBCBC",
|
||||||
|
"$ c #FFFDFD",
|
||||||
|
"% c #A3A3A3",
|
||||||
|
"& c #665555",
|
||||||
|
"* c #F24343",
|
||||||
|
"= c #FF1F1F",
|
||||||
|
"- c #FF4343",
|
||||||
|
"; c #FF6B6B",
|
||||||
|
"> c #FFABAB",
|
||||||
|
", c #FFE4E4",
|
||||||
|
"' c #E2E7FE",
|
||||||
|
") c #153BF7",
|
||||||
|
"! c #BEBEBE",
|
||||||
|
"~ c #493535",
|
||||||
|
"{ c #763096",
|
||||||
|
"] c #BD174C",
|
||||||
|
"^ c #FF1919",
|
||||||
|
"/ c #FF2424",
|
||||||
|
"( c #FF2323",
|
||||||
|
"_ c #FF4040",
|
||||||
|
": c #FF9292",
|
||||||
|
"< c #4563F9",
|
||||||
|
"[ c #0A32F7",
|
||||||
|
"} c #D2D2D2",
|
||||||
|
"| c #473535",
|
||||||
|
"1 c #2F31D4",
|
||||||
|
"2 c #0A31F6",
|
||||||
|
"3 c #1830EA",
|
||||||
|
"4 c #E22239",
|
||||||
|
"5 c #FF2222",
|
||||||
|
"6 c #FF1A1A",
|
||||||
|
"7 c #FF4444",
|
||||||
|
"8 c #FFE8E8",
|
||||||
|
"9 c #1233F2",
|
||||||
|
"0 c #213DF0",
|
||||||
|
"a c #403A3A",
|
||||||
|
"b c #E06767",
|
||||||
|
"c c #BD1D52",
|
||||||
|
"d c #0F30F1",
|
||||||
|
"e c #70299C",
|
||||||
|
"f c #FF5959",
|
||||||
|
"g c #EA2F2F",
|
||||||
|
"h c #FF0E0E",
|
||||||
|
"i c #93247B",
|
||||||
|
"j c #0931F7",
|
||||||
|
"k c #BD275C",
|
||||||
|
"l c #D3D3D3",
|
||||||
|
"m c #404040",
|
||||||
|
"n c #DED6D6",
|
||||||
|
"o c #FFD2D2",
|
||||||
|
"p c #F99CA1",
|
||||||
|
"q c #3638DA",
|
||||||
|
"r c #1F2DE1",
|
||||||
|
"s c #F93D41",
|
||||||
|
"t c #FFEAEA",
|
||||||
|
"u c #E62F2F",
|
||||||
|
"v c #F90E13",
|
||||||
|
"w c #0E31F3",
|
||||||
|
"x c #2B2FD9",
|
||||||
|
"y c #C1C1C1",
|
||||||
|
"z c #3E3E3E",
|
||||||
|
"A c #E0E0E0",
|
||||||
|
"B c #858CED",
|
||||||
|
"C c #0E33F5",
|
||||||
|
"D c #1336F4",
|
||||||
|
"E c #D1D8FD",
|
||||||
|
"F c #2D2DD6",
|
||||||
|
"G c #0B31F5",
|
||||||
|
"H c #E2142B",
|
||||||
|
"I c #B3B3B3",
|
||||||
|
"J c #414141",
|
||||||
|
"K c #E3E3E3",
|
||||||
|
"L c #0F36F7",
|
||||||
|
"M c #ADB5DA",
|
||||||
|
"N c #6276E9",
|
||||||
|
"O c #9F74C2",
|
||||||
|
"P c #FF0606",
|
||||||
|
"Q c #FF3D3D",
|
||||||
|
"R c #424242",
|
||||||
|
"S c #FFFBFB",
|
||||||
|
"T c #1339F7",
|
||||||
|
"U c #1634C8",
|
||||||
|
"V c #405FF9",
|
||||||
|
"W c #FFA8A8",
|
||||||
|
"X c #FFA9A9",
|
||||||
|
"Y c #B8B8B8",
|
||||||
|
"Z c #494949",
|
||||||
|
"` c #E5E5E5",
|
||||||
|
" . c #F9A8AD",
|
||||||
|
".. c #2646F5",
|
||||||
|
"+. c #193EF5",
|
||||||
|
"@. c #E7E7E7",
|
||||||
|
"#. c #0C32F6",
|
||||||
|
"$. c #7087FA",
|
||||||
|
"%. c #FF0D0D",
|
||||||
|
"&. c #D12348",
|
||||||
|
"*. c #0D31F4",
|
||||||
|
"=. c #1230EF",
|
||||||
|
"-. c #F94448",
|
||||||
|
";. c #405AF4",
|
||||||
|
">. c #FF1616",
|
||||||
|
",. c #1830E9",
|
||||||
|
"'. c #F91B1F",
|
||||||
|
"). c #5873FA",
|
||||||
|
"!. c #9F93E1",
|
||||||
|
"~. c #0D33F6",
|
||||||
|
"{. c #0F32F3",
|
||||||
|
"]. c #F92328",
|
||||||
|
"^. c #FFE9E9",
|
||||||
|
"/. c #6981FA",
|
||||||
|
"(. c #B8BFE4",
|
||||||
|
"_. c #0E35F7",
|
||||||
|
":. c #F9FAFF",
|
||||||
|
"<. c #3657F8",
|
||||||
|
"[. c #363E63",
|
||||||
|
"}. c #0C34F7",
|
||||||
|
"|. c #1238F7",
|
||||||
|
"1. c #5C76FA",
|
||||||
|
"2. c #8690C5",
|
||||||
|
"3. c #0A31F4",
|
||||||
|
"4. c #1037F6",
|
||||||
|
"5. c #4D6AF9",
|
||||||
|
"6. c #5A75FA",
|
||||||
|
"7. c #1339F3",
|
||||||
|
"8. c #0B32F2",
|
||||||
|
"9. c #CBD0E7",
|
||||||
|
"0. c #C2C8EA",
|
||||||
|
"a. c #AFB0B5",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . + @ # $ . . . . . . . . . . . . . . . . ",
|
||||||
|
". % & * = - ; > , . . . . . . . ' ) . . . . ",
|
||||||
|
". ! ~ { ] ^ / ( _ : . . + @ # $ < [ . . . . ",
|
||||||
|
". } | 1 2 3 4 5 6 7 8 % & * = - 9 0 , . . . ",
|
||||||
|
". } a b c d 2 e 6 f . ! ~ g h i j k _ : . . ",
|
||||||
|
". l m n o p q j r s t } | u v w x 5 6 7 8 . ",
|
||||||
|
". y z A . . . B C D E } a b F G H = 6 f . . ",
|
||||||
|
". I J K . . . . E L L M m N j O f ( P Q t . ",
|
||||||
|
". I R K . + @ # S E T [ U [ V . . , W X . . ",
|
||||||
|
". Y Z ` % & * = - ; ...j +.. . . . . . . . ",
|
||||||
|
". @.I . ! ~ g h ^ / k w #.[ $.. . . . . . . ",
|
||||||
|
". . . . } | u %./ &.*.=.-.;.j $.. . . . . . ",
|
||||||
|
". . . . } a b >.v G ,.'.f . V j ).. . . . . ",
|
||||||
|
". . . . l m n !.~.{.].P Q ^.. ).j /.. . . . ",
|
||||||
|
". . . . y z (._.) :., W X . . . /.j <.. . . ",
|
||||||
|
". . . . I [.}.|.:.. . . . . . . . $.j 1.. . ",
|
||||||
|
". . . . 2.3.4.' . . . . . . . . . . 5.6.. . ",
|
||||||
|
". . . . 7.8.9.. . . . . . . . . . . . . . . ",
|
||||||
|
". . . . 0.a.. . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . ",
|
||||||
|
". . . . . . . . . . . . . . . . . . . . . . "};
|
209
images/codetoolsdefines/undefinerecurse_22x22.xpm
Normal file
209
images/codetoolsdefines/undefinerecurse_22x22.xpm
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * undefinerecurse_22x22_xpm[] = {
|
||||||
|
"22 22 184 2",
|
||||||
|
" c None",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"+ c #FFF9F9",
|
||||||
|
"@ c #FFD9D9",
|
||||||
|
"# c #F5F5F5",
|
||||||
|
"$ c #C7C7C7",
|
||||||
|
"% c #F6CDCD",
|
||||||
|
"& c #FF5656",
|
||||||
|
"* c #FF4949",
|
||||||
|
"= c #FF9B9B",
|
||||||
|
"- c #FFC5C5",
|
||||||
|
"; c #FFEDED",
|
||||||
|
"> c #FFFDFD",
|
||||||
|
", c #6D7FF2",
|
||||||
|
"' c #0423EA",
|
||||||
|
") c #A0A6CF",
|
||||||
|
"! c #22308B",
|
||||||
|
"~ c #373737",
|
||||||
|
"{ c #D49595",
|
||||||
|
"] c #FF2828",
|
||||||
|
"^ c #FF0E0E",
|
||||||
|
"/ c #FF1D1D",
|
||||||
|
"( c #FF3232",
|
||||||
|
"_ c #FF6767",
|
||||||
|
": c #FF8484",
|
||||||
|
"< c #FFA6A6",
|
||||||
|
"[ c #7671DE",
|
||||||
|
"} c #3C54EE",
|
||||||
|
"| c #D4D9FB",
|
||||||
|
"1 c #0925E7",
|
||||||
|
"2 c #3323C4",
|
||||||
|
"3 c #E11229",
|
||||||
|
"4 c #FF0D0D",
|
||||||
|
"5 c #FF0F0F",
|
||||||
|
"6 c #FF0707",
|
||||||
|
"7 c #FF0000",
|
||||||
|
"8 c #BC184D",
|
||||||
|
"9 c #0423E9",
|
||||||
|
"0 c #2430DD",
|
||||||
|
"a c #FFAEAE",
|
||||||
|
"b c #FFE5E5",
|
||||||
|
"c c #FFFCFC",
|
||||||
|
"d c #F9F9FE",
|
||||||
|
"e c #EFEFEF",
|
||||||
|
"f c #6C6C6C",
|
||||||
|
"g c #060F44",
|
||||||
|
"h c #182BD9",
|
||||||
|
"i c #0922E5",
|
||||||
|
"j c #0422E9",
|
||||||
|
"k c #1C1FD3",
|
||||||
|
"l c #CF1137",
|
||||||
|
"m c #FF2424",
|
||||||
|
"n c #F93C41",
|
||||||
|
"o c #0923E5",
|
||||||
|
"p c #1321DB",
|
||||||
|
"q c #FF1414",
|
||||||
|
"r c #FF1A1A",
|
||||||
|
"s c #FF5B5B",
|
||||||
|
"t c #FFF1F1",
|
||||||
|
"u c #FDFDFD",
|
||||||
|
"v c #7E7E7E",
|
||||||
|
"w c #000000",
|
||||||
|
"x c #A75C5C",
|
||||||
|
"y c #751C89",
|
||||||
|
"z c #0B23E3",
|
||||||
|
"A c #581DA1",
|
||||||
|
"B c #3C1FB9",
|
||||||
|
"C c #E12940",
|
||||||
|
"D c #FF3F3F",
|
||||||
|
"E c #FF1616",
|
||||||
|
"F c #FF1212",
|
||||||
|
"G c #FF1E1E",
|
||||||
|
"H c #FFB3B3",
|
||||||
|
"I c #868686",
|
||||||
|
"J c #060606",
|
||||||
|
"K c #A46464",
|
||||||
|
"L c #FF2222",
|
||||||
|
"M c #FF0303",
|
||||||
|
"N c #FF0404",
|
||||||
|
"O c #3C24BE",
|
||||||
|
"P c #581FA3",
|
||||||
|
"Q c #FF1515",
|
||||||
|
"R c #FF1111",
|
||||||
|
"S c #FF2E2E",
|
||||||
|
"T c #FF3030",
|
||||||
|
"U c #FFBFBF",
|
||||||
|
"V c #9D6C6C",
|
||||||
|
"W c #FF2929",
|
||||||
|
"X c #FF0101",
|
||||||
|
"Y c #FF0202",
|
||||||
|
"Z c #1120DD",
|
||||||
|
"` c #1923D9",
|
||||||
|
" . c #F94145",
|
||||||
|
".. c #FF4444",
|
||||||
|
"+. c #FF0909",
|
||||||
|
"@. c #FF3E3E",
|
||||||
|
"#. c #FFD2D2",
|
||||||
|
"$. c #818181",
|
||||||
|
"%. c #867C7C",
|
||||||
|
"&. c #FF9696",
|
||||||
|
"*. c #821577",
|
||||||
|
"=. c #431BB0",
|
||||||
|
"-. c #0722E6",
|
||||||
|
";. c #1A20D5",
|
||||||
|
">. c #FF2020",
|
||||||
|
",. c #FF2626",
|
||||||
|
"'. c #FF5E5E",
|
||||||
|
"). c #FFDBDB",
|
||||||
|
"!. c #FFF4F4",
|
||||||
|
"~. c #FFC0C0",
|
||||||
|
"{. c #F9888D",
|
||||||
|
"]. c #0A25E6",
|
||||||
|
"^. c #1F24D5",
|
||||||
|
"/. c #FF1313",
|
||||||
|
"(. c #9C105E",
|
||||||
|
"_. c #241FCD",
|
||||||
|
":. c #FF0A0A",
|
||||||
|
"<. c #FF3333",
|
||||||
|
"[. c #FFCACA",
|
||||||
|
"}. c #858585",
|
||||||
|
"|. c #1A36EB",
|
||||||
|
"1. c #E1B8CF",
|
||||||
|
"2. c #FFA9A9",
|
||||||
|
"3. c #FF8383",
|
||||||
|
"4. c #76339F",
|
||||||
|
"5. c #3C1BB5",
|
||||||
|
"6. c #FF0606",
|
||||||
|
"7. c #FF2323",
|
||||||
|
"8. c #FFBCBC",
|
||||||
|
"9. c #F8F8F8",
|
||||||
|
"0. c #767676",
|
||||||
|
"a. c #1935EB",
|
||||||
|
"b. c #9CA8F6",
|
||||||
|
"c. c #FFFAFA",
|
||||||
|
"d. c #FFDDDD",
|
||||||
|
"e. c #6D5CCF",
|
||||||
|
"f. c #823395",
|
||||||
|
"g. c #FF6E6E",
|
||||||
|
"h. c #FFE0E0",
|
||||||
|
"i. c #E6E6E6",
|
||||||
|
"j. c #5F5F5F",
|
||||||
|
"k. c #0F0F0F",
|
||||||
|
"l. c #949599",
|
||||||
|
"m. c #0C2AEA",
|
||||||
|
"n. c #0625EA",
|
||||||
|
"o. c #2942EB",
|
||||||
|
"p. c #0524E9",
|
||||||
|
"q. c #E1CDE4",
|
||||||
|
"r. c #FFFBFB",
|
||||||
|
"s. c #E3E3E3",
|
||||||
|
"t. c #585858",
|
||||||
|
"u. c #0C154A",
|
||||||
|
"v. c #0625E8",
|
||||||
|
"w. c #0928EA",
|
||||||
|
"x. c #BCC4F9",
|
||||||
|
"y. c #0827EA",
|
||||||
|
"z. c #E1E1E1",
|
||||||
|
"A. c #2A3BA7",
|
||||||
|
"B. c #0D2AE4",
|
||||||
|
"C. c #E1E5FC",
|
||||||
|
"D. c #FFCF0F",
|
||||||
|
"E. c #8292F4",
|
||||||
|
"F. c #1935E9",
|
||||||
|
"G. c #0520CD",
|
||||||
|
"H. c #9A9A9A",
|
||||||
|
"I. c #122FEB",
|
||||||
|
"J. c #1532EB",
|
||||||
|
"K. c #0E2CEA",
|
||||||
|
"L. c #0625E9",
|
||||||
|
"M. c #2D3CA2",
|
||||||
|
"N. c #101010",
|
||||||
|
"O. c #CFD5FB",
|
||||||
|
"P. c #8B9AF5",
|
||||||
|
"Q. c #475EEF",
|
||||||
|
"R. c #B9BEE4",
|
||||||
|
"S. c #5D5D5D",
|
||||||
|
"T. c #0C0C0C",
|
||||||
|
"U. c #9B9B9B",
|
||||||
|
"V. c #888888",
|
||||||
|
"W. c #2F2F2F",
|
||||||
|
"X. c #BCBCBC",
|
||||||
|
"Y. c #FCFCFC",
|
||||||
|
"Z. c #E8E8E8",
|
||||||
|
"`. c #C9C9C9",
|
||||||
|
". . . . . + @ @ + . . . . . . . . . . . . . ",
|
||||||
|
". . # $ $ % & * = - ; > . . , ' . . . . . . ",
|
||||||
|
". . ) ! ~ { ] ^ / ( _ : < [ ' } . . . . . . ",
|
||||||
|
"| ' ' ' ' 1 2 3 4 5 6 7 8 9 0 a b c . . . . ",
|
||||||
|
"d | e f g h i j k l m n o p q r s < t . . . ",
|
||||||
|
". . u v w x / y z 9 A B j C D E F G H . . . ",
|
||||||
|
". . . I J K L M N O 9 9 P 4 Q R S T U . . . ",
|
||||||
|
". . . I J V W X Y 6 Z j ` ...4 +.@.#.. . . ",
|
||||||
|
". . . $.w %.&.r N *.' =.-.;.r >.,.'.).. . . ",
|
||||||
|
". . . I J I !.~.{.].^./.(.j _.N :.<.[.. . . ",
|
||||||
|
". . . }.J I . . |.' 1.2.3.4.j 5.6.7.8.. . . ",
|
||||||
|
". . 9.0.w }.d a.' b.. . c.d.e.' f.g.h.. . . ",
|
||||||
|
". . i.j.k.l.m.n.b.. . . . . . o.p.q.r.. . . ",
|
||||||
|
". . s.t.u.v.w.x.. . . . w . . . y.a.. . . . ",
|
||||||
|
". . z.A.j B.C.. . . . . w . . D.E.' E.. . . ",
|
||||||
|
". C.F.9 G.H.. . . . . . w w w D.D.I.J.. . . ",
|
||||||
|
". K.L.M.N.H.. . . . . . w . . D.D.O.P.. . . ",
|
||||||
|
". Q.R.S.T.U.. . . . . . w . . . . . . . . . ",
|
||||||
|
". . e V.W.X.. . . . . . w . . . . . . . . . ",
|
||||||
|
". . Y.Z.`.# . . . . . . w . . D.D.D.D.. . . ",
|
||||||
|
". . . . . . . . . . . . w w w D.D.D.D.. . . ",
|
||||||
|
". . . . . . . . . . . . . . . D.D.D.D.. . . "};
|
@ -450,8 +450,11 @@ begin
|
|||||||
if AValue=GetSelected then exit;
|
if AValue=GetSelected then exit;
|
||||||
if AValue then
|
if AValue then
|
||||||
Include(FStates,nsSelected)
|
Include(FStates,nsSelected)
|
||||||
else
|
else begin
|
||||||
Exclude(FStates,nsSelected);
|
Exclude(FStates,nsSelected);
|
||||||
|
if (TreeView<>nil) and (TreeView.Selected=Self) then
|
||||||
|
TreeView.Selected:=nil;
|
||||||
|
end;
|
||||||
Update;
|
Update;
|
||||||
{ ToDo:
|
{ ToDo:
|
||||||
if Value then
|
if Value then
|
||||||
@ -816,13 +819,15 @@ begin
|
|||||||
{$IFDEF TREEVIEW_DEBUG}
|
{$IFDEF TREEVIEW_DEBUG}
|
||||||
writeln('[TTreeNode.Unbind] Self=',HexStr(Cardinal(Self),8),' Self.Text=',Text);
|
writeln('[TTreeNode.Unbind] Self=',HexStr(Cardinal(Self),8),' Self.Text=',Text);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
Selected:=false;
|
||||||
if Owner<>nil then begin
|
if Owner<>nil then begin
|
||||||
Owner.ClearCache;
|
Owner.ClearCache;
|
||||||
if FParent=nil then
|
if FParent=nil then
|
||||||
Owner.MoveTopLvlNode(Owner.IndexOfTopLvlItem(Self),-1,Self);
|
Owner.MoveTopLvlNode(Owner.IndexOfTopLvlItem(Self),-1,Self);
|
||||||
if Owner.Owner<>nil then
|
if Owner.Owner<>nil then begin
|
||||||
Owner.Owner.FStates:=Owner.Owner.FStates+[tvsMaxRightNeedsUpdate,
|
Owner.Owner.FStates:=Owner.Owner.FStates+[tvsMaxRightNeedsUpdate,
|
||||||
tvsTopsNeedsUpdate,tvsTopItemNeedsUpdate,tvsBottomItemNeedsUpdate];
|
tvsTopsNeedsUpdate,tvsTopItemNeedsUpdate,tvsBottomItemNeedsUpdate];
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
if FPrevBrother<>nil then FPrevBrother.FNextBrother:=FNextBrother;
|
if FPrevBrother<>nil then FPrevBrother.FNextBrother:=FNextBrother;
|
||||||
if FNextBrother<>nil then FNextBrother.FPrevBrother:=FPrevBrother;
|
if FNextBrother<>nil then FNextBrother.FPrevBrother:=FPrevBrother;
|
||||||
@ -847,6 +852,7 @@ writeln('[TTreeNode.Unbind] Self=',HexStr(Cardinal(Self),8),' Self.Text=',Text);
|
|||||||
end;
|
end;
|
||||||
if FParent.Count=0 then begin
|
if FParent.Count=0 then begin
|
||||||
FParent.Expanded:=false;
|
FParent.Expanded:=false;
|
||||||
|
FParent.HasChildren:=false;
|
||||||
end;
|
end;
|
||||||
FParent:=nil;
|
FParent:=nil;
|
||||||
end;
|
end;
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
ToDo:
|
ToDo:
|
||||||
|
|
||||||
}
|
}
|
||||||
unit lresources;
|
unit LResources;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user