1/*
2 This file is part of the KDE libraries
3 SPDX-FileCopyrightText: 2013 David Faure <faure+bluesystems@kde.org>
4 SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.0-or-later
7*/
8
9#ifndef KIO_JOBUIDELEGATEFACTORY_H
10#define KIO_JOBUIDELEGATEFACTORY_H
11
12#include "job_base.h"
13#include "kiocore_export.h"
14#include <KJobUiDelegate>
15#include <QDateTime>
16#include <kio/global.h>
17
18#include <KCompositeJob>
19
20class QWidget;
21
22namespace KIO
23{
24/*!
25 * \class KIO::JobUiDelegateFactory
26 * \inheaderfile KIO/JobUiDelegateFactory
27 * \inmodule KIOCore
28 *
29 * \brief A factory for creating job ui delegates.
30 *
31 * Every KIO job will get a delegate from this factory.
32 *
33 * \since 5.0
34 */
35class KIOCORE_EXPORT JobUiDelegateFactory
36{
37protected:
38 /*!
39 * Constructor
40 */
41 JobUiDelegateFactory();
42
43 virtual ~JobUiDelegateFactory();
44
45public:
46 /*!
47 *
48 */
49 virtual KJobUiDelegate *createDelegate() const = 0;
50
51 /*!
52 * \since 6.0
53 */
54 virtual KJobUiDelegate *createDelegate(KJobUiDelegate::Flags flags, QWidget *window) const = 0;
55
56private:
57 class Private;
58 Private *const d;
59};
60
61/*!
62 * \relates KIO::JobUiDelegateFactory
63 * Convenience method: use default factory, if there's one, to create a delegate and return it.
64 */
65KIOCORE_EXPORT KJobUiDelegate *createDefaultJobUiDelegate();
66
67/*!
68 * \relates KIO::JobUiDelegateFactory
69 *
70 * Convenience method: use default factory, if there's one, to create a delegate and return it.
71 *
72 * \since 5.98
73 */
74KIOCORE_EXPORT KJobUiDelegate *createDefaultJobUiDelegate(KJobUiDelegate::Flags flags, QWidget *window);
75
76/*!
77 * \relates KIO::JobUiDelegateFactory
78 *
79 * Returns the default job UI delegate factory to be used by all KIO jobs (in which HideProgressInfo is not set)
80 * Can return nullptr, if no kio GUI library is loaded.
81 * \since 6.0
82 */
83KIOCORE_EXPORT JobUiDelegateFactory *defaultJobUiDelegateFactory();
84
85/*!
86 * \relates KIO::JobUiDelegateFactory
87 *
88 * Internal. Allows the KIO widgets library to register its widget-based job UI delegate factory
89 * automatically.
90 * \since 6.0
91 */
92KIOCORE_EXPORT void setDefaultJobUiDelegateFactory(JobUiDelegateFactory *factory);
93
94/*!
95 * \relates KIO::JobUiDelegateFactory
96 *
97 * Returns the child of the job's uiDelegate() that implements the given extension,
98 * or nullptr if none was found (or if the job had no uiDelegate).
99 * \since 5.78
100 */
101template<typename T>
102inline T delegateExtension(KJob *job)
103{
104 KJobUiDelegate *ui = job->uiDelegate();
105
106 // If setParentJob() was used, try the uiDelegate of parentJob first
107 if (!ui) {
108 if (KIO::Job *kiojob = qobject_cast<KIO::Job *>(object: job)) {
109 if (KJob *parentJob = kiojob->parentJob()) {
110 ui = parentJob->uiDelegate();
111 }
112 }
113 }
114
115 // Still nothing? if compositeJob->addSubjob(job) was used, try the ui delegate
116 // of compositeJob
117 while (!ui) {
118 job = qobject_cast<KCompositeJob *>(object: job->parent());
119 if (job) {
120 ui = job->uiDelegate();
121 } else {
122 break;
123 }
124 }
125
126 return ui ? ui->findChild<T>(QString(), Qt::FindDirectChildrenOnly) : nullptr;
127}
128
129} // namespace KIO
130
131#endif
132

source code of kio/src/core/jobuidelegatefactory.h