IDE: build modes: popup items

git-svn-id: trunk@18562 -
This commit is contained in:
mattias 2009-02-04 16:20:26 +00:00
parent 343ae3b671
commit 2ae6c31c9d
4 changed files with 93 additions and 24 deletions

View File

@ -4032,6 +4032,8 @@ resourcestring
+'compiler option';
lisAction = 'Action:';
lisValue = 'Value:';
lisValues = 'Values';
lisDefaultValue = 'Default value';
implementation

View File

@ -5,11 +5,10 @@ object CompOptBuildModesFrame: TCompOptBuildModesFrame
Width = 492
ClientHeight = 229
ClientWidth = 488
Ctl3D = False
TabOrder = 0
Visible = False
DesignLeft = 339
DesignTop = 472
DesignLeft = 344
DesignTop = 496
object BuildModesGroupBox: TGroupBox
Left = 0
Height = 229
@ -19,7 +18,6 @@ object CompOptBuildModesFrame: TCompOptBuildModesFrame
Caption = 'BuildModesGroupBox'
ClientHeight = 210
ClientWidth = 484
Ctl3D = False
TabOrder = 0
object BuildModesTreeView: TTreeView
Left = 0
@ -27,10 +25,11 @@ object CompOptBuildModesFrame: TCompOptBuildModesFrame
Top = 0
Width = 484
Align = alClient
Ctl3D = False
DefaultItemHeight = 19
PopupMenu = BuildModeTVPopupMenu
RightClickSelect = True
TabOrder = 0
Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips]
end
end
object BuildModeTVPopupMenu: TPopupMenu

View File

@ -3,13 +3,16 @@
LazarusResources.Add('TCompOptBuildModesFrame','FORMDATA',[
'TPF0'#23'TCompOptBuildModesFrame'#22'CompOptBuildModesFrame'#4'Left'#2#0#6'H'
+'eight'#3#233#0#3'Top'#2#0#5'Width'#3#236#1#12'ClientHeight'#3#229#0#11'Clie'
+'ntWidth'#3#232#1#5'Ctl3D'#8#8'TabOrder'#2#0#7'Visible'#8#10'DesignLeft'#3'S'
+#1#9'DesignTop'#3#216#1#0#9'TGroupBox'#18'BuildModesGroupBox'#4'Left'#2#0#6
+'Height'#3#229#0#3'Top'#2#0#5'Width'#3#232#1#5'Align'#7#8'alClient'#7'Captio'
+'n'#6#18'BuildModesGroupBox'#12'ClientHeight'#3#210#0#11'ClientWidth'#3#228#1
+#5'Ctl3D'#8#8'TabOrder'#2#0#0#9'TTreeView'#18'BuildModesTreeView'#4'Left'#2#0
+#6'Height'#3#210#0#3'Top'#2#0#5'Width'#3#228#1#5'Align'#7#8'alClient'#5'Ctl3'
+'D'#8#17'DefaultItemHeight'#2#19#9'PopupMenu'#7#20'BuildModeTVPopupMenu'#8'T'
+'abOrder'#2#0#0#0#0#10'TPopupMenu'#20'BuildModeTVPopupMenu'#7'OnPopup'#7#25
+'BuildModeTVPopupMenuPopup'#4'left'#2'c'#3'top'#2'M'#0#0#0
+'ntWidth'#3#232#1#8'TabOrder'#2#0#7'Visible'#8#10'DesignLeft'#3'X'#1#9'Desig'
+'nTop'#3#240#1#0#9'TGroupBox'#18'BuildModesGroupBox'#4'Left'#2#0#6'Height'#3
+#229#0#3'Top'#2#0#5'Width'#3#232#1#5'Align'#7#8'alClient'#7'Caption'#6#18'Bu'
+'ildModesGroupBox'#12'ClientHeight'#3#210#0#11'ClientWidth'#3#228#1#8'TabOrd'
+'er'#2#0#0#9'TTreeView'#18'BuildModesTreeView'#4'Left'#2#0#6'Height'#3#210#0
+#3'Top'#2#0#5'Width'#3#228#1#5'Align'#7#8'alClient'#17'DefaultItemHeight'#2
+#19#9'PopupMenu'#7#20'BuildModeTVPopupMenu'#16'RightClickSelect'#9#8'TabOrde'
+'r'#2#0#7'Options'#11#17'tvoAutoItemHeight'#16'tvoHideSelection'#21'tvoKeepC'
+'ollapsedNodes'#19'tvoRightClickSelect'#14'tvoShowButtons'#12'tvoShowLines'
+#11'tvoShowRoot'#11'tvoToolTips'#0#0#0#0#10'TPopupMenu'#20'BuildModeTVPopupM'
+'enu'#7'OnPopup'#7#25'BuildModeTVPopupMenuPopup'#4'left'#2'c'#3'top'#2'M'#0#0
+#0
]);

