diff --git a/src/ui/filenamerequester.cpp b/src/ui/filenamerequester.cpp index 371b8d3c1..4b9856350 100644 --- a/src/ui/filenamerequester.cpp +++ b/src/ui/filenamerequester.cpp @@ -1,182 +1,193 @@ /* -*- 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::Private { friend class ::Kleo::FileNameRequester; FileNameRequester *const q; public: explicit Private(FileNameRequester *qq); ~Private(); private: void slotButtonClicked(); private: #ifndef QT_NO_DIRMODEL QDirModel dirmodel; QCompleter completer; #else QDir::Filters filter; #endif KLineEdit lineedit; QToolButton button; QHBoxLayout hlay; QString nameFilter; bool existingOnly; }; FileNameRequester::Private::Private(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")); #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, &KLineEdit::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)) { #ifndef QT_NO_DIRMODEL d->dirmodel.setFilter(f); #else d->filter = f; #endif } 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) { #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::Private::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(), QString(), d->nameFilter); } #else return QString(); #endif } #include "moc_filenamerequester.cpp" diff --git a/src/ui/filenamerequester.h b/src/ui/filenamerequester.h index c5d310e75..2aed3839b 100644 --- a/src/ui/filenamerequester.h +++ b/src/ui/filenamerequester.h @@ -1,55 +1,58 @@ /* -*- 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(); 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; Q_SIGNALS: void fileNameChanged(const QString &filename); +protected: + bool event(QEvent *event) override; + private: virtual QString requestFileName(); private: class Private; Private *d; }; }