[mapguide-commits] r8004 - trunk/Tools/Maestro/Maestro.Editors/LayerDefinition/Vector/GridEditor

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Sun Mar 30 08:04:03 PDT 2014


Author: jng
Date: 2014-03-30 08:04:03 -0700 (Sun, 30 Mar 2014)
New Revision: 8004

Modified:
   trunk/Tools/Maestro/Maestro.Editors/LayerDefinition/Vector/GridEditor/RuleGridView.cs
   trunk/Tools/Maestro/Maestro.Editors/LayerDefinition/Vector/GridEditor/RuleModel.cs
Log:
#2418: Implement rule duplication and fix composite rule style not updating when finished editing.

Modified: trunk/Tools/Maestro/Maestro.Editors/LayerDefinition/Vector/GridEditor/RuleGridView.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/LayerDefinition/Vector/GridEditor/RuleGridView.cs	2014-03-30 14:04:23 UTC (rev 8003)
+++ trunk/Tools/Maestro/Maestro.Editors/LayerDefinition/Vector/GridEditor/RuleGridView.cs	2014-03-30 15:04:03 UTC (rev 8004)
@@ -678,6 +678,7 @@
                 diag.ShowDialog();
                 //HACK: Assume edits made
                 _edSvc.HasChanged();
+                UpdateRulePreviewAsync(cr);
                 return;
             }
 
@@ -963,7 +964,40 @@
         {
             if (grdRules.SelectedRows.Count == 1)
             {
-
+                ILabeledRuleModel lrm = grdRules.SelectedRows[0].DataBoundItem as ILabeledRuleModel;
+                IRuleModel rm = grdRules.SelectedRows[0].DataBoundItem as IRuleModel;
+                //Test the labeled rule first as it can be both
+                if (lrm != null)
+                {
+                    Debug.Assert(_style.StyleType != StyleType.Composite);
+                    //HACK: Only Maestro knows that all impls of ILayerDefinition also implements ILayerElementFactory2
+                    ILabeledRuleModel clone = lrm.CloneLabeledRuleModel((ILayerElementFactory2)_editedLayer);
+                    switch (_style.StyleType)
+                    {
+                        case StyleType.Point:
+                            ((IPointVectorStyle)_style).AddRule((IPointRule)clone.UnwrapRule());
+                            clone.SetIndex(_style.RuleCount - 1);
+                            break;
+                        case StyleType.Line:
+                            ((ILineVectorStyle)_style).AddRule((ILineRule)clone.UnwrapRule());
+                            clone.SetIndex(_style.RuleCount - 1);
+                            break;
+                        case StyleType.Area:
+                            ((IAreaVectorStyle)_style).AddRule((IAreaRule)clone.UnwrapRule());
+                            clone.SetIndex(_style.RuleCount - 1);
+                            break;
+                    }
+                    _rules.Add(clone);
+                }
+                else if (rm != null)
+                {
+                    Debug.Assert(_style.StyleType == StyleType.Composite);
+                    //HACK: Only Maestro knows that all impls of ILayerDefinition also implements ILayerElementFactory2
+                    IRuleModel clone = rm.CloneRuleModel((ILayerElementFactory2)_editedLayer);
+                    ((ICompositeTypeStyle)_style).AddCompositeRule((ICompositeRule)clone.UnwrapRule());
+                    clone.SetIndex(_style.RuleCount - 1);
+                    _rules.Add(clone);
+                }
             }
         }
     }

Modified: trunk/Tools/Maestro/Maestro.Editors/LayerDefinition/Vector/GridEditor/RuleModel.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/LayerDefinition/Vector/GridEditor/RuleModel.cs	2014-03-30 14:04:23 UTC (rev 8003)
+++ trunk/Tools/Maestro/Maestro.Editors/LayerDefinition/Vector/GridEditor/RuleModel.cs	2014-03-30 15:04:03 UTC (rev 8004)
@@ -39,6 +39,8 @@
         void SwapIndicesWith(IRuleModel model);
         void SetIndex(int index);
         object UnwrapRule();
+
+        IRuleModel CloneRuleModel(ILayerElementFactory2 factory);
     }
 
     internal interface ILabeledRuleModel : INotifyPropertyChanged
@@ -52,6 +54,8 @@
         void SwapIndicesWith(ILabeledRuleModel model);
         void SetIndex(int index);
         object UnwrapRule();
+
+        ILabeledRuleModel CloneLabeledRuleModel(ILayerElementFactory2 factory);
     }
 
     internal abstract class RuleModel : IRuleModel
@@ -95,6 +99,8 @@
         }
 
         public abstract object UnwrapRule();
+
+        public abstract IRuleModel CloneRuleModel(ILayerElementFactory2 factory);
     }
 
     internal abstract class BasicVectorRuleModel<TRuleType, TSymbolizationStyleType> : RuleModel, ILabeledRuleModel where TRuleType : IBasicVectorRule
@@ -234,6 +240,13 @@
             this.Index = m.Index;
             m.Index = temp;
         }
+
+        public override IRuleModel CloneRuleModel(ILayerElementFactory2 factory)
+        {
+            throw new NotImplementedException();
+        }
+
+        public abstract ILabeledRuleModel CloneLabeledRuleModel(ILayerElementFactory2 factory);
     }
 
     internal class PointRuleModel : BasicVectorRuleModel<IPointRule, IPointSymbolization2D>
@@ -254,6 +267,18 @@
             _rule.PointSymbolization2D = style;
             this.HasStyle = (style != null);
         }
+
+        public override ILabeledRuleModel CloneLabeledRuleModel(ILayerElementFactory2 factory)
+        {
+            var clone = factory.CreateDefaultPointRule();
+            clone.Filter = _rule.Filter;
+            clone.LegendLabel = _rule.LegendLabel;
+            if (_rule.Label != null)
+                clone.Label = _rule.Label.Clone();
+            if (_rule.PointSymbolization2D != null)
+                clone.PointSymbolization2D = _rule.PointSymbolization2D.Clone();
+            return new PointRuleModel(clone, -1);
+        }
     }
 
     internal class BasicLineSymbolizationAdapter : ILineRule
@@ -346,6 +371,25 @@
         {
             return new BasicLineSymbolizationAdapter(_rule);
         }
+
+        public override ILabeledRuleModel CloneLabeledRuleModel(ILayerElementFactory2 factory)
+        {
+            var clone = factory.CreateDefaultLineRule();
+            clone.Filter = _rule.Filter;
+            clone.LegendLabel = _rule.LegendLabel;
+            if (_rule.Label != null)
+                clone.Label = _rule.Label.Clone();
+            if (_rule.Strokes != null && _rule.StrokeCount > 0)
+            {
+                var strokes = new List<IStroke>();
+                foreach (var st in _rule.Strokes)
+                {
+                    strokes.Add(st.Clone());
+                }
+                clone.SetStrokes(strokes);
+            }
+            return new LineRuleModel(clone, -1);
+        }
     }
 
     internal class AreaRuleModel : BasicVectorRuleModel<IAreaRule, IAreaSymbolizationFill>
@@ -366,6 +410,18 @@
             _rule.AreaSymbolization2D = style;
             this.HasStyle = (style != null);
         }
+
+        public override ILabeledRuleModel CloneLabeledRuleModel(ILayerElementFactory2 factory)
+        {
+            var clone = factory.CreateDefaultAreaRule();
+            clone.Filter = _rule.Filter;
+            clone.LegendLabel = _rule.LegendLabel;
+            if (_rule.Label != null)
+                clone.Label = _rule.Label.Clone();
+            if (_rule.AreaSymbolization2D != null)
+                clone.AreaSymbolization2D = _rule.AreaSymbolization2D.Clone();
+            return new AreaRuleModel(clone, -1);
+        }
     }
     
     internal class CompositeRuleModel : RuleModel
@@ -444,5 +500,15 @@
                 }
             }
         }
+
+        public override IRuleModel CloneRuleModel(ILayerElementFactory2 factory)
+        {
+            var clone = factory.CreateDefaultCompositeRule();
+            clone.Filter = _rule.Filter;
+            clone.LegendLabel = _rule.LegendLabel;
+            if (_rule.CompositeSymbolization != null)
+                clone.CompositeSymbolization = factory.CloneCompositeSymbolization(_rule.CompositeSymbolization);
+            return new CompositeRuleModel(clone, -1);
+        }
     }
 }



More information about the mapguide-commits mailing list