From c3eb6e2b303c78c8d89c06c20d92668775594218 Mon Sep 17 00:00:00 2001 From: paul Date: Thu, 4 Jun 2009 07:16:53 +0000 Subject: [PATCH] ide: MainBar: - use ToolBars instead of SpeedButtons - add stop button (issue #0001788 by Leslie Kaye) git-svn-id: trunk@20394 - --- ide/debugmanager.pas | 3 +- ide/lazarusidestrconsts.pas | 1 + ide/main.pp | 159 ++++++++++++++++++------------------ ide/mainbar.pas | 35 ++++---- 4 files changed, 104 insertions(+), 94 deletions(-) diff --git a/ide/debugmanager.pas b/ide/debugmanager.pas index e7197288ab..fd0d6eeebb 100644 --- a/ide/debugmanager.pas +++ b/ide/debugmanager.pas @@ -1928,7 +1928,8 @@ begin itmRunMenuRunToCursor.Enabled := DebuggerInvalid or (dcRunTo in FDebugger.Commands); - itmRunMenuStop.Enabled := (FDebugger<>nil); // always allow to stop + itmRunMenuStop.Enabled := not DebuggerInvalid; + StopSpeedButton.Enabled := itmRunMenuStop.Enabled; itmRunMenuEvaluate.Enabled := (not DebuggerInvalid) and (dcEvaluate in FDebugger.Commands); diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index c1a464b610..fbb4ceb6fc 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -793,6 +793,7 @@ resourcestring lisHintViewForms = 'View Forms'; lisHintRun = 'Run'; lisHintPause = 'Pause'; + lisHintStop = 'Stop'; lisHintStepInto = 'Step Into'; lisHintStepOver = 'Step Over'; diff --git a/ide/main.pp b/ide/main.pp index bb2ace48ac..58bb9ccfe2 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -73,7 +73,7 @@ uses // fpc packages Math, Classes, SysUtils, Process, AsyncProcess, TypInfo, // lcl - LCLProc, LCLMemManager, LCLType, LCLIntf, LConvEncoding, LMessages, + LCLProc, LCLMemManager, LCLType, LCLIntf, LConvEncoding, LMessages, ComCtrls, LResources, StdCtrls, Forms, Buttons, Menus, FileUtil, Controls, GraphType, HelpIntfs, Graphics, ExtCtrls, Dialogs, InterfaceBase, LDockCtrl, UTF8Process, // codetools @@ -330,7 +330,7 @@ type // help menu // see helpmanager.pas - procedure OpenFileDownArrowClicked(Sender: TObject); + procedure OpenFilePopupMenuPopup(Sender: TObject); procedure mnuOpenFilePopupClick(Sender: TObject); public // Global IDE events @@ -1621,75 +1621,81 @@ type procedure TMainIDE.SetupSpeedButtons; - function CreateButton(const AName, APixName: String; ANumGlyphs: Integer; - var ALeft, ATop: Integer; const AMoveFlags: TMoveFlags; - const AOnClick: TNotifyEvent; const AHint: String): TSpeedButton; + function CreateButton(AToolBar: TToolBar; const AName, APixName: String; + const AOnClick: TNotifyEvent; const AHint: String): TToolButton; begin - Result := TSpeedButton.Create(OwningComponent); + Result := TToolButton.Create(OwningComponent); with Result do begin Name := AName; - Parent := MainIDEBar.pnlSpeedButtons; + Parent := AToolBar; Enabled := True; - Top := ATop; - Left := ALeft; OnClick := AOnClick; - LoadGlyphFromLazarusResource(APixName); - NumGlyphs := ANumGlyphs; - Flat := True; - //Transparent:=true; - if mfTop in AMoveFlags then Inc(ATop, Height); - if mfLeft in AMoveFlags then Inc(ALeft, Width); + ImageIndex := IDEImages.LoadImage(16, APixName); Hint := AHint; end; end; -var - ButtonTop, ButtonLeft, n: Integer; -begin - MainIDEBar.pnlSpeedButtons := TPanel.Create(OwningComponent); - with MainIDEBar.pnlSpeedButtons do begin - Name := 'pnlSpeedButtons'; - Parent:= MainIDEBar; - Align := alLeft; - Caption:= ''; - BevelWidth:=1; - BevelOuter:=bvRaised; - Visible:=EnvironmentOptions.IDESpeedButtonsVisible; + function CreateDivider(AToolBar: TToolBar): TToolButton; + begin + Result := TToolButton.Create(OwningComponent); + with Result do + begin + Style := tbsDivider; + Width := 3; + Parent := AToolBar; + end; end; + function CreateToolBar(AName: String): TToolBar; + begin + Result := TToolBar.Create(OwningComponent); + Result.Name := AName; + Result.Parent := MainIDEBar.pnlSpeedButtons; + Result.Images := IDEImages.Images_16; + end; - ButtonTop := 2; - ButtonLeft := 2; - MainIDEBar.NewUnitSpeedBtn := CreateButton('NewUnitSpeedBtn' , 'item_unit' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuNewUnitClicked, lisMenuNewUnit); +begin + MainIDEBar.pnlSpeedButtons := TPanel.Create(OwningComponent); + with MainIDEBar.pnlSpeedButtons do + begin + Name := 'pnlSpeedButtons'; + Parent := MainIDEBar; + Align := alLeft; + Caption := ''; + BevelOuter := bvNone; + Visible := EnvironmentOptions.IDESpeedButtonsVisible; + end; - MainIDEBar.OpenFileSpeedBtn := CreateButton('OpenFileSpeedBtn' , 'laz_open' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuOpenClicked, lisHintOpen); + MainIDEBar.tbStandard := CreateToolBar('tbStandard'); + MainIDEBar.tbViewDebug := CreateToolBar('tbViewDebug'); - // store left - n := ButtonLeft; - MainIDEBar.OpenFileArrowSpeedBtn := CreateButton('OpenFileArrowSpeedBtn', 'btn_downarrow' , 1, ButtonLeft, ButtonTop, [mfLeft], @OpenFileDownArrowClicked, ''); - MainIDEBar.OpenFileArrowSpeedBtn.Width := 12; - ButtonLeft := n+12+1; + MainIDEBar.NewUnitSpeedBtn := CreateButton(MainIDEBar.tbStandard , 'NewUnitSpeedBtn' , 'item_unit' , @mnuNewUnitClicked, lisMenuNewUnit); + MainIDEBar.tbDivider1 := CreateDivider(MainIDEBar.tbStandard); + MainIDEBar.OpenFileSpeedBtn := CreateButton(MainIDEBar.tbStandard , 'OpenFileSpeedBtn' , 'laz_open' , @mnuOpenClicked, lisHintOpen); + MainIDEBar.SaveSpeedBtn := CreateButton(MainIDEBar.tbStandard , 'SaveSpeedBtn' , 'laz_save' , @mnuSaveClicked, lisHintSave); + MainIDEBar.SaveAllSpeedBtn := CreateButton(MainIDEBar.tbStandard , 'SaveAllSpeedBtn' , 'menu_save_all' , @mnuSaveAllClicked, lisHintSaveAll); + MainIDEBar.tbDivider2 := CreateDivider(MainIDEBar.tbStandard); + MainIDEBar.NewFormSpeedBtn := CreateButton(MainIDEBar.tbStandard , 'NewFormSpeedBtn' , 'item_form' , @mnuNewFormClicked, lisMenuNewForm); + MainIDEBar.ToggleFormSpeedBtn := CreateButton(MainIDEBar.tbStandard , 'ToggleFormSpeedBtn' , 'menu_view_toggle_form_unit', @mnuToggleFormUnitCLicked, lisHintToggleFormUnit); - MainIDEBar.SaveSpeedBtn := CreateButton('SaveSpeedBtn' , 'laz_save' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuSaveClicked, lisHintSave); - MainIDEBar.SaveAllSpeedBtn := CreateButton('SaveAllSpeedBtn' , 'menu_save_all', 1, ButtonLeft, ButtonTop, [mfLeft], @mnuSaveAllClicked, lisHintSaveAll); - MainIDEBar.NewFormSpeedBtn := CreateButton('NewFormSpeedBtn' , 'item_form' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuNewFormClicked, lisMenuNewForm); - MainIDEBar.ToggleFormSpeedBtn := CreateButton('ToggleFormSpeedBtn' , 'menu_view_toggle_form_unit' , 1, ButtonLeft, ButtonTop, [mfLeft, mfTop], @mnuToggleFormUnitCLicked, lisHintToggleFormUnit); - - // new row - ButtonLeft := 2; - MainIDEBar.ViewUnitsSpeedBtn := CreateButton('ViewUnitsSpeedBtn' , 'menu_view_units' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuViewUnitsClicked, lisHintViewUnits); - MainIDEBar.ViewFormsSpeedBtn := CreateButton('ViewFormsSpeedBtn' , 'menu_view_forms' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuViewFormsClicked, lisHintViewForms); - inc(ButtonLeft,13); - MainIDEBar.RunSpeedButton := CreateButton('RunSpeedButton' , 'menu_run' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuRunProjectClicked, lisHintRun); - MainIDEBar.PauseSpeedButton := CreateButton('PauseSpeedButton' , 'menu_pause' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuPauseProjectClicked, lisHintPause); - MainIDEBar.PauseSpeedButton.Enabled:=false; - MainIDEBar.StepIntoSpeedButton := CreateButton('StepIntoSpeedButton' , 'menu_stepinto' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuStepIntoProjectClicked, lisHintStepInto); - MainIDEBar.StepOverSpeedButton := CreateButton('StepOverpeedButton' , 'menu_stepover' , 1, ButtonLeft, ButtonTop, [mfLeft, mfTop], @mnuStepOverProjectClicked, lisHintStepOver); - - MainIDEBar.pnlSpeedButtons.Width := ButtonLeft+3; + MainIDEBar.ViewUnitsSpeedBtn := CreateButton(MainIDEBar.tbViewDebug, 'ViewUnitsSpeedBtn' , 'menu_view_units' , @mnuViewUnitsClicked, lisHintViewUnits); + MainIDEBar.ViewFormsSpeedBtn := CreateButton(MainIDEBar.tbViewDebug, 'ViewFormsSpeedBtn' , 'menu_view_forms' , @mnuViewFormsClicked, lisHintViewForms); + MainIDEBar.tbDivider3 := CreateDivider(MainIDEBar.tbViewDebug); + MainIDEBar.RunSpeedButton := CreateButton(MainIDEBar.tbViewDebug, 'RunSpeedButton' , 'menu_run' , @mnuRunProjectClicked, lisHintRun); + MainIDEBar.PauseSpeedButton := CreateButton(MainIDEBar.tbViewDebug, 'PauseSpeedButton' , 'menu_pause' , @mnuPauseProjectClicked, lisHintPause); + MainIDEBar.StopSpeedButton := CreateButton(MainIDEBar.tbViewDebug, 'StopSpeedButton' , 'menu_stop' , @mnuStopProjectClicked, lisHintStop); + MainIDEBar.StepIntoSpeedButton := CreateButton(MainIDEBar.tbViewDebug, 'StepIntoSpeedButton', 'menu_stepinto' , @mnuStepIntoProjectClicked, lisHintStepInto); + MainIDEBar.StepOverSpeedButton := CreateButton(MainIDEBar.tbViewDebug, 'StepOverpeedButton' , 'menu_stepover' , @mnuStepOverProjectClicked, lisHintStepOver); MainIDEBar.CreatePopupMenus(OwningComponent); + + MainIDEBar.OpenFileSpeedBtn.Style := tbsDropDown; + MainIDEBar.OpenFileSpeedBtn.DropDownMenu := MainIDEBar.OpenFilePopUpMenu; + MainIDEBar.OpenFilePopupMenu.OnPopup := @OpenFilePopupMenuPopup; + + MainIDEBar.PauseSpeedButton.Enabled := False; + MainIDEBar.StopSpeedButton.Enabled := False; end; procedure TMainIDE.SetupDialogs; @@ -2326,11 +2332,12 @@ begin itmRunMenuQuickCompile.OnClick := @mnuQuickCompileProjectClicked; itmRunMenuAbortBuild.OnClick := @mnuAbortBuildProjectClicked; itmRunMenuRun.OnClick := @mnuRunProjectClicked; - itmRunMenuPause.Enabled := false; + itmRunMenuPause.Enabled := False; itmRunMenuPause.OnClick := @mnuPauseProjectClicked; itmRunMenuStepInto.OnClick := @mnuStepIntoProjectClicked; itmRunMenuStepOver.OnClick := @mnuStepOverProjectClicked; itmRunMenuRunToCursor.OnClick := @mnuRunToCursorProjectClicked; + itmRunMenuStop.Enabled := False; itmRunMenuStop.OnClick := @mnuStopProjectClicked; itmRunMenuRunParameters.OnClick := @mnuRunParametersClicked; itmRunMenuBuildFile.OnClick := @mnuBuildFileClicked; @@ -3019,33 +3026,35 @@ end; {------------------------------------------------------------------------------} -procedure TMainIDE.OpenFileDownArrowClicked(Sender: TObject); +procedure TMainIDE.OpenFilePopupMenuPopup(Sender: TObject); var CurIndex: integer; - PopupPos: TPoint; OpenMenuItem: TPopupMenu; procedure AddFile(const Filename: string); var AMenuItem: TMenuItem; begin - if MainIDEBar.OpenFilePopupMenu.Items.Count>CurIndex then - AMenuItem:=MainIDEBar.OpenFilePopupMenu.Items[CurIndex] - else begin - AMenuItem:=TMenuItem.Create(OwningComponent); - AMenuItem.Name:=MainIDEBar.OpenFilePopupMenu.Name+'Recent'+IntToStr(CurIndex); - AMenuItem.OnClick:=@mnuOpenFilePopupClick; + if MainIDEBar.OpenFilePopupMenu.Items.Count > CurIndex then + AMenuItem := MainIDEBar.OpenFilePopupMenu.Items[CurIndex] + else + begin + AMenuItem := TMenuItem.Create(OwningComponent); + AMenuItem.Name := MainIDEBar.OpenFilePopupMenu.Name + 'Recent' + IntToStr(CurIndex); + AMenuItem.OnClick := @mnuOpenFilePopupClick; MainIDEBar.OpenFilePopupMenu.Items.Add(AMenuItem); end; - AMenuItem.Caption:=Filename; + AMenuItem.Caption := Filename; inc(CurIndex); end; procedure AddFiles(List: TStringList; MaxCount: integer); - var i: integer; + var + i: integer; begin - i:=0; - while (iCurIndex do - OpenMenuItem.Items[OpenMenuItem.Items.Count-1].Free; - // calculate screen position to show menu - PopupPos := MainIDEBar.OpenFileSpeedBtn.ClientToScreen( - Point(0, MainIDEBar.OpenFileSpeedBtn.Height)); - // display the PopupMenu - if OpenMenuItem.Items.Count > 0 then - OpenMenuItem.Popup(PopupPos.X, PopupPos.Y); + while OpenMenuItem.Items.Count > CurIndex do + OpenMenuItem.Items[OpenMenuItem.Items.Count - 1].Free; end; procedure TMainIDE.mnuOpenFilePopupClick(Sender: TObject); diff --git a/ide/mainbar.pas b/ide/mainbar.pas index 1f3f47fb00..8e1f76590e 100644 --- a/ide/mainbar.pas +++ b/ide/mainbar.pas @@ -52,20 +52,26 @@ type // the speedbuttons panel for frequently used IDE functions pnlSpeedButtons : TPanel; - ViewUnitsSpeedBtn : TSpeedButton; - ViewFormsSpeedBtn : TSpeedButton; - NewUnitSpeedBtn : TSpeedButton; - OpenFileSpeedBtn : TSpeedButton; - OpenFileArrowSpeedBtn: TSpeedButton; - OpenFilePopUpMenu : TPopupMenu; - SaveSpeedBtn : TSpeedButton; - SaveAllSpeedBtn : TSpeedButton; - ToggleFormSpeedBtn : TSpeedButton; - NewFormSpeedBtn : TSpeedButton; - RunSpeedButton : TSpeedButton; - PauseSpeedButton : TSpeedButton; - StepIntoSpeedButton : TSpeedButton; - StepOverSpeedButton : TSpeedButton; + tbStandard : TToolBar; + NewUnitSpeedBtn : TToolButton; + tbDivider1 : TToolButton; + OpenFileSpeedBtn : TToolButton; + OpenFilePopUpMenu : TPopupMenu; + SaveSpeedBtn : TToolButton; + SaveAllSpeedBtn : TToolButton; + tbDivider2 : TToolButton; + ToggleFormSpeedBtn : TToolButton; + NewFormSpeedBtn : TToolButton; + tbViewDebug : TToolBar; + ViewUnitsSpeedBtn : TToolButton; + ViewFormsSpeedBtn : TToolButton; + tbDivider3 : TToolButton; + RunSpeedButton : TToolButton; + PauseSpeedButton : TToolButton; + StopSpeedButton : TToolButton; + StepIntoSpeedButton : TToolButton; + StepOverSpeedButton : TToolButton; + NewUnitFormPopupMenu : TPopupMenu; NewUFSetDefaultMenuItem: TMenuItem; @@ -442,7 +448,6 @@ begin // create the popupmenu for the MainIDEBar.OpenFileArrowSpeedBtn OpenFilePopUpMenu := TPopupMenu.Create(TheOwner); OpenFilePopupMenu.Name:='OpenFilePopupMenu'; - OpenFilePopupMenu.AutoPopup := False; NewUnitFormPopupMenu:=TPopupMenu.Create(TheOwner); NewUnitFormPopupMenu.Name:='NewUnitFormPopupMenu';