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