namespace DevComponents.DotNetBar { using System; using System.Drawing; using DevComponents.DotNetBar.Controls; using System.ComponentModel; using DevComponents.DotNetBar.Rendering; using System.Windows.Forms; using DevComponents.Editors; /// /// Summary description for TextBoxItem. /// [System.ComponentModel.ToolboxItem(false), System.ComponentModel.DesignTimeVisible(false), Designer("DevComponents.DotNetBar.Design.TextBoxItemDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")] public class TextBoxItem:ImageItem,IPersonalizedMenuItem { public delegate void TextChangedEventHandler(object sender); public event TextChangedEventHandler InputTextChanged; public event System.Windows.Forms.KeyEventHandler KeyDown; public event System.Windows.Forms.KeyPressEventHandler KeyPress; public event System.Windows.Forms.KeyEventHandler KeyUp; #if FRAMEWORK20 /// /// Occurs when ButtonCustom control is clicked. /// public event EventHandler ButtonCustomClick; /// /// Occurs when ButtonCustom2 control is clicked. /// public event EventHandler ButtonCustom2Click; #endif private TextBoxX m_TextBox; private bool m_MouseOver; private bool m_AlwaysShowCaption; private int m_TextBoxWidth; //private string m_ControlText=""; // IPersonalizedMenuItem Implementation private eMenuVisibility m_MenuVisibility=eMenuVisibility.VisibleAlways; private bool m_RecentlyUsed=false; public TextBoxItem():this("","") {} public TextBoxItem(string sName):this(sName,"") {} public TextBoxItem(string sName, string ItemText):base(sName,ItemText) { CreateTextBox(); m_MouseOver=false; m_AlwaysShowCaption=false; m_TextBoxWidth=64; this.ImageSize=new Size(16,16); m_SupportedOrientation=eSupportedOrientation.Horizontal; } private void CreateTextBox() { TextBoxX oldTextBox = null; if (m_TextBox != null) { m_TextBox.MouseEnter -= new EventHandler(this.TextBoxMouseEnter); m_TextBox.MouseLeave -= new EventHandler(this.TextBoxMouseLeave); m_TextBox.MouseHover -= new EventHandler(this.TextBoxMouseHover); m_TextBox.LostFocus -= new EventHandler(this.TextBoxLostFocus); m_TextBox.GotFocus -= new EventHandler(this.TextBoxGotFocus); m_TextBox.TextChanged -= new EventHandler(this.TextBoxTextChanged); m_TextBox.KeyDown -= new System.Windows.Forms.KeyEventHandler(this.TextBoxKeyDown); m_TextBox.KeyPress -= new System.Windows.Forms.KeyPressEventHandler(this.TextBoxKeyPress); m_TextBox.KeyUp -= new System.Windows.Forms.KeyEventHandler(this.TextBoxKeyUp); //m_TextBox.Click -= this.TextBoxClick; m_TextBox.MouseDown -= TextBoxMouseDown; m_TextBox.MouseUp -= TextBoxMouseUp; #if FRAMEWORK20 m_TextBox.ButtonCustomClick -= new EventHandler(TextBoxButtonCustomClick); m_TextBox.ButtonCustom2Click -= new EventHandler(TextBoxButtonCustom2Click); #endif oldTextBox = m_TextBox; m_TextBox = null; } m_TextBox=new TextBoxX(true); m_TextBox.BorderStyle=System.Windows.Forms.BorderStyle.None; m_TextBox.AutoSize=false; m_TextBox.Visible=false; m_TextBox.TabStop = false; if (oldTextBox != null) { m_TextBox.MaxLength = oldTextBox.MaxLength; m_TextBox.UseSystemPasswordChar = oldTextBox.UseSystemPasswordChar; m_TextBox.PasswordChar = oldTextBox.PasswordChar; m_TextBox.WatermarkEnabled = oldTextBox.WatermarkEnabled; m_TextBox.WatermarkText = oldTextBox.WatermarkText; m_TextBox.WatermarkFont = oldTextBox.WatermarkFont; m_TextBox.WatermarkColor = oldTextBox.WatermarkColor; m_TextBox.WatermarkBehavior = oldTextBox.WatermarkBehavior; m_TextBox.FocusHighlightEnabled = oldTextBox.FocusHighlightEnabled; m_TextBox.FocusHighlightColor = oldTextBox.FocusHighlightColor; oldTextBox.Dispose(); } m_TextBox.MouseEnter+=new EventHandler(this.TextBoxMouseEnter); m_TextBox.MouseLeave+=new EventHandler(this.TextBoxMouseLeave); m_TextBox.MouseHover+=new EventHandler(this.TextBoxMouseHover); m_TextBox.LostFocus+=new EventHandler(this.TextBoxLostFocus); m_TextBox.GotFocus+=new EventHandler(this.TextBoxGotFocus); m_TextBox.TextChanged+=new EventHandler(this.TextBoxTextChanged); m_TextBox.KeyDown+=new System.Windows.Forms.KeyEventHandler(this.TextBoxKeyDown); m_TextBox.KeyPress+=new System.Windows.Forms.KeyPressEventHandler(this.TextBoxKeyPress); m_TextBox.KeyUp+=new System.Windows.Forms.KeyEventHandler(this.TextBoxKeyUp); //m_TextBox.Click += this.TextBoxClick; m_TextBox.MouseDown += TextBoxMouseDown; m_TextBox.MouseUp += TextBoxMouseUp; #if FRAMEWORK20 m_TextBox.ButtonCustomClick += new EventHandler(TextBoxButtonCustomClick); m_TextBox.ButtonCustom2Click += new EventHandler(TextBoxButtonCustom2Click); #endif m_TextBox.Text=this.Text; m_TextBox.SelectionStart=0; if(this.ContainerControl!=null) { System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control; if(objCtrl!=null) objCtrl.Controls.Add(m_TextBox); } if(this.Displayed) { m_TextBox.Visible=true; this.Refresh(); } CustomizeChanged(); } #if FRAMEWORK20 private void TextBoxButtonCustomClick(object sender, EventArgs e) { if (ButtonCustomClick != null) ButtonCustomClick(this, e); } private void TextBoxButtonCustom2Click(object sender, EventArgs e) { if (ButtonCustom2Click != null) ButtonCustom2Click(this, e); } #endif public override BaseItem Copy() { TextBoxItem objCopy=new TextBoxItem(this.Name); this.CopyToItem(objCopy); return objCopy; } protected override void CopyToItem(BaseItem copy) { TextBoxItem objCopy=copy as TextBoxItem; base.CopyToItem(objCopy); objCopy.TextBoxWidth=m_TextBoxWidth; } protected override void Dispose(bool disposing) { if(m_TextBox!=null) { // Control gets disposed by the parent control it is added to //if (m_TextBox.Parent == null && !m_TextBox.IsDisposed) // m_TextBox.Dispose(); } base.Dispose(disposing); } protected internal override void Serialize(ItemSerializationContext context) { base.Serialize(context); System.Xml.XmlElement ThisItem = context.ItemXmlElement; ThisItem.SetAttribute("Caption",_Caption); ThisItem.SetAttribute("TextBoxWidth",System.Xml.XmlConvert.ToString(m_TextBoxWidth)); ThisItem.SetAttribute("AlwaysShowCaption",System.Xml.XmlConvert.ToString(m_AlwaysShowCaption)); ThisItem.SetAttribute("MenuVisibility",System.Xml.XmlConvert.ToString((int)m_MenuVisibility)); ThisItem.SetAttribute("RecentlyUsed",System.Xml.XmlConvert.ToString(m_RecentlyUsed)); } public override void Deserialize(ItemSerializationContext context) { base.Deserialize(context); System.Xml.XmlElement ItemXmlSource = context.ItemXmlElement; if(ItemXmlSource.HasAttribute("Caption")) this.Caption = ItemXmlSource.GetAttribute("Caption"); m_TextBoxWidth=System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("TextBoxWidth")); m_AlwaysShowCaption=System.Xml.XmlConvert.ToBoolean(ItemXmlSource.GetAttribute("AlwaysShowCaption")); m_MenuVisibility=(eMenuVisibility)System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("MenuVisibility")); m_RecentlyUsed=System.Xml.XmlConvert.ToBoolean(ItemXmlSource.GetAttribute("RecentlyUsed")); } private static RoundRectangleShapeDescriptor _MenuShape = new RoundRectangleShapeDescriptor(3); public override void Paint(ItemPaintArgs pa) { if (this.SuspendLayout) return; System.Drawing.Graphics g = pa.Graphics; Rectangle r = this.DisplayRectangle; bool enabled = GetEnabled(pa.ContainerControl); Size objImageSize = GetMaxImageSize(); bool bOnMenu = this.IsOnMenu && !(this.Parent is ItemContainer); eDotNetBarStyle effectiveStyle = this.EffectiveStyle; if (this.Orientation == eOrientation.Horizontal) { if (bOnMenu && (effectiveStyle == eDotNetBarStyle.OfficeXP || effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle))) { objImageSize.Width += 7; r.Width -= objImageSize.Width; if (!pa.RightToLeft) r.X += objImageSize.Width; if (this.IsOnCustomizeMenu) objImageSize.Width += objImageSize.Height + 8; Rectangle sideRect = new Rectangle(m_Rect.Left, m_Rect.Top, objImageSize.Width, m_Rect.Height); if (pa.RightToLeft) sideRect.X = m_Rect.Right - sideRect.Width; // Draw side bar if (!BarFunctions.IsOffice2007Style(effectiveStyle)) { if (this.MenuVisibility == eMenuVisibility.VisibleIfRecentlyUsed && !this.RecentlyUsed) { if (!pa.Colors.MenuUnusedSide2.IsEmpty) { System.Drawing.Drawing2D.LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(m_Rect.Left, m_Rect.Top, objImageSize.Width, m_Rect.Height), pa.Colors.MenuUnusedSide, pa.Colors.MenuUnusedSide2, pa.Colors.MenuUnusedSideGradientAngle); g.FillRectangle(gradient, sideRect); gradient.Dispose(); } else g.FillRectangle(new SolidBrush(pa.Colors.MenuUnusedSide), sideRect); } else { if (!pa.Colors.MenuSide2.IsEmpty) { System.Drawing.Drawing2D.LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(sideRect, pa.Colors.MenuSide, pa.Colors.MenuSide2, pa.Colors.MenuSideGradientAngle); g.FillRectangle(gradient, sideRect); gradient.Dispose(); } else g.FillRectangle(new SolidBrush(pa.Colors.MenuSide), sideRect); } } if (BarFunctions.IsOffice2007Style(effectiveStyle) && GlobalManager.Renderer is Office2007Renderer) { Office2007MenuColorTable mt = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.Menu; if (mt != null) { // Draw side bar if (this.MenuVisibility == eMenuVisibility.VisibleIfRecentlyUsed && !this.RecentlyUsed) DisplayHelp.FillRectangle(g, sideRect, mt.SideUnused); else DisplayHelp.FillRectangle(g, sideRect, mt.Side); } if (mt != null && !mt.SideBorder.IsEmpty) { if (pa.RightToLeft) DisplayHelp.DrawGradientLine(g, sideRect.X, sideRect.Y, sideRect.X, sideRect.Bottom - 1, mt.SideBorder, 1); else DisplayHelp.DrawGradientLine(g, sideRect.Right - 2, sideRect.Y, sideRect.Right - 2, sideRect.Bottom - 1, mt.SideBorder, 1); } if (mt != null && !mt.SideBorderLight.IsEmpty) { if (pa.RightToLeft) DisplayHelp.DrawGradientLine(g, sideRect.X + 1, sideRect.Y, sideRect.X + 1, sideRect.Bottom - 1, mt.SideBorderLight, 1); else DisplayHelp.DrawGradientLine(g, sideRect.Right - 1, sideRect.Y, sideRect.Right - 1, sideRect.Bottom - 1, mt.SideBorderLight, 1); } } } if (this.IsOnCustomizeMenu) { if (effectiveStyle == eDotNetBarStyle.OfficeXP || effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle)) { r.X += (objImageSize.Height + 8); r.Width -= (objImageSize.Height + 8); } else { r.X += (objImageSize.Height + 4); r.Width -= (objImageSize.Height + 4); } } if (bOnMenu && (effectiveStyle == eDotNetBarStyle.OfficeXP || effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle))) { if (enabled) { if (m_MouseOver || this.Focused) { Rectangle rHover = this.DisplayRectangle; rHover.Inflate(-1, 0); if (BarFunctions.IsOffice2007Style(effectiveStyle) && !(pa.Owner is DotNetBarManager) && GlobalManager.Renderer is Office2007Renderer) { Office2007ButtonItemStateColorTable bt = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.ButtonItemColors[0].MouseOver; Office2007ButtonItemPainter.PaintBackground(g, bt, rHover, _MenuShape); } else { if (!pa.Colors.ItemHotBackground2.IsEmpty) { System.Drawing.Drawing2D.LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(rHover, pa.Colors.ItemHotBackground, pa.Colors.ItemHotBackground2, pa.Colors.ItemHotBackgroundGradientAngle); g.FillRectangle(gradient, rHover); gradient.Dispose(); } else g.FillRectangle(new SolidBrush(pa.Colors.ItemHotBackground), rHover); NativeFunctions.DrawRectangle(g, new Pen(pa.Colors.ItemHotBorder), rHover); } } } } // Draw text if needed if (_Caption != "" && (m_AlwaysShowCaption || bOnMenu)) { eTextFormat objStringFormat = GetStringFormat(); Font objFont = this.GetFont(); Rectangle rText = new Rectangle(r.X + 8, r.Y, r.Width - 8, r.Height); if (pa.RightToLeft) { objStringFormat |= eTextFormat.Right; rText.Width -= 9; } Color textColor = pa.Colors.ItemText; if (BarFunctions.IsOffice2007Style(effectiveStyle) && GlobalManager.Renderer is Office2007Renderer) { textColor = enabled ? ((Office2007Renderer)GlobalManager.Renderer).ColorTable.ButtonItemColors[0].Default.Text : pa.Colors.ItemDisabledText; } if (effectiveStyle == eDotNetBarStyle.Office2000) { TextDrawing.DrawString(g, _Caption, objFont, textColor, rText, objStringFormat); } else { TextDrawing.DrawString(g, _Caption, objFont, textColor, rText, objStringFormat); } Size textSize = TextDrawing.MeasureString(g, _Caption, objFont, 0, objStringFormat); if (!pa.RightToLeft) r.X += (int)textSize.Width + 8; r.Width -= ((int)textSize.Width + 8); } int textBoxPreferredHeight = Math.Max(19, _TextBoxHeight > 0 ? _TextBoxHeight : m_TextBox.PreferredHeight); if (this.DesignMode && !bOnMenu) { Rectangle back = r; if (m_TextBox != null) { back.Inflate(-5, -3); back.Y += (back.Height - (textBoxPreferredHeight + 3)) / 2; back.Height = textBoxPreferredHeight + 3; } g.FillRectangle(SystemBrushes.Window, back); if (this.Text != "") { back.Inflate(-1, -1); TextDrawing.DrawString(g, this.Text, this.GetFont(), enabled ? pa.Colors.ItemText : pa.Colors.ItemDisabledText, back, this.GetStringFormat()); } } if (m_TextBox != null) { r.Inflate(-4, -3); r.X--; r.Y += (r.Height - textBoxPreferredHeight) / 2; r.Height = textBoxPreferredHeight; m_TextBox.Size = new Size(r.Width, (_TextBoxHeight > 0 ? _TextBoxHeight : m_TextBox.PreferredHeight)); Point loc = r.Location; if (pa.RightToLeft) loc.Offset(0, (r.Height - m_TextBox.Height) / 2); else loc.Offset(2, (r.Height - m_TextBox.Height) / 2); m_TextBox.Location = loc; if (BarFunctions.IsOffice2007Style(effectiveStyle)) { Color borderColor = Color.Empty; ElementStyle style = GetTextBoxElementStyle(); if (!enabled) { borderColor = SystemColors.ControlDark; } else if (style != null) borderColor = style.BorderColor; if (!borderColor.IsEmpty) { r = new Rectangle(r.Location, new Size(m_TextBox.Width + 2, textBoxPreferredHeight)); DisplayHelp.FillRectangle(g, r, m_TextBox.BackColor); r.Inflate(1, 1); if(!enabled) g.FillRectangle(SystemBrushes.Control, r); DisplayHelp.DrawRectangle(g, borderColor, r); } } else if (enabled && (m_MouseOver || this.Focused)) { if (effectiveStyle == eDotNetBarStyle.Office2000) { r = new Rectangle(m_TextBox.Location, m_TextBox.Size); r.Inflate(2, 2); System.Windows.Forms.ControlPaint.DrawBorder3D(g, r, System.Windows.Forms.Border3DStyle.SunkenOuter, System.Windows.Forms.Border3DSide.All); } else if (effectiveStyle == eDotNetBarStyle.OfficeXP || effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005) { r = new Rectangle(m_TextBox.Location, m_TextBox.Size); r.Inflate(1, 1); NativeFunctions.DrawRectangle(g, SystemPens.Highlight, r); //g.DrawRectangle(SystemPens.Highlight,r); } } } else { r.Inflate(-3, -3); g.FillRectangle(SystemBrushes.Window, r); } if (this.IsOnCustomizeMenu && this.Visible) { // Draw check box if this item is visible Rectangle rBox = new Rectangle(m_Rect.Left, m_Rect.Top, m_Rect.Height, m_Rect.Height); if (effectiveStyle == eDotNetBarStyle.OfficeXP || effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle)) rBox.Inflate(-1, -1); BarFunctions.DrawMenuCheckBox(pa, rBox, effectiveStyle, m_MouseOver); } } else { string Caption = this.Text; if (Caption == "") Caption = "..."; else Caption += " »"; if (effectiveStyle == eDotNetBarStyle.OfficeXP || effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle)) g.FillRectangle(new SolidBrush(pa.Colors.BarBackground), this.DisplayRectangle); else g.FillRectangle(SystemBrushes.Control, this.DisplayRectangle); if (m_MouseOver && !this.DesignMode) { if (effectiveStyle == eDotNetBarStyle.Office2000) { //r.Inflate(-1,-1); System.Windows.Forms.ControlPaint.DrawBorder3D(g, r, System.Windows.Forms.Border3DStyle.RaisedInner, System.Windows.Forms.Border3DSide.All); } else if (effectiveStyle == eDotNetBarStyle.OfficeXP || effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle)) { r.Inflate(-1, -1); if (!pa.Colors.ItemHotBackground2.IsEmpty) { System.Drawing.Drawing2D.LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(r, pa.Colors.ItemHotBackground, pa.Colors.ItemHotBackground2, pa.Colors.ItemHotBackgroundGradientAngle); g.FillRectangle(gradient, r); gradient.Dispose(); } else g.FillRectangle(new SolidBrush(pa.Colors.ItemHotBackground), r); NativeFunctions.DrawRectangle(g, new Pen(pa.Colors.ItemHotBorder), r); } } r = new Rectangle(m_Rect.Top, -m_Rect.Right, m_Rect.Height, m_Rect.Width); g.RotateTransform(90); eTextFormat sf = GetStringFormat(); sf |= eTextFormat.HorizontalCenter; if (m_MouseOver && enabled) TextDrawing.DrawStringLegacy(g, Caption, GetFont(), pa.Colors.ItemHotText, r, sf); else TextDrawing.DrawStringLegacy(g, Caption, GetFont(), enabled ? pa.Colors.ItemText : pa.Colors.ItemDisabledText, r, sf); g.ResetTransform(); } if (this.Focused && this.DesignMode) { r = this.DisplayRectangle; r.Inflate(-1, -1); DesignTime.DrawDesignTimeSelection(g, r, pa.Colors.ItemDesignTimeBorder); } this.DrawInsertMarker(g); } private ElementStyle GetTextBoxElementStyle() { ElementStyle style = null; if (GlobalManager.Renderer is Office2007Renderer) { style = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.StyleClasses[ElementStyleClassKeys.TextBoxBorderKey] as ElementStyle; } return style; } /// /// IBlock member implementation /// [Browsable(false), DevCoBrowsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)] public override System.Drawing.Rectangle Bounds { get { return base.Bounds; } set { Control container = this.ContainerControl as Control; if ((container is ItemPanel || container is ExplorerBar || container is SideBar) && base.Bounds != value) { bool topLocationChanged = base.Bounds.Top != value.Top; bool leftLocationChanged = base.Bounds.Left != value.Left; base.Bounds = value; if (topLocationChanged || leftLocationChanged) UpdateControlLocation(); } else base.Bounds = value; } } private void UpdateControlLocation() { if (m_TextBox == null) return; Rectangle r = this.DisplayRectangle; r.Inflate(-5, -3); m_TextBox.Location = r.Location; } public override void RecalcSize() { if (this.SuspendLayout) return; bool bOnMenu = this.IsOnMenu; eDotNetBarStyle effectiveStyle = this.EffectiveStyle; if (this.Orientation == eOrientation.Horizontal) { // Default Height if (this.Parent != null && this.Parent is ImageItem) m_Rect.Height = ((ImageItem)this.Parent).SubItemsImageSize.Height + 4; else m_Rect.Height = this.SubItemsImageSize.Height + 4; // Default width m_Rect.Width = m_TextBoxWidth + 4; // Calculate Item Height if (_Caption != "" && (m_AlwaysShowCaption || bOnMenu)) { System.Windows.Forms.Control objCtrl = this.ContainerControl as System.Windows.Forms.Control; if (objCtrl != null && IsHandleValid(objCtrl)) { Graphics g = BarFunctions.CreateGraphics(objCtrl); try { Size textSize = TextDrawing.MeasureString(g, _Caption, GetFont(), 0, GetStringFormat()); if (textSize.Height > this.SubItemsImageSize.Height) m_Rect.Height = (int)textSize.Height + 4; m_Rect.Width = m_TextBoxWidth + 4 + (int)textSize.Width + 8; } finally { g.Dispose(); } } } #if (FRAMEWORK20) if (m_TextBox != null) { if (m_TextBox.ButtonCustom.Visible && m_TextBox.ButtonCustom.Image != null) m_Rect.Height = Math.Max(m_Rect.Height, m_TextBox.ButtonCustom.Image.Height + 6); if (m_TextBox.ButtonCustom2.Visible && m_TextBox.ButtonCustom2.Image != null) m_Rect.Height = Math.Max(m_Rect.Height, m_TextBox.ButtonCustom2.Image.Height + 6); } #endif Size objImageSize = GetMaxImageSize(); if (m_TextBox != null) { int textBoxPreferredHeight = Math.Max(19, (_TextBoxHeight > 0 ? _TextBoxHeight : m_TextBox.PreferredHeight)) + 2; if (m_Rect.Height < textBoxPreferredHeight) { m_Rect.Height = textBoxPreferredHeight; //m_TextBox.Height = objImageSize.Height + 2; //if (m_Rect.Height < m_TextBox.Height) // m_Rect.Height = m_TextBox.Height + 4; } } if (this.IsOnMenu && (effectiveStyle == eDotNetBarStyle.OfficeXP || effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle))) { // Get the right image size that we will use for calculation m_Rect.Width += (objImageSize.Width + 7); } if (this.IsOnCustomizeMenu) m_Rect.Width += (objImageSize.Height + 2); } else { // Default width m_Rect.Width = this.SubItemsImageSize.Width + 4; string Caption = this.Text; if (Caption == "") Caption = "..."; else Caption += " »"; System.Windows.Forms.Control objCtrl = this.ContainerControl as System.Windows.Forms.Control; if (objCtrl != null && IsHandleValid(objCtrl)) { Graphics g = BarFunctions.CreateGraphics(objCtrl); try { Size textSize = TextDrawing.MeasureString(g, Caption, GetFont(), 0, GetStringFormat()); if (textSize.Height > this.SubItemsImageSize.Height) m_Rect.Width = (int)textSize.Height + 4; m_Rect.Height = (int)textSize.Width + 8; } finally { g.Dispose(); } } } // Always call base implementation to reset resize flag base.RecalcSize(); } private Size GetMaxImageSize() { if(m_Parent!=null) { ImageItem objParentImageItem=m_Parent as ImageItem; if(objParentImageItem!=null) return objParentImageItem.SubItemsImageSize; else return this.ImageSize; } else return this.ImageSize; } protected internal override void OnContainerChanged(object objOldContainer) { base.OnContainerChanged(objOldContainer); if(m_TextBox!=null) { if(m_TextBox.Parent!=null) m_TextBox.Parent.Controls.Remove(m_TextBox); if (objOldContainer is MenuPanel) // Recreate text box since it stops firing TextChanged events once it is removed and added again on menu CreateTextBox(); System.Windows.Forms.Control objCtrl=null; if(this.ContainerControl!=null) { objCtrl=this.ContainerControl as System.Windows.Forms.Control; if(objCtrl!=null) objCtrl.Controls.Add(m_TextBox); } } } protected internal override void OnAfterItemRemoved(BaseItem item, int itemIndex) { base.OnAfterItemRemoved(item, itemIndex); this.ContainerControl=null; } protected internal override void OnVisibleChanged(bool newValue) { if(m_TextBox!=null && !newValue) { m_TextBox.Visible=newValue; CustomizeChanged(); } base.OnVisibleChanged(newValue); } protected override void OnDisplayedChanged() { if(m_TextBox!=null) { m_TextBox.Visible=this.Displayed; CustomizeChanged(); } } private void TextBoxMouseEnter(object sender, EventArgs e) { if(!m_MouseOver) { m_MouseOver=true; this.Refresh(); } } private void TextBoxMouseLeave(object sender, EventArgs e) { this.HideToolTip(); if(m_MouseOver) { m_MouseOver=false; this.Refresh(); } } private void TextBoxMouseHover(object sender, EventArgs e) { if(this.DesignMode) return; if(System.Windows.Forms.Control.MouseButtons==System.Windows.Forms.MouseButtons.None) ShowToolTip(); } private void TextBoxLostFocus(object sender, EventArgs e) { this.Text=m_TextBox.Text; this.ReleaseFocus(); //if(!m_MouseOver) // return; //m_MouseOver=false; this.HideToolTip(); this.Refresh(); OnLostFocus(e); } [EditorBrowsable(EditorBrowsableState.Never)] public override void OnLostFocus() { if(m_TextBox!=null) this.Text=m_TextBox.Text; base.OnLostFocus(); } [EditorBrowsable(EditorBrowsableState.Never)] public override void OnGotFocus() { base.OnGotFocus(); if(m_TextBox==null) return; if(m_TextBox.Focused || this.IsOnCustomizeMenu || this.IsOnCustomizeDialog || this.DesignMode) return; m_TextBox.Focus(); } private void TextBoxGotFocus(object sender, EventArgs e) { this.HideToolTip(); this.Focus(); if (GetEnabled() && !this.DesignMode) { if(m_MenuVisibility==eMenuVisibility.VisibleIfRecentlyUsed && !m_RecentlyUsed && this.IsOnMenu) { // Propagate to the top m_RecentlyUsed=true; BaseItem objItem=this.Parent; while(objItem!=null) { IPersonalizedMenuItem ipm=objItem as IPersonalizedMenuItem; if(ipm!=null) ipm.RecentlyUsed=true; objItem=objItem.Parent; } } } OnGotFocus(e); } private void TextBoxKeyDown(object sender,System.Windows.Forms.KeyEventArgs e) { this.HideToolTip(); if(KeyDown!=null) KeyDown(this,e); if(e.KeyCode==System.Windows.Forms.Keys.Enter && this.Parent is PopupItem) { this.RaiseClick(); //((PopupItem)this.Parent).ClosePopup(); } if (!e.Handled && e.KeyCode == System.Windows.Forms.Keys.Escape) { m_TextBox.ReleaseFocus(); } } private void TextBoxKeyPress(object sender,System.Windows.Forms.KeyPressEventArgs e) { if(KeyPress!=null) KeyPress(this,e); } private void TextBoxKeyUp(object sender,System.Windows.Forms.KeyEventArgs e) { if(KeyUp!=null) KeyUp(this,e); } private void TextBoxMouseUp(object sender, MouseEventArgs e) { RaiseMouseUp(e); } private void TextBoxMouseDown(object sender, MouseEventArgs e) { RaiseMouseDown(e); } //private void TextBoxClick(object sender, EventArgs e) //{ // RaiseClick(eEventSource.Mouse); //} private void TextBoxTextChanged(object sender, EventArgs e) { this.Text = m_TextBox.Text; if(InputTextChanged!=null) { InputTextChanged(this); } DotNetBarManager owner = this.GetOwner() as DotNetBarManager; if (owner != null) owner.InvokeTextBoxItemTextChanged(this); } protected override void OnIsOnCustomizeDialogChanged() { base.OnIsOnCustomizeDialogChanged(); CustomizeChanged(); } protected override void OnDesignModeChanged() { base.OnDesignModeChanged(); CustomizeChanged(); } protected override void OnIsOnCustomizeMenuChanged() { base.OnIsOnCustomizeMenuChanged(); CustomizeChanged(); } private void CustomizeChanged() { if(this.IsOnCustomizeMenu || this.IsOnCustomizeDialog || this.DesignMode) { if(m_TextBox!=null) m_TextBox.Visible=false; } else { if(m_TextBox==null) CreateTextBox(); else if(!m_TextBox.Visible) { m_TextBox.Visible=this.Displayed && this.Visible; } } } [DefaultValue(false), Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Behavior"),System.ComponentModel.Description("Indicates whether item caption is always shown.")] public bool AlwaysShowCaption { get { return m_AlwaysShowCaption; } set { m_AlwaysShowCaption=value; } } [DefaultValue(64), Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Layout"),System.ComponentModel.Description("Indicates the Width of the Text Box part of the item.")] public int TextBoxWidth { get { return m_TextBoxWidth; } set { if(m_TextBoxWidth!=value) { m_TextBoxWidth=value; if(ShouldSyncProperties) BarFunctions.SyncProperty(this, "TextBoxWidth"); OnExternalSizeChange(); this.OnAppearanceChanged(); } } } private int _TextBoxHeight = 0; [DefaultValue(0), Category("Layout"), Description("Indicates explicit height of TextBox.")] public int TextBoxHeight { get { return _TextBoxHeight; } set { _TextBoxHeight = value; } } #if FRAMEWORK20 /// /// Gets or sets a value indicating whether the text in the TextBox control should appear as the default password character. /// [Category("Behavior"), DefaultValue(false), Description("Gets or sets a value indicating whether the text in the TextBox control should appear as the default password character."), RefreshProperties(RefreshProperties.Repaint)] public bool UseSystemPasswordChar { get { return m_TextBox.UseSystemPasswordChar; } set { m_TextBox.UseSystemPasswordChar = value; } } /// /// Gets or sets the character used to mask characters of a password in a single-line TextBox control. /// [RefreshProperties(RefreshProperties.Repaint), Localizable(true), Description("Gets or sets the character used to mask characters of a password in a single-line TextBox control."), Category("Behavior"), DefaultValue('\0')] public char PasswordChar { get { return m_TextBox.PasswordChar; } set { m_TextBox.PasswordChar = value; } } #endif public override void InternalMouseEnter() { base.InternalMouseEnter(); //if(this.DesignMode || this.IsOnCustomizeMenu || this.IsOnCustomizeDialog || this.Orientation==eOrientation.Vertical) if(!m_MouseOver) { m_MouseOver=true; this.Refresh(); } } public override void InternalMouseLeave() { base.InternalMouseLeave(); if(m_MouseOver) { m_MouseOver=false; this.Refresh(); } } public override void InternalKeyDown(System.Windows.Forms.KeyEventArgs objArg) { if(objArg.KeyCode==System.Windows.Forms.Keys.Escape) { if(m_TextBox.Focused) { m_TextBox.SelectionStart=0; m_TextBox.Text=this.Text; } } else if(objArg.KeyCode==System.Windows.Forms.Keys.Enter) { if(!m_TextBox.Focused) { m_TextBox.Focus(); objArg.Handled=true; return; } } base.InternalKeyDown(objArg); } protected virtual Font GetFont() { System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control; if(objCtrl!=null) return (Font)objCtrl.Font; return SystemFonts.DefaultFont; } private eTextFormat GetStringFormat() { eTextFormat format = eTextFormat.Default | eTextFormat.VerticalCenter | eTextFormat.EndEllipsis | eTextFormat.SingleLine; return format; //StringFormat sfmt=BarFunctions.CreateStringFormat(); //new StringFormat(StringFormat.GenericDefault) //sfmt.HotkeyPrefix=System.Drawing.Text.HotkeyPrefix.Show; ////sfmt.FormatFlags=sfmt.FormatFlags & ~(sfmt.FormatFlags & StringFormatFlags.DisableKerning); //sfmt.FormatFlags=sfmt.FormatFlags | StringFormatFlags.NoWrap; //sfmt.Trimming=StringTrimming.EllipsisCharacter; //sfmt.Alignment=System.Drawing.StringAlignment.Near; //sfmt.LineAlignment=System.Drawing.StringAlignment.Center; //return sfmt; } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Browsable(false), Obsolete("Please use Text property instead to access TextBox text.")] public virtual string ControlText { get { return this.Text; } set { this.Text = value; } } /// /// Gets or sets the text associated with the editable part of the item. /// [DefaultValue(""), Browsable(true), Category("Appearance"), Description("The text contained in the text box that user can edit.")] public override string Text { get { return base.Text; } set { base.Text = value; } } protected override void OnTextChanged() { if (m_TextBox != null && m_TextBox.Text != this.Text) m_TextBox.Text = this.Text; base.OnTextChanged(); } private string _Caption = ""; /// /// Gets or sets the item caption text displayed next to the text input. /// [DefaultValue(""), System.ComponentModel.Category("Appearance"), Description("Indicates the item Caption displayed next to the text input."), Localizable(true)] public string Caption { get { return _Caption; } set { if (value == null) value = ""; _Caption = value; NeedRecalcSize = true; Refresh(); } } [System.ComponentModel.Browsable(false)] public System.Windows.Forms.TextBox TextBox { get { return m_TextBox; } } public override void ReleaseFocus() { if(m_TextBox!=null && m_TextBox.Focused) m_TextBox.ReleaseFocus(); base.ReleaseFocus(); } [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionStart { get { if(m_TextBox!=null) return m_TextBox.SelectionStart; return 0; } set { if(m_TextBox!=null) m_TextBox.SelectionStart=value; } } [System.ComponentModel.Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionLength { get { if(m_TextBox!=null) return m_TextBox.SelectionLength; return 0; } set { if(m_TextBox!=null) m_TextBox.SelectionLength=value; } } [System.ComponentModel.Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public string SelectedText { get { if(m_TextBox!=null) return m_TextBox.SelectedText; return ""; } set { if(m_TextBox!=null) m_TextBox.SelectedText=value; } } /// /// Selects all text in text box. /// public void SelectAll() { if (m_TextBox != null) m_TextBox.SelectAll(); } /// /// Gets or sets the maximum number of characters the user can type or paste into the text box control. /// [DefaultValue(32767), Description("Indicates maximum number of characters the user can type or paste into the text box control. ")] public int MaxLength { get { return m_TextBox.MaxLength; } set { if (m_TextBox != null) m_TextBox.MaxLength = value; } } [DefaultValue(eMenuVisibility.VisibleAlways), Browsable(true), DevCoBrowsable(true), System.ComponentModel.Category("Appearance"), System.ComponentModel.Description("Indicates item's visibility when on pop-up menu.")] public eMenuVisibility MenuVisibility { get { return m_MenuVisibility; } set { if(m_MenuVisibility!=value) { m_MenuVisibility=value; if(ShouldSyncProperties) BarFunctions.SyncProperty(this, "MenuVisibility"); } } } [Browsable(false), DefaultValue(false)] public bool RecentlyUsed { get { return m_RecentlyUsed; } set { if(m_RecentlyUsed!=value) { m_RecentlyUsed=value; if(ShouldSyncProperties) BarFunctions.SyncProperty(this, "RecentlyUsed"); } } } protected override void OnEnabledChanged() { base.OnEnabledChanged(); if(m_TextBox!=null) m_TextBox.Enabled=this.Enabled; } [System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public override bool IsWindowed { get {return true;} } /// /// Gets or sets whether watermark text is displayed when control is empty. Default value is true. /// [DefaultValue(true), Description("Indicates whether watermark text is displayed when control is empty.")] public virtual bool WatermarkEnabled { get { return m_TextBox.WatermarkEnabled; } set { m_TextBox.WatermarkEnabled = value; } } /// /// Gets or sets the watermark image displayed inside of the control when Text is not set and control does not have input focus. /// [DefaultValue(null), Category("Appearance"), Description("Indicates watermark image displayed inside of the control when Text is not set and control does not have input focus.")] public Image WatermarkImage { get { return m_TextBox.WatermarkImage; } set { m_TextBox.WatermarkImage = value; } } /// /// Gets or sets the watermark image alignment. /// [DefaultValue(ContentAlignment.MiddleLeft), Category("Appearance"), Description("Indicates watermark image alignment.")] public ContentAlignment WatermarkImageAlignment { get { return m_TextBox.WatermarkImageAlignment; } set { m_TextBox.WatermarkImageAlignment = value; } } // /// Gets or sets the watermark (tip) text displayed inside of the control when Text is not set and control does not have input focus. This property supports text-markup. /// [Browsable(true), DefaultValue(""), Localizable(true), Category("Appearance"), Description("Indicates watermark text displayed inside of the control when Text is not set and control does not have input focus."), Editor("DevComponents.DotNetBar.Design.TextMarkupUIEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor))] public string WatermarkText { get { return m_TextBox.WatermarkText; } set { m_TextBox.WatermarkText = value; } } /// /// Gets or sets the watermark font. /// [Browsable(true), Category("Appearance"), Description("Indicates watermark font."), DefaultValue(null)] public Font WatermarkFont { get { return m_TextBox.WatermarkFont; } set { m_TextBox.WatermarkFont = value; } } /// /// Gets or sets the watermark text color. /// [Browsable(true), Category("Appearance"), Description("Indicates watermark text color.")] public Color WatermarkColor { get { return m_TextBox.WatermarkColor; } set { m_TextBox.WatermarkColor = value; } } /// /// Indicates whether property should be serialized by Windows Forms designer. /// [EditorBrowsable(EditorBrowsableState.Never)] public bool ShouldSerializeWatermarkColor() { return m_TextBox.WatermarkColor != SystemColors.GrayText; } /// /// Resets the property to default value. /// [EditorBrowsable(EditorBrowsableState.Never)] public void ResetWatermarkColor() { this.WatermarkColor = SystemColors.GrayText; } /// /// Gets or sets the watermark hiding behaviour. Default value indicates that watermark is hidden when control receives input focus. /// [DefaultValue(eWatermarkBehavior.HideOnFocus), Category("Behavior"), Description("Indicates watermark hiding behaviour.")] public eWatermarkBehavior WatermarkBehavior { get { return m_TextBox.WatermarkBehavior; } set { m_TextBox.WatermarkBehavior = value; } } /// /// Gets or sets whether FocusHighlightColor is used as background color to highlight text box when it has input focus. Default value is false. /// [DefaultValue(false), Browsable(true), Category("Appearance"), Description("Indicates whether FocusHighlightColor is used as background color to highlight text box when it has input focus.")] public bool FocusHighlightEnabled { get { return m_TextBox.FocusHighlightEnabled; } set { m_TextBox.FocusHighlightEnabled = value; } } /// /// Gets or sets the color used as background color to highlight text box when it has input focus and focus highlight is enabled. /// [Browsable(true), Category("Appearance"), Description("Indicates color used as background color to highlight text box when it has input focus and focus highlight is enabled.")] public Color FocusHighlightColor { get { return m_TextBox.FocusHighlightColor; } set { m_TextBox.FocusHighlightColor = value; } } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public bool ShouldSerializeFocusHighlightColor() { return m_TextBox.ShouldSerializeFocusHighlightColor(); } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public void ResetFocusHighlightColor() { m_TextBox.ResetFocusHighlightColor(); } [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), RefreshProperties(RefreshProperties.All), ParenthesizePropertyName(true)] public ControlBindingsCollection DataBindings { get { return m_TextBox.DataBindings; } } /// /// Gets or sets the text-alignment inside of the text box. /// [Description("Indicates text-alignment inside of the text box."), Localizable(true), Category("Appearance"), DefaultValue(0)] public HorizontalAlignment TextAlign { get { return m_TextBox.TextAlign; } set { m_TextBox.TextAlign = value; } } #if FRAMEWORK20 /// /// Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. /// [Browsable(true), Category("Buttons"), Description("Describes the settings for the custom button that can execute an custom action of your choosing when clicked."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public InputButtonSettings ButtonCustom { get { return m_TextBox.ButtonCustom; } } /// /// Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. /// [Browsable(true), Category("Buttons"), Description("Describes the settings for the custom button that can execute an custom action of your choosing when clicked."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public InputButtonSettings ButtonCustom2 { get { return m_TextBox.ButtonCustom2; } } #endif } }