diff --git a/src/ui/filenamerequester.cpp b/src/ui/filenamerequester.cpp index 43534264c..2f919f6ce 100644 --- a/src/ui/filenamerequester.cpp +++ b/src/ui/filenamerequester.cpp @@ -1,191 +1,196 @@ /* -*- mode: c++; c-basic-offset:4 -*- ui/filenamerequester.cpp This file is part of Kleopatra, the KDE keymanager SPDX-FileCopyrightText: 2007 Klarälvdalens Datakonsult AB SPDX-License-Identifier: GPL-2.0-or-later */ #include "filenamerequester.h" #include #include #include #include #include #include #include #include #include using namespace Kleo; class Q_DECL_HIDDEN FileNameRequester::FileNameRequesterPrivate { friend class ::Kleo::FileNameRequester; FileNameRequester *const q; public: explicit FileNameRequesterPrivate(FileNameRequester *qq); ~FileNameRequesterPrivate(); private: void slotButtonClicked(); private: #ifndef QT_NO_DIRMODEL QDirModel dirmodel; QCompleter completer; #else QDir::Filters filter; #endif QLineEdit lineedit; QToolButton button; QHBoxLayout hlay; QString nameFilter; bool existingOnly; }; FileNameRequester::FileNameRequesterPrivate::FileNameRequesterPrivate(FileNameRequester *qq) : q(qq), #ifndef QT_NO_DIRMODEL dirmodel(), completer(&dirmodel), #else filter(), #endif lineedit(q), button(q), hlay(q), nameFilter(), existingOnly(true) { #ifndef QT_NO_DIRMODEL dirmodel.setObjectName(QStringLiteral("dirmodel")); completer.setObjectName(QStringLiteral("completer")); #endif lineedit.setObjectName(QStringLiteral("lineedit")); button.setObjectName(QStringLiteral("button")); hlay.setObjectName(QStringLiteral("hlay")); button.setIcon(QIcon::fromTheme(QStringLiteral("document-open"))); button.setToolTip(i18n("Open file dialog")); button.setAccessibleName(i18n("Open file dialog")); #ifndef QT_NO_DIRMODEL lineedit.setCompleter(&completer); #endif lineedit.setClearButtonEnabled(true); hlay.setContentsMargins(0, 0, 0, 0); hlay.addWidget(&lineedit); hlay.addWidget(&button); q->setFocusPolicy(lineedit.focusPolicy()); q->setFocusProxy(&lineedit); connect(&button, &QToolButton::clicked, q, [this]() { slotButtonClicked(); }); connect(&lineedit, &QLineEdit::textChanged, q, &FileNameRequester::fileNameChanged); } FileNameRequester::FileNameRequesterPrivate::~FileNameRequesterPrivate() {} FileNameRequester::FileNameRequester(QWidget *p) : QWidget(p), d(new FileNameRequesterPrivate(this)) { } FileNameRequester::FileNameRequester(QDir::Filters f, QWidget *p) : QWidget(p), d(new FileNameRequesterPrivate(this)) { #ifndef QT_NO_DIRMODEL d->dirmodel.setFilter(f); #else d->filter = f; #endif } FileNameRequester::~FileNameRequester() = default; 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) { #ifndef QT_NO_DIRMODEL d->dirmodel.setFilter(f); #else d->filter = f; #endif } QDir::Filters FileNameRequester::filter() const { #ifndef QT_NO_DIRMODEL return d->dirmodel.filter(); #else return d->filter; #endif } void FileNameRequester::setNameFilter(const QString &nameFilter) { d->nameFilter = nameFilter; } QString FileNameRequester::nameFilter() const { return d->nameFilter; } +void FileNameRequester::setAccessibleNameOfLineEdit(const QString &name) +{ + d->lineedit.setAccessibleName(name); +} + void FileNameRequester::FileNameRequesterPrivate::slotButtonClicked() { const QString fileName = q->requestFileName(); if (!fileName.isEmpty()) { q->setFileName(fileName); } } bool FileNameRequester::event(QEvent *e) { if (e->type() == QEvent::ToolTipChange) { d->lineedit.setToolTip(toolTip()); } return QWidget::event(e); } QString FileNameRequester::requestFileName() { #ifndef QT_NO_FILEDIALOG 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(), fileName(), d->nameFilter); } #else return QString(); #endif } #include "moc_filenamerequester.cpp" diff --git a/src/ui/filenamerequester.h b/src/ui/filenamerequester.h index 626017fc2..3ac92dfa1 100644 --- a/src/ui/filenamerequester.h +++ b/src/ui/filenamerequester.h @@ -1,58 +1,59 @@ /* -*- mode: c++; c-basic-offset:4 -*- ui/filenamerequester.h This file is part of Kleopatra, the KDE keymanager SPDX-FileCopyrightText: 2007 Klarälvdalens Datakonsult AB SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include "kleo_export.h" #include #include namespace Kleo { class KLEO_EXPORT FileNameRequester : public QWidget { Q_OBJECT Q_PROPERTY(QString fileName READ fileName WRITE setFileName) Q_PROPERTY(bool existingOnly READ existingOnly WRITE setExistingOnly) public: explicit FileNameRequester(QWidget *parent = nullptr); explicit FileNameRequester(QDir::Filters filter, QWidget *parent = nullptr); ~FileNameRequester() override; void setFileName(const QString &name); QString fileName() const; void setExistingOnly(bool on); bool existingOnly() const; void setFilter(QDir::Filters f); QDir::Filters filter() const; void setNameFilter(const QString &nameFilter); QString nameFilter() const; + void setAccessibleNameOfLineEdit(const QString &name); + Q_SIGNALS: void fileNameChanged(const QString &filename); protected: bool event(QEvent *event) override; private: virtual QString requestFileName(); private: class FileNameRequesterPrivate; std::unique_ptr const d; }; } -