⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 document.cpp.svn-base

📁 okular
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
    page_rects.clear();    foreachObserver( notifyVisibleRectsChanged() );    // reset internal variables    d->viewportHistory.clear();    d->viewportHistory.append( DocumentViewport() );    d->viewportIterator = d->viewportHistory.begin();    d->allocatedPixmapsTotalMemory = 0;}void KPDFDocument::addObserver( DocumentObserver * pObserver ){    // keep the pointer to the observer in a map    d->observers[ pObserver->observerId() ] = pObserver;    // if the observer is added while a document is already opened, tell it    if ( !pages_vector.isEmpty() )    {        pObserver->notifySetup( pages_vector, true );        pObserver->notifyViewportChanged( false /*disables smoothMove*/ );    }}void KPDFDocument::notifyObservers (NotifyRequest * request){    switch (request->type)    {        case DocumentObserver::Setup:            foreachObserver( notifySetup( pages_vector, request->toggle ) );            break;        case DocumentObserver::Viewport:            foreachObserver( notifyViewportChanged( request->toggle ) );            break;        case DocumentObserver::Page:            foreachObserver( notifyPageChanged( request->page, request->flags ) );            break;        case DocumentObserver::Contents:            foreachObserver( notifyContentsCleared( request->flags ) );            break;        case DocumentObserver::VisibleAreas:            qDeleteAll(page_rects);            page_rects = request->rects;            foreachObserver( notifyVisibleRectsChanged() );            break;    }}void KPDFDocument::removeObserver( DocumentObserver * pObserver ){    // remove observer from the map. it won't receive notifications anymore    if ( d->observers.contains( pObserver->observerId() ) )    {        // free observer's pixmap data        int observerId = pObserver->observerId();        QVector<KPDFPage*>::iterator it = pages_vector.begin(), end = pages_vector.end();        for ( ; it != end; ++it )            (*it)->deletePixmap( observerId );        // [MEM] free observer's allocation descriptors        QLinkedList< AllocatedPixmap * >::iterator aIt = d->allocatedPixmapsFifo.begin();        QLinkedList< AllocatedPixmap * >::iterator aEnd = d->allocatedPixmapsFifo.end();        while ( aIt != aEnd )        {            AllocatedPixmap * p = *aIt;            if ( p->id == observerId )            {                aIt = d->allocatedPixmapsFifo.erase( aIt );                delete p;            }            else                ++aIt;        }        // delete observer entry from the map        d->observers.remove( observerId );    }}void KPDFDocument::reparseConfig(){    // reparse generator config and if something changed clear KPDFPages    if ( generator && generator->reparseConfig() )    {        // invalidate pixmaps        QVector<KPDFPage*>::iterator it = pages_vector.begin(), end = pages_vector.end();        for ( ; it != end; ++it )            (*it)->deletePixmapsAndRects();        // [MEM] remove allocation descriptors        QLinkedList< AllocatedPixmap * >::iterator aIt = d->allocatedPixmapsFifo.begin();        QLinkedList< AllocatedPixmap * >::iterator aEnd = d->allocatedPixmapsFifo.end();        for ( ; aIt != aEnd; ++aIt )            delete *aIt;        d->allocatedPixmapsFifo.clear();        d->allocatedPixmapsTotalMemory = 0;        // send reload signals to observers        foreachObserver( notifyContentsCleared( DocumentObserver::Pixmap ) );    }    // free memory if in 'low' profile    if ( KpdfSettings::memoryLevel() == KpdfSettings::EnumMemoryLevel::Low &&         !d->allocatedPixmapsFifo.isEmpty() && !pages_vector.isEmpty() )        cleanupPixmapMemory();}bool KPDFDocument::isOpened() const{    return generator;}bool KPDFDocument::handleEvent( QEvent * event ){    return generator ? generator->handleEvent( event ) : true;}bool KPDFDocument::canConfigurePrinter( ) const{    return generator ? generator->canConfigurePrinter() : false;}const DocumentInfo * KPDFDocument::documentInfo() const{    return generator ? generator->generateDocumentInfo() : NULL;}const DocumentSynopsis * KPDFDocument::documentSynopsis() const{    return generator ? generator->generateDocumentSynopsis() : NULL;}const DocumentFonts * KPDFDocument::documentFonts() const{    return generator ? generator->generateDocumentFonts() : NULL;}const QList<EmbeddedFile*> *KPDFDocument::embeddedFiles() const{    return generator ? generator->embeddedFiles() : NULL;}const KPDFPage * KPDFDocument::page( int n ) const{    return ( n < pages_vector.count() ) ? pages_vector[n] : 0;}const DocumentViewport & KPDFDocument::viewport() const{    return (*d->viewportIterator);}const QVector< VisiblePageRect * > & KPDFDocument::visiblePageRects() const{    return page_rects;}void KPDFDocument::setVisiblePageRects( const QVector< VisiblePageRect * > & visiblePageRects, int excludeId ){    QVector< VisiblePageRect * >::iterator vIt = page_rects.begin();    QVector< VisiblePageRect * >::iterator vEnd = page_rects.end();    for ( ; vIt != vEnd; ++vIt )        delete *vIt;    page_rects = visiblePageRects;    // notify change to all other (different from id) observers    QMap< int, DocumentObserver * >::iterator it = d->observers.begin(), end = d->observers.end();    for ( ; it != end ; ++ it )        if ( it.key() != excludeId )            (*it)->notifyVisibleRectsChanged();}uint KPDFDocument::currentPage() const{    return (*d->viewportIterator).pageNumber;}uint KPDFDocument::pages() const{    return pages_vector.size();}KUrl KPDFDocument::currentDocument() const{    return d->url;}bool KPDFDocument::isAllowed( int flags ) const{    return generator ? generator->isAllowed( flags ) : false;}bool KPDFDocument::supportsSearching() const{    return generator ? generator->supportsSearching() : false;}bool KPDFDocument::supportsRotation() const{    return generator ? generator->supportsRotation() : false;}bool KPDFDocument::supportsPaperSizes() const{    return generator ? generator->supportsPaperSizes() : false;}QStringList KPDFDocument::paperSizes() const{    return generator ? generator->paperSizes() : QStringList();}bool KPDFDocument::canExportToText() const{    return generator ? generator->canExportToText() : false;}bool KPDFDocument::exportToText( const QString& fileName ) const{    return generator ? generator->exportToText( fileName ) : false;}QList<ExportEntry*> KPDFDocument::exportFormats() const{    return generator ? generator->exportFormats() : QList<ExportEntry*>();}bool KPDFDocument::exportTo( const QString& fileName, const KMimeType::Ptr& mime ) const{    return generator ? generator->exportTo( fileName, mime ) : false;}bool KPDFDocument::historyAtBegin() const{    return d->viewportIterator == d->viewportHistory.begin();}bool KPDFDocument::historyAtEnd() const{    return d->viewportIterator == --(d->viewportHistory.end());}QString KPDFDocument::getMetaData( const QString & key, const QString & option ) const{    return generator ? generator->getMetaData( key, option ) : QString();}int KPDFDocument::rotation() const{    return d->rotation;}void KPDFDocument::requestPixmaps( const QLinkedList< PixmapRequest * > & requests ){    if ( !generator )    {        // delete requests..        QLinkedList< PixmapRequest * >::const_iterator rIt = requests.begin(), rEnd = requests.end();        for ( ; rIt != rEnd; ++rIt )            delete *rIt;        // ..and return        return;    }    // 1. [CLEAN STACK] remove previous requests of requesterID    int requesterID = requests.first()->id;    QLinkedList< PixmapRequest * >::iterator sIt = d->pixmapRequestsStack.begin(), sEnd = d->pixmapRequestsStack.end();    while ( sIt != sEnd )    {        if ( (*sIt)->id == requesterID )        {            // delete request and remove it from stack            delete *sIt;            sIt = d->pixmapRequestsStack.erase( sIt );        }        else            ++sIt;    }    // 2. [ADD TO STACK] add requests to stack    bool threadingDisabled = !KpdfSettings::enableThreading();    QLinkedList< PixmapRequest * >::const_iterator rIt = requests.begin(), rEnd = requests.end();    for ( ; rIt != rEnd; ++rIt )    {        // set the 'page field' (see PixmapRequest) and check if it is valid        PixmapRequest * request = *rIt;        kWarning() << "request id=" << request->id << " " <<request->width << "x" << request->height << "@" << request->pageNumber << endl;        if ( !(request->page = pages_vector[ request->pageNumber ]) )        {            // skip requests referencing an invalid page (must not happen)            delete request;            continue;        }        request->documentRotation = d->rotation;        if ( !request->async )            request->priority = 0;        if ( request->async && threadingDisabled )            request->async = false;        // add request to the 'stack' at the right place        if ( !request->priority )            // add priority zero requests to the top of the stack            d->pixmapRequestsStack.append( request );        else        {            // insert in stack sorted by priority            sIt = d->pixmapRequestsStack.begin();            sEnd = d->pixmapRequestsStack.end();            while ( sIt != sEnd && (*sIt)->priority >= request->priority )                ++sIt;            d->pixmapRequestsStack.insert( sIt, request );        }    }    // 3. [START FIRST GENERATION] if <NO>generator is ready, start a new generation,    // or else (if gen is running) it will be started when the new contents will    //come from generator (in requestDone())</NO>    // all handling of requests put into sendGeneratorRequest    //    if ( generator->canGeneratePixmap() )        sendGeneratorRequest();}void KPDFDocument::requestTextPage( uint page ){    KPDFPage * kp = pages_vector[ page ];    if ( !generator || !kp )        return;    // Memory management for TextPages    generator->generateSyncTextPage( kp );}void KPDFDocument::addPageAnnotation( int page, Annotation * annotation ){    // find out the page to attach annotation    KPDFPage * kp = pages_vector[ page ];    if ( !generator || !kp )        return;    // add annotation to the page    kp->addAnnotation( annotation );    // notify observers about the change    foreachObserver( notifyPageChanged( page, DocumentObserver::Annotations ) );}void KPDFDocument::modifyPageAnnotation( int page, Annotation * newannotation ){    //TODO: modify annotations        // find out the page    KPDFPage * kp = pages_vector[ page ];    if ( !generator || !kp )        return;        kp->modifyAnnotation( newannotation );    // notify observers about the change    foreachObserver( notifyPageChanged( page, DocumentObserver::Annotations ) );}void KPDFDocument::removePageAnnotation( int page, Annotation * annotation ){    // find out the page    KPDFPage * kp = pages_vector[ page ];    if ( !generator || !kp )        return;        kp->removeAnnotation( annotation );    // notify observers about the change    foreachObserver( notifyPageChanged( page, DocumentObserver::Annotations ) );}        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -