Browse Source

Implemented hiding of main menu and toolbar in fullscreen

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@453 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
cb8ee9af07
  1. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  2. 161
      src/Main/Base/Project/Src/Gui/Components/AutoHide/AutoHideMenuStripContainer.cs
  3. 5
      src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs
  4. 50
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -690,6 +690,7 @@ @@ -690,6 +690,7 @@
<EmbeddedResource Include="Resources\FullscreenPanel.xfrm" />
<Compile Include="Src\Gui\Dialogs\OptionPanels\IDEOptions\FullscreenPanel.cs" />
<Compile Include="Src\Dom\MemberLookupHelper.cs" />
<Compile Include="Src\Gui\Components\AutoHide\AutoHideMenuStripContainer.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">
@ -708,6 +709,7 @@ @@ -708,6 +709,7 @@
<Project>{35cef10f-2d4c-45f2-9dd1-161e0fec583c}</Project>
<Name>ICSharpCode.Core</Name>
</ProjectReference>
<Folder Include="Src\Gui\Components\AutoHide" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>

161
src/Main/Base/Project/Src/Gui/Components/AutoHide/AutoHideMenuStripContainer.cs

@ -0,0 +1,161 @@ @@ -0,0 +1,161 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Gui
{
/// <summary>
/// AutoHideMenuStripContainer can be used instead of MenuStrip to get a menu
/// which is automaticaly hiden and shown. It is especially useful in fullscreen.
/// </summary>
public class AutoHideMenuStripContainer: Panel
{
MenuStrip menuStrip;
bool autoHide; // Set in the constructor to fire set_AutoHide
bool showOnMouseMove = true;
bool showOnMouseDown = true;
bool mouseIn;
bool dropDownOpened;
/// <summary>
/// Gets or sets whether to hide the menu. If set to false, it will behave as normal menu.
/// </summary>
public bool AutoHide {
get {
return autoHide;
}
set {
autoHide = value;
if (autoHide) {
this.Height = 1;
this.Controls.Clear();
} else {
this.Height = menuStrip.PreferredSize.Height;
menuStrip.Dock = DockStyle.Fill;
this.Controls.Add(menuStrip);
}
}
}
public bool ShowOnMouseMove {
get {
return showOnMouseMove;
}
set {
showOnMouseMove = value;
}
}
public bool ShowOnMouseDown {
get {
return showOnMouseDown;
}
set {
showOnMouseDown = value;
}
}
public Color ActivatorColor {
get {
return this.ForeColor;
}
set {
this.ForeColor = value;
}
}
public AutoHideMenuStripContainer(MenuStrip menuStrip)
{
if (menuStrip == null) {
throw new ArgumentNullException("menuStrip");
}
this.menuStrip = menuStrip;
this.AutoHide = true;
this.MouseMove += OnPanelMouseMove;
this.MouseDown += OnPanelMouseDown;
menuStrip.MouseEnter += OnMenuMouseEnter;
menuStrip.MouseLeave += OnMenuMouseLeave;
menuStrip.ItemAdded += OnMenuItemAdded;
foreach(ToolStripMenuItem menuItem in menuStrip.Items) {
AddEventHandlersForItem(menuItem);
}
}
void OnPanelMouseMove(object sender, MouseEventArgs e)
{
if (showOnMouseMove && autoHide) {
ShowOverlay();
}
}
void OnPanelMouseDown(object sender, MouseEventArgs e)
{
if (showOnMouseDown && autoHide) {
ShowOverlay();
}
}
void OnMenuMouseEnter(object sender, EventArgs e)
{
mouseIn = true;
}
void OnMenuMouseLeave(object sender, EventArgs e)
{
mouseIn = false;
if (!dropDownOpened) {
HideOverlay();
}
}
void OnMenuItemAdded(object sender, EventArgs e)
{
AddEventHandlersForItem((ToolStripMenuItem)sender);
}
void AddEventHandlersForItem(ToolStripMenuItem menuItem)
{
menuItem.DropDownOpened += OnDropDownOpened;
menuItem.DropDownClosed += OnDropDownClosed;
}
void OnDropDownOpened(object sender, EventArgs e)
{
dropDownOpened = true;
}
void OnDropDownClosed(object sender, EventArgs e)
{
dropDownOpened = false;
if (!mouseIn) {
HideOverlay();
}
}
public void ShowOverlay()
{
menuStrip.Dock = DockStyle.None;
menuStrip.Location = this.Location;
menuStrip.AutoSize = false;
menuStrip.Size = new Size(this.Width, menuStrip.PreferredSize.Height);
Parent.Controls.Add(menuStrip);
menuStrip.BringToFront();
}
public void HideOverlay()
{
if (Parent.Controls.Contains(menuStrip)) {
Parent.Controls.Remove(menuStrip);
}
}
}
}

