┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/search/dolphinsearchbox.h
blob: 5fc707e917c8ff3cf180e0c2da6d53d3ceb9a6e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/***************************************************************************
 *   Copyright (C) 2010 by Peter Penz <[email protected]>             *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
 ***************************************************************************/

#ifndef DOLPHINSEARCHBOX_H
#define DOLPHINSEARCHBOX_H

#include <kurl.h>
#include <QList>
#include <QWidget>

class AbstractSearchFilterWidget;
class KLineEdit;
class KSeparator;
class QFormLayout;
class QPushButton;
class QVBoxLayout;

/**
 * @brief Input box for searching files with or without Nepomuk.
 *
 * The widget allows to specify:
 * - Where to search: Everywhere or below the current directory
 * - What to search: Filenames or content
 *
 * If Nepomuk is available and the current folder is indexed, further
 * options are offered.
 */
class DolphinSearchBox : public QWidget {
    Q_OBJECT

public:
    DolphinSearchBox(QWidget* parent = 0);
    virtual ~DolphinSearchBox();

    /**
     * Returns the text that should be used as input
     * for searching.
     */
    QString text() const;

    /**
     * Sets the current path that is used as root for
     * searching files, if "From Here" has been selected.
     */
    void setSearchPath(const KUrl& url);
    KUrl searchPath() const;

    /** @return URL that will start the searching of files. */
    KUrl urlForSearching() const;

    /**
     * Selects the whole text of the search box.
     */
    void selectAll();

protected:
    virtual bool event(QEvent* event);
    virtual void showEvent(QShowEvent* event);
    virtual void keyReleaseEvent(QKeyEvent* event);

signals:
    /**
     * Is emitted when a searching should be triggered
     * and provides the text that should be used as input
     * for searching.
     */
    void search(const QString& text);

    /**
     * Is emitted when the user has changed a character of
     * the text that should be used as input for searching.
     */
    void searchTextChanged(const QString& text);

    void returnPressed(const QString& text);

    /**
     * Emitted as soon as the search box should get closed.
     */
    void closeRequest();

private slots:
    void emitSearchSignal();
    void slotConfigurationChanged();
    void slotSearchTextChanged(const QString& text);
    void slotReturnPressed(const QString& text);

private:
    void initButton(QPushButton* button);
    void loadSettings();
    void saveSettings();
    void init();

    /**
     * @return True, if the complete directory tree specified by m_searchPath
     *         is indexed by Strigi.
     */
    bool isSearchPathIndexed() const;

    /**
     * @return URL that represents the Nepomuk query for starting the search.
     */
    KUrl nepomukUrlForSearching() const;

private:
    bool m_startedSearching;
    bool m_nepomukActivated;

    QVBoxLayout* m_topLayout;

    KLineEdit* m_searchInput;
    QPushButton* m_fileNameButton;
    QPushButton* m_contentButton;
    KSeparator* m_separator;
    QPushButton* m_fromHereButton;
    QPushButton* m_everywhereButton;

    KUrl m_searchPath;

    QTimer* m_startSearchTimer;
};

#endif