[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