From 4d49e9606d54549790c710ffbea10de5cfa566ad Mon Sep 17 00:00:00 2001 From: juha Date: Thu, 2 Jul 2015 18:50:22 +0000 Subject: [PATCH] IDE: refactor, move methods from MainIDE to MainIDEBar. git-svn-id: trunk@49485 - --- ide/main.pp | 125 +++++------------------------------------------- ide/mainbar.pas | 117 +++++++++++++++++++++++++++++++++++++++----- 2 files changed, 116 insertions(+), 126 deletions(-) diff --git a/ide/main.pp b/ide/main.pp index 2295e35bac..8a8b47f829 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -393,7 +393,6 @@ type procedure ToolBarOptionsClick(Sender: TObject); private fBuilder: TLazarusBuilder; - procedure AllowCompilation(aAllow: Boolean); function DoBuildLazarusSub(Flags: TBuildLazarusFlags): TModalResult; public // Global IDE events @@ -668,9 +667,7 @@ type procedure SetupHelpMenu; override; procedure LoadMenuShortCuts; override; procedure ConnectMainBarEvents; - procedure SetupSpeedButtons; procedure SetupDialogs; - procedure SetupComponentPalette; procedure SetupHints; procedure SetupObjectInspector; procedure SetupFormEditor; @@ -931,8 +928,6 @@ type procedure ShowDesignerForm(AForm: TCustomForm); procedure DoViewAnchorEditor(State: TIWGetFormState = iwgfShowOnTop); procedure DoViewTabOrderEditor(State: TIWGetFormState = iwgfShowOnTop); - procedure DoToggleViewComponentPalette; - procedure DoToggleViewIDESpeedButtons; // editor and environment options procedure SaveEnvironment(Immediately: boolean = false); override; @@ -1479,8 +1474,13 @@ begin try SetupStandardIDEMenuItems; SetupMainMenu; - SetupSpeedButtons; - SetupComponentPalette; + // ToDo: Move more stuff to MainBar + MainIDEBar.SetupSpeedButtons(OwningComponent); + MainIDEBar.OptionsMenuItem.OnClick := @ToolBarOptionsClick; + MainIDEBar.OpenFilePopupMenu.OnPopup := @OpenFilePopupMenuPopup; + MainIDEBar.SetBuildModePopupMenu.OnPopup := @SetBuildModePopupMenuPopup; + + MainIDEBar.SetupComponentPalette(OwningComponent); ConnectMainBarEvents; finally MainIDEBar.EnableAutoSizing{$IFDEF DebugDisableAutoSizing}('TMainIDE.Create'){$ENDIF}; @@ -2001,37 +2001,6 @@ begin end; {------------------------------------------------------------------------------} -procedure TMainIDE.SetupSpeedButtons; -begin - MainIDEBar.MainSplitter := TSplitter.Create(OwningComponent); - MainIDEBar.MainSplitter.Parent := MainIDEBar; - MainIDEBar.MainSplitter.Align := alLeft; - MainIDEBar.MainSplitter.MinSize := 50; - MainIDEBar.MainSplitter.OnMoved := @MainIDEBar.MainSplitterMoved; - - - MainIDEBar.CoolBar := TCoolBar.Create(OwningComponent); - MainIDEBar.CoolBar.Parent := MainIDEBar; - if EnvironmentOptions.Desktop.ComponentPaletteVisible then - begin - MainIDEBar.CoolBar.Align := alLeft; - MainIDEBar.CoolBar.Width := EnvironmentOptions.Desktop.IDECoolBarOptions.IDECoolBarWidth; - end - else - MainIDEBar.CoolBar.Align := alClient; - - // IDE Coolbar object wraps MainIDEBar.CoolBar. - IDECoolBar := TIDECoolBar.Create(MainIDEBar.CoolBar); - IDECoolBar.IsVisible := EnvironmentOptions.Desktop.IDECoolBarOptions.IDECoolBarVisible;; - MainIDEBar.CoolBar.OnChange := @MainIDEBar.CoolBarOnChange; - - MainIDEBar.CreatePopupMenus(OwningComponent); - MainIDEBar.OptionsMenuItem.OnClick := @ToolBarOptionsClick; - MainIDEBar.CoolBar.PopupMenu := MainIDEBar.OptionsPopupMenu; - MainIDEBar.OpenFilePopupMenu.OnPopup := @OpenFilePopupMenuPopup; - MainIDEBar.SetBuildModePopupMenu.OnPopup := @SetBuildModePopupMenuPopup; -end; - procedure TMainIDE.SetupDialogs; begin LazIDESelectDirectory:=@OnSelectDirectory; @@ -2043,18 +2012,6 @@ begin CheckCompOptsAndMainSrcForNewUnitEvent:=@OnCheckCompOptsAndMainSrcForNewUnit; end; -procedure TMainIDE.SetupComponentPalette; -begin - // Component palette - MainIDEBar.ComponentPageControl := TPageControl.Create(OwningComponent); - with MainIDEBar.ComponentPageControl do begin - Name := 'ComponentPageControl'; - Align := alClient; - Visible:=EnvironmentOptions.Desktop.ComponentPaletteVisible; - Parent := MainIDEBar; - end; -end; - procedure TMainIDE.SetupHints; var CurShowHint: boolean; @@ -2804,12 +2761,12 @@ end; procedure TMainIDE.mnuViewComponentPaletteClicked(Sender: TObject); begin - DoToggleViewComponentPalette; + MainIDEBar.DoToggleViewComponentPalette; end; procedure TMainIDE.mnuViewIDESpeedButtonsClicked(Sender: TObject); begin - DoToggleViewIDESpeedButtons; + MainIDEBar.DoToggleViewIDESpeedButtons; end; procedure TMainIDE.mnuViewFPCInfoClicked(Sender: TObject); @@ -3694,73 +3651,13 @@ begin IDEWindowCreators.ShowForm(TabOrderDialog,State=iwgfShowOnTop); end; -procedure TMainIDE.DoToggleViewComponentPalette; -var - ComponentPaletteVisible: Boolean; -begin - ComponentPaletteVisible:=not MainIDEBar.ComponentPageControl.Visible; - MainIDEBar.itmViewComponentPalette.Checked:=ComponentPaletteVisible; - MainIDEBar.ComponentPageControl.Visible:=ComponentPaletteVisible; - EnvironmentOptions.Desktop.ComponentPaletteVisible:=ComponentPaletteVisible; - if ComponentPaletteVisible then - begin - if MainIDEBar.CoolBar.Align = alClient then - begin - MainIDEBar.CoolBar.Width := 230; - EnvironmentOptions.Desktop.IDECoolBarOptions.IDECoolBarWidth := 230; - end; - MainIDEBar.CoolBar.Align := alLeft; - MainIDEBar.CoolBar.Vertical := False; - MainIDEBar.MainSplitter.Align := alLeft; - end - else - MainIDEBar.CoolBar.Align := alClient; - MainIDEBar.MainSplitter.Visible := MainIDEBar.Coolbar.Visible and - MainIDEBar.ComponentPageControl.Visible; - - if ComponentPaletteVisible then//when showing component palette, it must be visible to calculate it correctly - MainIDEBar.DoSetMainIDEHeight(MainIDEBar.WindowState = wsMaximized, 55);//it will cause the IDE to flicker, but it's better than to have wrongly calculated IDE height - MainIDEBar.SetMainIDEHeight; -end; - -procedure TMainIDE.DoToggleViewIDESpeedButtons; -var - SpeedButtonsVisible: boolean; -begin - SpeedButtonsVisible := not MainIDEBar.CoolBar.Visible; - MainIDEBar.itmViewIDESpeedButtons.Checked := SpeedButtonsVisible; - MainIDEBar.CoolBar.Visible := SpeedButtonsVisible; - MainIDEBar.MainSplitter.Visible := SpeedButtonsVisible; - EnvironmentOptions.Desktop.IDECoolBarOptions.IDECoolBarVisible := SpeedButtonsVisible; - MainIDEBar.MainSplitter.Visible := MainIDEBar.Coolbar.Visible and - MainIDEBar.ComponentPageControl.Visible; - MainIDEBar.SetMainIDEHeight; -end; - -procedure TMainIDE.AllowCompilation(aAllow: Boolean); -// Enables or disables IDE GUI controls associated with compiling and building. -// Does it interfere with DebugBoss.UpdateButtonsAndMenuItems? Maybe should be refactored and combined. -begin - if MainIDEBar=Nil then Exit; - with MainIDEBar do begin - itmRunMenuRun.Enabled:=aAllow; - itmRunMenuCompile.Enabled:=aAllow; - itmRunMenuBuild.Enabled:=aAllow; - itmRunMenuQuickCompile.Enabled:=aAllow; - itmRunMenuCleanUpAndBuild.Enabled:=aAllow; - itmPkgEditInstallPkgs.Enabled:=aAllow; - itmToolRescanFPCSrcDir.Enabled:=aAllow; - itmToolBuildLazarus.Enabled:=aAllow; - //itmToolConfigureBuildLazarus.Enabled:=aAllow; - end; -end; - procedure TMainIDE.SetToolStatus(const AValue: TIDEToolStatus); begin inherited SetToolStatus(AValue); if DebugBoss <> nil then DebugBoss.UpdateButtonsAndMenuItems; - AllowCompilation(ToolStatus <> itBuilder); // Disable some GUI controls while compiling. + if Assigned(MainIDEBar) then + MainIDEBar.AllowCompilation(ToolStatus <> itBuilder); // Disable some GUI controls while compiling. if FWaitForClose and (ToolStatus = itNone) then begin FWaitForClose := False; diff --git a/ide/mainbar.pas b/ide/mainbar.pas index 6ae04e668a..c3611e5f44 100644 --- a/ide/mainbar.pas +++ b/ide/mainbar.pas @@ -372,6 +372,7 @@ type private FOldWindowState: TWindowState; FOnActive: TNotifyEvent; + procedure CreatePopupMenus(TheOwner: TComponent); procedure NewUnitFormDefaultClick(Sender: TObject); procedure NewUnitFormPopupMenuPopup(Sender: TObject); function CalcMainIDEHeight: Integer; @@ -384,14 +385,18 @@ type procedure Resizing(State: TWindowState); override; public constructor Create(TheOwner: TComponent); override; + procedure SetupSpeedButtons(TheOwner: TComponent); + procedure SetupComponentPalette(TheOwner: TComponent); procedure HideIDE; procedure UnhideIDE; - procedure CreatePopupMenus(TheOwner: TComponent); property OnActive: TNotifyEvent read FOnActive write FOnActive; procedure UpdateDockCaption({%H-}Exclude: TControl); override; procedure RefreshCoolbar; procedure SetMainIDEHeight; procedure DoSetMainIDEHeight(const AIDEIsMaximized: Boolean; ANewHeight: Integer = 0); + procedure DoToggleViewComponentPalette; + procedure DoToggleViewIDESpeedButtons; + procedure AllowCompilation(aAllow: Boolean); end; var @@ -616,7 +621,7 @@ end; procedure TMainIDEBar.CreatePopupMenus(TheOwner: TComponent); begin - // create the popupmenu for the MainIDEBar.OpenFileArrowSpeedBtn + // create the popupmenu for the OpenFileArrowSpeedBtn OpenFilePopUpMenu := TPopupMenu.Create(TheOwner); OpenFilePopupMenu.Name:='OpenFilePopupMenu'; @@ -635,15 +640,48 @@ begin OptionsPopupMenu := TPopupMenu.Create(TheOwner); OptionsPopupMenu.Images := IDEImages.Images_16; OptionsMenuItem := TMenuItem.Create(TheOwner); - with MainIDEBar.OptionsMenuItem do + OptionsMenuItem.Name := 'miToolbarOption'; + OptionsMenuItem.Caption := lisOptions; + OptionsMenuItem.Enabled := True; + OptionsMenuItem.Visible := True; + OptionsMenuItem.ImageIndex := IDEImages.LoadImage(16, 'menu_environment_options'); + OptionsPopupMenu.Items.Add(OptionsMenuItem); +end; + +procedure TMainIDEBar.SetupSpeedButtons(TheOwner: TComponent); +begin + MainSplitter := TSplitter.Create(TheOwner); + MainSplitter.Parent := Self; + MainSplitter.Align := alLeft; + MainSplitter.MinSize := 50; + MainSplitter.OnMoved := @MainSplitterMoved; + + CoolBar := TCoolBar.Create(TheOwner); + CoolBar.Parent := Self; + if EnvironmentOptions.Desktop.ComponentPaletteVisible then begin - Name := 'miToolbarOption'; - Caption := lisOptions; - Enabled := True; - Visible := True; - ImageIndex := IDEImages.LoadImage(16, 'menu_environment_options'); - end; - MainIDEBar.OptionsPopupMenu.Items.Add(MainIDEBar.OptionsMenuItem); + CoolBar.Align := alLeft; + CoolBar.Width := EnvironmentOptions.Desktop.IDECoolBarOptions.IDECoolBarWidth; + end + else + CoolBar.Align := alClient; + + // IDE Coolbar object wraps CoolBar. + IDECoolBar := TIDECoolBar.Create(CoolBar); + IDECoolBar.IsVisible := EnvironmentOptions.Desktop.IDECoolBarOptions.IDECoolBarVisible;; + CoolBar.OnChange := @CoolBarOnChange; + CreatePopupMenus(TheOwner); + CoolBar.PopupMenu := OptionsPopupMenu; +end; + +procedure TMainIDEBar.SetupComponentPalette(TheOwner: TComponent); +begin + // Component palette + ComponentPageControl := TPageControl.Create(TheOwner); + ComponentPageControl.Name := 'ComponentPageControl'; + ComponentPageControl.Align := alClient; + ComponentPageControl.Visible:=EnvironmentOptions.Desktop.ComponentPaletteVisible; + ComponentPageControl.Parent := Self; end; procedure TMainIDEBar.RefreshCoolbar; @@ -683,8 +721,7 @@ begin CoolBar.Visible := CoolBarOpts.IDECoolBarVisible; itmViewIDESpeedButtons.Checked := CoolBar.Visible; MainSplitter.Align := alLeft; - MainSplitter.Visible := MainIDEBar.Coolbar.Visible and - MainIDEBar.ComponentPageControl.Visible; + MainSplitter.Visible := Coolbar.Visible and ComponentPageControl.Visible; end; procedure TMainIDEBar.Resizing(State: TWindowState); @@ -774,5 +811,61 @@ begin DoSetMainIDEHeight(WindowState = wsMaximized); end; +procedure TMainIDEBar.DoToggleViewComponentPalette; +var + ComponentPaletteVisible: Boolean; +begin + ComponentPaletteVisible:=not ComponentPageControl.Visible; + itmViewComponentPalette.Checked:=ComponentPaletteVisible; + ComponentPageControl.Visible:=ComponentPaletteVisible; + EnvironmentOptions.Desktop.ComponentPaletteVisible:=ComponentPaletteVisible; + if ComponentPaletteVisible then + begin + if CoolBar.Align = alClient then + begin + CoolBar.Width := 230; + EnvironmentOptions.Desktop.IDECoolBarOptions.IDECoolBarWidth := 230; + end; + CoolBar.Align := alLeft; + CoolBar.Vertical := False; + MainSplitter.Align := alLeft; + end + else + CoolBar.Align := alClient; + MainSplitter.Visible := Coolbar.Visible and ComponentPageControl.Visible; + + if ComponentPaletteVisible then//when showing component palette, it must be visible to calculate it correctly + DoSetMainIDEHeight(WindowState = wsMaximized, 55);//it will cause the IDE to flicker, but it's better than to have wrongly calculated IDE height + SetMainIDEHeight; +end; + +procedure TMainIDEBar.DoToggleViewIDESpeedButtons; +var + SpeedButtonsVisible: boolean; +begin + SpeedButtonsVisible := not CoolBar.Visible; + itmViewIDESpeedButtons.Checked := SpeedButtonsVisible; + CoolBar.Visible := SpeedButtonsVisible; + MainSplitter.Visible := SpeedButtonsVisible; + EnvironmentOptions.Desktop.IDECoolBarOptions.IDECoolBarVisible := SpeedButtonsVisible; + MainSplitter.Visible := Coolbar.Visible and ComponentPageControl.Visible; + SetMainIDEHeight; +end; + +procedure TMainIDEBar.AllowCompilation(aAllow: Boolean); +// Enables or disables IDE GUI controls associated with compiling and building. +// Does it interfere with DebugBoss.UpdateButtonsAndMenuItems? Maybe should be refactored and combined. +begin + itmRunMenuRun.Enabled:=aAllow; + itmRunMenuCompile.Enabled:=aAllow; + itmRunMenuBuild.Enabled:=aAllow; + itmRunMenuQuickCompile.Enabled:=aAllow; + itmRunMenuCleanUpAndBuild.Enabled:=aAllow; + itmPkgEditInstallPkgs.Enabled:=aAllow; + itmToolRescanFPCSrcDir.Enabled:=aAllow; + itmToolBuildLazarus.Enabled:=aAllow; + //itmToolConfigureBuildLazarus.Enabled:=aAllow; +end; + end.