* TreeView.cs: Don't draw the selected node when we lose
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / StatusBarPanel.cs
1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
8 //
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
11 //
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 //
20 // Copyright (c) 2004-2005 Novell, Inc.
21 //
22 // Authors:
23 //      Jackson Harper (jackson@ximian.com)
24
25 // COMPLETE
26
27 using System;
28 using System.Drawing;
29 using System.ComponentModel;
30 using System.ComponentModel.Design;
31 using System.Runtime.InteropServices;
32
33 namespace System.Windows.Forms {
34         [DefaultProperty("Text")]
35         [DesignTimeVisible(false)]
36         public class StatusBarPanel : Component, ISupportInitialize {
37                 #region Local Variables
38                 private StatusBar parent;
39
40                 private bool initializing;
41                 private string text = String.Empty;
42                 private string tool_tip_text = String.Empty;
43
44                 private Icon icon;
45                 private HorizontalAlignment alignment = HorizontalAlignment.Left;
46                 private StatusBarPanelAutoSize auto_size = StatusBarPanelAutoSize.None;
47                 private StatusBarPanelBorderStyle border_style = StatusBarPanelBorderStyle.Sunken;
48                 private StatusBarPanelStyle style;
49                 private int width = 100;
50                 private int twidth = -1;
51                 private int min_width = 10;
52                 #endregion      // Local Variables
53
54                 #region Constructors
55                 public StatusBarPanel ()
56                 {
57                 }
58                 #endregion      // Constructors
59
60                 [DefaultValue(HorizontalAlignment.Left)]
61                 [Localizable(true)]
62                 public HorizontalAlignment Alignment {
63                         get { return alignment; }
64                         set { alignment = value; }
65                 }
66
67                 [DefaultValue(StatusBarPanelAutoSize.None)]
68                 public StatusBarPanelAutoSize AutoSize {
69                         get { return auto_size; }
70                         set { auto_size = value; }
71                 }
72
73                 [DefaultValue(StatusBarPanelBorderStyle.Sunken)]
74                 [DispId(-504)]
75                 public StatusBarPanelBorderStyle BorderStyle {
76                         get { return border_style; }
77                         set { border_style = value; }
78                 }
79
80                 [DefaultValue(null)]
81                 [Localizable(true)]
82                 public Icon Icon {
83                         get { return icon; }
84                         set { icon = value; }
85                 }
86
87                 [DefaultValue(10)]
88                 [Localizable(true)]
89                 [RefreshProperties(RefreshProperties.All)]
90                 public int MinWidth {
91                         get {
92                                 if (AutoSize == StatusBarPanelAutoSize.None)
93                                         return Width;
94                                 return min_width;
95                         }
96                         set {
97                                 if (value < 0)
98                                         throw new ArgumentException ("value");
99                                 min_width = value;
100                         }
101                 }
102                 
103                 [DefaultValue(100)]
104                 [Localizable(true)]
105                 public int Width {
106                         get { return width; }
107                         set {
108                                 if (value < 0)
109                                         throw new ArgumentException ("value");
110
111                                 if (initializing)
112                                         twidth = value;
113                                 else
114                                         width = value;
115                         }
116                 }
117                 
118                 [DefaultValue(StatusBarPanelStyle.Text)]
119                 public StatusBarPanelStyle Style {
120                         get { return style; }
121                         set { style = value; }
122                 }
123
124                 [DefaultValue("")]
125                 [Localizable(true)]
126                 public string Text {
127                         get { return text; }
128                         set { text = value; }
129                 }
130
131                 [DefaultValue("")]
132                 [Localizable(true)]
133                 public string ToolTipText {
134                         get { return tool_tip_text; }
135                         set { tool_tip_text = value; }
136                 }
137
138                 [Browsable(false)]
139                 public StatusBar Parent {
140                         get { return parent; }
141                 }
142
143                 internal void SetParent (StatusBar parent)
144                 {
145                         this.parent = parent;
146                 }
147
148                 public override string ToString ()
149                 {
150                         return "StatusBarPanel: {" + Text +"}";
151                 }
152
153                 protected override void Dispose (bool disposing)
154                 {
155                 }
156
157                 public virtual void BeginInit ()
158                 {
159                         initializing = true;
160                 }
161
162                 public virtual void EndInit ()
163                 {
164                         if (!initializing || twidth == -1)
165                                 return;
166
167                         width = twidth;
168                         twidth = -1;
169                         initializing = false;
170                 }
171         }
172 }
173
174