Modified test script. Added networkhandlerprivate and
[situare] / src / ui / zoombuttonpanel.cpp
index 63e57c3..7757918 100644 (file)
 #include "zoombutton.h"
 #include "common.h"
 
-ZoomButtonPanel::ZoomButtonPanel(QWidget *parent, int x, int y)
+ZoomButtonPanel::ZoomButtonPanel(QWidget *parent)
     : QWidget(parent),
-      m_zoomInButton(0),
-      m_zoomOutButton(0),
       m_isDraggable(false),
-      m_panelLayout(this)
+      m_panelLayout(this),
+      m_zoomInButton(0),
+      m_zoomOutButton(0)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
@@ -49,26 +49,36 @@ ZoomButtonPanel::ZoomButtonPanel(QWidget *parent, int x, int y)
     m_panelLayout.addWidget(m_zoomInButton, 0, 0);
     m_panelLayout.addWidget(m_zoomOutButton, 1, 0);
 
-    move(x, y);
+    QSettings settings(DIRECTORY_NAME, FILE_NAME);
+    move(settings.value(ZOOMPANEL_POSITION,
+                        QPoint(ZOOM_BUTTON_PANEL_POSITION_X,
+                               ZOOM_BUTTON_PANEL_POSITION_Y)).toPoint());
 
     QPalette pal = palette();
     pal.setColor(QPalette::Background, QColor(0, 0, 0, 128));
     setPalette(pal);
 
-    m_eventBlocker = new QWidget(this);
-    m_eventBlocker->setAttribute(Qt::WA_TransparentForMouseEvents, true);
-    m_eventBlocker->resize(size().width(),
-                           m_zoomInButton->size().height() * 2 + ZOOM_BUTTON_PANEL_BUTTON_SPACING);
-
-    connect(m_zoomInButton, SIGNAL(startDragMode(bool, QPoint)),
-            this, SLOT(setDraggable(bool, QPoint)));
-    connect(m_zoomOutButton, SIGNAL(startDragMode(bool, QPoint)),
-            this, SLOT(setDraggable(bool, QPoint)));
-
     m_dragStartTimer = new QTimer(this);
     m_dragStartTimer->setSingleShot(true);
+    m_dragStartTimer->setInterval(DRAG_INIT_TIME);
+
+    m_forceReleaseTimer = new QTimer(this);
+    m_forceReleaseTimer->setSingleShot(true);
+    m_forceReleaseTimer->setInterval(FORCE_RELEASE_TIME);
+
+    connect(m_zoomInButton, SIGNAL(pressed()),
+            m_dragStartTimer, SLOT(start()));
+    connect(m_zoomInButton, SIGNAL(released()),
+            m_dragStartTimer, SLOT(stop()));
+    connect(m_zoomOutButton, SIGNAL(pressed()),
+            m_dragStartTimer, SLOT(start()));
+    connect(m_zoomOutButton, SIGNAL(released()),
+            m_dragStartTimer, SLOT(stop()));
+
     connect(m_dragStartTimer, SIGNAL(timeout()),
             this, SLOT(timerExpired()));
+    connect(m_forceReleaseTimer, SIGNAL(timeout()),
+            this, SLOT(forceMouseRelease()));
 }
 
 void ZoomButtonPanel::mouseMoveEvent(QMouseEvent *event)
@@ -78,23 +88,24 @@ void ZoomButtonPanel::mouseMoveEvent(QMouseEvent *event)
     if(m_isDraggable) {
         if (event->buttons() & Qt::LeftButton) {
             QPoint newLocation = mapToParent(event->pos()) - m_dragPosition;
-            if (newLocation.x() < SIDEBAR_WIDTH) {
+
+            if (newLocation.x() < SIDEBAR_WIDTH)
                 newLocation.rx() = SIDEBAR_WIDTH;
-            }
-            else if (newLocation.x() > m_screenSize.width()
-                - m_eventBlocker->width()){
-                newLocation.rx() =  m_screenSize.width() - m_eventBlocker->width();
-            }
-            if (newLocation.y() < 0){
+            else if (newLocation.x() > m_screenSize.width() - width() - SIDEBAR_WIDTH)
+                newLocation.rx() =  m_screenSize.width() - width() - SIDEBAR_WIDTH;
+
+            if (newLocation.y() < 0)
                 newLocation.ry() = 0;
-            }
-            else if (newLocation.y() > m_screenSize.height() - m_eventBlocker->height()) {
-                newLocation.ry() = m_screenSize.height() - m_eventBlocker->height();
-            }
+            else if (newLocation.y() > m_screenSize.height() - height())
+                newLocation.ry() = m_screenSize.height() - height();
+
             move(newLocation);
-            event->accept();
         }
+    } else {
+        if(!rect().contains(event->pos()))
+            m_dragStartTimer->stop();
     }
+    QWidget::mouseMoveEvent(event);
 }
 
 void ZoomButtonPanel::mousePressEvent(QMouseEvent *event)
