2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[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.Runtime.InteropServices;
34
35 namespace System.ComponentModel.Design
36 {
37         [ComVisible(true)]
38         public class MenuCommand
39         {
40
41                 private EventHandler handler;
42                 private CommandID command;
43                 private bool ischecked = false;
44                 private bool enabled = true;
45                 private bool issupported = true;
46                 private bool visible = true;
47
48                 public MenuCommand (EventHandler handler, CommandID command)
49                 {
50                         this.handler = handler;
51                         this.command = command;
52                 }
53
54                 public virtual bool Checked {
55                         get {
56                                 return ischecked;
57                         }
58                         set {
59                                 if (ischecked != value) {
60                                         ischecked = value;
61                                         OnCommandChanged (EventArgs.Empty);
62                                 }
63                         }
64                 }
65
66                 public virtual CommandID CommandID {
67                         get {
68                                 return command;
69                         }
70                 }
71
72                 public virtual bool Enabled {
73                         get {
74                                 return enabled;
75                         }
76                         set {
77                                 if (enabled != value) 
78                                 {
79                                         enabled = value;
80                                         OnCommandChanged (EventArgs.Empty);
81                                 }
82                         }
83                 }
84
85                 [MonoTODO]
86                 public virtual int OleStatus {
87                         get {
88                                 // This is calcualted from the other properties, but the docs to not tell how
89                                 // Default seems to be "3", but changes with diffentent set properties
90                                 return 3;
91                         }               
92                 }
93
94                 public virtual bool Supported {
95                         get {
96                                 return issupported; 
97                         }
98                         
99                         set {
100                                 issupported = value;
101                         }
102                 }
103
104                 public virtual bool Visible {
105                         get {
106                                 return visible;
107                         }
108                         
109                         set {
110                                 visible = value;
111                         }
112                 }
113
114                 public virtual void Invoke()
115                 {
116                         // FIXME Not sure if this invocation is what should be done here
117                         if (handler != null)
118                                 handler (this, EventArgs.Empty);
119                 }
120                 
121                 protected virtual void OnCommandChanged (EventArgs e)
122                 {
123                         if (CommandChanged != null)
124                                 CommandChanged (this, e);
125                 }
126
127                 public override string ToString()
128                 {
129                         // MS runtime produces a NullReferenceException here if CommandID property == null
130                         // which I guess isn't a good idea (throwing exceptions in ToStrings???) - bug in MS??
131                         string commandpart = string.Empty;
132                         if (command != null)
133                                 commandpart = command.ToString ();
134                         commandpart = string.Concat (commandpart, " : ");
135                         if (this.Supported)
136                                 commandpart = string.Concat (commandpart, "Supported");
137                         if (this.Enabled)
138                                 commandpart = string.Concat (commandpart, "|Enabled");
139                         if (this.Visible)
140                                 commandpart = string.Concat (commandpart, "|Visible");
141                         if (this.Checked)
142                                 commandpart = string.Concat (commandpart, "|Checked");
143                         return commandpart;
144                 }
145                 
146                 public event EventHandler CommandChanged;
147         }       
148 }