* that contains information on pictures in the slides.
*/
public PPDrawingGroup getPPDrawingGroup() { return ppDrawing; }
+
/**
* Returns all the SlideListWithTexts that are defined for
* this Document. They hold the text, and some of the text
* properties, which are referred to by the slides.
+ * This will normally return an array of size 2 or 3
*/
public SlideListWithText[] getSlideListWithTexts() { return slwts; }
+ /**
+ * Returns the SlideListWithText that deals with the
+ * Master Slides
+ */
+ public SlideListWithText getMasterSlideListWithText() {
+ if(slwts.length > 0) { return slwts[0]; }
+ return null; }
+ /**
+ * Returns the SlideListWithText that deals with the
+ * Slides, or null if there isn't one
+ */
+ public SlideListWithText getSlideSlideListWithText() {
+ if(slwts.length > 1) { return slwts[1]; }
+ return null; }
+ /**
+ * Returns the SlideListWithText that deals with the
+ * notes, or null if there isn't one
+ */
+ public SlideListWithText getNotesSlideListWithText() {
+ if(slwts.length > 2) { return slwts[2]; }
+ return null; }
/**
throw new IllegalStateException("The first child of a Document must be a DocumentAtom");
}
documentAtom = (DocumentAtom)_children[0];
-
+
// Find how many SlideListWithTexts we have
- // Also, grab the Environment record on our way past
+ // Also, grab the Environment and PPDrawing records
+ // on our way past
int slwtcount = 0;
for(int i=1; i<_children.length; i++) {
if(_children[i] instanceof SlideListWithText) {
ppDrawing = (PPDrawingGroup)_children[i];
}
}
- // Now grab them all
+
+ // You should only every have 1, 2 or 3 SLWTs
+ // (normally it's 2, or 3 if you have notes)
+ // Complain if it's not
+ if(slwtcount == 0) {
+ System.err.println("No SlideListWithText's found - there should normally be at least one!");
+ }
+ if(slwtcount > 3) {
+ System.err.println("Found " + slwtcount + " SlideListWithTexts - normally there should only be three!");
+ }
+
+ // Now grab all the SLWTs
slwts = new SlideListWithText[slwtcount];
slwtcount = 0;
for(int i=1; i<_children.length; i++) {
/**
* Adds a new SlideListWithText record, at the appropriate
- * point
+ * point in the child records.
*/
public void addSlideListWithText(SlideListWithText slwt) {
// The new SlideListWithText should go in
addChildBefore(slwt, endDoc);
// Updated our cached list of SlideListWithText records
- SlideListWithText[] nl = new SlideListWithText[slwts.length + 1];
+ int newSize = slwts.length + 1;
+ SlideListWithText[] nl = new SlideListWithText[newSize];
System.arraycopy(slwts, 0, nl, 0, slwts.length);
nl[nl.length-1] = slwt;
slwts = nl;
* @throws IOException
*/
public Slide createSlide() throws IOException {
- SlideListWithText[] slwts = _documentRecord.getSlideListWithTexts();
SlideListWithText slist = null;
-
- if(slwts.length > 1) {
- // Just use the last one
- slist = slwts[slwts.length - 1];
- } else {
+
+ // We need to add the records to the SLWT that deals
+ // with Slides.
+ // Add it, if it doesn't exist
+ slist = _documentRecord.getSlideSlideListWithText();
+ if(slist == null) {
// Need to add a new one
slist = new SlideListWithText();
_documentRecord.addSlideListWithText(slist);
- slwts = _documentRecord.getSlideListWithTexts();
}
// Grab the SlidePersistAtom with the highest Slide Number.
// (Will stay as null if no SlidePersistAtom exists yet in
// the slide, or only master slide's ones do)
SlidePersistAtom prev = null;
- for(int i=0; i<slwts.length; i++) {
- SlideAtomsSet[] sas = slwts[i].getSlideAtomsSets();
- for(int j=0; j<sas.length; j++) {
- SlidePersistAtom spa = sas[j].getSlidePersistAtom();
- if(spa.getSlideIdentifier() < 0) {
- // This is for a master slide
- } else {
- // Must be for a real slide
- if(prev == null) { prev = spa; }
- if(prev.getSlideIdentifier() < spa.getSlideIdentifier()) {
- prev = spa;
- }
+ SlideAtomsSet[] sas = slist.getSlideAtomsSets();
+ for(int j=0; j<sas.length; j++) {
+ SlidePersistAtom spa = sas[j].getSlidePersistAtom();
+ if(spa.getSlideIdentifier() < 0) {
+ // This is for a master slide
+ // Odd, since we only deal with the Slide SLWT
+ } else {
+ // Must be for a real slide
+ if(prev == null) { prev = spa; }
+ if(prev.getSlideIdentifier() < spa.getSlideIdentifier()) {
+ prev = spa;
}
}
}
public void testWritesOutTheSame() throws Exception {
assertWritesOutTheSame(hssA, pfsA);
-
- // Disabled until bug #39800 is fixed
- //assertWritesOutTheSame(hssB, pfsB);
+ assertWritesOutTheSame(hssB, pfsB);
}
public void assertWritesOutTheSame(HSLFSlideShow hss, POIFSFileSystem pfs) throws Exception {
// Write out to a byte array
pfs.createDocumentInputStream("PowerPoint Document").read(_oData);
npfs.createDocumentInputStream("PowerPoint Document").read(_nData);
for(int i=0; i<_oData.length; i++) {
- System.out.println(i + "\t" + Integer.toHexString(i));
+ //System.out.println(i + "\t" + Integer.toHexString(i));
assertEquals(_oData[i], _nData[i]);
}
}
public void testSlideShowWritesOutTheSame() throws Exception {
assertSlideShowWritesOutTheSame(hssA, pfsA);
- // Disabled until bug #39800 is fixed
+ // Some bug in StyleTextPropAtom rewriting means this will fail
+ // We need to identify and fix that first
//assertSlideShowWritesOutTheSame(hssB, pfsB);
}
public void assertSlideShowWritesOutTheSame(HSLFSlideShow hss, POIFSFileSystem pfs) throws Exception {
pfs.createDocumentInputStream("PowerPoint Document").read(_oData);
npfs.createDocumentInputStream("PowerPoint Document").read(_nData);
for(int i=0; i<_oData.length; i++) {
- //System.out.println(i + "\t" + Integer.toHexString(i));
+ if(_oData[i] != _nData[i])
+ System.out.println(i + "\t" + Integer.toHexString(i));
assertEquals(_oData[i], _nData[i]);
}
}
// Doesn't have any slides
assertEquals(0, ss_empty.getSlides().length);
+ // Should only have a master SLWT
+ assertEquals(1, ss_empty.getDocumentRecord().getSlideListWithTexts().length);
+
// Add one
Slide slide = ss_empty.createSlide();
assertEquals(1, ss_empty.getSlides().length);
// Check it now has a slide
assertEquals(1, ss_read.getSlides().length);
+
+ // Check it now has two SLWTs
+ assertEquals(2, ss_empty.getDocumentRecord().getSlideListWithTexts().length);
// And check it's as expected
slide = ss_read.getSlides()[0];
assertEquals(1, ss_one.getSlides().length);
Slide s1 = ss_one.getSlides()[0];
+ // Should have two SLTWs
+ assertEquals(2, ss_one.getDocumentRecord().getSlideListWithTexts().length);
+
// Check slide 1 is as expected
assertEquals(256, s1._getSheetNumber());
assertEquals(3, s1._getSheetRefId());
// Check it now has two slides
assertEquals(2, ss_read.getSlides().length);
+ // Should still have two SLTWs
+ assertEquals(2, ss_read.getDocumentRecord().getSlideListWithTexts().length);
+
// And check it's as expected
s1 = ss_read.getSlides()[0];
s2 = ss_read.getSlides()[1];