2014-11-13 01:04:59 +02:00
|
|
|
// -*- c++ -*-
|
|
|
|
/* This file is part of the KDE libraries
|
|
|
|
Copyright (C) 1997, 1998 Richard Moore <rich@kde.org>
|
|
|
|
1998 Stephan Kulow <coolo@kde.org>
|
|
|
|
1998 Daniel Grana <grana@ie.iwi.unibe.ch>
|
|
|
|
1999,2000,2001,2002,2003 Carsten Pfeiffer <pfeiffer@kde.org>
|
|
|
|
2003 Clarence Dang <dang@kde.org>
|
|
|
|
2008 Jarosław Staniek <staniek@kde.org>
|
|
|
|
2009 David Jarvie <djarvie@kde.org>
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Library General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Library General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "kfiledialog.h"
|
|
|
|
|
2022-11-13 00:40:18 +02:00
|
|
|
#include <QtCore/QTextStream>
|
2014-11-13 01:04:59 +02:00
|
|
|
#include <QtGui/QCheckBox>
|
2015-08-11 05:56:07 +03:00
|
|
|
#include <QtGui/qevent.h>
|
2014-11-13 01:04:59 +02:00
|
|
|
#include <QtGui/QFileDialog>
|
|
|
|
#include <QtGui/QApplication>
|
|
|
|
#include <QtGui/QDesktopWidget>
|
|
|
|
|
|
|
|
#include <kimageio.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <kpushbutton.h>
|
|
|
|
#include <config-kfile.h>
|
|
|
|
#include <krecentdocument.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <kwindowsystem.h>
|
|
|
|
#include "kabstractfilewidget.h"
|
|
|
|
#include "kabstractfilemodule.h"
|
|
|
|
#include "krecentdirs.h"
|
|
|
|
#include "kservice.h"
|
|
|
|
|
|
|
|
static KAbstractFileModule* s_module = 0;
|
2023-06-04 16:47:53 +03:00
|
|
|
static const char s_defaultFileModuleName[] = "kfilemodule";
|
|
|
|
|
2014-11-13 01:04:59 +02:00
|
|
|
static KAbstractFileModule* loadFileModule( const QString& moduleName )
|
|
|
|
{
|
|
|
|
KService::Ptr fileModuleService = KService::serviceByDesktopName(moduleName);
|
2023-06-04 16:47:53 +03:00
|
|
|
if (fileModuleService) {
|
2014-11-13 01:04:59 +02:00
|
|
|
return fileModuleService->createInstance<KAbstractFileModule>();
|
2023-06-04 16:47:53 +03:00
|
|
|
}
|
|
|
|
return nullptr;
|
2014-11-13 01:04:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static KAbstractFileModule* fileModule()
|
|
|
|
{
|
2023-06-04 16:47:53 +03:00
|
|
|
if (!s_module) {
|
2014-11-13 01:04:59 +02:00
|
|
|
QString moduleName = KConfig("kdeglobals").group(ConfigGroup).readEntry("file module", s_defaultFileModuleName);
|
2023-06-04 16:47:53 +03:00
|
|
|
if (!(s_module = loadFileModule(moduleName))) {
|
2014-11-13 01:04:59 +02:00
|
|
|
kDebug() << "Failed to load configured file module" << moduleName;
|
2023-06-04 16:47:53 +03:00
|
|
|
if (moduleName != s_defaultFileModuleName) {
|
2014-11-13 01:04:59 +02:00
|
|
|
kDebug() << "Falling back to default file module.";
|
|
|
|
s_module = loadFileModule(s_defaultFileModuleName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return s_module;
|
|
|
|
}
|
|
|
|
|
|
|
|
class KFileDialogPrivate
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
KFileDialogPrivate()
|
2023-06-04 16:47:53 +03:00
|
|
|
: w(nullptr),
|
2014-11-13 01:04:59 +02:00
|
|
|
cfgGroup(KGlobal::config(), ConfigGroup)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
KAbstractFileWidget* w;
|
|
|
|
KConfigGroup cfgGroup;
|
|
|
|
};
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
KFileDialog::KFileDialog(const KUrl &startDir, const QString &filter,
|
|
|
|
QWidget* parent, QWidget* customWidget)
|
|
|
|
: KDialog(parent),
|
|
|
|
d(new KFileDialogPrivate())
|
2014-11-13 01:04:59 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
QWidget* fileQWidget = fileModule()->createFileWidget(startDir, this);
|
|
|
|
d->w = ::qobject_cast<KAbstractFileWidget *>(fileQWidget);
|
|
|
|
|
|
|
|
setButtons( KDialog::None );
|
|
|
|
restoreDialogSize(d->cfgGroup); // call this before the fileQWidget is set as the main widget.
|
|
|
|
// otherwise the sizes for the components are not obeyed (ereslibre)
|
|
|
|
|
|
|
|
d->w->setFilter(filter);
|
|
|
|
setMainWidget(fileQWidget);
|
|
|
|
|
|
|
|
d->w->okButton()->show();
|
|
|
|
connect(d->w->okButton(), SIGNAL(clicked()), SLOT(slotOk()));
|
|
|
|
d->w->cancelButton()->show();
|
|
|
|
connect(d->w->cancelButton(), SIGNAL(clicked()), SLOT(slotCancel()));
|
|
|
|
|
|
|
|
// Publish signals
|
|
|
|
// TODO: Move the relevant signal declarations from KFileWidget to the
|
|
|
|
// KAbstractFileWidget interface?
|
|
|
|
// Else, all of these connects (including "accepted") are not typesafe.
|
|
|
|
// Answer: you cannot define signals in a non-qobject base class (DF).
|
|
|
|
// I simply documentde them in kabstractfilewidget.h now.
|
|
|
|
kDebug (kfile_area) << "KFileDialog connecting signals";
|
|
|
|
connect(fileQWidget, SIGNAL(fileSelected(KUrl)),
|
|
|
|
SIGNAL(fileSelected(KUrl)));
|
|
|
|
connect(fileQWidget, SIGNAL(fileHighlighted(KUrl)),
|
|
|
|
SIGNAL(fileHighlighted(KUrl)));
|
|
|
|
connect(fileQWidget, SIGNAL(selectionChanged()),
|
|
|
|
SIGNAL(selectionChanged()));
|
|
|
|
connect(fileQWidget, SIGNAL(filterChanged(QString)),
|
|
|
|
SIGNAL(filterChanged(QString)));
|
|
|
|
|
|
|
|
connect(fileQWidget, SIGNAL(accepted()), SLOT(accept()));
|
|
|
|
//connect(fileQWidget, SIGNAL(canceled()), SLOT(slotCancel()));
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
if (customWidget) {
|
|
|
|
d->w->setCustomWidget(QString(), customWidget);
|
|
|
|
}
|
2014-11-13 01:04:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
KFileDialog::~KFileDialog()
|
|
|
|
{
|
|
|
|
delete d;
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::setLocationLabel(const QString &text)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
d->w->setLocationLabel(text);
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::setFilter(const QString &filter)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
d->w->setFilter(filter);
|
|
|
|
}
|
|
|
|
|
|
|
|
QString KFileDialog::currentFilter() const
|
|
|
|
{
|
|
|
|
return d->w->currentFilter();
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::setMimeFilter(const QStringList &mimeTypes, const QString &defaultType)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
d->w->setMimeFilter(mimeTypes, defaultType);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFileDialog::clearFilter()
|
|
|
|
{
|
|
|
|
d->w->clearFilter();
|
|
|
|
}
|
|
|
|
|
|
|
|
QString KFileDialog::currentMimeFilter() const
|
|
|
|
{
|
|
|
|
return d->w->currentMimeFilter();
|
|
|
|
}
|
|
|
|
|
|
|
|
KMimeType::Ptr KFileDialog::currentFilterMimeType()
|
|
|
|
{
|
2023-06-04 16:47:53 +03:00
|
|
|
return KMimeType::mimeType(currentMimeFilter());
|
2014-11-13 01:04:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void KFileDialog::setPreviewWidget(KPreviewWidgetBase *w)
|
|
|
|
{
|
|
|
|
d->w->setPreviewWidget(w);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFileDialog::setInlinePreviewShown(bool show)
|
|
|
|
{
|
|
|
|
d->w->setInlinePreviewShown(show);
|
|
|
|
}
|
|
|
|
|
|
|
|
// This is only used for the initial size when no configuration has been saved
|
|
|
|
QSize KFileDialog::sizeHint() const
|
|
|
|
{
|
|
|
|
int fontSize = fontMetrics().height();
|
|
|
|
QSize goodSize(48 * fontSize, 30 * fontSize);
|
|
|
|
QSize screenSize = QApplication::desktop()->availableGeometry(this).size();
|
|
|
|
QSize minSize(screenSize / 2);
|
|
|
|
QSize maxSize(screenSize * qreal(0.9));
|
|
|
|
return (goodSize.expandedTo(minSize).boundedTo(maxSize));
|
|
|
|
}
|
|
|
|
|
|
|
|
// This slot still exists mostly for compat purposes; for subclasses which reimplement slotOk
|
|
|
|
void KFileDialog::slotOk()
|
|
|
|
{
|
|
|
|
d->w->slotOk();
|
|
|
|
}
|
|
|
|
|
|
|
|
// This slot still exists mostly for compat purposes; for subclasses which reimplement accept
|
|
|
|
void KFileDialog::accept()
|
|
|
|
{
|
2023-06-04 16:47:53 +03:00
|
|
|
setResult(QDialog::Accepted); // keep old behavior; probably not needed though
|
2014-11-13 01:04:59 +02:00
|
|
|
d->w->accept();
|
|
|
|
KConfigGroup cfgGroup(KGlobal::config(), ConfigGroup);
|
|
|
|
KDialog::accept();
|
|
|
|
emit okClicked();
|
|
|
|
}
|
|
|
|
|
|
|
|
// This slot still exists mostly for compat purposes; for subclasses which reimplement slotCancel
|
|
|
|
void KFileDialog::slotCancel()
|
|
|
|
{
|
|
|
|
d->w->slotCancel();
|
|
|
|
reject();
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::setUrl(const KUrl &url, bool clearforward)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
d->w->setUrl(url, clearforward);
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::setSelection(const QString &name)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
d->w->setSelection(name);
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
QString KFileDialog::getOpenFileName(const KUrl &startDir,
|
|
|
|
const QString &filter,
|
|
|
|
QWidget *parent, const QString &caption)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
KFileDialog dlg(startDir, filter, parent);
|
|
|
|
|
|
|
|
dlg.setOperationMode( KFileDialog::Opening );
|
2023-06-04 16:47:53 +03:00
|
|
|
dlg.setMode(KFile::File | KFile::LocalOnly | KFile::ExistingOnly);
|
2014-11-13 01:04:59 +02:00
|
|
|
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
|
|
|
|
|
|
|
|
dlg.exec();
|
|
|
|
return dlg.selectedFile();
|
|
|
|
}
|
|
|
|
|
|
|
|
QString KFileDialog::getOpenFileNameWId(const KUrl& startDir,
|
2023-06-04 16:47:53 +03:00
|
|
|
const QString &filter,
|
|
|
|
WId parent_id, const QString &caption)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
2023-06-04 16:47:53 +03:00
|
|
|
QWidget* parent = QWidget::find(parent_id);
|
2014-11-13 01:04:59 +02:00
|
|
|
KFileDialog dlg(startDir, filter, parent);
|
2023-06-04 16:47:53 +03:00
|
|
|
if (parent == NULL && parent_id != 0) {
|
|
|
|
KWindowSystem::setMainWindow(&dlg, parent_id);
|
|
|
|
}
|
2014-11-13 01:04:59 +02:00
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
dlg.setOperationMode(KFileDialog::Opening );
|
|
|
|
dlg.setMode( KFile::File | KFile::LocalOnly | KFile::ExistingOnly);
|
2014-11-13 01:04:59 +02:00
|
|
|
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
|
|
|
|
|
|
|
|
dlg.exec();
|
|
|
|
|
|
|
|
return dlg.selectedFile();
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
QStringList KFileDialog::getOpenFileNames(const KUrl &startDir,
|
|
|
|
const QString &filter,
|
2014-11-13 01:04:59 +02:00
|
|
|
QWidget *parent,
|
2023-06-04 16:47:53 +03:00
|
|
|
const QString &caption)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
KFileDialog dlg(startDir, filter, parent);
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
dlg.setOperationMode(KFileDialog::Opening);
|
2014-11-13 01:04:59 +02:00
|
|
|
dlg.setMode(KFile::Files | KFile::LocalOnly | KFile::ExistingOnly);
|
|
|
|
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
|
|
|
|
|
|
|
|
dlg.exec();
|
|
|
|
return dlg.selectedFiles();
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
KUrl KFileDialog::getOpenUrl(const KUrl &startDir, const QString &filter,
|
|
|
|
QWidget *parent, const QString &caption)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
KFileDialog dlg(startDir, filter, parent);
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
dlg.setOperationMode(KFileDialog::Opening);
|
|
|
|
dlg.setMode(KFile::File | KFile::ExistingOnly);
|
2014-11-13 01:04:59 +02:00
|
|
|
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
|
|
|
|
|
|
|
|
dlg.exec();
|
|
|
|
return dlg.selectedUrl();
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
KUrl::List KFileDialog::getOpenUrls(const KUrl &startDir,
|
|
|
|
const QString &filter,
|
2014-11-13 01:04:59 +02:00
|
|
|
QWidget *parent,
|
2023-06-04 16:47:53 +03:00
|
|
|
const QString &caption)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
KFileDialog dlg(startDir, filter, parent);
|
|
|
|
|
|
|
|
dlg.setOperationMode( KFileDialog::Opening );
|
2023-06-04 16:47:53 +03:00
|
|
|
dlg.setMode( KFile::Files | KFile::ExistingOnly);
|
2014-11-13 01:04:59 +02:00
|
|
|
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
|
|
|
|
|
|
|
|
dlg.exec();
|
|
|
|
return dlg.selectedUrls();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KFileDialog::setConfirmOverwrite(bool enable)
|
|
|
|
{
|
|
|
|
if (operationMode() == KFileDialog::Saving) {
|
|
|
|
d->w->setConfirmOverwrite(enable);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
KUrl KFileDialog::getExistingDirectoryUrl(const KUrl &startDir,
|
2014-11-13 01:04:59 +02:00
|
|
|
QWidget *parent,
|
2023-06-04 16:47:53 +03:00
|
|
|
const QString &caption)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
return fileModule()->selectDirectory(startDir, false, parent, caption);
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
QString KFileDialog::getExistingDirectory(const KUrl &startDir,
|
2014-11-13 01:04:59 +02:00
|
|
|
QWidget *parent,
|
2023-06-04 16:47:53 +03:00
|
|
|
const QString &caption)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
KUrl url = fileModule()->selectDirectory(startDir, true, parent, caption);
|
2023-06-04 16:47:53 +03:00
|
|
|
if (url.isValid()) {
|
2014-11-13 01:04:59 +02:00
|
|
|
return url.toLocalFile();
|
2023-06-04 16:47:53 +03:00
|
|
|
}
|
2014-11-13 01:04:59 +02:00
|
|
|
return QString();
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
KUrl KFileDialog::getImageOpenUrl(const KUrl &startDir, QWidget *parent,
|
|
|
|
const QString &caption)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
2023-06-04 16:47:53 +03:00
|
|
|
const QStringList mimetypes = KImageIO::mimeTypes(KImageIO::Reading);
|
2014-11-13 01:04:59 +02:00
|
|
|
KFileDialog dlg(startDir, mimetypes.join(" "), parent);
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
dlg.setOperationMode(KFileDialog::Opening);
|
|
|
|
dlg.setMode(KFile::File | KFile::ExistingOnly);
|
|
|
|
dlg.setCaption(caption.isEmpty() ? i18n("Open") : caption);
|
|
|
|
dlg.setInlinePreviewShown(true);
|
2014-11-13 01:04:59 +02:00
|
|
|
|
|
|
|
dlg.exec();
|
|
|
|
|
|
|
|
return dlg.selectedUrl();
|
|
|
|
}
|
|
|
|
|
|
|
|
KUrl KFileDialog::selectedUrl() const
|
|
|
|
{
|
|
|
|
return d->w->selectedUrl();
|
|
|
|
}
|
|
|
|
|
|
|
|
KUrl::List KFileDialog::selectedUrls() const
|
|
|
|
{
|
|
|
|
return d->w->selectedUrls();
|
|
|
|
}
|
|
|
|
|
|
|
|
QString KFileDialog::selectedFile() const
|
|
|
|
{
|
|
|
|
return d->w->selectedFile();
|
|
|
|
}
|
|
|
|
|
|
|
|
QStringList KFileDialog::selectedFiles() const
|
|
|
|
{
|
|
|
|
return d->w->selectedFiles();
|
|
|
|
}
|
|
|
|
|
|
|
|
KUrl KFileDialog::baseUrl() const
|
|
|
|
{
|
|
|
|
return d->w->baseUrl();
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
QString KFileDialog::getSaveFileName(const KUrl &dir, const QString &filter,
|
2014-11-13 01:04:59 +02:00
|
|
|
QWidget *parent,
|
2023-06-04 16:47:53 +03:00
|
|
|
const QString &caption, Options options)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
KFileDialog dlg(dir, filter, parent);
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
dlg.setOperationMode(KFileDialog::Saving);
|
|
|
|
dlg.setMode(KFile::File | KFile::LocalOnly);
|
2014-11-13 01:04:59 +02:00
|
|
|
dlg.setConfirmOverwrite(options & KFileDialog::ConfirmOverwrite);
|
|
|
|
dlg.setInlinePreviewShown(options & KFileDialog::ShowInlinePreview);
|
|
|
|
dlg.setCaption(caption.isEmpty() ? i18n("Save As") : caption);
|
|
|
|
|
|
|
|
dlg.exec();
|
|
|
|
|
|
|
|
QString filename = dlg.selectedFile();
|
2023-06-04 16:47:53 +03:00
|
|
|
if (!filename.isEmpty()) {
|
2014-11-13 01:04:59 +02:00
|
|
|
KRecentDocument::add(filename);
|
2023-06-04 16:47:53 +03:00
|
|
|
}
|
2014-11-13 01:04:59 +02:00
|
|
|
|
|
|
|
return filename;
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
QString KFileDialog::getSaveFileNameWId(const KUrl &dir, const QString &filter,
|
|
|
|
WId parent_id,
|
|
|
|
const QString &caption, Options options)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
2023-06-04 16:47:53 +03:00
|
|
|
QWidget* parent = QWidget::find(parent_id);
|
2014-11-13 01:04:59 +02:00
|
|
|
KFileDialog dlg(dir, filter, parent);
|
2023-06-04 16:47:53 +03:00
|
|
|
if (parent == NULL && parent_id != 0) {
|
|
|
|
KWindowSystem::setMainWindow(&dlg, parent_id);
|
|
|
|
}
|
2014-11-13 01:04:59 +02:00
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
dlg.setOperationMode(KFileDialog::Saving);
|
|
|
|
dlg.setMode(KFile::File | KFile::LocalOnly);
|
2014-11-13 01:04:59 +02:00
|
|
|
dlg.setConfirmOverwrite(options & ConfirmOverwrite);
|
|
|
|
dlg.setInlinePreviewShown(options & ShowInlinePreview);
|
|
|
|
dlg.setCaption(caption.isEmpty() ? i18n("Save As") : caption);
|
|
|
|
|
|
|
|
dlg.exec();
|
|
|
|
|
|
|
|
QString filename = dlg.selectedFile();
|
2023-06-04 16:47:53 +03:00
|
|
|
if (!filename.isEmpty()) {
|
2014-11-13 01:04:59 +02:00
|
|
|
KRecentDocument::add(filename);
|
2023-06-04 16:47:53 +03:00
|
|
|
}
|
2014-11-13 01:04:59 +02:00
|
|
|
|
|
|
|
return filename;
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
KUrl KFileDialog::getSaveUrl(const KUrl &dir, const QString &filter,
|
|
|
|
QWidget *parent, const QString &caption, Options options)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
KFileDialog dlg(dir, filter, parent);
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
dlg.setOperationMode(KFileDialog::Saving);
|
|
|
|
dlg.setMode(KFile::File);
|
2014-11-13 01:04:59 +02:00
|
|
|
dlg.setConfirmOverwrite(options & KFileDialog::ConfirmOverwrite);
|
|
|
|
dlg.setInlinePreviewShown(options & KFileDialog::ShowInlinePreview);
|
|
|
|
dlg.setCaption(caption.isEmpty() ? i18n("Save As") : caption);
|
|
|
|
|
|
|
|
dlg.exec();
|
2023-06-04 16:47:53 +03:00
|
|
|
|
2014-11-13 01:04:59 +02:00
|
|
|
KUrl url = dlg.selectedUrl();
|
2023-06-04 16:47:53 +03:00
|
|
|
if (url.isValid()) {
|
|
|
|
KRecentDocument::add(url);
|
|
|
|
}
|
2014-11-13 01:04:59 +02:00
|
|
|
|
|
|
|
return url;
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::setMode(KFile::Modes m)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
2023-06-04 16:47:53 +03:00
|
|
|
d->w->setMode(m);
|
2014-11-13 01:04:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
KFile::Modes KFileDialog::mode() const
|
|
|
|
{
|
|
|
|
return d->w->mode();
|
|
|
|
}
|
|
|
|
|
|
|
|
KPushButton * KFileDialog::okButton() const
|
|
|
|
{
|
|
|
|
return d->w->okButton();
|
|
|
|
}
|
|
|
|
|
|
|
|
KPushButton * KFileDialog::cancelButton() const
|
|
|
|
{
|
|
|
|
return d->w->cancelButton();
|
|
|
|
}
|
|
|
|
|
|
|
|
KUrlComboBox* KFileDialog::locationEdit() const
|
|
|
|
{
|
|
|
|
return d->w->locationEdit();
|
|
|
|
}
|
|
|
|
|
|
|
|
KFileFilterCombo* KFileDialog::filterWidget() const
|
|
|
|
{
|
|
|
|
return d->w->filterWidget();
|
|
|
|
}
|
|
|
|
|
|
|
|
KActionCollection * KFileDialog::actionCollection() const
|
|
|
|
{
|
|
|
|
return d->w->actionCollection();
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::setKeepLocation(bool keep)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
d->w->setKeepLocation(keep);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KFileDialog::keepsLocation() const
|
|
|
|
{
|
|
|
|
return d->w->keepsLocation();
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::setOperationMode(OperationMode mode)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
2023-06-04 16:47:53 +03:00
|
|
|
d->w->setOperationMode(static_cast<KAbstractFileWidget::OperationMode>(mode));
|
2014-11-13 01:04:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
KFileDialog::OperationMode KFileDialog::operationMode() const
|
|
|
|
{
|
|
|
|
return static_cast<KFileDialog::OperationMode>(d->w->operationMode());
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::keyPressEvent(QKeyEvent* e)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
2023-06-04 16:47:53 +03:00
|
|
|
if (e->key() == Qt::Key_Escape) {
|
2014-11-13 01:04:59 +02:00
|
|
|
e->accept();
|
|
|
|
d->w->cancelButton()->animateClick();
|
2023-06-04 16:47:53 +03:00
|
|
|
} else {
|
|
|
|
KDialog::keyPressEvent(e);
|
2014-11-13 01:04:59 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::hideEvent(QHideEvent* e)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
saveDialogSize(d->cfgGroup, KConfigBase::Persistent);
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
KDialog::hideEvent(e);
|
2014-11-13 01:04:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// static
|
2023-06-04 16:47:53 +03:00
|
|
|
KUrl KFileDialog::getStartUrl(const KUrl &startDir, QString &recentDirClass)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
return fileModule()->getStartUrl(startDir, recentDirClass);
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
void KFileDialog::setStartDir(const KUrl& directory)
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
fileModule()->setStartDir(directory);
|
|
|
|
}
|
|
|
|
|
2023-06-04 16:47:53 +03:00
|
|
|
KToolBar* KFileDialog::toolBar() const
|
2014-11-13 01:04:59 +02:00
|
|
|
{
|
|
|
|
return d->w->toolBar();
|
|
|
|
}
|
|
|
|
|
|
|
|
KAbstractFileWidget* KFileDialog::fileWidget()
|
|
|
|
{
|
|
|
|
return d->w;
|
|
|
|
}
|
|
|
|
|
2015-02-27 07:40:26 +00:00
|
|
|
#include "moc_kfiledialog.cpp"
|