diff --git a/ide/frames/compiler_buildmacro_options.lfm b/ide/frames/compiler_buildmacro_options.lfm index 587c82a076..bd99c18ff4 100644 --- a/ide/frames/compiler_buildmacro_options.lfm +++ b/ide/frames/compiler_buildmacro_options.lfm @@ -18,14 +18,19 @@ inherited CompOptBuildMacrosFrame: TCompOptBuildMacrosFrame ClientWidth = 506 TabOrder = 0 object BuildMacrosTreeView: TTreeView + AnchorSideLeft.Control = MacrosGroupBox + AnchorSideTop.Control = BMAddMacroSpeedButton + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Splitter1 + AnchorSideBottom.Control = MacrosGroupBox + AnchorSideBottom.Side = asrBottom Left = 0 - Height = 222 - Top = 0 + Height = 200 + Top = 22 Width = 227 - Align = alLeft + Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 6 DefaultItemHeight = 19 - PopupMenu = BuildMacrosTVPopupMenu RightClickSelect = True TabOrder = 0 OnEdited = BuildMacrosTreeViewEdited @@ -34,17 +39,25 @@ inherited CompOptBuildMacrosFrame: TCompOptBuildMacrosFrame Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips] end object Splitter1: TSplitter + AnchorSideTop.Control = MacrosGroupBox + AnchorSideBottom.Control = MacrosGroupBox + AnchorSideBottom.Side = asrBottom Left = 233 Height = 222 Top = 0 Width = 5 + Align = alNone + Anchors = [akTop, akLeft, akBottom] end object BuildMacroSelectedGroupBox: TGroupBox + AnchorSideLeft.Control = Splitter1 + AnchorSideLeft.Side = asrBottom Left = 244 Height = 222 Top = 0 Width = 262 - Align = alClient + Align = alRight + Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 Caption = 'BuildMacroSelectedGroupBox' ClientHeight = 201 @@ -52,14 +65,16 @@ inherited CompOptBuildMacrosFrame: TCompOptBuildMacrosFrame TabOrder = 2 object BuildMacroDefaultLabel: TLabel Left = 6 - Height = 18 + Height = 123 Top = 72 Width = 242 - Align = alTop + Align = alClient + AutoSize = False BorderSpacing.Top = 15 BorderSpacing.Around = 6 Caption = 'BuildMacroDefaultLabel' ParentColor = False + WordWrap = True end object BuildMacroDescriptionLabel: TLabel Left = 6 @@ -85,6 +100,49 @@ inherited CompOptBuildMacrosFrame: TCompOptBuildMacrosFrame Text = 'BuildMacroDescriptionEdit' end end + object BMAddMacroSpeedButton: TSpeedButton + AnchorSideLeft.Control = MacrosGroupBox + AnchorSideTop.Control = MacrosGroupBox + Left = 0 + Height = 22 + Top = 0 + Width = 23 + Color = clBtnFace + NumGlyphs = 0 + OnClick = BMAddMacroSpeedButtonClick + ShowHint = True + ParentShowHint = False + end + object BMAddMacroValueSpeedButton: TSpeedButton + AnchorSideLeft.Control = BMAddMacroSpeedButton + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = MacrosGroupBox + Left = 29 + Height = 22 + Top = 0 + Width = 23 + BorderSpacing.Left = 6 + Color = clBtnFace + NumGlyphs = 0 + OnClick = BMAddMacroValueSpeedButtonClick + ShowHint = True + ParentShowHint = False + end + object BMDeleteSpeedButton: TSpeedButton + AnchorSideLeft.Control = BMAddMacroValueSpeedButton + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = MacrosGroupBox + Left = 58 + Height = 22 + Top = 0 + Width = 23 + BorderSpacing.Left = 6 + Color = clBtnFace + NumGlyphs = 0 + OnClick = BMDeleteSpeedButtonClick + ShowHint = True + ParentShowHint = False + end end object MacrosSplitter: TSplitter[1] Cursor = crVSplit @@ -843,9 +901,4 @@ inherited CompOptBuildMacrosFrame: TCompOptBuildMacrosFrame SimplePanel = False end end - object BuildMacrosTVPopupMenu: TPopupMenu[3] - OnPopup = BuildMacrosTVPopupMenuPopup - left = 99 - top = 77 - end end diff --git a/ide/frames/compiler_buildmacro_options.pas b/ide/frames/compiler_buildmacro_options.pas index 6d688c92d2..664b82f29e 100644 --- a/ide/frames/compiler_buildmacro_options.pas +++ b/ide/frames/compiler_buildmacro_options.pas @@ -52,10 +52,12 @@ type { TCompOptBuildMacrosFrame } TCompOptBuildMacrosFrame = class(TAbstractIDEOptionsEditor) + BMAddMacroSpeedButton: TSpeedButton; + BMAddMacroValueSpeedButton: TSpeedButton; + BMDeleteSpeedButton: TSpeedButton; BuildMacroDescriptionEdit: TEdit; BuildMacroSelectedGroupBox: TGroupBox; BuildMacrosTreeView: TTreeView; - BuildMacrosTVPopupMenu: TPopupMenu; BuildMacroDefaultLabel: TLabel; BuildMacroDescriptionLabel: TLabel; ConditionalsGroupBox: TGroupBox; @@ -64,19 +66,17 @@ type MacrosGroupBox: TGroupBox; MacrosSplitter: TSplitter; Splitter1: TSplitter; + procedure BMAddMacroSpeedButtonClick(Sender: TObject); + procedure BMAddMacroValueSpeedButtonClick(Sender: TObject); + procedure BMDeleteSpeedButtonClick(Sender: TObject); procedure BuildMacrosTreeViewEdited(Sender: TObject; Node: TTreeNode; var S: string); procedure BuildMacrosTreeViewEditing(Sender: TObject; Node: TTreeNode; var AllowEdit: Boolean); procedure BuildMacrosTreeViewSelectionChanged(Sender: TObject); - procedure BuildMacrosTVPopupMenuPopup(Sender: TObject); procedure CondSynEditChange(Sender: TObject); procedure CondSynEditStatusChange(Sender: TObject; Changes: TSynStatusChanges); - procedure DeleteBuildMacroClick(Sender: TObject); - procedure NewBuildMacroClick(Sender: TObject); - procedure NewValueClick(Sender: TObject); - procedure DeleteValueClick(Sender: TObject); procedure OnIdle(Sender: TObject; var Done: Boolean); private FHighlighter: TIDESynFreePasSyn; @@ -123,136 +123,12 @@ implementation { TCompOptBuildMacrosFrame } -procedure TCompOptBuildMacrosFrame.NewBuildMacroClick(Sender: TObject); -var - NewIdentifier: String; - NewBuildMacro: TLazBuildMacro; - i: Integer; - TVNode: TTreeNode; -begin - i:=1; - repeat - NewIdentifier:=GetMacroNamePrefix(cbmpLong)+IntToStr(BuildMacros.Count+1); - if BuildMacros.IndexOfIdentifier(NewIdentifier)<0 then break; - inc(i); - until false; - NewBuildMacro:=BuildMacros.Add(NewIdentifier); - // add to TreeView - BuildMacrosTreeView.BeginUpdate; - TVNode:=TreeViewAddBuildMacro(NewBuildMacro); - BuildMacrosTreeView.Selected:=TVNode; - BuildMacrosTreeView.EndUpdate; - UpdateItemPropertyControls; -end; - -procedure TCompOptBuildMacrosFrame.NewValueClick(Sender: TObject); -var - BuildMacro: TLazBuildMacro; - NodeType: TCBMNodeType; - i: Integer; - NewValueStr: String; - ValuesTVNode: TTreeNode; -begin - GetSelectedNode(BuildMacro,NodeType); - if BuildMacro=nil then exit; - i:=1; - repeat - NewValueStr:=Format(lisValue2, [IntToStr(i)]); - if BuildMacro.Values.IndexOf(NewValueStr)<0 then break; - inc(i); - until false; - BuildMacro.Values.Add(NewValueStr); - BuildMacrosTreeView.BeginUpdate; - ValuesTVNode:=GetBuildMacroTVNode(BuildMacro); - TreeViewAddValue(ValuesTVNode,NewValueStr); - ValuesTVNode.Expand(true); - BuildMacrosTreeView.EndUpdate; -end; - -procedure TCompOptBuildMacrosFrame.DeleteValueClick(Sender: TObject); -var - BuildProperty: TLazBuildMacro; - NodeType: TCBMNodeType; - SelTVNode: TTreeNode; - aValue: String; - i: LongInt; -begin - SelTVNode:=GetSelectedNode(BuildProperty,NodeType); - if NodeType<>cbmntValue then exit; - aValue:=SelTVNode.Text; - if MessageDlg(lisConfirmDelete, - Format(lisDeleteValue, ['"', aValue, '"']), - mtConfirmation,[mbYes,mbCancel],0)<>mrYes - then exit; - i:=BuildProperty.Values.IndexOf(aValue); - if i>=0 then BuildProperty.Values.Delete(i); - BuildMacrosTreeView.BeginUpdate; - SelTVNode.Delete; - BuildMacrosTreeView.EndUpdate; -end; - procedure TCompOptBuildMacrosFrame.OnIdle(Sender: TObject; var Done: Boolean); begin IdleConnected:=false; UpdateMessages; end; -procedure TCompOptBuildMacrosFrame.DeleteBuildMacroClick(Sender: TObject); -var - aBuildMacro: TIDEBuildMacro; - SelTVNode: TTreeNode; - NodeType: TCBMNodeType; - i: LongInt; -begin - SelTVNode:=GetSelectedNode(TLazBuildMacro(aBuildMacro),NodeType); - if aBuildMacro=nil then exit; - if MessageDlg(lisConfirmDelete, - Format(lisDeleteBuildMacro, ['"', aBuildMacro.Identifier, '"']), - mtConfirmation,[mbYes,mbCancel],0)<>mrYes - then exit; - i:=BuildMacros.IndexOfIdentifier(aBuildMacro.Identifier); - BuildMacros.Delete(i); - BuildMacrosTreeView.BeginUpdate; - SelTVNode.Delete; - BuildMacrosTreeView.EndUpdate; -end; - -procedure TCompOptBuildMacrosFrame.BuildMacrosTVPopupMenuPopup(Sender: TObject); -var - aBuildMacro: TLazBuildMacro; - NodeType: TCBMNodeType; - - function Add(const aCaption: string; const OnClickEvent: TNotifyEvent): TMenuItem; - begin - Result:=TMenuItem.Create(Self); - Result.Caption:=aCaption; - Result.OnClick:=OnClickEvent; - BuildMacrosTVPopupMenu.Items.Add(Result); - end; - - function AddSeparator: TMenuItem; - begin - Result:=nil; - if BuildMacrosTVPopupMenu.Items.Count=0 then exit; - Result:=TMenuItem.Create(Self); - Result.Caption:='-'; - BuildMacrosTVPopupMenu.Items.Add(Result); - end; - -begin - BuildMacrosTVPopupMenu.Items.Clear; - GetSelectedNode(aBuildMacro,NodeType); - - if NodeType in [cbmntBuildMacro,cbmntValue] then - Add('New value',@NewValueClick); - if NodeType in [cbmntValue] then - Add('Delete value ...',@DeleteValueClick); - AddSeparator; - Add('New build macro',@NewBuildMacroClick); - if NodeType in [cbmntBuildMacro] then - Add('Delete build macro ...',@DeleteBuildMacroClick); -end; - procedure TCompOptBuildMacrosFrame.CondSynEditChange(Sender: TObject); begin UpdateStatusBar; @@ -396,6 +272,85 @@ begin end; end; +procedure TCompOptBuildMacrosFrame.BMAddMacroSpeedButtonClick(Sender: TObject); +var + NewIdentifier: String; + NewBuildMacro: TLazBuildMacro; + i: Integer; + TVNode: TTreeNode; +begin + i:=1; + repeat + NewIdentifier:=GetMacroNamePrefix(cbmpLong)+IntToStr(BuildMacros.Count+1); + if BuildMacros.IndexOfIdentifier(NewIdentifier)<0 then break; + inc(i); + until false; + NewBuildMacro:=BuildMacros.Add(NewIdentifier); + // add to TreeView + BuildMacrosTreeView.BeginUpdate; + TVNode:=TreeViewAddBuildMacro(NewBuildMacro); + BuildMacrosTreeView.Selected:=TVNode; + BuildMacrosTreeView.EndUpdate; + UpdateItemPropertyControls; +end; + +procedure TCompOptBuildMacrosFrame.BMAddMacroValueSpeedButtonClick( + Sender: TObject); +var + BuildMacro: TLazBuildMacro; + NodeType: TCBMNodeType; + i: Integer; + NewValueStr: String; + ValuesTVNode: TTreeNode; +begin + GetSelectedNode(BuildMacro,NodeType); + if BuildMacro=nil then exit; + i:=1; + repeat + NewValueStr:=Format(lisValue2, [IntToStr(i)]); + if BuildMacro.Values.IndexOf(NewValueStr)<0 then break; + inc(i); + until false; + BuildMacro.Values.Add(NewValueStr); + BuildMacrosTreeView.BeginUpdate; + ValuesTVNode:=GetBuildMacroTVNode(BuildMacro); + TreeViewAddValue(ValuesTVNode,NewValueStr); + ValuesTVNode.Expand(true); + BuildMacrosTreeView.EndUpdate; +end; + +procedure TCompOptBuildMacrosFrame.BMDeleteSpeedButtonClick(Sender: TObject); +var + aBuildMacro: TIDEBuildMacro; + SelTVNode: TTreeNode; + NodeType: TCBMNodeType; + i: LongInt; + aValue: String; +begin + SelTVNode:=GetSelectedNode(TLazBuildMacro(aBuildMacro),NodeType); + if aBuildMacro=nil then exit; + if NodeType=cbmntValue then + begin + aValue:=SelTVNode.Text; + if MessageDlg(lisConfirmDelete, + Format(lisDeleteValue, ['"', aValue, '"']), + mtConfirmation,[mbYes,mbCancel],0)<>mrYes + then exit; + i:=aBuildMacro.Values.IndexOf(aValue); + if i>=0 then aBuildMacro.Values.Delete(i); + end else begin + if MessageDlg(lisConfirmDelete, + Format(lisDeleteBuildMacro, ['"', aBuildMacro.Identifier, '"']), + mtConfirmation,[mbYes,mbCancel],0)<>mrYes + then exit; + i:=BuildMacros.IndexOfIdentifier(aBuildMacro.Identifier); + BuildMacros.Delete(i); + end; + BuildMacrosTreeView.BeginUpdate; + SelTVNode.Delete; + BuildMacrosTreeView.EndUpdate; +end; + procedure TCompOptBuildMacrosFrame.SetBuildMacros( const AValue: TIDEBuildMacros); begin @@ -539,12 +494,19 @@ begin BuildMacroSelectedGroupBox.Enabled:=true; BuildMacroDescriptionEdit.Enabled:=true; BuildMacroDescriptionEdit.Text:=aBuildMacro.Description; + BMAddMacroValueSpeedButton.Hint:='Add value to macro '+aBuildMacro.Identifier; + BMDeleteSpeedButton.Hint:='Delete macro '+aBuildMacro.Identifier; end else begin BuildMacroSelectedGroupBox.Caption:='No macro selected'; BuildMacroSelectedGroupBox.Enabled:=false; BuildMacroDescriptionEdit.Enabled:=false; BuildMacroDescriptionEdit.Text:=''; + BMAddMacroValueSpeedButton.Hint:=''; + BMDeleteSpeedButton.Hint:=''; end; + BMAddMacroSpeedButton.Hint:='Add new macro'; + BMAddMacroValueSpeedButton.Enabled:=NodeType=cbmntBuildMacro; + BMDeleteSpeedButton.Enabled:=NodeType in [cbmntBuildMacro,cbmntValue]; end; procedure TCompOptBuildMacrosFrame.UpdateMessages; @@ -624,7 +586,9 @@ end; procedure TCompOptBuildMacrosFrame.Setup(ADialog: TAbstractOptionsEditorDialog ); begin - + BMAddMacroSpeedButton.LoadGlyphFromLazarusResource('laz_add'); + BMAddMacroValueSpeedButton.LoadGlyphFromLazarusResource('laz_add'); + BMDeleteSpeedButton.LoadGlyphFromLazarusResource('laz_delete'); end; class function TCompOptBuildMacrosFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;