* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / System.Drawing.Design / System.Drawing.Design / IconEditor.cs
1 //
2 // System.Drawing.Design.IconEditor.cs
3 // 
4 // Authors:
5 //   Martin Willemoes Hansen (mwh@sysrq.dk)
6 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
7 // 
8 // (C) 2003 Martin Willemoes Hansen
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;
34 using System.Text;
35 using System.IO;
36 using System.Drawing;
37 using System.ComponentModel;
38 using System.Windows.Forms;
39
40 namespace System.Drawing.Design
41 {
42         // LAMESPEC: Why isn't this class inherited from ImageEditor?
43         public class IconEditor : UITypeEditor
44         {
45
46                 private OpenFileDialog openDialog;
47
48                 public IconEditor()
49                 {
50                 }
51
52                 protected static string CreateExtensionsString (string[] extensions, string sep)
53                 {
54                         if (extensions.Length > 0) {
55                                 StringBuilder sb = new StringBuilder();
56
57                                 sb.Append (extensions[0]);
58                                 for (int x = 1; x < extensions.Length - 1; x++) {
59                                         sb.Append (sep);
60                                         sb.Append (extensions[x]);
61                                 }
62                                 return sb.ToString();
63                         }
64                         else {
65                                 return string.Empty;
66                         }
67                 }
68
69                 protected static string CreateFilterEntry (IconEditor e)
70                 {
71                         StringBuilder sb = new StringBuilder();
72                         string ExtStr = CreateExtensionsString (e.GetExtensions(), ";");
73
74                         sb.Append (e.GetFileDialogDescription());
75                         sb.Append (" (" + ExtStr + ")" + "|");
76                         sb.Append (ExtStr);
77                         return sb.ToString();
78                 }
79
80                 public override object EditValue (ITypeDescriptorContext context,
81                         IServiceProvider provider, object value)
82                 {
83                         openDialog = new OpenFileDialog();
84                         openDialog.Title = Locale.GetText ("Open image file");
85                         openDialog.CheckFileExists = true;
86                         openDialog.CheckPathExists = true;
87                         openDialog.Filter = CreateFilterEntry (this);
88                         openDialog.Multiselect = false;
89
90                         // Show the dialog
91                         DialogResult result = openDialog.ShowDialog();
92
93                         // Check the result and create a new image from the file
94                         if (result == DialogResult.OK)
95                         {
96                                 return LoadFromStream (openDialog.OpenFile());
97                         }
98                         else
99                                 return value;
100                 }
101
102                 public override UITypeEditorEditStyle GetEditStyle (ITypeDescriptorContext context)
103                 {
104                         return UITypeEditorEditStyle.Modal;
105                 }
106
107                 protected virtual string[] GetExtensions()
108                 {
109                         return new string[] {"*.ico"};
110                 }
111
112                 protected virtual string GetFileDialogDescription()
113                 {
114                         return Locale.GetText ("Icon files");
115                 }
116
117                 public override bool GetPaintValueSupported (ITypeDescriptorContext context)
118                 {
119                         return true;
120                 }
121
122                 protected virtual Icon LoadFromStream (Stream stream)
123                 {
124                         return new Icon (stream);
125                 }
126
127                 public override void PaintValue (PaintValueEventArgs e)
128                 {
129                         Graphics G = e.Graphics;
130
131                         if (e.Value != null) {
132                                 Image I = (Image) e.Value;
133                                 G.DrawImage (I, e.Bounds);
134                         }
135
136                         G.DrawRectangle (Pens.Black, e.Bounds);
137                 }
138         }
139 }