Improve handling of document synopsis with

strange entry ordering.

CCBUG:168678

svn path=/trunk/KDE/kdegraphics/okular/; revision=890398
remotes/origin/old/work/record-presentation
Brad Hards 18 years ago
parent bfa53df1ec
commit 3cb0e7575f
  1. 40
      core/textdocumentgenerator.cpp

@ -179,13 +179,11 @@ void TextDocumentGeneratorPrivate::generateAnnotationInfos()
void TextDocumentGeneratorPrivate::generateTitleInfos() void TextDocumentGeneratorPrivate::generateTitleInfos()
{ {
QStack<QDomNode> parentNodeStack; QStack< QPair<int,QDomNode> > parentNodeStack;
QDomNode parentNode = mDocumentSynopsis; QDomNode parentNode = mDocumentSynopsis;
int level = 1000; parentNodeStack.push( qMakePair( 0, parentNode ) );
for ( int i = 0; i < mTitlePositions.count(); ++i )
level = qMin( level, mTitlePositions[ i ].level );
for ( int i = 0; i < mTitlePositions.count(); ++i ) { for ( int i = 0; i < mTitlePositions.count(); ++i ) {
const TitlePosition &position = mTitlePositions[ i ]; const TitlePosition &position = mTitlePositions[ i ];
@ -195,27 +193,23 @@ void TextDocumentGeneratorPrivate::generateTitleInfos()
QDomElement item = mDocumentSynopsis.createElement( position.title ); QDomElement item = mDocumentSynopsis.createElement( position.title );
item.setAttribute( "Viewport", viewport.toString() ); item.setAttribute( "Viewport", viewport.toString() );
int newLevel = position.level; int headingLevel = position.level;
if ( newLevel == level ) {
parentNode.appendChild( item ); // we need a parent, which has to be at a higher heading level than this heading level
} else if ( newLevel > level ) { // so we just work through the stack
parentNodeStack.push( parentNode ); while ( ! parentNodeStack.isEmpty() ) {
parentNode = parentNode.lastChildElement(); int parentLevel = parentNodeStack.top().first;
if ( ! parentNode.isNull() ) { if ( parentLevel < headingLevel ) {
parentNode.appendChild( item ); // this is OK as a parent
} parentNode = parentNodeStack.top().second;
level = newLevel; break;
} else { } else {
for ( int i = level; i > newLevel; i-- ) { // we'll need to be further into the stack
level--; parentNodeStack.pop();
if ( ! parentNodeStack.isEmpty() ) {
parentNode = parentNodeStack.pop();
}
}
if ( ! parentNode.isNull() ) {
parentNode.appendChild( item );
} }
} }
parentNode.appendChild( item );
parentNodeStack.push( qMakePair( headingLevel, QDomNode(item) ) );
} }
} }

Loading…
Cancel
Save