IDE: build macros: replaced popup menu with speed buttons

git-svn-id: trunk@27494 -
This commit is contained in:
mattias 2010-09-27 21:44:19 +00:00
parent 98f7850ffe
commit 22da3b4e6d
2 changed files with 160 additions and 143 deletions

View File

@ -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

View File

@ -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;