controller: prepare for expanding of docking feature 82/29382/2
authorGiWoong Kim <giwoong.kim@samsung.com>
Wed, 8 Oct 2014 11:30:43 +0000 (20:30 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Mon, 27 Oct 2014 09:55:06 +0000 (02:55 -0700)
Change-Id: I76c87856a15730f2e62f7e855fd0bec1342afa33
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/display/qt5_supplement.cpp
tizen/src/ui/dockingcontroller.cpp
tizen/src/ui/dockingcontroller.h
tizen/src/ui/dockingconview.cpp
tizen/src/ui/floatingcontroller.cpp
tizen/src/ui/floatingconview.cpp
tizen/src/ui/floatingconview.h
tizen/src/ui/mainwindow.cpp
tizen/src/ui/mainwindow.h
tizen/src/ui/menu/contextmenu.cpp
tizen/src/ui/uiinformation.cpp

index 28c860735fd8815819210724661f22c3acb9a221..422cd8a8b459274d8327fb034ae6583a7e88df10 100644 (file)
@@ -185,7 +185,7 @@ void qt5_gui_init(void)
 
     int conIndex = mruInfo.value(SKIN_PROPERTY_CONTROLLER_INDEX).toInt();
     if (conIndex >= 0 && conIndex < uiInfo->conFormList.count()) {
-        mainwindow->openController(conIndex, true);
+        mainwindow->openController(conIndex, Qt::AlignRight | Qt::AlignCenter);
     }
 
     mainwindow->startSwapper();
index d1b29db86adf9ad097b6f4a9d3d4a0c7cfc9cbc7..8c2a811f95cebb648a6be373f490869c1455c490 100644 (file)
  *
  */
 
-#include <QtWidgets>
-
 #include "dockingcontroller.h"
 #include "mainwindow.h"
 
-DockingController::DockingController(ControllerForm *conForm, QGraphicsScene *conScene,
-    QAction *menu, QWidget *parent) : DockingConView(conForm, conScene, parent)
+DockingController::DockingController(int dockPos, ControllerForm *conForm,
+    QGraphicsScene *conScene, QAction *menu, QWidget *parent)
+        : DockingConView(conForm, conScene, parent)
 {
+    this->dockPos = dockPos;
     this->conForm = conForm;
     this->menu = menu;
 
@@ -42,6 +42,11 @@ DockingController::DockingController(ControllerForm *conForm, QGraphicsScene *co
     setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
 }
 
+int DockingController::getDockPos()
+{
+    return dockPos;
+}
+
 void DockingController::showEvent(QShowEvent *event)
 {
     if (menu != NULL) {
index 95ce795a6adf2313cc65da15f2b4d1a237c13502..ddd9b0deddcf25c775c8efaf29f40334854415fd 100644 (file)
@@ -40,10 +40,12 @@ class DockingController : public DockingConView
     Q_OBJECT
 
 public:
-    explicit DockingController(ControllerForm *conForm, QGraphicsScene *conScene,
-        QAction *menu, QWidget *parent = 0);
+    explicit DockingController(int dockPos, ControllerForm *conForm,
+        QGraphicsScene *conScene, QAction *menu, QWidget *parent = 0);
     ~DockingController();
 
+    int getDockPos();
+
 protected:
     void showEvent(QShowEvent *event);
     void closeEvent(QCloseEvent *event);
@@ -51,6 +53,7 @@ protected:
     void setRegion(QImage baseImage);
 
 private:
+    int dockPos;
     ControllerForm *conForm;
     QAction *menu;
 };
index 84725cb7315740fccf4e21bf0dad198459bd328f..d69ede3eba22e77dc5e16e8cd5736a9722ce57e0 100644 (file)
@@ -114,7 +114,7 @@ void DockingConView::mouseReleaseEvent(QMouseEvent *event)
             MainWindow *win = ((MainWindow *)this->parent());
             win->getUIState()->conState.recentlyFloatPos = event->globalPos() - eventPos;
 
-            win->openController(win->getUIState()->conState.conFormIndex, false);
+            win->openController(win->getUIState()->conState.conFormIndex, -1);
             return;
         }
     }
index f4889b26b97d1a04f20a1fff76033d9c800364a2..dc2cc0ceb370c5580116bbfdb55a14da1f2857d0 100644 (file)
@@ -27,8 +27,6 @@
  *
  */
 
-#include <QtWidgets>
-
 #include "floatingcontroller.h"
 #include "mainwindow.h"
 
index a798e3247d22c9e6f3113640504b1829266039a1..c79df1baa742752c255fc7f7ff9fedb61baa7dfc 100644 (file)
@@ -37,7 +37,6 @@ FloatingConView::FloatingConView(ControllerForm *conForm, QGraphicsScene *scene,
     QGraphicsView(scene, parent)
 {
     setStyleSheet("background: transparent");
-    //setAttribute(Qt::WA_TranslucentBackground);
     setStyleSheet("border-style: none");
 
     setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -76,6 +75,43 @@ void FloatingConView::resizeEvent(QResizeEvent *event)
     Q_UNUSED(event)
 }
 
+int FloatingConView::isDockable(QWidget *object, QWidget *subject)
+{
+    const int heightOneThird = object->size().height() / 3;
+
+    /* MainWindow */
+    QRect rectDockableRC(object->pos().x() + object->size().width() - 1,
+        object->pos().y() + heightOneThird,
+        DOCKABLE_AREA_WIDTH,
+        heightOneThird);
+
+    QRect rectDockableRT(object->pos().x() + object->size().width() - 1,
+            object->pos().y(),
+            DOCKABLE_AREA_WIDTH,
+            heightOneThird);
+
+    QRect rectDockableRB(object->pos().x() + object->size().width() - 1,
+            object->pos().y() + (heightOneThird * 2),
+            DOCKABLE_AREA_WIDTH,
+            heightOneThird);
+
+    /* ControllerWidget */
+    QRect rectTarget(subject->pos().x() - 1,
+        subject->pos().y(),
+        DOCKABLE_AREA_WIDTH,
+        subject->size().height());
+
+    if (rectTarget.intersects(rectDockableRC) == true) {
+        return Qt::AlignRight | Qt::AlignCenter;
+    } else if (rectTarget.intersects(rectDockableRT) == true) {
+        return Qt::AlignRight | Qt::AlignTop;
+    } else if (rectTarget.intersects(rectDockableRB) == true) {
+        return Qt::AlignRight | Qt::AlignBottom;
+    }
+
+    return -1;
+}
+
 void FloatingConView::mousePressEvent(QMouseEvent *event)
 {
     QGraphicsView::mousePressEvent(event);
@@ -105,22 +141,13 @@ void FloatingConView::mouseReleaseEvent(QMouseEvent *event)
     }
 
     QWidget *con = ((QWidget *)this->parent());
-    QRect conDockable(
-        con->pos().x() - 1,
-        con->pos().y(),
-        DOCKABLE_AREA_WIDTH,
-        size().height());
-
-    MainWindow *win = ((MainWindow *)con->parent());
-    QRect mainDockable(
-        win->pos().x() + win->uiInfo->getMainSize().width() - 1,
-        win->pos().y(),
-        DOCKABLE_AREA_WIDTH,
-        win->uiInfo->getMainSize().height());
+    QWidget *dst = ((QWidget *)con->parent());
 
-    if (conDockable.intersects(mainDockable) == true) {
+    int dockPos = isDockable(dst, con);
+    if (dockPos != -1) {
         /* toggle */
-        win->openController(win->getUIState()->conState.conFormIndex, true);
+        MainWindow *win = (MainWindow *)dst;
+        win->openController(win->getUIState()->conState.conFormIndex, dockPos);
         return;
     }
 }
index 81fa6d9762243ba8371e65a06debb87025767c22..506a3890744fc420268b5aa95b76d39c3fd0e621 100644 (file)
@@ -41,8 +41,8 @@ public:
     ~FloatingConView();
 
 protected:
+    int isDockable(QWidget *object, QWidget *subject);
     void resizeEvent(QResizeEvent *event);
-
     void mousePressEvent(QMouseEvent *event);
     void mouseReleaseEvent(QMouseEvent *event);
     void mouseMoveEvent(QMouseEvent *event);
index 06fc2c12cb0d04cf924e498f8cd35c2d1e7889d3..3599c49bc780246308b9f1cdaa9d02671cfc0d46 100644 (file)
@@ -198,9 +198,20 @@ FloatingController *MainWindow::getFloatingCon()
     return getUIState()->conState.floatingCon;
 }
 
-void MainWindow::openController(int index, bool docking)
+void MainWindow::openController(int index, int dockPos)
 {
-    qDebug("open %s controller %d", (docking)? "docking" : "floating", index);
+    if (dockPos == (Qt::AlignRight | Qt::AlignCenter)) {
+        qDebug("open right-center docking controller %d", index);
+    } else if (dockPos == (Qt::AlignRight | Qt::AlignTop)) {
+        qDebug("open right-top docking controller %d", index);
+    } else if (dockPos == (Qt::AlignRight | Qt::AlignBottom)) {
+        qDebug("open right-bottom docking controller %d", index);
+    } else if (dockPos == -1) {
+        qDebug("open floating controller %d", index);
+    } else {
+        qDebug("invalid dock position : %d", dockPos);
+        dockPos = -1;
+    }
 
     closeController();
 
@@ -221,23 +232,22 @@ void MainWindow::openController(int index, bool docking)
     }
 
     /* create */
-    if (docking == true) {
+    if (dockPos == -1) {
+        getUIState()->conState.floatingCon =
+            new FloatingController(conForm, action, this);
+    } else {
         conScene = new QGraphicsScene(this);
         conScene->setBackgroundBrush(Qt::black);
         getUIState()->conState.dockingCon =
-            new DockingController(conForm, conScene, action, this);
-    } else {
-        getUIState()->conState.floatingCon =
-            new FloatingController(conForm, action, this);
+            new DockingController(dockPos, conForm, conScene, action, this);
     }
 
+    /* update layout */
     getUIState()->conState.conFormIndex = index;
     adjustSize();
 
     /* arrange */
-    if (docking == true) {
-        winLayout->addWidget(getDockingCon());
-    } else {
+    if (dockPos == -1) {
         if (getUIState()->conState.recentlyFloatPos == QPoint(-1, -1)) {
             QPoint globalPos = mapToGlobal(QPoint(0, 0));
             getFloatingCon()->move(globalPos.x() + size().width(), globalPos.y());
@@ -247,6 +257,9 @@ void MainWindow::openController(int index, bool docking)
         }
 
         getFloatingCon()->show();
+    } else {
+        // TODO: alignment
+        winLayout->addWidget(getDockingCon());
     }
 }
 
@@ -263,6 +276,8 @@ void MainWindow::closeController()
         conScene->clear();
         delete conScene;
         conScene = NULL;
+
+        adjustSize();
     }
 
     if (getFloatingCon() != NULL) {
index c0869a78586050f5d299d4ff184c5cc70ba9a5fa..4dfc19b79075de2cf40440709e8dcccfbceaab6c 100644 (file)
@@ -78,7 +78,7 @@ public:
     void scale(int scale);
     DockingController *getDockingCon();
     FloatingController *getFloatingCon();
-    void openController(int index, bool docking);
+    void openController(int index, int dockPos);
     void closeController();
     void startSwapper();
     void terminateSwapper();
index e5090302f253465539e2379b68d02b2d28d21413..db70dfdbac2515f96ae06ab618abe348911276cb 100644 (file)
@@ -273,7 +273,7 @@ void ContextMenu::slotController(int index)
     qDebug("controller : %d", index);
 
     MainWindow *win = ((MainWindow *)this->parent());
-    win->openController(index, true);
+    win->openController(index, Qt::AlignRight | Qt::AlignCenter);
 }
 
 void ContextMenu::slotShell()
index b7c59710b6cd786df58f4203f38ca47b4c9e982f..ea2a93fd38093d5c73c3c5b7aca8f01a96d44e46 100644 (file)
@@ -72,6 +72,7 @@ QSize UIInformation::getMainSize()
 
     QSize mainSize = mainForm->skinImg[MainForm::normal].size() * uiState.getScaleFactor();
 
+    /* docking controller */
     if (uiState.conState.dockingCon != NULL) {
         ControllerForm *conForm = getConForm();
         if (conForm != NULL) {
@@ -100,11 +101,15 @@ QRegion UIInformation::getMainRegion()
 
     QRegion region(QBitmap::fromImage(regionImage));
 
-    if (uiState.conState.dockingCon != NULL) {
+    /* docking controller */
+    DockingController *con = uiState.conState.dockingCon;
+    if (con != NULL) {
         ControllerForm *conForm = getConForm();
         if (conForm != NULL) {
             QImage *conImage = &(conForm->conImg[ControllerForm::normal]);
             QRegion regionCon(QBitmap::fromImage(conImage->createAlphaMask()));
+
+            // TODO: height shift
             regionCon.translate(regionImage.width() + 1, 0);
             region = region.united(regionCon);
         }