]> cloud.milkyroute.net Git - dolphin.git/blob - src/search/dolphinsearchbox.h
GIT_SILENT Sync po/docbooks with svn
[dolphin.git] / src / search / dolphinsearchbox.h
1 /*
2 * SPDX-FileCopyrightText: 2010 Peter Penz <peter.penz19@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #ifndef DOLPHINSEARCHBOX_H
8 #define DOLPHINSEARCHBOX_H
9
10 #include <QUrl>
11 #include <QWidget>
12
13 class DolphinFacetsWidget;
14 class DolphinQuery;
15 class QLineEdit;
16 class KSeparator;
17 class QToolButton;
18 class QScrollArea;
19 class QLabel;
20 class QVBoxLayout;
21 class KMoreToolsMenuFactory;
22
23 /**
24 * @brief Input box for searching files with or without Baloo.
25 *
26 * The widget allows to specify:
27 * - Where to search: Everywhere or below the current directory
28 * - What to search: Filenames or content
29 *
30 * If Baloo is available and the current folder is indexed, further
31 * options are offered.
32 */
33 class DolphinSearchBox : public QWidget
34 {
35 Q_OBJECT
36
37 public:
38 explicit DolphinSearchBox(QWidget *parent = nullptr);
39 ~DolphinSearchBox() override;
40
41 /**
42 * Sets the text that should be used as input for
43 * searching.
44 */
45 void setText(const QString &text);
46
47 /**
48 * Returns the text that should be used as input
49 * for searching.
50 */
51 QString text() const;
52
53 /**
54 * Sets the current path that is used as root for searching files.
55 * If @url is the Home dir, "From Here" is selected instead.
56 */
57 void setSearchPath(const QUrl &url);
58 QUrl searchPath() const;
59
60 /** @return URL that will start the searching of files. */
61 QUrl urlForSearching() const;
62
63 /**
64 * Extracts information from the given search \a url to
65 * initialize the search box properly.
66 */
67 void fromSearchUrl(const QUrl &url);
68
69 /**
70 * Selects the whole text of the search box.
71 */
72 void selectAll();
73
74 /**
75 * Set the search box to the active mode, if \a active
76 * is true. The active mode is default. The inactive mode only differs
77 * visually from the active mode, no change of the behavior is given.
78 *
79 * Using the search box in the inactive mode is useful when having split views,
80 * where the inactive view is indicated by an search box visually.
81 */
82 void setActive(bool active);
83
84 /**
85 * @return True, if the search box is in the active mode.
86 * @see DolphinSearchBox::setActive()
87 */
88 bool isActive() const;
89
90 protected:
91 bool event(QEvent *event) override;
92 void showEvent(QShowEvent *event) override;
93 void hideEvent(QHideEvent *event) override;
94 void keyReleaseEvent(QKeyEvent *event) override;
95 bool eventFilter(QObject *obj, QEvent *event) override;
96
97 Q_SIGNALS:
98 /**
99 * Is emitted when a searching should be triggered.
100 */
101 void searchRequest();
102
103 /**
104 * Is emitted when the user has changed a character of
105 * the text that should be used as input for searching.
106 */
107 void searchTextChanged(const QString &text);
108
109 /**
110 * Emitted as soon as the search box should get closed.
111 */
112 void closeRequest();
113
114 /**
115 * Is emitted, if the searchbox has been activated by
116 * an user interaction
117 * @see DolphinSearchBox::setActive()
118 */
119 void activated();
120 void focusViewRequest();
121
122 private Q_SLOTS:
123 void emitSearchRequest();
124 void emitCloseRequest();
125 void slotConfigurationChanged();
126 void slotSearchTextChanged(const QString &text);
127 void slotReturnPressed();
128 void slotFacetChanged();
129 void slotSearchSaved();
130
131 private:
132 void initButton(QToolButton *button);
133 void loadSettings();
134 void saveSettings();
135 void init();
136
137 /**
138 * @return URL that represents the Baloo query for starting the search.
139 */
140 QUrl balooUrlForSearching() const;
141
142 /**
143 * Sets the searchbox UI with the parameters established by the \a query
144 */
145 void updateFromQuery(const DolphinQuery &query);
146
147 void updateFacetsVisible();
148
149 bool isIndexingEnabled() const;
150
151 private:
152 QString queryTitle(const QString &text) const;
153
154 bool m_startedSearching;
155 bool m_active;
156
157 QVBoxLayout *m_topLayout;
158
159 QLineEdit *m_searchInput;
160 QAction *m_saveSearchAction;
161 QScrollArea *m_optionsScrollArea;
162 QToolButton *m_fileNameButton;
163 QToolButton *m_contentButton;
164 KSeparator *m_separator;
165 QToolButton *m_fromHereButton;
166 QToolButton *m_everywhereButton;
167 DolphinFacetsWidget *m_facetsWidget;
168
169 QUrl m_searchPath;
170 QScopedPointer<KMoreToolsMenuFactory> m_menuFactory;
171
172 QTimer *m_startSearchTimer;
173 };
174
175 #endif