[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