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"
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)