From 74d1a3157e26e7197d3355b80c2778057f286353 Mon Sep 17 00:00:00 2001 From: GiWoong Kim Date: Wed, 8 Oct 2014 20:30:43 +0900 Subject: [PATCH] controller: prepare for expanding of docking feature Change-Id: I76c87856a15730f2e62f7e855fd0bec1342afa33 Signed-off-by: GiWoong Kim --- tizen/src/display/qt5_supplement.cpp | 2 +- tizen/src/ui/dockingcontroller.cpp | 13 +++++-- tizen/src/ui/dockingcontroller.h | 7 +++- tizen/src/ui/dockingconview.cpp | 2 +- tizen/src/ui/floatingcontroller.cpp | 2 - tizen/src/ui/floatingconview.cpp | 57 ++++++++++++++++++++-------- tizen/src/ui/floatingconview.h | 2 +- tizen/src/ui/mainwindow.cpp | 35 ++++++++++++----- tizen/src/ui/mainwindow.h | 2 +- tizen/src/ui/menu/contextmenu.cpp | 2 +- tizen/src/ui/uiinformation.cpp | 7 +++- 11 files changed, 92 insertions(+), 39 deletions(-) diff --git a/tizen/src/display/qt5_supplement.cpp b/tizen/src/display/qt5_supplement.cpp index 28c860735f..422cd8a8b4 100644 --- a/tizen/src/display/qt5_supplement.cpp +++ b/tizen/src/display/qt5_supplement.cpp @@ -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(); diff --git a/tizen/src/ui/dockingcontroller.cpp b/tizen/src/ui/dockingcontroller.cpp index d1b29db86a..8c2a811f95 100644 --- a/tizen/src/ui/dockingcontroller.cpp +++ b/tizen/src/ui/dockingcontroller.cpp @@ -27,14 +27,14 @@ * */ -#include - #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) { diff --git a/tizen/src/ui/dockingcontroller.h b/tizen/src/ui/dockingcontroller.h index 95ce795a6a..ddd9b0dedd 100644 --- a/tizen/src/ui/dockingcontroller.h +++ b/tizen/src/ui/dockingcontroller.h @@ -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; }; diff --git a/tizen/src/ui/dockingconview.cpp b/tizen/src/ui/dockingconview.cpp index 84725cb731..d69ede3eba 100644 --- a/tizen/src/ui/dockingconview.cpp +++ b/tizen/src/ui/dockingconview.cpp @@ -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; } } diff --git a/tizen/src/ui/floatingcontroller.cpp b/tizen/src/ui/floatingcontroller.cpp index f4889b26b9..dc2cc0ceb3 100644 --- a/tizen/src/ui/floatingcontroller.cpp +++ b/tizen/src/ui/floatingcontroller.cpp @@ -27,8 +27,6 @@ * */ -#include - #include "floatingcontroller.h" #include "mainwindow.h" diff --git a/tizen/src/ui/floatingconview.cpp b/tizen/src/ui/floatingconview.cpp index a798e3247d..c79df1baa7 100644 --- a/tizen/src/ui/floatingconview.cpp +++ b/tizen/src/ui/floatingconview.cpp @@ -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; } } diff --git a/tizen/src/ui/floatingconview.h b/tizen/src/ui/floatingconview.h index 81fa6d9762..506a389074 100644 --- a/tizen/src/ui/floatingconview.h +++ b/tizen/src/ui/floatingconview.h @@ -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); diff --git a/tizen/src/ui/mainwindow.cpp b/tizen/src/ui/mainwindow.cpp index 06fc2c12cb..3599c49bc7 100644 --- a/tizen/src/ui/mainwindow.cpp +++ b/tizen/src/ui/mainwindow.cpp @@ -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) { diff --git a/tizen/src/ui/mainwindow.h b/tizen/src/ui/mainwindow.h index c0869a7858..4dfc19b790 100644 --- a/tizen/src/ui/mainwindow.h +++ b/tizen/src/ui/mainwindow.h @@ -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(); diff --git a/tizen/src/ui/menu/contextmenu.cpp b/tizen/src/ui/menu/contextmenu.cpp index e5090302f2..db70dfdbac 100644 --- a/tizen/src/ui/menu/contextmenu.cpp +++ b/tizen/src/ui/menu/contextmenu.cpp @@ -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() diff --git a/tizen/src/ui/uiinformation.cpp b/tizen/src/ui/uiinformation.cpp index b7c59710b6..ea2a93fd38 100644 --- a/tizen/src/ui/uiinformation.cpp +++ b/tizen/src/ui/uiinformation.cpp @@ -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); } -- 2.34.1