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