| 
									
										
										
										
											2017-04-27 20:26:05 +02:00
										 |  |  | // SPDX-License-Identifier: GPL-2.0
 | 
					
						
							| 
									
										
										
										
											2013-04-27 12:27:27 -03:00
										 |  |  | #ifndef MODELDELEGATES_H
 | 
					
						
							|  |  |  | #define MODELDELEGATES_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-25 09:35:46 +02:00
										 |  |  | #include "core/units.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-02 19:27:36 -03:00
										 |  |  | #include <QStyledItemDelegate>
 | 
					
						
							| 
									
										
										
										
											2014-11-17 14:03:37 +00:00
										 |  |  | #include <QComboBox>
 | 
					
						
							| 
									
										
										
										
											2013-10-03 17:50:40 +03:00
										 |  |  | class QPainter; | 
					
						
							| 
									
										
										
										
											2013-04-27 12:27:27 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class DiveListDelegate : public QStyledItemDelegate { | 
					
						
							| 
									
										
										
										
											2013-12-11 21:44:05 -02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	explicit DiveListDelegate(QObject *parent = 0) | 
					
						
							|  |  |  | 	    : QStyledItemDelegate(parent) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; | 
					
						
							| 
									
										
										
										
											2013-12-11 21:44:05 -02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-02 19:27:36 -03:00
										 |  |  | class StarWidgetsDelegate : public QStyledItemDelegate { | 
					
						
							| 
									
										
										
										
											2013-04-27 12:27:27 -03:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	explicit StarWidgetsDelegate(QWidget *parent = 0); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							|  |  |  | 	QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							| 
									
										
										
										
											2014-10-15 15:30:49 +02:00
										 |  |  | 	const QSize& starSize() const; | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-02 19:27:36 -03:00
										 |  |  | private: | 
					
						
							|  |  |  | 	QWidget *parentWidget; | 
					
						
							| 
									
										
										
										
											2014-10-15 15:30:49 +02:00
										 |  |  | 	QSize minStarSize; | 
					
						
							| 
									
										
										
										
											2013-04-27 12:27:27 -03:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2013-05-22 14:11:49 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class ComboBoxDelegate : public QStyledItemDelegate { | 
					
						
							| 
									
										
										
										
											2013-05-22 14:11:49 -03:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-03-26 23:47:21 +02:00
										 |  |  | 	explicit ComboBoxDelegate(QAbstractItemModel *model, QObject *parent = 0, bool allowEdit = true); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							|  |  |  | 	void setEditorData(QWidget *editor, const QModelIndex &index) const override; | 
					
						
							|  |  |  | 	void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							|  |  |  | 	bool eventFilter(QObject *object, QEvent *event) override; | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | public | 
					
						
							|  |  |  | slots: | 
					
						
							|  |  |  | 	void testActivation(const QString &currString = QString()); | 
					
						
							| 
									
										
										
										
											2014-04-24 15:17:30 -03:00
										 |  |  | 	void testActivation(const QModelIndex &currIndex); | 
					
						
							| 
									
										
										
											
												Make the Qt ComboBox behave in a Better Way
So, the ComboBox is a beast, and when used on a Delegate
it's very hard to get things right, wich is a pitty, because
I overly like qt. So:
1 - Combobox needs to show the popup when user press ↓ and ↑ keys
2 - Combobox needs to select when user press enter, not twice.
3 - Combobox neesds to select when user selects from the mouse, not
pressing enter after.
4 - Combobox needs to not mess with stuff when moving around.
Everything that I listed there works on a non-delegate combobox,
but for some reason, a delegate missed those, so I reimplemented
all. not nice, but now we have a code that will work, I hope.
*fingers crossed*
Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
											
										 
											2013-09-25 16:37:24 -03:00
										 |  |  | 	//HACK: try to get rid of this in the future.
 | 
					
						
							|  |  |  | 	void fakeActivation(); | 
					
						
							| 
									
										
										
										
											2013-10-15 13:45:24 -03:00
										 |  |  | 	void fixTabBehavior(); | 
					
						
							| 
									
										
										
										
											2019-11-04 20:20:32 +01:00
										 |  |  | 	virtual void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) = 0; | 
					
						
							| 
									
										
										
										
											2017-03-26 23:47:21 +02:00
										 |  |  | private: | 
					
						
							|  |  |  | 	bool editable; | 
					
						
							| 
									
										
										
										
											2013-06-16 10:15:19 -03:00
										 |  |  | protected: | 
					
						
							|  |  |  | 	QAbstractItemModel *model; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class TankInfoDelegate : public ComboBoxDelegate { | 
					
						
							| 
									
										
										
										
											2013-06-16 10:15:19 -03:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	explicit TankInfoDelegate(QObject *parent = 0); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; | 
					
						
							|  |  |  | 	QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | public | 
					
						
							|  |  |  | slots: | 
					
						
							| 
									
										
										
										
											2019-11-04 20:20:32 +01:00
										 |  |  | 	void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint); | 
					
						
							| 
									
										
										
										
											2014-12-13 22:06:52 +01:00
										 |  |  | 	void reenableReplot(QWidget *widget, QAbstractItemDelegate::EndEditHint hint); | 
					
						
							| 
									
										
										
										
											2013-05-22 14:11:49 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-17 14:03:37 +00:00
										 |  |  | class TankUseDelegate : public QStyledItemDelegate { | 
					
						
							|  |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	explicit TankUseDelegate(QObject *parent = 0); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; | 
					
						
							|  |  |  | 	QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							|  |  |  | 	void setEditorData(QWidget * editor, const QModelIndex & index) const override; | 
					
						
							| 
									
										
										
										
											2014-11-17 14:03:37 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class WSInfoDelegate : public ComboBoxDelegate { | 
					
						
							| 
									
										
										
										
											2013-05-23 18:40:16 -07:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	explicit WSInfoDelegate(QObject *parent = 0); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | public | 
					
						
							|  |  |  | slots: | 
					
						
							| 
									
										
										
										
											2019-11-04 20:20:32 +01:00
										 |  |  | 	void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint); | 
					
						
							| 
									
										
										
										
											2013-05-23 18:40:16 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | class AirTypesDelegate : public ComboBoxDelegate { | 
					
						
							| 
									
										
										
										
											2013-08-30 07:14:30 -03:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	explicit AirTypesDelegate(QObject *parent = 0); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | public | 
					
						
							|  |  |  | slots: | 
					
						
							| 
									
										
										
										
											2019-11-04 20:20:32 +01:00
										 |  |  | 	void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint); | 
					
						
							| 
									
										
										
										
											2018-05-08 17:26:48 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DiveTypesDelegate : public ComboBoxDelegate { | 
					
						
							|  |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	explicit DiveTypesDelegate(QObject *parent = 0); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; | 
					
						
							| 
									
										
										
										
											2018-05-08 17:26:48 +02:00
										 |  |  | public | 
					
						
							|  |  |  | slots: | 
					
						
							| 
									
										
										
										
											2019-11-04 20:20:32 +01:00
										 |  |  | 	void editorClosed(QWidget *widget, QAbstractItemDelegate::EndEditHint hint); | 
					
						
							| 
									
										
										
										
											2013-08-30 07:14:30 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-11 17:42:43 -03:00
										 |  |  | class SpinBoxDelegate : public QStyledItemDelegate { | 
					
						
							|  |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-07-12 14:24:25 +02:00
										 |  |  | 	SpinBoxDelegate(int min, int max, int step, QObject *parent = 0); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							| 
									
										
										
										
											2014-07-11 17:42:43 -03:00
										 |  |  | private: | 
					
						
							|  |  |  | 	int min; | 
					
						
							|  |  |  | 	int max; | 
					
						
							| 
									
										
										
										
											2014-07-12 14:24:25 +02:00
										 |  |  | 	int step; | 
					
						
							| 
									
										
										
										
											2014-07-11 17:42:43 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DoubleSpinBoxDelegate : public QStyledItemDelegate { | 
					
						
							|  |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-07-12 14:24:25 +02:00
										 |  |  | 	DoubleSpinBoxDelegate(double min, double max, double step, QObject *parent = 0); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							| 
									
										
										
										
											2014-07-11 17:42:43 -03:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2014-07-12 14:24:24 +02:00
										 |  |  | 	double min; | 
					
						
							|  |  |  | 	double max; | 
					
						
							| 
									
										
										
										
											2014-07-12 14:24:25 +02:00
										 |  |  | 	double step; | 
					
						
							| 
									
										
										
										
											2014-07-11 17:42:43 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-01 19:31:56 -03:00
										 |  |  | class LocationFilterDelegate : public QStyledItemDelegate { | 
					
						
							|  |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	LocationFilterDelegate(QObject *parent = 0); | 
					
						
							| 
									
										
										
										
											2018-09-29 22:13:44 +02:00
										 |  |  | 	void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							|  |  |  | 	QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; | 
					
						
							| 
									
										
										
										
											2019-04-25 09:35:46 +02:00
										 |  |  | 	void setCurrentLocation(location_t loc); | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  | 	location_t currentLocation; | 
					
						
							| 
									
										
										
										
											2015-07-01 19:31:56 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-11 19:14:46 +01:00
										 |  |  | #endif // MODELDELEGATES_H
 |