1 | /* |
2 | This file is part of the KDE libraries |
3 | SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org> |
4 | |
5 | SPDX-License-Identifier: LGPL-2.0-or-later |
6 | */ |
7 | |
8 | #ifndef OPENWITHDIALOG_H |
9 | #define OPENWITHDIALOG_H |
10 | |
11 | #include "kiowidgets_export.h" |
12 | |
13 | #include <KService> |
14 | #include <QDialog> |
15 | #include <QUrl> |
16 | |
17 | class KOpenWithDialogPrivate; |
18 | |
19 | /** |
20 | * @class KOpenWithDialog kopenwithdialog.h <KOpenWithDialog> |
21 | * |
22 | * "Open With" dialog box. |
23 | * |
24 | * @note To let the user choose an application and run it immediately, |
25 | * use simpler KRun::displayOpenWithDialog(). |
26 | * |
27 | * If the Kiosk "shell_access" action is not authorized (see |
28 | * KAuthorized::authorize()), arbitrary commands are not allowed; instead, the |
29 | * user must browse to and choose an executable. |
30 | * |
31 | * @author David Faure <faure@kde.org> |
32 | */ |
33 | class KIOWIDGETS_EXPORT KOpenWithDialog : public QDialog |
34 | { |
35 | Q_OBJECT |
36 | public: |
37 | /** |
38 | * Create a dialog that asks for a application to open a given |
39 | * URL(s) with. |
40 | * |
41 | * @param urls the URLs that should be opened. The list can be empty, |
42 | * if the dialog is used to choose an application but not for some particular URLs. |
43 | * @param parent parent widget |
44 | */ |
45 | explicit KOpenWithDialog(const QList<QUrl> &urls, QWidget *parent = nullptr); |
46 | |
47 | /** |
48 | * Create a dialog that asks for a application to open a given |
49 | * URL(s) with. |
50 | * |
51 | * @param urls is the URL that should be opened |
52 | * @param text appears as a label on top of the entry box. Leave empty for default text (since 5.20). |
53 | * @param value is the initial value of the line |
54 | * @param parent parent widget |
55 | */ |
56 | KOpenWithDialog(const QList<QUrl> &urls, const QString &text, const QString &value, QWidget *parent = nullptr); |
57 | |
58 | /** |
59 | * Create a dialog to select a service for a given MIME type. |
60 | * Note that this dialog doesn't apply to URLs. |
61 | * |
62 | * @param mimeType the MIME type we want to choose an application for. |
63 | * @param value is the initial value of the line |
64 | * @param parent parent widget |
65 | */ |
66 | KOpenWithDialog(const QString &mimeType, const QString &value, QWidget *parent = nullptr); |
67 | |
68 | /** |
69 | * Create a dialog that asks for a application for opening a given |
70 | * URL (or more than one), when we already know the MIME type of the URL(s). |
71 | * |
72 | * @param urls is the URLs that should be opened |
73 | * @param mimeType the MIME type of the URL |
74 | * @param text appears as a label on top of the entry box. |
75 | * @param value is the initial value of the line |
76 | * @param parent parent widget |
77 | * @since 5.71 |
78 | */ |
79 | KOpenWithDialog(const QList<QUrl> &urls, const QString &mimeType, const QString &text, const QString &value, QWidget *parent = nullptr); |
80 | |
81 | /** |
82 | * Create a dialog to select an application |
83 | * Note that this dialog doesn't apply to URLs. |
84 | * |
85 | * @param parent parent widget |
86 | */ |
87 | KOpenWithDialog(QWidget *parent = nullptr); |
88 | |
89 | /** |
90 | * Destructor |
91 | */ |
92 | ~KOpenWithDialog() override; |
93 | |
94 | /** |
95 | * @return the text the user entered |
96 | */ |
97 | QString text() const; |
98 | /** |
99 | * Hide the "Do not &close when command exits" Checkbox |
100 | */ |
101 | void hideNoCloseOnExit(); |
102 | /** |
103 | * Hide the "Run in &terminal" Checkbox |
104 | */ |
105 | void hideRunInTerminal(); |
106 | /** |
107 | * @return the chosen service in the application tree |
108 | * Can be null, if the user typed some text and didn't select a service. |
109 | */ |
110 | KService::Ptr service() const; |
111 | /** |
112 | * Set whether a new .desktop file should be created if the user selects an |
113 | * application for which no corresponding .desktop file can be found. |
114 | * |
115 | * Regardless of this setting a new .desktop file may still be created if |
116 | * the user has chosen to remember the file association. |
117 | * |
118 | * The default is false: no .desktop files are created. |
119 | */ |
120 | void setSaveNewApplications(bool b); |
121 | |
122 | public Q_SLOTS: // TODO KDE5: move all those slots to the private class! |
123 | void slotSelected(const QString &_name, const QString &_exec); |
124 | void slotHighlighted(const QString &_name, const QString &_exec); |
125 | void slotTextChanged(); |
126 | void slotTerminalToggled(bool); |
127 | |
128 | protected Q_SLOTS: |
129 | /** |
130 | * Reimplemented from QDialog::accept() |
131 | */ |
132 | void accept() override; |
133 | |
134 | private: |
135 | bool eventFilter(QObject *object, QEvent *event) override; |
136 | |
137 | friend class KOpenWithDialogPrivate; |
138 | std::unique_ptr<KOpenWithDialogPrivate> const d; |
139 | |
140 | Q_DISABLE_COPY(KOpenWithDialog) |
141 | }; |
142 | |
143 | #endif |
144 | |