| 1 | /* |
| 2 | This file is part of the KDE libraries |
| 3 | SPDX-FileCopyrightText: 2000 David Smith <dsmith@algonet.se> |
| 4 | |
| 5 | This class was inspired by a previous KUrlCompletion by |
| 6 | SPDX-FileContributor: Henner Zeller <zeller@think.de> |
| 7 | |
| 8 | SPDX-License-Identifier: LGPL-2.0-or-later |
| 9 | */ |
| 10 | |
| 11 | #ifndef KURLCOMPLETION_H |
| 12 | #define KURLCOMPLETION_H |
| 13 | |
| 14 | #include "kiowidgets_export.h" |
| 15 | #include <kio/udsentry.h> |
| 16 | |
| 17 | #include <KCompletion> |
| 18 | |
| 19 | #include <QString> |
| 20 | #include <QStringList> |
| 21 | |
| 22 | #include <memory> |
| 23 | |
| 24 | namespace KIO |
| 25 | { |
| 26 | class Job; |
| 27 | } |
| 28 | |
| 29 | class KUrlCompletionPrivate; |
| 30 | |
| 31 | /*! |
| 32 | * \class KUrlCompletion |
| 33 | * \inmodule KIOWidgets |
| 34 | * |
| 35 | * \brief Completion of a single URL. |
| 36 | * |
| 37 | * This class does completion of URLs including user directories (~user) |
| 38 | * and environment variables. Remote URLs are passed to KIO. |
| 39 | */ |
| 40 | class KIOWIDGETS_EXPORT KUrlCompletion : public KCompletion |
| 41 | { |
| 42 | Q_OBJECT |
| 43 | |
| 44 | public: |
| 45 | /*! |
| 46 | * Determines how completion is done. |
| 47 | * \value ExeCompletion executables in $PATH or with full path. |
| 48 | * \value FileCompletion all files with full path or in dir(), URLs |
| 49 | * are listed using KIO. |
| 50 | * \value DirCompletion Same as FileCompletion but only returns directories. |
| 51 | */ |
| 52 | enum Mode { |
| 53 | ExeCompletion = 1, |
| 54 | FileCompletion, |
| 55 | DirCompletion |
| 56 | }; |
| 57 | |
| 58 | /*! |
| 59 | * Constructs a KUrlCompletion object in FileCompletion mode. |
| 60 | */ |
| 61 | KUrlCompletion(); |
| 62 | /*! |
| 63 | * This overloaded constructor allows you to set the Mode to ExeCompletion |
| 64 | * or FileCompletion without using setMode. Default is FileCompletion. |
| 65 | */ |
| 66 | KUrlCompletion(Mode); |
| 67 | |
| 68 | ~KUrlCompletion() override; |
| 69 | |
| 70 | /*! |
| 71 | * Finds completions to the given text. |
| 72 | * |
| 73 | * Remote URLs are listed with KIO. For performance reasons, local files |
| 74 | * are listed with KIO only if KURLCOMPLETION_LOCAL_KIO is set. |
| 75 | * The completion is done asynchronously if KIO is used. |
| 76 | * |
| 77 | * Returns the first match for user, environment, and local dir completion |
| 78 | * and QString() for asynchronous completion (KIO or threaded). |
| 79 | * |
| 80 | * \a text the text to complete |
| 81 | * |
| 82 | * Returns the first match, or QString() if not found |
| 83 | */ |
| 84 | QString makeCompletion(const QString &text) override; |
| 85 | |
| 86 | /*! |
| 87 | * Sets the current directory (used as base for completion). |
| 88 | * Default = $HOME. |
| 89 | * |
| 90 | * \a dir the current directory, as a URL (use QUrl::fromLocalFile for local paths) |
| 91 | */ |
| 92 | virtual void setDir(const QUrl &dir); |
| 93 | |
| 94 | /*! |
| 95 | * Returns the current directory, as it was given in setDir, as a URL (use QUrl::toLocalFile for local paths) |
| 96 | */ |
| 97 | virtual QUrl dir() const; |
| 98 | |
| 99 | /*! |
| 100 | * Check whether asynchronous completion is in progress. |
| 101 | */ |
| 102 | virtual bool isRunning() const; |
| 103 | |
| 104 | /*! |
| 105 | * Stops asynchronous completion. |
| 106 | */ |
| 107 | virtual void stop(); |
| 108 | |
| 109 | /*! |
| 110 | * Returns the completion mode: exe or file completion (default FileCompletion). |
| 111 | */ |
| 112 | virtual Mode mode() const; |
| 113 | |
| 114 | /*! |
| 115 | * Changes the completion mode: exe or file completion |
| 116 | * |
| 117 | * \a mode the new completion mode |
| 118 | */ |
| 119 | virtual void setMode(Mode mode); |
| 120 | |
| 121 | /*! |
| 122 | * Checks whether environment variables are completed and |
| 123 | * whether they are replaced internally while finding completions. |
| 124 | * |
| 125 | * Default is enabled. |
| 126 | * |
| 127 | * Returns true if environment variables will be replaced |
| 128 | */ |
| 129 | virtual bool replaceEnv() const; |
| 130 | |
| 131 | /*! |
| 132 | * Enables/disables completion and replacement (internally) of |
| 133 | * environment variables in URLs. Default is enabled. |
| 134 | * |
| 135 | * \a replace true to replace environment variables |
| 136 | */ |
| 137 | virtual void setReplaceEnv(bool replace); |
| 138 | |
| 139 | /*! |
| 140 | * Returns whether ~username is completed and whether ~username |
| 141 | * is replaced internally with the user's home directory while |
| 142 | * finding completions. Default is enabled. |
| 143 | * |
| 144 | * Returns true to replace tilde with the home directory |
| 145 | */ |
| 146 | virtual bool replaceHome() const; |
| 147 | |
| 148 | /*! |
| 149 | * Enables/disables completion of ~username and replacement |
| 150 | * (internally) of ~username with the user's home directory. |
| 151 | * Default is enabled. |
| 152 | * |
| 153 | * \a replace true to replace tilde with the home directory |
| 154 | */ |
| 155 | virtual void setReplaceHome(bool replace); |
| 156 | |
| 157 | /*! |
| 158 | * Replaces username and/or environment variables, depending on the |
| 159 | * current settings and returns the filtered url. Only works with |
| 160 | * local files, i.e. returns back the original string for non-local |
| 161 | * urls. |
| 162 | * |
| 163 | * \a text the text to process |
| 164 | * |
| 165 | * Returns the path or URL resulting from this operation. If you |
| 166 | * want to convert it to a QUrl, use QUrl::fromUserInput. |
| 167 | */ |
| 168 | QString replacedPath(const QString &text) const; |
| 169 | |
| 170 | /*! |
| 171 | * \internal I'll let ossi add a real one to KShell :) |
| 172 | */ |
| 173 | static QString replacedPath(const QString &text, bool replaceHome, bool replaceEnv = true); |
| 174 | |
| 175 | /*! |
| 176 | * Sets the MIME type filters for the file dialog. |
| 177 | * \sa QFileDialog::setMimeTypeFilters() |
| 178 | * \since 5.38 |
| 179 | */ |
| 180 | void setMimeTypeFilters(const QStringList &mimeTypes); |
| 181 | |
| 182 | /*! |
| 183 | * Returns the MIME type filters for the file dialog. |
| 184 | * \sa QFileDialog::mimeTypeFilters() |
| 185 | * \since 5.38 |
| 186 | */ |
| 187 | QStringList mimeTypeFilters() const; |
| 188 | |
| 189 | protected: |
| 190 | // Called by KCompletion, adds '/' to directories |
| 191 | void postProcessMatch(QString *match) const override; |
| 192 | void postProcessMatches(QStringList *matches) const override; |
| 193 | void postProcessMatches(KCompletionMatches *matches) const override; |
| 194 | |
| 195 | private: |
| 196 | std::unique_ptr<KUrlCompletionPrivate> const d; |
| 197 | }; |
| 198 | |
| 199 | #endif // KURLCOMPLETION_H |
| 200 | |