mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-11 15:48:34 +02:00
IDE: conditional compiler options: editing
git-svn-id: trunk@17950 -
This commit is contained in:
parent
4598b5b3a6
commit
98dfb8d966
@ -27,52 +27,62 @@ object CompOptsConditionalsFrame: TCompOptsConditionalsFrame
|
||||
Options = [tvoAutoExpand, tvoAutoInsertMark, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowSeparators, tvoToolTips]
|
||||
end
|
||||
object COCPopupMenu: TPopupMenu
|
||||
OnPopup = COCPopupMenuPopup
|
||||
left = 48
|
||||
top = 48
|
||||
object InsertAboveMenuItem: TMenuItem
|
||||
Caption = 'InsertAboveMenuItem'
|
||||
RightJustify = False
|
||||
ShowAlwaysCheckable = False
|
||||
OnClick = InsertAboveMenuItemClick
|
||||
end
|
||||
object InsertBelowMenuItem: TMenuItem
|
||||
Caption = 'InsertBelowMenuItem'
|
||||
RightJustify = False
|
||||
ShowAlwaysCheckable = False
|
||||
OnClick = InsertBelowMenuItemClick
|
||||
end
|
||||
object InsertChildMenuItem: TMenuItem
|
||||
Caption = 'InsertChildMenuItem'
|
||||
RightJustify = False
|
||||
ShowAlwaysCheckable = False
|
||||
OnClick = InsertChildMenuItemClick
|
||||
end
|
||||
object DeleteMenuItem: TMenuItem
|
||||
Caption = 'DeleteMenuItem'
|
||||
RightJustify = False
|
||||
ShowAlwaysCheckable = False
|
||||
OnClick = DeleteMenuItemClick
|
||||
end
|
||||
object MoveUpMenuItem: TMenuItem
|
||||
Caption = 'MoveUpMenuItem'
|
||||
RightJustify = False
|
||||
ShowAlwaysCheckable = False
|
||||
OnClick = MoveUpMenuItemClick
|
||||
end
|
||||
object MoveDownMenuItem: TMenuItem
|
||||
Caption = 'MoveDownMenuItem'
|
||||
RightJustify = False
|
||||
ShowAlwaysCheckable = False
|
||||
OnClick = MoveDownMenuItemClick
|
||||
end
|
||||
object MoveLvlUpMenuItem: TMenuItem
|
||||
Caption = 'MoveLvlUpMenuItem'
|
||||
RightJustify = False
|
||||
ShowAlwaysCheckable = False
|
||||
OnClick = MoveLvlUpMenuItemClick
|
||||
end
|
||||
object MoveLvlDownMenuItem: TMenuItem
|
||||
Caption = 'MoveLvlDownMenuItem'
|
||||
RightJustify = False
|
||||
ShowAlwaysCheckable = False
|
||||
OnClick = MoveLvlDownMenuItemClick
|
||||
end
|
||||
object PropertiesMenuItem: TMenuItem
|
||||
Caption = 'PropertiesMenuItem'
|
||||
RightJustify = False
|
||||
ShowAlwaysCheckable = False
|
||||
OnClick = PropertiesMenuItemClick
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -11,19 +11,25 @@ LazarusResources.Add('TCompOptsConditionalsFrame','FORMDATA',[
|
||||
+'oAutoExpand'#17'tvoAutoInsertMark'#17'tvoAutoItemHeight'#16'tvoHideSelectio'
|
||||
+'n'#21'tvoKeepCollapsedNodes'#11'tvoReadOnly'#12'tvoRowSelect'#14'tvoShowBut'
|
||||
+'tons'#12'tvoShowLines'#17'tvoShowSeparators'#11'tvoToolTips'#0#0#0#10'TPopu'
|
||||
+'pMenu'#12'COCPopupMenu'#4'left'#2'0'#3'top'#2'0'#0#9'TMenuItem'#19'InsertAb'
|
||||
+'oveMenuItem'#7'Caption'#6#19'InsertAboveMenuItem'#12'RightJustify'#8#19'Sho'
|
||||
+'wAlwaysCheckable'#8#0#0#9'TMenuItem'#19'InsertBelowMenuItem'#7'Caption'#6#19
|
||||
+'InsertBelowMenuItem'#12'RightJustify'#8#19'ShowAlwaysCheckable'#8#0#0#9'TMe'
|
||||
+'nuItem'#19'InsertChildMenuItem'#7'Caption'#6#19'InsertChildMenuItem'#12'Rig'
|
||||
+'htJustify'#8#19'ShowAlwaysCheckable'#8#0#0#9'TMenuItem'#14'DeleteMenuItem'#7
|
||||
+'Caption'#6#14'DeleteMenuItem'#12'RightJustify'#8#19'ShowAlwaysCheckable'#8#0
|
||||
+#0#9'TMenuItem'#14'MoveUpMenuItem'#7'Caption'#6#14'MoveUpMenuItem'#12'RightJ'
|
||||
+'ustify'#8#19'ShowAlwaysCheckable'#8#0#0#9'TMenuItem'#16'MoveDownMenuItem'#7
|
||||
+'Caption'#6#16'MoveDownMenuItem'#12'RightJustify'#8#19'ShowAlwaysCheckable'#8
|
||||
+#0#0#9'TMenuItem'#17'MoveLvlUpMenuItem'#7'Caption'#6#17'MoveLvlUpMenuItem'#12
|
||||
+'RightJustify'#8#19'ShowAlwaysCheckable'#8#0#0#9'TMenuItem'#19'MoveLvlDownMe'
|
||||
+'nuItem'#7'Caption'#6#19'MoveLvlDownMenuItem'#12'RightJustify'#8#19'ShowAlwa'
|
||||
+'ysCheckable'#8#0#0#9'TMenuItem'#18'PropertiesMenuItem'#7'Caption'#6#18'Prop'
|
||||
+'ertiesMenuItem'#12'RightJustify'#8#19'ShowAlwaysCheckable'#8#0#0#0#0
|
||||
+'pMenu'#12'COCPopupMenu'#7'OnPopup'#7#17'COCPopupMenuPopup'#4'left'#2'0'#3't'
|
||||
+'op'#2'0'#0#9'TMenuItem'#19'InsertAboveMenuItem'#7'Caption'#6#19'InsertAbove'
|
||||
+'MenuItem'#12'RightJustify'#8#19'ShowAlwaysCheckable'#8#7'OnClick'#7#24'Inse'
|
||||
+'rtAboveMenuItemClick'#0#0#9'TMenuItem'#19'InsertBelowMenuItem'#7'Caption'#6
|
||||
+#19'InsertBelowMenuItem'#12'RightJustify'#8#19'ShowAlwaysCheckable'#8#7'OnCl'
|
||||
+'ick'#7#24'InsertBelowMenuItemClick'#0#0#9'TMenuItem'#19'InsertChildMenuItem'
|
||||
+#7'Caption'#6#19'InsertChildMenuItem'#12'RightJustify'#8#19'ShowAlwaysChecka'
|
||||
+'ble'#8#7'OnClick'#7#24'InsertChildMenuItemClick'#0#0#9'TMenuItem'#14'Delete'
|
||||
+'MenuItem'#7'Caption'#6#14'DeleteMenuItem'#12'RightJustify'#8#19'ShowAlwaysC'
|
||||
+'heckable'#8#7'OnClick'#7#19'DeleteMenuItemClick'#0#0#9'TMenuItem'#14'MoveUp'
|
||||
+'MenuItem'#7'Caption'#6#14'MoveUpMenuItem'#12'RightJustify'#8#19'ShowAlwaysC'
|
||||
+'heckable'#8#7'OnClick'#7#19'MoveUpMenuItemClick'#0#0#9'TMenuItem'#16'MoveDo'
|
||||
+'wnMenuItem'#7'Caption'#6#16'MoveDownMenuItem'#12'RightJustify'#8#19'ShowAlw'
|
||||
+'aysCheckable'#8#7'OnClick'#7#21'MoveDownMenuItemClick'#0#0#9'TMenuItem'#17
|
||||
+'MoveLvlUpMenuItem'#7'Caption'#6#17'MoveLvlUpMenuItem'#12'RightJustify'#8#19
|
||||
+'ShowAlwaysCheckable'#8#7'OnClick'#7#22'MoveLvlUpMenuItemClick'#0#0#9'TMenuI'
|
||||
+'tem'#19'MoveLvlDownMenuItem'#7'Caption'#6#19'MoveLvlDownMenuItem'#12'RightJ'
|
||||
+'ustify'#8#19'ShowAlwaysCheckable'#8#7'OnClick'#7#24'MoveLvlDownMenuItemClic'
|
||||
+'k'#0#0#9'TMenuItem'#18'PropertiesMenuItem'#7'Caption'#6#18'PropertiesMenuIt'
|
||||
+'em'#12'RightJustify'#8#19'ShowAlwaysCheckable'#8#7'OnClick'#7#23'Properties'
|
||||
+'MenuItemClick'#0#0#0#0
|
||||
]);
|
||||
|
@ -24,7 +24,7 @@ unit Options_Compiler_Conditionals;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, Forms, ComCtrls, Menus,
|
||||
Classes, SysUtils, FileProcs, LResources, Forms, ComCtrls, Menus, Dialogs,
|
||||
ProjectIntf, IDEImagesIntf,
|
||||
CompOptsModes;
|
||||
|
||||
@ -44,13 +44,27 @@ type
|
||||
MoveLvlUpMenuItem: TMenuItem;
|
||||
MoveDownMenuItem: TMenuItem;
|
||||
MoveUpMenuItem: TMenuItem;
|
||||
procedure COCPopupMenuPopup(Sender: TObject);
|
||||
procedure DeleteMenuItemClick(Sender: TObject);
|
||||
procedure InsertAboveMenuItemClick(Sender: TObject);
|
||||
procedure InsertBelowMenuItemClick(Sender: TObject);
|
||||
procedure InsertChildMenuItemClick(Sender: TObject);
|
||||
procedure MoveDownMenuItemClick(Sender: TObject);
|
||||
procedure MoveLvlDownMenuItemClick(Sender: TObject);
|
||||
procedure MoveLvlUpMenuItemClick(Sender: TObject);
|
||||
procedure MoveUpMenuItemClick(Sender: TObject);
|
||||
procedure PropertiesMenuItemClick(Sender: TObject);
|
||||
private
|
||||
FConditionals: TCompOptConditionals;
|
||||
FNodeTypeImageIDs: array[TCOCNodeType] of integer;
|
||||
procedure SetConditionals(const AValue: TCompOptConditionals);
|
||||
procedure FillTreeView;
|
||||
procedure ConsistencyCheck;
|
||||
function NodeToCaption(Node: TCompOptCondNode): string;
|
||||
function NodeToImageIndex(Node: TCompOptCondNode): integer;
|
||||
function GetSelectedNode(out COCNode: TCompOptCondNode;
|
||||
out TVNode: TTreeNode; RootAsDefault: boolean): boolean;
|
||||
procedure CreateNewNode(AttachMode: TNodeAttachMode);
|
||||
public
|
||||
constructor Create(TheOwner: TComponent); override;
|
||||
property Conditionals: TCompOptConditionals read FConditionals write SetConditionals;
|
||||
@ -60,6 +74,118 @@ implementation
|
||||
|
||||
{ TCompOptsConditionalsFrame }
|
||||
|
||||
procedure TCompOptsConditionalsFrame.COCPopupMenuPopup(Sender: TObject);
|
||||
var
|
||||
COCNode: TCompOptCondNode;
|
||||
TVNode: TTreeNode;
|
||||
HasSelection: Boolean;
|
||||
begin
|
||||
GetSelectedNode(COCNode,TVNode);
|
||||
HasSelection:=COCNode<>nil;
|
||||
NormalNodeIsSelectd:=HasSelection and (COCNode<>Conditionals.Root);
|
||||
InsertAboveMenuItem.Enabled:=NormalNodeIsSelectd;
|
||||
InsertBelowMenuItem.Enabled:=NormalNodeIsSelectd;
|
||||
InsertChildMenuItem.Enabled:=true;
|
||||
DeleteMenuItem.Enabled:=NormalNodeIsSelectd;
|
||||
PropertiesMenuItem.Enabled:=NormalNodeIsSelectd;
|
||||
MoveLvlDownMenuItem.Enabled:=NormalNodeIsSelectd and (TVNode.GetPrevSibling<>nil);
|
||||
MoveLvlUpMenuItem.Enabled:=NormalNodeIsSelectd and (COCNode.Parent.Parent<>nil);
|
||||
MoveDownMenuItem.Enabled:=NormalNodeIsSelectd and (TVNode.GetNextSibling<>nil);
|
||||
MoveUpMenuItem.Enabled:=NormalNodeIsSelectd and (TVNode.GetPrevSibling<>nil);
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.DeleteMenuItemClick(Sender: TObject);
|
||||
var
|
||||
COCNode: TCompOptCondNode;
|
||||
TVNode: TTreeNode;
|
||||
begin
|
||||
if not GetSelectedNode(COCNode,TVNode,false) then exit;
|
||||
if Conditionals.Root=COCNode then exit;
|
||||
if MessageDlg('Delete?',
|
||||
'Delete the node "'+TVNode.Text+'"?',mtConfirmation,[mbYes,mbNo],0)<>mrYes
|
||||
then
|
||||
exit;
|
||||
TVNode.Delete;
|
||||
COCNode.Free;
|
||||
ConsistencyCheck;
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.InsertAboveMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
CreateNewNode(naInsert);
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.InsertBelowMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
CreateNewNode(naInsertBehind);
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.InsertChildMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
CreateNewNode(naAddChildFirst);
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.MoveDownMenuItemClick(Sender: TObject);
|
||||
// move selected node below sibling
|
||||
var
|
||||
COCNode: TCompOptCondNode;
|
||||
TVNode: TTreeNode;
|
||||
begin
|
||||
if not GetSelectedNode(COCNode,TVNode,false) then exit;
|
||||
if TVNode.GetNextSibling=nil then exit;
|
||||
TVNode.MoveTo(TVNode.GetNextSibling,naInsertBehind);
|
||||
COCNode.Index:=COCNode.Index+1;
|
||||
ConsistencyCheck;
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.MoveLvlDownMenuItemClick(Sender: TObject);
|
||||
// make selected node a child of previous sibling
|
||||
var
|
||||
COCNode: TCompOptCondNode;
|
||||
TVNode: TTreeNode;
|
||||
Sibling: TCompOptCondNode;
|
||||
begin
|
||||
if not GetSelectedNode(COCNode,TVNode,false) then exit;
|
||||
if Conditionals.Root=COCNode then exit;
|
||||
if TVNode.GetPrevSibling=nil then exit;
|
||||
TVNode.MoveTo(TVNode.GetPrevSibling,naAddChild);
|
||||
Sibling:=COCNode.Parent.Childs[COCNode.Index-1];
|
||||
COCNode.Move(Sibling,Sibling.Count);
|
||||
ConsistencyCheck;
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.MoveLvlUpMenuItemClick(Sender: TObject);
|
||||
// make selected node a sibling of its parent (below parent)
|
||||
var
|
||||
COCNode: TCompOptCondNode;
|
||||
TVNode: TTreeNode;
|
||||
begin
|
||||
if not GetSelectedNode(COCNode,TVNode,false) then exit;
|
||||
if COCNode.Parent=nil then exit;
|
||||
if COCNode.Parent.Parent=nil then exit;
|
||||
TVNode.MoveTo(TVNode.Parent,naInsertBehind);
|
||||
COCNode.Move(COCNode.Parent.Parent,COCNode.Parent.Index+1);
|
||||
ConsistencyCheck;
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.MoveUpMenuItemClick(Sender: TObject);
|
||||
// move selected node above sibling
|
||||
var
|
||||
COCNode: TCompOptCondNode;
|
||||
TVNode: TTreeNode;
|
||||
begin
|
||||
if not GetSelectedNode(COCNode,TVNode,false) then exit;
|
||||
if TVNode.GetPrevSibling=nil then exit;
|
||||
TVNode.MoveTo(TVNode.GetPrevSibling,naInsert);
|
||||
COCNode.Index:=COCNode.Index-1;
|
||||
ConsistencyCheck;
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.PropertiesMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.SetConditionals(
|
||||
const AValue: TCompOptConditionals);
|
||||
begin
|
||||
@ -76,7 +202,7 @@ procedure TCompOptsConditionalsFrame.FillTreeView;
|
||||
i: Integer;
|
||||
begin
|
||||
if COCNode=nil then exit;
|
||||
TVNode:=COCTreeView.Items.AddChild(ParentTVNode,NodeToCaption(COCNode));
|
||||
TVNode:=COCTreeView.Items.AddChildObject(ParentTVNode,NodeToCaption(COCNode),COCNode);
|
||||
TVNode.ImageIndex:=FNodeTypeImageIDs[COCNode.NodeType];
|
||||
TVNode.StateIndex:=TVNode.ImageIndex;
|
||||
for i:=0 to COCNode.Count-1 do
|
||||
@ -90,6 +216,36 @@ begin
|
||||
Add(Conditionals.Root,nil);
|
||||
end;
|
||||
COCTreeView.EndUpdate;
|
||||
ConsistencyCheck;
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.ConsistencyCheck;
|
||||
|
||||
procedure CheckNode(COCNode: TCompOptCondNode; TVNode: TTreeNode);
|
||||
var
|
||||
i: Integer;
|
||||
ChildTVNode: TTreeNode;
|
||||
begin
|
||||
if COCNode=nil then
|
||||
RaiseCatchableException('');
|
||||
if TVNode=nil then
|
||||
RaiseCatchableException('');
|
||||
if COCNode<>TCompOptCondNode(TVNode.Data) then
|
||||
RaiseCatchableException('');
|
||||
ChildTVNode:=TVNode.GetFirstChild;
|
||||
for i:=0 to COCNode.Count-1 do begin
|
||||
CheckNode(COCNode.Childs[i],ChildTVNode);
|
||||
ChildTVNode:=ChildTVNode.GetNextSibling;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
if Conditionals=nil then begin
|
||||
if COCTreeView.Items.Count>0 then
|
||||
RaiseCatchableException('');
|
||||
end else begin
|
||||
CheckNode(Conditionals.Root,COCTreeView.Items.GetFirstNode);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCompOptsConditionalsFrame.NodeToCaption(Node: TCompOptCondNode
|
||||
@ -124,6 +280,47 @@ begin
|
||||
Result:=ValidUTF8String(Result);
|
||||
end;
|
||||
|
||||
function TCompOptsConditionalsFrame.NodeToImageIndex(Node: TCompOptCondNode
|
||||
): integer;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function TCompOptsConditionalsFrame.GetSelectedNode(out
|
||||
COCNode: TCompOptCondNode; out TVNode: TTreeNode;
|
||||
RootAsDefault: boolean): boolean;
|
||||
begin
|
||||
COCNode:=nil;
|
||||
TVNode:=COCTreeView.Selected;
|
||||
if TVNode=nil then begin
|
||||
if RootAsDefault then begin
|
||||
TVNode:=COCTreeView.Items.GetFirstNode;
|
||||
COCNode:=TCompOptCondNode(TVNode.Data);
|
||||
end;
|
||||
end else begin
|
||||
COCNode:=TCompOptCondNode(TVNode.Data);
|
||||
end;
|
||||
Result:=COCNode<>nil;
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.CreateNewNode(AttachMode: TNodeAttachMode
|
||||
);
|
||||
var
|
||||
TVNode: TTreeNode;
|
||||
COCNode: TCompOptCondNode;
|
||||
s: String;
|
||||
NewTVNode: TTreeNode;
|
||||
begin
|
||||
if not GetSelectedNode(COCNode,TVNode,true) then exit;
|
||||
NewCOCNode:=TCompOptCondNode.Create(COCNode.Owner);
|
||||
s:=NodeToCaption(COCNode);
|
||||
NewTVNode:=COCTreeView.Items.AddObject(TVNode,s,COCNode);
|
||||
NewTVNode.MoveTo(TVNode,naAddChildFirst);
|
||||
NewTVNode.ImageIndex:=FNodeTypeImageIDs[NewCOCNode.NodeType];
|
||||
NewTVNode.StateIndex:=NewTVNode.ImageIndex;
|
||||
ConsistencyCheck;
|
||||
end;
|
||||
|
||||
constructor TCompOptsConditionalsFrame.Create(TheOwner: TComponent);
|
||||
var
|
||||
nt: TCOCNodeType;
|
||||
|
@ -106,6 +106,8 @@ type
|
||||
FValueType: TCOCValueType;
|
||||
function GetChilds(Index: integer): TCompOptCondNode;
|
||||
function GetCount: integer;
|
||||
function GetIndex: integer;
|
||||
procedure SetIndex(const AValue: integer);
|
||||
procedure SetNodeType(const AValue: TCOCNodeType);
|
||||
procedure SetValue(const AValue: string);
|
||||
procedure SetValueType(const AValue: TCOCValueType);
|
||||
@ -117,6 +119,7 @@ type
|
||||
procedure AddLast(Child: TCompOptCondNode);
|
||||
procedure Insert(Index: integer; Child: TCompOptCondNode);
|
||||
procedure Move(OldIndex, NewIndex: integer);
|
||||
procedure Move(NewParent: TCompOptCondNode; NewIndex: integer);
|
||||
procedure Delete(Index: integer);
|
||||
procedure Assign(Source: TCompOptCondNode);
|
||||
property NodeType: TCOCNodeType read FNodeType write SetNodeType;
|
||||
@ -126,6 +129,7 @@ type
|
||||
property Parent: TCompOptCondNode read FParent;
|
||||
property Count: integer read GetCount;
|
||||
property Childs[Index: integer]: TCompOptCondNode read GetChilds;
|
||||
property Index: integer read GetIndex write SetIndex;
|
||||
end;
|
||||
|
||||
{ TLazCompOptConditionals }
|
||||
@ -946,6 +950,23 @@ begin
|
||||
Result:=fChilds.Count;
|
||||
end;
|
||||
|
||||
function TCompOptCondNode.GetIndex: integer;
|
||||
begin
|
||||
if Parent=nil then
|
||||
Result:=-1
|
||||
else
|
||||
Result:=Parent.fChilds.IndexOf(Self);
|
||||
end;
|
||||
|
||||
procedure TCompOptCondNode.SetIndex(const AValue: integer);
|
||||
var
|
||||
OldIndex: LongInt;
|
||||
begin
|
||||
OldIndex:=GetIndex;
|
||||
if OldIndex=AValue then exit;
|
||||
Parent.Move(OldIndex,AValue);
|
||||
end;
|
||||
|
||||
procedure TCompOptCondNode.SetValue(const AValue: string);
|
||||
begin
|
||||
if FValue=AValue then exit;
|
||||
@ -1018,6 +1039,22 @@ begin
|
||||
Changed;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondNode.Move(NewParent: TCompOptCondNode; NewIndex: integer
|
||||
);
|
||||
begin
|
||||
if (NewParent=Parent) and (NewIndex=Index) then exit;
|
||||
if FParent<>nil then begin
|
||||
FParent.fChilds.Remove(Self);
|
||||
FParent.Changed;
|
||||
end;
|
||||
FParent:=NewParent;
|
||||
if FParent<>nil then begin
|
||||
if (NewIndex<0) or (NewIndex>FParent.Count) then
|
||||
NewIndex:=FParent.Count;
|
||||
FParent.fChilds.Insert(NewIndex,Self);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondNode.Delete(Index: integer);
|
||||
begin
|
||||
Childs[Index].Free;
|
||||
|
Loading…
Reference in New Issue
Block a user