2008-04-16 Marek Habersack <mhabersack@novell.com>
[mono.git] / mcs / class / System / System.ComponentModel.Design / MenuCommand.cs
1 //
2 // System.ComponentModel.Design.MenuCommand.cs
3 //
4 // Authors:
5 //   Alejandro Sánchez Acosta  <raciel@es.gnu.org>
6 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
7 //
8 // (C) Alejandro Sánchez Acosta
9 // (C) 2003 Andreas Nahr
10 // 
11
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 // 
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 // 
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 //
32
33 using System.Collections;
34 using System.Runtime.InteropServices;
35
36 namespace System.ComponentModel.Design
37 {
38         [ComVisible(true)]
39         public class MenuCommand
40         {
41
42                 private EventHandler handler;
43                 private CommandID command;
44                 private bool ischecked = false;
45                 private bool enabled = true;
46                 private bool issupported = true;
47                 private bool visible = true;
48 #if NET_2_0
49                 private Hashtable properties;
50 #endif
51
52                 public MenuCommand (EventHandler handler, CommandID command)
53                 {
54                         this.handler = handler;
55                         this.command = command;
56                 }
57
58                 public virtual bool Checked {
59                         get {
60                                 return ischecked;
61                         }
62                         set {
63                                 if (ischecked != value) {
64                                         ischecked = value;
65                                         OnCommandChanged (EventArgs.Empty);
66                                 }
67                         }
68                 }
69
70                 public virtual CommandID CommandID {
71                         get {
72                                 return command;
73                         }
74                 }
75
76                 public virtual bool Enabled {
77                         get {
78                                 return enabled;
79                         }
80                         set {
81                                 if (enabled != value) 
82                                 {
83                                         enabled = value;
84                                         OnCommandChanged (EventArgs.Empty);
85                                 }
86                         }
87                 }
88
89                 [MonoTODO]
90                 public virtual int OleStatus {
91                         get {
92                                 // This is calcualted from the other properties, but the docs to not tell how
93                                 // Default seems to be "3", but changes with diffentent set properties
94                                 return 3;
95                         }               
96                 }
97
98 #if NET_2_0
99                 public virtual IDictionary Properties {
100                         get {
101                                 if (properties == null)
102                                         properties = new Hashtable ();
103                                 return properties;
104                         }
105                 }
106 #endif
107
108                 public virtual bool Supported {
109                         get {
110                                 return issupported; 
111                         }
112                         
113                         set {
114                                 issupported = value;
115                         }
116                 }
117
118                 public virtual bool Visible {
119                         get {
120                                 return visible;
121                         }
122                         
123                         set {
124                                 visible = value;
125                         }
126                 }
127
128                 public virtual void Invoke()
129                 {
130                         // FIXME Not sure if this invocation is what should be done here
131                         if (handler != null)
132                                 handler (this, EventArgs.Empty);
133                 }
134                 
135 #if NET_2_0
136                 public virtual void Invoke (object arg)
137                 {
138                         this.Invoke ();
139                 }
140 #endif
141
142                 protected virtual void OnCommandChanged (EventArgs e)
143                 {
144                         if (CommandChanged != null)
145                                 CommandChanged (this, e);
146                 }
147
148                 public override string ToString()
149                 {
150                         // MS runtime produces a NullReferenceException here if CommandID property == null
151                         // which I guess isn't a good idea (throwing exceptions in ToStrings???) - bug in MS??
152                         string commandpart = string.Empty;
153                         if (command != null)
154                                 commandpart = command.ToString ();
155                         commandpart = string.Concat (commandpart, " : ");
156                         if (this.Supported)
157                                 commandpart = string.Concat (commandpart, "Supported");
158                         if (this.Enabled)
159                                 commandpart = string.Concat (commandpart, "|Enabled");
160                         if (this.Visible)
161                                 commandpart = string.Concat (commandpart, "|Visible");
162                         if (this.Checked)
163                                 commandpart = string.Concat (commandpart, "|Checked");
164                         return commandpart;
165                 }
166                 
167                 public event EventHandler CommandChanged;
168         }       
169 }