[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/kio/kfile
From: Patrick Spendrin <ps_ml () gmx ! de>
Date: 2009-12-01 0:32:29
Message-ID: 1259627549.080914.23189.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1056847 by sengels:
adding the possibility to use the currentMimeFilter() also with Windows native filedialogs
Review: http://reviewboard.kde.org/r/1730/
M +105 -31 kfiledialog.cpp
--- trunk/KDE/kdelibs/kio/kfile/kfiledialog.cpp #1056846:1056847
@@ -196,6 +196,7 @@
static KUrl s_startDir;
static bool s_allowNative; // as fallback when we can't use native dialog
QString filter;
+ QString selectedFilter;
QStringList mimeTypes;
KUrl::List selectedUrls;
KFile::Modes mode;
@@ -219,6 +220,25 @@
KConfigGroup cfgGroup(KGlobal::config(), ConfigGroup);
return cfgGroup.readEntry("Native", NATIVE_FILEDIALOGS_BY_DEFAULT);
}
+
+ static QString getOpenFileName(const KUrl& startDir, const QString& filter,
+ QWidget *parent, const QString& caption,
+ QString *selectedFilter);
+ static KUrl getOpenUrl(const KUrl& startDir, const QString& filter,
+ QWidget *parent, const QString& caption,
+ QString *selectedFilter);
+ static QStringList getOpenFileNames(const KUrl& startDir, const QString& filter,
+ QWidget *parent, const QString& caption,
+ QString *selectedFilter);
+ static KUrl::List getOpenUrls(const KUrl& startDir, const QString& filter,
+ QWidget *parent, const QString& caption,
+ QString *selectedFilter);
+ static QString getSaveFileName(const KUrl& dir, const QString& filter,
+ QWidget *parent, const QString& caption,
+ KFileDialog::Options options, QString *selectedFilter);
+ static KUrl getSaveUrl(const KUrl& dir, const QString& filter,
+ QWidget *parent, const QString& caption,
+ KFileDialog::Options options, QString *selectedFilter);
~KFileDialogPrivate()
{
@@ -354,6 +374,13 @@
QString KFileDialog::currentMimeFilter() const
{
+ if (d->native) {
+ // adapted from qt2KdeFilter
+ QString filter = d->native->selectedFilter.split(";;").replaceInStrings("/", "\\/")[0];
+ filter = filter.mid(filter.indexOf('(') + 1, filter.indexOf(')') - filter.indexOf('(') - 1);
+ QString mimetype = KMimeType::findByPath("test" + filter.mid(1).split(' ')[0])->name();
+ return mimetype;
+ }
return d->w->currentMimeFilter();
}
@@ -441,12 +468,22 @@
const QString& filter,
QWidget *parent, const QString& caption)
{
+ return KFileDialogPrivate::getOpenFileName(startDir, filter, parent, caption, 0);
+}
+
+QString KFileDialogPrivate::getOpenFileName(const KUrl& startDir,
+ const QString& filter,
+ QWidget *parent,
+ const QString& caption,
+ QString *selectedFilter)
+{
if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
return QFileDialog::getOpenFileName(
parent,
caption.isEmpty() ? i18n("Open") : caption,
KFileDialogPrivate::Native::staticStartDir( startDir ).toLocalFile(),
- qtFilter(filter) );
+ qtFilter(filter),
+ selectedFilter );
// TODO use extra args? QString * selectedFilter = 0, Options options = 0
}
KFileDialog dlg(startDir, filter, parent);
@@ -456,7 +493,7 @@
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
dlg.exec();
-
+ if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
return dlg.selectedFile();
}
@@ -486,12 +523,21 @@
QWidget *parent,
const QString& caption)
{
+ return KFileDialogPrivate::getOpenFileNames(startDir, filter, parent, caption, 0);
+}
+
+QStringList KFileDialogPrivate::getOpenFileNames(const KUrl& startDir,
+ const QString& filter,
+ QWidget *parent,
+ const QString& caption,
+ QString *selectedFilter)
+{
if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
return QFileDialog::getOpenFileNames(
parent,
caption.isEmpty() ? i18n("Open") : caption,
KFileDialogPrivate::Native::staticStartDir( startDir ).toLocalFile(),
- qtFilter( filter ) );
+ qtFilter( filter ), selectedFilter );
// TODO use extra args? QString * selectedFilter = 0, Options options = 0
}
KFileDialogPrivate::Native::s_allowNative = false;
@@ -502,16 +548,22 @@
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
dlg.exec();
-
+ if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
return dlg.selectedFiles();
}
KUrl KFileDialog::getOpenUrl(const KUrl& startDir, const QString& filter,
- QWidget *parent, const QString& caption)
+ QWidget *parent, const QString& caption)
{
+ return KFileDialogPrivate::getOpenUrl(startDir, filter, parent, caption, 0);
+}
+KUrl KFileDialogPrivate::getOpenUrl(const KUrl& startDir, const QString& filter,
+ QWidget *parent, const QString& caption,
+ QString *selectedFilter)
+{
if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
- const QString fileName( KFileDialog::getOpenFileName(
- startDir, filter, parent, caption) );
+ const QString fileName( KFileDialogPrivate::getOpenFileName(
+ startDir, filter, parent, caption, selectedFilter) );
return fileName.isEmpty() ? KUrl() : KUrl::fromPath(fileName);
}
KFileDialogPrivate::Native::s_allowNative = false;
@@ -522,18 +574,27 @@
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
dlg.exec();
-
+ if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
return dlg.selectedUrl();
}
KUrl::List KFileDialog::getOpenUrls(const KUrl& startDir,
- const QString& filter,
- QWidget *parent,
- const QString& caption)
+ const QString& filter,
+ QWidget *parent,
+ const QString& caption)
{
+ return KFileDialogPrivate::getOpenUrls(startDir, filter, parent, caption, 0);
+}
+
+KUrl::List KFileDialogPrivate::getOpenUrls(const KUrl& startDir,
+ const QString& filter,
+ QWidget *parent,
+ const QString& caption,
+ QString *selectedFilter)
+{
if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
- const QStringList fileNames( KFileDialog::getOpenFileNames(
- startDir, filter, parent, caption) );
+ const QStringList fileNames( KFileDialogPrivate::getOpenFileNames(
+ startDir, filter, parent, caption, selectedFilter) );
return KUrl::List(fileNames);
}
KFileDialogPrivate::Native::s_allowNative = false;
@@ -545,7 +606,7 @@
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
dlg.exec();
-
+ if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
return dlg.selectedUrls();
}
@@ -646,13 +707,20 @@
{
//TODO KDE5: replace this method by the method below (with default parameter values in declaration)
// Set no confirm-overwrite mode for backwards compatibility
- return getSaveFileName(dir, filter, parent, caption, Options(0));
+ return KFileDialogPrivate::getSaveFileName(dir, filter, parent, caption, Options(0), 0);
}
QString KFileDialog::getSaveFileName(const KUrl& dir, const QString& filter,
QWidget *parent,
const QString& caption, Options options)
{
+ return KFileDialogPrivate::getSaveFileName(dir, filter, parent, caption, options, 0);
+}
+
+QString KFileDialogPrivate::getSaveFileName(const KUrl& dir, const QString& filter,
+ QWidget *parent, const QString& caption,
+ KFileDialog::Options options, QString *selectedFilter)
+{
if (KFileDialogPrivate::isNative()) {
bool defaultDir = dir.isEmpty();
bool specialDir = !defaultDir && dir.protocol() == "kfiledialog";
@@ -667,14 +735,14 @@
startDir = dir;
}
- QFileDialog::Options opts = (options & ConfirmOverwrite) ? QFileDialog::Options(0) : \
QFileDialog::DontConfirmOverwrite; + QFileDialog::Options opts = (options & \
KFileDialog::ConfirmOverwrite) ? QFileDialog::Options(0) : QFileDialog::DontConfirmOverwrite; const \
QString result = QFileDialog::getSaveFileName( parent,
caption.isEmpty() ? i18n("Save As") : caption,
KFileDialogPrivate::Native::staticStartDir( startDir ).toLocalFile(),
qtFilter(filter),
// TODO use extra args? QString * selectedFilter = 0, Options opts = 0
- 0, opts );
+ selectedFilter, opts );
if (!result.isEmpty()) {
if (!recentDirClass.isEmpty())
KRecentDirs::add(recentDirClass, KUrl::fromPath(result).url());
@@ -687,8 +755,8 @@
dlg.setOperationMode( KFileDialog::Saving );
dlg.setMode( KFile::File | KFile::LocalOnly );
- dlg.setConfirmOverwrite(options & ConfirmOverwrite);
- dlg.setInlinePreviewShown(options & ShowInlinePreview);
+ dlg.setConfirmOverwrite(options & KFileDialog::ConfirmOverwrite);
+ dlg.setInlinePreviewShown(options & KFileDialog::ShowInlinePreview);
dlg.setCaption(caption.isEmpty() ? i18n("Save As") : caption);
dlg.exec();
@@ -742,15 +810,21 @@
{
//TODO KDE5: replace this method by the method below (with default parameter values in declaration)
// Set no confirm-overwrite mode for backwards compatibility
- return getSaveUrl(dir, filter, parent, caption, Options(0));
+ return KFileDialogPrivate::getSaveUrl(dir, filter, parent, caption, Options(0), 0);
}
KUrl KFileDialog::getSaveUrl(const KUrl& dir, const QString& filter,
QWidget *parent, const QString& caption, Options options)
{
+ return KFileDialogPrivate::getSaveUrl(dir, filter, parent, caption, options, 0);
+}
+KUrl KFileDialogPrivate::getSaveUrl(const KUrl& dir, const QString& filter,
+ QWidget *parent, const QString& caption,
+ KFileDialog::Options options, QString *selectedFilter)
+{
if (KFileDialogPrivate::isNative() && (!dir.isValid() || dir.isLocalFile())) {
- const QString fileName( KFileDialog::getSaveFileName(
- dir, filter, parent, caption, options) );
+ const QString fileName( KFileDialogPrivate::getSaveFileName(
+ dir, filter, parent, caption, options, selectedFilter) );
return fileName.isEmpty() ? KUrl() : KUrl::fromPath(fileName);
}
@@ -760,12 +834,12 @@
dlg.setOperationMode( KFileDialog::Saving );
dlg.setMode( KFile::File );
- dlg.setConfirmOverwrite(options & ConfirmOverwrite);
- dlg.setInlinePreviewShown(options & ShowInlinePreview);
+ dlg.setConfirmOverwrite(options & KFileDialog::ConfirmOverwrite);
+ dlg.setInlinePreviewShown(options & KFileDialog::ShowInlinePreview);
dlg.setCaption(caption.isEmpty() ? i18n("Save As") : caption);
dlg.exec();
-
+ if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
KUrl url = dlg.selectedUrl();
if (url.isValid())
KRecentDocument::add( url );
@@ -904,8 +978,8 @@
case KAbstractFileWidget::Opening:
case KAbstractFileWidget::Other:
if (d->native->mode & KFile::File) {
- KUrl url( KFileDialog::getOpenUrl(
- d->native->startDir(), d->native->filter, parentWidget(), windowTitle()) );
+ KUrl url( KFileDialogPrivate::getOpenUrl(
+ d->native->startDir(), d->native->filter, parentWidget(), windowTitle(), \
&d->native->selectedFilter ) ); if (url.isEmpty() || !url.isValid())
return QDialog::Rejected;
d->native->selectedUrls.clear();
@@ -913,8 +987,8 @@
return QDialog::Accepted;
}
else if (d->native->mode & KFile::Files) {
- KUrl::List urls( KFileDialog::getOpenUrls(
- d->native->startDir(), d->native->filter, parentWidget(), windowTitle()) );
+ KUrl::List urls( KFileDialogPrivate::getOpenUrls(
+ d->native->startDir(), d->native->filter, parentWidget(), windowTitle(), \
&d->native->selectedFilter ) ); if (urls.isEmpty())
return QDialog::Rejected;
d->native->selectedUrls = urls;
@@ -932,8 +1006,8 @@
break;
case KAbstractFileWidget::Saving:
if (d->native->mode & KFile::File) {
- KUrl url( KFileDialog::getSaveUrl(
- d->native->startDir(), d->native->filter, parentWidget(), windowTitle()) );
+ KUrl url( KFileDialogPrivate::getSaveUrl(
+ d->native->startDir(), d->native->filter, parentWidget(), windowTitle(), Options(0), \
&d->native->selectedFilter ) ); if (url.isEmpty() || !url.isValid())
return QDialog::Rejected;
d->native->selectedUrls.clear();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic