diff --git a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.Toolbox/Styles.cs b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.Toolbox/Styles.cs
index 3cdff448bce..2f745c851ff 100644
--- a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.Toolbox/Styles.cs
+++ b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.Toolbox/Styles.cs
@@ -29,6 +29,7 @@ public class PropertyPadStyle
public NSColor Checkerboard0 { get; internal set; }
public NSColor Checkerboard1 { get; internal set; }
public NSColor ValueBlockBackgroundColor { get; internal set; }
+ public NSColor FrameBoxButtonBackgroundColor { get; internal set; }
public NSColor TabBorderColor { get; internal set; }
public NSColor PanelTabBackground { get; internal set; }
}
@@ -48,14 +49,16 @@ public static void LoadStyles ()
ToolbarBackgroundColor = NSColor.White;
CellBackgroundSelectedColor = NSColor.FromRgb (0.36f, 0.54f, 0.90f);
+
PropertyPad = new PropertyPadStyle {
Checkerboard0 = NSColor.FromRgb (255, 255, 255),
Checkerboard1 = NSColor.FromRgb (217, 217, 217),
PanelTabBackground = NSColor.FromRgb (248, 247, 248),
TabBorderColor = NSColor.FromRgba (0, 0, 0, 25),
- ValueBlockBackgroundColor = NSColor.FromRgba (0, 0, 0, 20)
- };
- } else {
+ ValueBlockBackgroundColor = NSColor.FromRgba (0, 0, 0, 20),
+ FrameBoxButtonBackgroundColor = NSColor.FromRgb (0.36f, 0.54f, 0.90f)
+ };
+ } else {
CellBackgroundSelectedColor = NSColor.FromRgb (0.38f, 0.55f, 0.91f);
HeaderBackgroundColor = NSColor.FromRgb (0.29f, 0.29f, 0.29f);
HeaderBorderBackgroundColor = NSColor.FromRgb (0.29f, 0.29f, 0.29f);
@@ -67,8 +70,9 @@ public static void LoadStyles ()
Checkerboard1 = NSColor.FromRgb (0, 0, 0),
PanelTabBackground = NSColor.FromRgb (85, 85, 85),
TabBorderColor = NSColor.FromRgba (255, 255, 255, 0),
- ValueBlockBackgroundColor = NSColor.FromRgba (255, 255, 255, 25)
- };
+ ValueBlockBackgroundColor = NSColor.FromRgba (255, 255, 255, 25),
+ FrameBoxButtonBackgroundColor = NSColor.FromRgb (0.38f, 0.55f, 0.91f)
+ };
}
}
}
diff --git a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.csproj b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.csproj
index 55d7a153a52..24a02a42a4b 100644
--- a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.csproj
+++ b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport.csproj
@@ -135,18 +135,17 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
diff --git a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/MacPropertyGrid.cs b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/MacPropertyGrid.cs
index 3232c62145e..488d513d117 100644
--- a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/MacPropertyGrid.cs
+++ b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/MacPropertyGrid.cs
@@ -30,29 +30,20 @@
#if MAC
-using MonoDevelop.Ide.Gui;
-using MonoDevelop.Components.Commands;
using System;
using MonoDevelop.Components;
using Xamarin.PropertyEditing;
using Xamarin.PropertyEditing.Mac;
-using MonoDevelop.Components.Mac;
-using MonoDevelop.Ide;
-using MonoDevelop.Ide.Commands;
-using MonoDevelop.Components.Theming;
using AppKit;
using CoreGraphics;
-using Foundation;
namespace MonoDevelop.DesignerSupport
{
- class MacPropertyGrid : NSStackView, IPropertyGrid
+ class MacPropertyGrid : NSView, IPropertyGrid
{
- MacPropertyEditorPanel propertyEditorPanel;
-
- PropertyPadEditorProvider editorProvider;
-
- NSScrollView scrollView;
+ readonly MacPropertyEditorPanel propertyEditorPanel;
+ ComponentModelEditorProvider editorProvider;
+ ComponentModelTarget currentSelectedObject;
public event EventHandler Focused;
@@ -62,66 +53,39 @@ class MacPropertyGrid : NSStackView, IPropertyGrid
public MacPropertyGrid ()
{
- Orientation = NSUserInterfaceLayoutOrientation.Vertical;
- Alignment = NSLayoutAttribute.Leading;
- Spacing = 10;
- Distribution = NSStackViewDistribution.Fill;
-
- propertyEditorPanel = new MacPropertyEditorPanel (new MonoDevelopHostResourceProvider ());
-
- scrollView = new NSScrollView () {
- HasVerticalScroller = true,
- HasHorizontalScroller = false,
+ propertyEditorPanel = new MacPropertyEditorPanel (new MonoDevelopHostResourceProvider ()) {
+ ShowHeader = false
};
- scrollView.WantsLayer = true;
- scrollView.BackgroundColor = Styles.HeaderBackgroundColor;
- scrollView.DocumentView = propertyEditorPanel;
+ AddSubview (propertyEditorPanel);
- AddArrangedSubview (scrollView);
-
- propertyEditorPanel.Focused += PropertyEditorPanel_Focused;
+ editorProvider = new ComponentModelEditorProvider ();
+ editorProvider.PropertyChanged += EditorProvider_PropertyChanged;
- //propertyEditorPanel.PropertiesChanged += PropertyEditorPanel_PropertiesChanged;
- }
-
- void Widget_Focused (object o, Gtk.FocusedArgs args)
- {
- propertyEditorPanel.Window.MakeFirstResponder (propertyEditorPanel);
+ propertyEditorPanel.TargetPlatform = new TargetPlatform (editorProvider) {
+ AutoExpandAll = true
+ };
+ propertyEditorPanel.ArrangeMode = PropertyArrangeMode.Category;
}
- void PropertyEditorPanel_Focused (object sender, EventArgs e) => Focused?.Invoke (this, EventArgs.Empty);
+ private void EditorProvider_PropertyChanged (object sender, EventArgs e) =>
+ PropertyGridChanged?.Invoke (this, EventArgs.Empty);
public override void SetFrameSize (CGSize newSize)
{
- scrollView.SetFrameSize (newSize);
base.SetFrameSize (newSize);
+ propertyEditorPanel.SetFrameSize (newSize);
}
- void PropertyEditorPanel_PropertiesChanged (object sender, EventArgs e) => PropertyGridChanged?.Invoke (this, e);
-
public void BlankPad ()
{
propertyEditorPanel.SelectedItems.Clear ();
currentSelectedObject = null;
}
- public void OnPadContentShown ()
- {
- if (editorProvider == null) {
- editorProvider = new PropertyPadEditorProvider ();
- propertyEditorPanel.TargetPlatform = new TargetPlatform (editorProvider) {
- AutoExpandGroups = new string [] { "Build", "Misc", "NuGet", "Reference" }
- };
- propertyEditorPanel.ArrangeMode = PropertyArrangeMode.Category;
- }
- }
-
- PropertyPadItem currentSelectedObject;
-
public void SetCurrentObject (object lastComponent, object [] propertyProviders)
{
if (lastComponent != null) {
- var selection = new PropertyPadItem (lastComponent, propertyProviders);
+ var selection = new ComponentModelTarget (lastComponent, propertyProviders);
if (currentSelectedObject != selection) {
propertyEditorPanel.SelectedItems.Clear ();
propertyEditorPanel.SelectedItems.Add (selection);
@@ -130,23 +94,32 @@ public void SetCurrentObject (object lastComponent, object [] propertyProviders)
}
}
- protected override void Dispose (bool disposing)
+ public void Populate (bool saveEditSession)
{
- if (propertyEditorPanel != null) {
- propertyEditorPanel.Focused -= PropertyEditorPanel_Focused;
- }
- base.Dispose (disposing);
+ //not implemented
}
- public void Populate (bool saveEditSession)
+ public void SetToolbarProvider (Components.PropertyGrid.PropertyGrid.IToolbarProvider toolbarProvider)
{
//not implemented
}
- public void SetToolbarProvider (Components.PropertyGrid.PropertyGrid.IToolbarProvider toolbarProvider)
+ public void OnPadContentShown ()
{
//not implemented
}
+
+ protected override void Dispose (bool disposing)
+ {
+ if (disposing) {
+ if (editorProvider != null) {
+ editorProvider.PropertyChanged -= EditorProvider_PropertyChanged;
+ editorProvider.Dispose ();
+ editorProvider = null;
+ }
+ }
+ base.Dispose (disposing);
+ }
}
class MacPropertyEditorPanel : PropertyEditorPanel
diff --git a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/MonoDevelopHostResourceProvider.cs b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/MonoDevelopHostResourceProvider.cs
index e730dacf417..0e67f77c01f 100644
--- a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/MonoDevelopHostResourceProvider.cs
+++ b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/MonoDevelopHostResourceProvider.cs
@@ -60,8 +60,10 @@ public override NSColor GetNamedColor (string name)
return Styles.PropertyPad.TabBorderColor;
case ValueBlockBackgroundColor:
return Styles.PropertyPad.ValueBlockBackgroundColor;
+ case FrameBoxButtonBackgroundColor:
+ return Styles.PropertyPad.FrameBoxButtonBackgroundColor;
}
- return base.GetNamedColor (name);
+ return NSColor.FromName (name);
}
}
}
diff --git a/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/NativePropertyEditor/ComponentModelEditorProvider.cs b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/NativePropertyEditor/ComponentModelEditorProvider.cs
new file mode 100644
index 00000000000..c9422c765fb
--- /dev/null
+++ b/main/src/addins/MonoDevelop.DesignerSupport/MonoDevelop.DesignerSupport/NativePropertyEditor/ComponentModelEditorProvider.cs
@@ -0,0 +1,165 @@
+//
+// PropertyPadEditorProvider.cs
+//
+// Author:
+// jmedrano
+//
+// Copyright (c) 2018
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if MAC
+
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Xamarin.PropertyEditing;
+
+namespace MonoDevelop.DesignerSupport
+{
+ class ComponentModelEditorProvider
+ : IEditorProvider, IDisposable
+ {
+ public event EventHandler PropertyChanged;
+
+ public IReadOnlyDictionary KnownTypes {
+ get;
+ } = new Dictionary ();
+
+ ComponentModelTarget target;
+ ComponentModelObjectEditor currentEditor;
+
+ Task IEditorProvider.GetObjectEditorAsync(object item)
+ {
+ target = item as ComponentModelTarget;
+ if (target == null) {
+ throw new ArgumentException (string.Format ("Cannot get editor for type {0} only ComponentModelObjectEditor types are allowed", item.GetType ().Name));
+ }
+
+ if (currentEditor != null) {
+ currentEditor.PropertyChanged -= CurrentEditor_PropertyChanged;
+ }
+
+ currentEditor = new ComponentModelObjectEditor (target);
+ currentEditor.PropertyChanged += CurrentEditor_PropertyChanged;
+
+ //on each editor we store current used providers
+ return Task.FromResult(currentEditor);
+ }
+
+ void CurrentEditor_PropertyChanged (object sender, EventArgs e)
+ => PropertyChanged?.Invoke (this, e);
+
+ public Task