mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 09:19:32 +02:00
IDE: conditional compiler options editing
git-svn-id: trunk@17975 -
This commit is contained in:
parent
6951814ac4
commit
48c3eea1ce
@ -43,18 +43,31 @@ type
|
||||
ValueTypeLabel: TLabel;
|
||||
ValueLabel: TLabel;
|
||||
PropsGroupBox: TGroupBox;
|
||||
procedure ButtonPanel1OkClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure NodeTypeComboBoxEditingDone(Sender: TObject);
|
||||
procedure ValueEditEditingDone(Sender: TObject);
|
||||
procedure ValueTypeComboBoxEditingDone(Sender: TObject);
|
||||
private
|
||||
FNode: TCompOptCondNode;
|
||||
procedure SetNode(const AValue: TCompOptCondNode);
|
||||
procedure NodeChanged;
|
||||
procedure NodeTypeChanged;
|
||||
FOriginalNode: TCompOptCondNode;
|
||||
FNodeType: TCOCNodeType;
|
||||
FValueType: TCOCValueType;
|
||||
FValue: string;
|
||||
function GetNodeType: TCOCNodeType;
|
||||
function GetValue: string;
|
||||
function GetValueType: TCOCValueType;
|
||||
procedure SetNodeType(const AValue: TCOCNodeType);
|
||||
procedure SetOriginalNode(const AValue: TCompOptCondNode);
|
||||
procedure SetValue(const AValue: string);
|
||||
procedure SetValueType(const AValue: TCOCValueType);
|
||||
procedure UpdateNodeTypeControls;
|
||||
procedure UpdateValueControls;
|
||||
public
|
||||
property Node: TCompOptCondNode read FNode write SetNode;
|
||||
end;
|
||||
property OriginalNode: TCompOptCondNode read FOriginalNode write SetOriginalNode;
|
||||
property NodeType: TCOCNodeType read GetNodeType write SetNodeType;
|
||||
property ValueType: TCOCValueType read GetValueType write SetValueType;
|
||||
property Value: string read GetValue write SetValue;
|
||||
end;
|
||||
|
||||
function EditCompOptCondProperties(Node: TCompOptCondNode): TModalResult;
|
||||
|
||||
@ -66,7 +79,7 @@ var
|
||||
begin
|
||||
CompOptCondPropsDialog:=TCompOptCondPropsDialog.Create(nil);
|
||||
try
|
||||
CompOptCondPropsDialog.Node:=Node;
|
||||
CompOptCondPropsDialog.OriginalNode:=Node;
|
||||
Result:=CompOptCondPropsDialog.ShowModal;
|
||||
finally
|
||||
CompOptCondPropsDialog.Free;
|
||||
@ -80,46 +93,108 @@ var
|
||||
nt: TCOCNodeType;
|
||||
vt: TCOCValueType;
|
||||
begin
|
||||
Caption:='Properties of conditional compiler option';
|
||||
Caption:=lisPropertiesOfConditionalCompilerOption;
|
||||
PropsGroupBox.Caption:=lisHlpOptsProperties;
|
||||
|
||||
NodeTypeLabel.Caption:='Type:';
|
||||
ValueTypeLabel.Caption:='Action:';
|
||||
ValueLabel.Caption:='Value:';
|
||||
NodeTypeLabel.Caption:=lisUIDType;
|
||||
ValueTypeLabel.Caption:=lisAction;
|
||||
ValueLabel.Caption:=lisValue;
|
||||
ValueTypeComboBox.Items.Clear;
|
||||
NodeTypeComboBox.Items.Clear;
|
||||
for nt:=Low(TCOCNodeType) to High(TCOCNodeType) do
|
||||
NodeTypeComboBox.Items.Add(COCNodeTypeLocalizedName(nt));
|
||||
for vt:=Low(TCOCValueType) to High(TCOCValueType) do
|
||||
ValueTypeComboBox.Items.Add(COCValueTypeLocalizedName(vt));
|
||||
|
||||
ButtonPanel1.OKButton.OnClick:=@ButtonPanel1OkClick;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.ButtonPanel1OkClick(Sender: TObject);
|
||||
begin
|
||||
if FOriginalNode<>nil then begin
|
||||
FOriginalNode.NodeType:=NodeType;
|
||||
FOriginalNode.ValueType:=ValueType;
|
||||
FOriginalNode.Value:=Value;
|
||||
end;
|
||||
ModalResult:=mrOk;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.NodeTypeComboBoxEditingDone(Sender: TObject);
|
||||
begin
|
||||
NodeTypeChanged;
|
||||
GetNodeType;
|
||||
UpdateValueControls;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.ValueEditEditingDone(Sender: TObject);
|
||||
begin
|
||||
|
||||
GetValue;
|
||||
UpdateValueControls;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.ValueTypeComboBoxEditingDone(Sender: TObject);
|
||||
begin
|
||||
|
||||
GetValueType;
|
||||
UpdateValueControls;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.SetNode(const AValue: TCompOptCondNode);
|
||||
procedure TCompOptCondPropsDialog.SetOriginalNode(const AValue: TCompOptCondNode);
|
||||
begin
|
||||
if FNode=AValue then exit;
|
||||
FNode:=AValue;
|
||||
NodeChanged;
|
||||
if FOriginalNode=AValue then exit;
|
||||
FOriginalNode:=AValue;
|
||||
if FOriginalNode<>nil then begin
|
||||
FNodeType:=FOriginalNode.NodeType;
|
||||
FValueType:=FOriginalNode.ValueType;
|
||||
FValue:=FOriginalNode.Value;
|
||||
end else begin
|
||||
FNodeType:=cocntNone;
|
||||
FValueType:=cocvtNone;
|
||||
FValue:='';
|
||||
end;
|
||||
UpdateNodeTypeControls;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.NodeChanged;
|
||||
function TCompOptCondPropsDialog.GetNodeType: TCOCNodeType;
|
||||
var
|
||||
i: LongInt;
|
||||
begin
|
||||
i:=NodeTypeComboBox.Items.IndexOf(NodeTypeComboBox.Text);
|
||||
if i<0 then
|
||||
FNodeType:=cocntNone
|
||||
else
|
||||
FNodeType:=TCOCNodeType(i);
|
||||
Result:=FNodeType;
|
||||
end;
|
||||
|
||||
function TCompOptCondPropsDialog.GetValue: string;
|
||||
begin
|
||||
FValue:=ValueEdit.Text;
|
||||
Result:=FValue;
|
||||
end;
|
||||
|
||||
function TCompOptCondPropsDialog.GetValueType: TCOCValueType;
|
||||
var
|
||||
i: LongInt;
|
||||
begin
|
||||
i:=ValueTypeComboBox.Items.IndexOf(ValueTypeComboBox.Text);
|
||||
if i<0 then
|
||||
FValueType:=cocvtNone
|
||||
else
|
||||
FValueType:=TCOCValueType(i);
|
||||
Result:=FValueType;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.SetNodeType(const AValue: TCOCNodeType);
|
||||
begin
|
||||
if FNodeType=AValue then exit;
|
||||
FNodeType:=AValue;
|
||||
UpdateNodeTypeControls;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.UpdateNodeTypeControls;
|
||||
var
|
||||
NodeTypeStr: String;
|
||||
begin
|
||||
if Node=nil then begin
|
||||
if OriginalNode=nil then begin
|
||||
NodeTypeLabel.Enabled:=false;
|
||||
NodeTypeComboBox.Enabled:=false;
|
||||
ValueTypeLabel.Enabled:=false;
|
||||
@ -128,35 +203,49 @@ begin
|
||||
ValueEdit.Enabled:=false;
|
||||
ValueButton.Enabled:=false;
|
||||
end else begin
|
||||
NodeTypeStr:=COCNodeTypeLocalizedName(Node.NodeType);
|
||||
NodeTypeStr:=COCNodeTypeLocalizedName(FNodeType);
|
||||
NodeTypeLabel.Enabled:=true;
|
||||
NodeTypeComboBox.ItemIndex:=NodeTypeComboBox.Items.IndexOf(NodeTypeStr);
|
||||
NodeTypeComboBox.Text:=NodeTypeStr;
|
||||
NodeTypeChanged;
|
||||
ValueEdit.Text:=Node.Value;
|
||||
UpdateValueControls;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.NodeTypeChanged;
|
||||
procedure TCompOptCondPropsDialog.UpdateValueControls;
|
||||
var
|
||||
s: String;
|
||||
begin
|
||||
if Node=nil then exit;
|
||||
ValueTypeLabel.Enabled:=Node.NodeType in [cocntAddValue];
|
||||
ValueTypeLabel.Enabled:=FNodeType in [cocntAddValue];
|
||||
ValueTypeComboBox.Enabled:=ValueTypeLabel.Enabled;
|
||||
s:=COCValueTypeLocalizedName(Node.ValueType);
|
||||
s:=COCValueTypeLocalizedName(fValueType);
|
||||
ValueTypeComboBox.ItemIndex:=ValueTypeComboBox.Items.IndexOf(s);
|
||||
ValueTypeComboBox.Text:=s;
|
||||
ValueLabel.Enabled:=Node.NodeType in [cocntNone,cocntIf,
|
||||
cocntIfdef,cocntIfNdef,cocntElseIf,cocntAddValue];
|
||||
ValueLabel.Enabled:=fNodeType in [cocntNone,cocntIf,
|
||||
cocntIfdef,cocntIfNdef,cocntElseIf,cocntAddValue];
|
||||
ValueEdit.Enabled:=ValueLabel.Enabled;
|
||||
ValueButton.Enabled:=ValueLabel.Enabled;
|
||||
case Node.NodeType of
|
||||
case fNodeType of
|
||||
cocntNone: ValueLabel.Caption:=lisResult;
|
||||
cocntIf, cocntElseIf: ValueLabel.Caption:=lisExpression;
|
||||
cocntIfdef, cocntIfNdef: ValueLabel.Caption:=lisCodeToolsDefsVariable;
|
||||
cocntAddValue: ValueLabel.Caption:=lisAddValue;
|
||||
else ValueLabel.Caption:='?';
|
||||
end;
|
||||
ValueEdit.Text:=FValue;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.SetValue(const AValue: string);
|
||||
begin
|
||||
if FValue=AValue then exit;
|
||||
FValue:=AValue;
|
||||
ValueEdit.Text:=FValue;
|
||||
end;
|
||||
|
||||
procedure TCompOptCondPropsDialog.SetValueType(const AValue: TCOCValueType);
|
||||
begin
|
||||
if FValueType=AValue then exit;
|
||||
FValueType:=AValue;
|
||||
UpdateValueControls;
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
@ -8,8 +8,8 @@ object CompOptsConditionalsFrame: TCompOptsConditionalsFrame
|
||||
Ctl3D = False
|
||||
TabOrder = 0
|
||||
Visible = False
|
||||
DesignLeft = 429
|
||||
DesignTop = 305
|
||||
DesignLeft = 434
|
||||
DesignTop = 329
|
||||
object COCTreeView: TTreeView
|
||||
Left = 0
|
||||
Height = 166
|
||||
@ -22,9 +22,8 @@ object CompOptsConditionalsFrame: TCompOptsConditionalsFrame
|
||||
PopupMenu = COCPopupMenu
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
ShowRoot = False
|
||||
TabOrder = 0
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowSeparators, tvoToolTips]
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoShowSeparators, tvoToolTips]
|
||||
end
|
||||
object COCPopupMenu: TPopupMenu
|
||||
OnPopup = COCPopupMenuPopup
|
||||
|
@ -4,12 +4,12 @@ LazarusResources.Add('TCompOptsConditionalsFrame','FORMDATA',[
|
||||
'TPF0'#26'TCompOptsConditionalsFrame'#25'CompOptsConditionalsFrame'#4'Left'#2
|
||||
+#0#6'Height'#3#170#0#3'Top'#2#0#5'Width'#3#129#1#12'ClientHeight'#3#166#0#11
|
||||
+'ClientWidth'#3'}'#1#5'Ctl3D'#8#8'TabOrder'#2#0#7'Visible'#8#10'DesignLeft'#3
|
||||
+#173#1#9'DesignTop'#3'1'#1#0#9'TTreeView'#11'COCTreeView'#4'Left'#2#0#6'Heig'
|
||||
+#178#1#9'DesignTop'#3'I'#1#0#9'TTreeView'#11'COCTreeView'#4'Left'#2#0#6'Heig'
|
||||
+'ht'#3#166#0#3'Top'#2#0#5'Width'#3'}'#1#5'Align'#7#8'alClient'#10'AutoExpand'
|
||||
+#9#5'Ctl3D'#8#17'DefaultItemHeight'#2#19#9'PopupMenu'#7#12'COCPopupMenu'#8'R'
|
||||
+'eadOnly'#9#9'RowSelect'#9#8'ShowRoot'#8#8'TabOrder'#2#0#7'Options'#11#13'tv'
|
||||
+'oAutoExpand'#17'tvoAutoItemHeight'#16'tvoHideSelection'#21'tvoKeepCollapsed'
|
||||
+'Nodes'#11'tvoReadOnly'#12'tvoRowSelect'#14'tvoShowButtons'#12'tvoShowLines'
|
||||
+'eadOnly'#9#9'RowSelect'#9#8'TabOrder'#2#0#7'Options'#11#13'tvoAutoExpand'#17
|
||||
+'tvoAutoItemHeight'#16'tvoHideSelection'#21'tvoKeepCollapsedNodes'#11'tvoRea'
|
||||
+'dOnly'#12'tvoRowSelect'#14'tvoShowButtons'#12'tvoShowLines'#11'tvoShowRoot'
|
||||
+#17'tvoShowSeparators'#11'tvoToolTips'#0#0#0#10'TPopupMenu'#12'COCPopupMenu'
|
||||
+#7'OnPopup'#7#17'COCPopupMenuPopup'#4'left'#2'0'#3'top'#2'0'#0#9'TMenuItem'
|
||||
+#19'InsertAboveMenuItem'#7'Caption'#6#19'InsertAboveMenuItem'#12'RightJustif'
|
||||
|
@ -188,7 +188,10 @@ var
|
||||
TVNode: TTreeNode;
|
||||
begin
|
||||
if not GetSelectedNode(COCNode,TVNode,false) then exit;
|
||||
|
||||
EditCompOptCondProperties(COCNode);
|
||||
TVNode.Text:=NodeToCaption(COCNode);
|
||||
TVNode.ImageIndex:=FNodeTypeImageIDs[COCNode.NodeType];
|
||||
TVNode.SelectedIndex:=TVNode.ImageIndex;
|
||||
end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.SetConditionals(
|
||||
@ -209,15 +212,20 @@ procedure TCompOptsConditionalsFrame.FillTreeView;
|
||||
if COCNode=nil then exit;
|
||||
TVNode:=COCTreeView.Items.AddChildObject(ParentTVNode,NodeToCaption(COCNode),COCNode);
|
||||
TVNode.ImageIndex:=FNodeTypeImageIDs[COCNode.NodeType];
|
||||
TVNode.SelectedIndex:=TVNode.ImageIndex;
|
||||
for i:=0 to COCNode.Count-1 do
|
||||
Add(COCNode.Childs[i],TVNode);
|
||||
end;
|
||||
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
COCTreeView.BeginUpdate;
|
||||
COCTreeView.Items.Clear;
|
||||
if Conditionals<>nil then begin
|
||||
Add(Conditionals.Root,nil);
|
||||
if (Conditionals<>nil) and (Conditionals.Root<>nil)
|
||||
and (Conditionals.Root.Count>0) then begin
|
||||
for i:=0 to Conditionals.Root.Count-1 do
|
||||
Add(Conditionals.Root.Childs[i],nil);
|
||||
end;
|
||||
COCTreeView.EndUpdate;
|
||||
ConsistencyCheck;
|
||||
@ -225,20 +233,32 @@ end;
|
||||
|
||||
procedure TCompOptsConditionalsFrame.ConsistencyCheck;
|
||||
|
||||
procedure CheckChilds(COCNode: TCompOptCondNode; ChildTVNode: TTreeNode); forward;
|
||||
|
||||
procedure CheckNode(COCNode: TCompOptCondNode; TVNode: TTreeNode);
|
||||
var
|
||||
i: Integer;
|
||||
ChildTVNode: TTreeNode;
|
||||
begin
|
||||
if COCNode=nil then
|
||||
RaiseCatchableException('');
|
||||
if TVNode=nil then
|
||||
if (TVNode=nil) then
|
||||
RaiseCatchableException('');
|
||||
if TVNode.Data=nil then
|
||||
RaiseCatchableException('');
|
||||
if COCNode<>TCompOptCondNode(TVNode.Data) then
|
||||
RaiseCatchableException(TCompOptCondNode(TObject(TVNode.Data)).Value+'<>'+COCNode.Value+' TVNode='+TVNode.Text);
|
||||
ChildTVNode:=TVNode.GetFirstChild;
|
||||
if NodeToCaption(COCNode)<>TVNode.Text then
|
||||
RaiseCatchableException(NodeToCaption(COCNode)+'<>'+TVNode.Text);
|
||||
if FNodeTypeImageIDs[COCNode.NodeType]<>TVNode.ImageIndex then
|
||||
RaiseCatchableException(dbgs(FNodeTypeImageIDs[COCNode.NodeType])+'<>'+dbgs(TVNode.ImageIndex));
|
||||
if FNodeTypeImageIDs[COCNode.NodeType]<>TVNode.SelectedIndex then
|
||||
RaiseCatchableException(dbgs(FNodeTypeImageIDs[COCNode.NodeType])+'<>'+dbgs(TVNode.SelectedIndex));
|
||||
CheckChilds(COCNode,TVNode.GetFirstChild);
|
||||
end;
|
||||
|
||||
procedure CheckChilds(COCNode: TCompOptCondNode; ChildTVNode: TTreeNode);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
if COCNode=nil then exit;
|
||||
for i:=0 to COCNode.Count-1 do begin
|
||||
CheckNode(COCNode.Childs[i],ChildTVNode);
|
||||
ChildTVNode:=ChildTVNode.GetNextSibling;
|
||||
@ -248,11 +268,14 @@ procedure TCompOptsConditionalsFrame.ConsistencyCheck;
|
||||
end;
|
||||
|
||||
begin
|
||||
if Conditionals=nil then begin
|
||||
Conditionals.WriteDebugReport;
|
||||
COCTreeView.WriteDebugReport(' ',true);
|
||||
if (Conditionals=nil) or (Conditionals.Root=nil)
|
||||
or (Conditionals.Root.Count=0) then begin
|
||||
if COCTreeView.Items.Count>0 then
|
||||
RaiseCatchableException('');
|
||||
end else begin
|
||||
CheckNode(Conditionals.Root,COCTreeView.Items.GetFirstNode);
|
||||
CheckChilds(Conditionals.Root,COCTreeView.Items.GetFirstNode);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -296,8 +319,8 @@ begin
|
||||
TVNode:=COCTreeView.Selected;
|
||||
if TVNode=nil then begin
|
||||
if RootAsDefault then begin
|
||||
TVNode:=COCTreeView.Items.GetFirstNode;
|
||||
COCNode:=TCompOptCondNode(TVNode.Data);
|
||||
TVNode:=nil;
|
||||
COCNode:=Conditionals.Root;
|
||||
end;
|
||||
end else begin
|
||||
COCNode:=TCompOptCondNode(TVNode.Data);
|
||||
@ -316,10 +339,12 @@ var
|
||||
begin
|
||||
if not GetSelectedNode(COCNode,TVNode,true) then exit;
|
||||
NewCOCNode:=TCompOptCondNode.Create(COCNode.Owner);
|
||||
s:=NodeToCaption(COCNode);
|
||||
s:=NodeToCaption(NewCOCNode);
|
||||
NewTVNode:=COCTreeView.Items.AddObject(TVNode,s,NewCOCNode);
|
||||
NewTVNode.MoveTo(TVNode,AttachMode);
|
||||
if TVNode<>nil then
|
||||
NewTVNode.MoveTo(TVNode,AttachMode);
|
||||
NewTVNode.ImageIndex:=FNodeTypeImageIDs[NewCOCNode.NodeType];
|
||||
NewTVNode.SelectedIndex:=NewTVNode.ImageIndex;
|
||||
case AttachMode of
|
||||
naAdd: NewCOCNode.Move(COCNode.Parent,COCNode.Parent.Count);
|
||||
naAddFirst: NewCOCNode.Move(COCNode.Parent,0);
|
||||
@ -328,7 +353,8 @@ begin
|
||||
naInsert: NewCOCNode.Move(COCNode.Parent,COCNode.Index);
|
||||
naInsertBehind: NewCOCNode.Move(COCNode.Parent,COCNode.Index+1);
|
||||
end;
|
||||
TVNode.Expanded:=true;
|
||||
if TVNode<>nil then
|
||||
TVNode.Expanded:=true;
|
||||
ConsistencyCheck;
|
||||
end;
|
||||
|
||||
|
@ -4008,6 +4008,10 @@ resourcestring
|
||||
dlgCOCreateNodeBelow = 'Create node below';
|
||||
dlgCOCreateChildNode = 'Create child node';
|
||||
lisResult = 'Result :=';
|
||||
lisPropertiesOfConditionalCompilerOption = 'Properties of conditional '
|
||||
+'compiler option';
|
||||
lisAction = 'Action:';
|
||||
lisValue = 'Value:';
|
||||
|
||||
implementation
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user