Author: nick Date: Sun Mar 26 11:07:52 2006 New Revision: 388941 URL: http://svn.apache.org/viewcvs?rev=388941&view=rev Log: Start to do more useful/sensible things with Slide IDs
Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Notes.java jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PositionDependentRecordContainer.java jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Slide.java jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Notes.java URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Notes.java?rev=388941&r1=388940&r2=388941&view=diff ============================================================================== --- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Notes.java (original) +++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Notes.java Sun Mar 26 11:07:52 2006 @@ -19,11 +19,7 @@ package org.apache.poi.hslf.model; -import java.util.*; - -import org.apache.poi.hslf.record.*; -import org.apache.poi.hslf.record.SlideListWithText.*; -import org.apache.poi.util.LittleEndian; +import org.apache.poi.hslf.record.PPDrawing; /** * This class represents a slide's notes in a PowerPoint Document. It @@ -35,8 +31,8 @@ public class Notes extends Sheet { - private int _sheetNo; + private int _slideNo; private org.apache.poi.hslf.record.Notes _notes; private TextRun[] _runs; @@ -48,9 +44,12 @@ */ public Notes (org.apache.poi.hslf.record.Notes notes) { _notes = notes; + + // Grab our internal sheet ID + _sheetNo = notes.getSheetId(); - // Grab the sheet number, via the NotesAtom - _sheetNo = _notes.getNotesAtom().getSlideID(); + // Grab the number of the slide we're for, via the NotesAtom + _slideNo = _notes.getNotesAtom().getSlideID(); // Now, build up TextRuns from pairs of TextHeaderAtom and // one of TextBytesAtom or TextCharsAtom, found inside @@ -67,8 +66,13 @@ public TextRun[] getTextRuns() { return _runs; } /** - * Returns the sheet number + * Returns the (internal, RefId based) sheet number (RefId) */ public int getSheetNumber() { return _sheetNo; } + + /** + * Returns the (internal, identifer based) number of the slide we're attached to + */ + public int getSlideInternalNumber() { return _slideNo; } protected PPDrawing getPPDrawing() { return _notes.getPPDrawing(); }} Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java?rev=388941&r1=388940&r2=388941&view=diff ============================================================================== --- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java (original) +++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java Sun Mar 26 11:07:52 2006 @@ -44,7 +44,8 @@ public abstract TextRun[] getTextRuns(); /** - * Returns the sheet number + * Returns the (internal, RefID based) sheet number, as used + * to reference this sheet from other records. */ public abstract int getSheetNumber(); Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java?rev=388941&r1=388940&r2=388941&view=diff ============================================================================== --- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java (original) +++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java Sun Mar 26 11:07:52 2006 @@ -19,11 +19,11 @@ package org.apache.poi.hslf.model; -import java.util.*; +import java.util.Vector; -import org.apache.poi.hslf.record.*; -import org.apache.poi.hslf.record.SlideListWithText.*; -import org.apache.poi.util.LittleEndian; +import org.apache.poi.hslf.record.PPDrawing; +import org.apache.poi.hslf.record.SlideAtom; +import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; /** * This class represents a slide in a PowerPoint Document. It allows @@ -37,6 +37,7 @@ { private int _sheetNo; + private int _slideNo; private org.apache.poi.hslf.record.Slide _slide; private SlideAtomsSet _atomSet; private TextRun[] _runs; @@ -52,14 +53,12 @@ * @param notes the Notes sheet attached to us * @param atomSet the SlideAtomsSet to get the text from */ - public Slide(org.apache.poi.hslf.record.Slide slide, Notes notes, SlideAtomsSet atomSet) { + public Slide(org.apache.poi.hslf.record.Slide slide, Notes notes, SlideAtomsSet atomSet, int slideNumber) { _slide = slide; _notes = notes; _atomSet = atomSet; - - // Grab the sheet number - //_sheetNo = _slide.getSlideAtom().getSheetNumber(); - _sheetNo = -1; + _sheetNo = slide.getSheetId(); + _slideNo = slideNumber; // Grab the TextRuns from the PPDrawing _otherRuns = findTextRuns(_slide.getPPDrawing()); @@ -89,9 +88,13 @@ /** * Create a new Slide instance + * @param sheetNumber The internal number of the sheet, as used by PersistPtrHolder + * @param slideNumber The user facing number of the sheet */ - public Slide(){ - _slide = new org.apache.poi.hslf.record.Slide(); + public Slide(int sheetNumber, int slideNumber){ + _slide = new org.apache.poi.hslf.record.Slide(); + _sheetNo = sheetNumber; + _slideNo = slideNumber; } /** @@ -122,10 +125,16 @@ public TextRun[] getTextRuns() { return _runs; } /** - * Returns the sheet number + * Returns the (internal, RefId based) sheet number + * @see getSlideNumber() */ public int getSheetNumber() { return _sheetNo; } - + + /** + * Returns the (public facing) page number of this slide + */ + public int getSlideNumber() { return _slideNo; } + /** * Returns the underlying slide record */ Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java?rev=388941&r1=388940&r2=388941&view=diff ============================================================================== --- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java (original) +++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java Sun Mar 26 11:07:52 2006 @@ -41,7 +41,7 @@ private byte[] _header; private byte[] _ptrData; // Will need to update this once we allow updates to _slideLocations private long _type; - + /** * Holds the lookup for slides to their position on disk. * You always need to check the most recent PersistPtrHolder Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PositionDependentRecordContainer.java URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PositionDependentRecordContainer.java?rev=388941&r1=388940&r2=388941&view=diff ============================================================================== --- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PositionDependentRecordContainer.java (original) +++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PositionDependentRecordContainer.java Sun Mar 26 11:07:52 2006 @@ -29,6 +29,20 @@ public abstract class PositionDependentRecordContainer extends RecordContainer implements PositionDependentRecord { + private int sheetId; // Found from PersistPtrHolder + + /** + * Fetch our sheet ID, as found from a PersistPtrHolder. + * Should match the RefId of our matching SlidePersistAtom + */ + public int getSheetId() { return sheetId; } + + /** + * Set our sheet ID, as found from a PersistPtrHolder + */ + public void setSheetId(int id) { sheetId = id; } + + /** Our location on the disk, as of the last write out */ protected int myLastOnDiskOffset; Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Slide.java URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Slide.java?rev=388941&r1=388940&r2=388941&view=diff ============================================================================== --- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Slide.java (original) +++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Slide.java Sun Mar 26 11:07:52 2006 @@ -99,7 +99,7 @@ * We are of type 1006 */ public long getRecordType() { return _type; } - + /** * Write the contents of the record back, so it can be written * to disk Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java?rev=388941&r1=388940&r2=388941&view=diff ============================================================================== --- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java (original) +++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java Sun Mar 26 11:07:52 2006 @@ -33,6 +33,7 @@ import org.apache.poi.hslf.record.DocumentAtom; import org.apache.poi.hslf.record.FontCollection; import org.apache.poi.hslf.record.ParentAwareRecord; +import org.apache.poi.hslf.record.PositionDependentRecordContainer; import org.apache.poi.hslf.record.Record; import org.apache.poi.hslf.record.RecordContainer; import org.apache.poi.hslf.record.RecordTypes; @@ -210,6 +211,14 @@ (Integer)slideIDtoRecordLookup.get(thisID); int storeAt = storeAtI.intValue(); + // Tell it its Sheet ID, if it cares + // TODO: Check that this is the right ID to feed in + if(pdr instanceof PositionDependentRecordContainer) { + PositionDependentRecordContainer pdrc = + (PositionDependentRecordContainer)_records[i]; + pdrc.setSheetId(thisID.intValue()); + } + // Finally, save the record _mostRecentCoreRecords[storeAt] = _records[i]; } @@ -356,6 +365,7 @@ org.apache.poi.hslf.record.Slide slideRecord = (org.apache.poi.hslf.record.Slide)slidesV.get(i); // Decide if we've got a SlideAtomSet to use + // TODO: Use the internal IDs to match instead SlideAtomsSet atomSet = null; if(i < slideAtomSets.length) { atomSet = slideAtomSets[i]; @@ -368,14 +378,14 @@ int notesID = sa.getNotesID(); if(notesID != 0) { for(int k=0; k<_notes.length; k++) { - if(_notes[k].getSheetNumber() == notesID) { + if(_notes[k].getSlideInternalNumber() == notesID) { thisNotes = _notes[k]; } } } // Create the Slide model layer - _slides[i] = new Slide(slideRecord,thisNotes,atomSet); + _slides[i] = new Slide(slideRecord,thisNotes,atomSet, (i+1)); // Now supply ourselves to all the rich text runs // of this slide's TextRuns @@ -492,7 +502,6 @@ if(prev.getSlideIdentifier() < spa.getSlideIdentifier()) { prev = spa; } - System.err.println("Prev is " + prev.getRefID()); } } @@ -512,7 +521,8 @@ // Create a new Slide - Slide slide = new Slide(); + Slide slide = new Slide(sp.getRefID(), _slides.length+1); + // Add in to the list of Slides Slide[] s = new Slide[_slides.length+1]; System.arraycopy(_slides, 0, s, 0, _slides.length); s[_slides.length] = slide; @@ -520,7 +530,8 @@ System.out.println("Added slide " + _slides.length + " with ref " + sp.getRefID() + " and identifier " + sp.getSlideIdentifier()); // Add the core records for this new Slide to the record tree - org.apache.poi.hslf.record.Slide slideRecord = slide.getSlideRecord(); + org.apache.poi.hslf.record.Slide slideRecord = slide.getSlideRecord(); + slideRecord.setSheetId(sp.getRefID()); int slideRecordPos = _hslfSlideShow.appendRootLevelRecord(slideRecord); _records = _hslfSlideShow.getRecords(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] Mailing List: http://jakarta.apache.org/site/mail2.html#poi The Apache Jakarta POI Project: http://jakarta.apache.org/poi/