You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /*************************************************************************************
  2. DocX – DocX is the community edition of Xceed Words for .NET
  3. Copyright (C) 2009-2016 Xceed Software Inc.
  4. This program is provided to you under the terms of the Microsoft Public
  5. License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
  6. For more features and fast professional support,
  7. pick up Xceed Words for .NET at https://xceed.com/xceed-words-for-net/
  8. ***********************************************************************************/
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Xml.Linq;
  12. namespace Xceed.Words.NET
  13. {
  14. /// <summary>
  15. /// This element contains the 2-D bar or column series on this chart.
  16. /// 21.2.2.16 barChart (Bar Charts)
  17. /// </summary>
  18. public class BarChart : Chart
  19. {
  20. #region Public Properties
  21. /// <summary>
  22. /// Specifies the possible directions for a bar chart.
  23. /// </summary>
  24. public BarDirection BarDirection
  25. {
  26. get
  27. {
  28. return XElementHelpers.GetValueToEnum<BarDirection>(
  29. ChartXml.Element(XName.Get("barDir", DocX.c.NamespaceName)));
  30. }
  31. set
  32. {
  33. XElementHelpers.SetValueFromEnum<BarDirection>(
  34. ChartXml.Element(XName.Get("barDir", DocX.c.NamespaceName)), value);
  35. }
  36. }
  37. /// <summary>
  38. /// Specifies the possible groupings for a bar chart.
  39. /// </summary>
  40. public BarGrouping BarGrouping
  41. {
  42. get
  43. {
  44. return XElementHelpers.GetValueToEnum<BarGrouping>(
  45. ChartXml.Element(XName.Get("grouping", DocX.c.NamespaceName)));
  46. }
  47. set
  48. {
  49. XElementHelpers.SetValueFromEnum<BarGrouping>(
  50. ChartXml.Element(XName.Get("grouping", DocX.c.NamespaceName)), value);
  51. }
  52. }
  53. /// <summary>
  54. /// Specifies that its contents contain a percentage between 0% and 500%.
  55. /// </summary>
  56. public Int32 GapWidth
  57. {
  58. get
  59. {
  60. return Convert.ToInt32(
  61. ChartXml.Element(XName.Get("gapWidth", DocX.c.NamespaceName)).Attribute(XName.Get("val")).Value);
  62. }
  63. set
  64. {
  65. if ((value < 1) || (value > 500))
  66. throw new ArgumentException("GapWidth lay between 0% and 500%!");
  67. ChartXml.Element(XName.Get("gapWidth", DocX.c.NamespaceName)).Attribute(XName.Get("val")).Value = value.ToString();
  68. }
  69. }
  70. public string Title
  71. {
  72. set
  73. {
  74. var t = new XElement(XE.A.CName("t"), value);
  75. var rpr = new XElement(XE.A.CName("rPr"), XE.A.CAttr("lang", "zh-CN"), XE.A.CAttr("altLang", "en-US"));
  76. var pPr = new XElement(XE.A.CName("pPr"),
  77. XE.A.CAttr("defTabSz", "914400"),
  78. XE.A.CElement("defRPr", new List<object>(XE.A.CAttrs("lang=zh-CN sz=1400 b=0 i=0 u=none strike=noStrike kern=1200 spc=0 baseline=0"))
  79. { XE.A.CElement("solidFill",XE.A.CElement("schemeClr",XE.A.CAttr("val=tx1"),XE.A.CElement("lumMod","65000"),XE.A.CElement("lumOff","35000"))) }.ToArray())
  80. );
  81. var bodyPr = XE.A.CElement("bodyPr", XE.A.CAttrs("rot=0 spcFirstLastPara=0 vertOverflow=ellipsis vert=horz wrap=square anchor=ctr anchorCtr=1"));
  82. var rich = XE.C.CElement("rich", bodyPr, XE.A.CElement("lstStyle"), XE.A.CElement("p", pPr, XE.A.CElement("r", rpr, t)));
  83. var title = XE.C.CElement("title", XE.C.CElement("tx", rich), XE.C.CElement("overlay", "0"));
  84. this.ChartRootXml.AddFirst(title);
  85. }
  86. }
  87. public bool ShowDataTable
  88. {
  89. set
  90. {
  91. var pPr = XE.A.CElement("pPr", XE.A.CAttr("rtl", "0"),
  92. XE.A.CElement("defRPr", new List<object>(XE.A.CAttrs("lang=zh-CN sz=1000 b=0 i=0 u=none strike=noStrike kern=1200 baseline=0")) { XE.A.CElement("solidFill", XE.A.CElement("schemeClr", "tx1")) }.ToArray())
  93. );
  94. var bodyPr = XE.A.CElement("bodyPr", XE.A.CAttrs("rot=0 spcFirstLastPara=0 vertOverflow=ellipsis vert=horz wrap=square anchor=ctr anchorCtr=1").ToArray());
  95. var p = XE.A.CElement("p", pPr, XE.A.CElement("endParaRPr", "zh-CN", "lang"));
  96. var txPr = XE.C.CElement("txPr", bodyPr, XE.A.CElement("lstStyle"), p);
  97. var table = XE.C.CElement("dTable",XE.C.CElement("showHorzBorder","1"),
  98. XE.C.CElement("showVertBorder", "1"),
  99. XE.C.CElement("showOutline", "1"),
  100. XE.C.CElement("showKeys","1"),
  101. txPr
  102. );
  103. this.ChartRootXml.Element(XE.C.CName("plotArea")).LastNode.AddAfterSelf(table);
  104. }
  105. }
  106. #endregion
  107. #region Overrides
  108. protected override XElement CreateChartXml()
  109. {
  110. return XElement.Parse(
  111. @"<c:barChart xmlns:c=""http://schemas.openxmlformats.org/drawingml/2006/chart"">
  112. <c:barDir val=""col""/>
  113. <c:grouping val=""clustered""/>
  114. <c:gapWidth val=""150""/>
  115. </c:barChart>");
  116. }
  117. #endregion
  118. }
  119. /// <summary>
  120. /// Specifies the possible directions for a bar chart.
  121. /// 21.2.3.3 ST_BarDir (Bar Direction)
  122. /// </summary>
  123. public enum BarDirection
  124. {
  125. [XmlName("col")]
  126. Column,
  127. [XmlName("bar")]
  128. Bar
  129. }
  130. /// <summary>
  131. /// Specifies the possible groupings for a bar chart.
  132. /// 21.2.3.4 ST_BarGrouping (Bar Grouping)
  133. /// </summary>
  134. public enum BarGrouping
  135. {
  136. [XmlName("clustered")]
  137. Clustered,
  138. [XmlName("percentStacked")]
  139. PercentStacked,
  140. [XmlName("stacked")]
  141. Stacked,
  142. [XmlName("standard")]
  143. Standard
  144. }
  145. }