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();
*
*/
-#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;
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
}
+int DockingController::getDockPos()
+{
+ return dockPos;
+}
+
void DockingController::showEvent(QShowEvent *event)
{
if (menu != NULL) {
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);
void setRegion(QImage baseImage);
private:
+ int dockPos;
ControllerForm *conForm;
QAction *menu;
};
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;
}
}
*
*/
-#include <QtWidgets>
-
#include "floatingcontroller.h"
#include "mainwindow.h"
QGraphicsView(scene, parent)
{
setStyleSheet("background: transparent");
- //setAttribute(Qt::WA_TranslucentBackground);
setStyleSheet("border-style: none");
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
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);
}
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;
}
}
~FloatingConView();
protected:
+ int isDockable(QWidget *object, QWidget *subject);
void resizeEvent(QResizeEvent *event);
-
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
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();
}
/* 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());
}
getFloatingCon()->show();
+ } else {
+ // TODO: alignment
+ winLayout->addWidget(getDockingCon());
}
}
conScene->clear();
delete conScene;
conScene = NULL;
+
+ adjustSize();
}
if (getFloatingCon() != NULL) {
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();
qDebug("controller : %d", index);
MainWindow *win = ((MainWindow *)this->parent());
- win->openController(index, true);
+ win->openController(index, Qt::AlignRight | Qt::AlignCenter);
}
void ContextMenu::slotShell()
QSize mainSize = mainForm->skinImg[MainForm::normal].size() * uiState.getScaleFactor();
+ /* docking controller */
if (uiState.conState.dockingCon != NULL) {
ControllerForm *conForm = getConForm();
if (conForm != NULL) {
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);
}