Author: yegor
Date: Wed Oct 24 12:11:31 2012
New Revision: 1401642

URL: http://svn.apache.org/viewvc?rev=1401642&view=rev
Log:
support links to slides in HSLF

Modified:
    poi/trunk/src/examples/src/org/apache/poi/hslf/examples/CreateHyperlink.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Hyperlink.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java

Modified: 
poi/trunk/src/examples/src/org/apache/poi/hslf/examples/CreateHyperlink.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/hslf/examples/CreateHyperlink.java?rev=1401642&r1=1401641&r2=1401642&view=diff
==============================================================================
--- 
poi/trunk/src/examples/src/org/apache/poi/hslf/examples/CreateHyperlink.java 
(original)
+++ 
poi/trunk/src/examples/src/org/apache/poi/hslf/examples/CreateHyperlink.java 
Wed Oct 24 12:11:31 2012
@@ -33,22 +33,39 @@ public final class CreateHyperlink {
     public static void main(String[] args) throws Exception {
         SlideShow ppt = new SlideShow();
 
-        Slide slide = ppt.createSlide();
+        Slide slideA = ppt.createSlide();
+        Slide slideB = ppt.createSlide();
+        Slide slideC = ppt.createSlide();
+
+        // link to a URL
+        TextBox textBox1 = new TextBox();
+        textBox1.setText("Apache POI");
+        textBox1.setAnchor(new Rectangle(100, 100, 200, 50));
 
-        TextBox shape = new TextBox();
-        shape.setText("Apache POI");
-        Rectangle anchor = new Rectangle(100, 100, 200, 50);
-        shape.setAnchor(anchor);
-
-        String text = shape.getText();
+        String text = textBox1.getText();
         Hyperlink link = new Hyperlink();
         link.setAddress("http://www.apache.org";);
-        link.setTitle(shape.getText());
+        link.setTitle(textBox1.getText());
         int linkId = ppt.addHyperlink(link);
 
-        shape.setHyperlink(linkId, 0, text.length());
+        // apply link to the text
+        textBox1.setHyperlink(linkId, 0, text.length());
+
+        slideA.addShape(textBox1);
+
+        // link to another slide
+        TextBox textBox2 = new TextBox();
+        textBox2.setText("Go to slide #3");
+        textBox2.setAnchor(new Rectangle(100, 300, 200, 50));
+
+        Hyperlink link2 = new Hyperlink();
+        link2.setAddress(slideC);
+        ppt.addHyperlink(link2);
+
+        // apply link to the whole shape
+        textBox2.setHyperlink(link2);
 
-        slide.addShape(shape);
+        slideA.addShape(textBox2);
 
         FileOutputStream out = new FileOutputStream("hyperlink.ppt");
         ppt.write(out);

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Hyperlink.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Hyperlink.java?rev=1401642&r1=1401641&r2=1401642&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Hyperlink.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Hyperlink.java Wed 
Oct 24 12:11:31 2012
@@ -37,6 +37,7 @@ public final class Hyperlink {
     public static final byte LINK_PREVIOUSSLIDE = 
InteractiveInfoAtom.LINK_PreviousSlide;
     public static final byte LINK_FIRSTSLIDE = 
InteractiveInfoAtom.LINK_FirstSlide;
     public static final byte LINK_LASTSLIDE = 
InteractiveInfoAtom.LINK_LastSlide;
+    public static final byte LINK_SLIDENUMBER = 
InteractiveInfoAtom.LINK_SlideNumber;
     public static final byte LINK_URL = InteractiveInfoAtom.LINK_Url;
     public static final byte LINK_NULL = InteractiveInfoAtom.LINK_NULL;
 
@@ -76,6 +77,8 @@ public final class Hyperlink {
                 title = "LAST";
                 address = "1,-1,LAST";
                 break;
+            case LINK_SLIDENUMBER:
+                break;
             default:
                 title = "";
                 address = "";
@@ -92,6 +95,13 @@ public final class Hyperlink {
         return address;
     }
 
+    public void setAddress(Slide slide) {
+        String href = slide._getSheetNumber() + 
","+slide.getSlideNumber()+",Slide " + slide.getSlideNumber();
+        setAddress(href);;
+        setTitle("Slide " + slide.getSlideNumber());
+        setType(Hyperlink.LINK_SLIDENUMBER);
+    }
+
     public void setAddress(String str) {
         address = str;
     }

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java?rev=1401642&r1=1401641&r2=1401642&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java Wed 
Oct 24 12:11:31 2012
@@ -401,7 +401,12 @@ public abstract class SimpleShape extend
                 infoAtom.setJump(InteractiveInfoAtom.JUMP_NONE);
                 infoAtom.setHyperlinkType(InteractiveInfoAtom.LINK_Url);
                 break;
-          }
+            case Hyperlink.LINK_SLIDENUMBER:
+                infoAtom.setAction(InteractiveInfoAtom.ACTION_HYPERLINK);
+                infoAtom.setJump(InteractiveInfoAtom.JUMP_NONE);
+                
infoAtom.setHyperlinkType(InteractiveInfoAtom.LINK_SlideNumber);
+                break;
+        }
 
         infoAtom.setHyperlinkID(link.getId());
 

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java?rev=1401642&r1=1401641&r2=1401642&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java 
Wed Oct 24 12:11:31 2012
@@ -67,6 +67,13 @@ public class ExHyperlink extends RecordC
                        linkDetailsB.setText(url);
                }
        }
+    public void setLinkURL(String url, int options) {
+        if(linkDetailsB != null) {
+            linkDetailsB.setText(url);
+            linkDetailsB.setOptions(options);
+        }
+    }
+
     public void setLinkTitle(String title) {
         if(linkDetailsA != null) {
             linkDetailsA.setText(title);

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java?rev=1401642&r1=1401641&r2=1401642&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java 
Wed Oct 24 12:11:31 2012
@@ -1062,7 +1062,11 @@ public final class SlideShow {
                ExHyperlink ctrl = new ExHyperlink();
                ExHyperlinkAtom obj = ctrl.getExHyperlinkAtom();
                obj.setNumber(objectId);
-               ctrl.setLinkURL(link.getAddress());
+        if(link.getType() == Hyperlink.LINK_SLIDENUMBER) {
+            ctrl.setLinkURL(link.getAddress(), 0x30);
+        } else {
+            ctrl.setLinkURL(link.getAddress());
+        }
                ctrl.setLinkTitle(link.getTitle());
                lst.addChildAfter(ctrl, objAtom);
                link.setId(objectId);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to