IDE: Let user create Debug and Release build modes with one button click. Issues #22743 and #19641

git-svn-id: trunk@42217 -
This commit is contained in:
juha 2013-07-28 09:14:25 +00:00
parent 84ef01e07a
commit 9b06e79ee7
3 changed files with 134 additions and 55 deletions

View File

@ -24,15 +24,16 @@ object BuildModesForm: TBuildModesForm
ClientWidth = 596
TabOrder = 0
object BuildModesStringGrid: TStringGrid
AnchorSideTop.Control = BuildModeAddSpeedButton
AnchorSideTop.Control = AddSpeedButton
AnchorSideTop.Side = asrBottom
Left = 0
Height = 264
Top = 22
Height = 263
Top = 23
Width = 596
Align = alBottom
Anchors = [akTop, akLeft, akRight, akBottom]
AutoFillColumns = True
BorderSpacing.Top = 1
ColCount = 3
Columns = <
item
@ -66,55 +67,55 @@ object BuildModesForm: TBuildModesForm
198
)
end
object BuildModeAddSpeedButton: TSpeedButton
object AddSpeedButton: TSpeedButton
AnchorSideLeft.Control = BuildModesGroupBox
AnchorSideTop.Control = BuildModesGroupBox
Left = 0
Height = 22
Top = 0
Width = 23
OnClick = BuildModeAddSpeedButtonClick
OnClick = AddSpeedButtonClick
ShowHint = True
ParentShowHint = False
end
object BuildModeDeleteSpeedButton: TSpeedButton
AnchorSideLeft.Control = BuildModeAddSpeedButton
object DeleteSpeedButton: TSpeedButton
AnchorSideLeft.Control = AddSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = BuildModesGroupBox
Left = 23
Height = 22
Top = 0
Width = 23
OnClick = BuildModeDeleteSpeedButtonClick
OnClick = DeleteSpeedButtonClick
ShowHint = True
ParentShowHint = False
end
object BuildModeMoveUpSpeedButton: TSpeedButton
AnchorSideLeft.Control = BuildModeDeleteSpeedButton
object MoveUpSpeedButton: TSpeedButton
AnchorSideLeft.Control = DeleteSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = BuildModesGroupBox
Left = 46
Height = 22
Top = 0
Width = 23
OnClick = BuildModeMoveUpSpeedButtonClick
OnClick = MoveUpSpeedButtonClick
ShowHint = True
ParentShowHint = False
end
object BuildModeMoveDownSpeedButton: TSpeedButton
AnchorSideLeft.Control = BuildModeMoveUpSpeedButton
object MoveDownSpeedButton: TSpeedButton
AnchorSideLeft.Control = MoveUpSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = BuildModesGroupBox
Left = 69
Height = 22
Top = 0
Width = 23
OnClick = BuildModeMoveDownSpeedButtonClick
OnClick = MoveDownSpeedButtonClick
ShowHint = True
ParentShowHint = False
end
object BuildModeDiffSpeedButton: TSpeedButton
AnchorSideLeft.Control = BuildModeMoveDownSpeedButton
object DiffSpeedButton: TSpeedButton
AnchorSideLeft.Control = MoveDownSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = BuildModesGroupBox
Left = 102
@ -122,18 +123,33 @@ object BuildModesForm: TBuildModesForm
Top = 0
Width = 23
BorderSpacing.Left = 10
OnClick = BuildModeDiffSpeedButtonClick
OnClick = DiffSpeedButtonClick
ShowHint = True
ParentShowHint = False
end
object NoteLabel: TLabel
AnchorSideTop.Control = DiffSpeedButton
AnchorSideTop.Side = asrCenter
Left = 160
Height = 15
Top = 3
Top = 4
Width = 63
Caption = 'NoteLabel'
ParentColor = False
end
object btnCreateDefaultModes: TButton
AnchorSideTop.Control = NoteLabel
AnchorSideTop.Side = asrCenter
Left = 362
Height = 25
Top = -1
Width = 228
Anchors = [akTop, akRight]
AutoSize = True
Caption = 'Create Debug and Release modes'
OnClick = btnCreateDefaultModesClick
TabOrder = 1
end
end
object ButtonPanel1: TButtonPanel
Left = 6

