Skip to content

Commit

Permalink
Using a control extender to set the VS2012 Extender and the menu capi…
Browse files Browse the repository at this point in the history
…talization in one operation

Revert "First attempt at modifying a toolstrip renderer to match VS2012 style (ie upper case top-level menus)"
This reverts commit fa791c0.
  • Loading branch information
odalet committed Dec 23, 2013
1 parent fa791c0 commit 8efeb80
Show file tree
Hide file tree
Showing 7 changed files with 181 additions and 27 deletions.
6 changes: 6 additions & 0 deletions DockSample/DockSample.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,12 @@
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="VS2012ColorTable.cs" />
<Compile Include="VS2012ToolStripExtender.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="VS2012ToolStripExtender.Designer.cs">
<DependentUpon>VS2012ToolStripExtender.cs</DependentUpon>
</Compile>
<Compile Include="VS2012ToolStripRenderer.cs" />
<EmbeddedResource Include="AboutDialog.resx">
<SubType>Designer</SubType>
Expand Down
12 changes: 9 additions & 3 deletions DockSample/MainForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 12 additions & 3 deletions DockSample/MainForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ public MainForm()
RightToLeftLayout = showRightToLeft.Checked;
m_solutionExplorer.RightToLeftLayout = RightToLeftLayout;
m_deserializeDockContent = new DeserializeDockContent(GetContentFromPersistString);

vS2012ToolStripExtender1.DefaultRenderer = _system;
vS2012ToolStripExtender1.VS2012Renderer = _custom;
}

#region Methods
Expand Down Expand Up @@ -156,24 +159,30 @@ private void SetSchema(object sender, System.EventArgs e)
if (sender == menuItemSchemaVS2005)
{
dockPanel.Theme = vS2005Theme1;
ToolStripManager.Renderer = _system;
EnableVS2012Renderer(false);
}
else if (sender == menuItemSchemaVS2003)
{
dockPanel.Theme = vS2003Theme1;
ToolStripManager.Renderer = _system;
EnableVS2012Renderer(false);
}
else if (sender == menuItemSchemaVS2012Light)
{
dockPanel.Theme = vS2012LightTheme1;
ToolStripManager.Renderer = _custom;
EnableVS2012Renderer(true);
}

menuItemSchemaVS2005.Checked = (sender == menuItemSchemaVS2005);
menuItemSchemaVS2003.Checked = (sender == menuItemSchemaVS2003);
menuItemSchemaVS2012Light.Checked = (sender == menuItemSchemaVS2012Light);
}

private void EnableVS2012Renderer(bool enable)
{
vS2012ToolStripExtender1.SetEnableVS2012Style(this.mainMenu, enable);
vS2012ToolStripExtender1.SetEnableVS2012Style(this.toolBar, enable);
}

private void SetDocumentStyle(object sender, System.EventArgs e)
{
DocumentStyle oldStyle = dockPanel.DocumentStyle;
Expand Down
5 changes: 4 additions & 1 deletion DockSample/MainForm.resx
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADY
DAAAAk1TRnQBSQFMAgEBCQEAAVQBAAFUAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
DAAAAk1TRnQBSQFMAgEBCQEAAVwBAAFcAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
Expand Down Expand Up @@ -216,4 +216,7 @@
<metadata name="vS2012LightTheme1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>674, 8</value>
</metadata>
<metadata name="vS2012ToolStripExtender1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>836, 8</value>
</metadata>
</root>
36 changes: 36 additions & 0 deletions DockSample/VS2012ToolStripExtender.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

114 changes: 114 additions & 0 deletions DockSample/VS2012ToolStripExtender.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
using System;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections.Generic;

namespace DockSample
{
[ProvideProperty("EnableVS2012Style", typeof(ToolStrip))]
public partial class VS2012ToolStripExtender : Component, IExtenderProvider
{
private class ToolStripProperties
{
private bool enabled = false;
private readonly ToolStrip strip;
private readonly Dictionary<ToolStripItem, string> menuText = new Dictionary<ToolStripItem, string>();


public ToolStripProperties(ToolStrip toolstrip)
{
if (toolstrip == null) throw new ArgumentNullException("toolstrip");
strip = toolstrip;

if (strip is MenuStrip)
SaveMenuStripText();
}

public bool EnableVS2012Style
{
get { return enabled; }
set
{
enabled = value;
UpdateMenuText(enabled);
}
}

private void SaveMenuStripText()
{
foreach (ToolStripItem item in strip.Items)
menuText.Add(item, item.Text);
}

public void UpdateMenuText(bool caps)
{
foreach (ToolStripItem item in menuText.Keys)
{
var text = menuText[item];
item.Text = caps ? text.ToUpper() : text;
}
}
}

private readonly Dictionary<ToolStrip, ToolStripProperties> strips = new Dictionary<ToolStrip, ToolStripProperties>();

public VS2012ToolStripExtender()
{
InitializeComponent();
}

public VS2012ToolStripExtender(IContainer container)
{
container.Add(this);

InitializeComponent();
}

#region IExtenderProvider Members

public bool CanExtend(object extendee)
{
return extendee is ToolStrip;
}

#endregion

public ToolStripRenderer DefaultRenderer { get; set; }

public ToolStripRenderer VS2012Renderer { get; set; }

[DefaultValue(false)]
public bool GetEnableVS2012Style(ToolStrip strip)
{
if (strips.ContainsKey(strip))
return strips[strip].EnableVS2012Style;

return false;
}

public void SetEnableVS2012Style(ToolStrip strip, bool enable)
{
var apply = false;
ToolStripProperties properties = null;

if (!strips.ContainsKey(strip))
{
properties = new ToolStripProperties(strip) { EnableVS2012Style = enable };
strips.Add(strip, properties);
apply = true;
}
else
{
properties = strips[strip];
apply = properties.EnableVS2012Style != enable;
}

if (apply)
{
//ToolStripManager.Renderer = enable ? VS2012Renderer : DefaultRenderer;
strip.Renderer = enable ? VS2012Renderer : DefaultRenderer;
properties.EnableVS2012Style = enable;
}
}
}
}
20 changes: 0 additions & 20 deletions DockSample/VS2012ToolStripRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -313,25 +313,5 @@ private static GraphicsPath GetCapsule(RectangleF baseRect)
}
// */
#endregion

/// <summary>
/// Gets or sets a value indicating whether top-level menu items should be rendered upper case or not.
/// </summary>
/// <remarks>
/// Setting this property to <c>true</c> helps in simulating a VS2012/2013 style.
/// </remarks>
public bool EnableUpperCaseTopLevelMenuItems { get; set; }

protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
if (EnableUpperCaseTopLevelMenuItems &&
e.Item is ToolStripMenuItem &&
e.Item.GetCurrentParent() is MenuStrip)
{
e.Item.Text = e.Text.ToUpper();
}

base.OnRenderItemText(e);
}
}
}

0 comments on commit 8efeb80

Please sign in to comment.