/* * Copyright 2009 Aaron J. Seigo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License version 2 as * published by the Free Software Foundation * * This program 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 General Public License for more details * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "filedialogproxy.h" #include #include FileDialogProxy::FileDialogProxy(KFileDialog::OperationMode mode, QObject *parent) : QObject(parent), m_dialog(new KFileDialog(KUrl("~"), QString(), 0)) { m_dialog->setOperationMode(mode); connect(m_dialog, SIGNAL(finished()), this, SLOT(dialogFinished())); } FileDialogProxy::~FileDialogProxy() { delete m_dialog; } KUrl FileDialogProxy::selectedUrl() const { return m_dialog->selectedUrl(); } void FileDialogProxy::setUrl(const KUrl &url) { m_dialog->setUrl(url); } KUrl::List FileDialogProxy::selectedUrls() const { return m_dialog->selectedUrls(); } KUrl FileDialogProxy::baseUrl() const { return m_dialog->baseUrl(); } QString FileDialogProxy::selectedFile() const { return m_dialog->selectedFile(); } QStringList FileDialogProxy::selectedFiles() const { return m_dialog->selectedFiles(); } QString FileDialogProxy::filter() const { return m_dialog->currentFilter(); } void FileDialogProxy::setFilter(const QString &filter) { m_dialog->setFilter(filter); } bool FileDialogProxy::localOnly() const { return m_dialog->mode() & KFile::LocalOnly; } void FileDialogProxy::setLocalOnly(bool localOnly) { if (localOnly) { m_dialog->setMode(m_dialog->mode() ^ KFile::LocalOnly); } else { m_dialog->setMode(m_dialog->mode() | KFile::LocalOnly); } } bool FileDialogProxy::directoriesOnly() const { return m_dialog->mode() & KFile::Directory; } void FileDialogProxy::setDirectoriesOnly(bool directoriesOnly) { if (directoriesOnly) { m_dialog->setMode(m_dialog->mode() ^ KFile::Directory); } else { m_dialog->setMode(m_dialog->mode() | KFile::Directory); } } bool FileDialogProxy::existingOnly() const { return m_dialog->mode() & KFile::ExistingOnly; } void FileDialogProxy::setExistingOnly(bool existingOnly) { if (existingOnly) { m_dialog->setMode(m_dialog->mode() ^ KFile::ExistingOnly); } else { m_dialog->setMode(m_dialog->mode() | KFile::ExistingOnly); } } void FileDialogProxy::show() { m_dialog->show(); } void FileDialogProxy::dialogFinished() { if (m_dialog->result() == QDialog::Accepted) { emit accepted(this); } emit finished(this); } Q_DECLARE_METATYPE(FileDialogProxy *) typedef FileDialogProxy* FileDialogProxyPtr; QScriptValue qScriptValueFromFileDialogProxy(QScriptEngine *engine, const FileDialogProxyPtr &fd) { return engine->newQObject(const_cast(fd), QScriptEngine::AutoOwnership, QScriptEngine::PreferExistingWrapperObject | QScriptEngine::ExcludeSuperClassContents); } void fileDialogProxyFromQScriptValue(const QScriptValue &scriptValue, FileDialogProxyPtr &fd) { QObject *obj = scriptValue.toQObject(); fd = static_cast(obj); } void FileDialogProxy::registerWithRuntime(QScriptEngine *engine) { QScriptValue global = engine->globalObject(); qScriptRegisterMetaType(engine, qScriptValueFromFileDialogProxy, fileDialogProxyFromQScriptValue); global.setProperty("OpenFileDialog", engine->newFunction(FileDialogProxy::fileDialogOpen)); global.setProperty("SaveFileDialog", engine->newFunction(FileDialogProxy::fileDialogSave)); } QScriptValue FileDialogProxy::fileDialogSave(QScriptContext *context, QScriptEngine *engine) { QObject *parent = 0; if (context->argumentCount()) { parent = context->argument(0).toQObject(); } FileDialogProxy *fd = new FileDialogProxy(KFileDialog::Saving, parent); return engine->newQObject(fd, QScriptEngine::AutoOwnership, QScriptEngine::ExcludeSuperClassContents); } QScriptValue FileDialogProxy::fileDialogOpen(QScriptContext *context, QScriptEngine *engine) { QObject *parent = 0; if (context->argumentCount()) { parent = context->argument(0).toQObject(); } FileDialogProxy *fd = new FileDialogProxy(KFileDialog::Opening, parent); return engine->newQObject(fd, QScriptEngine::AutoOwnership, QScriptEngine::ExcludeSuperClassContents); } #include "filedialogproxy.moc"