View File

@ -30,6 +30,13 @@ uses
Compiler_Conditionals_Options, LazarusIDEStrConsts, CompOptsModes;
type
TCBMNodeType = (
cbmntNone,
cbmntBuildMode,
cbmntValues,
cbmntValue,
cbmntDefaultValue
);
{ TCompOptBuildModesFrame }
@ -48,6 +55,8 @@ type
fDefValueImgID: LongInt;
procedure SetBuildModes(const AValue: TIDEBuildModes);
procedure RebuildTreeView;
function GetSelectedNode(out BuildMode: TLazBuildMode;
out NodeType: TCBMNodeType): TTreeNode;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
@ -89,16 +98,36 @@ end;
procedure TCompOptBuildModesFrame.BuildModeTVPopupMenuPopup(Sender: TObject);
var
SelTVNode: TTreeNode;
begin
SelTVNode:=BuildModesTreeView.Selected;
if SelTVNode=nil then begin
// no node selected
end else begin
BuildMode: TLazBuildMode;
NodeType: TCBMNodeType;
function Add(const aCaption: string; const OnClickEvent: TNotifyEvent): TMenuItem;
begin
Result:=TMenuItem.Create(Self);
Result.Caption:=aCaption;
Result.OnClick:=OnClickEvent;
BuildModeTVPopupMenu.Items.Add(Result);
end;
function AddSeparator: TMenuItem;
begin
Result:=TMenuItem.Create(Self);
Result.Caption:='-';
BuildModeTVPopupMenu.Items.Add(Result);
end;
begin
BuildModeTVPopupMenu.Items.Clear;
GetSelectedNode(BuildMode,NodeType);
if NodeType in [cbmntBuildMode,cbmntValues,cbmntValue] then
Add('New value',nil);
if NodeType in [cbmntValue] then
Add('Delete value ...',nil);
AddSeparator;
Add('New build mode',nil);
if NodeType in [cbmntBuildMode] then
Add('Delete build mode ...',nil);
end;
procedure TCompOptBuildModesFrame.SetBuildModes(const AValue: TIDEBuildModes);
@ -133,7 +162,7 @@ begin
// second level
begin
// parent node for values
ValuesTVNode:=BuildModesTreeView.Items.AddChild(TVNode,'Values');
ValuesTVNode:=BuildModesTreeView.Items.AddChild(TVNode, lisValues);
ValuesTVNode.ImageIndex:=fValuesImgID;
ValuesTVNode.StateIndex:=ValuesTVNode.ImageIndex;
ValuesTVNode.SelectedIndex:=ValuesTVNode.ImageIndex;
@ -146,7 +175,8 @@ begin
ValueTVNode.SelectedIndex:=ValueTVNode.ImageIndex;
end;
// a node for the default value
DefValueTVNode:=BuildModesTreeView.Items.AddChild(TVNode,'Default value');
DefValueTVNode:=BuildModesTreeView.Items.AddChild(TVNode,
lisDefaultValue);
DefValueTVNode.ImageIndex:=fDefValueImgID;
DefValueTVNode.StateIndex:=DefValueTVNode.ImageIndex;
DefValueTVNode.SelectedIndex:=DefValueTVNode.ImageIndex;
@ -158,6 +188,41 @@ begin
BuildModesTreeView.EndUpdate;
end;
function TCompOptBuildModesFrame.GetSelectedNode(out
BuildMode: TLazBuildMode; out NodeType: TCBMNodeType): TTreeNode;
function GetNodeType(Node: TTreeNode): TCBMNodeType;
var
ParentType: TCBMNodeType;
begin
if Node=nil then
Result:=cbmntNone
else if TObject(Node.Data) is TLazBuildMode then begin
BuildMode:=TLazBuildMode(Node.Data);
Result:=cbmntBuildMode;
end else begin
ParentType:=GetNodeType(Node.Parent);
case ParentType of
cbmntBuildMode:
if Node.Text=lisValues then
Result:=cbmntValues
else if Node.Text=lisDefaultValue then
Result:=cbmntDefaultValue;
cbmntValues:
Result:=cbmntValue;
cbmntDefaultValue:
// ToDo
;
end;
end;
end;
begin
BuildMode:=nil;
Result:=BuildModesTreeView.Selected;
NodeType:=GetNodeType(Result);
end;
constructor TCompOptBuildModesFrame.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);