[mapguide-commits] r5716 - in trunk/Tools/Maestro: Maestro.Base/Editor OSGeo.MapGuide.MaestroAPI/ObjectModels

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Apr 21 11:10:07 EDT 2011


Author: jng
Date: 2011-04-21 08:10:07 -0700 (Thu, 21 Apr 2011)
New Revision: 5716

Modified:
   trunk/Tools/Maestro/Maestro.Base/Editor/LayerDefinitionEditor.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerFactory.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaces.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/SymbolInterfaces.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/VectorLayerDefinitionImpl.cs
Log:
Use the same unsupported placeholder to gracefully handle Layer Definitions with un-editable elements (ie. Composite Type Styles)


Modified: trunk/Tools/Maestro/Maestro.Base/Editor/LayerDefinitionEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Editor/LayerDefinitionEditor.cs	2011-04-21 13:57:00 UTC (rev 5715)
+++ trunk/Tools/Maestro/Maestro.Base/Editor/LayerDefinitionEditor.cs	2011-04-21 15:10:07 UTC (rev 5716)
@@ -64,10 +64,22 @@
             var dl = _res.SubLayer as IDrawingLayerDefinition;
             if (vl != null)
             {
-                var ed = new VectorLayerEditorCtrl();
-                ed.Bind(service);
-                ed.Dock = DockStyle.Fill;
-                panelBody.Controls.Add(ed);
+                //TODO: This is a stopgap measure until we have proper editor support for Composite Type styles.
+                //Until then, we check if it has composite style rules. Show a placeholder if we find any because this
+                //editor cannot edit them
+                if (HasCompositeRules(vl))
+                {
+                    var ed = new UnsupportedEditorControl();
+                    ed.Dock = DockStyle.Fill;
+                    panelBody.Controls.Add(ed);
+                }
+                else
+                {
+                    var ed = new VectorLayerEditorCtrl();
+                    ed.Bind(service);
+                    ed.Dock = DockStyle.Fill;
+                    panelBody.Controls.Add(ed);
+                }
             }
             else if (gl != null)
             {
@@ -89,6 +101,17 @@
             }
         }
 