View File

@ -32,34 +32,36 @@ interface
uses
Classes, SysUtils, Forms, Controls, Dialogs, StdCtrls, Grids, Buttons, Menus,
ButtonPanel, LCLProc, Graphics, IDEOptionsIntf, IDEDialogs, TransferMacros,
Project, LazarusIDEStrConsts, CompilerOptions, Compiler_ModeMatrix,
BuildModeDiffDlg;
Project, CompOptsIntf, CompilerOptions, Compiler_ModeMatrix,
BuildModeDiffDlg, LazarusIDEStrConsts;
type
{ TBuildModesForm }
TBuildModesForm = class(TForm)
BuildModeAddSpeedButton: TSpeedButton;
BuildModeDeleteSpeedButton: TSpeedButton;
BuildModeDiffSpeedButton: TSpeedButton;
BuildModeMoveDownSpeedButton: TSpeedButton;
BuildModeMoveUpSpeedButton: TSpeedButton;
AddSpeedButton: TSpeedButton;
DeleteSpeedButton: TSpeedButton;
DiffSpeedButton: TSpeedButton;
MoveDownSpeedButton: TSpeedButton;
MoveUpSpeedButton: TSpeedButton;
BuildModesGroupBox: TGroupBox;
BuildModesPopupMenu: TPopupMenu;
BuildModesStringGrid: TStringGrid;
btnCreateDefaultModes: TButton;
ButtonPanel1: TButtonPanel;
NoteLabel: TLabel;
procedure btnCreateDefaultModesClick(Sender: TObject);
procedure BuildModesStringGridDrawCell(Sender: TObject; aCol,
aRow: Integer; aRect: TRect; aState: TGridDrawState);
procedure CancelButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure BuildModeDiffSpeedButtonClick(Sender: TObject);
procedure BuildModeAddSpeedButtonClick(Sender: TObject);
procedure BuildModeDeleteSpeedButtonClick(Sender: TObject);
procedure BuildModeMoveDownSpeedButtonClick(Sender: TObject);
procedure BuildModeMoveUpSpeedButtonClick(Sender: TObject);
procedure DiffSpeedButtonClick(Sender: TObject);
procedure AddSpeedButtonClick(Sender: TObject);
procedure DeleteSpeedButtonClick(Sender: TObject);
procedure MoveDownSpeedButtonClick(Sender: TObject);
procedure MoveUpSpeedButtonClick(Sender: TObject);
procedure BuildModesCheckboxToggled(Sender: TObject;
aCol, aRow: Integer; aState: TCheckboxState);
procedure BuildModesStringGridSelection(Sender: TObject;
@ -103,6 +105,10 @@ procedure UpdateBuildModeCombo(aCombo: TComboBox);
implementation
const
DebugModeName = 'Debug';
ReleaseModeName = 'Release';
{$R *.lfm}
function ShowBuildModesDlg(aShowSession: Boolean): TModalResult;
@ -137,12 +143,11 @@ begin
end;
end;
procedure SwitchBuildMode(aBuildModeID: string;
LoadSaveProjectOptions: boolean);
procedure SwitchBuildMode(aBuildModeID: string; LoadSaveProjectOptions: boolean);
begin
if LoadSaveProjectOptions then
OnSaveIDEOptionsHook(Nil, Project1.CompilerOptions); // Save changes
Project1.ActiveBuildModeID := aBuildModeID; // Switch
Project1.ActiveBuildModeID := aBuildModeID; // Switch
IncreaseBuildMacroChangeStamp;
if LoadSaveProjectOptions then
OnLoadIDEOptionsHook(Nil, Project1.CompilerOptions); // Load options
@ -207,20 +212,74 @@ begin
FillBuildModesGrid;
UpdateBuildModeButtons;
BuildModeAddSpeedButton.LoadGlyphFromLazarusResource('laz_add');
BuildModeDeleteSpeedButton.LoadGlyphFromLazarusResource('laz_delete');
BuildModeMoveUpSpeedButton.LoadGlyphFromLazarusResource('arrow_up');
BuildModeMoveDownSpeedButton.LoadGlyphFromLazarusResource('arrow_down');
BuildModeDiffSpeedButton.LoadGlyphFromLazarusResource('menu_tool_diff');
AddSpeedButton.LoadGlyphFromLazarusResource('laz_add');
DeleteSpeedButton.LoadGlyphFromLazarusResource('laz_delete');
MoveUpSpeedButton.LoadGlyphFromLazarusResource('arrow_up');
MoveDownSpeedButton.LoadGlyphFromLazarusResource('arrow_down');
DiffSpeedButton.LoadGlyphFromLazarusResource('menu_tool_diff');
end;
procedure TBuildModesForm.BuildModeDiffSpeedButtonClick(Sender: TObject);
procedure TBuildModesForm.DiffSpeedButtonClick(Sender: TObject);
begin
// show diff dialog
ShowBuildModeDiffDialog(BuildModes,GetSelectedBuildMode);
end;
procedure TBuildModesForm.BuildModeAddSpeedButtonClick(Sender: TObject);
procedure TBuildModesForm.btnCreateDefaultModesClick(Sender: TObject);
var
CurMode: TProjectBuildMode;
procedure AssignAndSetBooleans(aMode: TProjectBuildMode; IsDebug: Boolean);
begin
if CurMode<>nil then
aMode.Assign(CurMode); // clone from currently selected mode
with aMode.CompilerOptions do
begin
// Smart linking
SmartLinkUnit:=not IsDebug;
LinkSmart:=not IsDebug;
// Checks
IOChecks:=IsDebug;
RangeChecks:=IsDebug;
OverflowChecks:=IsDebug;
StackChecks:=IsDebug;
IncludeAssertionCode:=IsDebug;
// Debug flags
GenerateDebugInfo:=IsDebug;
UseHeaptrc:=IsDebug;
// ToDo: TrashVariables:=IsDebug;
end;
end;
var
DMode, RMode: TProjectBuildMode;
i: Integer;
begin
i:=BuildModesStringGrid.Row-1;
if (i>=0) then
CurMode:=fBuildModes[i]
else
CurMode:=nil;
// Create Debug DMode
DMode:=fBuildModes.Add(DebugModeName);
AssignAndSetBooleans(DMode, True);
DMode.CompilerOptions.OptimizationLevel:=1; // Optimization
DMode.CompilerOptions.DebugInfoType:=dsDwarf2Set; // Debug
// Create Release DMode
RMode:=fBuildModes.Add(ReleaseModeName);
AssignAndSetBooleans(RMode, False);
RMode.CompilerOptions.OptimizationLevel:=3; // Optimization
RMode.CompilerOptions.DebugInfoType:=dsAuto; // Debug
fActiveBuildMode:=DMode; // activate Debug mode
FillBuildModesGrid; // show
// select identifier
BuildModesStringGrid.Col:=fModeNameCol;
BuildModesStringGrid.Row:=BuildModesStringGrid.RowCount-1;
end;
procedure TBuildModesForm.AddSpeedButtonClick(Sender: TObject);
var
i: Integer;
NewName, Identifier: String;
@ -245,7 +304,7 @@ begin
until fBuildModes.Find(NewName)=nil;
// create new mode
NewMode:=fBuildModes.Add(NewName);
// clone
// clone from currently selected mode
if CurMode<>nil then
NewMode.Assign(CurMode);
fActiveBuildMode:=NewMode; // activate
@ -256,7 +315,7 @@ begin
BuildModesStringGrid.EditorMode:=true;
end;
procedure TBuildModesForm.BuildModeDeleteSpeedButtonClick(Sender: TObject);
procedure TBuildModesForm.DeleteSpeedButtonClick(Sender: TObject);
var
i: Integer;
CurMode: TProjectBuildMode;
@ -294,7 +353,7 @@ begin
Grid.Row:=i;
end;
procedure TBuildModesForm.BuildModeMoveDownSpeedButtonClick(Sender: TObject);
procedure TBuildModesForm.MoveDownSpeedButtonClick(Sender: TObject);
var
i: Integer;
begin
@ -307,7 +366,7 @@ begin
BuildModesStringGrid.Row:=i+1;
end;
procedure TBuildModesForm.BuildModeMoveUpSpeedButtonClick(Sender: TObject);
procedure TBuildModesForm.MoveUpSpeedButtonClick(Sender: TObject);
var
i: Integer;
begin
@ -467,15 +526,19 @@ begin
else
Caption:='No project';
// Buttons
BuildModeAddSpeedButton.Hint:=Format(lisAddNewBuildModeCopyingSettingsFrom, [Identifier]);
BuildModeDeleteSpeedButton.Enabled:=(CurMode<>nil) and (fBuildModes.Count>1);
BuildModeDeleteSpeedButton.Hint:=Format(lisDeleteMode, [Identifier]);
BuildModeMoveUpSpeedButton.Enabled:=(CurMode<>nil) and (i>0);
BuildModeMoveUpSpeedButton.Hint:=Format(lisMoveOnePositionUp, [Identifier]);
BuildModeMoveDownSpeedButton.Enabled:=i<BuildModesStringGrid.RowCount-2;
BuildModeMoveDownSpeedButton.Hint:=Format(lisMoveOnePositionDown, [Identifier]);
BuildModeDiffSpeedButton.Hint:=lisShowDifferencesBetweenModes;
AddSpeedButton.Hint:=Format(lisAddNewBuildModeCopyingSettingsFrom, [Identifier]);
DeleteSpeedButton.Enabled:=(CurMode<>nil) and (fBuildModes.Count>1);
DeleteSpeedButton.Hint:=Format(lisDeleteMode, [Identifier]);
MoveUpSpeedButton.Enabled:=(CurMode<>nil) and (i>0);
MoveUpSpeedButton.Hint:=Format(lisMoveOnePositionUp, [Identifier]);
MoveDownSpeedButton.Enabled:=i<BuildModesStringGrid.RowCount-2;
MoveDownSpeedButton.Hint:=Format(lisMoveOnePositionDown, [Identifier]);
DiffSpeedButton.Hint:=lisShowDifferencesBetweenModes;
NoteLabel.Caption:='';
btnCreateDefaultModes.Caption:='Create Debug and Release modes';
btnCreateDefaultModes.Hint:='';
btnCreateDefaultModes.Enabled := (fBuildModes.Find(DebugModeName)=Nil)
and (fBuildModes.Find(ReleaseModeName)=Nil);
end;
procedure TBuildModesForm.SetShowSession(const AValue: boolean);

View File

@ -105,12 +105,12 @@ begin
end;
grpLinking.Enabled := NeedsLinkerOpts;
chkLinkSmart.Checked := LinkSmart;
//chkLinkSmart.Enabled := NeedsLinkerOpts;
chkLinkSmart.Enabled := NeedsLinkerOpts;
chkWin32GraphicApp.Checked := Win32GraphicApp;
//chkWin32GraphicApp.Enabled := NeedsLinkerOpts;
chkWin32GraphicApp.Enabled := NeedsLinkerOpts;
chkOptionsLinkOpt.Checked := PassLinkerOptions;
chkOptionsLinkOpt.Enabled := NeedsLinkerOpts;
edtOptionsLinkOpt.Text := LinkerOptions;
//chkOptionsLinkOpt.Enabled := NeedsLinkerOpts;
end;
end;