5
src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs

@ -61,6 +61,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -61,6 +61,7 @@ namespace ICSharpCode.SharpDevelop.Gui
Bounds = normalBounds;
WindowState = defaultWindowState;
}
RedrawAllComponents();
}
}
@ -259,7 +260,9 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -259,7 +260,9 @@ namespace ICSharpCode.SharpDevelop.Gui
content.RedrawContent();
}
layout.RedrawAllComponents();
if (layout != null) {
layout.RedrawAllComponents();
}
StatusBarService.RedrawStatusbar();
}

50
src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs

@ -30,6 +30,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -30,6 +30,7 @@ namespace ICSharpCode.SharpDevelop.Gui
DockPanel dockPanel;
Dictionary<string, PadContentWrapper> contentHash = new Dictionary<string, PadContentWrapper>();
ToolStripContainer toolStripContainer;
AutoHideMenuStripContainer mainMenuContainer;
public IWorkbenchWindow ActiveWorkbenchwindow {
get {
@ -99,6 +100,9 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -99,6 +100,9 @@ namespace ICSharpCode.SharpDevelop.Gui
dockPanel = new WeifenLuo.WinFormsUI.DockPanel();
toolStripContainer.ContentPanel.Controls.Add(this.dockPanel);
mainMenuContainer = new AutoHideMenuStripContainer(((DefaultWorkbench)wbForm).TopMenu);
mainMenuContainer.Dock = DockStyle.Top;
this.dockPanel.ActiveAutoHideContent = null;
this.dockPanel.Dock = System.Windows.Forms.DockStyle.Fill;
@ -114,7 +118,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -114,7 +118,7 @@ namespace ICSharpCode.SharpDevelop.Gui
// wbForm.Controls.Add(this.dockPanel);
toolStripContainer.ContentPanel.Controls.Add(((DefaultWorkbench)workbench).TopMenu);
toolStripContainer.ContentPanel.Controls.Add(mainMenuContainer);
StatusBarService.Control.Dock = DockStyle.Bottom;
toolStripContainer.ContentPanel.Controls.Add(StatusBarService.Control);
@ -131,6 +135,21 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -131,6 +135,21 @@ namespace ICSharpCode.SharpDevelop.Gui
toolStripContainer.ResumeLayout(false);
wbForm.ResumeLayout(false);
Properties fullscreenProperties = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.FullscreenOptions", new Properties());
fullscreenProperties.PropertyChanged += TrackFullscreenPropertyChanges;
}
void TrackFullscreenPropertyChanges(object sender, PropertyChangedEventArgs e)
{
if (e.OldValue != e.NewValue && wbForm.FullScreen) {
switch (e.Key) {
case "HideMainMenu":
case "HideToolbars":
RedrawAllComponents();
break;
}
}
}
void ShowPads()
@ -460,8 +479,33 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -460,8 +479,33 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
if (PropertyService.Get("ICSharpCode.SharpDevelop.Gui.ToolBarVisible", true)) {
ShowToolBars();
RedrawMainMenu();
RedrawToolbars();
}
void RedrawMainMenu()
{
Properties fullscreenProperties = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.FullscreenOptions", new Properties());
bool hideInFullscreen = fullscreenProperties.Get("HideMainMenu", false);
bool showOnMouseMove = fullscreenProperties.Get("ShowMainMenuOnMouseMove", true);
mainMenuContainer.AutoHide = wbForm.FullScreen && hideInFullscreen;
mainMenuContainer.ShowOnMouseDown = true;
mainMenuContainer.ShowOnMouseMove = showOnMouseMove;
}
void RedrawToolbars()
{
Properties fullscreenProperties = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.FullscreenOptions", new Properties());
bool hideInFullscreen = fullscreenProperties.Get("HideToolbars", true);
bool toolBarVisible = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.ToolBarVisible", true);
if (toolBarVisible) {
if (wbForm.FullScreen && hideInFullscreen) {
HideToolBars();
} else {
ShowToolBars();
}
} else {
HideToolBars();
}

Loading…
Cancel
Save