1 | /* |
2 | This file is part of the KDE project |
3 | SPDX-FileCopyrightText: 1998-2009 David Faure <faure@kde.org> |
4 | SPDX-FileCopyrightText: 2003 Sven Leiber <s.leiber@web.de> |
5 | |
6 | SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only |
7 | */ |
8 | |
9 | #ifndef KNEWFILEMENU_H |
10 | #define |
11 | |
12 | #include "kiofilewidgets_export.h" |
13 | |
14 | #include <KActionMenu> |
15 | #include <QUrl> |
16 | |
17 | #include <memory> |
18 | |
19 | class KJob; |
20 | |
21 | class KActionCollection; |
22 | class ; |
23 | |
24 | /*! |
25 | * \class KNewFileMenu |
26 | * \inmodule KIOFileWidgets |
27 | * |
28 | * \brief The 'Create New' submenu, for creating files using templates |
29 | * (e.g.\ "new HTML file") and directories. |
30 | * |
31 | * The same instance can be used by both for the File menu and the RMB popup menu, |
32 | * in a file manager. This is also used in the file dialog's RMB menu. |
33 | * |
34 | * To use this class, you need to connect aboutToShow() of the File menu |
35 | * with slotCheckUpToDate() and to call slotCheckUpToDate() before showing |
36 | * the RMB popupmenu. |
37 | * |
38 | * KNewFileMenu automatically updates the list of templates shown if installed templates |
39 | * are added/updated/deleted. |
40 | */ |
41 | class KIOFILEWIDGETS_EXPORT : public KActionMenu |
42 | { |
43 | Q_OBJECT |
44 | public: |
45 | /*! |
46 | * Constructor. |
47 | * |
48 | * \a parent the parent object, for ownership. |
49 | * If the parent object is a widget, it will also be used as the parent widget |
50 | * for any dialogs that this class might show. Otherwise, call setParentWidget. |
51 | * |
52 | * \since 5.100 |
53 | */ |
54 | (QObject *parent); |
55 | |
56 | /*! |
57 | * Destructor. |
58 | * KNewMenu uses internally a globally shared cache, so that multiple instances |
59 | * of it don't need to parse the installed templates multiple times. Therefore |
60 | * you can safely create and delete KNewMenu instances without a performance issue. |
61 | */ |
62 | () override; |
63 | |
64 | /*! |
65 | * Returns the modality of dialogs |
66 | */ |
67 | bool () const; |
68 | |
69 | /*! |
70 | * Sets the modality of dialogs created by KNewFile. Set to false if you do not want to block |
71 | * your application window when entering a new directory name i.e. |
72 | */ |
73 | void (bool modality); |
74 | |
75 | /*! |
76 | * Sets a parent widget for the dialogs shown by KNewFileMenu. |
77 | * This is strongly recommended, for apps with a main window. |
78 | */ |
79 | void (QWidget *parentWidget); |
80 | |
81 | /*! |
82 | * Set the working directory. |
83 | * Files will be created relative to this directory. |
84 | * \since 5.97. |
85 | */ |
86 | void (const QUrl &directory); |
87 | |
88 | /*! |
89 | * Returns the working directory. |
90 | * Files will be created relative to this directory. |
91 | * \since 5.97. |
92 | */ |
93 | QUrl () const; |
94 | |
95 | /*! |
96 | * Only show the files in a given set of MIME types. |
97 | * This is useful in specialized applications (while file managers, on |
98 | * the other hand, want to show all MIME types). |
99 | */ |
100 | void (const QStringList &mime); |
101 | |
102 | /*! |
103 | * Returns the MIME types set in supportedMimeTypes() |
104 | */ |
105 | QStringList () const; |
106 | |
107 | /*! |
108 | * Whether on not the dialog should emit `selectExistingDir` when trying to create an exist directory |
109 | * |
110 | * default: false |
111 | * |
112 | * \since 5.76 |
113 | */ |
114 | void (bool b); |
115 | |
116 | /*! |
117 | * Use this to set a shortcut for the "New Folder" action. |
118 | * |
119 | * The shortcut is copied from \a action. |
120 | * |
121 | * \since 5.100 |
122 | */ |
123 | void (QAction *action); |
124 | |
125 | /*! |
126 | * Use this to set a shortcut for the new file action. |
127 | * |
128 | * The shortcut is copied from \a action. |
129 | * |
130 | * \since 5.100 |
131 | */ |
132 | void (QAction *action); |
133 | |
134 | /*! |
135 | * Use this to check if namejob for new directory creation still running. |
136 | * Namejob is what spawns the new directory dialog, which can be slow in, |
137 | * for example, network folders. |
138 | * |
139 | * \since 6.2 |
140 | */ |
141 | bool (); |
142 | |
143 | /*! |
144 | * Use this to check if the file creation process is still running. |
145 | * \since 6.2 |
146 | */ |
147 | bool (); |
148 | |
149 | /*! |
150 | * Allow to change the popup |
151 | * |
152 | * \since 6.11 |
153 | */ |
154 | void (const QString &title); |
155 | |
156 | public Q_SLOTS: |
157 | /*! |
158 | * Checks if updating the list is necessary |
159 | * IMPORTANT : Call this in the slot for aboutToShow. |
160 | */ |
161 | void (); |
162 | |
163 | /*! |
164 | * Call this to create a new directory as if the user had done it using |
165 | * a popupmenu. This is useful to make sure that creating a directory with |
166 | * a key shortcut (e.g. F10) triggers the exact same code as when using |
167 | * the New menu. |
168 | * Requirements: since 5.97 call setWorkingDirectory first (for older releases call setPopupFiles first), and keep this KNewFileMenu instance |
169 | * alive (the mkdir is async). |
170 | */ |
171 | void (); |
172 | |
173 | /*! |
174 | * Call this to create a new file as if the user had done it using |
175 | * a popupmenu. This is useful to make sure that creating a directory with |
176 | * a key shortcut (e.g. Shift-F10) triggers the exact same code as when using |
177 | * the New menu. |
178 | * Requirements: since 5.97 call setWorkingDirectory first (for older releases call setPopupFiles first), and keep this KNewFileMenu instance |
179 | * alive (the copy is async). |
180 | * \since 5.53 |
181 | */ |
182 | void (); |
183 | |
184 | Q_SIGNALS: |
185 | |
186 | /*! |
187 | * Emitted once the creation job for file @p url has been started |
188 | * \since 6.2 |
189 | */ |
190 | void (const QUrl &url); |
191 | |
192 | /*! |
193 | * Emitted once the file (or symlink) @p url has been successfully created |
194 | */ |
195 | void (const QUrl &url); |
196 | |
197 | /*! |
198 | * Emitted once the creation for file @p url has been rejected |
199 | * \since 6.2 |
200 | */ |
201 | void (const QUrl &url); |
202 | |
203 | /*! |
204 | * Emitted once the creation job for directory @p url has been started |
205 | * \since 6.2 |
206 | */ |
207 | void (const QUrl &url); |
208 | |
209 | /*! |
210 | * Emitted once the directory @p url has been successfully created |
211 | */ |
212 | void (const QUrl &url); |
213 | |
214 | /*! |
215 | * Emitted once the creation for directory @p url has been rejected |
216 | * \since 6.2 |
217 | */ |
218 | void (const QUrl &url); |
219 | |
220 | /*! |
221 | * Emitted when trying to create a new directory that has the same name as |
222 | * an existing one, so that KDirOperator can select the existing item in |
223 | * the view (in case the user wants to use that directory instead of creating |
224 | * a new one). |
225 | * |
226 | * \since 5.76 |
227 | */ |
228 | void (const QUrl &url); |
229 | |
230 | protected Q_SLOTS: |
231 | |
232 | /*! |
233 | * Called when the job that copied the template has finished. |
234 | * This method is virtual so that error handling can be reimplemented. |
235 | * Make sure to call the base class slotResult when !job->error() though. |
236 | */ |
237 | virtual void (KJob *job); |
238 | |
239 | private: |
240 | friend class KNewFileMenuPrivate; |
241 | std::unique_ptr<KNewFileMenuPrivate> const ; |
242 | }; |
243 | |
244 | #endif |
245 | |