| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411 |
- //
- // ToolStripControlHost.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) 2006 Jonathan Pobst
- //
- // Authors:
- // Jonathan Pobst ([email protected])
- //
- #if NET_2_0
- using System.Drawing;
- using System.ComponentModel;
- namespace System.Windows.Forms
- {
- public class ToolStripControlHost : ToolStripItem
- {
- private Control control;
- private ContentAlignment control_align;
- private bool double_click_enabled;
- private ContentAlignment image_align;
- private ToolStripItemImageScaling image_scaling;
- private Color image_transparent_color;
- private ContentAlignment text_align;
- private TextImageRelation text_image_relation;
- #region Public Constructors
- public ToolStripControlHost (Control c) : base ()
- {
- if (c == null)
- throw new ArgumentNullException ("c");
- this.control = c;
- this.control_align = ContentAlignment.MiddleCenter;
- this.OnSubscribeControlEvents (this.control);
- }
- public ToolStripControlHost (Control c, string name) : this (c)
- {
- this.control.name = name;
- }
- #endregion
- #region Public Properties
- public override Color BackColor {
- get { return base.BackColor; }
- set {
- base.BackColor = value;
- control.BackColor = value;
- }
- }
- public override bool CanSelect {
- get { return control.CanSelect; }
- }
- [Browsable (false)]
- public Control Control {
- get { return this.control; }
- }
- [Browsable (false)]
- [DefaultValue (ContentAlignment.MiddleCenter)]
- public ContentAlignment ControlAlign {
- get { return this.control_align; }
- set {
- if (!Enum.IsDefined (typeof (ContentAlignment), value))
- throw new InvalidEnumArgumentException (string.Format ("Enum argument value '{0}' is not valid for ContentAlignment", value));
- this.control_align = value;
- }
- }
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- public ToolStripItemDisplayStyle DisplayStyle {
- get { return base.DisplayStyle; }
- set { base.DisplayStyle = value; }
- }
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- [DefaultValue (false)]
- public bool DoubleClickEnabled {
- get { return this.double_click_enabled; }
- set { this.double_click_enabled = value; }
- }
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- public override bool Enabled {
- get { return base.Enabled; }
- set {
- base.Enabled = value;
- control.Enabled = value;
- }
- }
- public virtual bool Focused {
- get { return control.Focused; }
- }
- public override Font Font {
- get { return base.Font; }
- set {
- base.Font = value;
- control.Font = value;
- }
- }
- public override Color ForeColor {
- get { return base.ForeColor; }
- set {
- base.ForeColor = value;
- control.ForeColor = value;
- }
- }
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- public override Image Image {
- get { return base.Image; }
- set { base.Image = value; }
- }
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- public ContentAlignment ImageAlign {
- get { return this.image_align; }
- set { this.image_align = value; }
- }
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- public ToolStripItemImageScaling ImageScaling {
- get { return this.image_scaling; }
- set { this.image_scaling = value; }
- }
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- public Color ImageTransparentColor {
- get { return this.image_transparent_color; }
- set { this.image_transparent_color = value; }
- }
- public override bool Selected {
- get { return base.Selected; }
- }
- [EditorBrowsable (EditorBrowsableState.Advanced)]
- public override ISite Site {
- get { return base.Site; }
- set {
- base.Site = value;
- control.Site = value;
- }
- }
- [DefaultValue ("")]
- public override string Text {
- get { return base.Text; }
- set {
- base.Text = value;
- control.Text = value;
- }
- }
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- public ContentAlignment TextAlign {
- get { return this.text_align; }
- set { this.text_align = value; }
- }
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- public TextImageRelation TextImageRelation {
- get { return this.text_image_relation; }
- set { this.text_image_relation = value; }
- }
- #endregion
- #region Protected Properties
- protected override Size DefaultSize {
- get {
- if (control == null)
- return new Size (23, 23);
- return control.GetPreferredSize (Size.Empty);
- }
- }
- #endregion
- #region Public Methods
- public void Focus ()
- {
- control.Focus ();
- }
- public override Size GetPreferredSize (Size constrainingSize)
- {
- return this.Size;
- }
- [EditorBrowsable (EditorBrowsableState.Never)]
- public override void ResetBackColor ()
- {
- base.ResetBackColor ();
- }
- [EditorBrowsable (EditorBrowsableState.Never)]
- public override void ResetForeColor ()
- {
- base.ResetForeColor ();
- }
- #endregion
- #region Protected Methods
- protected override AccessibleObject CreateAccessibilityInstance ()
- {
- return this.Control.AccessibilityObject;
- }
-
- protected override void OnBoundsChanged ()
- {
- base.OnBoundsChanged ();
- if (this.Parent != null) {
- control.Size = this.Size;
- OnLayout (new LayoutEventArgs (null, string.Empty));
- }
- }
-
- protected virtual void OnEnter (EventArgs e)
- {
- if (Enter != null) Enter (this, e);
- }
- protected virtual void OnGotFocus (EventArgs e)
- {
- if (GotFocus != null) GotFocus (this, e);
- }
-
- protected virtual void OnHostedControlResize (EventArgs e)
- {
- }
-
- protected virtual void OnKeyDown (KeyEventArgs e)
- {
- if (KeyDown != null) KeyDown (this, e);
- }
-
- protected virtual void OnKeyPress (KeyPressEventArgs e)
- {
- if (KeyPress != null) KeyPress (this, e);
- }
-
- protected virtual void OnKeyUp (KeyEventArgs e)
- {
- if (KeyUp != null) KeyUp (this, e);
- }
- protected override void OnLayout (LayoutEventArgs e)
- {
- base.OnLayout (e);
-
- if (control != null)
- control.Bounds = AlignInRectangle (this.Bounds, control.Size, this.control_align);
- }
-
- protected virtual void OnLeave (EventArgs e)
- {
- if (Leave != null) Leave (this, e);
- }
-
- protected virtual void OnLostFocus (EventArgs e)
- {
- if (LostFocus != null) LostFocus (this, e);
- }
- protected override void OnPaint (PaintEventArgs e)
- {
- base.OnPaint (e);
- }
-
- protected override void OnParentChanged (ToolStrip oldParent, ToolStrip newParent)
- {
- base.OnParentChanged (oldParent, newParent);
- if (oldParent != null)
- oldParent.Controls.Remove (control);
- if (newParent != null)
- newParent.Controls.Add (control);
- }
-
- protected virtual void OnSubscribeControlEvents (Control control)
- {
- this.control.Enter += new EventHandler (HandleEnter);
- this.control.GotFocus += new EventHandler (HandleGotFocus);
- this.control.KeyDown += new KeyEventHandler (HandleKeyDown);
- this.control.KeyPress += new KeyPressEventHandler (HandleKeyPress);
- this.control.KeyUp += new KeyEventHandler (HandleKeyUp);
- this.control.Leave += new EventHandler (HandleLeave);
- this.control.LostFocus += new EventHandler (HandleLostFocus);
- this.control.Validated += new EventHandler (HandleValidated);
- this.control.Validating += new CancelEventHandler (HandleValidating);
- }
-
- protected virtual void OnUnsubscribeControlEvents (Control control)
- {
- }
-
- protected virtual void OnValidated (EventArgs e)
- {
- if (Validated != null) Validated (this, e);
- }
-
- protected virtual void OnValidating (CancelEventArgs e)
- {
- if (Validating != null) Validating (this, e);
- }
- #endregion
- #region Public Events
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Never)]
- public event EventHandler DisplayStyleChanged;
- public event EventHandler Enter;
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Advanced)]
- public event EventHandler GotFocus;
- public event KeyEventHandler KeyDown;
- public event KeyPressEventHandler KeyPress;
- public event KeyEventHandler KeyUp;
- public event EventHandler Leave;
- [Browsable (false)]
- [EditorBrowsable (EditorBrowsableState.Advanced)]
- public event EventHandler LostFocus;
- public event EventHandler Validated;
- public event CancelEventHandler Validating;
- #endregion
- #region Private Methods
- private void HandleEnter (object sender, EventArgs e)
- {
- this.OnEnter (e);
- }
- private void HandleGotFocus (object sender, EventArgs e)
- {
- this.OnGotFocus (e);
- }
- private void HandleKeyDown (object sender, KeyEventArgs e)
- {
- this.OnKeyDown (e);
- }
- private void HandleKeyPress (object sender, KeyPressEventArgs e)
- {
- this.OnKeyPress (e);
- }
- private void HandleKeyUp (object sender, KeyEventArgs e)
- {
- this.OnKeyUp (e);
- }
- private void HandleLeave (object sender, EventArgs e)
- {
- this.OnLeave (e);
- }
- private void HandleLostFocus (object sender, EventArgs e)
- {
- this.OnLostFocus (e);
- }
- private void HandleValidated (object sender, EventArgs e)
- {
- this.OnValidated (e);
- }
-
- private void HandleValidating (object sender, CancelEventArgs e)
- {
- this.OnValidating (e);
- }
- #endregion
- }
- }
- #endif
|