MNE-CPP  0.1.9
A Framework for Electrophysiology
draggableframelesswidget.cpp
Go to the documentation of this file.
1 //=============================================================================================================
35 //=============================================================================================================
36 // INCLUDES
37 //=============================================================================================================
38 
40 
41 //=============================================================================================================
42 // QT INCLUDES
43 //=============================================================================================================
44 
45 #include <QWidget>
46 #include <QMouseEvent>
47 
48 //=============================================================================================================
49 // EIGEN INCLUDES
50 //=============================================================================================================
51 
52 //=============================================================================================================
53 // USED NAMESPACES
54 //=============================================================================================================
55 
56 using namespace DISPLIB;
57 
58 //=============================================================================================================
59 // DEFINE MEMBER METHODS
60 //=============================================================================================================
61 
63  Qt::WindowFlags flags,
64  bool bRoundEdges,
65  bool bDraggable,
66  bool bFrameless)
67 : QWidget(parent, flags)
68 , m_bRoundEdges(bRoundEdges)
69 , m_bDraggable(bDraggable)
70 , m_bMousePressed(false)
71 {
72  this->setWindowFlag(Qt::CustomizeWindowHint, bFrameless);
73  this->adjustSize();
74 }
75 
76 //=============================================================================================================
77 
79 {
80 }
81 
82 //=============================================================================================================
83 
85 {
86  m_bDraggable = bFlag;
87 }
88 
89 //=============================================================================================================
90 
92 {
93  if(!m_bDraggable) {
94  return QWidget::mousePressEvent(event);
95  }
96 
97  if (event->button() == Qt::LeftButton) {
98  m_dragPosition = event->globalPos() - frameGeometry().topLeft();
99  event->accept();
100  m_bMousePressed = true;
101  }
102 }
103 
104 //=============================================================================================================
105 
107 {
108  if(!m_bDraggable) {
109  return QWidget::mouseMoveEvent(event);
110  }
111 
112  if (event->buttons() && Qt::LeftButton && m_bMousePressed) {
113  move(event->globalPos() - m_dragPosition);
114  event->accept();
115  }
116 }
117 
118 //=============================================================================================================
119 
121 {
122  if(event->button() == Qt::LeftButton) {
123  m_bMousePressed = false;
124  }
125 }
126 
127 //=============================================================================================================
128 
129 void DraggableFramelessWidget::resizeEvent(QResizeEvent * /* event */)
130 {
131  if(m_bRoundEdges) {
132  setMask(roundedRect(QRect(0,0,width(),height()),10));
133  }
134 }
135 
136 //=============================================================================================================
137 
138 QRegion DraggableFramelessWidget::roundedRect(const QRect& rect, int r)
139 {
140  QRegion region;
141  // middle and borders
142  region += rect.adjusted(r, 0, -r, 0);
143  region += rect.adjusted(0, r, 0, -r);
144  // top left
145  QRect corner(rect.topLeft(), QSize(r*2, r*2));
146  region += QRegion(corner, QRegion::Ellipse);
147  // top right
148  corner.moveTopRight(rect.topRight());
149  region += QRegion(corner, QRegion::Ellipse);
150  // bottom left
151  corner.moveBottomLeft(rect.bottomLeft());
152  region += QRegion(corner, QRegion::Ellipse);
153  // bottom right
154  corner.moveBottomRight(rect.bottomRight());
155  region += QRegion(corner, QRegion::Ellipse);
156  return region;
157 }
Declaration of the DraggableFramelessWidget Class.
DraggableFramelessWidget(QWidget *parent=0, Qt::WindowFlags flags=0, bool bRoundEdges=false, bool bDraggable=true, bool bFrameless=true)
QRegion roundedRect(const QRect &rect, int r)