@@ -103,28 +114,37 @@ void ZoomButtonPanel::mousePressEvent(QMouseEvent *event)
 
     if (event->button() == Qt::LeftButton) {
         m_dragPosition = event->pos();
-        event->accept();
     }
-    m_dragStartTimer->start(DRAG_INIT_TIME);
+    m_dragStartTimer->start();
+    QWidget::mousePressEvent(event);
 }
 
 void ZoomButtonPanel::mouseReleaseEvent(QMouseEvent *event)
 {
+    qDebug() << __PRETTY_FUNCTION__;
+    
+    m_dragStartTimer->stop();
+
     Q_UNUSED(event);
-    setDraggable(false);
-    QSettings settings(DIRECTORY_NAME, FILE_NAME);
-    settings.setValue(ZOOMPANEL_POSITION, pos());
-    releaseMouse();
+    if(m_isDraggable) {
+        setDraggable(false);
+        QSettings settings(DIRECTORY_NAME, FILE_NAME);
+        settings.setValue(ZOOMPANEL_POSITION, pos());
+        releaseMouse();
+        m_zoomInButton->setDown(false);
+        m_zoomOutButton->setDown(false);
+    }
+    QWidget::mouseReleaseEvent(event);
 }
 
-const ImageButton* ZoomButtonPanel::zoomInButton()
+const ZoomButton* ZoomButtonPanel::zoomInButton()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
     return m_zoomInButton;
 }
 
-const ImageButton* ZoomButtonPanel::zoomOutButton()
+const ZoomButton* ZoomButtonPanel::zoomOutButton()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
@@ -155,33 +175,72 @@ void ZoomButtonPanel::resetButtons()
 
 void ZoomButtonPanel::setDraggable(bool mode, QPoint eventPosition)
 {
-    if(mode == true) {
-        m_eventBlocker->setAttribute(Qt::WA_TransparentForMouseEvents, false);
-        m_isDraggable = mode;
+    qDebug() << __PRETTY_FUNCTION__;
+
+    m_isDraggable = mode;
+
+    if(mode) {
         setAutoFillBackground(true);
+
         m_zoomInMode = m_zoomInButton->mode();
         m_zoomOutMode = m_zoomOutButton->mode();
+
         m_zoomInButton->setMode(QIcon::Disabled);
         m_zoomOutButton->setMode(QIcon::Disabled);
         grabMouse();
+        m_forceReleaseTimer->start();
         m_dragPosition = eventPosition;
-    }
-    else {
-        m_eventBlocker->setAttribute(Qt::WA_TransparentForMouseEvents, true);
-        m_isDraggable = mode;
+    } else {
         setAutoFillBackground(false);
-        m_zoomInButton->setMode(m_zoomInMode);
-        m_zoomOutButton->setMode(m_zoomOutMode);
+        if(m_zoomInMode == QIcon::Selected)
+            m_zoomInButton->setMode(QIcon::Normal);
+        else
+            m_zoomInButton->setMode(m_zoomInMode);
+        if(m_zoomOutMode == QIcon::Selected)
+            m_zoomOutButton->setMode(QIcon::Normal);
+        else
+            m_zoomOutButton->setMode(m_zoomOutMode);
         releaseMouse();
+        m_forceReleaseTimer->stop();
+        m_zoomInButton->setDown(false);
+        m_zoomOutButton->setDown(false);
     }
 }
 
-void ZoomButtonPanel::screenResized(const QSize &size)
+void ZoomButtonPanel::screenResized(const QSize &newSize)
 {
-    m_screenSize = size;
+    qDebug() << __PRETTY_FUNCTION__;
+    
+    m_screenSize = newSize;
+
+    QPoint resizedPosition = pos();
+    if(resizedPosition.x() > (newSize.width() - rect().width()) - SIDEBAR_WIDTH)
+        resizedPosition.rx() = newSize.width() - rect().width() - SIDEBAR_WIDTH;
+    else if (resizedPosition.x() < SIDEBAR_WIDTH)
+        resizedPosition.rx() = SIDEBAR_WIDTH;
+    if(resizedPosition.y() > (newSize.height() - rect().height()))
+        resizedPosition.ry() = newSize.height() - rect().height();
+    else if (resizedPosition.y() < 0)
+        resizedPosition.ry() = 0;
+    move(resizedPosition);
+}
+
+void ZoomButtonPanel::forceMouseRelease()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    releaseMouse();
+    setDraggable(false);
 }
 
 void ZoomButtonPanel::timerExpired()
 {
+    qDebug() << __PRETTY_FUNCTION__;
+    
+    if(m_zoomInButton->isDown())
+        m_dragPosition = m_zoomInButton->eventPosition();
+    if(m_zoomOutButton->isDown())
+        m_dragPosition = m_zoomOutButton->eventPosition();
+
     setDraggable(true, m_dragPosition);
 }