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

📄 propertiesdialog.cpp.svn-base

📁 okular
💻 SVN-BASE
字号:
/*************************************************************************** *   Copyright (C) 2004 by Albert Astals Cid <tsdgeos@terra.es>            * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * ***************************************************************************/// qt/kde includes#include <qlayout.h>#include <qlabel.h>#include <qheaderview.h>#include <qsortfilterproxymodel.h>#include <qtreeview.h>#include <kicon.h>#include <klocale.h>#include <ksqueezedtextlabel.h>#include <kglobalsettings.h>// local includes#include "propertiesdialog.h"#include "core/document.h"PropertiesDialog::PropertiesDialog(QWidget *parent, KPDFDocument *doc)  : KPageDialog( parent ){  setFaceType( Tabbed );  setCaption( i18n( "Unknown File" ) );  setButtons( Ok );  // PROPERTIES  QFrame *page = new QFrame();  KPageWidgetItem *item = addPage( page, i18n( "&Properties" ) );  item->setIcon( KIcon( "info" ) );  QGridLayout *layout = new QGridLayout( page );  layout->setMargin( marginHint() );  layout->setSpacing( spacingHint() );  // get document info, if not present display blank data and a warning  const DocumentInfo * info = doc->documentInfo();  if ( !info ) {    layout->addWidget( new QLabel( i18n( "No document opened." ), page ), 0, 0 );    return;  }  // mime name based on mimetype id  QString mimeName = info->get( "mimeType" ).section( '/', -1 ).toUpper();  setCaption( i18n( "%1 Properties", mimeName ) );  QDomElement docElement = info->documentElement();  int row = 0;  int valMaxWidth = 100;  for ( QDomNode node = docElement.firstChild(); !node.isNull(); node = node.nextSibling() ) {    QDomElement element = node.toElement();    QString titleString = element.attribute( "title" );    QString valueString = element.attribute( "value" );    if ( titleString.isEmpty() || valueString.isEmpty() )        continue;    // create labels and layout them    QLabel *key = new QLabel( i18n( "%1:", titleString ), page );    QLabel *value = new KSqueezedTextLabel( valueString, page );    layout->addWidget( key, row, 0, Qt::AlignRight );    layout->addWidget( value, row, 1 );    row++;    // refine maximum width of 'value' labels    valMaxWidth = qMax( valMaxWidth, fontMetrics().width( valueString ) );  }  // add the number of pages if the generator hasn't done it already  QDomNodeList list = docElement.elementsByTagName( "pages" );  if ( list.count() == 0 ) {    QLabel *key = new QLabel( i18n( "Pages:" ), page );    QLabel *value = new QLabel( QString::number( doc->pages() ), page );    layout->addWidget( key, row, 0, Qt::AlignRight );    layout->addWidget( value, row, 1 );  }  // FONTS  QVBoxLayout *page2Layout = 0;  const DocumentFonts * fonts = doc->documentFonts();  if ( fonts ) {    // create fonts tab and layout it    QFrame *page2 = new QFrame();    KPageWidgetItem *item2 = addPage(page2, i18n("&Fonts"));    item2->setIcon( KIcon( "fonts" ) );    page2Layout = new QVBoxLayout(page2);    page2Layout->setMargin(marginHint());    page2Layout->setSpacing(spacingHint());    // add a tree view    QTreeView *view = new QTreeView(page2);    page2Layout->addWidget(view);    view->setRootIsDecorated(false);    view->setAlternatingRowColors(true);    view->header()->setClickable(true);    view->header()->setSortIndicatorShown(true);    // creating a proxy model so we can sort the data#ifdef ENABLE_PROPERTIESDIALOG_PROXYMODEL    QSortFilterProxyModel *proxymodel = new QSortFilterProxyModel(view);    FontsListModel *model = new FontsListModel(view);    proxymodel->setSourceModel(model);    view->setModel(proxymodel);#else    FontsListModel *model = new FontsListModel(view);    view->setModel(model);#endif    // populate the klistview    for ( QDomNode node = fonts->documentElement().firstChild(); !node.isNull(); node = node.nextSibling() ) {      QDomElement e = node.toElement();      model->addFont( e.attribute( "Name" ), e.attribute( "Type" ),                      e.attribute( "Embedded" ), e.attribute( "File" ) );    }  }  // current width: left columnt + right column + dialog borders  int width = layout->minimumSize().width() + valMaxWidth + 2 * marginHint() + spacingHint() + 30;  if ( page2Layout )    width = qMax( width, page2Layout->sizeHint().width() + marginHint() + spacingHint() + 31 );  // stay inside the 2/3 of the screen width  QRect screenContainer = KGlobalSettings::desktopGeometry( this );  width = qMin( width, 2*screenContainer.width()/3 );  resize(width, 1);}class LocalFontInfoStruct{  public:    QString name;    QString type;    QString embedded;    QString file;};FontsListModel::FontsListModel( QObject * parent )  : QAbstractTableModel( parent ){}FontsListModel::~FontsListModel(){  qDeleteAll(m_fonts);}void FontsListModel::addFont( const QString &name, const QString &type, const QString &embedded, const QString &file ){  beginInsertRows( QModelIndex(), m_fonts.size() + 1, m_fonts.size() + 1 );  LocalFontInfoStruct *info = new LocalFontInfoStruct();  info->name = name;  info->type = type;  info->embedded = embedded;  info->file = file;  m_fonts << info;  endInsertRows();}int FontsListModel::columnCount( const QModelIndex & ) const{  return 4;}QVariant FontsListModel::data( const QModelIndex &index, int role ) const{  if ( !index.isValid() )    return QVariant();  if ( ( index.row() < 0 ) || ( index.row() >= m_fonts.size() ) )    return QVariant();  if ( role != Qt::DisplayRole )    return QVariant();  switch ( index.column() )  {    case 0: return m_fonts.at(index.row())->name; break;    case 1: return m_fonts.at(index.row())->type; break;    case 2: return m_fonts.at(index.row())->embedded; break;    case 3: return m_fonts.at(index.row())->file; break;    default:       return QVariant();  }}QVariant FontsListModel::headerData( int section, Qt::Orientation orientation, int role ) const{  if ( orientation != Qt::Horizontal )    return QVariant();  if ( role == Qt::TextAlignmentRole )    return QVariant( Qt::AlignLeft );  if ( role != Qt::DisplayRole )    return QVariant();  switch ( section )  {    case 0: return i18n( "Name" ); break;    case 1: return i18n( "Type" ); break;    case 2: return i18n( "Embedded" ); break;    case 3: return i18n( "File" ); break;    default:      return QVariant();  }}int FontsListModel::rowCount( const QModelIndex & ) const{  return m_fonts.size();}#include "propertiesdialog.moc"

⌨️ 快捷键说明

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