From: Yegor Kozlov Date: Wed, 8 Feb 2012 12:54:02 +0000 (+0000) Subject: added methods to get/set preset shape geometry in XSLF X-Git-Tag: REL_3_8_FINAL~59 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9ed06b7351748ae791e2ad91993531b12e489ee5;p=poi.git added methods to get/set preset shape geometry in XSLF git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1241885 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java index b880e5988d..1ee8f6f55f 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java @@ -85,4 +85,5 @@ public class XSLFAutoShape extends XSLFTextShape { public String toString(){ return "[" + getClass().getSimpleName() + "] " + getShapeName(); } + } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShapeType.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShapeType.java new file mode 100644 index 0000000000..57163ff742 --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShapeType.java @@ -0,0 +1,236 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ==================================================================== + */ + +package org.apache.poi.xslf.usermodel; + +/** + * known preset shape geometries in PresentationML + * + * @author Yegor Kozlov + */ +public enum XSLFShapeType { + LINE(1), + LINE_INV(2), + TRIANGLE(3), + RT_TRIANGLE(4), + RECT(5), + DIAMOND(6), + PARALLELOGRAM(7), + TRAPEZOID(8), + NON_ISOSCELES_TRAPEZOID(9), + PENTAGON(10), + HEXAGON(11), + HEPTAGON(12), + OCTAGON(13), + DECAGON(14), + DODECAGON(15), + STAR_4(16), + STAR_5(17), + STAR_6(18), + STAR_7(19), + STAR_8(20), + STAR_10(21), + STAR_12(22), + STAR_16(23), + STAR_24(24), + STAR_32(25), + ROUND_RECT(26), + ROUND_1_RECT(27), + ROUND_2_SAME_RECT(28), + ROUND_2_DIAG_RECT(29), + SNIP_ROUND_RECT(30), + SNIP_1_RECT(31), + SNIP_2_SAME_RECT(32), + SNIP_2_DIAG_RECT(33), + PLAQUE(34), + ELLIPSE(35), + TEARDROP(36), + HOME_PLATE(37), + CHEVRON(38), + PIE_WEDGE(39), + PIE(40), + BLOCK_ARC(41), + DONUT(42), + NO_SMOKING(43), + RIGHT_ARROW(44), + LEFT_ARROW(45), + UP_ARROW(46), + DOWN_ARROW(47), + STRIPED_RIGHT_ARROW(48), + NOTCHED_RIGHT_ARROW(49), + BENT_UP_ARROW(50), + LEFT_RIGHT_ARROW(51), + UP_DOWN_ARROW(52), + LEFT_UP_ARROW(53), + LEFT_RIGHT_UP_ARROW(54), + QUAD_ARROW(55), + LEFT_ARROW_CALLOUT(56), + RIGHT_ARROW_CALLOUT(57), + UP_ARROW_CALLOUT(58), + DOWN_ARROW_CALLOUT(59), + LEFT_RIGHT_ARROW_CALLOUT(60), + UP_DOWN_ARROW_CALLOUT(61), + QUAD_ARROW_CALLOUT(62), + BENT_ARROW(63), + UTURN_ARROW(64), + CIRCULAR_ARROW(65), + LEFT_CIRCULAR_ARROW(66), + LEFT_RIGHT_CIRCULAR_ARROW(67), + CURVED_RIGHT_ARROW(68), + CURVED_LEFT_ARROW(69), + CURVED_UP_ARROW(70), + CURVED_DOWN_ARROW(71), + SWOOSH_ARROW(72), + CUBE(73), + CAN(74), + LIGHTNING_BOLT(75), + HEART(76), + SUN(77), + MOON(78), + SMILEY_FACE(79), + IRREGULAR_SEAL_1(80), + IRREGULAR_SEAL_2(81), + FOLDED_CORNER(82), + BEVEL(83), + FRAME(84), + HALF_FRAME(85), + CORNER(86), + DIAG_STRIPE(87), + CHORD(88), + ARC(89), + LEFT_BRACKET(90), + RIGHT_BRACKET(91), + LEFT_BRACE(92), + RIGHT_BRACE(93), + BRACKET_PAIR(94), + BRACE_PAIR(95), + STRAIGHT_CONNECTOR_1(96), + BENT_CONNECTOR_2(97), + BENT_CONNECTOR_3(98), + BENT_CONNECTOR_4(99), + BENT_CONNECTOR_5(100), + CURVED_CONNECTOR_2(101), + CURVED_CONNECTOR_3(102), + CURVED_CONNECTOR_4(103), + CURVED_CONNECTOR_5(104), + CALLOUT_1(105), + CALLOUT_2(106), + CALLOUT_3(107), + ACCENT_CALLOUT_1(108), + ACCENT_CALLOUT_2(109), + ACCENT_CALLOUT_3(110), + BORDER_CALLOUT_1(111), + BORDER_CALLOUT_2(112), + BORDER_CALLOUT_3(113), + ACCENT_BORDER_CALLOUT_1(114), + ACCENT_BORDER_CALLOUT_2(115), + ACCENT_BORDER_CALLOUT_3(116), + WEDGE_RECT_CALLOUT(117), + WEDGE_ROUND_RECT_CALLOUT(118), + WEDGE_ELLIPSE_CALLOUT(119), + CLOUD_CALLOUT(120), + CLOUD(121), + RIBBON(122), + RIBBON_2(123), + ELLIPSE_RIBBON(124), + ELLIPSE_RIBBON_2(125), + LEFT_RIGHT_RIBBON(126), + VERTICAL_SCROLL(127), + HORIZONTAL_SCROLL(128), + WAVE(129), + DOUBLE_WAVE(130), + PLUS(131), + FLOW_CHART_PROCESS(132), + FLOW_CHART_DECISION(133), + FLOW_CHART_INPUT_OUTPUT(134), + FLOW_CHART_PREDEFINED_PROCESS(135), + FLOW_CHART_INTERNAL_STORAGE(136), + FLOW_CHART_DOCUMENT(137), + FLOW_CHART_MULTIDOCUMENT(138), + FLOW_CHART_TERMINATOR(139), + FLOW_CHART_PREPARATION(140), + FLOW_CHART_MANUAL_INPUT(141), + FLOW_CHART_MANUAL_OPERATION(142), + FLOW_CHART_CONNECTOR(143), + FLOW_CHART_PUNCHED_CARD(144), + FLOW_CHART_PUNCHED_TAPE(145), + FLOW_CHART_SUMMING_JUNCTION(146), + FLOW_CHART_OR(147), + FLOW_CHART_COLLATE(148), + FLOW_CHART_SORT(149), + FLOW_CHART_EXTRACT(150), + FLOW_CHART_MERGE(151), + FLOW_CHART_OFFLINE_STORAGE(152), + FLOW_CHART_ONLINE_STORAGE(153), + FLOW_CHART_MAGNETIC_TAPE(154), + FLOW_CHART_MAGNETIC_DISK(155), + FLOW_CHART_MAGNETIC_DRUM(156), + FLOW_CHART_DISPLAY(157), + FLOW_CHART_DELAY(158), + FLOW_CHART_ALTERNATE_PROCESS(159), + FLOW_CHART_OFFPAGE_CONNECTOR(160), + ACTION_BUTTON_BLANK(161), + ACTION_BUTTON_HOME(162), + ACTION_BUTTON_HELP(163), + ACTION_BUTTON_INFORMATION(164), + ACTION_BUTTON_FORWARD_NEXT(165), + ACTION_BUTTON_BACK_PREVIOUS(166), + ACTION_BUTTON_END(167), + ACTION_BUTTON_BEGINNING(168), + ACTION_BUTTON_RETURN(169), + ACTION_BUTTON_DOCUMENT(170), + ACTION_BUTTON_SOUND(171), + ACTION_BUTTON_MOVIE(172), + GEAR_6(173), + GEAR_9(174), + FUNNEL(175), + MATH_PLUS(176), + MATH_MINUS(177), + MATH_MULTIPLY(178), + MATH_DIVIDE(179), + MATH_EQUAL(180), + MATH_NOT_EQUAL(181), + CORNER_TABS(182), + SQUARE_TABS(183), + PLAQUE_TABS(184), + CHART_X(185), + CHART_STAR(186), + CHART_PLUS(187); + + private int _idx; + + XSLFShapeType(int idx){ + _idx = idx; + } + + /** + * + * @return index in the STShapeType enum + */ + int getIndex(){ + return _idx; + } + + static XSLFShapeType forInt(int idx){ + for(XSLFShapeType t : values()){ + if(t._idx == idx) return t; + } + throw new IllegalArgumentException("Unknown shape type: " + idx); + } +} diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java index 19150d0839..6e4768399b 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java @@ -22,35 +22,22 @@ package org.apache.poi.xslf.usermodel; import org.apache.poi.util.Beta; import org.apache.poi.util.Units; import org.apache.poi.xslf.model.PropertyFetcher; -import org.apache.poi.xslf.model.geom.Context; import org.apache.poi.xslf.model.geom.CustomGeometry; -import org.apache.poi.xslf.model.geom.Guide; -import org.apache.poi.xslf.model.geom.IAdjustableShape; import org.apache.poi.xslf.model.geom.Outline; import org.apache.poi.xslf.model.geom.Path; import org.apache.poi.xslf.model.geom.PresetGeometries; -import org.apache.poi.openxml4j.opc.PackageRelationship; -import org.apache.poi.openxml4j.opc.PackagePart; -import org.apache.poi.openxml4j.opc.TargetMode; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.poi.POIXMLException; import org.apache.xmlbeans.XmlObject; import org.openxmlformats.schemas.drawingml.x2006.main.*; import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; +import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; -import org.openxmlformats.schemas.presentationml.x2006.main.CTPicture; -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.Paint; -import java.awt.Shape; +import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D; import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; import java.util.List; /** @@ -88,13 +75,19 @@ public abstract class XSLFSimpleShape extends XSLFShape { } /** - * TODO match STShapeType with - * {@link org.apache.poi.sl.usermodel.ShapeTypes} + * + * @param type */ - public int getShapeType() { - CTPresetGeometry2D prst = getSpPr().getPrstGeom(); - STShapeType.Enum stEnum = prst == null ? null : prst.getPrst(); - return stEnum == null ? 0 : stEnum.intValue(); + public void setShapeType(XSLFShapeType type){ + CTShape shape = (CTShape) getXmlObject(); + STShapeType.Enum geom = STShapeType.Enum.forInt(type.getIndex()); + shape.getSpPr().getPrstGeom().setPrst(geom); + } + + public XSLFShapeType getShapeType(){ + CTShape shape = (CTShape) getXmlObject(); + STShapeType.Enum geom = shape.getSpPr().getPrstGeom().getPrst(); + return XSLFShapeType.forInt(geom.intValue()); } @Override diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java index ef523b4fc8..e27bedbb53 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java @@ -20,15 +20,9 @@ package org.apache.poi.xslf.usermodel; import org.apache.poi.util.Beta; -import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; -import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D; -import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties; -import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; -import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType; -import org.openxmlformats.schemas.presentationml.x2006.main.CTApplicationNonVisualDrawingProps; +import org.openxmlformats.schemas.drawingml.x2006.main.*; import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; import org.openxmlformats.schemas.presentationml.x2006.main.CTShapeNonVisual; -import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; /** diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFAutoShape.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFAutoShape.java index 0ca30a3b94..922d25f83d 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFAutoShape.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFAutoShape.java @@ -264,4 +264,20 @@ public class TestXSLFAutoShape extends TestCase { r.setText(null); assertNull(r.getText()); } + + public void testShapeType() { + XMLSlideShow ppt = new XMLSlideShow(); + XSLFSlide slide = ppt.createSlide(); + + XSLFAutoShape shape = slide.createAutoShape(); + assertEquals(XSLFShapeType.RECT, shape.getShapeType()); + + shape.setShapeType(XSLFShapeType.TRIANGLE); + assertEquals(XSLFShapeType.TRIANGLE, shape.getShapeType()); + + for(XSLFShapeType tp : XSLFShapeType.values()) { + shape.setShapeType(tp); + assertEquals(tp, shape.getShapeType()); + } + } } \ No newline at end of file