Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mcs / class / System.Design / System.ComponentModel.Design / MultilineStringEditor.cs
1 //
2 // System.ComponentModel.Design.MultilineStringEditor.cs
3 // 
4 // Author:
5 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
6 // 
7 // (C) 2007 Andreas Nahr
8 // 
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30
31 using System;
32 using System.ComponentModel;
33 using System.Drawing.Design;
34 using System.Windows.Forms;
35 using System.Windows.Forms.Design;
36
37 namespace System.ComponentModel.Design
38 {
39         public sealed class MultilineStringEditor : UITypeEditor
40         {
41                 private class EditorControl : TextBox
42                 {
43                         public EditorControl ()
44                         {
45                                 Multiline = true;
46                                 AcceptsReturn = true;
47                                 Height = 135;
48                                 Width = 280;
49                                 ScrollBars = ScrollBars.Both;
50                                 WordWrap = false;
51                                 BorderStyle = BorderStyle.FixedSingle;
52                         }
53                 }
54
55                 private IWindowsFormsEditorService editorService;
56                 private EditorControl control = new EditorControl ();
57
58                 public MultilineStringEditor ()
59                 {
60                 }
61
62                 public override object EditValue (ITypeDescriptorContext context, IServiceProvider provider, object value)
63                 {
64                         if (context != null && provider != null)
65                         {
66                                 editorService = (IWindowsFormsEditorService)provider.GetService (typeof (IWindowsFormsEditorService));
67                                 if (editorService != null)
68                                 {
69                                         if (value == null)
70                                                 value = String.Empty;
71                                         else if (!(value is string))
72                                                 return value;
73
74                                         control.Text = (string)value;
75                                         editorService.DropDownControl (control);
76                                         return control.Text;
77                                 }
78                         }
79                         return base.EditValue (context, provider, value);
80                 }
81
82                 public override UITypeEditorEditStyle GetEditStyle (ITypeDescriptorContext context)
83                 {
84                         return UITypeEditorEditStyle.DropDown;
85                 }
86
87                 public override bool GetPaintValueSupported (ITypeDescriptorContext context)
88                 {
89                         return false;
90                 }
91         }
92 }