2364 lines
107 KiB
C#

using System;
using System.Drawing;
using System.Reflection;
using System.Xml;
using System.Resources;
using System.Collections;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing.Drawing2D;
using System.IO;
using System.Collections.Generic;
namespace DevComponents.DotNetBar
{
/// <summary>
/// Summary description for BarFunctions.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public sealed class BarFunctions
{
public const int ANIMATION_INTERVAL = 100;
private static string ms_ResourceName = "";
const string DEFAULT_RESOURCE = ".Strings";
private static bool m_ThemedOS = false;
private static bool m_IsVista = false;
private static bool _IsWindows7 = false;
private static bool _IsWindows8 = false;
private static bool _IsWindows10 = false;
private static bool m_SupportsAnimation = true;
private static bool _IsWindowsXP = false;
static BarFunctions()
{
m_ThemedOS = false;
NativeFunctions.OSVERSIONINFO os = new NativeFunctions.OSVERSIONINFO();
os.dwOSVersionInfoSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(NativeFunctions.OSVERSIONINFO));
NativeFunctions.GetVersionEx(ref os);
if (os.dwPlatformId == 2 && os.dwMajorVersion == 4)
m_SupportsAnimation = false;
if (os.dwMajorVersion == 5 && os.dwMinorVersion >= 1 && os.dwPlatformId == 2 ||
os.dwMajorVersion > 5 && os.dwPlatformId == 2)
m_ThemedOS = System.Windows.Forms.OSFeature.Feature.IsPresent(System.Windows.Forms.OSFeature.Themes);
Version osVersion = System.Environment.OSVersion.Version;
_IsWindowsXP = osVersion.Major <= 5;
m_IsVista = osVersion.Major >= 6;
_IsWindows7 = (osVersion.Major == 6 && osVersion.Minor >= 1 || osVersion.Major>6) && osVersion.Build >= 7000;
_IsWindows8 = (osVersion.Major == 6 && osVersion.Minor >= 2 || osVersion.Major > 6) && osVersion.Build >= 9200;
_IsWindows10 = (osVersion.Major == 6 && osVersion.Minor >= 3 || osVersion.Major > 6) && osVersion.Build >= 9600;
RefreshScreens();
}
private static Size _Windows10CaptionButtonSize = new Size(46, 28);
public static Size CaptionButtonSize
{
get
{
if (_IsWindows10)
return Dpi.Size(_Windows10CaptionButtonSize);
else
return SystemInformation.CaptionButtonSize;
}
}
public static Size Windows10CaptionButtonSize
{
get { return _Windows10CaptionButtonSize; }
set { _Windows10CaptionButtonSize = value; }
}
public static bool IsWindowsXP
{
get
{
return _IsWindowsXP;
}
}
public static bool IsVista
{
get { return m_IsVista; }
}
public static bool IsWindows7
{
get
{
return _IsWindows7;
}
}
public static bool IsWindows8
{
get
{
return _IsWindows8;
}
}
public static bool IsWindows10
{
get
{
return _IsWindows10;
}
}
internal static char GetCharForKeyValue(int keyValue)
{
byte[] chars = new byte[2];
try
{
byte[] keyState = new byte[256];
if (NativeFunctions.GetKeyboardState(keyState))
{
if (NativeFunctions.ToAscii((uint)keyValue, 0, keyState, chars, 0) != 0)
{
return (char)chars[0];
}
}
}
catch (Exception)
{
return char.MinValue;
}
return char.MinValue;
}
public static Color Darken(Color color, int percent)
{
ColorFunctions.HLSColor h = ColorFunctions.RGBToHSL(color.R, color.G, color.B);
h.Lightness *= (double)(100 - percent) / 100;
return ColorFunctions.HLSToRGB(h);
}
public static Color Ligten(Color color, int percent)
{
ColorFunctions.HLSColor h = ColorFunctions.RGBToHSL(color.R, color.G, color.B);
h.Lightness *= (1 + (double)percent / 100);
return ColorFunctions.HLSToRGB(h);
}
/// <summary>
/// Tries to invoke the RecalcLayout method on the control and return true if such method was invoked.
/// </summary>
/// <param name="c">Reference to the control</param>
/// <param name="invalidate">Indicates whether to invalidate control if no recalc layout method is found</param>
/// <returns>return true if method is invoked.</returns>
public static bool InvokeRecalcLayout(Control c, bool invalidate)
{
if (c is ItemControl)
{
((ItemControl)c).RecalcLayout();
return true;
}
else if (c is Bar)
{
((Bar)c).RecalcLayout();
return true;
}
else if (c is ExplorerBar)
{
((ExplorerBar)c).RecalcLayout();
return true;
}
else if (c is BaseItemControl)
{
((BaseItemControl)c).RecalcLayout();
return true;
}
else if (c is BarBaseControl)
{
((BarBaseControl)c).RecalcLayout();
return true;
}
else if (c is PopupItemControl)
{
((PopupItemControl)c).RecalcLayout();
return true;
}
MethodInfo m = c.GetType().GetMethod("RecalcLayout");
if (m != null)
{
m.Invoke(c, null);
return true;
}
else if (invalidate)
{
c.Invalidate(true);
c.Update();
}
return false;
}
public static bool ThemedOS
{
get { return m_ThemedOS; }
set { m_ThemedOS = value; }
}
public static StringFormat CreateStringFormat()
{
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Near;
sf.LineAlignment = StringAlignment.Near;
sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.None;
sf.Trimming = StringTrimming.Character;
return sf;
//return new StringFormat(StringFormat.GenericDefault);
}
public static void SetControlVisible(Control c, bool visible)
{
if (visible)
{
int indexZOrder = -1;
if (c.Parent != null && c.Dock != DockStyle.None) indexZOrder = c.Parent.Controls.IndexOf(c);
c.Visible = true;
if (indexZOrder != -1) c.Parent.Controls.SetChildIndex(c, indexZOrder);
}
else
c.Visible = false;
}
public static bool ProcessItemsShortcuts(eShortcut key, Hashtable itemsShortcuts)
{
bool eat = false;
if (itemsShortcuts.Contains(key))
{
ShortcutTableEntry objEntry = (ShortcutTableEntry)itemsShortcuts[key];
// Must convert to new array, since if this is for example
// close command first Click will destroy the collection we are
// iterating through and exception will be raised.
BaseItem[] arr = new BaseItem[objEntry.Items.Values.Count];
objEntry.Items.Values.CopyTo(arr, 0);
Hashtable hnames = new Hashtable(arr.Length);
foreach (BaseItem objItem in arr)
{
if (objItem.CanRaiseClick && (objItem.Name == "" || !hnames.Contains(objItem.Name)))
{
if (!objItem.GlobalItem || objItem.GlobalName == "" || !hnames.Contains(objItem.GlobalName))
{
eat = true;
objItem.RaiseClick(eEventSource.Keyboard);
if (objItem.Name != "")
{
hnames.Add(objItem.Name, "");
}
if (objItem.GlobalItem && objItem.GlobalName != "" && objItem.GlobalName != objItem.Name && !hnames.Contains(objItem.GlobalName))
hnames.Add(objItem.GlobalName, "");
}
}
}
}
return eat;
}
/// <summary>
/// Creates copy of a bar to be used as new dock bar. This function is used to create new bar for tabs that are torn off the existing dock bars.
/// </summary>
/// <param name="instance">Original base bar to base the new bar on.</param>
/// <returns>New instance of a bar. Note that bar is not added to the DotNetBarManager.Bars collection and DockSide is not set.</returns>
public static Bar CreateDuplicateDockBar(Bar instance)
{
// Create new Bar and invoke the drag there
Bar bar = new Bar(instance.Text);
return CreateDuplicateDockBar(instance, bar);
}
///// <summary>
///// Creates copy of a bar to be used as new dock bar. This function is used to create new bar for tabs that are torn off the existing dock bars.
///// </summary>
///// <param name="instance">Original base bar to base the new bar on.</param>
///// <param name="services">IDesignerServices to use for creation of the new instance of the object.</param>
///// <returns>New instance of a bar. Note that bar is not added to the DotNetBarManager.Bars collection and DockSide is not set.</returns>
//public static Bar CreateDuplicateDockBar(Bar instance, IDesignerServices services)
//{
// Bar bar = services.CreateComponent(typeof(Bar)) as Bar;
// return CreateDuplicateDockBar(instance, bar);
//}
[EditorBrowsable(EditorBrowsableState.Never)]
public static Bar CreateDuplicateDockBar(Bar instance, Bar bar)
{
bar.Text = instance.Text;
bar.ItemsContainer.MinHeight = instance.MinHeight;
bar.ItemsContainer.MinWidth = instance.ItemsContainer.MinWidth;
bar.CanDockBottom = instance.CanDockBottom;
bar.CanDockLeft = instance.CanDockLeft;
bar.CanDockRight = instance.CanDockRight;
bar.CanDockTop = instance.CanDockTop;
bar.CanDockDocument = instance.CanDockDocument;
bar.CanDockTab = instance.CanDockTab;
bar.CanUndock = instance.CanUndock;
bar.CanMaximizeFloating = instance.CanMaximizeFloating;
bar.CanAutoHide = instance.CanAutoHide;
bar.DockTabAlignment = instance.DockTabAlignment;
bar.CanCustomize = instance.CanCustomize;
bar.AutoHideAnimationTime = instance.AutoHideAnimationTime;
bar.AlwaysDisplayDockTab = instance.AlwaysDisplayDockTab;
bar.AutoCreateCaptionMenu = instance.AutoCreateCaptionMenu;
bar.AutoSyncBarCaption = instance.AutoSyncBarCaption;
bar.HideFloatingInactive = instance.HideFloatingInactive;
bar.CloseSingleTab = instance.CloseSingleTab;
bar.DockTabCloseButtonVisible = instance.DockTabCloseButtonVisible;
bar.CaptionHeight = instance.CaptionHeight;
bar.TabNavigation = instance.TabNavigation;
if (!instance.CaptionBackColor.IsEmpty)
bar.CaptionBackColor = instance.CaptionBackColor;
if (!instance.CaptionForeColor.IsEmpty)
bar.CaptionForeColor = instance.CaptionForeColor;
if (!instance.ItemsContainer.m_BackgroundColor.IsEmpty)
bar.ItemsContainer.BackColor = instance.ItemsContainer.m_BackgroundColor;
if (instance.DockedBorderStyle != eBorderType.None)
bar.DockedBorderStyle = instance.DockedBorderStyle;
bar.Style = instance.Style;
if (instance.ColorScheme.SchemeChanged)
bar.ColorScheme = instance.ColorScheme;
bar.LayoutType = instance.LayoutType;
bar.GrabHandleStyle = instance.GrabHandleStyle;
bar.Stretch = instance.Stretch;
bar.CanHide = instance.CanHide;
bar.ThemeAware = instance.ThemeAware;
bar.DockedBorderStyle = instance.DockedBorderStyle;
return bar;
}
public static void ApplyAutoDocumentBarStyle(Bar bar)
{
bar.SetDockTabStyle(bar.Style);
bar.TabNavigation = true;
if (!bar.AlwaysDisplayDockTab)
bar.AlwaysDisplayDockTab = true;
if (bar.DockTabAlignment != eTabStripAlignment.Top)
bar.DockTabAlignment = eTabStripAlignment.Top;
if (bar.GrabHandleStyle != eGrabHandleStyle.None)
bar.GrabHandleStyle = eGrabHandleStyle.None;
}
public static void RestoreAutoDocumentBarStyle(Bar bar)
{
bar.SetDockTabStyle(bar.Style);
if (bar.AlwaysDisplayDockTab)
bar.AlwaysDisplayDockTab = false;
if (bar.DockTabAlignment != eTabStripAlignment.Bottom)
bar.DockTabAlignment = eTabStripAlignment.Bottom;
if (bar.GrabHandleStyle != eGrabHandleStyle.Caption)
bar.GrabHandleStyle = eGrabHandleStyle.Caption;
}
/// <summary>
/// Returns if passed control is ready for painting.
/// </summary>
/// <param name="objCtrl">Control to test.</param>
/// <returns>true if handle is valid otherwise false</returns>
public static bool IsHandleValid(System.Windows.Forms.Control objCtrl)
{
return (objCtrl != null && !objCtrl.Disposing && !objCtrl.IsDisposed && objCtrl.IsHandleCreated);
}
public static void DrawMenuCheckBox(ItemPaintArgs pa, System.Drawing.Rectangle r, eDotNetBarStyle style, bool MouseOver)
{
System.Drawing.Graphics g = pa.Graphics;
Color clr;
if (style != eDotNetBarStyle.Office2000)
{
if (MouseOver)
{
//clr=g.GetNearestColor(Color.FromArgb(45,SystemColors.Highlight));
//SolidBrush objBrush=new SolidBrush(clr);
//g.FillRectangle(objBrush,r);
//objBrush.Dispose();
}
else
{
//clr=g.GetNearestColor(Color.FromArgb(96,ColorFunctions.HoverBackColor()));
clr = pa.Colors.ItemCheckedBackground; //ColorFunctions.CheckBoxBackColor(g);
SolidBrush objBrush = new SolidBrush(clr);
g.FillRectangle(objBrush, r);
objBrush.Dispose();
}
//clr=g.GetNearestColor(Color.FromArgb(200,SystemColors.Highlight));
clr = pa.Colors.ItemCheckedBorder; // SystemColors.Highlight;
Pen objPen = new Pen(clr, 1);
// TODO: Beta 2 fix --> g.DrawRectangle(objPen,r);
NativeFunctions.DrawRectangle(g, objPen, r);
objPen.Dispose();
// Draw checker...
Point[] pt = new Point[3];
pt[0].X = r.Left + (r.Width - 5) / 2 - 1;
pt[0].Y = r.Top + (r.Height - 6) / 2 + 3;
pt[1].X = pt[0].X + 2;
pt[1].Y = pt[0].Y + 2;
pt[2].X = pt[1].X + 4;
pt[2].Y = pt[1].Y - 4;
objPen = new Pen(pa.Colors.ItemCheckedText);
g.DrawLines(objPen, pt);
pt[0].X++;
pt[1].X++;
pt[2].X++;
g.DrawLines(objPen, pt);
objPen.Dispose();
}
else if (style == eDotNetBarStyle.Office2000)
{
// Draw checked box
System.Windows.Forms.ControlPaint.DrawBorder3D(g, r, System.Windows.Forms.Border3DStyle.SunkenOuter, System.Windows.Forms.Border3DSide.All);
if (!MouseOver)
{
r.Inflate(-1, -1);
g.FillRectangle(ColorFunctions.GetPushedBrush(), r);
}
// Draw checker...
Point[] pt = new Point[3];
pt[0].X = r.Left + (r.Width - 6) / 2;
pt[0].Y = r.Top + (r.Height - 6) / 2 + 3;
pt[1].X = pt[0].X + 2;
pt[1].Y = pt[0].Y + 2;
pt[2].X = pt[1].X + 4;
pt[2].Y = pt[1].Y - 4;
g.DrawLines(SystemPens.ControlText, pt);
pt[0].X++;
pt[1].X++;
pt[2].X++;
g.DrawLines(SystemPens.ControlText, pt);
}
}
public static void SerializeImage(System.Drawing.Image image, XmlElement xml)
{
if (image == null)
return;
System.IO.MemoryStream mem = new System.IO.MemoryStream(1024);
// TODO: Beta 2 issue with the ImageFormat. RawFormat on image object does not return the actual image format
// Right now it is hard coded to PNG but in final version we should get the original image format
image.Save(mem, System.Drawing.Imaging.ImageFormat.Png);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(sb);
System.Xml.XmlTextWriter xt = new System.Xml.XmlTextWriter(sw);
xt.WriteBase64(mem.GetBuffer(), 0, (int)mem.Length);
xml.InnerText = sb.ToString();
}
public static void SerializeIcon(System.Drawing.Icon icon, XmlElement xml)
{
if (icon == null)
return;
System.IO.MemoryStream mem = new System.IO.MemoryStream(1024);
// TODO: Beta 2 issue with the ImageFormat. RawFormat on image object does not return the actual image format
// Right now it is hard coded to PNG but in final version we should get the original image format
icon.Save(mem);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(sb);
System.Xml.XmlTextWriter xt = new System.Xml.XmlTextWriter(sw);
xml.SetAttribute("encoding", "binhex");
//xt.WriteBase64(mem.GetBuffer(),0,(int)mem.Length);
xt.WriteBinHex(mem.GetBuffer(), 0, (int)mem.Length);
xml.InnerText = sb.ToString();
}
public static System.Windows.Forms.Form CreateOutlineForm()
{
System.Windows.Forms.Form form = new System.Windows.Forms.Form();
try
{
form.Size = new Size(0, 0);
}
catch
{
form = new System.Windows.Forms.Form();
}
form.BackColor = SystemColors.Highlight;
form.MinimizeBox = false;
form.MaximizeBox = false;
form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
if (NativeFunctions.AlphaBlendingSupported)
form.Opacity = .5;
else
form.BackColor = System.Windows.Forms.ControlPaint.LightLight(SystemColors.Highlight);
form.ShowInTaskbar = false;
form.Text = "";
form.CreateControl();
return form;
}
public static System.Windows.Forms.Form CreateTransparentOutlineForm()
{
System.Windows.Forms.Form form = new TransparentForm();
try
{
form.Size = new Size(0, 0);
}
catch
{
form = new TransparentForm();
}
form.BackColor = SystemColors.Highlight;
form.MinimizeBox = false;
form.MaximizeBox = false;
form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
if (NativeFunctions.AlphaBlendingSupported)
form.Opacity = .5;
else
form.BackColor = System.Windows.Forms.ControlPaint.LightLight(SystemColors.Highlight);
form.ShowInTaskbar = false;
form.Text = "";
form.CreateControl();
return form;
}
private class TransparentForm : Form
{
protected override void WndProc(ref Message m)
{
if (m.Msg == (int)WinApi.WindowsMessages.WM_NCHITTEST)
{
m.Result = new IntPtr((int)WinApi.WindowHitTestRegions.TransparentOrCovered);
return;
}
base.WndProc(ref m);
}
}
/// <summary>
/// XML element is expected to be something like <image>Image data Base64 encoded</image>
/// </summary>
/// <param name="xml">Image data</param>
/// <returns></returns>
public static System.Drawing.Image DeserializeImage(XmlElement xml)
{
System.Drawing.Image img = null;
if (xml == null || xml.InnerText == "")
return null;
System.IO.StringReader sr = new System.IO.StringReader(xml.OuterXml);
System.Xml.XmlTextReader xr = new System.Xml.XmlTextReader(sr);
System.IO.MemoryStream mem = new System.IO.MemoryStream(1024);
// Skip <image> to data
xr.Read();
byte[] base64 = new byte[1024];
int base64len = 0;
do
{
base64len = xr.ReadBase64(base64, 0, 1024);
if (base64len > 0)
mem.Write(base64, 0, base64len);
} while (base64len != 0);
img = System.Drawing.Image.FromStream(mem);
return img;
}
public static System.Drawing.Icon DeserializeIcon(XmlElement xml)
{
System.Drawing.Icon img = null;
if (xml == null || xml.InnerText == "")
return null;
bool bDecodeBinHex = false;
if (xml.HasAttribute("encoding") && xml.GetAttribute("encoding") == "binhex")
bDecodeBinHex = true;
System.IO.StringReader sr = new System.IO.StringReader(xml.OuterXml);
System.Xml.XmlTextReader xr = new System.Xml.XmlTextReader(sr);
System.IO.MemoryStream mem = new System.IO.MemoryStream(1024);
// Skip <image> to data
xr.Read();
byte[] base64 = new byte[1024];
int base64len = 0;
if (bDecodeBinHex)
{
do
{
base64len = xr.ReadBinHex(base64, 0, 1024);
if (base64len > 0)
mem.Write(base64, 0, base64len);
} while (base64len != 0);
}
else
{
do
{
base64len = xr.ReadBase64(base64, 0, 1024);
if (base64len > 0)
mem.Write(base64, 0, base64len);
} while (base64len != 0);
}
mem.Position = 0;
img = new System.Drawing.Icon(mem);
return img;
}
internal static BaseItem CreateItemFromXml(System.Xml.XmlElement xmlItem)
{
string cl = xmlItem.GetAttribute("class");
BaseItem returnItem = null;
switch (cl)
{
case "DevComponents.DotNetBar.ButtonItem":
returnItem = new ButtonItem();
break;
case "DevComponents.DotNetBar.TextBoxItem":
returnItem = new TextBoxItem();
break;
case "DevComponents.DotNetBar.ComboBoxItem":
returnItem = new ComboBoxItem();
break;
case "DevComponents.DotNetBar.LabelItem":
returnItem = new LabelItem();
break;
case "DevComponents.DotNetBar.CustomizeItem":
returnItem = new CustomizeItem();
break;
case "DevComponents.DotNetBar.ControlContainerItem":
returnItem = new ControlContainerItem();
break;
case "DevComponents.DotNetBar.DockContainerItem":
returnItem = new DockContainerItem();
break;
case "DevComponents.DotNetBar.MdiWindowListItem":
returnItem = new MdiWindowListItem();
break;
case "DevComponents.DotNetBar.SideBarContainerItem":
returnItem = new SideBarContainerItem();
break;
case "DevComponents.DotNetBar.SideBarPanelItem":
returnItem = new SideBarPanelItem();
break;
case "DevComponents.DotNetBar.ExplorerBarGroupItem":
returnItem = new ExplorerBarGroupItem();
break;
case "DevComponents.DotNetBar.ExplorerBarContainerItem":
returnItem = new ExplorerBarContainerItem();
break;
case "DevComponents.DotNetBar.ProgressBarItem":
returnItem = new ProgressBarItem();
break;
case "DevComponents.DotNetBar.ColorPickerDropDown":
returnItem = new ColorPickerDropDown();
break;
default:
{
try
{
//System.Windows.Forms.MessageBox.Show("Loading custom: "+xmlItem.GetAttribute("assembly")+" "+xmlItem.GetAttribute("class"));
System.Reflection.Assembly a = System.Reflection.Assembly.Load(xmlItem.GetAttribute("assembly"));
if (a == null)
return null;
BaseItem item = a.CreateInstance(xmlItem.GetAttribute("class")) as BaseItem;
returnItem = item;
}
catch (Exception e)
{
throw new ArgumentException("Could not create item from XML. Assembly=" + xmlItem.GetAttribute("assembly") + ", Class=" + xmlItem.GetAttribute("class") + ", Inner Exception: " + e.Message + ", Source=" + e.Source);
}
break;
}
}
return returnItem;
}
internal static BaseItem CreateItemFromXml(System.Xml.XmlElement xmlItem, System.ComponentModel.Design.IDesignerHost dh, string name)
{
string cl = xmlItem.GetAttribute("class");
BaseItem returnItem = null;
switch (cl)
{
case "DevComponents.DotNetBar.ButtonItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(ButtonItem), name) as ButtonItem;
else
returnItem = dh.CreateComponent(typeof(ButtonItem)) as ButtonItem;
break;
case "DevComponents.DotNetBar.TextBoxItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(TextBoxItem), name) as TextBoxItem;
else
returnItem = dh.CreateComponent(typeof(TextBoxItem)) as TextBoxItem;
break;
case "DevComponents.DotNetBar.ComboBoxItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(ComboBoxItem), name) as ComboBoxItem;
else
returnItem = dh.CreateComponent(typeof(ComboBoxItem)) as ComboBoxItem;
break;
case "DevComponents.DotNetBar.LabelItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(LabelItem), name) as LabelItem;
else
returnItem = dh.CreateComponent(typeof(LabelItem)) as LabelItem;
break;
case "DevComponents.DotNetBar.CustomizeItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(CustomizeItem), name) as CustomizeItem;
else
returnItem = dh.CreateComponent(typeof(CustomizeItem)) as CustomizeItem;
break;
case "DevComponents.DotNetBar.ControlContainerItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(ControlContainerItem), name) as ControlContainerItem;
else
returnItem = dh.CreateComponent(typeof(ControlContainerItem)) as ControlContainerItem;
break;
case "DevComponents.DotNetBar.DockContainerItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(DockContainerItem), name) as DockContainerItem;
else
returnItem = dh.CreateComponent(typeof(DockContainerItem)) as DockContainerItem;
break;
case "DevComponents.DotNetBar.MdiWindowListItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(MdiWindowListItem), name) as MdiWindowListItem;
else
returnItem = dh.CreateComponent(typeof(MdiWindowListItem)) as MdiWindowListItem;
break;
case "DevComponents.DotNetBar.SideBarContainerItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(SideBarContainerItem), name) as SideBarContainerItem;
else
returnItem = dh.CreateComponent(typeof(SideBarContainerItem)) as SideBarContainerItem;
break;
case "DevComponents.DotNetBar.SideBarPanelItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(SideBarPanelItem), name) as SideBarPanelItem;
else
returnItem = dh.CreateComponent(typeof(SideBarPanelItem)) as SideBarPanelItem;
break;
case "DevComponents.DotNetBar.ExplorerBarGroupItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(ExplorerBarGroupItem), name) as ExplorerBarGroupItem;
else
returnItem = dh.CreateComponent(typeof(ExplorerBarGroupItem)) as ExplorerBarGroupItem;
break;
case "DevComponents.DotNetBar.ExplorerBarContainerItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(ExplorerBarContainerItem), name) as ExplorerBarContainerItem;
else
returnItem = dh.CreateComponent(typeof(ExplorerBarContainerItem)) as ExplorerBarContainerItem;
break;
case "DevComponents.DotNetBar.ProgressBarItem":
if (name != "")
returnItem = dh.CreateComponent(typeof(ProgressBarItem), name) as ProgressBarItem;
else
returnItem = dh.CreateComponent(typeof(ProgressBarItem)) as ProgressBarItem;
break;
case "DevComponents.DotNetBar.ColorPickerDropDown":
if (name != "")
returnItem = dh.CreateComponent(typeof(ColorPickerDropDown), name) as ColorPickerDropDown;
else
returnItem = dh.CreateComponent(typeof(ColorPickerDropDown)) as ColorPickerDropDown;
break;
default:
{
try
{
//System.Windows.Forms.MessageBox.Show("Loading custom: "+xmlItem.GetAttribute("assembly")+" "+xmlItem.GetAttribute("class"));
System.Reflection.Assembly a = System.Reflection.Assembly.Load(xmlItem.GetAttribute("assembly"));
if (a == null)
return null;
BaseItem item = a.CreateInstance(xmlItem.GetAttribute("class")) as BaseItem;
returnItem = dh.CreateComponent(item.GetType()) as BaseItem;
}
catch (Exception e)
{
throw new ArgumentException("Could not create item from XML. Assembly=" + xmlItem.GetAttribute("assembly") + ", Class=" + xmlItem.GetAttribute("class") + ", Inner Exception: " + e.Message + ", Source=" + e.Source);
}
break;
}
}
return returnItem;
}
internal static string GetItemErrorInfo(System.Xml.XmlElement xmlItem)
{
string s = "";
if (xmlItem.HasAttribute("assembly"))
s = s + xmlItem.GetAttribute("assembly");
if (xmlItem.HasAttribute("class"))
s = s + xmlItem.GetAttribute("class");
return s;
}
internal static void PaintSystemButton(System.Drawing.Graphics g, SystemButton btn, Rectangle r, bool MouseDown, bool MouseOver, bool Disabled)
{
// Draw state if any
if (MouseDown)
{
g.FillRectangle(new SolidBrush(ColorFunctions.PressedBackColor(g)), r);
NativeFunctions.DrawRectangle(g, SystemPens.Highlight, r);
}
else if (MouseOver)
{
g.FillRectangle(new SolidBrush(ColorFunctions.HoverBackColor(g)), r);
NativeFunctions.DrawRectangle(g, SystemPens.Highlight, r);
}
Bitmap bmp = new Bitmap(r.Width, r.Height, g);
Graphics gBmp = Graphics.FromImage(bmp);
Rectangle rBtn = new Rectangle(0, 0, r.Width, r.Height);
rBtn.Inflate(0, -1);
Rectangle rClip = rBtn;
rClip.Inflate(-1, -1);
using (SolidBrush brush = new SolidBrush(SystemColors.Control))
gBmp.FillRectangle(brush, 0, 0, r.Width, r.Height);
gBmp.SetClip(rClip);
System.Windows.Forms.ControlPaint.DrawCaptionButton(gBmp, rBtn, (System.Windows.Forms.CaptionButton)btn, System.Windows.Forms.ButtonState.Flat);
gBmp.ResetClip();
gBmp.Dispose();
bmp.MakeTransparent(SystemColors.Control);
if (Disabled)
{
float[][] array = new float[5][];
array[0] = new float[5] { 0, 0, 0, 0, 0 };
array[1] = new float[5] { 0, 0, 0, 0, 0 };
array[2] = new float[5] { 0, 0, 0, 0, 0 };
array[3] = new float[5] { .5f, .5f, .5f, .5f, 0 };
array[4] = new float[5] { 0, 0, 0, 0, 0 };
System.Drawing.Imaging.ColorMatrix grayMatrix = new System.Drawing.Imaging.ColorMatrix(array);
System.Drawing.Imaging.ImageAttributes disabledImageAttr = new System.Drawing.Imaging.ImageAttributes();
disabledImageAttr.ClearColorKey();
disabledImageAttr.SetColorMatrix(grayMatrix);
g.DrawImage(bmp, r, 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, disabledImageAttr);
}
else
{
if (MouseDown)
r.Offset(1, 1);
g.DrawImageUnscaled(bmp, r);
}
}
internal static void SyncProperty(BaseItem item, string propertyName)
{
if (item.GlobalName.Length > 0)
{
PropertyDescriptor propDesc = TypeDescriptor.GetProperties(item)[propertyName];
SetPropertyByGlobalName(GetOwner(item), item.GetType(), item.GlobalName, propDesc, propDesc.GetValue(item));
}
else if (item.Name.Length > 0)
{
PropertyDescriptor propDesc = TypeDescriptor.GetProperties(item)[propertyName];
SetProperty(GetOwner(item), item.GetType(), item.Name, propDesc, propDesc.GetValue(item));
}
}
private static object GetOwner(BaseItem item)
{
object owner = item.GetOwner();
if (owner is RibbonBar && ((RibbonBar)owner).IsOverflowRibbon)
{
if (((RibbonBar)owner).IsOnQat)
owner = ((RibbonBar)owner).QatButtonParent.GetOwner();
else
owner = ((RibbonBar)owner).OverflowParent;
}
return owner;
}
internal static void SetProperty(object owner, System.Type itemType, string itemName, System.ComponentModel.PropertyDescriptor prop, object value)
{
IOwner manager = owner as IOwner;
DotNetBarManager dnbmanager = owner as DotNetBarManager;
if (manager == null || itemName == "" || prop == null)
return;
System.Collections.ArrayList list = null;
if (dnbmanager != null)
{
if (!dnbmanager.IsDisposed)
list = dnbmanager.GetItems(itemName, itemType, true);
}
else
list = manager.GetItems(itemName, itemType);
if (list == null)
return;
foreach (BaseItem objItem in list)
{
object propertyValue = prop.GetValue(objItem);
if (!(propertyValue == value || propertyValue != null && propertyValue.Equals(value)))
prop.SetValue(objItem, value);
}
}
internal static void SetPropertyByGlobalName(object owner, System.Type itemType, string itemName, System.ComponentModel.PropertyDescriptor prop, object value)
{
IOwner manager = owner as IOwner;
DotNetBarManager dnbmanager = owner as DotNetBarManager;
if (manager == null || itemName == "" || prop == null)
return;
System.Collections.ArrayList list = null;
if (dnbmanager != null)
{
if (!dnbmanager.IsDisposed)
list = dnbmanager.GetItems(itemName, itemType, true, true);
}
else
list = manager.GetItems(itemName, itemType, true);
if (list == null)
return;
foreach (BaseItem objItem in list)
{
if (prop.GetValue(objItem) != value)
prop.SetValue(objItem, value);
}
}
internal static ResourceManager GetResourceManager(bool bDefault)
{
string defaultResource = DEFAULT_RESOURCE;
DotNetBarResourcesAttribute att = Attribute.GetCustomAttribute(System.Reflection.Assembly.GetExecutingAssembly(), typeof(DotNetBarResourcesAttribute)) as DotNetBarResourcesAttribute;
if (att != null && att.NamespacePrefix != "")
defaultResource = att.NamespacePrefix + defaultResource;
else
defaultResource = "DevComponents.DotNetBar" + defaultResource;
ResourceManager rm = new ResourceManager(defaultResource, System.Reflection.Assembly.GetExecutingAssembly());
return rm;
}
internal static ResourceManager GetResourceManager()
{
string defaultResource = DEFAULT_RESOURCE;
DotNetBarResourcesAttribute att = Attribute.GetCustomAttribute(System.Reflection.Assembly.GetExecutingAssembly(), typeof(DotNetBarResourcesAttribute)) as DotNetBarResourcesAttribute;
if (att != null && att.NamespacePrefix != "")
defaultResource = att.NamespacePrefix + defaultResource;
else
defaultResource = "DevComponents.DotNetBar" + defaultResource;
if (ms_ResourceName == "")
{
System.Globalization.CultureInfo cu = System.Threading.Thread.CurrentThread.CurrentUICulture;
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
string[] arr = assembly.GetManifestResourceNames();
int count = 0; // Make sure this exits
while (cu.LCID != 127 && count < 16)
{
if (assembly.GetManifestResourceInfo(defaultResource + "_" + cu.Name.ToLower() + ".resources") != null)
{
ms_ResourceName = defaultResource + "_" + cu.Name.ToLower();
break;
}
else if (assembly.GetManifestResourceInfo(defaultResource + "_" + cu.TwoLetterISOLanguageName.ToLower() + ".resources") != null)
{
ms_ResourceName = defaultResource + "_" + cu.TwoLetterISOLanguageName.ToLower();
break;
}
cu = cu.Parent;
count++;
}
if (ms_ResourceName == "")
ms_ResourceName = defaultResource;
}
ResourceManager rm = new ResourceManager(ms_ResourceName, System.Reflection.Assembly.GetExecutingAssembly());
return rm;
}
internal static void DrawBorder(Graphics g, eBorderType bordertype, Rectangle r, Color singleLineColor)
{
DrawBorder(g, bordertype, r, singleLineColor, eBorderSide.Left | eBorderSide.Right | eBorderSide.Top | eBorderSide.Bottom);
}
internal static void DrawBorder(Graphics g, eBorderType bordertype, Rectangle r, Color singleLineColor, eBorderSide side)
{
DrawBorder(g, bordertype, r, singleLineColor, side, System.Drawing.Drawing2D.DashStyle.Solid);
}
internal static void DrawBorder(Graphics g, eBorderType bordertype, Rectangle r, Color singleLineColor, eBorderSide side, System.Drawing.Drawing2D.DashStyle borderDashStyle)
{
DrawBorder(g, bordertype, r, singleLineColor, side, borderDashStyle, 1);
}
internal static void DrawBorder(Graphics g, eBorderType bordertype, Rectangle r, Color singleLineColor, eBorderSide side, System.Drawing.Drawing2D.DashStyle borderDashStyle, int lineWidth)
{
if (lineWidth <= 0) return;
System.Windows.Forms.Border3DSide border3dside;
if (side == eBorderSide.All)
border3dside = System.Windows.Forms.Border3DSide.All;
else
border3dside = (((side | eBorderSide.Left) != 0) ? System.Windows.Forms.Border3DSide.Left : 0) |
(((side | eBorderSide.Right) != 0) ? System.Windows.Forms.Border3DSide.Right : 0) |
(((side | eBorderSide.Top) != 0) ? System.Windows.Forms.Border3DSide.Top : 0) |
(((side | eBorderSide.Bottom) != 0) ? System.Windows.Forms.Border3DSide.Bottom : 0);
switch (bordertype)
{
case eBorderType.Bump:
{
System.Windows.Forms.ControlPaint.DrawBorder3D(g, r, System.Windows.Forms.Border3DStyle.Bump, border3dside);
break;
}
case eBorderType.Etched:
System.Windows.Forms.ControlPaint.DrawBorder3D(g, r, System.Windows.Forms.Border3DStyle.Etched, border3dside);
break;
case eBorderType.Raised:
System.Windows.Forms.ControlPaint.DrawBorder3D(g, r, System.Windows.Forms.Border3DStyle.RaisedInner, border3dside);
break;
case eBorderType.Sunken:
System.Windows.Forms.ControlPaint.DrawBorder3D(g, r, System.Windows.Forms.Border3DStyle.SunkenOuter, border3dside);
break;
case eBorderType.SingleLine:
{
SmoothingMode sm = g.SmoothingMode;
g.SmoothingMode = SmoothingMode.None;
using (Pen pen = new Pen(singleLineColor, lineWidth))
{
pen.DashStyle = borderDashStyle;
int offset = lineWidth / 2;
if ((side & eBorderSide.Left) != 0)
g.DrawLine(pen, r.X + offset, r.Y, r.X + offset, r.Bottom - (lineWidth > 1 ? 0 : 1));
if ((side & eBorderSide.Top) != 0)
g.DrawLine(pen, r.X, r.Y + offset, r.Right - 1, r.Y + offset);
if (offset == 0) offset = 1;
if ((side & eBorderSide.Right) != 0)
g.DrawLine(pen, r.Right - offset, r.Y, r.Right - offset, r.Bottom - (lineWidth>1?0:1));
if ((side & eBorderSide.Bottom) != 0)
g.DrawLine(pen, r.X, r.Bottom - offset, r.Right - 1, r.Bottom - offset);
}
g.SmoothingMode = sm;
break;
}
case eBorderType.DoubleLine:
{
using (Pen pen = new Pen(singleLineColor, lineWidth))
{
pen.DashStyle = borderDashStyle;
for (int i = 0; i < lineWidth + 1; i += lineWidth)
{
if ((side & eBorderSide.Left) != 0)
g.DrawLine(pen, r.X, r.Y, r.X, r.Bottom - 1);
if ((side & eBorderSide.Top) != 0)
g.DrawLine(pen, r.X, r.Y, r.Right - 1, r.Y);
if ((side & eBorderSide.Right) != 0)
g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, r.Bottom - 1);
if ((side & eBorderSide.Bottom) != 0)
g.DrawLine(pen, r.X, r.Bottom - 1, r.Right - 1, r.Bottom - 1);
r.Inflate(-1, -1);
}
}
break;
}
default:
break;
}
}
internal static void DrawBorder3D(Graphics g, int x, int y, int width, int height, System.Windows.Forms.Border3DStyle style, System.Windows.Forms.Border3DSide side)
{
DrawBorder3D(g, x, y, width, height, style, side, SystemColors.Control, true);
}
internal static void DrawBorder3D(Graphics g, int x, int y, int width, int height, System.Windows.Forms.Border3DStyle style, Color clr)
{
DrawBorder3D(g, x, y, width, height, style, System.Windows.Forms.Border3DSide.All, clr, true);
}
internal static void DrawBorder3D(Graphics g, int x, int y, int width, int height, System.Windows.Forms.Border3DStyle style)
{
DrawBorder3D(g, x, y, width, height, style, System.Windows.Forms.Border3DSide.All, SystemColors.Control, true);
}
internal static void DrawBorder3D(Graphics g, Rectangle r, System.Windows.Forms.Border3DStyle style, System.Windows.Forms.Border3DSide side, Color baseColor)
{
DrawBorder3D(g, r.X, r.Y, r.Width, r.Height, style, side, baseColor, true);
}
internal static void DrawBorder3D(Graphics g, Rectangle r, System.Windows.Forms.Border3DStyle style, System.Windows.Forms.Border3DSide side, Color baseColor, bool bFillInner)
{
DrawBorder3D(g, r.X, r.Y, r.Width, r.Height, style, side, baseColor, bFillInner);
}
internal static void DrawBorder3D(Graphics g, Rectangle r, System.Windows.Forms.Border3DStyle style)
{
DrawBorder3D(g, r.X, r.Y, r.Width, r.Height, style, System.Windows.Forms.Border3DSide.All, SystemColors.Control, true);
}
internal static void DrawBorder3D(Graphics g, int x, int y, int width, int height, System.Windows.Forms.Border3DStyle style, System.Windows.Forms.Border3DSide side, Color baseColor)
{
DrawBorder3D(g, x, y, width, height, style, side, baseColor, true);
}
internal static void DrawBorder3D(Graphics g, int x, int y, int width, int height, System.Windows.Forms.Border3DStyle style, System.Windows.Forms.Border3DSide side, Color baseColor, bool bFillInner)
{
if (bFillInner)
g.FillRectangle(new SolidBrush(baseColor), x, y, width, height);
Color colorLight = System.Windows.Forms.ControlPaint.Light(baseColor);
Color colorDark = System.Windows.Forms.ControlPaint.Dark(baseColor);
Pen penLight = null;
Pen penDark = null;
Pen penBase = new Pen(baseColor);
height--;
width--;
switch (style)
{
case System.Windows.Forms.Border3DStyle.RaisedInner:
{
penLight = new Pen(colorLight, 1);
penDark = new Pen(colorDark, 1);
if ((side & System.Windows.Forms.Border3DSide.Top) != 0)
g.DrawLine(penLight, x, y, x + width, y);
if ((side & System.Windows.Forms.Border3DSide.Left) != 0)
g.DrawLine(penLight, x, y, x, y + height);
if ((side & System.Windows.Forms.Border3DSide.Right) != 0)
g.DrawLine(penDark, x + width, y, x + width, y + height);
if ((side & System.Windows.Forms.Border3DSide.Bottom) != 0)
g.DrawLine(penDark, x, y + height, x + width, y + height);
break;
}
case System.Windows.Forms.Border3DStyle.SunkenOuter:
{
penLight = new Pen(colorLight, 1);
penDark = new Pen(colorDark, 1);
if ((side & System.Windows.Forms.Border3DSide.Top) != 0)
g.DrawLine(penDark, x, y, x + width, y);
if ((side & System.Windows.Forms.Border3DSide.Left) != 0)
g.DrawLine(penDark, x, y, x, y + height);
if ((side & System.Windows.Forms.Border3DSide.Right) != 0)
g.DrawLine(penLight, x + width, y, x + width, y + height);
if ((side & System.Windows.Forms.Border3DSide.Bottom) != 0)
g.DrawLine(penLight, x, y + height, x + width, y + height);
break;
}
case System.Windows.Forms.Border3DStyle.Raised:
{
if ((side & System.Windows.Forms.Border3DSide.Top) != 0 &&
(side & System.Windows.Forms.Border3DSide.Left) != 0 &&
(side & System.Windows.Forms.Border3DSide.Right) != 0 &&
(side & System.Windows.Forms.Border3DSide.Bottom) != 0)
{
penLight = new Pen(Color.White, 1);
g.DrawRectangle(penBase, x, y, width, height);
g.DrawLine(penLight, x + 1, y + 1, x + width - 1, y + 1);
g.DrawLine(penLight, x + 1, y + 1, x + 1, y + height - 1);
}
else
{
penDark = new Pen(colorLight, 1);
penLight = new Pen(System.Windows.Forms.ControlPaint.LightLight(baseColor), 1);
if ((side & System.Windows.Forms.Border3DSide.Top) != 0)
{
g.DrawLine(penDark, x, y, x + width, y);
g.DrawLine(penLight, x + 1, y + 1, x + width - 2, y + 1);
}
if ((side & System.Windows.Forms.Border3DSide.Left) != 0)
{
g.DrawLine(penDark, x, y, x, y + height);
g.DrawLine(penLight, x + 1, y + 1, x + 1, y + height - 2);
}
penDark.Dispose();
penLight.Dispose();
penDark = new Pen(System.Windows.Forms.ControlPaint.DarkDark(baseColor), 1);
penLight = new Pen(colorDark, 1);
if ((side & System.Windows.Forms.Border3DSide.Right) != 0)
{
g.DrawLine(penDark, x + width, y, x + width, y + height);
g.DrawLine(penLight, x + width - 1, y + 1, x + width - 1, y + height - 1);
}
if ((side & System.Windows.Forms.Border3DSide.Bottom) != 0)
{
g.DrawLine(penDark, x, y + height, x + width, y + height);
g.DrawLine(penLight, x + 1, y + height - 1, x + width - 1, y + height - 1);
}
}
break;
}
case System.Windows.Forms.Border3DStyle.Sunken:
{
penDark = new Pen(System.Windows.Forms.ControlPaint.DarkDark(baseColor), 1);
penLight = new Pen(colorDark, 1);
if ((side & System.Windows.Forms.Border3DSide.Top) != 0)
{
g.DrawLine(penDark, x, y, x + width, y);
g.DrawLine(penLight, x + 1, y + 1, x + width - 2, y + 1);
}
if ((side & System.Windows.Forms.Border3DSide.Left) != 0)
{
g.DrawLine(penDark, x, y, x, y + height);
g.DrawLine(penLight, x + 1, y + 1, x + 1, y + height - 2);
}
penDark.Dispose();
penLight.Dispose();
penDark = new Pen(colorLight, 1);
penLight = new Pen(System.Windows.Forms.ControlPaint.LightLight(baseColor), 1);
if ((side & System.Windows.Forms.Border3DSide.Right) != 0)
{
g.DrawLine(penDark, x + width, y, x + width, y + height);
g.DrawLine(penLight, x + width - 1, y + 1, x + width - 1, y + height - 1);
}
if ((side & System.Windows.Forms.Border3DSide.Bottom) != 0)
{
g.DrawLine(penDark, x, y + height, x + width, y + height);
g.DrawLine(penLight, x + 1, y + height - 1, x + width - 1, y + height - 1);
}
break;
}
}
if (penLight != null)
penLight.Dispose();
if (penDark != null)
penDark.Dispose();
penBase.Dispose();
}
internal static System.Drawing.Drawing2D.LinearGradientBrush CreateLinearGradientBrush(Rectangle r, Color color1, Color color2, float gradientAngle)
{
if (r.Width <= 0)
r.Width = 1;
if (r.Height <= 0)
r.Height = 1;
return new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(r.X, r.Y - 1, r.Width, r.Height + 1), color1, color2, gradientAngle);
}
internal static System.Drawing.Drawing2D.LinearGradientBrush CreateLinearGradientBrush(RectangleF r, Color color1, Color color2, float gradientAngle)
{
if (r.Width <= 0)
r.Width = 1;
if (r.Height <= 0)
r.Height = 1;
return new System.Drawing.Drawing2D.LinearGradientBrush(new RectangleF(r.X, r.Y - 1, r.Width, r.Height + 1), color1, color2, gradientAngle);
}
internal static System.Drawing.Drawing2D.LinearGradientBrush CreateLinearGradientBrush(Rectangle r, Color color1, Color color2, float gradientAngle, bool isAngleScalable)
{
if (r.Width <= 0)
r.Width = 1;
if (r.Height <= 0)
r.Height = 1;
return new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(r.X, r.Y - 1, r.Width, r.Height + 1), color1, color2, gradientAngle, isAngleScalable);
}
public static void DrawDesignTimeSelection(Graphics g, Rectangle r, Color backColor, Color border, int penWidth)
{
if (r.Width <= 0 || r.Height <= 0)
return;
if (!backColor.IsEmpty && backColor != Color.Transparent)
{
if ((double)backColor.GetBrightness() < 0.5)
border = System.Windows.Forms.ControlPaint.Light(backColor);
else
border = System.Windows.Forms.ControlPaint.Dark(backColor);
}
using (Pen pen = new Pen(border, penWidth))
{
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
r.Width--;
r.Height--;
g.DrawRectangle(pen, r);
}
}
public static BaseItem GetSubItemByName(BaseItem objParent, string ItemName)
{
return GetSubItemByName(objParent, ItemName, false);
}
public static BaseItem GetSubItemByName(BaseItem objParent, string ItemName, bool useGlobalName)
{
if (objParent == null)
return null;
foreach (BaseItem objItem in objParent.SubItems)
{
if (useGlobalName && objItem.GlobalName == ItemName || !useGlobalName && objItem.Name == ItemName)
return objItem;
if (objItem.SubItems.Count > 0)
{
BaseItem item = GetSubItemByName(objItem, ItemName, useGlobalName);
if (item != null)
return item;
}
}
if (objParent is GalleryContainer)
{
return GetSubItemByName(((GalleryContainer)objParent).PopupGalleryItem, ItemName, useGlobalName);
}
return null;
}
public static void GetSubItemsByName(BaseItem objParent, string ItemName, ArrayList list)
{
GetSubItemsByName(objParent, ItemName, list, false);
}
public static void GetSubItemsByName(BaseItem objParent, string ItemName, ArrayList list, bool useGlobalName)
{
if (objParent == null) return;
foreach (BaseItem objItem in objParent.SubItems)
{
if (useGlobalName && objItem.GlobalName == ItemName || !useGlobalName && objItem.Name == ItemName)
list.Add(objItem);
else if (objItem is ControlContainerItem)
{
ControlContainerItem cc = objItem as ControlContainerItem;
if (cc.Control is RibbonBar)
{
RibbonBar rb = cc.Control as RibbonBar;
ArrayList rbList = rb.GetItems(ItemName);
list.AddRange(rbList);
}
}
if (objItem.SubItems.Count > 0)
GetSubItemsByName(objItem, ItemName, list, useGlobalName);
}
if (objParent is GalleryContainer)
{
GetSubItemsByName(((GalleryContainer)objParent).PopupGalleryItem, ItemName, list, useGlobalName);
}
}
public static void GetSubItemsByNameAndType(BaseItem objParent, string ItemName, ArrayList list, Type itemType)
{
GetSubItemsByNameAndType(objParent, ItemName, list, itemType, false);
}
public static void GetSubItemsByNameAndType(BaseItem objParent, string ItemName, ArrayList list, Type itemType, bool useGlobalName)
{
if (objParent == null) return;
foreach (BaseItem objItem in objParent.SubItems)
{
if (objItem.GetType() == itemType && (useGlobalName && objItem.GlobalName == ItemName || !useGlobalName && objItem.Name == ItemName))
list.Add(objItem);
else if (objItem is ControlContainerItem)
{
ControlContainerItem cc = objItem as ControlContainerItem;
if (cc.Control is RibbonBar)
{
RibbonBar rb = cc.Control as RibbonBar;
ArrayList rbList = rb.GetItems(ItemName, itemType, useGlobalName);
list.AddRange(rbList);
}
}
if (objItem.SubItems.Count > 0)
GetSubItemsByNameAndType(objItem, ItemName, list, itemType, useGlobalName);
}
}
public static string ColorToString(Color clr)
{
if (clr.IsSystemColor)
return ("." + clr.Name);
else
return clr.ToArgb().ToString();
}
public static Color ColorFromString(string sclr)
{
if (sclr == "")
return Color.Empty;
if (sclr[0] == '.')
return Color.FromName(sclr.Substring(1));
else
return Color.FromArgb(System.Xml.XmlConvert.ToInt32(sclr));
}
public static bool SupportsAnimation
{
get { return m_SupportsAnimation; }
}
internal static ScreenInformation PrimaryScreen
{
get
{
if (m_Screens.Count == 0)
RefreshScreens();
foreach (ScreenInformation s in m_Screens)
{
if (s.Primary)
return s;
}
if (m_Screens.Count > 0)
return m_Screens[0];
return new ScreenInformation(new Rectangle(0, 0, 1024, 768), new Rectangle(0, 0, 1024, 768), true);
}
}
internal static ScreenInformation ScreenFromPoint(Point pScreen)
{
if (m_Screens.Count == 0)
RefreshScreens();
//foreach (System.Windows.Forms.Screen s in System.Windows.Forms.Screen.AllScreens)
foreach (ScreenInformation s in m_Screens)
{
if (s.Bounds.Contains(pScreen))
{
return s;
}
}
System.Windows.Forms.Screen scr = System.Windows.Forms.Screen.FromPoint(pScreen);
if (scr != null && scr.Bounds.Contains(pScreen))
return new ScreenInformation(scr.Bounds, scr.WorkingArea);
return null;
}
internal static ScreenInformation ScreenFromControl(System.Windows.Forms.Control control)
{
Rectangle r;
if (control.Parent != null)
{
Point screenLocation = control.PointToScreen(Point.Empty);
r = new Rectangle(screenLocation, control.Size);
}
else
r = new Rectangle(control.Location, control.Size);
if (m_Screens.Count == 0)
RefreshScreens();
//foreach (System.Windows.Forms.Screen s in System.Windows.Forms.Screen.AllScreens)
foreach (ScreenInformation s in m_Screens)
{
//if(s.Bounds.Contains(r))
if (s.Bounds.Contains(r))
{
return s;
}
}
System.Windows.Forms.Screen scr = System.Windows.Forms.Screen.FromControl(control);
if (scr != null)
return new ScreenInformation(scr.Bounds, scr.WorkingArea);
return null;
}
private static List<ScreenInformation> m_Screens = new List<ScreenInformation>(2);
public static void RefreshScreens()
{
m_Screens.Clear();
foreach (System.Windows.Forms.Screen s in System.Windows.Forms.Screen.AllScreens)
m_Screens.Add(new ScreenInformation(s.Bounds, s.WorkingArea, s.Primary));
}
public static void SetExplorerBarStyle(ExplorerBar bar, eExplorerBarStockStyle stockStyle)
{
if (stockStyle == eExplorerBarStockStyle.SystemColors)
{
bar.BackStyle.Reset();
bar.BackStyle.BackColorSchemePart = eColorSchemePart.ExplorerBarBackground;
bar.BackStyle.BackColor2SchemePart = eColorSchemePart.ExplorerBarBackground2;
bar.BackStyle.BackColorGradientAngle = bar.ColorScheme.ExplorerBarBackgroundGradientAngle;
}
else if (stockStyle != eExplorerBarStockStyle.Custom)
{
ePredefinedColorScheme scheme = ePredefinedColorScheme.Blue2003;
if (stockStyle == eExplorerBarStockStyle.Silver || stockStyle == eExplorerBarStockStyle.SilverSpecial)
scheme = ePredefinedColorScheme.Silver2003;
else if (stockStyle == eExplorerBarStockStyle.OliveGreen || stockStyle == eExplorerBarStockStyle.OliveGreenSpecial)
scheme = ePredefinedColorScheme.OliveGreen2003;
ColorScheme cs = new ColorScheme(eDotNetBarStyle.Office2003);
cs.PredefinedColorScheme = scheme;
bar.BackStyle.Reset();
bar.BackStyle.BackColor = cs.ExplorerBarBackground;
bar.BackStyle.BackColor2 = cs.ExplorerBarBackground2;
bar.BackStyle.BackColorGradientAngle = cs.ExplorerBarBackgroundGradientAngle;
}
}
public static void SetExplorerBarStyle(ExplorerBarGroupItem group, eExplorerBarStockStyle stockStyle)
{
if (stockStyle == eExplorerBarStockStyle.SystemColors)
{
eExplorerBarStockStyle stock = eExplorerBarStockStyle.Blue;
eExplorerBarStockStyle special = eExplorerBarStockStyle.BlueSpecial;
if (SystemColors.Control.ToArgb() == Color.FromArgb(224, 223, 227).ToArgb() && SystemColors.Highlight.ToArgb() == Color.FromArgb(178, 180, 191).ToArgb())
{
stock = eExplorerBarStockStyle.Silver;
special = eExplorerBarStockStyle.SilverSpecial;
}
else if (SystemColors.Control.ToArgb() == Color.FromArgb(236, 233, 216).ToArgb() && SystemColors.Highlight.ToArgb() == Color.FromArgb(147, 160, 112).ToArgb())
{
stock = eExplorerBarStockStyle.OliveGreen;
special = eExplorerBarStockStyle.OliveGreenSpecial;
}
if (group.XPSpecialGroup)
stockStyle = special;
else
stockStyle = stock;
}
if (stockStyle != eExplorerBarStockStyle.Custom)
{
group.TitleStyle.Reset();
group.TitleHotStyle.Reset();
group.BackStyle.Reset();
group.TitleStyle.CornerTypeTopLeft = eCornerType.Rounded;
group.TitleStyle.CornerTypeTopRight = eCornerType.Rounded;
group.TitleStyle.CornerDiameter = 3;
group.TitleHotStyle.CornerTypeTopLeft = eCornerType.Rounded;
group.TitleHotStyle.CornerTypeTopRight = eCornerType.Rounded;
group.TitleHotStyle.CornerDiameter = 3;
}
switch (stockStyle)
{
case eExplorerBarStockStyle.Blue:
{
group.TitleStyle.BackColor = Color.White;
group.TitleStyle.BackColor2 = Color.FromArgb(199, 211, 247);
group.TitleStyle.TextColor = Color.FromArgb(33, 93, 198);
group.TitleHotStyle.TextColor = Color.FromArgb(66, 142, 255);
group.TitleHotStyle.BackColor = Color.White;
group.TitleHotStyle.BackColor2 = Color.FromArgb(199, 211, 247); ;
group.BackStyle.BackColor = Color.FromArgb(214, 223, 247);
group.BackStyle.BorderBottom = eStyleBorderType.Solid;
group.BackStyle.BorderTop = eStyleBorderType.None;
group.BackStyle.BorderLeft = eStyleBorderType.Solid;
group.BackStyle.BorderRight = eStyleBorderType.Solid;
group.BackStyle.BorderBottomWidth = 1;
group.BackStyle.BorderTopWidth = 0;
group.BackStyle.BorderLeftWidth = 1;
group.BackStyle.BorderRightWidth = 1;
group.BackStyle.BorderColor = Color.White;
group.ExpandBackColor = Color.White;
group.ExpandBorderColor = Color.FromArgb(174, 182, 216);
group.ExpandForeColor = Color.FromArgb(0, 60, 165);
group.ExpandHotBackColor = Color.White;
group.ExpandHotBorderColor = Color.FromArgb(174, 182, 216);
group.ExpandHotForeColor = Color.FromArgb(66, 142, 255);
break;
}
case eExplorerBarStockStyle.BlueSpecial:
{
group.TitleStyle.BackColor = Color.FromArgb(0, 73, 181);
group.TitleStyle.BackColor2 = Color.FromArgb(41, 93, 206);
group.TitleStyle.TextColor = Color.White;
group.TitleHotStyle.TextColor = Color.FromArgb(66, 142, 255);
group.TitleHotStyle.BackColor = Color.FromArgb(0, 73, 181);
group.TitleHotStyle.BackColor2 = Color.FromArgb(41, 93, 206);
group.BackStyle.Reset();
group.BackStyle.BackColor = Color.FromArgb(239, 243, 255);
group.BackStyle.BorderBottom = eStyleBorderType.Solid;
group.BackStyle.BorderTop = eStyleBorderType.None;
group.BackStyle.BorderLeft = eStyleBorderType.Solid;
group.BackStyle.BorderRight = eStyleBorderType.Solid;
group.BackStyle.BorderBottomWidth = 1;
group.BackStyle.BorderTopWidth = 0;
group.BackStyle.BorderLeftWidth = 1;
group.BackStyle.BorderRightWidth = 1;
group.BackStyle.BorderColor = Color.White;
group.ExpandBackColor = Color.FromArgb(48, 97, 196);
group.ExpandBorderColor = Color.FromArgb(123, 168, 229);
group.ExpandForeColor = Color.White;
group.ExpandHotBackColor = Color.FromArgb(48, 97, 196);
group.ExpandHotBorderColor = Color.FromArgb(123, 168, 229);
group.ExpandHotForeColor = Color.FromArgb(172, 205, 255);
break;
}
case eExplorerBarStockStyle.OliveGreen:
{
group.TitleStyle.BackColor = Color.FromArgb(255, 252, 236);
group.TitleStyle.BackColor2 = Color.FromArgb(224, 231, 184);
group.TitleStyle.TextColor = Color.FromArgb(86, 102, 45);
group.TitleHotStyle.TextColor = Color.FromArgb(114, 146, 29);
group.TitleHotStyle.BackColor = Color.FromArgb(255, 252, 236);
group.TitleHotStyle.BackColor2 = Color.FromArgb(224, 231, 184);
group.BackStyle.Reset();
group.BackStyle.BackColor = Color.FromArgb(246, 246, 236);
group.BackStyle.BorderBottom = eStyleBorderType.Solid;
group.BackStyle.BorderTop = eStyleBorderType.None;
group.BackStyle.BorderLeft = eStyleBorderType.Solid;
group.BackStyle.BorderRight = eStyleBorderType.Solid;
group.BackStyle.BorderBottomWidth = 1;
group.BackStyle.BorderTopWidth = 0;
group.BackStyle.BorderLeftWidth = 1;
group.BackStyle.BorderRightWidth = 1;
group.BackStyle.BorderColor = Color.White;
group.ExpandBackColor = Color.FromArgb(254, 254, 253);
group.ExpandBorderColor = Color.FromArgb(194, 206, 185);
group.ExpandForeColor = Color.FromArgb(75, 103, 28);
group.ExpandHotBackColor = Color.FromArgb(254, 254, 253);
group.ExpandHotBorderColor = Color.FromArgb(194, 206, 185);
group.ExpandHotForeColor = Color.FromArgb(114, 146, 29);
break;
}
case eExplorerBarStockStyle.OliveGreenSpecial:
{
group.TitleStyle.BackColor = Color.FromArgb(119, 140, 64);
group.TitleStyle.BackColor2 = Color.FromArgb(150, 168, 103);
group.TitleStyle.TextColor = Color.White;
group.TitleHotStyle.TextColor = Color.FromArgb(224, 231, 184);
group.TitleHotStyle.BackColor = Color.FromArgb(119, 140, 64);
group.TitleHotStyle.BackColor2 = Color.FromArgb(150, 168, 103);
group.BackStyle.Reset();
group.BackStyle.BackColor = Color.FromArgb(246, 246, 236);
group.BackStyle.BorderBottom = eStyleBorderType.Solid;
group.BackStyle.BorderTop = eStyleBorderType.None;
group.BackStyle.BorderLeft = eStyleBorderType.Solid;
group.BackStyle.BorderRight = eStyleBorderType.Solid;
group.BackStyle.BorderBottomWidth = 1;
group.BackStyle.BorderTopWidth = 0;
group.BackStyle.BorderLeftWidth = 1;
group.BackStyle.BorderRightWidth = 1;
group.BackStyle.BorderColor = Color.White;
group.ExpandBackColor = Color.FromArgb(129, 163, 79);
group.ExpandBorderColor = Color.FromArgb(191, 205, 156);
group.ExpandForeColor = Color.White;
group.ExpandHotBackColor = Color.FromArgb(130, 164, 80);
group.ExpandHotBorderColor = Color.FromArgb(182, 202, 139);
group.ExpandHotForeColor = Color.FromArgb(221, 237, 190);
break;
}
case eExplorerBarStockStyle.Silver:
{
group.TitleStyle.BackColor = Color.White;
group.TitleStyle.BackColor2 = Color.FromArgb(214, 215, 224);
group.TitleStyle.TextColor = Color.FromArgb(63, 61, 61);
group.TitleHotStyle.TextColor = Color.FromArgb(126, 124, 124);
group.TitleHotStyle.BackColor = Color.White;
group.TitleHotStyle.BackColor2 = Color.FromArgb(214, 215, 224);
group.BackStyle.Reset();
group.BackStyle.BackColor = Color.FromArgb(240, 241, 245);
group.BackStyle.BorderBottom = eStyleBorderType.Solid;
group.BackStyle.BorderTop = eStyleBorderType.None;
group.BackStyle.BorderLeft = eStyleBorderType.Solid;
group.BackStyle.BorderRight = eStyleBorderType.Solid;
group.BackStyle.BorderBottomWidth = 1;
group.BackStyle.BorderTopWidth = 0;
group.BackStyle.BorderLeftWidth = 1;
group.BackStyle.BorderRightWidth = 1;
group.BackStyle.BorderColor = Color.White;
group.ExpandBackColor = Color.White;
group.ExpandBorderColor = Color.FromArgb(188, 189, 203);
group.ExpandForeColor = Color.FromArgb(49, 68, 115);
group.ExpandHotBackColor = Color.White;
group.ExpandHotBorderColor = Color.FromArgb(194, 195, 208);
group.ExpandHotForeColor = Color.FromArgb(126, 124, 124);
break;
}
case eExplorerBarStockStyle.SilverSpecial:
{
group.TitleStyle.BackColor = Color.FromArgb(119, 119, 146);
group.TitleStyle.BackColor2 = Color.FromArgb(180, 182, 199);
group.TitleStyle.TextColor = Color.White;
group.TitleHotStyle.BackColor = Color.FromArgb(119, 119, 146);
group.TitleHotStyle.BackColor2 = Color.FromArgb(180, 182, 199);
group.TitleHotStyle.TextColor = Color.FromArgb(230, 230, 230);
group.BackStyle.Reset();
group.BackStyle.BackColor = Color.FromArgb(240, 241, 245);
group.BackStyle.BorderBottom = eStyleBorderType.Solid;
group.BackStyle.BorderTop = eStyleBorderType.None;
group.BackStyle.BorderLeft = eStyleBorderType.Solid;
group.BackStyle.BorderRight = eStyleBorderType.Solid;
group.BackStyle.BorderBottomWidth = 1;
group.BackStyle.BorderTopWidth = 0;
group.BackStyle.BorderLeftWidth = 1;
group.BackStyle.BorderRightWidth = 1;
group.BackStyle.BorderColor = Color.White;
group.ExpandBackColor = Color.FromArgb(111, 117, 151);
group.ExpandBorderColor = Color.FromArgb(196, 203, 224);
group.ExpandForeColor = Color.White;
group.ExpandHotBackColor = Color.FromArgb(111, 117, 151);
group.ExpandHotBorderColor = Color.FromArgb(196, 203, 224);
group.ExpandHotForeColor = Color.White;
break;
}
}
}
public static void SetExplorerBarStyle(ButtonItem item, eExplorerBarStockStyle stockStyle)
{
if (stockStyle == eExplorerBarStockStyle.SystemColors)
{
eExplorerBarStockStyle stock = eExplorerBarStockStyle.Blue;
if (SystemColors.Control.ToArgb() == Color.FromArgb(224, 223, 227).ToArgb() && SystemColors.Highlight.ToArgb() == Color.FromArgb(178, 180, 191).ToArgb())
{
stock = eExplorerBarStockStyle.Silver;
}
else if (SystemColors.Control.ToArgb() == Color.FromArgb(236, 233, 216).ToArgb() && SystemColors.Highlight.ToArgb() == Color.FromArgb(147, 160, 112).ToArgb())
{
stock = eExplorerBarStockStyle.OliveGreen;
}
stockStyle = stock;
}
switch (stockStyle)
{
case eExplorerBarStockStyle.Blue:
case eExplorerBarStockStyle.BlueSpecial:
{
item.ForeColor = Color.FromArgb(33, 93, 198);
item.HotForeColor = Color.FromArgb(66, 142, 255);
break;
}
case eExplorerBarStockStyle.OliveGreen:
case eExplorerBarStockStyle.OliveGreenSpecial:
{
item.ForeColor = Color.FromArgb(86, 102, 45);
item.HotForeColor = Color.FromArgb(114, 146, 29);
break;
}
case eExplorerBarStockStyle.Silver:
case eExplorerBarStockStyle.SilverSpecial:
{
item.ForeColor = Color.FromArgb(63, 61, 61);
item.HotForeColor = Color.FromArgb(126, 124, 124);
break;
}
default:
{
item.ForeColor = SystemColors.ControlText;
item.HotForeColor = SystemColors.ControlDark;
break;
}
}
}
public static System.Windows.Forms.MdiClient GetMdiClient(System.Windows.Forms.Form MdiForm)
{
if (!MdiForm.IsMdiContainer)
return null;
foreach (System.Windows.Forms.Control ctrl in MdiForm.Controls)
{
if (ctrl is System.Windows.Forms.MdiClient)
return (ctrl as System.Windows.Forms.MdiClient);
}
return null;
}
//internal static Bitmap CreateDisabledBitmap(Bitmap bmp)
//{
// if(bmp==null)
// return null;
// Bitmap bmpTarget=null;
// try
// {
// int nWidth = bmp.Width;
// int nHeight = bmp.Height;
// bmpTarget = new Bitmap(bmp);
// for (int iX = 0; iX < nWidth; iX++)
// {
// for (int iY = 0; iY < nHeight; iY++)
// {
// Color cr = bmp.GetPixel(iX, iY);
// if(cr.IsEmpty || cr==Color.Transparent)
// {
// bmpTarget.SetPixel(iX, iY, Color.Transparent);
// }
// else
// {
// byte nA = cr.A;
// byte nB = (byte) ((cr.B + 255) / 2);
// byte nG = (byte) ((cr.G + 255) / 2);
// byte nR = (byte) ((cr.R + 255) / 2);
// nR = nG = nB = (byte) (nR * 0.299 + nG * 0.587 + nB * 0.114);
// bmpTarget.SetPixel(iX, iY, Color.FromArgb(nA, nR, nG, nB));
// }
// }
// }
// }
// catch
// {
// return null;
// }
// return bmpTarget;
//}
internal static Icon CreateDisabledIcon(Icon ico)
{
try
{
System.IO.MemoryStream memStream = new System.IO.MemoryStream();
ico.Save(memStream);
byte[] array = memStream.ToArray();
int nIconCount = array[4];
for (int iIcon = 0; iIcon < nIconCount; iIcon++)
{
int nBaseOffset = 6 + iIcon * 16;
int nWidth = array[nBaseOffset + 0];
int nHeight = array[nBaseOffset + 1];
int nOffset = GetDWORD(ref array, nBaseOffset + 12);
//data at position
int nStructSize = GetDWORD(ref array, nOffset);
int nPlanes = GetWORD(ref array, nOffset + 12);
int nBitCount = GetWORD(ref array, nOffset + 14);
//process 32-bit Icons (bitcount=32)
//process 24-bit icons (bitcount=24)
//process 8-bit (256 color) icons (bitcount=8)
if (nPlanes != 1) continue;
int nSize = GetDWORD(ref array, nOffset + 20);
int nStep = 0;
switch (nBitCount)
{
case 32: nStep = 4; nSize = nWidth * nHeight * 4; break;
case 24: nStep = 3; nSize = nWidth * nHeight * 3; break;
case 8: nStep = 4; nSize = 1024; break; //256 colors x 4 bytes
default: continue;
}
int iDataStart = nOffset + nStructSize;
for (int iPtr = iDataStart; iPtr < iDataStart + nSize; iPtr += nStep)
{
byte nB = (byte)((array[iPtr] + 255) / 2);
byte nG = (byte)((array[iPtr + 1] + 255) / 2);
byte nR = (byte)((array[iPtr + 2] + 255) / 2);
if (!(nB == 127 && nG == 127 && nR == 127))
{
byte nNewRGB = (byte)(nR * 0.299 + nG * 0.587 + nB * 0.114);
array[iPtr] = nNewRGB;
array[iPtr + 1] = nNewRGB;
array[iPtr + 2] = nNewRGB;
}
}
}
return new Icon(new System.IO.MemoryStream(array));
}
catch (Exception)
{
return null;
}
}
private static int GetDWORD(ref byte[] array, int offset)
{
return array[offset] + (array[offset + 1] << 8) + (array[offset + 2] << 16) + (array[offset + 3] << 24);
}
private static int GetWORD(ref byte[] array, int offset)
{
return array[offset] + (array[offset + 1] << 8);
}
internal static void PaintBackgroundImage(Graphics g, Rectangle targetRect, Image backgroundImage, eStyleBackgroundImage backgroundImagePosition, int backgroundImageAlpha)
{
PaintBackgroundImage(g, targetRect, backgroundImage, (eBackgroundImagePosition)backgroundImagePosition, backgroundImageAlpha);
}
internal static void PaintBackgroundImage(Graphics g, Rectangle targetRect, Image backgroundImage, eBackgroundImagePosition backgroundImagePosition, int backgroundImageAlpha)
{
if (backgroundImage == null)
return;
Rectangle r = targetRect;
System.Drawing.Imaging.ImageAttributes imageAtt = null;
if (backgroundImageAlpha != 255)
{
float[][] matrixItems ={
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, (float)backgroundImageAlpha/255, 0},
new float[] {0, 0, 0, 0, 1}};
System.Drawing.Imaging.ColorMatrix colorMatrix = new System.Drawing.Imaging.ColorMatrix(matrixItems);
//System.Drawing.Imaging.ColorMatrix colorMatrix = new System.Drawing.Imaging.ColorMatrix();
//colorMatrix.Matrix33 = 255 - backgroundImageAlpha;
imageAtt = new System.Drawing.Imaging.ImageAttributes();
imageAtt.SetColorMatrix(colorMatrix, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap);
}
switch (backgroundImagePosition)
{
case eBackgroundImagePosition.Stretch:
{
if (imageAtt != null)
g.DrawImage(backgroundImage, r, 0, 0, backgroundImage.Width, backgroundImage.Height, GraphicsUnit.Pixel, imageAtt);
else
g.DrawImage(backgroundImage, r, 0, 0, backgroundImage.Width, backgroundImage.Height, GraphicsUnit.Pixel);
break;
}
case eBackgroundImagePosition.CenterLeft:
case eBackgroundImagePosition.CenterRight:
{
Rectangle destRect = new Rectangle(r.X, r.Y, Dpi.Width(backgroundImage.Width), Dpi.Height(backgroundImage.Height));
if (r.Width > destRect.Width && backgroundImagePosition == eBackgroundImagePosition.CenterRight)
destRect.X += (r.Width - destRect.Width);
destRect.Y += (r.Height - destRect.Height) / 2;
if (imageAtt != null)
g.DrawImage(backgroundImage, destRect, 0, 0, backgroundImage.Width, backgroundImage.Height, GraphicsUnit.Pixel, imageAtt);
else
g.DrawImage(backgroundImage, destRect, 0, 0, backgroundImage.Width, backgroundImage.Height, GraphicsUnit.Pixel);
break;
}
case eBackgroundImagePosition.Center:
{
Rectangle destRect = new Rectangle(r.X, r.Y, Dpi.Width(backgroundImage.Width), Dpi.Height(backgroundImage.Height));
if (r.Width > destRect.Width)
destRect.X += (r.Width - destRect.Width) / 2;
if (r.Height > destRect.Height)
destRect.Y += (r.Height - destRect.Height) / 2;
if (imageAtt != null)
g.DrawImage(backgroundImage, destRect, 0, 0, backgroundImage.Width, backgroundImage.Height, GraphicsUnit.Pixel, imageAtt);
else
g.DrawImage(backgroundImage, destRect, 0, 0, backgroundImage.Width, backgroundImage.Height, GraphicsUnit.Pixel);
break;
}
case eBackgroundImagePosition.TopLeft:
case eBackgroundImagePosition.TopRight:
case eBackgroundImagePosition.BottomLeft:
case eBackgroundImagePosition.BottomRight:
{
Rectangle destRect = new Rectangle(r.X, r.Y, Dpi.Width(backgroundImage.Width), Dpi.Height(backgroundImage.Height));
if (backgroundImagePosition == eBackgroundImagePosition.TopRight)
destRect.X = r.Right - destRect.Width;
else if (backgroundImagePosition == eBackgroundImagePosition.BottomLeft)
destRect.Y = r.Bottom - destRect.Height;
else if (backgroundImagePosition == eBackgroundImagePosition.BottomRight)
{
destRect.Y = r.Bottom - destRect.Height;
destRect.X = r.Right - destRect.Width;
}
if (imageAtt != null)
g.DrawImage(backgroundImage, destRect, 0, 0, backgroundImage.Width, backgroundImage.Height, GraphicsUnit.Pixel, imageAtt);
else
g.DrawImage(backgroundImage, destRect, 0, 0, backgroundImage.Width, backgroundImage.Height, GraphicsUnit.Pixel);
break;
}
case eBackgroundImagePosition.Tile:
{
if (imageAtt != null)
{
int imageWidth = Dpi.Width(backgroundImage.Width);
int imageHeight = Dpi.Height(backgroundImage.Height);
if (r.Width > imageWidth || r.Height > imageHeight)
{
int x = r.X, y = r.Y;
while (y < r.Bottom)
{
while (x < r.Right)
{
Rectangle destRect = new Rectangle(x, y, imageWidth, imageHeight);
if (destRect.Right > r.Right)
destRect.Width = destRect.Width - (destRect.Right - r.Right);
if (destRect.Bottom > r.Bottom)
destRect.Height = destRect.Height - (destRect.Bottom - r.Bottom);
g.DrawImage(backgroundImage, destRect, 0, 0, imageWidth, imageHeight, GraphicsUnit.Pixel, imageAtt);
x += imageWidth;
}
x = r.X;
y += imageHeight;
}
}
else
{
g.DrawImage(backgroundImage, new Rectangle(0, 0, imageWidth, imageHeight), 0, 0, backgroundImage.Width, backgroundImage.Height, GraphicsUnit.Pixel, imageAtt);
}
}
else
{
SmoothingMode sm = g.SmoothingMode;
g.SmoothingMode = SmoothingMode.None;
using (TextureBrush brush = new TextureBrush(backgroundImage))
{
brush.WrapMode = System.Drawing.Drawing2D.WrapMode.Tile;
g.FillRectangle(brush, r);
}
g.SmoothingMode = sm;
}
break;
}
}
}
public static bool IsSystemKey(System.Windows.Forms.Keys key)
{
if (key == Keys.Add || key == Keys.Alt || key == Keys.Apps || key == Keys.Attn ||
key == Keys.Back || key == Keys.Escape || key == Keys.Enter ||
(key >= Keys.F1 && key <= Keys.F19) || key == Keys.Tab)
return true;
return false;
}
public static bool IsFormActive(Form f)
{
if (f == null) return false;
if (Form.ActiveForm == f)
{
if (f.IsMdiChild)
{
if (f.MdiParent != null)
{
if (f.MdiParent.ActiveMdiChild == f)
return true;
else
return false;
}
}
return true;
}
return false;
}
public static void AnimateControl(System.Windows.Forms.Control control, bool show, int animationTime, Rectangle rectStart, Rectangle rectEnd)
{
control.Bounds = rectStart;
if (!control.Visible)
control.Visible = true;
bool directSet = false;
if (animationTime <= 0)
directSet = true;
TimeSpan time = new TimeSpan(0, 0, 0, 0, animationTime);
int dxLoc, dyLoc;
int dWidth, dHeight;
dxLoc = dyLoc = dWidth = dHeight = 0;
if (rectStart.Left == rectEnd.Left &&
rectStart.Top == rectEnd.Top &&
rectStart.Right == rectEnd.Right && rectStart.Height != rectEnd.Height)
{
dHeight = (rectEnd.Height > rectStart.Height ? 1 : -1);
}
else if (rectStart.Left == rectEnd.Left &&
rectStart.Top == rectEnd.Top &&
rectStart.Bottom == rectEnd.Bottom && rectStart.Width != rectEnd.Width)
{
dWidth = (rectEnd.Width > rectStart.Width ? 1 : -1);
}
else if (rectStart.Right == rectEnd.Right &&
rectStart.Top == rectEnd.Top &&
rectStart.Bottom == rectEnd.Bottom && rectStart.Width != rectEnd.Width)
{
dxLoc = (rectEnd.Width > rectStart.Width ? -1 : 1);
dWidth = (rectEnd.Width > rectStart.Width ? 1 : -1);
}
else if (rectStart.Right == rectEnd.Right &&
rectStart.Left == rectEnd.Left &&
rectStart.Bottom == rectEnd.Bottom && rectStart.Height != rectEnd.Height)
{
dyLoc = (rectEnd.Height > rectStart.Height ? -1 : 1);
dHeight = (rectEnd.Height > rectStart.Height ? 1 : -1);
}
else if (rectEnd.X != rectStart.X && rectEnd.Y == rectStart.Y && rectStart.Height == rectEnd.Height && rectEnd.Width == rectStart.Width)
{
// Simple to left move of the control
dxLoc = (rectEnd.X > rectStart.X ? 1 : -1);
}
else if (rectEnd.Y != rectStart.Y && rectEnd.X == rectStart.X && rectStart.Height == rectEnd.Height && rectEnd.Width == rectStart.Width)
{
// Simple to left move of the control
dxLoc = (rectEnd.Y > rectStart.Y ? 1 : -1);
}
else
directSet = true;
if (directSet)
{
control.Bounds = rectEnd;
}
else
{
int speedFactor = 1;
int totalPixels = (rectStart.Width != rectEnd.Width) ?
Math.Abs(rectStart.Width - rectEnd.Width) :
Math.Abs(rectStart.Height - rectEnd.Height);
if (totalPixels == 0 && rectStart.Width == rectEnd.Width && rectStart.Height == rectEnd.Height)
{
if (rectEnd.X - rectStart.X != 0)
totalPixels = Math.Abs(rectStart.X - rectEnd.X);
else if (rectEnd.Y - rectStart.Y != 0)
totalPixels = Math.Abs(rectStart.Y - rectEnd.Y);
}
int remainPixels = totalPixels;
DateTime startingTime = DateTime.Now;
Rectangle rectAnimation = rectStart;
while (rectAnimation != rectEnd)
{
DateTime startPerMove = DateTime.Now;
rectAnimation.X += dxLoc * speedFactor;
rectAnimation.Y += dyLoc * speedFactor;
rectAnimation.Width += dWidth * speedFactor;
rectAnimation.Height += dHeight * speedFactor;
if (Math.Sign(rectEnd.X - rectAnimation.X) != Math.Sign(dxLoc))
rectAnimation.X = rectEnd.X;
if (Math.Sign(rectEnd.Y - rectAnimation.Y) != Math.Sign(dyLoc))
rectAnimation.Y = rectEnd.Y;
if (Math.Sign(rectEnd.Width - rectAnimation.Width) != Math.Sign(dWidth))
rectAnimation.Width = rectEnd.Width;
if (Math.Sign(rectEnd.Height - rectAnimation.Height) != Math.Sign(dHeight))
rectAnimation.Height = rectEnd.Height;
control.Bounds = rectAnimation;
if (control.Parent != null)
control.Parent.Update();
else
control.Update();
remainPixels -= speedFactor;
while (true)
{
DateTime now = DateTime.Now;
TimeSpan elapsedPerMove = now - startPerMove;
TimeSpan elapsedTime = now - startingTime;
if ((time - elapsedTime).TotalMilliseconds <= 0)
{
speedFactor = remainPixels;
break;
}
else
{
if ((int)(time - elapsedTime).TotalMilliseconds == 0)
speedFactor = 1;
else
{
try
{
speedFactor = remainPixels * (int)elapsedPerMove.TotalMilliseconds / (int)((time - elapsedTime).TotalMilliseconds);
}
catch { }
}
}
if (speedFactor >= 1)
break;
}
}
}
if (!show)
{
control.Visible = false;
control.Bounds = rectStart;
}
}
// internal static Keys GetPressedKey()
// {
// NativeFunctions.GetKeyboardState
//
// return Keys.None;
// }
internal static eWinXPColorScheme WinXPColorScheme
{
get
{
eWinXPColorScheme c = eWinXPColorScheme.Undetermined;
if (BarFunctions.ThemedOS && NativeFunctions.ColorDepth >= 16)
{
if (m_IsVista)
c = eWinXPColorScheme.Blue;
else if (SystemColors.Control.ToArgb() == Color.FromArgb(236, 233, 216).ToArgb() && SystemColors.Highlight.ToArgb() == Color.FromArgb(49, 106, 197).ToArgb())
c = eWinXPColorScheme.Blue;
else if (SystemColors.Control.ToArgb() == Color.FromArgb(224, 223, 227).ToArgb() && SystemColors.Highlight.ToArgb() == Color.FromArgb(178, 180, 191).ToArgb())
c = eWinXPColorScheme.Silver;
else if (SystemColors.Control.ToArgb() == Color.FromArgb(236, 233, 216).ToArgb() && SystemColors.Highlight.ToArgb() == Color.FromArgb(147, 160, 112).ToArgb())
c = eWinXPColorScheme.OliveGreen;
}
return c;
}
}
internal static Bitmap LoadBitmap(string imageName)
{
DotNetBarResourcesAttribute att = Attribute.GetCustomAttribute(System.Reflection.Assembly.GetExecutingAssembly(), typeof(DotNetBarResourcesAttribute)) as DotNetBarResourcesAttribute;
if (att != null && att.NamespacePrefix != "")
{
return new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream(att.NamespacePrefix + "." + imageName));
}
else
return new Bitmap(typeof(DevComponents.DotNetBar.DotNetBarManager), imageName);
}
internal static Icon LoadIcon(string imageName)
{
DotNetBarResourcesAttribute att = Attribute.GetCustomAttribute(System.Reflection.Assembly.GetExecutingAssembly(), typeof(DotNetBarResourcesAttribute)) as DotNetBarResourcesAttribute;
if (att != null && att.NamespacePrefix != "")
{
return new Icon(Assembly.GetExecutingAssembly().GetManifestResourceStream(att.NamespacePrefix + "." + imageName));
}
else
return new Icon(typeof(DevComponents.DotNetBar.DotNetBarManager), imageName);
}
public static Graphics CreateGraphics(Control objCtrl)
{
if (objCtrl is ItemControl)
return ((ItemControl)objCtrl).CreateGraphics();
else if (objCtrl is Bar)
return ((Bar)objCtrl).CreateGraphics();
else if (objCtrl is ExplorerBar)
return ((ExplorerBar)objCtrl).CreateGraphics();
else if (objCtrl is BaseItemControl)
return ((BaseItemControl)objCtrl).CreateGraphics();
else if (objCtrl is BarBaseControl)
return ((BarBaseControl)objCtrl).CreateGraphics();
else if (objCtrl is PanelControl)
return ((PanelControl)objCtrl).CreateGraphics();
else if (objCtrl is PopupItemControl)
return ((PopupItemControl)objCtrl).CreateGraphics();
return objCtrl.CreateGraphics();
}
public static bool IsOffice2007Style(eDotNetBarStyle style)
{
if (style == eDotNetBarStyle.StyleManagerControlled)
style = StyleManager.GetEffectiveStyle();
return (style == eDotNetBarStyle.Office2007 || style == eDotNetBarStyle.Office2010 || style == eDotNetBarStyle.Windows7 || StyleManager.IsMetro(style));
}
public static bool IsOffice2010Style(eDotNetBarStyle style)
{
if (style == eDotNetBarStyle.StyleManagerControlled)
style = StyleManager.GetEffectiveStyle();
return (style == eDotNetBarStyle.Office2010 || style == eDotNetBarStyle.Windows7 || StyleManager.IsMetro(style));
}
public static bool IsOffice2007StyleOnly(eDotNetBarStyle style)
{
if (style == eDotNetBarStyle.StyleManagerControlled)
style = StyleManager.GetEffectiveStyle();
return (style == eDotNetBarStyle.Office2007);
}
}
internal class ScreenInformation
{
public Rectangle Bounds = Rectangle.Empty;
public Rectangle WorkingArea = Rectangle.Empty;
public bool Primary = false;
public ScreenInformation(Rectangle bounds, Rectangle workingarea)
{
this.Bounds = bounds;
this.WorkingArea = workingarea;
}
public ScreenInformation(Rectangle bounds, Rectangle workingarea, bool primary)
{
this.Bounds = bounds;
this.WorkingArea = workingarea;
this.Primary = primary;
}
}
internal enum eWinXPColorScheme
{
Undetermined,
Blue,
OliveGreen,
Silver
}
[EditorBrowsable(EditorBrowsableState.Never)]
public class LocalizationManager : IDisposable
{
private ResourceManager m_ResourceManager = null;
private IOwnerLocalize m_Manager = null;
public LocalizationManager()
: this(null)
{
}
public LocalizationManager(IOwnerLocalize manager)
{
m_Manager = manager;
}
public void Dispose()
{
m_ResourceManager = null;
m_Manager = null;
}
public string GetDefaultLocalizedString(string key)
{
string s = GetLocalizedString(key);
if (s == "" || s == null)
{
ResourceManager res = BarFunctions.GetResourceManager(true);
s = res.GetString(key);
}
if (s == null)
s = "";
return s;
}
public static string GetLocalizedString(string key, string defaultValue)
{
LocalizeEventArgs e = new LocalizeEventArgs();
e.Key = key;
e.LocalizedValue = defaultValue;
LocalizationKeys.InvokeLocalizeString(e);
if (e.Handled)
return e.LocalizedValue;
return defaultValue;
}
public string GetLocalizedString(string key)
{
string s = "";
if (m_ResourceManager == null)
m_ResourceManager = BarFunctions.GetResourceManager();
if (m_ResourceManager != null)
{
s = m_ResourceManager.GetString(key);
if (s == null)
s = "";
}
// Fire static event first
LocalizeEventArgs e = new LocalizeEventArgs();
e.Key = key;
e.LocalizedValue = s;
LocalizationKeys.InvokeLocalizeString(e);
if (e.Handled)
return e.LocalizedValue;
if (m_Manager != null)
{
m_Manager.InvokeLocalizeString(e);
if (e.Handled)
return e.LocalizedValue;
}
return s;
}
}
}