bool Album::gotoPage(unsigned int pageNo, float timeToRotateBy) { if (pageNo>=_pages.size()) return false; if (pageNo>_currentPageNo) { for(unsigned int i=_currentPageNo;i<pageNo;++i) { _pages[i]->rotateTo(osg::PI,timeToRotateBy); } _currentPageNo = pageNo; return true; } else if (pageNo<_currentPageNo) { for(unsigned int i=pageNo;i<_currentPageNo;++i) { _pages[i]->rotateTo(0,timeToRotateBy); } _currentPageNo = pageNo; return true; } return false; }
void Album::setVisibility() { for(unsigned int i=0;i<_pages.size();++i) { bool front_visible = _pages[i]->rotating() || (i>0?_pages[i-1]->rotating():false) || i==_currentPageNo || i==0; bool back_visible = _pages[i]->rotating() || ((i+1)<_pages.size()?_pages[i+1]->rotating():false) || i==_currentPageNo-1 || i==_pages.size()-1; _pages[i]->setPageVisible(front_visible,back_visible); } }
bool KGVDocument::psCopyDoc( const QString& inputFile, const QString& outputFile, const PageList& pageList ) { FILE* from; FILE* to; char text[ PSLINELENGTH ]; char* comment; bool pages_written = false; bool pages_atend = false; unsigned int i = 0; unsigned int pages = 0; long here; kdDebug(4500) << "KGVDocument: Copying pages from " << inputFile << " to " << outputFile << endl; pages = pageList.size(); if( pages == 0 ) { KMessageBox::sorry( 0, i18n( "Printing failed because the list of " "pages to be printed was empty." ), i18n( "Error Printing" ) ); return false; } from = fopen( QFile::encodeName( inputFile ), "r" ); to = fopen( QFile::encodeName( outputFile ), "w" ); // Hack in order to make printing of PDF files work. FIXME CDSC* dsc; if( _format == PS ) dsc = _dsc->cdsc(); else { FILE* fp = fopen( QFile::encodeName( inputFile ), "r"); char buf[256]; int count; dsc = dsc_init( 0 ); while( ( count = fread( buf, 1, sizeof( buf ), fp ) ) != 0 ) dsc_scan_data( dsc, buf, count ); fclose( fp ); if( !dsc ) return false; dsc_fixup( dsc ); } here = dsc->begincomments; while( ( comment = pscopyuntil( from, to, here, dsc->endcomments, "%%Pages:" ) ) ) { here = ftell( from ); if( pages_written || pages_atend ) { free( comment ); continue; } sscanf( comment + length("%%Pages:" ), "%256s", text ); text[256] = 0; // Just in case of an overflow if( strcmp( text, "(atend)" ) == 0 ) { fputs( comment, to ); pages_atend = true; } else { switch ( sscanf( comment + length( "%%Pages:" ), "%*d %u", &i ) ) { case 1: fprintf( to, "%%%%Pages: %d %d\n", pages, i ); break; default: fprintf( to, "%%%%Pages: %d\n", pages ); break; } pages_written = true; } free(comment); } pscopy( from, to, dsc->beginpreview, dsc->endpreview ); pscopy( from, to, dsc->begindefaults, dsc->enddefaults ); pscopy( from, to, dsc->beginprolog, dsc->endprolog ); pscopy( from, to, dsc->beginsetup, dsc->endsetup ); //TODO -- Check that a all dsc attributes are copied unsigned int count = 1; PageList::const_iterator it; for( it = pageList.begin(); it != pageList.end(); ++it ) { i = (*it) - 1; comment = pscopyuntil( from, to, dsc->page[i].begin, dsc->page[i].end, "%%Page:" ); if ( comment ) free( comment ); fprintf( to, "%%%%Page: %s %d\n", dsc->page[i].label, count++ ); pscopy( from, to, -1, dsc->page[i].end ); } here = dsc->begintrailer; while( ( comment = pscopyuntil( from, to, here, dsc->endtrailer, "%%Pages:" ) ) ) { here = ftell( from ); if ( pages_written ) { free( comment ); continue; } switch ( sscanf( comment + length( "%%Pages:" ), "%*d %u", &i ) ) { case 1: fprintf( to, "%%%%Pages: %d %d\n", pages, i ); break; default: fprintf( to, "%%%%Pages: %d\n", pages ); break; } pages_written = true; free( comment ); } fclose( from ); fclose( to ); if( _format == PDF ) dsc_free( dsc ); return true; }
QToolBoxPrivate::Page *QToolBoxPrivate::page( int index ) { if (index >= 0 && index < (int)pageList.size() ) return &*pageList.at(index); return 0; }