using System;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections.Generic;
namespace WeifenLuo.WinFormsUI.Docking
{
///
///
///
[ProvideProperty("EnableVSStyle", typeof(ToolStrip))]
public partial class VisualStudioToolStripExtender : Component, IExtenderProvider
{
private class ToolStripProperties
{
private VsVersion version = VsVersion.Unknown;
private readonly ToolStrip strip;
private readonly Dictionary menuText = new Dictionary();
public ToolStripProperties(ToolStrip toolstrip)
{
if (toolstrip == null) throw new ArgumentNullException("toolstrip");
strip = toolstrip;
if (strip is MenuStrip)
SaveMenuStripText();
}
public VsVersion VsVersion
{
get { return this.version; }
set
{
this.version = value;
UpdateMenuText(this.version == VsVersion.Vs2012 || this.version == VsVersion.Vs2013);
}
}
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 strips = new Dictionary();
///
///
///
public VisualStudioToolStripExtender()
{
InitializeComponent();
}
///
///
///
///
public VisualStudioToolStripExtender(IContainer container)
{
container.Add(this);
InitializeComponent();
}
#region IExtenderProvider Members
///
///
///
///
///
public bool CanExtend(object extendee)
{
return extendee is ToolStrip;
}
#endregion
///
///
///
public ToolStripRenderer DefaultRenderer { get; set; }
///
///
///
///
///
[DefaultValue(false)]
public VsVersion GetStyle(ToolStrip strip)
{
if (strips.ContainsKey(strip))
return strips[strip].VsVersion;
return VsVersion.Unknown;
}
///
///
///
///
///
///
public void SetStyle(ToolStrip strip, VsVersion version, ThemeBase theme)
{
ToolStripProperties properties = null;
if (!strips.ContainsKey(strip))
{
properties = new ToolStripProperties(strip) { VsVersion = version };
strips.Add(strip, properties);
}
else
{
properties = strips[strip];
}
if (theme == null)
{
if (DefaultRenderer != null)
strip.Renderer = DefaultRenderer;
}
else
{
theme.ApplyTo(strip);
}
properties.VsVersion = version;
}
///
///
///
public enum VsVersion
{
///
///
///
Unknown,
///
///
///
Vs2003,
///
///
///
Vs2005,
///
///
///
Vs2008,
///
///
///
Vs2010,
///
///
///
Vs2012,
///
///
///
Vs2013,
///
///
///
Vs2015
}
}
}