diff --git a/ide/buildmodesmanager.lfm b/ide/buildmodesmanager.lfm index d72faadf80..508285f369 100644 --- a/ide/buildmodesmanager.lfm +++ b/ide/buildmodesmanager.lfm @@ -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 diff --git a/ide/buildmodesmanager.pas b/ide/buildmodesmanager.pas index 7db914b511..2578ca928d 100644 --- a/ide/buildmodesmanager.pas +++ b/ide/buildmodesmanager.pas @@ -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:=inil) and (fBuildModes.Count>1); + DeleteSpeedButton.Hint:=Format(lisDeleteMode, [Identifier]); + MoveUpSpeedButton.Enabled:=(CurMode<>nil) and (i>0); + MoveUpSpeedButton.Hint:=Format(lisMoveOnePositionUp, [Identifier]); + MoveDownSpeedButton.Enabled:=i