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.

XSSFManualLayout.java 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. /* ====================================================================
  2. Licensed to the Apache Software Foundation (ASF) under one or more
  3. contributor license agreements. See the NOTICE file distributed with
  4. this work for additional information regarding copyright ownership.
  5. The ASF licenses this file to You under the Apache License, Version 2.0
  6. (the "License"); you may not use this file except in compliance with
  7. the License. You may obtain a copy of the License at
  8. http://www.apache.org/licenses/LICENSE-2.0
  9. Unless required by applicable law or agreed to in writing, software
  10. distributed under the License is distributed on an "AS IS" BASIS,
  11. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. See the License for the specific language governing permissions and
  13. limitations under the License.
  14. ==================================================================== */
  15. package org.apache.poi.xssf.usermodel.charts;
  16. import org.apache.poi.ss.usermodel.charts.LayoutMode;
  17. import org.apache.poi.ss.usermodel.charts.LayoutTarget;
  18. import org.apache.poi.ss.usermodel.charts.ManualLayout;
  19. import org.apache.poi.util.Internal;
  20. import org.apache.poi.util.Removal;
  21. import org.apache.poi.xddf.usermodel.chart.XDDFManualLayout;
  22. import org.apache.poi.xssf.usermodel.XSSFChart;
  23. import org.openxmlformats.schemas.drawingml.x2006.chart.CTLayout;
  24. import org.openxmlformats.schemas.drawingml.x2006.chart.CTLayoutMode;
  25. import org.openxmlformats.schemas.drawingml.x2006.chart.CTLayoutTarget;
  26. import org.openxmlformats.schemas.drawingml.x2006.chart.CTManualLayout;
  27. import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
  28. import org.openxmlformats.schemas.drawingml.x2006.chart.STLayoutMode;
  29. import org.openxmlformats.schemas.drawingml.x2006.chart.STLayoutTarget;
  30. /**
  31. * Represents a SpreadsheetML manual layout.
  32. * @deprecated use {@link XDDFManualLayout instead}
  33. */
  34. @Deprecated
  35. @Removal(version="4.2")
  36. public final class XSSFManualLayout implements ManualLayout {
  37. /**
  38. * Underlaying CTManualLayout bean.
  39. */
  40. private CTManualLayout layout;
  41. private static final LayoutMode defaultLayoutMode = LayoutMode.EDGE;
  42. private static final LayoutTarget defaultLayoutTarget = LayoutTarget.INNER;
  43. /**
  44. * Create a new SpreadsheetML manual layout.
  45. * @param ctLayout a Spreadsheet ML layout that should be used as base.
  46. */
  47. public XSSFManualLayout(CTLayout ctLayout) {
  48. initLayout(ctLayout);
  49. }
  50. /**
  51. * Create a new SpreadsheetML manual layout for chart.
  52. * @param chart a chart to create layout for.
  53. */
  54. public XSSFManualLayout(XSSFChart chart) {
  55. CTPlotArea ctPlotArea = chart.getCTChart().getPlotArea();
  56. CTLayout ctLayout = ctPlotArea.isSetLayout() ?
  57. ctPlotArea.getLayout() : ctPlotArea.addNewLayout();
  58. initLayout(ctLayout);
  59. }
  60. /**
  61. * Return the underlying CTManualLayout bean.
  62. *
  63. * @return the underlying CTManualLayout bean.
  64. */
  65. @Internal public CTManualLayout getCTManualLayout(){
  66. return layout;
  67. }
  68. @Override
  69. public void setWidthRatio(double ratio) {
  70. if (!layout.isSetW()) {
  71. layout.addNewW();
  72. }
  73. layout.getW().setVal(ratio);
  74. }
  75. @Override
  76. public double getWidthRatio() {
  77. if (!layout.isSetW()) {
  78. return 0.0;
  79. }
  80. return layout.getW().getVal();
  81. }
  82. @Override
  83. public void setHeightRatio(double ratio) {
  84. if (!layout.isSetH()) {
  85. layout.addNewH();
  86. }
  87. layout.getH().setVal(ratio);
  88. }
  89. @Override
  90. public double getHeightRatio() {
  91. if (!layout.isSetH()) {
  92. return 0.0;
  93. }
  94. return layout.getH().getVal();
  95. }
  96. @Override
  97. public LayoutTarget getTarget() {
  98. if (!layout.isSetLayoutTarget()) {
  99. return defaultLayoutTarget;
  100. }
  101. return toLayoutTarget(layout.getLayoutTarget());
  102. }
  103. @Override
  104. public void setTarget(LayoutTarget target) {
  105. if (!layout.isSetLayoutTarget()) {
  106. layout.addNewLayoutTarget();
  107. }
  108. layout.getLayoutTarget().setVal(fromLayoutTarget(target));
  109. }
  110. @Override
  111. public LayoutMode getXMode() {
  112. if (!layout.isSetXMode()) {
  113. return defaultLayoutMode;
  114. }
  115. return toLayoutMode(layout.getXMode());
  116. }
  117. @Override
  118. public void setXMode(LayoutMode mode) {
  119. if (!layout.isSetXMode()) {
  120. layout.addNewXMode();
  121. }
  122. layout.getXMode().setVal(fromLayoutMode(mode));
  123. }
  124. @Override
  125. public LayoutMode getYMode() {
  126. if (!layout.isSetYMode()) {
  127. return defaultLayoutMode;
  128. }
  129. return toLayoutMode(layout.getYMode());
  130. }
  131. @Override
  132. public void setYMode(LayoutMode mode) {
  133. if (!layout.isSetYMode()) {
  134. layout.addNewYMode();
  135. }
  136. layout.getYMode().setVal(fromLayoutMode(mode));
  137. }
  138. @Override
  139. public double getX() {
  140. if (!layout.isSetX()) {
  141. return 0.0;
  142. }
  143. return layout.getX().getVal();
  144. }
  145. @Override
  146. public void setX(double x) {
  147. if (!layout.isSetX()) {
  148. layout.addNewX();
  149. }
  150. layout.getX().setVal(x);
  151. }
  152. @Override
  153. public double getY() {
  154. if (!layout.isSetY()) {
  155. return 0.0;
  156. }
  157. return layout.getY().getVal();
  158. }
  159. @Override
  160. public void setY(double y) {
  161. if (!layout.isSetY()) {
  162. layout.addNewY();
  163. }
  164. layout.getY().setVal(y);
  165. }
  166. @Override
  167. public LayoutMode getWidthMode() {
  168. if (!layout.isSetWMode()) {
  169. return defaultLayoutMode;
  170. }
  171. return toLayoutMode(layout.getWMode());
  172. }
  173. @Override
  174. public void setWidthMode(LayoutMode mode) {
  175. if (!layout.isSetWMode()) {
  176. layout.addNewWMode();
  177. }
  178. layout.getWMode().setVal(fromLayoutMode(mode));
  179. }
  180. @Override
  181. public LayoutMode getHeightMode() {
  182. if (!layout.isSetHMode()) {
  183. return defaultLayoutMode;
  184. }
  185. return toLayoutMode(layout.getHMode());
  186. }
  187. @Override
  188. public void setHeightMode(LayoutMode mode) {
  189. if (!layout.isSetHMode()) {
  190. layout.addNewHMode();
  191. }
  192. layout.getHMode().setVal(fromLayoutMode(mode));
  193. }
  194. private void initLayout(CTLayout ctLayout) {
  195. if (ctLayout.isSetManualLayout()) {
  196. this.layout = ctLayout.getManualLayout();
  197. } else {
  198. this.layout = ctLayout.addNewManualLayout();
  199. }
  200. }
  201. private STLayoutMode.Enum fromLayoutMode(LayoutMode mode) {
  202. switch (mode) {
  203. case EDGE: return STLayoutMode.EDGE;
  204. case FACTOR: return STLayoutMode.FACTOR;
  205. default:
  206. throw new IllegalArgumentException();
  207. }
  208. }
  209. private LayoutMode toLayoutMode(CTLayoutMode ctLayoutMode) {
  210. switch (ctLayoutMode.getVal().intValue()) {
  211. case STLayoutMode.INT_EDGE: return LayoutMode.EDGE;
  212. case STLayoutMode.INT_FACTOR: return LayoutMode.FACTOR;
  213. default:
  214. throw new IllegalArgumentException();
  215. }
  216. }
  217. private STLayoutTarget.Enum fromLayoutTarget(LayoutTarget target) {
  218. switch (target) {
  219. case INNER: return STLayoutTarget.INNER;
  220. case OUTER: return STLayoutTarget.OUTER;
  221. default:
  222. throw new IllegalArgumentException();
  223. }
  224. }
  225. private LayoutTarget toLayoutTarget(CTLayoutTarget ctLayoutTarget) {
  226. switch (ctLayoutTarget.getVal().intValue()) {
  227. case STLayoutTarget.INT_INNER: return LayoutTarget.INNER;
  228. case STLayoutTarget.INT_OUTER: return LayoutTarget.OUTER;
  229. default:
  230. throw new IllegalArgumentException();
  231. }
  232. }
  233. }