The usermodel code is now responsible for filtering out duplicate SlideAtomSets, so update to no longer check for them

Add the ability to get at the Slide record that this is based on


git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353732 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2005-06-26 19:03:48 +00:00
parent 3359aeacdb
commit c6ad45cdf8

View File

@ -38,20 +38,21 @@ public class Slide extends Sheet
private int _sheetNo; private int _sheetNo;
private org.apache.poi.hslf.record.Slide _slide; private org.apache.poi.hslf.record.Slide _slide;
private SlideAtomsSet[] _atomSet; private SlideAtomsSet _atomSet;
private TextRun[] _runs; private TextRun[] _runs;
private TextRun[] _otherRuns; // Any from the PPDrawing, shouldn't really be any though private TextRun[] _otherRuns; // Any from the PPDrawing, shouldn't really be any though
private Notes _notes; private Notes _notes; // usermodel needs to set this
/** /**
* Constructs a Slide from the Slide record, and the SlideAtomsSets * Constructs a Slide from the Slide record, and the SlideAtomsSet
* for ones not embeded in the PPDrawing. * containing the text.
* Initialises TextRuns, to provide easier access to the text * Initialises TextRuns, to provide easier access to the text
* *
* @param slide the Slide record we're based on * @param slide the Slide record we're based on
* @param notes the Notes sheet attached to us
* @param atomSet the SlideAtomsSet to get the text from * @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) {
_slide = slide; _slide = slide;
_notes = notes; _notes = notes;
_atomSet = atomSet; _atomSet = atomSet;
@ -63,38 +64,40 @@ public class Slide extends Sheet
// Grab the TextRuns from the PPDrawing // Grab the TextRuns from the PPDrawing
_otherRuns = findTextRuns(_slide.getPPDrawing()); _otherRuns = findTextRuns(_slide.getPPDrawing());
// Ensure we've only got only copy of each SlideAtomSet
// When in doubt, prefere the later one
Hashtable seenSets = new Hashtable();
Vector useSets = new Vector();
for(int i=0; i<_atomSet.length; i++) {
SlideAtomsSet set = _atomSet[i];
int id = set.getSlidePersistAtom().getRefID();
Integer idI = new Integer(id);
if(seenSets.containsKey(idI)) {
// Replace old one
Integer replacePos = (Integer)seenSets.get(idI);
useSets.set(replacePos.intValue(),set);
} else {
// Use for now
useSets.add(set);
seenSets.put(idI,new Integer(useSets.size()-1));
}
}
// For the text coming in from the SlideAtomsSet: // For the text coming in from the SlideAtomsSet:
// Build up TextRuns from pairs of TextHeaderAtom and // Build up TextRuns from pairs of TextHeaderAtom and
// one of TextBytesAtom or TextCharsAtom // one of TextBytesAtom or TextCharsAtom
Vector runSets = new Vector(); Vector textRuns = new Vector();
for(int i=0; i<useSets.size(); i++) { if(_atomSet != null) {
SlideAtomsSet set = (SlideAtomsSet)useSets.get(i); findTextRuns(_atomSet.getSlideRecords(),textRuns);
findTextRuns(set.getSlideRecords(),runSets); } else {
// No text on the slide, must just be pictures
} }
// Build an array, more useful than a vector // Build an array, more useful than a vector
_runs = new TextRun[runSets.size()]; _runs = new TextRun[textRuns.size()];
for(int i=0; i<_runs.length; i++) { for(int i=0; i<_runs.length; i++) {
_runs[i] = (TextRun)runSets.get(i); _runs[i] = (TextRun)textRuns.get(i);
}
}
/**
* Sets the Notes that are associated with this. Updates the
* references in the records to point to the new ID
*/
public void setNotes(Notes notes) {
_notes = notes;
// Update the Slide Atom's ID of where to point to
SlideAtom sa = _slide.getSlideAtom();
if(notes == null) {
// Set to 0
sa.setNotesID(0);
} else {
// Set to the value from the notes' sheet id
sa.setNotesID(notes.getSheetNumber());
} }
} }
@ -111,6 +114,11 @@ public class Slide extends Sheet
*/ */
public int getSheetNumber() { return _sheetNo; } public int getSheetNumber() { return _sheetNo; }
/**
* Returns the underlying slide record
*/
public org.apache.poi.hslf.record.Slide getSlideRecord() { return _slide; }
/** /**
* Returns the Notes Sheet for this slide, or null if there isn't one * Returns the Notes Sheet for this slide, or null if there isn't one
*/ */