Libkleo

docaction.cpp
1/*
2 kleo/docaction.cpp
3
4 This file is part of libkleopatra, the KDE keymanagement library
5 SPDX-FileCopyrightText: 2022 g10 Code GmbH
6 SPDX-FileContributor: Andre Heinecke <aheinecke@g10code.com>
7
8 SPDX-License-Identifier: GPL-2.0-or-later
9*/
10
11#include <config-libkleo.h>
12
13#include "docaction.h"
14
15#include <libkleo_debug.h>
16
17#include <QCoreApplication>
18#include <QDesktopServices>
19#include <QDir>
20#include <QFileInfo>
21#include <QString>
22#include <QUrl>
23
24using namespace Kleo;
25
26class Kleo::DocAction::Private
27{
28public:
29 explicit Private(const QString &filename, const QUrl &url, const QString &pathHint);
30 ~Private() = default;
31
32 QString path;
33 bool isEnabled = false;
34 QUrl url;
35};
36
37DocAction::Private::Private(const QString &filename, const QUrl &url, const QString &pathHint)
38{
39 QString tmp = pathHint;
40 if (!tmp.startsWith(QLatin1Char('/'))) {
41 tmp.prepend(QLatin1Char('/'));
42 }
43 QDir datadir(QCoreApplication::applicationDirPath() + (pathHint.isNull() ? QStringLiteral("/../share/kleopatra") : tmp));
44
45 path = datadir.filePath(filename);
46 QFileInfo fi(path);
47 isEnabled = fi.exists();
48 if (!isEnabled) {
49 this->url = url;
50 isEnabled = url.isValid();
51 }
52}
53
54DocAction::DocAction(const QIcon &icon, const QString &text, const QString &filename, const QString &pathHint, const QUrl &url, QObject *parent)
56 , d(new Private(filename, url, pathHint))
57{
58 setVisible(d->isEnabled);
59 setEnabled(d->isEnabled);
60 connect(this, &QAction::triggered, this, [this]() {
61 if (d->isEnabled) {
62 qCDebug(LIBKLEO_LOG) << "Opening:" << (d->url.isValid() ? d->url.toString() : d->path);
63 QDesktopServices::openUrl(d->url.isValid() ? d->url : QUrl::fromLocalFile(d->path));
64 }
65 });
66}
67
68DocAction::~DocAction() = default;
69
70#include "moc_docaction.cpp"
void triggered(bool checked)
QString applicationDirPath()
QObject * parent() const const
bool isNull() const const
QString & prepend(QChar ch)
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
bool isValid() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri Jul 26 2024 11:50:31 by doxygen 1.11.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.