6992685b86
Former-commit-id: 0a113cb3a6feb7873f632839b1307cc6033cd595
408 lines
9.6 KiB
C#
408 lines
9.6 KiB
C#
// System.Windows.Forms.ToolBarButton.cs
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining
|
|
// a copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
|
// permit persons to whom the Software is furnished to do so, subject to
|
|
// the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
//
|
|
// Copyright (C) 2004-2006 Novell, Inc. (http://www.novell.com)
|
|
//
|
|
// Authors:
|
|
// Ravindra (rkumar@novell.com)
|
|
// Mike Kestner <mkestner@novell.com>
|
|
// Everaldo Canuto <ecanuto@novell.com>
|
|
|
|
using System.ComponentModel;
|
|
using System.ComponentModel.Design;
|
|
using System.Drawing;
|
|
using System.Drawing.Text;
|
|
using System.Drawing.Imaging;
|
|
|
|
namespace System.Windows.Forms
|
|
{
|
|
[DefaultProperty ("Text")]
|
|
[Designer ("System.Windows.Forms.Design.ToolBarButtonDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
|
|
[DesignTimeVisible (false)]
|
|
[ToolboxItem (false)]
|
|
public class ToolBarButton : Component
|
|
{
|
|
#region instance variable
|
|
private bool enabled = true;
|
|
private int image_index = -1;
|
|
private ContextMenu menu;
|
|
private ToolBar parent;
|
|
private bool partial_push = false;
|
|
private bool pushed = false;
|
|
private ToolBarButtonStyle style = ToolBarButtonStyle.PushButton;
|
|
private object tag;
|
|
private string text = "";
|
|
private string tooltip = "";
|
|
private bool visible = true;
|
|
private string image_key = string.Empty;
|
|
private string name;
|
|
#endregion
|
|
|
|
#region constructors
|
|
|
|
public ToolBarButton () { }
|
|
|
|
public ToolBarButton (string text)
|
|
{
|
|
this.text = text;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region internal properties
|
|
|
|
internal Image Image {
|
|
get {
|
|
if (Parent == null || Parent.ImageList == null)
|
|
return null;
|
|
|
|
ImageList list = Parent.ImageList;
|
|
if (ImageIndex > -1 && ImageIndex < list.Images.Count)
|
|
return list.Images [ImageIndex];
|
|
|
|
if (!string.IsNullOrEmpty (image_key))
|
|
return list.Images [image_key];
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
#endregion internal properties
|
|
|
|
#region properties
|
|
|
|
[DefaultValue (null)]
|
|
[TypeConverter (typeof (ReferenceConverter))]
|
|
public Menu DropDownMenu {
|
|
get { return menu; }
|
|
|
|
set {
|
|
if (value is ContextMenu)
|
|
menu = (ContextMenu) value;
|
|
else
|
|
throw new ArgumentException ("DropDownMenu must be of type ContextMenu.");
|
|
|
|
OnUIADropDownMenuChanged (EventArgs.Empty);
|
|
}
|
|
}
|
|
|
|
[DefaultValue (true)]
|
|
[Localizable (true)]
|
|
public bool Enabled {
|
|
get { return enabled; }
|
|
set {
|
|
if (value == enabled)
|
|
return;
|
|
|
|
enabled = value;
|
|
Invalidate ();
|
|
|
|
OnUIAEnabledChanged (EventArgs.Empty);
|
|
}
|
|
}
|
|
|
|
[RefreshProperties (RefreshProperties.Repaint)]
|
|
[DefaultValue (-1)]
|
|
[Editor ("System.Windows.Forms.Design.ImageIndexEditor, " + Consts.AssemblySystem_Design, typeof (System.Drawing.Design.UITypeEditor))]
|
|
[Localizable (true)]
|
|
[TypeConverter (typeof (ImageIndexConverter))]
|
|
public int ImageIndex {
|
|
get { return image_index; }
|
|
set {
|
|
if (value < -1)
|
|
throw new ArgumentException ("ImageIndex value must be above or equal to -1.");
|
|
|
|
if (value == image_index)
|
|
return;
|
|
|
|
bool layout = (Parent != null) && ((value == -1) || (image_index == -1));
|
|
|
|
image_index = value;
|
|
image_key = string.Empty;
|
|
|
|
if (layout)
|
|
Parent.Redraw (true);
|
|
else
|
|
Invalidate ();
|
|
}
|
|
}
|
|
|
|
[Localizable (true)]
|
|
[DefaultValue ("")]
|
|
[Editor ("System.Windows.Forms.Design.ImageIndexEditor, " + Consts.AssemblySystem_Design, typeof (System.Drawing.Design.UITypeEditor))]
|
|
[RefreshProperties (RefreshProperties.Repaint)]
|
|
[TypeConverter (typeof (ImageKeyConverter))]
|
|
public string ImageKey {
|
|
get { return image_key; }
|
|
set {
|
|
if (image_key == value)
|
|
return;
|
|
|
|
bool layout = (Parent != null) && ((value == string.Empty) || (image_key == string.Empty));
|
|
|
|
image_index = -1;
|
|
image_key = value;
|
|
|
|
if (layout)
|
|
Parent.Redraw (true);
|
|
else
|
|
Invalidate ();
|
|
}
|
|
}
|
|
|
|
[Browsable (false)]
|
|
public string Name {
|
|
get {
|
|
if (name == null)
|
|
return string.Empty;
|
|
|
|
return name;
|
|
}
|
|
set {
|
|
name = value;
|
|
}
|
|
}
|
|
|
|
[Browsable (false)]
|
|
public ToolBar Parent {
|
|
get { return parent; }
|
|
}
|
|
|
|
[DefaultValue (false)]
|
|
public bool PartialPush {
|
|
get { return partial_push; }
|
|
set {
|
|
if (value == partial_push)
|
|
return;
|
|
|
|
partial_push = value;
|
|
Invalidate ();
|
|
}
|
|
}
|
|
|
|
[DefaultValue (false)]
|
|
public bool Pushed {
|
|
get { return pushed; }
|
|
set {
|
|
if (value == pushed)
|
|
return;
|
|
|
|
pushed = value;
|
|
Invalidate ();
|
|
}
|
|
}
|
|
|
|
public Rectangle Rectangle {
|
|
get {
|
|
if (Visible && Parent != null && Parent.items != null)
|
|
foreach (ToolBarItem item in Parent.items)
|
|
if (item.Button == this)
|
|
return item.Rectangle;
|
|
|
|
return Rectangle.Empty;
|
|
}
|
|
}
|
|
|
|
[DefaultValue (ToolBarButtonStyle.PushButton)]
|
|
[RefreshProperties (RefreshProperties.Repaint)]
|
|
public ToolBarButtonStyle Style {
|
|
get { return style; }
|
|
set {
|
|
if (value == style)
|
|
return;
|
|
|
|
style = value;
|
|
|
|
if (parent != null)
|
|
parent.Redraw (true);
|
|
|
|
OnUIAStyleChanged (EventArgs.Empty);
|
|
}
|
|
}
|
|
|
|
[Bindable (true)]
|
|
[DefaultValue (null)]
|
|
[Localizable (false)]
|
|
[TypeConverter (typeof (StringConverter))]
|
|
public object Tag {
|
|
get { return tag; }
|
|
set { tag = value; }
|
|
}
|
|
|
|
[DefaultValue ("")]
|
|
[Localizable (true)]
|
|
public string Text {
|
|
get { return text; }
|
|
set {
|
|
if (value == null) value = "";
|
|
|
|
if (value == text)
|
|
return;
|
|
|
|
text = value;
|
|
|
|
OnUIATextChanged (EventArgs.Empty);
|
|
|
|
if (Parent != null)
|
|
Parent.Redraw (true);
|
|
}
|
|
}
|
|
|
|
[DefaultValue ("")]
|
|
[Localizable (true)]
|
|
public string ToolTipText {
|
|
get { return tooltip; }
|
|
set {
|
|
if (value == null) value = "";
|
|
tooltip = value;
|
|
}
|
|
}
|
|
|
|
[DefaultValue (true)]
|
|
[Localizable (true)]
|
|
public bool Visible {
|
|
get { return visible; }
|
|
set {
|
|
if (value == visible)
|
|
return;
|
|
|
|
visible = value;
|
|
if (Parent != null)
|
|
Parent.Redraw (true);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region internal methods
|
|
|
|
internal void SetParent (ToolBar parent)
|
|
{
|
|
if (Parent == parent)
|
|
return;
|
|
|
|
if (Parent != null)
|
|
Parent.Buttons.Remove (this);
|
|
|
|
this.parent = parent;
|
|
}
|
|
|
|
internal void Invalidate ()
|
|
{
|
|
if (Parent != null)
|
|
Parent.Invalidate (Rectangle);
|
|
}
|
|
|
|
bool uiaHasFocus = false;
|
|
internal bool UIAHasFocus {
|
|
get { return uiaHasFocus; }
|
|
set {
|
|
uiaHasFocus = value;
|
|
EventHandler eh =
|
|
(EventHandler) (value ? Events [UIAGotFocusEvent] : Events [UIALostFocusEvent]);
|
|
if (eh != null)
|
|
eh (this, EventArgs.Empty);
|
|
}
|
|
}
|
|
|
|
static object UIAGotFocusEvent = new object ();
|
|
static object UIALostFocusEvent = new object ();
|
|
static object UIATextChangedEvent = new object ();
|
|
static object UIAEnabledChangedEvent = new object ();
|
|
static object UIADropDownMenuChangedEvent = new object ();
|
|
static object UIAStyleChangedEvent = new object ();
|
|
|
|
internal event EventHandler UIAGotFocus {
|
|
add { Events.AddHandler (UIAGotFocusEvent, value); }
|
|
remove { Events.RemoveHandler (UIAGotFocusEvent, value); }
|
|
}
|
|
|
|
internal event EventHandler UIALostFocus {
|
|
add { Events.AddHandler (UIALostFocusEvent, value); }
|
|
remove { Events.RemoveHandler (UIALostFocusEvent, value); }
|
|
}
|
|
|
|
internal event EventHandler UIATextChanged {
|
|
add { Events.AddHandler (UIATextChangedEvent, value); }
|
|
remove { Events.RemoveHandler (UIATextChangedEvent, value); }
|
|
}
|
|
|
|
internal event EventHandler UIAEnabledChanged {
|
|
add { Events.AddHandler (UIAEnabledChangedEvent, value); }
|
|
remove { Events.RemoveHandler (UIAEnabledChangedEvent, value); }
|
|
}
|
|
|
|
internal event EventHandler UIADropDownMenuChanged {
|
|
add { Events.AddHandler (UIADropDownMenuChangedEvent, value); }
|
|
remove { Events.RemoveHandler (UIADropDownMenuChangedEvent, value); }
|
|
}
|
|
|
|
internal event EventHandler UIAStyleChanged {
|
|
add { Events.AddHandler (UIAStyleChangedEvent, value); }
|
|
remove { Events.RemoveHandler (UIAStyleChangedEvent, value); }
|
|
}
|
|
|
|
private void OnUIATextChanged(EventArgs e)
|
|
{
|
|
EventHandler eh = (EventHandler)(Events [UIATextChangedEvent]);
|
|
if (eh != null)
|
|
eh (this, e);
|
|
}
|
|
|
|
private void OnUIAEnabledChanged (EventArgs e)
|
|
{
|
|
EventHandler eh = (EventHandler)(Events [UIAEnabledChangedEvent]);
|
|
if (eh != null)
|
|
eh (this, e);
|
|
}
|
|
|
|
private void OnUIADropDownMenuChanged (EventArgs e)
|
|
{
|
|
EventHandler eh = (EventHandler)(Events [UIADropDownMenuChangedEvent]);
|
|
if (eh != null)
|
|
eh (this, e);
|
|
}
|
|
|
|
private void OnUIAStyleChanged (EventArgs e)
|
|
{
|
|
EventHandler eh = (EventHandler)(Events [UIAStyleChangedEvent]);
|
|
if (eh != null)
|
|
eh (this, e);
|
|
}
|
|
|
|
#endregion Internal Methods
|
|
|
|
#region methods
|
|
|
|
protected override void Dispose (bool disposing)
|
|
{
|
|
base.Dispose (disposing);
|
|
}
|
|
|
|
public override string ToString ()
|
|
{
|
|
return string.Format ("ToolBarButton: {0}, Style: {1}", text, style);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|