1 /**************************************************************************
2 * Otter Browser: Web browser controlled by the user, not vice-versa.
3 * Copyright (C) 2015 - 2018 Michal Dutkiewicz aka Emdek <michal@emdek.pl>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 **************************************************************************/
19 
20 #ifndef OTTER_ACTIONCOMBOBOXWIDGET_H
21 #define OTTER_ACTIONCOMBOBOXWIDGET_H
22 
23 #include "ComboBoxWidget.h"
24 #include "../core/ActionsManager.h"
25 
26 #include <QtCore/QTime>
27 #include <QtGui/QMouseEvent>
28 #include <QtGui/QStandardItemModel>
29 
30 namespace Otter
31 {
32 
33 class LineEditWidget;
34 
35 class ActionComboBoxWidget final : public ComboBoxWidget
36 {
37 	Q_OBJECT
38 
39 public:
40 	enum DataRole
41 	{
42 		IdentifierRole = Qt::UserRole,
43 		NameRole
44 	};
45 
46 	explicit ActionComboBoxWidget(QWidget *parent = nullptr);
47 
48 	void setActionIdentifier(int action);
49 	int getActionIdentifier() const;
50 	bool eventFilter(QObject *object, QEvent *event) override;
51 
52 protected:
53 	void paintEvent(QPaintEvent *event) override;
54 	void mousePressEvent(QMouseEvent *event) override;
55 	void mouseReleaseEvent(QMouseEvent *event) override;
56 	void addDefinition(const ActionsManager::ActionDefinition &definition);
57 
58 private:
59 	LineEditWidget *m_filterLineEditWidget;
60 	QStandardItemModel *m_model;
61 	QTime m_popupHideTime;
62 	bool m_wasPopupVisible;
63 };
64 
65 }
66 
67 #endif
68