void MainWindow::createDockWindows() { // Engine debug QDockWidget* engineDebugDock = new QDockWidget(tr("Engine Debug"), this); m_engineDebugLog = new PlainTextLog(engineDebugDock); connect(m_engineDebugLog, SIGNAL(saveLogToFileRequest()), this, SLOT(saveLogToFile())); engineDebugDock->setWidget(m_engineDebugLog); addDockWidget(Qt::BottomDockWidgetArea, engineDebugDock); // Move list QDockWidget* moveListDock = new QDockWidget(tr("Moves"), this); moveListDock->setWidget(m_moveList); addDockWidget(Qt::RightDockWidgetArea, moveListDock); // Tags QDockWidget* tagsDock = new QDockWidget(tr("Tags"), this); QTreeView* tagsView = new QTreeView(tagsDock); tagsView->setModel(m_tagsModel); tagsView->setAlternatingRowColors(true); tagsView->setRootIsDecorated(false); tagsDock->setWidget(tagsView); addDockWidget(Qt::RightDockWidgetArea, tagsDock); tabifyDockWidget(moveListDock, tagsDock); moveListDock->raise(); // Add toggle view actions to the View menu m_viewMenu->addAction(moveListDock->toggleViewAction()); m_viewMenu->addAction(tagsDock->toggleViewAction()); m_viewMenu->addAction(engineDebugDock->toggleViewAction()); }
QWidget * StitcherWorkspace::createConstraintsTree() { QWidget * top = new QWidget(this); QVBoxLayout * vbox = new QVBoxLayout(top); top->setContentsMargins(0,0,0,0); vbox->setContentsMargins(0,0,0,0); /* need a real QTreeView with a model */ QStandardItemModel * model = new QStandardItemModel; QTreeView *treeView = new QTreeView(top); vbox->addWidget(treeView); constraintsTree = treeView; treeView->setModel(model); initConstraintsTree(); treeView->setAlternatingRowColors(true); treeView->setSelectionMode(QAbstractItemView::SingleSelection); treeView->setSelectionBehavior(QAbstractItemView::SelectRows); treeView->resizeColumnToContents(0); treeView->resizeColumnToContents(1); QHBoxLayout * hbox = new QHBoxLayout(); QPushButton * addConstraint = new QPushButton("Add Constraint",top); QPushButton * delConstraint = new QPushButton("Del Constraint",top); connect(addConstraint,SIGNAL(clicked()),this,SLOT(onAddConstraintClicked())); connect(delConstraint,SIGNAL(clicked()),this,SLOT(onDelConstraintClicked())); hbox->addWidget(addConstraint); hbox->addWidget(delConstraint); vbox->addLayout(hbox); QPushButton * optimizeGeometry = new QPushButton("Optimize Geometry",top); connect(optimizeGeometry,SIGNAL(clicked()),this,SLOT(onOptimizeGeometryClicked())); vbox->addWidget(optimizeGeometry); return top; }
QTreeView * StitcherWorkspace::createGeometryTree() { /* need a real QTreeView with a model */ QStandardItemModel * model = new QStandardItemModel; QTreeView *treeView = new QTreeView(this); geometryTree = treeView; treeView->setModel(model); loadGeometry(); treeView->setAlternatingRowColors(true); treeView->setSelectionMode(QAbstractItemView::SingleSelection); treeView->setSelectionBehavior(QAbstractItemView::SelectRows); treeView->resizeColumnToContents(0); treeView->resizeColumnToContents(1); connect(model,SIGNAL(itemChanged(QStandardItem * )),this,SLOT(onItemChanged(QStandardItem *))); return treeView; }
int main(int argc,char **argv) { QApplication app(argc,argv); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK")); QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); TagTreeModel model; QTreeView view; view.setModel(&model); view.setAlternatingRowColors(true); view.show(); return app.exec(); }
FilteringView::FilteringView(QAbstractItemModel *model, QWidget *parent) : QWidget(parent) { setWindowTitle(tr("Filter View")); proxyModel = new QSortFilterProxyModel(this); proxyModel->setSourceModel(model); QVBoxLayout *lay = new QVBoxLayout(this); QHBoxLayout *hlay = new QHBoxLayout; QLineEdit *edit = new QLineEdit; QComboBox *comboBox = new QComboBox; int modelIndex = model->columnCount(QModelIndex()); for(int i=0; i < modelIndex; i++) comboBox->addItem(model->headerData(i, Qt::Horizontal, Qt::DisplayRole).toString()); hlay->addWidget(edit); hlay->addWidget(comboBox); QTreeView *view = new QTreeView; view->setModel(proxyModel); view->setAlternatingRowColors(true); // Make the header "clickable" view->header()->setClickable(true); // Sort Indicator festlegen view->header()->setSortIndicator(0, Qt::AscendingOrder); // Sort Indicator anzeigen view->header()->setSortIndicatorShown(true); // Initial sortieren view->sortByColumn(0); lay->addLayout(hlay); lay->addWidget(view); connect(edit, SIGNAL(textChanged(const QString&)), proxyModel, SLOT(setFilterWildcard(const QString&))); connect(comboBox, SIGNAL(activated(int)), SLOT(setFilterKeyColumn(int))); }
PropertiesDialog::PropertiesDialog(QWidget *parent, Okular::Document *doc) : KPageDialog( parent ), m_document( doc ), m_fontPage( 0 ), m_fontModel( 0 ), m_fontInfo( 0 ), m_fontProgressBar( 0 ), m_fontScanStarted( false ) { setFaceType( Tabbed ); setCaption( i18n( "Unknown File" ) ); setButtons( Ok ); // PROPERTIES QFrame *page = new QFrame(); KPageWidgetItem *item = addPage( page, i18n( "&Properties" ) ); item->setIcon( KIcon( "document-properties" ) ); // get document info const Okular::DocumentInfo info = doc->documentInfo(); QFormLayout *layout = new QFormLayout( page ); // mime name based on mimetype id QString mimeName = info.get( Okular::DocumentInfo::MimeType ).section( '/', -1 ).toUpper(); setCaption( i18n( "%1 Properties", mimeName ) ); int valMaxWidth = 100; /* obtains the properties list, conveniently ordered */ QStringList orderedProperties; orderedProperties << Okular::DocumentInfo::getKeyString( Okular::DocumentInfo::FilePath ) << Okular::DocumentInfo::getKeyString( Okular::DocumentInfo::PagesSize ) << Okular::DocumentInfo::getKeyString( Okular::DocumentInfo::DocumentSize ); for (Okular::DocumentInfo::Key ks = Okular::DocumentInfo::Title; ks <= Okular::DocumentInfo::Keywords; ks = Okular::DocumentInfo::Key( ks+1 ) ) { orderedProperties << Okular::DocumentInfo::getKeyString( ks ); } foreach( const QString &ks, info.keys()) { if ( !orderedProperties.contains( ks ) ) { orderedProperties << ks; } } for ( QStringList::Iterator it = orderedProperties.begin(); it != orderedProperties.end(); ++it ) { const QString key = *it; const QString titleString = info.getKeyTitle( key ); const QString valueString = info.get( key ); if ( titleString.isNull() || valueString.isNull() ) continue; // create labels and layout them QWidget *value = NULL; if ( key == Okular::DocumentInfo::getKeyString( Okular::DocumentInfo::MimeType ) ) { /// for mime type fields, show icon as well value = new QWidget( page ); /// place icon left of mime type's name QHBoxLayout *hboxLayout = new QHBoxLayout( value ); hboxLayout->setMargin( 0 ); /// retrieve icon and place it in a QLabel KMimeType::Ptr mimeType = KMimeType::mimeType( valueString ); KSqueezedTextLabel *squeezed; if (!mimeType.isNull()) { /// retrieve icon and place it in a QLabel QLabel *pixmapLabel = new QLabel( value ); hboxLayout->addWidget( pixmapLabel, 0 ); pixmapLabel->setPixmap( KIconLoader::global()->loadMimeTypeIcon( mimeType->iconName(), KIconLoader::Small ) ); /// mime type's name and label squeezed = new KSqueezedTextLabel( i18nc( "mimetype information, example: \"PDF Document (application/pdf)\"", "%1 (%2)", mimeType->comment(), valueString ), value ); } else { /// only mime type name squeezed = new KSqueezedTextLabel( valueString, value ); } squeezed->setTextInteractionFlags( Qt::TextSelectableByMouse ); hboxLayout->addWidget( squeezed, 1 ); } else { /// default for any other document information KSqueezedTextLabel *label = new KSqueezedTextLabel( valueString, page ); label->setTextInteractionFlags( Qt::TextSelectableByMouse ); value = label; } layout->addRow( new QLabel( i18n( "%1:", titleString ) ), value); // refine maximum width of 'value' labels valMaxWidth = qMax( valMaxWidth, fontMetrics().width( valueString ) ); } // FONTS QVBoxLayout *page2Layout = 0; if ( doc->canProvideFontInformation() ) { // create fonts tab and layout it QFrame *page2 = new QFrame(); m_fontPage = addPage(page2, i18n("&Fonts")); m_fontPage->setIcon( KIcon( "preferences-desktop-font" ) ); page2Layout = new QVBoxLayout(page2); page2Layout->setMargin(marginHint()); page2Layout->setSpacing(spacingHint()); // add a tree view QTreeView *view = new QTreeView(page2); view->setContextMenuPolicy(Qt::CustomContextMenu); connect(view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showFontsMenu(QPoint))); page2Layout->addWidget(view); view->setRootIsDecorated(false); view->setAlternatingRowColors(true); view->setSortingEnabled( true ); // creating a proxy model so we can sort the data QSortFilterProxyModel *proxymodel = new QSortFilterProxyModel(view); proxymodel->setDynamicSortFilter( true ); proxymodel->setSortCaseSensitivity( Qt::CaseInsensitive ); m_fontModel = new FontsListModel(view); proxymodel->setSourceModel(m_fontModel); view->setModel(proxymodel); view->sortByColumn( 0, Qt::AscendingOrder ); m_fontInfo = new QLabel( this ); page2Layout->addWidget( m_fontInfo ); m_fontInfo->setText( i18n( "Reading font information..." ) ); m_fontInfo->hide(); m_fontProgressBar = new QProgressBar( this ); page2Layout->addWidget( m_fontProgressBar ); m_fontProgressBar->setRange( 0, 100 ); m_fontProgressBar->setValue( 0 ); m_fontProgressBar->hide(); } // 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); connect( pageWidget(), SIGNAL(currentPageChanged(KPageWidgetItem*,KPageWidgetItem*)), this, SLOT(pageChanged(KPageWidgetItem*,KPageWidgetItem*)) ); }
DlgCreateToken::DlgCreateToken(const QStringList &_predefinedTokens, QWidget *parent) : QDialog(parent), predefinedTokens(_predefinedTokens) { nameLabel = new QLabel(tr("&Name:")); nameEdit = new QLineEdit(tr("Token")); nameEdit->selectAll(); nameLabel->setBuddy(nameEdit); colorLabel = new QLabel(tr("C&olor:")); colorEdit = new QComboBox; colorEdit->addItem(tr("white"), "w"); colorEdit->addItem(tr("blue"), "u"); colorEdit->addItem(tr("black"), "b"); colorEdit->addItem(tr("red"), "r"); colorEdit->addItem(tr("green"), "g"); colorEdit->addItem(tr("multicolor"), "m"); colorEdit->addItem(tr("colorless"), QString()); colorLabel->setBuddy(colorEdit); ptLabel = new QLabel(tr("&P/T:")); ptEdit = new QLineEdit; ptLabel->setBuddy(ptEdit); annotationLabel = new QLabel(tr("&Annotation:")); annotationEdit = new QLineEdit; annotationLabel->setBuddy(annotationEdit); destroyCheckBox = new QCheckBox(tr("&Destroy token when it leaves the table")); destroyCheckBox->setChecked(true); QGridLayout *grid = new QGridLayout; grid->addWidget(nameLabel, 0, 0); grid->addWidget(nameEdit, 0, 1); grid->addWidget(colorLabel, 1, 0); grid->addWidget(colorEdit, 1, 1); grid->addWidget(ptLabel, 2, 0); grid->addWidget(ptEdit, 2, 1); grid->addWidget(annotationLabel, 3, 0); grid->addWidget(annotationEdit, 3, 1); grid->addWidget(destroyCheckBox, 4, 0, 1, 2); QGroupBox *tokenDataGroupBox = new QGroupBox(tr("Token data")); tokenDataGroupBox->setLayout(grid); cardDatabaseModel = new CardDatabaseModel(db, this); cardDatabaseDisplayModel = new CardDatabaseDisplayModel(this); cardDatabaseDisplayModel->setSourceModel(cardDatabaseModel); cardDatabaseDisplayModel->setIsToken(CardDatabaseDisplayModel::ShowTrue); chooseTokenFromAllRadioButton = new QRadioButton(tr("Show &all tokens")); connect(chooseTokenFromAllRadioButton, SIGNAL(toggled(bool)), this, SLOT(actChooseTokenFromAll(bool))); chooseTokenFromDeckRadioButton = new QRadioButton(tr("Show tokens from this &deck")); connect(chooseTokenFromDeckRadioButton, SIGNAL(toggled(bool)), this, SLOT(actChooseTokenFromDeck(bool))); QTreeView *chooseTokenView = new QTreeView; chooseTokenView->setModel(cardDatabaseDisplayModel); chooseTokenView->setUniformRowHeights(true); chooseTokenView->setRootIsDecorated(false); chooseTokenView->setAlternatingRowColors(true); chooseTokenView->setSortingEnabled(true); chooseTokenView->sortByColumn(0, Qt::AscendingOrder); chooseTokenView->resizeColumnToContents(0); chooseTokenView->header()->setStretchLastSection(false); chooseTokenView->header()->hideSection(1); chooseTokenView->header()->hideSection(2); chooseTokenView->header()->setResizeMode(3, QHeaderView::ResizeToContents); chooseTokenView->header()->setResizeMode(4, QHeaderView::ResizeToContents); connect(chooseTokenView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), this, SLOT(tokenSelectionChanged(QModelIndex, QModelIndex))); if (predefinedTokens.isEmpty()) chooseTokenFromAllRadioButton->setChecked(true); else { chooseTokenFromDeckRadioButton->setChecked(true); cardDatabaseDisplayModel->setCardNameSet(QSet<QString>::fromList(predefinedTokens)); } QVBoxLayout *tokenChooseLayout = new QVBoxLayout; tokenChooseLayout->addWidget(chooseTokenFromAllRadioButton); tokenChooseLayout->addWidget(chooseTokenFromDeckRadioButton); tokenChooseLayout->addWidget(chooseTokenView); QGroupBox *tokenChooseGroupBox = new QGroupBox(tr("Choose token from list")); tokenChooseGroupBox->setLayout(tokenChooseLayout); QVBoxLayout *leftVBox = new QVBoxLayout; leftVBox->addWidget(tokenDataGroupBox); leftVBox->addStretch(); QHBoxLayout *hbox = new QHBoxLayout; hbox->addLayout(leftVBox); hbox->addWidget(tokenChooseGroupBox); QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); connect(buttonBox, SIGNAL(accepted()), this, SLOT(actOk())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(hbox); mainLayout->addWidget(buttonBox); setLayout(mainLayout); setWindowTitle(tr("Create token")); setFixedHeight(sizeHint().height()); setMinimumWidth(300); }