+        private static bool HasCompositeRules(IVectorLayerDefinition vl)
+        {
+            foreach (var vsr in vl.VectorScaleRange)
+            {
+                var vsr2 = vsr as IVectorScaleRange2;
+                if (vsr2.CompositeStyle != null)
+                    return true;
+            }
+            return false;
+        }
+
         protected override void OnBeforeSave(object sender, CancelEventArgs e)
         {
             if (_edsvc.IsNew)

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerFactory.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerFactory.cs	2011-04-21 13:57:00 UTC (rev 5715)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerFactory.cs	2011-04-21 15:10:07 UTC (rev 5716)
@@ -84,6 +84,8 @@
         {
             var vl = new VectorLayerDefinitionType();
 
+            //TODO: Create composite type style if 1.2 or 1.3 schema
+
             vl.VectorScaleRange = new System.ComponentModel.BindingList<VectorScaleRangeType>();
             var defaultRange = new VectorScaleRangeType()
             {

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaces.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaces.cs	2011-04-21 13:57:00 UTC (rev 5715)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/LayerInterfaces.cs	2011-04-21 15:10:07 UTC (rev 5716)
@@ -572,6 +572,17 @@
     }
 
     /// <summary>
+    /// The stylization to be applied to the vector features for a given scale range. Supports composite styles
+    /// </summary>
+    public interface IVectorScaleRange2 : IVectorScaleRange
+    {
+        /// <summary>
+        /// Gets or sets the composite style for this scale range
+        /// </summary>
+        ICompositeTypeStyle CompositeStyle { get; set; }
+    }
+
+    /// <summary>
     /// Represents a name-value pair
     /// </summary>
     public interface INameStringPair
@@ -616,7 +627,11 @@
         /// <summary>
         /// 
         /// </summary>
-        Point
+        Point,
+        /// <summary>
+        /// 
+        /// </summary>
+        Composite
     }
 
     /// <summary>
@@ -1526,7 +1541,7 @@
     /// <summary>
     /// Represents a composite style definition
     /// </summary>
-    public interface ICompositeTypeStyle
+    public interface ICompositeTypeStyle : IVectorStyle
     {
         /// <summary>
         /// Gets the composite rules.

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/SymbolInterfaces.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/SymbolInterfaces.cs	2011-04-21 13:57:00 UTC (rev 5715)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/SymbolInterfaces.cs	2011-04-21 15:10:07 UTC (rev 5716)
@@ -62,22 +62,22 @@
         /// <summary>
         /// Gets or sets the X scale
         /// </summary>
-        double? ScaleX { get; set; }
+        string ScaleX { get; set; }
 
         /// <summary>
         /// Gets or sets the Y scale
         /// </summary>
-        double? ScaleY { get; set; }
+        string ScaleY { get; set; }
 
         /// <summary>
         /// Gets or sets the X insertion offset
         /// </summary>
-        double? InsertionOffsetX { get; set; }
+        string InsertionOffsetX { get; set; }
 
         /// <summary>
         /// Gets or sets the Y insertion offset
         /// </summary>
-        double? InsertionOffsetY { get; set; }
+        string InsertionOffsetY { get; set; }
 
         /// <summary>
         /// Gets or sets the size context
@@ -87,22 +87,22 @@
         /// <summary>
         /// Gets or sets whether to draw this instance last
         /// </summary>
-        bool? DrawLast { get; set; }
+        string DrawLast { get; set; }
 
         /// <summary>
         /// Gets or sets whether to check the exclusion region
         /// </summary>
-        bool? CheckExclusionRegion { get; set; }
+        string CheckExclusionRegion { get; set; }
 
         /// <summary>
         /// Gets or sets whether to add this instance to the exclusion region
         /// </summary>
-        bool? AddToExclusionRegion { get; set; }
+        string AddToExclusionRegion { get; set; }
 
         /// <summary>
         /// Gets or sets the position algorithm
         /// </summary>
-        string PositionAlgorithm { get; set; }
+        string PositioningAlgorithm { get; set; }
     }
 
     /// <summary>

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/VectorLayerDefinitionImpl.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/VectorLayerDefinitionImpl.cs	2011-04-21 13:57:00 UTC (rev 5715)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/VectorLayerDefinitionImpl.cs	2011-04-21 15:10:07 UTC (rev 5716)
@@ -42,6 +42,7 @@
 #endif
 {
     using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.ObjectModels.SymbolDefinition;
 
     abstract partial class BaseLayerDefinitionType : ISubLayerDefinition
     {
@@ -78,8 +79,10 @@
         }
     }
 
-
     partial class VectorScaleRangeType : IVectorScaleRange
+#if LDF_120 || LDF_130
+        , IVectorScaleRange2
+#endif
     {
         #region Missing generated stuff
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -242,6 +245,69 @@
         {
             return this.Clone();
         }
+
+#if LDF_120
+        [XmlIgnore]
+        public ICompositeTypeStyle CompositeStyle
+        {
+            get
+            {
+                foreach (var item in this.itemsField)
+                {
+                    if (typeof(ICompositeTypeStyle).IsAssignableFrom(item.GetType()))
+                        return (ICompositeTypeStyle)item;
+                }
+
+                return null;
+            }
+            set
+            {
+                //Remove old one if it exists
+                var item = this.CompositeStyle;
+                if (item != null)
+                {
+                    this.itemsField.Remove(item);
+                }
+                //Put the new one in if it is not null
+                if (value != null)
+                {
+                    this.itemsField.Add(value);
+                }
+            }
+        }
+#elif LDF_130
+        [XmlIgnore]
+        public ICompositeTypeStyle CompositeStyle
+        {
+            get
+            {
+                foreach (var item in this.itemsField)
+                {
+                    if (typeof(ICompositeTypeStyle2).IsAssignableFrom(item.GetType()))
+                        return (ICompositeTypeStyle2)item;
+                }
+
+                return null;
+            }
+            set
+            {
+                //Remove old one if it exists
+                var item = this.CompositeStyle;
+                if (item != null)
+                {
+                    this.itemsField.Remove(item);
+                }
+                //Put the new one in if it is not null
+                if (value != null)
+                {
+                    if (typeof(ICompositeTypeStyle2).IsAssignableFrom(value.GetType()))
+                        throw new InvalidOperationException("Assigned value does not implement ICompositeTypeStyle2");
+
+                    this.itemsField.Add(value);
+                }
+            }
+        }
+#endif
     }
 
     partial class StrokeType : IStroke
@@ -264,6 +330,156 @@
         }
     }
 
