/// <summary> /// Serialize Axis /// </summary> /// <param name="axis"></param> /// <param name="name"></param> /// <param name="tw"></param> void SerializeAxis(AxisMx axis, string name, XmlTextWriter tw) { if (axis == null || axis.QueryColumn == null) { return; } tw.WriteStartElement(name); tw.WriteAttributeString("ShortName", axis.ShortName); tw.WriteAttributeString("RangeMin", axis.RangeMin); tw.WriteAttributeString("RangeMax", axis.RangeMax); tw.WriteAttributeString("IncludeOrigin", axis.IncludeOrigin.ToString()); tw.WriteAttributeString("SideMarginsEnabled", axis.SideMarginsEnabled.ToString()); tw.WriteAttributeString("ShowLabels", axis.ShowLabels.ToString()); tw.WriteAttributeString("LabelAngle", axis.LabelAngle.ToString()); tw.WriteAttributeString("LabelsStaggered", axis.LabelsStaggered.ToString()); tw.WriteAttributeString("LabelResolveOverlappingMode", axis.LabelResolveOverlappingMode.ToString()); tw.WriteAttributeString("ShowZoomSlider", axis.ShowZoomSlider.ToString()); tw.WriteAttributeString("ShowGridLines", axis.ShowGridLines.ToString()); tw.WriteAttributeString("ShowGridStrips", axis.ShowGridStrips.ToString()); tw.WriteAttributeString("LogScale", axis.LogScale.ToString()); tw.WriteAttributeString("ReverseScale", axis.ReverseScale.ToString()); SerializeQueryColumnRef(axis.QueryColumn, name + "Column", tw); tw.WriteEndElement(); }
/// <summary> /// Deserialize an axis definition /// </summary> /// <param name="name"></param> /// <param name="q"></param> /// <param name="tr"></param> /// <returns></returns> internal static AxisMx DeserializeAxis( string axisName, Query q, XmlTextReader tr) { Enum iEnum = null; AxisMx axis = new AxisMx(); XmlUtil.GetStringAttribute(tr, "ShortName", ref axis.ShortName); XmlUtil.GetStringAttribute(tr, "RangeMin", ref axis.RangeMin); XmlUtil.GetStringAttribute(tr, "RangeMax", ref axis.RangeMax); XmlUtil.GetBoolAttribute(tr, "IncludeOrigin", ref axis.IncludeOrigin); XmlUtil.GetBoolAttribute(tr, "SideMarginsEnabled", ref axis.SideMarginsEnabled); XmlUtil.GetBoolAttribute(tr, "ShowLabels", ref axis.ShowLabels); XmlUtil.GetIntAttribute(tr, "LabelAngle", ref axis.LabelAngle); XmlUtil.GetBoolAttribute(tr, "LabelsStaggered", ref axis.LabelsStaggered); if (XmlUtil.GetEnumAttribute(tr, "LabelResolveOverlappingMode", typeof(AxisLabelResolveOverlappingMode), ref iEnum)) { axis.LabelResolveOverlappingMode = (AxisLabelResolveOverlappingMode)iEnum; } XmlUtil.GetBoolAttribute(tr, "ShowZoomSlider", ref axis.ShowZoomSlider); XmlUtil.GetBoolAttribute(tr, "ShowGridLines", ref axis.ShowGridLines); XmlUtil.GetBoolAttribute(tr, "ShowGridStrips", ref axis.ShowGridStrips); XmlUtil.GetBoolAttribute(tr, "LogScale", ref axis.LogScale); XmlUtil.GetBoolAttribute(tr, "ReverseScale", ref axis.ReverseScale); tr.Read(); tr.MoveToContent(); if (Lex.Eq(tr.Name, axisName + "Column")) { axis.QueryColumn = ResultsViewProps.DeserializeQueryColumnRef(q, tr); tr.Read(); tr.MoveToContent(); } if (!Lex.Eq(tr.Name, axisName)) { throw new Exception("Expected " + axisName + " end element"); } return(axis); }
/// <summary> /// Memberwise clone /// </summary> /// <returns></returns> public AxisMx Clone() { AxisMx ax = (AxisMx)this.MemberwiseClone(); return(ax); }
/// <summary> /// Deserialize Chart Properties /// </summary> /// <param name="q"></param> /// <param name="tr"></param> /// <param name="view"></param> public static bool DeserializeChartProperties( Query q, XmlTextReader tr, ResultsViewProps view) { AxisMx ax; Enum iEnum = null; string txt; if (!Lex.Eq(tr.Name, "ChartProperties")) { return(false); } if (XmlUtil.GetEnumAttribute(tr, "ShapeRenderingMode", typeof(ShapeRenderingMode), ref iEnum)) { view.ShapeRenderingMode = (ShapeRenderingMode)iEnum; } //XmlUtil.GetStringAttribute(tr, "BackgroundImageFile", ref view.BackgroundImageFile); XmlUtil.GetIntAttribute(tr, "Jitter", ref view.JitterX); XmlUtil.GetBoolAttribute(tr, "ChartStretch", ref view.JitterTheSameForXandY); XmlUtil.GetBoolAttribute(tr, "ShowLegend", ref view.ShowLegend); if (tr.GetAttribute("LegendAlignmentHorizontal") != null) { view.LegendAlignmentHorizontal = (LegendAlignmentHorizontal)EnumUtil.Parse(typeof(LegendAlignmentHorizontal), tr.GetAttribute("LegendAlignmentHorizontal")); } if (tr.GetAttribute("LegendAlignmentVertical") != null) { view.LegendAlignmentVertical = (LegendAlignmentVertical)EnumUtil.Parse(typeof(LegendAlignmentVertical), tr.GetAttribute("LegendAlignmentVertical")); } XmlUtil.GetIntAttribute(tr, "LegendMaxHorizontalPercentage", ref view.LegendMaxHorizontalPercentage); XmlUtil.GetIntAttribute(tr, "LegendMaxVerticalPercentage", ref view.LegendMaxVerticalPercentage); if (tr.GetAttribute("LegendItemOrder") != null) { view.LegendItemOrder = (LegendDirection)EnumUtil.Parse(typeof(LegendDirection), tr.GetAttribute("LegendItemOrder")); } XmlUtil.GetBoolAttribute(tr, "MainChartAreaMaximized", ref view.MainViewPanelMaximized); XmlUtil.GetBoolAttribute(tr, "ShowFilters", ref view.ShowFilters); XmlUtil.GetBoolAttribute(tr, "ShowSelectedDataRows", ref view.ShowSelectedDataRows); XmlUtil.GetBoolAttribute(tr, "ShowAxesTitles", ref view.ShowAxesTitles); XmlUtil.GetBoolAttribute(tr, "ShowAxesScaleLabels", ref view.ShowAxesScaleLabels); XmlUtil.GetBoolAttribute(tr, "RotateAxes", ref view.RotateAxes); XmlUtil.GetBoolAttribute(tr, "UseExistingCondFormatting", ref view.UseExistingCondFormatting); XmlUtil.GetBoolAttribute(tr, "PivotedData", ref view.PivotedData); while (true) // loop through elements of chart { tr.Read(); tr.MoveToContent(); if (Lex.Eq(tr.Name, "XAxis")) { view.XAxisMx = AxisMx.DeserializeAxis("XAxis", q, tr); } else if (Lex.Eq(tr.Name, "YAxis")) { view.YAxisMx = AxisMx.DeserializeAxis("YAxis", q, tr); } else if (Lex.Eq(tr.Name, "ZAxis")) { view.ZAxisMx = AxisMx.DeserializeAxis("ZAxis", q, tr); } else if (Lex.Eq(tr.Name, "Axis")) { ax = AxisMx.DeserializeAxis("Axis", q, tr); view.AxesMx.Add(ax); } else if (Lex.Eq(tr.Name, "MarkerColor")) { view.MarkerColor = ColorDimension.Deserialize("MarkerColor", q, tr); } else if (Lex.Eq(tr.Name, "MarkerSize")) { view.MarkerSize = SizeDimension.Deserialize("MarkerSize", q, tr); } else if (Lex.Eq(tr.Name, "MarkerShape")) { view.MarkerShape = ShapeDimension.Deserialize("MarkerShape", q, tr); } else if (Lex.Eq(tr.Name, "MarkerLabel")) { view.MarkerLabel = LabelDimensionDef.Deserialize("MarkerLabel", q, tr); } else if (Lex.Eq(tr.Name, "Labels")) // obsolete label tag { view.MarkerLabel = LabelDimensionDef.Deserialize("Labels", q, tr); } else if (Lex.Eq(tr.Name, "TooltipFields")) { view.MarkerTooltip = TooltipDimensionDef.Deserialize("TooltipFields", q, tr); } else if (Lex.Eq(tr.Name, "Surface")) { txt = tr.GetAttribute("FillMode"); if (txt != null) { view.SurfaceFillMode = (SurfaceFillMode)EnumUtil.Parse(typeof(SurfaceFillMode), txt); } XmlUtil.GetBoolAttribute(tr, "SmoothPalette", ref view.SmoothPalette); XmlUtil.GetBoolAttribute(tr, "SmoothShading", ref view.SmoothShading); XmlUtil.GetBoolAttribute(tr, "SemiTransparent", ref view.SemiTransparent); XmlUtil.GetBoolAttribute(tr, "DrawFlat", ref view.DrawFlat); txt = tr.GetAttribute("FrameMode"); if (txt != null) { view.SurfaceFrameMode = (SurfaceFrameMode)EnumUtil.Parse(typeof(SurfaceFrameMode), txt); } if (tr.IsEmptyElement) { continue; // may be just attributes } tr.Read(); tr.MoveToContent(); if (!Lex.Eq(tr.Name, "Surface")) { throw new Exception("Expected Surface end element"); } } else if (Lex.Eq(tr.Name, "Trellis")) { if (tr.IsEmptyElement) { continue; // may be just attributes } XmlUtil.GetBoolAttribute(tr, "ByRowCol", ref view.TrellisByRowCol); XmlUtil.GetBoolAttribute(tr, "Manual", ref view.TrellisManual); XmlUtil.GetIntAttribute(tr, "MaxRows", ref view.TrellisMaxRows); XmlUtil.GetIntAttribute(tr, "MaxCols", ref view.TrellisMaxCols); while (true) { tr.Read(); tr.MoveToContent(); if (Lex.Eq(tr.Name, "ColumnQc")) { view.TrellisColQc = DeserializeQueryColumnRef(q, tr); } else if (Lex.Eq(tr.Name, "RowQc")) { view.TrellisRowQc = DeserializeQueryColumnRef(q, tr); } else if (Lex.Eq(tr.Name, "PageQc")) { view.TrellisPageQc = DeserializeQueryColumnRef(q, tr); } else if (Lex.Eq(tr.Name, "FlowQc")) { view.TrellisFlowQc = DeserializeQueryColumnRef(q, tr); } else if (tr.NodeType == XmlNodeType.EndElement && // end of trellis definition Lex.Eq(tr.Name, "Trellis")) { break; } else { throw new Exception("Unexpected element: " + tr.Name); } } } else if (tr.NodeType == XmlNodeType.EndElement && // end of chart props Lex.Eq(tr.Name, "ChartProperties")) { break; } else { throw new Exception("Unexpected element: " + tr.Name); } } return(true); }