1 //=========================================== 2 // Lumina-DE source code 3 // Copyright (c) 2012-2016, Ken Moore 4 // Available under the 3-clause BSD license 5 // See the LICENSE file for full details 6 //=========================================== 7 #ifndef _LUMINA_LIBRARY_RESIZE_MENU_H 8 #define _LUMINA_LIBRARY_RESIZE_MENU_H 9 10 #include <QMenu> 11 #include <QWidget> 12 #include <QMouseEvent> 13 #include <QAction> 14 #include <QWidgetAction> 15 #include <QRect> 16 #include <QCursor> 17 #include <QPoint> 18 19 //Special subclass for a menu which the user can grab the edges and resize as necessary 20 // Note: Make sure that you don't set 0pixel contents margins on this menu 21 // - it needs at least 1 pixel margins for the user to be able to grab it 22 class ResizeMenu : public QMenu{ 23 Q_OBJECT 24 public: 25 ResizeMenu(QWidget *parent = 0); 26 virtual ~ResizeMenu(); 27 28 void setContents(QWidget *con); 29 void resyncSize(); 30 31 private: 32 enum SideFlag{NONE, TOP, BOTTOM, LEFT, RIGHT}; 33 SideFlag resizeSide; 34 QWidget *contents; 35 QWidgetAction *cAct; 36 37 private slots: clearFlags()38 void clearFlags(){ 39 resizeSide=NONE; 40 } 41 42 protected: 43 virtual void mouseMoveEvent(QMouseEvent *ev); 44 virtual void mousePressEvent(QMouseEvent *ev); 45 virtual void mouseReleaseEvent(QMouseEvent *ev); 46 47 signals: 48 void MenuResized(QSize); //Emitted when the menu is manually resized by the user 49 50 }; 51 52 #endif 53