• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KIO

  • kio
  • kfile
kfiledialog.cpp
Go to the documentation of this file.
1// -*- c++ -*-
2/* This file is part of the KDE libraries
3 Copyright (C) 1997, 1998 Richard Moore <rich@kde.org>
4 1998 Stephan Kulow <coolo@kde.org>
5 1998 Daniel Grana <grana@ie.iwi.unibe.ch>
6 1999,2000,2001,2002,2003 Carsten Pfeiffer <pfeiffer@kde.org>
7 2003 Clarence Dang <dang@kde.org>
8 2008 Jarosław Staniek <staniek@kde.org>
9 2009 David Jarvie <djarvie@kde.org>
10
11 This library is free software; you can redistribute it and/or
12 modify it under the terms of the GNU Library General Public
13 License as published by the Free Software Foundation; either
14 version 2 of the License, or (at your option) any later version.
15
16 This library is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 Library General Public License for more details.
20
21 You should have received a copy of the GNU Library General Public License
22 along with this library; see the file COPYING.LIB. If not, write to
23 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 Boston, MA 02110-1301, USA.
25*/
26
27#include "kfiledialog.h"
28
29#include <QtGui/QCheckBox>
30#include <QtGui/QKeyEvent>
31#include <QtGui/QFileDialog>
32#include <QtGui/QApplication>
33#include <QtGui/QDesktopWidget>
34
35#include <kimageio.h>
36#include <klocale.h>
37#include <kpushbutton.h>
38#include <config-kfile.h>
39#include <krecentdocument.h>
40#include <kdebug.h>
41#include <kwindowsystem.h>
42#include "kabstractfilewidget.h"
43#include "kabstractfilemodule.h"
44#include "krecentdirs.h"
45#include "kservice.h"
46
48#if defined(Q_WS_WIN) || defined(Q_WS_MAEMO_5)
49const bool NATIVE_FILEDIALOGS_BY_DEFAULT = true;
50#else
51const bool NATIVE_FILEDIALOGS_BY_DEFAULT = false;
52#endif
53
54static QStringList mime2KdeFilter( const QStringList &mimeTypes, QString *allExtensions = 0 )
55{
56 const KUrl emptyUrl;
57 QStringList kdeFilter;
58 QStringList allExt;
59 foreach( const QString& mimeType, mimeTypes ) {
60 KMimeType::Ptr mime( KMimeType::mimeType(mimeType) );
61 if (mime) {
62 allExt += mime->patterns();
63 kdeFilter.append(mime->patterns().join(QLatin1String(" ")) +
64 QLatin1Char('|') +
65 mime->comment(emptyUrl));
66 }
67 }
68 if (allExtensions) {
69 allExt.sort();
70 *allExtensions = allExt.join(QLatin1String(" "));
71 }
72 return kdeFilter;
73}
77static QString qtFilter(const QStringList& _filters)
78{
79 QString converted;
80 const QStringList filters = _filters;
81
82 foreach (const QString& current, filters) {
83 QString new_f; //filter part
84 QString new_name; //filter name part
85 int p = current.indexOf('|');
86 if (p==-1) {
87 new_f = current;
88 new_name = current; // nothing better found
89 }
90 else {
91 new_f = current.left(p);
92 new_name = current.mid(p+1);
93 }
94 //Qt filters assume anything in () is the file extension list
95 new_name = new_name.replace('(', '[').replace(')',']').trimmed();
96
97 //convert everything to lower case and remove dupes (doesn't matter on win32)
98 QStringList allfiltersUnique;
99 const QStringList origList( new_f.split(' ', QString::SkipEmptyParts) );
100 foreach (const QString& origFilter, origList) {
101 if (!allfiltersUnique.contains(origFilter, Qt::CaseInsensitive))
102 allfiltersUnique += origFilter.toLower();
103 }
104
105 if (!converted.isEmpty())
106 converted += ";;";
107
108 converted += (new_name + " (" + allfiltersUnique.join(" ") + QLatin1Char(')'));
109 }
110
111 // Strip escape characters from escaped '/' characters.
112 converted.replace("\\/","/");
113
114 return converted;
115}
116
120static QString qtFilter(const QString& filter)
121{
122 // Qt format: "some text (*.first *.second)" or "All files (*)" separated by ;;
123 // KDE format: "*.first *.second|Description" or "*|Description", separated by \n (Description is optional)
124 QStringList filters;
125 if (filter.isEmpty())
126 filters += i18n("*|All files");
127 else {
128 // check if it's a mimefilter
129 int pos = filter.indexOf('/');
130 if (pos > 0 && filter[pos - 1] != '\\')
131 filters = mime2KdeFilter(filter.split(QLatin1Char(' '), QString::SkipEmptyParts));
132 else
133 filters = filter.split('\n', QString::SkipEmptyParts);
134 }
135 return qtFilter(filters);
136}
137
138static KAbstractFileModule* s_module = 0;
139static KAbstractFileModule* loadFileModule( const QString& moduleName )
140{
141 KService::Ptr fileModuleService = KService::serviceByDesktopName(moduleName);
142 if(fileModuleService)
143 return fileModuleService->createInstance<KAbstractFileModule>();
144 else
145 return 0;
146}
147
148static const char s_defaultFileModuleName[] = "kfilemodule";
149static KAbstractFileModule* fileModule()
150{
151 if(!s_module) {
152 QString moduleName = KConfig("kdeglobals").group(ConfigGroup).readEntry("file module", s_defaultFileModuleName);
153 if(!(s_module = loadFileModule(moduleName))) {
154 kDebug() << "Failed to load configured file module" << moduleName;
155 if(moduleName != s_defaultFileModuleName) {
156 kDebug() << "Falling back to default file module.";
157 s_module = loadFileModule(s_defaultFileModuleName);
158 }
159 }
160 }
161 return s_module;
162}
163
164class KFileDialogPrivate
165{
166public:
168 class Native {
169 public:
170 Native()
171 : mode(KFile::File),
172 operationMode(KAbstractFileWidget::Opening)
173 {
174 }
177 KUrl startDir() const
178 {
179 if (!s_startDir.isEmpty())
180 return s_startDir;
181 if (!selectedUrls.isEmpty())
182 return selectedUrls.first();
183 return KUrl();
184 }
187 static KUrl staticStartDir( const KUrl& defaultDir )
188 {
189 if ( s_startDir.isEmpty() )
190 return defaultDir;
191 return s_startDir;
192 }
193 static KUrl s_startDir;
194 static bool s_allowNative; // as fallback when we can't use native dialog
195 QString filter;
196 QString selectedFilter;
197 QStringList mimeTypes;
198 KUrl::List selectedUrls;
199 KFile::Modes mode;
200 KAbstractFileWidget::OperationMode operationMode;
201 };
202
203 KFileDialogPrivate()
204 : native(0),
205 w(0),
206 cfgGroup(KGlobal::config(), ConfigGroup)
207 {
208 if (cfgGroup.readEntry("Native", NATIVE_FILEDIALOGS_BY_DEFAULT) &&
209 KFileDialogPrivate::Native::s_allowNative)
210 native = new Native;
211 }
212
213 static bool isNative()
214 {
215 if(!KFileDialogPrivate::Native::s_allowNative)
216 return false;
217 KConfigGroup cfgGroup(KGlobal::config(), ConfigGroup);
218 return cfgGroup.readEntry("Native", NATIVE_FILEDIALOGS_BY_DEFAULT);
219 }
220
221 static QString getOpenFileName(const KUrl& startDir, const QString& filter,
222 QWidget *parent, const QString& caption,
223 QString *selectedFilter);
224 static KUrl getOpenUrl(const KUrl& startDir, const QString& filter,
225 QWidget *parent, const QString& caption,
226 QString *selectedFilter);
227 static QStringList getOpenFileNames(const KUrl& startDir, const QString& filter,
228 QWidget *parent, const QString& caption,
229 QString *selectedFilter);
230 static KUrl::List getOpenUrls(const KUrl& startDir, const QString& filter,
231 QWidget *parent, const QString& caption,
232 QString *selectedFilter);
233 static QString getSaveFileName(const KUrl& dir, const QString& filter,
234 QWidget *parent, const QString& caption,
235 KFileDialog::Options options, QString *selectedFilter);
236 static KUrl getSaveUrl(const KUrl& dir, const QString& filter,
237 QWidget *parent, const QString& caption,
238 KFileDialog::Options options, QString *selectedFilter);
239
240 ~KFileDialogPrivate()
241 {
242 delete native;
243 }
244
245 Native* native;
246 KAbstractFileWidget* w;
247 KConfigGroup cfgGroup;
248};
249
250KUrl KFileDialogPrivate::Native::s_startDir;
251bool KFileDialogPrivate::Native::s_allowNative = true;
252
253KFileDialog::KFileDialog( const KUrl& startDir, const QString& filter,
254 QWidget *parent, QWidget* customWidget)
255#ifdef Q_WS_WIN
256 : KDialog( parent , Qt::WindowMinMaxButtonsHint),
257#else
258 : KDialog( parent ),
259#endif
260 d( new KFileDialogPrivate )
261
262{
263 // It would be nice to have this behind d->native but it doesn't work
264 // because of derived classes like KEncodingDialog...
265 // Dlopen the file widget from libkfilemodule
266 QWidget* fileQWidget = fileModule()->createFileWidget(startDir, this);
267 d->w = ::qobject_cast<KAbstractFileWidget *>(fileQWidget);
268
269 if (d->native) {
270 KFileDialogPrivate::Native::s_startDir = startDir;
271 // check if it's a mimefilter
272 int pos = filter.indexOf('/');
273 if (pos > 0 && filter[pos - 1] != '\\')
274 setMimeFilter(filter.split(QLatin1Char(' '), QString::SkipEmptyParts));
275 else
276 setFilter(filter);
277 return;
278 }
279
280 setButtons( KDialog::None );
281 restoreDialogSize(d->cfgGroup); // call this before the fileQWidget is set as the main widget.
282 // otherwise the sizes for the components are not obeyed (ereslibre)
283
284 d->w->setFilter(filter);
285 setMainWidget(fileQWidget);
286
287 d->w->okButton()->show();
288 connect(d->w->okButton(), SIGNAL(clicked()), SLOT(slotOk()));
289 d->w->cancelButton()->show();
290 connect(d->w->cancelButton(), SIGNAL(clicked()), SLOT(slotCancel()));
291
292 // Publish signals
293 // TODO: Move the relevant signal declarations from KFileWidget to the
294 // KAbstractFileWidget interface?
295 // Else, all of these connects (including "accepted") are not typesafe.
296 // Answer: you cannot define signals in a non-qobject base class (DF).
297 // I simply documentde them in kabstractfilewidget.h now.
298 kDebug (kfile_area) << "KFileDialog connecting signals";
299 connect(fileQWidget, SIGNAL(fileSelected(KUrl)),
300 SIGNAL(fileSelected(KUrl)));
301 connect(fileQWidget, SIGNAL(fileHighlighted(KUrl)),
302 SIGNAL(fileHighlighted(KUrl)));
303 connect(fileQWidget, SIGNAL(fileSelected(QString)),
304 SIGNAL(fileSelected(QString)));
305 connect(fileQWidget, SIGNAL(fileHighlighted(QString)),
306 SIGNAL(fileHighlighted(QString)));
307 connect(fileQWidget, SIGNAL(selectionChanged()),
308 SIGNAL(selectionChanged()));
309 connect(fileQWidget, SIGNAL(filterChanged(QString)),
310 SIGNAL(filterChanged(QString)));
311
312 connect(fileQWidget, SIGNAL(accepted()), SLOT(accept()));
313 //connect(fileQWidget, SIGNAL(canceled()), SLOT(slotCancel()));
314
315 if (customWidget)
316 d->w->setCustomWidget(QString(), customWidget);
317}
318
319
320KFileDialog::~KFileDialog()
321{
322 delete d;
323}
324
325void KFileDialog::setLocationLabel(const QString& text)
326{
327 if (d->native)
328 return; // not available
329 d->w->setLocationLabel(text);
330}
331
332void KFileDialog::setFilter(const QString& filter)
333{
334 if (d->native) {
335 d->native->filter = filter;
336 return;
337 }
338 d->w->setFilter(filter);
339}
340
341QString KFileDialog::currentFilter() const
342{
343 if (d->native)
344 return QString(); // not available
345 return d->w->currentFilter();
346}
347
348void KFileDialog::setMimeFilter( const QStringList& mimeTypes,
349 const QString& defaultType )
350{
351 d->w->setMimeFilter(mimeTypes, defaultType);
352
353 if (d->native) {
354 QString allExtensions;
355 QStringList filters = mime2KdeFilter(mimeTypes, &allExtensions);
356 if (defaultType.isEmpty() && (mimeTypes.count() > 1)) {
357 filters.prepend(allExtensions + QLatin1Char('|') + i18n("All Supported Files"));
358 }
359 d->native->filter = filters.join(QLatin1String("\n"));
360 }
361}
362
363void KFileDialog::clearFilter()
364{
365 if (d->native) {
366 d->native->filter.clear();
367 return;
368 }
369 d->w->clearFilter();
370}
371
372QString KFileDialog::currentMimeFilter() const
373{
374 if (d->native) {
375 // adapted from qt2KdeFilter
376 QString filter = d->native->selectedFilter.split(";;").replaceInStrings("/", "\\/")[0];
377 filter = filter.mid(filter.indexOf('(') + 1, filter.indexOf(')') - filter.indexOf('(') - 1);
378 QString mimetype = KMimeType::findByPath("test" + filter.mid(1).split(' ')[0])->name();
379 return mimetype;
380 }
381 return d->w->currentMimeFilter();
382}
383
384KMimeType::Ptr KFileDialog::currentFilterMimeType()
385{
386 return KMimeType::mimeType( currentMimeFilter() );
387}
388
389void KFileDialog::setPreviewWidget(KPreviewWidgetBase *w)
390{
391 if (d->native)
392 return;
393 d->w->setPreviewWidget(w);
394}
395
396void KFileDialog::setInlinePreviewShown(bool show)
397{
398 if (d->native) {
399 return;
400 }
401 d->w->setInlinePreviewShown(show);
402}
403
404// This is only used for the initial size when no configuration has been saved
405QSize KFileDialog::sizeHint() const
406{
407 int fontSize = fontMetrics().height();
408 QSize goodSize(48 * fontSize, 30 * fontSize);
409 QSize screenSize = QApplication::desktop()->availableGeometry(this).size();
410 QSize minSize(screenSize / 2);
411 QSize maxSize(screenSize * qreal(0.9));
412 return (goodSize.expandedTo(minSize).boundedTo(maxSize));
413}
414
415// This slot still exists mostly for compat purposes; for subclasses which reimplement slotOk
416void KFileDialog::slotOk()
417{
418 if (d->native)
419 return;
420 d->w->slotOk();
421}
422
423// This slot still exists mostly for compat purposes; for subclasses which reimplement accept
424void KFileDialog::accept()
425{
426 if (d->native)
427 return;
428 setResult( QDialog::Accepted ); // keep old behavior; probably not needed though
429 d->w->accept();
430 KConfigGroup cfgGroup(KGlobal::config(), ConfigGroup);
431 KDialog::accept();
432 emit okClicked();
433}
434
435// This slot still exists mostly for compat purposes; for subclasses which reimplement slotCancel
436void KFileDialog::slotCancel()
437{
438 if (d->native)
439 return;
440 d->w->slotCancel();
441 reject();
442}
443
444void KFileDialog::setUrl(const KUrl& url, bool clearforward)
445{
446 if (d->native) {
447 d->native->selectedUrls.clear();
448 d->native->selectedUrls.append(url);
449 return;
450 }
451 d->w->setUrl(url, clearforward);
452}
453
454void KFileDialog::setSelection(const QString& name)
455{
456 if (d->native) {
457 d->native->selectedUrls.clear();
458 d->native->selectedUrls.append( KUrl(name) );
459 return;
460 }
461 d->w->setSelection(name);
462}
463
464QString KFileDialog::getOpenFileName(const KUrl& startDir,
465 const QString& filter,
466 QWidget *parent, const QString& caption)
467{
468 return KFileDialogPrivate::getOpenFileName(startDir, filter, parent, caption, 0);
469}
470
471QString KFileDialogPrivate::getOpenFileName(const KUrl& startDir,
472 const QString& filter,
473 QWidget *parent,
474 const QString& caption,
475 QString *selectedFilter)
476{
477 if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
478 return QFileDialog::getOpenFileName(
479 parent,
480 caption.isEmpty() ? i18n("Open") : caption,
481 KFileDialogPrivate::Native::staticStartDir( startDir ).toLocalFile(),
482 qtFilter(filter),
483 selectedFilter );
484// TODO use extra args? QString * selectedFilter = 0, Options options = 0
485 }
486 KFileDialog dlg(startDir, filter, parent);
487
488 dlg.setOperationMode( KFileDialog::Opening );
489 dlg.setMode( KFile::File | KFile::LocalOnly | KFile::ExistingOnly );
490 dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
491
492 dlg.exec();
493 if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
494 return dlg.selectedFile();
495}
496
497QString KFileDialog::getOpenFileNameWId(const KUrl& startDir,
498 const QString& filter,
499 WId parent_id, const QString& caption)
500{
501 if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile()))
502 return KFileDialog::getOpenFileName(startDir, filter, 0, caption); // everything we can do...
503 QWidget* parent = QWidget::find( parent_id );
504 KFileDialogPrivate::Native::s_allowNative = false;
505 KFileDialog dlg(startDir, filter, parent);
506 if( parent == NULL && parent_id != 0 )
507 KWindowSystem::setMainWindow( &dlg, parent_id );
508
509 dlg.setOperationMode( KFileDialog::Opening );
510 dlg.setMode( KFile::File | KFile::LocalOnly | KFile::ExistingOnly );
511 dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
512
513 dlg.exec();
514
515 return dlg.selectedFile();
516}
517
518QStringList KFileDialog::getOpenFileNames(const KUrl& startDir,
519 const QString& filter,
520 QWidget *parent,
521 const QString& caption)
522{
523 return KFileDialogPrivate::getOpenFileNames(startDir, filter, parent, caption, 0);
524}
525
526QStringList KFileDialogPrivate::getOpenFileNames(const KUrl& startDir,
527 const QString& filter,
528 QWidget *parent,
529 const QString& caption,
530 QString *selectedFilter)
531{
532 if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
533 return QFileDialog::getOpenFileNames(
534 parent,
535 caption.isEmpty() ? i18n("Open") : caption,
536 KFileDialogPrivate::Native::staticStartDir( startDir ).toLocalFile(),
537 qtFilter( filter ), selectedFilter );
538// TODO use extra args? QString * selectedFilter = 0, Options options = 0
539 }
540 KFileDialogPrivate::Native::s_allowNative = false;
541 KFileDialog dlg(startDir, filter, parent);
542
543 dlg.setOperationMode( KFileDialog::Opening );
544 dlg.setMode(KFile::Files | KFile::LocalOnly | KFile::ExistingOnly);
545 dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
546
547 dlg.exec();
548 if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
549 return dlg.selectedFiles();
550}
551
552KUrl KFileDialog::getOpenUrl(const KUrl& startDir, const QString& filter,
553 QWidget *parent, const QString& caption)
554{
555 return KFileDialogPrivate::getOpenUrl(startDir, filter, parent, caption, 0);
556}
557KUrl KFileDialogPrivate::getOpenUrl(const KUrl& startDir, const QString& filter,
558 QWidget *parent, const QString& caption,
559 QString *selectedFilter)
560{
561 if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
562 const QString fileName( KFileDialogPrivate::getOpenFileName(
563 startDir, filter, parent, caption, selectedFilter) );
564 return fileName.isEmpty() ? KUrl() : KUrl::fromPath(fileName);
565 }
566 KFileDialogPrivate::Native::s_allowNative = false;
567 KFileDialog dlg(startDir, filter, parent);
568
569 dlg.setOperationMode( KFileDialog::Opening );
570 dlg.setMode( KFile::File | KFile::ExistingOnly );
571 dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
572
573 dlg.exec();
574 if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
575 return dlg.selectedUrl();
576}
577
578KUrl::List KFileDialog::getOpenUrls(const KUrl& startDir,
579 const QString& filter,
580 QWidget *parent,
581 const QString& caption)
582{
583 return KFileDialogPrivate::getOpenUrls(startDir, filter, parent, caption, 0);
584}
585
586KUrl::List KFileDialogPrivate::getOpenUrls(const KUrl& startDir,
587 const QString& filter,
588 QWidget *parent,
589 const QString& caption,
590 QString *selectedFilter)
591{
592 if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
593 const QStringList fileNames( KFileDialogPrivate::getOpenFileNames(
594 startDir, filter, parent, caption, selectedFilter) );
595 return KUrl::List(fileNames);
596 }
597 KFileDialogPrivate::Native::s_allowNative = false;
598
599 KFileDialog dlg(startDir, filter, parent);
600
601 dlg.setOperationMode( KFileDialog::Opening );
602 dlg.setMode( KFile::Files | KFile::ExistingOnly );
603 dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
604
605 dlg.exec();
606 if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
607 return dlg.selectedUrls();
608}
609
610void KFileDialog::setConfirmOverwrite(bool enable)
611{
612 if (operationMode() == KFileDialog::Saving) {
613 d->w->setConfirmOverwrite(enable);
614 }
615}
616
617KUrl KFileDialog::getExistingDirectoryUrl(const KUrl& startDir,
618 QWidget *parent,
619 const QString& caption)
620{
621 if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
622 QString result( QFileDialog::getExistingDirectory(parent, caption,
623 KFileDialogPrivate::Native::staticStartDir( startDir ).toLocalFile(),
624 QFileDialog::ShowDirsOnly) );
625 return result.isEmpty() ? KUrl() : KUrl::fromPath(result);
626 }
627 return fileModule()->selectDirectory(startDir, false, parent, caption);
628}
629
630QString KFileDialog::getExistingDirectory(const KUrl& startDir,
631 QWidget *parent,
632 const QString& caption)
633{
634 if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) {
635 return QFileDialog::getExistingDirectory(parent, caption,
636 KFileDialogPrivate::Native::staticStartDir( startDir ).toLocalFile(),
637 QFileDialog::ShowDirsOnly);
638 }
639 KUrl url = fileModule()->selectDirectory(startDir, true, parent, caption);
640 if ( url.isValid() )
641 return url.toLocalFile();
642 return QString();
643}
644
645KUrl KFileDialog::getImageOpenUrl( const KUrl& startDir, QWidget *parent,
646 const QString& caption)
647{
648 if (KFileDialogPrivate::isNative() && (!startDir.isValid() || startDir.isLocalFile())) { // everything we can do...
649 const QStringList mimetypes( KImageIO::mimeTypes( KImageIO::Reading ) );
650 return KFileDialog::getOpenUrl(startDir, mimetypes.join(" "), parent, caption);
651 }
652 const QStringList mimetypes = KImageIO::mimeTypes( KImageIO::Reading );
653 KFileDialogPrivate::Native::s_allowNative = false;
654 KFileDialog dlg(startDir, mimetypes.join(" "), parent);
655
656 dlg.setOperationMode( KFileDialog::Opening );
657 dlg.setMode( KFile::File | KFile::ExistingOnly );
658 dlg.setCaption( caption.isEmpty() ? i18n("Open") : caption );
659 dlg.setInlinePreviewShown( true );
660
661 dlg.exec();
662
663 return dlg.selectedUrl();
664}
665
666KUrl KFileDialog::selectedUrl() const
667{
668 if (d->native)
669 return d->native->selectedUrls.isEmpty() ? KUrl() : d->native->selectedUrls.first();
670 return d->w->selectedUrl();
671}
672
673KUrl::List KFileDialog::selectedUrls() const
674{
675 if (d->native)
676 return d->native->selectedUrls;
677 return d->w->selectedUrls();
678}
679
680QString KFileDialog::selectedFile() const
681{
682 if (d->native)
683 return selectedUrl().toLocalFile();
684 return d->w->selectedFile();
685}
686
687QStringList KFileDialog::selectedFiles() const
688{
689 if (d->native)
690 return selectedUrls().toStringList();
691 return d->w->selectedFiles();
692}
693
694KUrl KFileDialog::baseUrl() const
695{
696 if (d->native)
697 return selectedUrl().isEmpty() ? KUrl() : KUrl::fromPath(selectedUrl().path());
698 return d->w->baseUrl();
699}
700
701QString KFileDialog::getSaveFileName(const KUrl& dir, const QString& filter,
702 QWidget *parent,
703 const QString& caption)
704{
705 //TODO KDE5: replace this method by the method below (with default parameter values in declaration)
706 // Set no confirm-overwrite mode for backwards compatibility
707 return KFileDialogPrivate::getSaveFileName(dir, filter, parent, caption, Options(0), 0);
708}
709
710QString KFileDialog::getSaveFileName(const KUrl& dir, const QString& filter,
711 QWidget *parent,
712 const QString& caption, Options options)
713{
714 return KFileDialogPrivate::getSaveFileName(dir, filter, parent, caption, options, 0);
715}
716
717QString KFileDialogPrivate::getSaveFileName(const KUrl& dir, const QString& filter,
718 QWidget *parent, const QString& caption,
719 KFileDialog::Options options, QString *selectedFilter)
720{
721 if (KFileDialogPrivate::isNative()) {
722 bool defaultDir = dir.isEmpty();
723 bool specialDir = !defaultDir && dir.protocol() == "kfiledialog";
724 KUrl startDir;
725 QString recentDirClass;
726 if (specialDir) {
727 startDir = KFileDialog::getStartUrl(dir, recentDirClass);
728 }
729 else if ( !specialDir && !defaultDir ) {
730 if (!dir.isLocalFile())
731 kWarning() << "non-local start dir " << dir;
732 startDir = dir;
733 }
734
735 QFileDialog::Options opts = (options & KFileDialog::ConfirmOverwrite) ? QFileDialog::Options(0) : QFileDialog::DontConfirmOverwrite;
736 const QString result = QFileDialog::getSaveFileName(
737 parent,
738 caption.isEmpty() ? i18n("Save As") : caption,
739 KFileDialogPrivate::Native::staticStartDir( startDir ).toLocalFile(),
740 qtFilter(filter),
741// TODO use extra args? QString * selectedFilter = 0, Options opts = 0
742 selectedFilter, opts );
743 if (!result.isEmpty()) {
744 if (!recentDirClass.isEmpty())
745 KRecentDirs::add(recentDirClass, KUrl::fromPath(result).url());
746 KRecentDocument::add(result);
747 }
748 return result;
749 }
750
751 KFileDialog dlg(dir, filter, parent);
752
753 dlg.setOperationMode( KFileDialog::Saving );
754 dlg.setMode( KFile::File | KFile::LocalOnly );
755 dlg.setConfirmOverwrite(options & KFileDialog::ConfirmOverwrite);
756 dlg.setInlinePreviewShown(options & KFileDialog::ShowInlinePreview);
757 dlg.setCaption(caption.isEmpty() ? i18n("Save As") : caption);
758
759 dlg.exec();
760
761 QString filename = dlg.selectedFile();
762 if (!filename.isEmpty())
763 KRecentDocument::add(filename);
764
765 return filename;
766}
767
768QString KFileDialog::getSaveFileNameWId(const KUrl& dir, const QString& filter,
769 WId parent_id,
770 const QString& caption)
771{
772 //TODO KDE5: replace this method by the method below (with default parameter values in declaration)
773 // Set no confirm-overwrite mode for backwards compatibility
774 return getSaveFileNameWId(dir, filter, parent_id, caption, Options(0));
775}
776
777QString KFileDialog::getSaveFileNameWId(const KUrl& dir, const QString& filter,
778 WId parent_id,
779 const QString& caption, Options options)
780{
781 if (KFileDialogPrivate::isNative()) {
782 return KFileDialog::getSaveFileName(dir, filter, 0, caption, options); // everything we can do...
783 }
784
785 QWidget* parent = QWidget::find( parent_id );
786 KFileDialog dlg(dir, filter, parent);
787 if( parent == NULL && parent_id != 0 )
788 KWindowSystem::setMainWindow( &dlg, parent_id);
789
790 dlg.setOperationMode( KFileDialog::Saving );
791 dlg.setMode( KFile::File | KFile::LocalOnly );
792 dlg.setConfirmOverwrite(options & ConfirmOverwrite);
793 dlg.setInlinePreviewShown(options & ShowInlinePreview);
794 dlg.setCaption(caption.isEmpty() ? i18n("Save As") : caption);
795
796 dlg.exec();
797
798 QString filename = dlg.selectedFile();
799 if (!filename.isEmpty())
800 KRecentDocument::add(filename);
801
802 return filename;
803}
804
805KUrl KFileDialog::getSaveUrl(const KUrl& dir, const QString& filter,
806 QWidget *parent, const QString& caption)
807{
808 //TODO KDE5: replace this method by the method below (with default parameter values in declaration)
809 // Set no confirm-overwrite mode for backwards compatibility
810 return KFileDialogPrivate::getSaveUrl(dir, filter, parent, caption, Options(0), 0);
811}
812
813KUrl KFileDialog::getSaveUrl(const KUrl& dir, const QString& filter,
814 QWidget *parent, const QString& caption, Options options)
815{
816 return KFileDialogPrivate::getSaveUrl(dir, filter, parent, caption, options, 0);
817}
818KUrl KFileDialogPrivate::getSaveUrl(const KUrl& dir, const QString& filter,
819 QWidget *parent, const QString& caption,
820 KFileDialog::Options options, QString *selectedFilter)
821{
822 if (KFileDialogPrivate::isNative() && (!dir.isValid() || dir.isLocalFile())) {
823 const QString fileName( KFileDialogPrivate::getSaveFileName(
824 dir, filter, parent, caption, options, selectedFilter) );
825 return fileName.isEmpty() ? KUrl() : KUrl::fromPath(fileName);
826 }
827
828 KFileDialogPrivate::Native::s_allowNative = false;
829
830 KFileDialog dlg(dir, filter, parent);
831
832 dlg.setOperationMode( KFileDialog::Saving );
833 dlg.setMode( KFile::File );
834 dlg.setConfirmOverwrite(options & KFileDialog::ConfirmOverwrite);
835 dlg.setInlinePreviewShown(options & KFileDialog::ShowInlinePreview);
836 dlg.setCaption(caption.isEmpty() ? i18n("Save As") : caption);
837
838 dlg.exec();
839 if(selectedFilter) *selectedFilter = dlg.currentMimeFilter();
840 KUrl url = dlg.selectedUrl();
841 if (url.isValid())
842 KRecentDocument::add( url );
843
844 return url;
845}
846
847void KFileDialog::setMode( KFile::Modes m )
848{
849 if (d->native)
850 d->native->mode = m;
851 else
852 d->w->setMode(m);
853}
854
855KFile::Modes KFileDialog::mode() const
856{
857 if (d->native)
858 return d->native->mode;
859 return d->w->mode();
860}
861
862KPushButton * KFileDialog::okButton() const
863{
864 return d->w->okButton();
865}
866
867KPushButton * KFileDialog::cancelButton() const
868{
869 return d->w->cancelButton();
870}
871
872KUrlComboBox* KFileDialog::locationEdit() const
873{
874 return d->w->locationEdit();
875}
876
877KFileFilterCombo* KFileDialog::filterWidget() const
878{
879 return d->w->filterWidget();
880}
881
882KActionCollection * KFileDialog::actionCollection() const
883{
884 return d->w->actionCollection();
885}
886
887void KFileDialog::setKeepLocation( bool keep )
888{
889 if (d->native)
890 return;
891 d->w->setKeepLocation(keep);
892}
893
894bool KFileDialog::keepsLocation() const
895{
896 if (d->native)
897 return false;
898 return d->w->keepsLocation();
899}
900
901void KFileDialog::setOperationMode( OperationMode mode )
902{
903 if (d->native)
904 d->native->operationMode = static_cast<KAbstractFileWidget::OperationMode>(mode);
905 else
906 d->w->setOperationMode(static_cast<KAbstractFileWidget::OperationMode>(mode));
907}
908
909KFileDialog::OperationMode KFileDialog::operationMode() const
910{
911 if (d->native)
912 return static_cast<KFileDialog::OperationMode>(d->native->operationMode);
913 return static_cast<KFileDialog::OperationMode>(d->w->operationMode());
914}
915
916void KFileDialog::keyPressEvent( QKeyEvent *e )
917{
918 if (d->native)
919 return;
920
921 if ( e->key() == Qt::Key_Escape )
922 {
923 e->accept();
924 d->w->cancelButton()->animateClick();
925 }
926 else
927 KDialog::keyPressEvent( e );
928}
929
930void KFileDialog::hideEvent( QHideEvent *e )
931{
932 if (d->native)
933 return;
934
935 saveDialogSize(d->cfgGroup, KConfigBase::Persistent);
936
937 KDialog::hideEvent( e );
938}
939
940// static
941KUrl KFileDialog::getStartUrl( const KUrl& startDir,
942 QString& recentDirClass )
943{
944 return fileModule()->getStartUrl(startDir, recentDirClass);
945}
946
947void KFileDialog::setStartDir( const KUrl& directory )
948{
949 if (KFileDialogPrivate::isNative())
950 KFileDialogPrivate::Native::s_startDir = directory;
951 fileModule()->setStartDir(directory);
952}
953
954KToolBar * KFileDialog::toolBar() const
955{
956 return d->w->toolBar();
957}
958
959KAbstractFileWidget* KFileDialog::fileWidget()
960{
961 return d->w;
962}
963
964#ifdef Q_WS_WIN
965int KFileDialog::exec()
966{
967 if (!d->native || !KFileDialogPrivate::Native::s_allowNative) {
968 KFileDialogPrivate::Native::s_allowNative = true;
969 return KDialog::exec();
970 }
971
972// not clear here to let KFileDialogPrivate::Native::startDir() return a useful value
973// d->native->selectedUrls.clear();
974 int res = QDialog::Rejected;
975 switch (d->native->operationMode) {
976 case KAbstractFileWidget::Opening:
977 case KAbstractFileWidget::Other:
978 if (d->native->mode & KFile::File) {
979 KUrl url( KFileDialogPrivate::getOpenUrl(
980 d->native->startDir(), d->native->filter, parentWidget(), windowTitle(), &d->native->selectedFilter ) );
981 if (url.isEmpty() || !url.isValid()) {
982 res = QDialog::Rejected;
983 break;
984 }
985 d->native->selectedUrls.clear();
986 d->native->selectedUrls.append(url);
987 res = QDialog::Accepted;
988 break;
989 }
990 else if (d->native->mode & KFile::Files) {
991 KUrl::List urls( KFileDialogPrivate::getOpenUrls(
992 d->native->startDir(), d->native->filter, parentWidget(), windowTitle(), &d->native->selectedFilter ) );
993 if (urls.isEmpty()) {
994 res = QDialog::Rejected;
995 break;
996 }
997 d->native->selectedUrls = urls;
998 res = QDialog::Accepted;
999 break;
1000 }
1001 else if (d->native->mode & KFile::Directory) {
1002 KUrl url( KFileDialog::getExistingDirectoryUrl(
1003 d->native->startDir(), parentWidget(), windowTitle()) );
1004 if (url.isEmpty() || !url.isValid()) {
1005 res = QDialog::Rejected;
1006 break;
1007 }
1008 d->native->selectedUrls.clear();
1009 d->native->selectedUrls.append(url);
1010 res = QDialog::Accepted;
1011 break;
1012 }
1013 break;
1014 case KAbstractFileWidget::Saving:
1015 if (d->native->mode & KFile::File) {
1016 KUrl url( KFileDialogPrivate::getSaveUrl(
1017 d->native->startDir(), d->native->filter, parentWidget(), windowTitle(), Options(0), &d->native->selectedFilter ) );
1018 if (url.isEmpty() || !url.isValid()) {
1019 res = QDialog::Rejected;
1020 break;
1021 }
1022 d->native->selectedUrls.clear();
1023 d->native->selectedUrls.append(url);
1024 res = QDialog::Accepted;
1025 break;
1026 }
1027 else if (d->native->mode & KFile::Directory) {
1028 KUrl url( KFileDialog::getExistingDirectoryUrl(
1029 d->native->startDir(), parentWidget(), windowTitle()) );
1030 if (url.isEmpty() || !url.isValid()) {
1031 res = QDialog::Rejected;
1032 break;
1033 }
1034 d->native->selectedUrls.clear();
1035 d->native->selectedUrls.append(url);
1036 res = QDialog::Accepted;
1037 break;
1038 }
1039 break;
1040 default:;
1041 }
1042
1043 setResult(res);
1044 emit finished();
1045
1046 if (res == QDialog::Accepted) {
1047 emit accepted();
1048 } else {
1049 emit rejected();
1050 }
1051
1052 return res;
1053}
1054#endif // Q_WS_WIN
1055
1056#ifdef Q_WS_WIN
1057#define KF_EXTERN extern __declspec(dllimport)
1058#else
1059#define KF_EXTERN extern
1060#endif
1061
1062typedef QString (*_qt_filedialog_existing_directory_hook)(QWidget *parent, const QString &caption,
1063 const QString &dir,
1064 QFileDialog::Options options);
1065KF_EXTERN _qt_filedialog_existing_directory_hook qt_filedialog_existing_directory_hook;
1066
1067typedef QString (*_qt_filedialog_open_filename_hook)(QWidget * parent, const QString &caption,
1068 const QString &dir, const QString &filter,
1069 QString *selectedFilter,
1070 QFileDialog::Options options);
1071KF_EXTERN _qt_filedialog_open_filename_hook qt_filedialog_open_filename_hook;
1072
1073typedef QStringList (*_qt_filedialog_open_filenames_hook)(QWidget * parent, const QString &caption,
1074 const QString &dir, const QString &filter,
1075 QString *selectedFilter,
1076 QFileDialog::Options options);
1077KF_EXTERN _qt_filedialog_open_filenames_hook qt_filedialog_open_filenames_hook;
1078
1079typedef QString (*_qt_filedialog_save_filename_hook)(QWidget * parent, const QString &caption,
1080 const QString &dir, const QString &filter,
1081 QString *selectedFilter,
1082 QFileDialog::Options options);
1083KF_EXTERN _qt_filedialog_save_filename_hook qt_filedialog_save_filename_hook;
1084
1085/*
1086 * This class is used to override Qt's QFileDialog calls with KFileDialog ones.
1087 * This is necessary because QPrintDialog calls QFileDialog::getSaveFileName() for
1088 * the print to file function.
1089 */
1090class KFileDialogQtOverride
1091{
1092public:
1093 KFileDialogQtOverride()
1094 {
1095 if(!qt_filedialog_existing_directory_hook)
1096 qt_filedialog_existing_directory_hook=&getExistingDirectory;
1097 if(!qt_filedialog_open_filename_hook)
1098 qt_filedialog_open_filename_hook=&getOpenFileName;
1099 if(!qt_filedialog_open_filenames_hook)
1100 qt_filedialog_open_filenames_hook=&getOpenFileNames;
1101 if(!qt_filedialog_save_filename_hook)
1102 qt_filedialog_save_filename_hook=&getSaveFileName;
1103 }
1104
1105 ~KFileDialogQtOverride() {
1106 if(qt_filedialog_existing_directory_hook == &getExistingDirectory)
1107 qt_filedialog_existing_directory_hook = 0;
1108 if(qt_filedialog_open_filename_hook == &getOpenFileName)
1109 qt_filedialog_open_filename_hook = 0;
1110 if(qt_filedialog_open_filenames_hook == &getOpenFileNames)
1111 qt_filedialog_open_filenames_hook=0;
1112 if(qt_filedialog_save_filename_hook == &getSaveFileName)
1113 qt_filedialog_save_filename_hook=0;
1114 }
1115
1116 /*
1117 * Map a Qt filter string into a KDE one.
1118 */
1119 static QString qt2KdeFilter(const QString &f)
1120 {
1121 QString filter;
1122 QTextStream str(&filter, QIODevice::WriteOnly);
1123 QStringList list(f.split(";;").replaceInStrings("/", "\\/"));
1124 QStringList::const_iterator it(list.begin()),
1125 end(list.end());
1126 bool first=true;
1127
1128 for(; it!=end; ++it)
1129 {
1130 int ob=(*it).lastIndexOf('('),
1131 cb=(*it).lastIndexOf(')');
1132
1133 if(-1!=cb && ob<cb)
1134 {
1135 if(first)
1136 first=false;
1137 else
1138 str << '\n';
1139 str << (*it).mid(ob+1, (cb-ob)-1) << '|' << (*it).mid(0, ob);
1140 }
1141 }
1142
1143 return filter;
1144 }
1145
1146 /*
1147 * Map a KDE filter string into a Qt one.
1148 */
1149 static void kde2QtFilter(const QString &orig, const QString &kde, QString *sel)
1150 {
1151 if(sel)
1152 {
1153 QStringList list(orig.split(";;"));
1154 QStringList::const_iterator it(list.begin()),
1155 end(list.end());
1156 int pos;
1157
1158 for(; it!=end; ++it)
1159 if(-1!=(pos=(*it).indexOf(kde)) && pos>0 &&
1160 ('('==(*it)[pos-1] || ' '==(*it)[pos-1]) &&
1161 (*it).length()>=kde.length()+pos &&
1162 (')'==(*it)[pos+kde.length()] || ' '==(*it)[pos+kde.length()]))
1163 {
1164 *sel=*it;
1165 return;
1166 }
1167 }
1168 }
1169
1170 static QString getExistingDirectory(QWidget *parent, const QString &caption, const QString &dir,
1171 QFileDialog::Options options)
1172 {
1173 if (KFileDialogPrivate::isNative()) {
1174 if(qt_filedialog_existing_directory_hook)
1175 qt_filedialog_existing_directory_hook=0; // do not override
1176 return QFileDialog::getExistingDirectory(parent, caption, dir, options);
1177 }
1178
1179 fileModule(); // make sure i18n is initialized properly, needed for pure Qt applications
1180 KUrl url(KFileDialog::getExistingDirectory(KUrl(dir), parent, caption));
1181
1182 if(url.isLocalFile())
1183 return url.pathOrUrl();
1184 else
1185 return QString();
1186 }
1187
1188 static QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir,
1189 const QString &filter, QString *selectedFilter,
1190 QFileDialog::Options options)
1191 {
1192 if (KFileDialogPrivate::isNative()) {
1193 if(qt_filedialog_open_filename_hook)
1194 qt_filedialog_open_filename_hook=0; // do not override
1195 return QFileDialog::getOpenFileName(parent, caption, dir, filter, selectedFilter, options);
1196 }
1197
1198 fileModule(); // make sure i18n is initialized properly, needed for pure Qt applications
1199 KFileDialog dlg(KUrl(dir), qt2KdeFilter(filter), parent);
1200
1201 dlg.setOperationMode(KFileDialog::Opening);
1202 dlg.setMode(KFile::File|KFile::LocalOnly);
1203 dlg.setCaption(caption);
1204 dlg.exec();
1205
1206 QString rv(dlg.selectedFile());
1207
1208 if(!rv.isEmpty())
1209 kde2QtFilter(filter, dlg.currentFilter(), selectedFilter);
1210
1211 return rv;
1212 }
1213
1214 static QStringList getOpenFileNames(QWidget *parent, const QString &caption, const QString &dir,
1215 const QString &filter, QString *selectedFilter,
1216 QFileDialog::Options options)
1217 {
1218 if (KFileDialogPrivate::isNative()) {
1219 if(qt_filedialog_open_filenames_hook)
1220 qt_filedialog_open_filenames_hook=0; // do not override
1221 return QFileDialog::getOpenFileNames(parent, caption, dir, filter, selectedFilter, options);
1222 }
1223
1224 fileModule(); // make sure i18n is initialized properly, needed for pure Qt applications
1225 KFileDialog dlg(KUrl(dir), qt2KdeFilter(filter), parent);
1226
1227 dlg.setOperationMode(KFileDialog::Opening);
1228 dlg.setMode(KFile::Files|KFile::LocalOnly);
1229 dlg.setCaption(caption);
1230 dlg.exec();
1231
1232 QStringList rv(dlg.selectedFiles());
1233
1234 if(rv.count())
1235 kde2QtFilter(filter, dlg.currentFilter(), selectedFilter);
1236
1237 return rv;
1238 }
1239
1240 static QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir,
1241 const QString &filter, QString *selectedFilter,
1242 QFileDialog::Options options)
1243 {
1244 if (KFileDialogPrivate::isNative()) {
1245 if(qt_filedialog_save_filename_hook)
1246 qt_filedialog_save_filename_hook=0; // do not override
1247 return QFileDialog::getSaveFileName(parent, caption, dir, filter, selectedFilter, options);
1248 }
1249
1250 fileModule(); // make sure i18n is initialized properly, needed for pure Qt applications
1251 KFileDialog dlg(KUrl(dir), qt2KdeFilter(filter), parent);
1252
1253 dlg.setOperationMode(KFileDialog::Saving);
1254 dlg.setMode(KFile::File|KFile::LocalOnly);
1255 dlg.setCaption(caption);
1256 dlg.setConfirmOverwrite(!(options & QFileDialog::DontConfirmOverwrite));
1257 dlg.exec();
1258
1259 QString rv(dlg.selectedFile());
1260
1261 if(!rv.isEmpty())
1262 kde2QtFilter(filter, dlg.currentFilter(), selectedFilter);
1263
1264 return rv;
1265 }
1266
1267};
1268
1269static KFileDialogQtOverride qtOverride;
1270
1271#include "kfiledialog.moc"
KAbstractFileModule
Interface to the module that contains the file widget.
Definition: kabstractfilemodule.h:36
KAbstractFileModule::createFileWidget
virtual QWidget * createFileWidget(const KUrl &startDir, QWidget *parent)=0
the returned widget implements the KAbstractFileWidget interface
KAbstractFileModule::selectDirectory
virtual KUrl selectDirectory(const KUrl &startDir, bool localOnly, QWidget *parent, const QString &caption)=0
Creates a modal file dialog and returns the selected directory or an empty string if none was chosen.
KAbstractFileModule::getStartUrl
virtual KUrl getStartUrl(const KUrl &startDir, QString &recentDirClass)=0
KAbstractFileModule::setStartDir
virtual void setStartDir(const KUrl &directory)=0
KAbstractFileWidget
Base class for KFileWidget.
Definition: kabstractfilewidget.h:58
KAbstractFileWidget::OperationMode
OperationMode
Defines some default behavior of the filedialog.
Definition: kabstractfilewidget.h:73
KAbstractFileWidget::Opening
@ Opening
Definition: kabstractfilewidget.h:73
KAbstractFileWidget::Other
@ Other
Definition: kabstractfilewidget.h:73
KAbstractFileWidget::Saving
@ Saving
Definition: kabstractfilewidget.h:73
KActionCollection
KConfigBase::group
KConfigGroup group(const char *group)
KConfigBase::Persistent
Persistent
KConfigGroup
KConfigGroup::readEntry
QString readEntry(const char *key, const char *aDefault=0) const
KConfig
KDialog
KDialog::hideEvent
virtual void hideEvent(QHideEvent *)
KDialog::keyPressEvent
virtual void keyPressEvent(QKeyEvent *)
KDialog::saveDialogSize
void saveDialogSize(KConfigGroup &config, KConfigGroup::WriteConfigFlags options=KConfigGroup::Normal) const
KDialog::None
None
KDialog::okClicked
void okClicked()
KDialog::setCaption
virtual void setCaption(const QString &caption)
KDialog::finished
void finished()
KFileDialog
Provides a user (and developer) friendly way to select files and directories.
Definition: kfiledialog.h:69
KFileDialog::selectedUrls
KUrl::List selectedUrls() const
Definition: kfiledialog.cpp:673
KFileDialog::setLocationLabel
void setLocationLabel(const QString &text)
Sets the text to be displayed in front of the selection.
Definition: kfiledialog.cpp:325
KFileDialog::currentFilterMimeType
KMimeType::Ptr currentFilterMimeType()
Returns the mimetype for the desired output format.
Definition: kfiledialog.cpp:384
KFileDialog::setKeepLocation
void setKeepLocation(bool keep)
Sets whether the filename/url should be kept when changing directories.
Definition: kfiledialog.cpp:887
KFileDialog::selectedUrl
KUrl selectedUrl() const
Definition: kfiledialog.cpp:666
KFileDialog::slotOk
virtual void slotOk()
Definition: kfiledialog.cpp:416
KFileDialog::setOperationMode
void setOperationMode(KFileDialog::OperationMode)
Sets the operational mode of the filedialog to Saving, Opening or Other.
Definition: kfiledialog.cpp:901
KFileDialog::getStartUrl
static KUrl getStartUrl(const KUrl &startDir, QString &recentDirClass)
This method implements the logic to determine the user's default directory to be listed.
Definition: kfiledialog.cpp:941
KFileDialog::mode
KFile::Modes mode() const
Returns the mode of the filedialog.
Definition: kfiledialog.cpp:855
KFileDialog::hideEvent
virtual void hideEvent(QHideEvent *event)
Reimplemented for saving the dialog geometry.
Definition: kfiledialog.cpp:930
KFileDialog::getSaveUrl
static KUrl getSaveUrl(const KUrl &startDir=KUrl(), const QString &filter=QString(), QWidget *parent=0, const QString &caption=QString())
Creates a modal file dialog and returns the selected filename or an empty string if none was chosen.
Definition: kfiledialog.cpp:805
KFileDialog::getOpenFileNames
static QStringList getOpenFileNames(const KUrl &startDir=KUrl(), const QString &filter=QString(), QWidget *parent=0, const QString &caption=QString())
Creates a modal file dialog and returns the selected filenames or an empty list if none was chosen.
Definition: kfiledialog.cpp:518
KFileDialog::getOpenFileName
static QString getOpenFileName(const KUrl &startDir=KUrl(), const QString &filter=QString(), QWidget *parent=0, const QString &caption=QString())
Creates a modal file dialog and return the selected filename or an empty string if none was chosen.
Definition: kfiledialog.cpp:464
KFileDialog::clearFilter
void clearFilter()
Clears any mime- or namefilter.
Definition: kfiledialog.cpp:363
KFileDialog::cancelButton
KPushButton * cancelButton() const
Definition: kfiledialog.cpp:867
KFileDialog::~KFileDialog
~KFileDialog()
Destructs the file dialog.
Definition: kfiledialog.cpp:320
KFileDialog::setConfirmOverwrite
void setConfirmOverwrite(bool enable)
Sets whether the dialog should ask before accepting the selected file when KFileDialog::OperationMode...
Definition: kfiledialog.cpp:610
KFileDialog::setMode
void setMode(KFile::Modes m)
Sets the mode of the dialog.
Definition: kfiledialog.cpp:847
KFileDialog::selectedFile
QString selectedFile() const
Returns the full path of the selected file in the local filesystem.
Definition: kfiledialog.cpp:680
KFileDialog::setPreviewWidget
void setPreviewWidget(KPreviewWidgetBase *w)
Adds a preview widget and enters the preview mode.
Definition: kfiledialog.cpp:389
KFileDialog::currentMimeFilter
QString currentMimeFilter() const
The mimetype for the desired output format.
Definition: kfiledialog.cpp:372
KFileDialog::getExistingDirectory
static QString getExistingDirectory(const KUrl &startDir=KUrl(), QWidget *parent=0, const QString &caption=QString())
Creates a modal directory-selection dialog and returns the selected directory (local only) or an empt...
Definition: kfiledialog.cpp:630
KFileDialog::operationMode
OperationMode operationMode() const
Definition: kfiledialog.cpp:909
KFileDialog::sizeHint
virtual QSize sizeHint() const
Definition: kfiledialog.cpp:405
KFileDialog::slotCancel
virtual void slotCancel()
Definition: kfiledialog.cpp:436
KFileDialog::setFilter
void setFilter(const QString &filter)
Sets the filter to be used to filter.
Definition: kfiledialog.cpp:332
KFileDialog::getSaveFileNameWId
static QString getSaveFileNameWId(const KUrl &startDir, const QString &filter, WId parent_id, const QString &caption)
This function accepts the window id of the parent window, instead of QWidget*.
Definition: kfiledialog.cpp:768
KFileDialog::actionCollection
KActionCollection * actionCollection() const
Definition: kfiledialog.cpp:882
KFileDialog::getOpenUrl
static KUrl getOpenUrl(const KUrl &startDir=KUrl(), const QString &filter=QString(), QWidget *parent=0, const QString &caption=QString())
Creates a modal file dialog and returns the selected URL or an empty string if none was chosen.
Definition: kfiledialog.cpp:552
KFileDialog::getSaveFileName
static QString getSaveFileName(const KUrl &startDir=KUrl(), const QString &filter=QString(), QWidget *parent=0, const QString &caption=QString())
Creates a modal file dialog and returns the selected filename or an empty string if none was chosen.
Definition: kfiledialog.cpp:701
KFileDialog::keyPressEvent
virtual void keyPressEvent(QKeyEvent *e)
Reimplemented to animate the cancel button.
Definition: kfiledialog.cpp:916
KFileDialog::OperationMode
OperationMode
Defines some default behavior of the filedialog.
Definition: kfiledialog.h:85
KFileDialog::Opening
@ Opening
Definition: kfiledialog.h:85
KFileDialog::Saving
@ Saving
Definition: kfiledialog.h:85
KFileDialog::selectedFiles
QStringList selectedFiles() const
Returns a list of all selected local files.
Definition: kfiledialog.cpp:687
KFileDialog::setInlinePreviewShown
void setInlinePreviewShown(bool show)
Forces the inline previews to be shown or hidden, depending on show.
Definition: kfiledialog.cpp:396
KFileDialog::currentFilter
QString currentFilter() const
Returns the current filter as entered by the user or one of the predefined set via setFilter().
Definition: kfiledialog.cpp:341
KFileDialog::getExistingDirectoryUrl
static KUrl getExistingDirectoryUrl(const KUrl &startDir=KUrl(), QWidget *parent=0, const QString &caption=QString())
Creates a modal directory-selection dialog and returns the selected directory or an empty string if n...
Definition: kfiledialog.cpp:617
KFileDialog::getOpenFileNameWId
static QString getOpenFileNameWId(const KUrl &startDir, const QString &filter, WId parent_id, const QString &caption)
Use this version only if you have no QWidget available as parent widget.
Definition: kfiledialog.cpp:497
KFileDialog::setUrl
void setUrl(const KUrl &url, bool clearforward=true)
Sets the directory to view.
Definition: kfiledialog.cpp:444
KFileDialog::setStartDir
static void setStartDir(const KUrl &directory)
Definition: kfiledialog.cpp:947
KFileDialog::ConfirmOverwrite
@ ConfirmOverwrite
Confirm whether to overwrite file to save.
Definition: kfiledialog.h:92
KFileDialog::ShowInlinePreview
@ ShowInlinePreview
Always show an inline preview.
Definition: kfiledialog.h:93
KFileDialog::accept
virtual void accept()
Definition: kfiledialog.cpp:424
KFileDialog::setSelection
void setSelection(const QString &name)
Sets the file name to preselect to name.
Definition: kfiledialog.cpp:454
KFileDialog::getImageOpenUrl
static KUrl getImageOpenUrl(const KUrl &startDir=KUrl(), QWidget *parent=0, const QString &caption=QString())
Creates a modal file dialog with an image previewer and returns the selected url or an empty string i...
Definition: kfiledialog.cpp:645
KFileDialog::setMimeFilter
void setMimeFilter(const QStringList &types, const QString &defaultType=QString())
Sets the filter up to specify the output type.
Definition: kfiledialog.cpp:348
KFileDialog::filterWidget
KFileFilterCombo * filterWidget() const
Definition: kfiledialog.cpp:877
KFileDialog::getOpenUrls
static KUrl::List getOpenUrls(const KUrl &startDir=KUrl(), const QString &filter=QString(), QWidget *parent=0, const QString &caption=QString())
Creates a modal file dialog and returns the selected URLs or an empty list if none was chosen.
Definition: kfiledialog.cpp:578
KFileDialog::keepsLocation
bool keepsLocation() const
Definition: kfiledialog.cpp:894
KFileDialog::toolBar
KToolBar * toolBar() const
Returns a pointer to the toolbar.
Definition: kfiledialog.cpp:954
KFileDialog::locationEdit
KUrlComboBox * locationEdit() const
Definition: kfiledialog.cpp:872
KFileDialog::baseUrl
KUrl baseUrl() const
Definition: kfiledialog.cpp:694
KFileDialog::KFileDialog
KFileDialog(const KUrl &startDir, const QString &filter, QWidget *parent, QWidget *widget=0)
Constructs a file dialog.
Definition: kfiledialog.cpp:253
KFileDialog::okButton
KPushButton * okButton() const
Definition: kfiledialog.cpp:862
KFileDialog::fileWidget
KAbstractFileWidget * fileWidget()
Returns the KFileWidget that implements most of this file dialog.
Definition: kfiledialog.cpp:959
KFileDialog::exec
int exec()
Definition: kfiledialog.cpp:965
KFile
KFile is a class which provides a namespace for some enumerated values associated with the kfile libr...
Definition: kfile.h:32
KFile::LocalOnly
@ LocalOnly
Definition: kfile.h:49
KFile::Files
@ Files
Definition: kfile.h:47
KFile::Directory
@ Directory
Definition: kfile.h:46
KFile::ExistingOnly
@ ExistingOnly
Definition: kfile.h:48
KFile::File
@ File
Definition: kfile.h:45
KMimeType::mimeType
static Ptr mimeType(const QString &name, FindByNameOption options=ResolveAliases)
KMimeType::findByPath
static Ptr findByPath(const QString &path, mode_t mode=0, bool fast_mode=false, int *accuracy=0)
KPreviewWidgetBase
Abstract baseclass for all preview widgets which shall be used via KFileDialog::setPreviewWidget(cons...
Definition: kpreviewwidgetbase.h:44
KPushButton
KRecentDocument::add
static void add(const KUrl &url)
Add a new item to the Recent Document menu.
Definition: krecentdocument.cpp:88
KService::serviceByDesktopName
static Ptr serviceByDesktopName(const QString &_name)
KSharedPtr< KMimeType >
KToolBar
KUrlComboBox
This combobox shows a number of recent URLs/directories, as well as some default directories.
Definition: kurlcombobox.h:48
KUrl::List
KUrl::List::toStringList
QStringList toStringList() const
KUrl
KUrl::pathOrUrl
QString pathOrUrl() const
KUrl::fromPath
static KUrl fromPath(const QString &text)
KUrl::isLocalFile
bool isLocalFile() const
KUrl::join
static KUrl join(const List &_list)
KUrl::toLocalFile
QString toLocalFile(AdjustPathOption trailing=LeaveTrailingSlash) const
KWindowSystem::setMainWindow
static void setMainWindow(QWidget *subwindow, WId mainwindow)
QWidget
config-kfile.h
kfile_area
const int kfile_area
Definition: config-kfile.h:22
ConfigGroup
#define ConfigGroup
Definition: config-kfile.h:35
f
static quint32 f(DES_KEY *key, quint32 r, char *subkey)
Definition: des.cpp:378
kDebug
#define kDebug
kWarning
#define kWarning
kabstractfilemodule.h
kabstractfilewidget.h
kdebug.h
_qt_filedialog_save_filename_hook
QString(* _qt_filedialog_save_filename_hook)(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
Definition: kfiledialog.cpp:1079
_qt_filedialog_existing_directory_hook
QString(* _qt_filedialog_existing_directory_hook)(QWidget *parent, const QString &caption, const QString &dir, QFileDialog::Options options)
Definition: kfiledialog.cpp:1062
qt_filedialog_open_filenames_hook
KF_EXTERN _qt_filedialog_open_filenames_hook qt_filedialog_open_filenames_hook
Definition: kfiledialog.cpp:1077
NATIVE_FILEDIALOGS_BY_DEFAULT
const bool NATIVE_FILEDIALOGS_BY_DEFAULT
File dialogs are native by default on Windows.
Definition: kfiledialog.cpp:49
qt_filedialog_save_filename_hook
KF_EXTERN _qt_filedialog_save_filename_hook qt_filedialog_save_filename_hook
Definition: kfiledialog.cpp:1083
qtOverride
static KFileDialogQtOverride qtOverride
Definition: kfiledialog.cpp:1269
s_defaultFileModuleName
static const char s_defaultFileModuleName[]
Definition: kfiledialog.cpp:148
KF_EXTERN
#define KF_EXTERN
Definition: kfiledialog.cpp:1057
qt_filedialog_open_filename_hook
KF_EXTERN _qt_filedialog_open_filename_hook qt_filedialog_open_filename_hook
Definition: kfiledialog.cpp:1071
_qt_filedialog_open_filename_hook
QString(* _qt_filedialog_open_filename_hook)(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
Definition: kfiledialog.cpp:1067
loadFileModule
static KAbstractFileModule * loadFileModule(const QString &moduleName)
Definition: kfiledialog.cpp:139
s_module
static KAbstractFileModule * s_module
Definition: kfiledialog.cpp:138
qtFilter
static QString qtFilter(const QStringList &_filters)
Definition: kfiledialog.cpp:77
mime2KdeFilter
static QStringList mime2KdeFilter(const QStringList &mimeTypes, QString *allExtensions=0)
Definition: kfiledialog.cpp:54
_qt_filedialog_open_filenames_hook
QStringList(* _qt_filedialog_open_filenames_hook)(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
Definition: kfiledialog.cpp:1073
qt_filedialog_existing_directory_hook
KF_EXTERN _qt_filedialog_existing_directory_hook qt_filedialog_existing_directory_hook
Definition: kfiledialog.cpp:1065
fileModule
static KAbstractFileModule * fileModule()
Definition: kfiledialog.cpp:149
kfiledialog.h
kimageio.h
klocale.h
i18n
QString i18n(const char *text)
kpushbutton.h
krecentdirs.h
krecentdocument.h
kservice.h
kwindowsystem.h
KGlobal
caption
QString caption()
config
KSharedConfigPtr config()
KImageIO::mimeTypes
QStringList mimeTypes(Mode mode=Writing)
Returns a list of MIME types for all KImageIO supported formats.
Definition: kimageio.cpp:64
KImageIO::Reading
@ Reading
Definition: kimageio.h:53
KRecentDirs::dir
QString dir(const QString &fileClass)
Returns the most recently used directory accociated with this file-class.
Definition: krecentdirs.cpp:68
KRecentDirs::add
void add(const QString &fileClass, const QString &directory)
Associates directory with fileClass.
Definition: krecentdirs.cpp:74
name
const char * name(StandardAction id)
end
const KShortcut & end()
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KIO

Skip menu "KIO"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal