Mercurial > clickerconvert
diff src/filenamerequester.cpp @ 50:36ee5dd46fd3
Add GUI
New Mainwindow that allows to set output formats and input
files through a GUI.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Tue, 19 Jul 2016 12:19:45 +0200 |
parents | |
children | a43d8cf2fa95 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/filenamerequester.cpp Tue Jul 19 12:19:45 2016 +0200 @@ -0,0 +1,183 @@ +/* Copyright (C) 2016 by ETH Zürich + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU GPL (v>=2) + * and comes with ABSOLUTELY NO WARRANTY! + * See LICENSE.txt for details. + */ + +/* This file was originally taken from Libkleo where the license was: + ui/filenamerequester.cpp + + This file is part of Kleopatra, the KDE keymanager + Copyright (c) 2007 Klarälvdalens Datakonsult AB + + Kleopatra is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + Kleopatra 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 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 + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "filenamerequester.h" + +#include <QLineEdit> + +#include <QHBoxLayout> +#include <QToolButton> +#include <QCompleter> +#include <QDirModel> +#include <QString> +#include <QFileDialog> +#include <QApplication> +#include <QStyle> + +class FileNameRequester::Private +{ + friend class FileNameRequester; + FileNameRequester *const q; +public: + explicit Private(FileNameRequester *qq); + ~Private(); + +private: + void slotButtonClicked(); + +private: + QDirModel dirmodel; + QCompleter completer; + + QLineEdit lineedit; + QToolButton button; + QHBoxLayout hlay; + + QString nameFilter; + bool existingOnly; +}; + +FileNameRequester::Private::Private(FileNameRequester *qq) + : q(qq), + dirmodel(), + completer(&dirmodel), + lineedit(q), + button(q), + hlay(q), + nameFilter(), + existingOnly(true) +{ + dirmodel.setObjectName(QStringLiteral("dirmodel")); + completer.setObjectName(QStringLiteral("completer")); + lineedit.setObjectName(QStringLiteral("lineedit")); + button.setObjectName(QStringLiteral("button")); + hlay.setObjectName(QStringLiteral("hlay")); + + button.setIcon(QApplication::style()->standardIcon(QStyle::SP_DirIcon)); + lineedit.setCompleter(&completer); + lineedit.setClearButtonEnabled(true); + hlay.setMargin(0); + hlay.addWidget(&lineedit); + hlay.addWidget(&button); + + connect(&button, SIGNAL(clicked()), q, SLOT(slotButtonClicked())); + connect(&lineedit, &QLineEdit::textChanged, q, &FileNameRequester::fileNameChanged); +} + +FileNameRequester::Private::~Private() {} + +FileNameRequester::FileNameRequester(QWidget *p) + : QWidget(p), d(new Private(this)) +{ + +} + +FileNameRequester::FileNameRequester(QDir::Filters f, QWidget *p) + : QWidget(p), d(new Private(this)) +{ + d->dirmodel.setFilter(f); +} + +FileNameRequester::~FileNameRequester() +{ + delete d; +} + +void FileNameRequester::setFileName(const QString &file) +{ + d->lineedit.setText(file); +} + +QString FileNameRequester::fileName() const +{ + return d->lineedit.text(); +} + +void FileNameRequester::setExistingOnly(bool on) +{ + d->existingOnly = on; +} + +bool FileNameRequester::existingOnly() const +{ + return d->existingOnly; +} + +void FileNameRequester::setFilter(QDir::Filters f) +{ + d->dirmodel.setFilter(f); +} + +QDir::Filters FileNameRequester::filter() const +{ + return d->dirmodel.filter(); +} + +void FileNameRequester::setNameFilter(const QString &nameFilter) +{ + d->nameFilter = nameFilter; +} + +QString FileNameRequester::nameFilter() const +{ + return d->nameFilter; +} + +void FileNameRequester::Private::slotButtonClicked() +{ + const QString fileName = q->requestFileName(); + if (!fileName.isEmpty()) { + q->setFileName(fileName); + } +} + +QString FileNameRequester::requestFileName() +{ + const QDir::Filters filters = filter(); + if ((filters & QDir::Dirs) && !(filters & QDir::Files)) { + return QFileDialog::getExistingDirectory(this); + } else if (d->existingOnly) { + return QFileDialog::getOpenFileName(this, QString(), QString(), d->nameFilter); + } else { + return QFileDialog::getSaveFileName(this, QString(), QString(), d->nameFilter); + } +} + +#include "moc_filenamerequester.cpp"