mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-06 10:38:17 +02:00
ide: add drop down build mode menu for options button in project inspector.
git-svn-id: trunk@53699 -
This commit is contained in:
parent
b5255eebaa
commit
0b5c0aac35
16
ide/main.pp
16
ide/main.pp
@ -3833,7 +3833,8 @@ procedure TMainIDE.UpdateProjectCommands(Sender: TObject);
|
|||||||
var
|
var
|
||||||
ASrcEdit: TSourceEditor;
|
ASrcEdit: TSourceEditor;
|
||||||
AUnitInfo: TUnitInfo;
|
AUnitInfo: TUnitInfo;
|
||||||
xCmd: TIDECommand;
|
ACmd: TIDECommand;
|
||||||
|
ABuildHint: string;
|
||||||
begin
|
begin
|
||||||
GetCurrentUnit(ASrcEdit,AUnitInfo);
|
GetCurrentUnit(ASrcEdit,AUnitInfo);
|
||||||
if not UpdateProjectCommandsStamp.Changed(AUnitInfo) then
|
if not UpdateProjectCommandsStamp.Changed(AUnitInfo) then
|
||||||
@ -3842,14 +3843,17 @@ begin
|
|||||||
IDECommandList.FindIDECommand(ecAddCurUnitToProj).Enabled:=Assigned(AUnitInfo) and not AUnitInfo.IsPartOfProject;
|
IDECommandList.FindIDECommand(ecAddCurUnitToProj).Enabled:=Assigned(AUnitInfo) and not AUnitInfo.IsPartOfProject;
|
||||||
IDECommandList.FindIDECommand(ecBuildManyModes).Enabled:=(Project1<>nil) and (Project1.BuildModes.Count>1);
|
IDECommandList.FindIDECommand(ecBuildManyModes).Enabled:=(Project1<>nil) and (Project1.BuildModes.Count>1);
|
||||||
|
|
||||||
xCmd := IDECommandList.FindIDECommand(ecProjectChangeBuildMode);
|
ACmd := IDECommandList.FindIDECommand(ecProjectChangeBuildMode);
|
||||||
if Assigned(Project1) then
|
if Assigned(Project1) then
|
||||||
xCmd.Hint :=
|
ABuildHint :=
|
||||||
Trim(lisChangeBuildMode + ' ' + KeyValuesToCaptionStr(xCmd.ShortcutA, xCmd.ShortcutB, '(')) + sLineBreak +
|
Trim(lisChangeBuildMode + ' ' + KeyValuesToCaptionStr(ACmd.ShortcutA, ACmd.ShortcutB, '(')) + sLineBreak +
|
||||||
Format('[%s]', [Project1.ActiveBuildMode.GetCaption])
|
Format('[%s]', [Project1.ActiveBuildMode.GetCaption])
|
||||||
else
|
else
|
||||||
xCmd.Hint :=
|
ABuildHint :=
|
||||||
Trim(lisChangeBuildMode + ' ' + KeyValuesToCaptionStr(xCmd.ShortcutA, xCmd.ShortcutB, '('));
|
Trim(lisChangeBuildMode + ' ' + KeyValuesToCaptionStr(ACmd.ShortcutA, ACmd.ShortcutB, '('));
|
||||||
|
|
||||||
|
ACmd.Hint := ABuildHint;
|
||||||
|
ProjInspector.OptionsBitBtn.Hint := ABuildHint;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.UpdatePackageCommands(Sender: TObject);
|
procedure TMainIDE.UpdatePackageCommands(Sender: TObject);
|
||||||
|
137
ide/mainbase.pas
137
ide/mainbase.pas
@ -207,9 +207,17 @@ type
|
|||||||
{ TSetBuildModeToolButton }
|
{ TSetBuildModeToolButton }
|
||||||
|
|
||||||
TSetBuildModeToolButton = class(TIDEToolButton)
|
TSetBuildModeToolButton = class(TIDEToolButton)
|
||||||
private
|
public type
|
||||||
procedure RefreshMenu(Sender: TObject);
|
TBuildModeMenuItem = class(TMenuItem)
|
||||||
procedure mnuSetBuildModeClick(Sender: TObject);
|
public
|
||||||
|
BuildModeIndex: Integer;
|
||||||
|
procedure Click; override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TBuildModeMenu = class(TPopupMenu)
|
||||||
|
protected
|
||||||
|
procedure DoPopup(Sender: TObject); override;
|
||||||
|
end;
|
||||||
public
|
public
|
||||||
procedure DoOnAdded; override;
|
procedure DoOnAdded; override;
|
||||||
end;
|
end;
|
||||||
@ -296,6 +304,66 @@ begin
|
|||||||
Result := TMainIDEBase(MainIDEInterface)
|
Result := TMainIDEBase(MainIDEInterface)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TSetBuildModeToolButton.TBuildModeMenu }
|
||||||
|
|
||||||
|
procedure TSetBuildModeToolButton.TBuildModeMenu.DoPopup(Sender: TObject);
|
||||||
|
var
|
||||||
|
CurIndex: Integer;
|
||||||
|
i: Integer;
|
||||||
|
|
||||||
|
procedure AddMode(BuildModeIndex: Integer; CurMode: TProjectBuildMode);
|
||||||
|
var
|
||||||
|
AMenuItem: TBuildModeMenuItem;
|
||||||
|
begin
|
||||||
|
if Items.Count > CurIndex then
|
||||||
|
AMenuItem := Items[CurIndex] as TBuildModeMenuItem
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
AMenuItem := TBuildModeMenuItem.Create(DropdownMenu);
|
||||||
|
AMenuItem.Name := Name + 'Mode' + IntToStr(CurIndex);
|
||||||
|
Items.Add(AMenuItem);
|
||||||
|
end;
|
||||||
|
AMenuItem.BuildModeIndex := BuildModeIndex;
|
||||||
|
AMenuItem.Caption := CurMode.GetCaption;
|
||||||
|
AMenuItem.Checked := (Project1<>nil) and (Project1.ActiveBuildMode=CurMode);
|
||||||
|
AMenuItem.ShowAlwaysCheckable:=true;
|
||||||
|
inc(CurIndex);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
// fill the PopupMenu
|
||||||
|
CurIndex := 0;
|
||||||
|
if Project1<>nil then
|
||||||
|
for i:=0 to Project1.BuildModes.Count-1 do
|
||||||
|
AddMode(i, Project1.BuildModes[i]);
|
||||||
|
// remove unused menuitems
|
||||||
|
while Items.Count > CurIndex do
|
||||||
|
Items[Items.Count - 1].Free;
|
||||||
|
|
||||||
|
inherited DoPopup(Sender);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TSetBuildModeToolButton.TBuildModeMenuItem }
|
||||||
|
|
||||||
|
procedure TSetBuildModeToolButton.TBuildModeMenuItem.Click;
|
||||||
|
var
|
||||||
|
NewMode: TProjectBuildMode;
|
||||||
|
begin
|
||||||
|
inherited Click;
|
||||||
|
|
||||||
|
NewMode := Project1.BuildModes[BuildModeIndex];
|
||||||
|
if NewMode = Project1.ActiveBuildMode then exit;
|
||||||
|
if not (MainIDE.ToolStatus in [itNone,itDebugger]) then begin
|
||||||
|
IDEMessageDialog('Error','You can not change the build mode while compiling.',
|
||||||
|
mtError,[mbOk]);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Project1.ActiveBuildMode := NewMode;
|
||||||
|
MainBuildBoss.SetBuildTargetProject1(false);
|
||||||
|
MainIDE.UpdateCaption;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TNewFormUnitToolButton }
|
{ TNewFormUnitToolButton }
|
||||||
|
|
||||||
procedure TNewFormUnitToolButton.DoOnAdded;
|
procedure TNewFormUnitToolButton.DoOnAdded;
|
||||||
@ -502,71 +570,10 @@ procedure TSetBuildModeToolButton.DoOnAdded;
|
|||||||
begin
|
begin
|
||||||
inherited DoOnAdded;
|
inherited DoOnAdded;
|
||||||
|
|
||||||
DropdownMenu := TPopupMenu.Create(Self);
|
DropdownMenu := TBuildModeMenu.Create(Self);
|
||||||
DropdownMenu.OnPopup := @RefreshMenu;
|
|
||||||
Style := tbsDropDown;
|
Style := tbsDropDown;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSetBuildModeToolButton.mnuSetBuildModeClick(Sender: TObject);
|
|
||||||
var
|
|
||||||
TheMenuItem: TMenuItem;
|
|
||||||
TheIndex: LongInt;
|
|
||||||
NewMode: TProjectBuildMode;
|
|
||||||
begin
|
|
||||||
TheMenuItem := (Sender as TMenuItem);
|
|
||||||
if TheMenuItem.Caption = '-' then exit;
|
|
||||||
TheIndex := TheMenuItem.MenuIndex;
|
|
||||||
if (TheIndex < 0) or (TheIndex >= Project1.BuildModes.Count) then exit;
|
|
||||||
NewMode := Project1.BuildModes[TheIndex];
|
|
||||||
if NewMode = Project1.ActiveBuildMode then exit;
|
|
||||||
if not (MainIDE.ToolStatus in [itNone,itDebugger]) then begin
|
|
||||||
IDEMessageDialog('Error','You can not change the build mode while compiling.',
|
|
||||||
mtError,[mbOk]);
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
Project1.ActiveBuildMode := NewMode;
|
|
||||||
MainBuildBoss.SetBuildTargetProject1(false);
|
|
||||||
MainIDE.UpdateCaption;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TSetBuildModeToolButton.RefreshMenu(Sender: TObject);
|
|
||||||
var
|
|
||||||
aMenu: TPopupMenu;
|
|
||||||
CurIndex: Integer;
|
|
||||||
i: Integer;
|
|
||||||
|
|
||||||
procedure AddMode(CurMode: TProjectBuildMode);
|
|
||||||
var
|
|
||||||
AMenuItem: TMenuItem;
|
|
||||||
begin
|
|
||||||
if aMenu.Items.Count > CurIndex then
|
|
||||||
AMenuItem := aMenu.Items[CurIndex]
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
AMenuItem := TMenuItem.Create(DropdownMenu);
|
|
||||||
AMenuItem.Name := aMenu.Name + 'Mode' + IntToStr(CurIndex);
|
|
||||||
AMenuItem.OnClick := @mnuSetBuildModeClick;
|
|
||||||
aMenu.Items.Add(AMenuItem);
|
|
||||||
end;
|
|
||||||
AMenuItem.Caption := CurMode.GetCaption;
|
|
||||||
AMenuItem.Checked := (Project1<>nil) and (Project1.ActiveBuildMode=CurMode);
|
|
||||||
AMenuItem.ShowAlwaysCheckable:=true;
|
|
||||||
inc(CurIndex);
|
|
||||||
end;
|
|
||||||
|
|
||||||
begin
|
|
||||||
// fill the PopupMenu:
|
|
||||||
CurIndex := 0;
|
|
||||||
aMenu := DropdownMenu;
|
|
||||||
if Project1<>nil then
|
|
||||||
for i:=0 to Project1.BuildModes.Count-1 do
|
|
||||||
AddMode(Project1.BuildModes[i]);
|
|
||||||
// remove unused menuitems
|
|
||||||
while aMenu.Items.Count > CurIndex do
|
|
||||||
aMenu.Items[aMenu.Items.Count - 1].Free;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ TJumpToSectionToolButton }
|
{ TJumpToSectionToolButton }
|
||||||
|
|
||||||
procedure TJumpToSectionToolButton.DoOnAdded;
|
procedure TJumpToSectionToolButton.DoOnAdded;
|
||||||
|
@ -64,7 +64,7 @@ uses
|
|||||||
// IDE
|
// IDE
|
||||||
LazarusIDEStrConsts, IDEProcs, DialogProcs, IDEOptionDefs, EnvironmentOpts,
|
LazarusIDEStrConsts, IDEProcs, DialogProcs, IDEOptionDefs, EnvironmentOpts,
|
||||||
PackageDefs, Project, PackageEditor, AddToProjectDlg, AddPkgDependencyDlg,
|
PackageDefs, Project, PackageEditor, AddToProjectDlg, AddPkgDependencyDlg,
|
||||||
InputHistory, ProjPackChecks;
|
InputHistory, MainBase, ProjPackChecks;
|
||||||
|
|
||||||
type
|
type
|
||||||
TOnAddUnitToProject =
|
TOnAddUnitToProject =
|
||||||
@ -1027,6 +1027,8 @@ begin
|
|||||||
RemoveBitBtn := CreateToolButton('RemoveBitBtn', lisRemove, lisPckEditRemoveSelectedItem, 'laz_delete', @RemoveBitBtnClick);
|
RemoveBitBtn := CreateToolButton('RemoveBitBtn', lisRemove, lisPckEditRemoveSelectedItem, 'laz_delete', @RemoveBitBtnClick);
|
||||||
CreateDivider;
|
CreateDivider;
|
||||||
OptionsBitBtn := CreateToolButton('OptionsBitBtn', lisOptions, lisPckEditEditGeneralOptions, 'menu_environment_options', @OptionsBitBtnClick);
|
OptionsBitBtn := CreateToolButton('OptionsBitBtn', lisOptions, lisPckEditEditGeneralOptions, 'menu_environment_options', @OptionsBitBtnClick);
|
||||||
|
OptionsBitBtn.DropdownMenu := TSetBuildModeToolButton.TBuildModeMenu.Create(Self);
|
||||||
|
OptionsBitBtn.Style := tbsDropDown;
|
||||||
HelpBitBtn := CreateToolButton('HelpBitBtn', GetButtonCaption(idButtonHelp), lisMenuOnlineHelp, 'menu_help', @HelpBitBtnClick);
|
HelpBitBtn := CreateToolButton('HelpBitBtn', GetButtonCaption(idButtonHelp), lisMenuOnlineHelp, 'menu_help', @HelpBitBtnClick);
|
||||||
|
|
||||||
AddBitBtn.DropdownMenu:=AddPopupMenu;
|
AddBitBtn.DropdownMenu:=AddPopupMenu;
|
||||||
|
Loading…
Reference in New Issue
Block a user