+    #region Composite Symbolization support (needs more work. Currently this is just to make the layer editor properly detect such features)
+
+#if LDF_120 || LDF_130
+    partial class CompositeTypeStyle
+#if LDF_120
+        : ICompositeTypeStyle
+#else
+        : ICompositeTypeStyle2
+#endif
+    {
+        IEnumerable<ICompositeRule> ICompositeTypeStyle.CompositeRule
+        {
+            get 
+            {
+                foreach (var rule in this.CompositeRule)
+                {
+                    yield return rule;
+                }
+            }
+        }
+
+        public void AddCompositeRule(ICompositeRule compRule)
+        {
+            var rule = compRule as CompositeRule;
+            if (rule != null)
+            {
+                this.CompositeRule.Add(rule);
+            }
+        }
+
+        public void RemoveCompositeRule(ICompositeRule compRule)
+        {
+            var rule = compRule as CompositeRule;
+            if (rule != null)
+            {
+                this.CompositeRule.Remove(rule);
+            }
+        }
+
+        public StyleType StyleType
+        {
+            get { return StyleType.Composite; }
+        }
+
+        public int RuleCount
+        {
+            get { return this.CompositeRule.Count; }
+        }
+    }
+
+    partial class CompositeRule : ICompositeRule
+    {
+        [XmlIgnore]
+        ICompositeSymbolization ICompositeRule.CompositeSymbolization
+        {
+            get
+            {
+                return this.CompositeSymbolization;
+            }
+            set
+            {
+                this.CompositeSymbolization = (CompositeSymbolization)value;
+            }
+        }
+    }
+
+    partial class CompositeSymbolization : ICompositeSymbolization
+    {
+        IEnumerable<OSGeo.MapGuide.ObjectModels.SymbolDefinition.ISymbolInstance> ICompositeSymbolization.SymbolInstance
+        {
+            get 
+            {
+                foreach (var sym in this.SymbolInstance)
+                {
+                    yield return sym;
+                }
+            }
+        }
+
+        public void AddSymbolInstance(OSGeo.MapGuide.ObjectModels.SymbolDefinition.ISymbolInstance inst)
+        {
+            var sym = inst as SymbolInstance;
+            if (sym != null)
+                this.SymbolInstance.Add(sym);
+        }
+
+        public void RemoveSymbolInstance(OSGeo.MapGuide.ObjectModels.SymbolDefinition.ISymbolInstance inst)
+        {
+            var sym = inst as SymbolInstance;
+            if (sym != null)
+                this.SymbolInstance.Remove(sym);
+        }
+    }
+
+    partial class SymbolInstance : ISymbolInstance
+    {
+        [XmlIgnore]
+        public ISymbolInstanceReference Reference
+        {
+            get
+            {
+                throw new NotImplementedException();
+            }
+            set
+            {
+                throw new NotImplementedException();
+            }
+        }
+
+        IParameterOverrideCollection ISymbolInstance.ParameterOverrides
+        {
+            get { return this.ParameterOverrides; }
+        }
+    }
+
+    partial class ParameterOverrides : IParameterOverrideCollection
+    {
+        IEnumerable<IParameterOverride> IParameterOverrideCollection.Override
+        {
+            get
+            {
+                foreach (var ov in this.Override)
+                {
+                    yield return ov;
+                }
+            }
+        }
+
+        public void AddOverride(IParameterOverride ov)
+        {
+            var o = ov as Override;
+            if (o != null)
+                this.Override.Add(o);
+        }
+
+        public void RemoveOverride(IParameterOverride ov)
+        {
+            var o = ov as Override;
+            if (o != null)
+                this.Override.Remove(o);
+        }
+    }
+
+    partial class Override : IParameterOverride
+    {
+    }
+
+#endif
+    #endregion
+
     partial class AreaTypeStyleType : IAreaVectorStyle
     {
         [XmlIgnore]



More information about the mapguide-commits mailing list