In .:
[mono.git] / mcs / class / System.Design / System.Windows.Forms.Design / DockEditor.cs
index 9e8b403548c391bc7deb6d3b243cc386f3a94653..19300df25d956077b4daedc6fd10cbbe1f623297 100644 (file)
@@ -42,12 +42,186 @@ namespace System.Windows.Forms.Design
                [MonoTODO]
                public override object EditValue (ITypeDescriptorContext context, IServiceProvider provider, object value)
                {
-                       throw new NotImplementedException ();
+                       if (context != null && provider != null)
+                       {
+                               IWindowsFormsEditorService editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
+                               if (editorService != null)
+                               {
+                                       // Create the UI editor control
+                                       DockEditorControl dockEditorControl = new DockEditorControl(editorService); 
+                                       dockEditorControl.DockStyle = (DockStyle)context.Instance;
+                                       editorService.DropDownControl(dockEditorControl);
+
+                                       return dockEditorControl.DockStyle;
+                               }
+                       }
+                       return base.EditValue(context, provider, value);
                }
 
                public override UITypeEditorEditStyle GetEditStyle (ITypeDescriptorContext context)
                {
                        return UITypeEditorEditStyle.DropDown;
                }
+               private class DockEditorControl : System.Windows.Forms.UserControl\r
+               {\r
+                       private System.Windows.Forms.CheckBox buttonNone;\r
+                       private System.Windows.Forms.Panel panel1;\r
+                       private System.Windows.Forms.CheckBox buttonBottom;\r
+                       private System.Windows.Forms.CheckBox buttonTop;\r
+                       private System.Windows.Forms.Panel panel2;\r
+                       private System.Windows.Forms.CheckBox buttonLeft;\r
+                       private System.Windows.Forms.CheckBox buttonRight;\r
+                       private System.Windows.Forms.CheckBox buttonFill;\r
+                       private IWindowsFormsEditorService editorService;\r
+                       private DockStyle dockStyle;\r
+\r
+                       public DockEditorControl(IWindowsFormsEditorService editorService)\r
+                       {\r
+                               buttonNone = new System.Windows.Forms.CheckBox();\r
+                               panel1 = new System.Windows.Forms.Panel();\r
+                               buttonBottom = new System.Windows.Forms.CheckBox();\r
+                               buttonTop = new System.Windows.Forms.CheckBox();\r
+                               panel2 = new System.Windows.Forms.Panel();\r
+                               buttonLeft = new System.Windows.Forms.CheckBox();\r
+                               buttonRight = new System.Windows.Forms.CheckBox();\r
+                               buttonFill = new System.Windows.Forms.CheckBox();\r
+                               panel1.SuspendLayout();\r
+                               panel2.SuspendLayout();\r
+                               SuspendLayout();\r
+\r
+                               buttonNone.Appearance = Appearance.Button;\r
+                               buttonNone.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+                               buttonNone.Location = new System.Drawing.Point(0, 92);\r
+                               buttonNone.Size = new System.Drawing.Size(150, 23);\r
+                               buttonNone.TabIndex = 5;\r
+                               buttonNone.Text = "None";\r
+                               buttonNone.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r
+                               buttonNone.Click += new System.EventHandler(buttonClick);\r
+\r
+                               panel1.Controls.Add(panel2);\r
+                               panel1.Controls.Add(buttonTop);\r
+                               panel1.Controls.Add(buttonBottom);\r
+                               panel1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+                               panel1.Location = new System.Drawing.Point(0, 0);\r
+                               panel1.Name = "panel1";\r
+                               panel1.Size = new System.Drawing.Size(150, 92);\r
+                               panel1.TabStop = false;\r
+\r
+                               buttonBottom.Appearance = Appearance.Button;\r
+                               buttonBottom.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+                               buttonBottom.Location = new System.Drawing.Point(0, 69);\r
+                               buttonBottom.Name = "buttonBottom";\r
+                               buttonBottom.Size = new System.Drawing.Size(150, 23);\r
+                               buttonBottom.TabIndex = 5;\r
+                               buttonBottom.Click += new System.EventHandler(buttonClick);\r
+\r
+                               buttonTop.Appearance = Appearance.Button;\r
+                               buttonTop.Dock = System.Windows.Forms.DockStyle.Top;\r
+                               buttonTop.Location = new System.Drawing.Point(0, 0);\r
+                               buttonTop.Name = "buttonTop";\r
+                               buttonTop.Size = new System.Drawing.Size(150, 23);\r
+                               buttonTop.TabIndex = 1;\r
+                               buttonTop.Click += new System.EventHandler(buttonClick);\r
+\r
+                               panel2.Controls.Add(buttonFill);\r
+                               panel2.Controls.Add(buttonRight);\r
+                               panel2.Controls.Add(buttonLeft);\r
+                               panel2.Dock = System.Windows.Forms.DockStyle.Fill;\r
+                               panel2.Location = new System.Drawing.Point(0, 23);\r
+                               panel2.Size = new System.Drawing.Size(150, 46);\r
+                               panel2.TabIndex = 2;\r
+                               panel2.TabStop = false;\r
+\r
+                               buttonLeft.Appearance = Appearance.Button;\r
+                               buttonLeft.Dock = System.Windows.Forms.DockStyle.Left;\r
+                               buttonLeft.Location = new System.Drawing.Point(0, 0);\r
+                               buttonLeft.Size = new System.Drawing.Size(24, 46);\r
+                               buttonLeft.TabIndex = 2;\r
+                               buttonLeft.Click += new System.EventHandler(buttonClick);\r
+\r
+                               buttonRight.Appearance = Appearance.Button;\r
+                               buttonRight.Dock = System.Windows.Forms.DockStyle.Right;\r
+                               buttonRight.Location = new System.Drawing.Point(126, 0);\r
+                               buttonRight.Size = new System.Drawing.Size(24, 46);\r
+                               buttonRight.TabIndex = 4;\r
+                               buttonRight.Click += new System.EventHandler(buttonClick);\r
+\r
+                               buttonFill.Appearance = Appearance.Button;\r
+                               buttonFill.Dock = System.Windows.Forms.DockStyle.Fill;\r
+                               buttonFill.Location = new System.Drawing.Point(24, 0);\r
+                               buttonFill.Size = new System.Drawing.Size(102, 46);\r
+                               buttonFill.TabIndex = 3;\r
+                               buttonFill.Click += new System.EventHandler(buttonClick);\r
+\r
+                               Controls.Add(panel1);\r
+                               Controls.Add(buttonNone);\r
+                               Size = new System.Drawing.Size(150, 115);\r
+                               panel1.ResumeLayout(false);\r
+                               panel2.ResumeLayout(false);\r
+                               ResumeLayout(false);\r
+\r
+\r
+                               this.editorService = editorService;\r
+                               dockStyle = DockStyle.None;\r
+\r
+                       }\r
+\r
+                       private void buttonClick(object sender, System.EventArgs e)\r
+                       {\r
+                               if (sender == buttonNone)\r
+                                       dockStyle = DockStyle.None;\r
+                               else if (sender == buttonFill)\r
+                                       dockStyle = DockStyle.Fill;\r
+                               else if (sender == buttonLeft)\r
+                                       dockStyle = DockStyle.Left;\r
+                               else if (sender == buttonRight)\r
+                                       dockStyle = DockStyle.Right;\r
+                               else if (sender == buttonTop)\r
+                                       dockStyle = DockStyle.Top;\r
+                               else if (sender == buttonBottom)\r
+                                       dockStyle = DockStyle.Bottom;\r
+                               editorService.CloseDropDown();\r
+                       }\r
+\r
+\r
+                       public DockStyle DockStyle\r
+                       {\r
+                               get\r
+                               {\r
+                                       return dockStyle;\r
+                               }\r
+                               set\r
+                               {\r
+                                       dockStyle = value;\r
+                                       buttonNone.Checked = false;\r
+                                       buttonBottom.Checked = false;\r
+                                       buttonTop.Checked = false;\r
+                                       buttonLeft.Checked = false;\r
+                                       buttonRight.Checked = false;\r
+                                       buttonFill.Checked = false;\r
+                                       switch (DockStyle)\r
+                                       {\r
+                                               case DockStyle.Fill:\r
+                                                       buttonFill.CheckState = CheckState.Checked;\r
+                                                       break;\r
+                                               case DockStyle.None:\r
+                                                       buttonNone.CheckState = CheckState.Checked;\r
+                                                       break;\r
+                                               case DockStyle.Left:\r
+                                                       buttonLeft.CheckState = CheckState.Checked;\r
+                                                       break;\r
+                                               case DockStyle.Right:\r
+                                                       buttonRight.CheckState = CheckState.Checked;\r
+                                                       break;\r
+                                               case DockStyle.Top:\r
+                                                       buttonTop.CheckState = CheckState.Checked;\r
+                                                       break;\r
+                                               case DockStyle.Bottom:\r
+                                                       buttonBottom.CheckState = CheckState.Checked;\r
+                                                       break;\r
+                                       }\r
+                               }\r
+                       }\r
+               }
        }
 }