1 /*************************************************************************** 2 * Copyright (c) 2008 Jeff Mitchell <mitchell@kde.org> * 3 * * 4 * This program is free software; you can redistribute it and/or modify * 5 * it under the terms of the GNU General Public License as published by * 6 * the Free Software Foundation; either version 2 of the License, or * 7 * (at your option) any later version. * 8 * * 9 * This program is distributed in the hope that it will be useful, * 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 12 * GNU General Public License for more details. * 13 * * 14 * You should have received a copy of the GNU General Public License * 15 * along with this program; if not, write to the * 16 * Free Software Foundation, Inc., * 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * 18 ***************************************************************************/ 19 20 #ifndef POPUPDROPPERITEM_H 21 #define POPUPDROPPERITEM_H 22 23 #include <QGraphicsSvgItem> 24 #include <QString> 25 #include <QFont> 26 27 #include "PopupDropper_Export.h" 28 29 class QDropEvent; 30 class QGraphicsTextItem; 31 class QSvgRenderer; 32 class QAction; 33 class PopupDropper; 34 class PopupDropperItemPrivate; 35 36 class POPUPDROPPER_EXPORT PopupDropperItem : public QObject, public QAbstractGraphicsShapeItem 37 { 38 Q_OBJECT 39 40 Q_PROPERTY( HoverIndicatorShowStyle hoverIndicatorShowStyle READ hoverIndicatorShowStyle WRITE setHoverIndicatorShowStyle ) 41 Q_PROPERTY( Orientation orientation READ orientation WRITE setOrientation ) 42 Q_PROPERTY( TextProtection textProtection READ textProtection WRITE setTextProtection ) 43 Q_PROPERTY( QAction* action READ action WRITE setAction ) 44 Q_PROPERTY( QString text READ text WRITE setText ) 45 Q_PROPERTY( QFont font READ font WRITE setFont ) 46 Q_PROPERTY( QGraphicsTextItem* textItem READ textItem WRITE setTextItem ) 47 Q_PROPERTY( QGraphicsRectItem* borderRectItem READ borderRectItem WRITE setBorderRectItem ) 48 Q_PROPERTY( QGraphicsSvgItem* svgItem READ svgItem ) 49 Q_PROPERTY( QSvgRenderer* sharedRenderer READ sharedRenderer WRITE setSharedRenderer ) 50 Q_PROPERTY( QString elementId READ elementId WRITE setElementId ) 51 Q_PROPERTY( QRect svgElementRect READ svgElementRect WRITE setSvgElementRect ) 52 Q_PROPERTY( int horizontalOffset READ horizontalOffset WRITE setHorizontalOffset ) 53 Q_PROPERTY( int textOffset READ textOffset WRITE setTextOffset ) 54 Q_PROPERTY( int hoverMsecs READ hoverMsecs WRITE setHoverMsecs ) 55 Q_PROPERTY( int borderWidth READ borderWidth WRITE setBorderWidth ) 56 Q_PROPERTY( int hoverIndicatorRectWidth READ hoverIndicatorRectWidth WRITE setHoverIndicatorRectWidth ) 57 Q_PROPERTY( bool submenuTrigger READ isSubmenuTrigger WRITE setSubmenuTrigger ) 58 Q_PROPERTY( QColor baseTextColor READ baseTextColor WRITE setBaseTextColor ) 59 Q_PROPERTY( QColor hoveredTextColor READ hoveredTextColor WRITE setHoveredTextColor ) 60 Q_PROPERTY( QPen hoveredBorderPen READ hoveredBorderPen WRITE setHoveredBorderPen ) 61 Q_PROPERTY( QBrush hoveredBrush READ hoveredFillBrush WRITE setHoveredFillBrush ) 62 Q_PROPERTY( QBrush hoverIndicatorBrush READ hoverIndicatorFillBrush WRITE setHoverIndicatorFillBrush ) 63 Q_PROPERTY( bool customBaseTextColor READ customBaseTextColor ) 64 Q_PROPERTY( bool customHoveredTextColor READ customHoveredTextColor ) 65 Q_PROPERTY( bool customHoveredBorderPen READ customHoveredBorderPen ) 66 Q_PROPERTY( bool customHoveredFillBrush READ customHoveredFillBrush ) 67 Q_PROPERTY( qreal subitemOpacity READ subitemOpacity WRITE setSubitemOpacity ) 68 Q_PROPERTY( bool separator READ isSeparator WRITE setSeparator ) 69 Q_PROPERTY( PopupDropperItem::SeparatorStyle separatorStyle READ separatorStyle WRITE setSeparatorStyle ) 70 Q_PROPERTY( bool hasLineSeparatorPen READ hasLineSeparatorPen ) 71 Q_PROPERTY( QPen lineSeparatorPen READ lineSeparatorPen WRITE setLineSeparatorPen ) 72 73 public: 74 enum HoverIndicatorShowStyle { Never, OnHover, AlwaysShow }; 75 Q_ENUM( HoverIndicatorShowStyle ) 76 enum Orientation { Left, Right }; 77 Q_ENUM( Orientation ) 78 enum TextProtection { NoProtection, MultiLine, ScaleFont }; 79 Q_ENUM( TextProtection ) 80 enum SeparatorStyle { TextSeparator, LineSeparator }; 81 Q_ENUM( SeparatorStyle ) 82 83 PopupDropperItem( QGraphicsItem *parent = nullptr ); 84 explicit PopupDropperItem( const QString &file, QGraphicsItem *parent = nullptr ); 85 ~PopupDropperItem() override; 86 87 void show(); 88 89 QAction* action() const; 90 void setAction( QAction *action ); 91 92 HoverIndicatorShowStyle hoverIndicatorShowStyle() const; 93 void setHoverIndicatorShowStyle( HoverIndicatorShowStyle hover ); 94 Orientation orientation() const; 95 void setOrientation( Orientation orientation ); 96 TextProtection textProtection() const; 97 void setTextProtection( TextProtection protection ); 98 99 QString text() const; 100 void setText( const QString &text ); 101 QFont font() const; 102 void setFont( const QFont &font ); 103 QColor baseTextColor() const; 104 void setBaseTextColor( const QColor &color ); 105 QColor hoveredTextColor() const; 106 void setHoveredTextColor( const QColor &color ); 107 QPen hoveredBorderPen() const; 108 void setHoveredBorderPen( const QPen &pen ); 109 QBrush hoveredFillBrush() const; 110 void setHoveredFillBrush( const QBrush &brush ); 111 QBrush hoverIndicatorFillBrush() const; 112 void setHoverIndicatorFillBrush( const QBrush &brush ); 113 bool customBaseTextColor() const; 114 bool customHoveredTextColor() const; 115 bool customHoveredBorderPen() const; 116 bool customHoveredFillBrush() const; 117 void setSubitemOpacity( qreal opacity ); 118 qreal subitemOpacity() const; 119 120 QGraphicsTextItem* textItem() const; 121 void setTextItem( QGraphicsTextItem *textItem ); 122 void scaleAndReposSvgItem(); 123 void reposTextItem(); 124 void reposHoverFillRects(); 125 QGraphicsRectItem* borderRectItem() const; 126 void setBorderRectItem( QGraphicsRectItem *borderRectItem ); 127 QGraphicsSvgItem* svgItem() const; 128 129 QSvgRenderer* sharedRenderer() const; 130 void setSharedRenderer( QSvgRenderer *renderer ); 131 QString elementId() const; 132 void setElementId( const QString &id ); 133 QRect svgElementRect() const; 134 void setSvgElementRect( const QRect &rect ); 135 int horizontalOffset() const; 136 void setHorizontalOffset( int offset ); 137 int textOffset() const; 138 void setTextOffset( int offset ); 139 140 bool isSeparator() const; 141 void setSeparator( bool separator ); 142 PopupDropperItem::SeparatorStyle separatorStyle() const; 143 void setSeparatorStyle( PopupDropperItem::SeparatorStyle style ); 144 bool hasLineSeparatorPen() const; 145 QPen lineSeparatorPen() const; 146 void setLineSeparatorPen( const QPen &pen ); 147 void clearLineSeparatorPen(); 148 149 int hoverMsecs() const; 150 void setHoverMsecs( const int msecs ); 151 void hoverEntered(); 152 void hoverLeft(); 153 154 int borderWidth() const; 155 void setBorderWidth( int width ); 156 int hoverIndicatorRectWidth() const; 157 void setHoverIndicatorRectWidth( int width ); 158 159 bool isSubmenuTrigger() const; 160 void setSubmenuTrigger( bool trigger ); 161 162 void setPopupDropper( PopupDropper* pd ); 163 164 //bool operator<( const PopupDropperItem &other ) const; 165 166 void fullUpdate(); 167 168 QRectF boundingRect() const override; 169 void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr ) override; 170 171 public Q_SLOTS: 172 virtual void dropped( QDropEvent *event ); 173 virtual void hoverFinished(); 174 virtual void hoverFrameChanged( int frame ); 175 176 private: 177 friend class PopupDropperItemPrivate; 178 PopupDropperItemPrivate* const d; 179 180 }; 181 182 #endif 183