]> source.dussan.org Git - poi.git/commitdiff
fixed bug 42620: More than one slide fails to open in OpenOffice. Fix: UserEditAtom...
authorYegor Kozlov <yegor@apache.org>
Mon, 6 Aug 2007 16:49:47 +0000 (16:49 +0000)
committerYegor Kozlov <yegor@apache.org>
Mon, 6 Aug 2007 16:49:47 +0000 (16:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@563185 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hslf/record/UserEditAtom.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java
src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java

index 6d96eac09a4c0923a067e238fea4b28afca7bfbb..60a647516bab66674d9e038583c0dac153ab0968 100644 (file)
@@ -68,6 +68,7 @@ public class UserEditAtom extends PositionDependentRecordAtom
        public void setLastUserEditAtomOffset(int offset) { lastUserEditAtomOffset = offset; }
        public void setPersistPointersOffset(int offset)  { persistPointersOffset = offset; }
        public void setLastViewType(short type)           { lastViewType=type; }
+    public void setMaxPersistWritten(int max)           { maxPersistWritten=max; }
 
        /* *************** record code follows ********************** */
 
index 4f4e9e96d899ef7f2b0b8f88070f85c531a5a369..02db3567ccb97c979188c20f1930cdd9f5ec183d 100644 (file)
@@ -662,7 +662,8 @@ public class SlideShow
 
                // Last view is now of the slide
                usr.setLastViewType((short)UserEditAtom.LAST_VIEW_SLIDE_VIEW);
-               
+               usr.setMaxPersistWritten(_highestSheetId);
+
                // All done and added
                slide.setSlideShow(this);
                return slide;
index 8c1fb833f7f44c60f1ab8d0bc731305bfb5d68e4..5e63ea9908c3001b7976b6b346727a94f205fbab 100644 (file)
@@ -26,6 +26,9 @@ import java.io.ByteArrayOutputStream;
 
 import junit.framework.TestCase;
 import org.apache.poi.hslf.*;
+import org.apache.poi.hslf.record.Record;
+import org.apache.poi.hslf.record.RecordTypes;
+import org.apache.poi.hslf.record.UserEditAtom;
 import org.apache.poi.hslf.model.*;
 
 /**
@@ -73,14 +76,26 @@ public class TestAddingSlides extends TestCase {
                
                // Should only have a master SLWT
                assertEquals(1, ss_empty.getDocumentRecord().getSlideListWithTexts().length);
-               
+
+        //grab UserEditAtom
+        UserEditAtom usredit = null;
+        Record[] _records = hss_empty.getRecords();
+        for (int i = 0; i < _records.length; i++) {
+            Record record = _records[i];
+            if(_records[i].getRecordType() == RecordTypes.UserEditAtom.typeID) {
+                usredit = (UserEditAtom)_records[i];
+            }
+       }
+       assertNotNull(usredit);
+
                // Add one
                Slide slide = ss_empty.createSlide();
                assertEquals(1, ss_empty.getSlides().length);
                assertEquals(256, slide._getSheetNumber());
                assertEquals(3, slide._getSheetRefId());
                assertEquals(1, slide.getSlideNumber());
-               
+        assertEquals(usredit.getMaxPersistWritten(), slide._getSheetRefId());
+
                // Write out, and read back in
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                hss_empty.write(baos);
@@ -155,6 +170,17 @@ public class TestAddingSlides extends TestCase {
         *  with two slides already
         */
        public void testAddSlideToExisting2() throws Exception {
+        //grab UserEditAtom
+        UserEditAtom usredit = null;
+        Record[] _records = hss_two.getRecords();
+        for (int i = 0; i < _records.length; i++) {
+            Record record = _records[i];
+            if(_records[i].getRecordType() == RecordTypes.UserEditAtom.typeID) {
+                usredit = (UserEditAtom)_records[i];
+            }
+       }
+       assertNotNull(usredit);
+
                // Has two slides
                assertEquals(2, ss_two.getSlides().length);
                Slide s1 = ss_two.getSlides()[0];
@@ -168,14 +194,15 @@ public class TestAddingSlides extends TestCase {
                assertEquals(257, s2._getSheetNumber());
                assertEquals(6, s2._getSheetRefId()); // master and 1 have notes
                assertEquals(2, s2.getSlideNumber());
-               
+
                // Add a third one
                Slide s3 = ss_two.createSlide();
                assertEquals(3, ss_two.getSlides().length);
                assertEquals(258, s3._getSheetNumber());
                assertEquals(8, s3._getSheetRefId()); // lots of notes before us
                assertEquals(3, s3.getSlideNumber());
-               
+        assertEquals(usredit.getMaxPersistWritten(), s3._getSheetRefId());
+
                // Write out, and read back in
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                hss_two.write(baos);