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

📄 document.cpp.svn-base

📁 okular
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
    // if /proc/meminfo doesn't exist, return MEMORY FULL    QFile memFile( "/proc/meminfo" );    if ( !memFile.open( QIODevice::ReadOnly ) )        return 0;    // read /proc/meminfo and sum up the contents of 'MemFree', 'Buffers'    // and 'Cached' fields. consider swapped memory as used memory.    int memoryFree = 0;    QString entry;    QTextStream readStream( &memFile );    while ( !readStream.atEnd() )    {        entry = readStream.readLine();        if ( entry.startsWith( "MemFree:" ) ||                entry.startsWith( "Buffers:" ) ||                entry.startsWith( "Cached:" ) ||                entry.startsWith( "SwapFree:" ) )            memoryFree += entry.section( ' ', -2, -2 ).toInt();        if ( entry.startsWith( "SwapTotal:" ) )            memoryFree -= entry.section( ' ', -2, -2 ).toInt();    }    memFile.close();    return 1024 * memoryFree;#else    // tell the memory is full.. will act as in LOW profile    return 0;#endif}void KPDFDocument::loadDocumentInfo()// note: load data and stores it internally (document or pages). observers// are still uninitialized at this point so don't access them{    //kDebug() << "Using '" << d->xmlFileName << "' as document info file." << endl;    QFile infoFile( d->xmlFileName );    if ( !infoFile.exists() || !infoFile.open( QIODevice::ReadOnly ) )        return;    // Load DOM from XML file    QDomDocument doc( "documentInfo" );    if ( !doc.setContent( &infoFile ) )    {        kDebug() << "Can't load XML pair! Check for broken xml." << endl;        infoFile.close();        return;    }    infoFile.close();    QDomElement root = doc.documentElement();    if ( root.tagName() != "documentInfo" )        return;    // Parse the DOM tree    QDomNode topLevelNode = root.firstChild();    while ( topLevelNode.isElement() )    {        QString catName = topLevelNode.toElement().tagName();        // Restore page attributes (bookmark, annotations, ...) from the DOM        if ( catName == "pageList" )        {            QDomNode pageNode = topLevelNode.firstChild();            while ( pageNode.isElement() )            {                QDomElement pageElement = pageNode.toElement();                if ( pageElement.hasAttribute( "number" ) )                {                    // get page number (node's attribute)                    bool ok;                    int pageNumber = pageElement.attribute( "number" ).toInt( &ok );                    // pass the domElement to the right page, to read config data from                    if ( ok && pageNumber >= 0 && pageNumber < (int)pages_vector.count() )                        pages_vector[ pageNumber ]->restoreLocalContents( pageElement );                }                pageNode = pageNode.nextSibling();            }        }        // Restore 'general info' from the DOM        else if ( catName == "generalInfo" )        {            QDomNode infoNode = topLevelNode.firstChild();            while ( infoNode.isElement() )            {                QDomElement infoElement = infoNode.toElement();                // compatibility: [pre-3.4 viewport storage] @remove after 3.4 relase                if ( infoElement.tagName() == "activePage" )                {                    if ( infoElement.hasAttribute( "viewport" ) )                        *d->viewportIterator = DocumentViewport( infoElement.attribute( "viewport" ) );                }                // restore viewports history                if ( infoElement.tagName() == "history" )                {                    // clear history                    d->viewportHistory.clear();                    // append old viewports                    QDomNode historyNode = infoNode.firstChild();                    while ( historyNode.isElement() )                    {                        QDomElement historyElement = historyNode.toElement();                        if ( historyElement.hasAttribute( "viewport" ) )                        {                            QString vpString = historyElement.attribute( "viewport" );                            d->viewportIterator = d->viewportHistory.insert( d->viewportHistory.end(),                                     DocumentViewport( vpString ) );                        }                        historyNode = historyNode.nextSibling();                    }                    // consistancy check                    if ( d->viewportHistory.isEmpty() )                        d->viewportIterator = d->viewportHistory.insert( d->viewportHistory.end(), DocumentViewport() );                }                infoNode = infoNode.nextSibling();            }        }        topLevelNode = topLevelNode.nextSibling();    } // </documentInfo>}QString KPDFDocument::giveAbsolutePath( const QString & fileName ){    if ( !d->url.isValid() )        return QString::null;    return d->url.upUrl().url() + fileName;}bool KPDFDocument::openRelativeFile( const QString & fileName ){    QString absFileName = giveAbsolutePath( fileName );    if ( absFileName.isEmpty() )        return false;    kDebug() << "openDocument: '" << absFileName << "'" << endl;    emit openURL( absFileName );    return true;}void KPDFDocument::saveDocumentInfo() const{    if ( d->docFileName.isEmpty() )        return;    QFile infoFile( d->xmlFileName );    if (infoFile.open( QIODevice::WriteOnly | QIODevice::Truncate) )    {        // 1. Create DOM        QDomDocument doc( "documentInfo" );        QDomElement root = doc.createElement( "documentInfo" );        doc.appendChild( root );        // 2.1. Save page attributes (bookmark state, annotations, ... ) to DOM        QDomElement pageList = doc.createElement( "pageList" );        root.appendChild( pageList );        // <page list><page number='x'>.... </page> save pages that hold data        QVector< KPDFPage * >::const_iterator pIt = pages_vector.begin(), pEnd = pages_vector.end();        for ( ; pIt != pEnd; ++pIt )            (*pIt)->saveLocalContents( pageList, doc );        // 2.2. Save document info (current viewport, history, ... ) to DOM        QDomElement generalInfo = doc.createElement( "generalInfo" );        root.appendChild( generalInfo );        // <general info><history> ... </history> save history up to 10 viewports        QLinkedList< DocumentViewport >::iterator backIterator = d->viewportIterator;        if ( backIterator != d->viewportHistory.end() )        {            // go back up to 10 steps from the current viewportIterator            int backSteps = 10;            while ( backSteps-- && backIterator != d->viewportHistory.begin() )                --backIterator;            // create history root node            QDomElement historyNode = doc.createElement( "history" );            generalInfo.appendChild( historyNode );            // add old[backIterator] and present[viewportIterator] items            QLinkedList< DocumentViewport >::iterator endIt = d->viewportIterator;            ++endIt;            while ( backIterator != endIt )            {                QString name = (backIterator == d->viewportIterator) ? "current" : "oldPage";                QDomElement historyEntry = doc.createElement( name );                historyEntry.setAttribute( "viewport", (*backIterator).toString() );                historyNode.appendChild( historyEntry );                ++backIterator;            }        }        // 3. Save DOM to XML file        QString xml = doc.toString();        QTextStream os( &infoFile );        os << xml;    }    infoFile.close();}void KPDFDocument::slotTimedMemoryCheck(){    // [MEM] clean memory (for 'free mem dependant' profiles only)    if ( KpdfSettings::memoryLevel() != KpdfSettings::EnumMemoryLevel::Low &&         d->allocatedPixmapsTotalMemory > 1024*1024 )        cleanupPixmapMemory();}void KPDFDocument::slotRotation( int rotation ){    if ( generator->supportsRotation() )    {        d->rotation = rotation;        generator->setOrientation(pages_vector,rotation);        foreachObserver( notifySetup( pages_vector, true ) );        foreachObserver( notifyContentsCleared (DocumentObserver::Pixmap | DocumentObserver::Highlights | DocumentObserver::Annotations));//         foreachObserver( notifyViewportChanged( false /*disables smoothMove*/ ));//         foreachObserver( notifyPageChanged( ) );        kDebug() << "Rotated: " << rotation << endl;    }}void KPDFDocument::slotPaperSizes( int newsize ){    if (generator->supportsPaperSizes())    {        generator->setPaperSize(pages_vector,newsize);        foreachObserver( notifySetup( pages_vector, true ) );        kDebug() << "PaperSize no: " << newsize << endl;    }}/** DocumentViewport **/DocumentViewport::DocumentViewport( int n )    : pageNumber( n ){    // default settings    rePos.enabled = false;    rePos.normalizedX = 0.5;    rePos.normalizedY = 0.0;    rePos.pos = Center;    autoFit.enabled = false;    autoFit.width = false;    autoFit.height = false;}DocumentViewport::DocumentViewport( const QString & xmlDesc )    : pageNumber( -1 ){    // default settings (maybe overridden below)    rePos.enabled = false;    rePos.normalizedX = 0.5;    rePos.normalizedY = 0.0;    rePos.pos = Center;    autoFit.enabled = false;    autoFit.width = false;    autoFit.height = false;    // check for string presence    if ( xmlDesc.isEmpty() )        return;    // decode the string    bool ok;    int field = 0;    QString token = xmlDesc.section( ';', field, field );    while ( !token.isEmpty() )    {        // decode the current token        if ( field == 0 )        {            pageNumber = token.toInt( &ok );            if ( !ok )                return;        }        else if ( token.startsWith( "C1" ) )        {            rePos.enabled = true;            rePos.normalizedX = token.section( ':', 1, 1 ).toDouble();            rePos.normalizedY = token.section( ':', 2, 2 ).toDouble();            rePos.pos = Center;        }        else if ( token.startsWith( "C2" ) )        {            rePos.enabled = true;            rePos.normalizedX = token.section( ':', 1, 1 ).toDouble();            rePos.normalizedY = token.section( ':', 2, 2 ).toDouble();            if (token.section( ':', 3, 3 ).toInt() == 1) rePos.pos = Center;            else rePos.pos = TopLeft;        }        else if ( token.startsWith( "AF1" ) )        {            autoFit.enabled = true;            autoFit.width = token.section( ':', 1, 1 ) == "T";            autoFit.height = token.section( ':', 2, 2 ) == "T";        }        // proceed tokenizing string        field++;        token = xmlDesc.section( ';', field, field );    }}QString DocumentViewport::toString() const{    // start string with page number    QString s = QString::number( pageNumber );    // if has center coordinates, save them on string    if ( rePos.enabled )        s += QString( ";C2:" ) + QString::number( rePos.normalizedX ) +             ':' + QString::number( rePos.normalizedY ) +             ':' + QString::number( rePos.pos );    // if has autofit enabled, save its state on string    if ( autoFit.enabled )        s += QString( ";AF1:" ) + (autoFit.width ? "T" : "F") +             ':' + (autoFit.height ? "T" : "F");    return s;}bool DocumentViewport::operator==( const DocumentViewport & vp ) const{    bool equal = ( pageNumber == vp.pageNumber ) &&                 ( rePos.enabled == vp.rePos.enabled ) &&                 ( autoFit.enabled == vp.autoFit.enabled );    if ( !equal )        return false;    if ( rePos.enabled &&         (( rePos.normalizedX != vp.rePos.normalizedX) ||         ( rePos.normalizedY != vp.rePos.normalizedY ) || rePos.pos != vp.rePos.pos) )        return false;    if ( autoFit.enabled &&         (( autoFit.width != vp.autoFit.width ) ||         ( autoFit.height != vp.autoFit.height )) )        return false;    return true;}/** DocumentInfo **/DocumentInfo::DocumentInfo()  : QDomDocument( "DocumentInformation" ){    QDomElement docElement = createElement( "DocumentInfo" );    appendChild( docElement );}void DocumentInfo::set( const QString &key, const QString &value,                        const QString &title ){    QDomElement docElement = documentElement();    QDomElement element;    // check whether key already exists    QDomNodeList list = docElement.elementsByTagName( key );    if ( list.count() > 0 )        element = list.item( 0 ).toElement();    else        element = createElement( key );    element.setAttribute( "value", value );    element.setAttribute( "title", title );    if ( list.count() == 0 )        docElement.appendChild( element );}QString DocumentInfo::get( const QString &key ) const{    QDomEleme

⌨️ 快捷键说明

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