diff options
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/dialogs/qfiledialog.cpp | 70 | ||||
-rw-r--r-- | src/widgets/dialogs/qfiledialog.h | 4 | ||||
-rw-r--r-- | src/widgets/doc/snippets/code/src_gui_dialogs_qfiledialog.cpp | 11 | ||||
-rw-r--r-- | src/widgets/graphicsview/qgraphicsscenebsptreeindex.cpp | 5 | ||||
-rw-r--r-- | src/widgets/itemviews/qlistview.cpp | 2 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 4 | ||||
-rw-r--r-- | src/widgets/styles/qstylesheetstyle.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qabstractbutton.cpp | 16 | ||||
-rw-r--r-- | src/widgets/widgets/qabstractbutton_p.h | 1 | ||||
-rw-r--r-- | src/widgets/widgets/qbuttongroup.cpp | 21 | ||||
-rw-r--r-- | src/widgets/widgets/qbuttongroup.h | 3 |
11 files changed, 129 insertions, 10 deletions
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 9c4b99253a..62cec34b2b 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -57,6 +57,7 @@ #include <stdlib.h> #include <qsettings.h> #include <qdebug.h> +#include <qmimedatabase.h> #include <qapplication.h> #include <qstylepainter.h> #if !defined(Q_OS_WINCE) @@ -1441,6 +1442,75 @@ void QFileDialog::setFilter(QDir::Filters filters) d->showHiddenAction->setChecked((filters & QDir::Hidden)); } +static QString nameFilterForMime(const QString &mimeType) +{ + QMimeDatabase db; + QMimeType mime(db.mimeTypeForName(mimeType)); + if (mime.isValid()) { + if (mime.isDefault()) { + return QFileDialog::tr("All files (*)"); + } else { + const QString patterns = mime.globPatterns().join(QLatin1Char(' ')); + return mime.comment() + QStringLiteral(" (") + patterns + QLatin1Char(')'); + } + } + return QString(); +} + +/*! + \since 5.2 + + Sets the \a filters used in the file dialog, from a list of MIME types. + + Convenience method for setNameFilters(). + Uses QMimeType to create a name filter from the glob patterns and description + defined in each MIME type. + + Use application/octet-stream for the "All files (*)" filter, since that + is the base MIME type for all files. + + Calling setMimeTypeFilters overrides any previously set name filters, + and changes the return value of nameFilters(). + + \snippet code/src_gui_dialogs_qfiledialog.cpp 13 +*/ +void QFileDialog::setMimeTypeFilters(const QStringList &filters) +{ + Q_D(QFileDialog); + QStringList nameFilters; + foreach (const QString &mimeType, filters) { + const QString text = nameFilterForMime(mimeType); + if (!text.isEmpty()) + nameFilters.append(text); + } + setNameFilters(nameFilters); + d->options->setMimeTypeFilters(filters); +} + +/*! + \since 5.2 + + Returns the MIME type filters that are in operation on this file + dialog. +*/ +QStringList QFileDialog::mimeTypeFilters() const +{ + return d_func()->options->mimeTypeFilters(); +} + +/*! + \since 5.2 + + Sets the current MIME type \a filter. + +*/ +void QFileDialog::selectMimeTypeFilter(const QString &filter) +{ + const QString text = nameFilterForMime(filter); + if (!text.isEmpty()) + selectNameFilter(text); +} + /*! \property QFileDialog::viewMode \brief the way files and directories are displayed in the dialog diff --git a/src/widgets/dialogs/qfiledialog.h b/src/widgets/dialogs/qfiledialog.h index 5413a42ea9..404e16cde1 100644 --- a/src/widgets/dialogs/qfiledialog.h +++ b/src/widgets/dialogs/qfiledialog.h @@ -124,6 +124,10 @@ public: void selectNameFilter(const QString &filter); QString selectedNameFilter() const; + void setMimeTypeFilters(const QStringList &filters); + QStringList mimeTypeFilters() const; + void selectMimeTypeFilter(const QString &filter); + QDir::Filters filter() const; void setFilter(QDir::Filters filters); diff --git a/src/widgets/doc/snippets/code/src_gui_dialogs_qfiledialog.cpp b/src/widgets/doc/snippets/code/src_gui_dialogs_qfiledialog.cpp index a253c09d8b..f0010b6f25 100644 --- a/src/widgets/doc/snippets/code/src_gui_dialogs_qfiledialog.cpp +++ b/src/widgets/doc/snippets/code/src_gui_dialogs_qfiledialog.cpp @@ -129,3 +129,14 @@ QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); //! [12] + +//! [13] +QStringList mimeTypeFilters; +mimeTypeFilters << "image/jpeg" // will show "JPEG image (*.jpeg *.jpg *.jpe) + << "image/png" // will show "PNG image (*.png)" + << "application/octet-stream"; // will show "All files (*)" + +QFileDialog dialog(this); +dialog.setMimeTypeFilters(mimeTypeFilters); +dialog.exec(); +//! [13] diff --git a/src/widgets/graphicsview/qgraphicsscenebsptreeindex.cpp b/src/widgets/graphicsview/qgraphicsscenebsptreeindex.cpp index f70e66f685..7598163f2d 100644 --- a/src/widgets/graphicsview/qgraphicsscenebsptreeindex.cpp +++ b/src/widgets/graphicsview/qgraphicsscenebsptreeindex.cpp @@ -567,10 +567,7 @@ QList<QGraphicsItem *> QGraphicsSceneBspTreeIndex::items(Qt::SortOrder order) co itemList << item; } } - if (order != -1) { - //We sort descending order - d->sortItems(&itemList, order, d->sortCacheEnabled); - } + d->sortItems(&itemList, order, d->sortCacheEnabled); return itemList; } diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index 32c63b9f93..8dbbd16f62 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -1833,7 +1833,7 @@ void QCommonListViewBase::removeHiddenRow(int row) dd->hiddenRows.remove(dd->model->index(row, 0, qq->rootIndex())); } -void QCommonListViewBase::updateHorizontalScrollBar(const QSize &step) +void QCommonListViewBase::updateHorizontalScrollBar(const QSize & /*step*/) { horizontalScrollBar()->setPageStep(viewport()->width()); horizontalScrollBar()->setRange(0, contentsSize.width() - viewport()->width()); diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 54b663274d..e4c2cfcb0c 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -2179,10 +2179,10 @@ QModelIndex QTreeView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifie if (!current.isValid()) { int i = d->below(-1); int c = 0; - while (c < d->header->count() && d->header->isSectionHidden(c)) + while (c < d->header->count() && d->header->isSectionHidden(d->header->logicalIndex(c))) ++c; if (i < d->viewItems.count() && c < d->header->count()) { - return d->modelIndex(i, c); + return d->modelIndex(i, d->header->logicalIndex(c)); } return QModelIndex(); } diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index be89abf2b2..7b4b882e56 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -1096,7 +1096,7 @@ void QRenderRule::fixupBorder(int nativeWidth) bd->borders[i] = nativeWidth; // intentional fall through default: - if (!bd->colors[i].style() != Qt::NoBrush) // auto-acquire 'color' + if (bd->colors[i].style() == Qt::NoBrush) // auto-acquire 'color' bd->colors[i] = color; break; } diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp index 3f9b28a883..be712f0747 100644 --- a/src/widgets/widgets/qabstractbutton.cpp +++ b/src/widgets/widgets/qabstractbutton.cpp @@ -575,6 +575,20 @@ void QAbstractButtonPrivate::emitReleased() #endif } +void QAbstractButtonPrivate::emitToggled(bool checked) +{ + Q_Q(QAbstractButton); + QPointer<QAbstractButton> guard(q); + emit q->toggled(checked); +#ifndef QT_NO_BUTTONGROUP + if (guard && group) { + emit group->buttonToggled(group->id(q), checked); + if (guard && group) + emit group->buttonToggled(q, checked); + } +#endif +} + /*! Constructs an abstract button with a \a parent. */ @@ -758,7 +772,7 @@ void QAbstractButton::setChecked(bool checked) if (guard && checked) d->notifyChecked(); if (guard) - emit toggled(checked); + d->emitToggled(checked); #ifndef QT_NO_ACCESSIBILITY diff --git a/src/widgets/widgets/qabstractbutton_p.h b/src/widgets/widgets/qabstractbutton_p.h index 4585728848..a148e60717 100644 --- a/src/widgets/widgets/qabstractbutton_p.h +++ b/src/widgets/widgets/qabstractbutton_p.h @@ -103,6 +103,7 @@ public: void emitPressed(); void emitReleased(); void emitClicked(); + void emitToggled(bool checked); }; QT_END_NAMESPACE diff --git a/src/widgets/widgets/qbuttongroup.cpp b/src/widgets/widgets/qbuttongroup.cpp index f22910007f..c484b154fd 100644 --- a/src/widgets/widgets/qbuttongroup.cpp +++ b/src/widgets/widgets/qbuttongroup.cpp @@ -174,6 +174,27 @@ */ /*! + \fn void QButtonGroup::buttonToggled(QAbstractButton *button, bool checked) + \since 5.2 + + This signal is emitted when the given \a button is toggled. + \a checked is true if the button is checked, or false if the button is unchecked. + + \sa QAbstractButton::toggled() +*/ + +/*! + \fn void QButtonGroup::buttonToggled(int id, bool checked) + \since 5.2 + + This signal is emitted when a button with the given \a id is toggled. + \a checked is true if the button is checked, or false if the button is unchecked. + + \sa QAbstractButton::toggled() +*/ + + +/*! \fn void QButtonGroup::addButton(QAbstractButton *button, int id = -1); Adds the given \a button to the button group. If \a id is -1, diff --git a/src/widgets/widgets/qbuttongroup.h b/src/widgets/widgets/qbuttongroup.h index 84fe26e0df..06656bf18c 100644 --- a/src/widgets/widgets/qbuttongroup.h +++ b/src/widgets/widgets/qbuttongroup.h @@ -85,7 +85,8 @@ Q_SIGNALS: void buttonPressed(int); void buttonReleased(QAbstractButton *); void buttonReleased(int); - + void buttonToggled(QAbstractButton *, bool); + void buttonToggled(int, bool); private: Q_DISABLE_COPY(QButtonGroup) |