Implement MachineKey.Protect and MachineKey.Unprotect
[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                 private Hashtable properties;
49
50                 public MenuCommand (EventHandler handler, CommandID command)
51                 {
52                         this.handler = handler;
53                         this.command = command;
54                 }
55
56                 public virtual bool Checked {
57                         get {
58                                 return ischecked;
59                         }
60                         set {
61                                 if (ischecked != value) {
62                                         ischecked = value;
63                                         OnCommandChanged (EventArgs.Empty);
64                                 }
65                         }
66                 }
67
68                 public virtual CommandID CommandID {
69                         get {
70                                 return command;
71                         }
72                 }
73
74                 public virtual bool Enabled {
75                         get {
76                                 return enabled;
77                         }
78                         set {
79                                 if (enabled != value) 
80                                 {
81                                         enabled = value;
82                                         OnCommandChanged (EventArgs.Empty);
83                                 }
84                         }
85                 }
86
87                 [MonoTODO]
88                 public virtual int OleStatus {
89                         get {
90                                 // This is calcualted from the other properties, but the docs to not tell how
91                                 // Default seems to be "3", but changes with diffentent set properties
92                                 return 3;
93                         }               
94                 }
95
96                 public virtual IDictionary Properties {
97                         get {
98                                 if (properties == null)
99                                         properties = new Hashtable ();
100                                 return properties;
101                         }
102                 }
103
104                 public virtual bool Supported {
105                         get {
106                                 return issupported; 
107                         }
108                         
109                         set {
110                                 issupported = value;
111                         }
112                 }
113
114                 public virtual bool Visible {
115                         get {
116                                 return visible;
117                         }
118                         
119                         set {
120                                 visible = value;
121                         }
122                 }
123
124                 public virtual void Invoke()
125                 {
126                         // FIXME Not sure if this invocation is what should be done here
127                         if (handler != null)
128                                 handler (this, EventArgs.Empty);
129                 }
130                 
131                 public virtual void Invoke (object arg)
132                 {
133                         this.Invoke ();
134                 }
135
136                 protected virtual void OnCommandChanged (EventArgs e)
137                 {
138                         if (CommandChanged != null)
139                                 CommandChanged (this, e);
140                 }
141
142                 public override string ToString()
143                 {
144                         // MS runtime produces a NullReferenceException here if CommandID property == null
145                         // which I guess isn't a good idea (throwing exceptions in ToStrings???) - bug in MS??
146                         string commandpart = string.Empty;
147                         if (command != null)
148                                 commandpart = command.ToString ();
149                         commandpart = string.Concat (commandpart, " : ");
150                         if (this.Supported)
151                                 commandpart = string.Concat (commandpart, "Supported");
152                         if (this.Enabled)
153                                 commandpart = string.Concat (commandpart, "|Enabled");
154                         if (this.Visible)
155                                 commandpart = string.Concat (commandpart, "|Visible");
156                         if (this.Checked)
157                                 commandpart = string.Concat (commandpart, "|Checked");
158                         return commandpart;
159                 }
160                 
161                 public event EventHandler CommandChanged;
162         }       
163 }