menu: create controller menu 25/25325/3
authorGiWoong Kim <giwoong.kim@samsung.com>
Mon, 4 Aug 2014 04:26:21 +0000 (13:26 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Mon, 4 Aug 2014 08:13:28 +0000 (17:13 +0900)
Change-Id: I791db0ba0e0b77e9ae5d4cf884b2c97a3ade1002
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/display/qt5_supplement.cpp
tizen/src/ui/controllerlayout.cpp
tizen/src/ui/controllerlayout.h
tizen/src/ui/controllerwidget.cpp
tizen/src/ui/controllerwidget.h
tizen/src/ui/mainwindow.cpp
tizen/src/ui/mainwindow.h
tizen/src/ui/menu/contextmenu.cpp
tizen/src/ui/menu/contextmenu.h
tizen/src/ui/menu/detailedinfodialog.cpp
tizen/src/ui/skincontrollerview.cpp

index 0b42d7fa0c22fb7d1c473c5ef85e6af68d70c6ae..22dc0d79028384887bbbde5671e98fe1ddfe64ef 100644 (file)
@@ -60,6 +60,7 @@ static MainWindow *mainwindow;
 static UIInformation *uiInfo;
 
 #define FORM_FILE_NAME "layout.qml"
+#define CON_FORM_SUBPATH "controller-layout"
 
 void qt5_skin_init(void)
 {
@@ -83,17 +84,22 @@ void qt5_skin_init(void)
     /* XML */
     // TODO: convert QML to XML
 
-    // Register custom QML element
+    /* Register custom QML elements */
     qmlRegisterType<RegionType>("EmulatorComponent", 1, 0, "Region");
     qmlRegisterType<HardwareKeyType>("EmulatorComponent", 1, 0, "Key");
     qmlRegisterType<KeyListType>("EmulatorComponent", 1, 0, "KeyList");
 
+    /* load skin form */
     QFile skinXMLFile(uiInfo->skinPath + FORM_FILE_NAME);
     loadSkinLayoutFromXML(&skinXMLFile, uiInfo);
 
-    // TODO:
-    QFile conXMLFile(uiInfo->skinPath + "controller-layout/Basic/layout.qml");
-    loadControllerLayoutFromXML(&conXMLFile, uiInfo);
+    /* load controller forms */
+    QDir skinDir(uiInfo->skinPath + CON_FORM_SUBPATH);
+    QFileInfoList entries = skinDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
+    for (int i = 0; i < entries.size(); i++) {
+        QFile conXMLFile(entries.at(i).filePath() + '/' + FORM_FILE_NAME);
+        loadControllerLayoutFromXML(&conXMLFile, uiInfo);
+    }
 
     /* GUI */
     qDebug("start!");
@@ -101,12 +107,7 @@ void qt5_skin_init(void)
 //    mainwindow->move(100, 100); // TODO: MRU
     mainwindow->show();
 
-    ControllerWidget *con = mainwindow->getController();
-    if (con != NULL) {
-        QPoint pos = mainwindow->mapToGlobal(mainwindow->pos());
-        con->move(pos.x() + mainwindow->size().width(), pos.y());
-        con->show();
-    }
+    mainwindow->openController(0);
 }
 
 void qt5_early_prepare(void)
@@ -183,10 +184,10 @@ void qMessageOutput(QtMsgType type, const QMessageLogContext &context, const QSt
 void loadSkinLayoutFromXML(QFile *file, UIInformation *uiInfo/* out */)
 {
     if (file->exists() == false) {
-        qFatal("%s is not found", file->fileName().toLocal8Bit().data());
+        qFatal("%s is not found", qPrintable(file->fileName()));
     }
 
-    qDebug("skin form is loaded from %s", file->fileName().toLocal8Bit().data());
+    qDebug("skin form is loaded from %s", qPrintable(file->fileName()));
 
     qmlRegisterType<LayoutType>("EmulatorComponent", 1, 0, "Layout");
 
@@ -245,11 +246,11 @@ void loadSkinLayoutFromXML(QFile *file, UIInformation *uiInfo/* out */)
 void loadControllerLayoutFromXML(QFile *file, UIInformation *uiInfo/* out */)
 {
     if (file->exists() == false) {
-        qDebug("con xml file is null");
+        qWarning("%s is not found", qPrintable(file->fileName()));
         return;
     }
 
-    qDebug("controller form is loaded from %s", file->fileName().toLocal8Bit().data());
+    qDebug("controller form is loaded from %s", qPrintable(file->fileName()));
 
     /* QML */
     QQmlEngine *engine = new QQmlEngine();
@@ -269,7 +270,7 @@ void loadControllerLayoutFromXML(QFile *file, UIInformation *uiInfo/* out */)
         KeyListType *keyListType = NULL;
         HardwareKeyType *hwKeyType = NULL;
 
-        ControllerLayout *layout = new ControllerLayout();
+        ControllerLayout *layout = new ControllerLayout(fileInfo.dir().dirName());
         layout->conImg[ControllerLayout::normal].load(
             fileInfo.absolutePath() + "/" + layoutType->mainImageName());
         layout->conImg[ControllerLayout::pressed].load(
index 2eb9a5bf382a10df020f6d1b49bd6e82c2366e4f..0b2269a6cbe2d4bb22b3eb1345baaa9009e3e61e 100644 (file)
@@ -1,7 +1,8 @@
 #include "controllerlayout.h"
 
-ControllerLayout::ControllerLayout()
+ControllerLayout::ControllerLayout(QString name)
 {
+    this->name = name;
 }
 
 ControllerLayout::~ControllerLayout()
index 0436245dd989d8c68c61597d657ce37ae58cd332..b993affb69579d80a4c81981270e381471d2dbbc 100644 (file)
@@ -10,9 +10,10 @@ class ControllerLayout
     Q_ENUMS(ConImgType)
 
 public:
-    ControllerLayout();
+    ControllerLayout(QString name);
     ~ControllerLayout();
 
+    QString name;
     QImage conImg[2];
     QList<HardwareKey *> keyList;
 
index 32f4f1a73ef8946f613db63be77b8af2a80b4cd6..2978f7f2c4842f0aab271217673ca70d022dfd6b 100644 (file)
@@ -5,11 +5,13 @@
 ControllerWidget::ControllerWidget(ControllerLayout *conLayout, QWidget *parent) :
     QLabel(parent)
 {
-    //setStyleSheet("background: transparent");
-    setStyleSheet("border-style: none");
+    this->conLayout = conLayout;
 
+    setStyleSheet("border-style: none");
     setWindowFlags(Qt::FramelessWindowHint);
-    setAttribute(Qt::WA_TranslucentBackground);
+    setAttribute(Qt::WA_DeleteOnClose);
+
+    setWindowTitle(conLayout->name);
 
     QHBoxLayout *layout = new QHBoxLayout(this);
     layout->setMargin(0);
@@ -22,6 +24,20 @@ ControllerWidget::ControllerWidget(ControllerLayout *conLayout, QWidget *parent)
     layout->addWidget(conView);
 }
 
+void ControllerWidget::showEvent(QShowEvent *event)
+{
+    setRegion(conLayout->conImg[ControllerLayout::normal]);
+}
+
+void ControllerWidget::setRegion(QImage baseImage)
+{
+    qDebug("set region");
+
+    QImage region = baseImage.createAlphaMask();
+
+    setMask(QRegion(QBitmap::fromImage(region)));
+}
+
 ControllerWidget::~ControllerWidget()
 {
     qDebug("destroy contoller");
index ced9503a414aa411f13fb11c7ccbea5cc3ed85e9..60ef55f55008030d7e30ca802fb52086a816b916 100644 (file)
@@ -15,9 +15,13 @@ public:
     ~ControllerWidget();
 
 protected:
+    void showEvent(QShowEvent *event);
+
+    void setRegion(QImage baseImage);
 
 private:
     SkinControllerView *conView;
+    ControllerLayout *conLayout;
 };
 
 #endif // CONTROLLERWIDGET_H
index 433c064d38b12df7b531efdae7d5fa798f72ae11..3606b1317d40c55ab9e49f02acaab0440ad0159a 100644 (file)
@@ -79,21 +79,14 @@ MainWindow::MainWindow(UIInformation *uiInfo, QWidget *parent) :
     skinView = new SkinView(skinScene, this);
     winLayout->addWidget(skinView);
 
-    if (uiInfo->controllerList.count() > 0) {
 #if 0
-        // TODO: docked controller
-        QGraphicsScene *conScene = new QGraphicsScene(this);
-
-        conView = new SkinControllerView(conScene, this);
-        conView->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
-        winLayout->addWidget(conView);
+    // TODO: docked controller
+    QGraphicsScene *conScene = new QGraphicsScene(this);
+    conView = new SkinControllerView(conScene, this);
+    conView->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+    winLayout->addWidget(conView);
 #endif
 
-        /* floated controller */
-        ControllerLayout *conLayout = uiInfo->controllerList.at(0);
-        con = new ControllerWidget(conLayout);
-    }
-
     QGLContext *wrapperContext = QGLContext::fromOpenGLContext(qt5GLContext);
 
     /*
@@ -173,6 +166,35 @@ ControllerWidget *MainWindow::getController()
     return con;
 }
 
+void MainWindow::openController(int index)
+{
+    qDebug("open controller %d", index);
+
+    closeController();
+
+    if (uiInfo->controllerList.count() <= index) {
+        qWarning("controller index out of range");
+        return;
+    }
+
+    ControllerLayout *conLayout = uiInfo->controllerList.at(index);
+    con = new ControllerWidget(conLayout);
+
+    QPoint globalPos = mapToGlobal(QPoint(0, 0));
+    con->move(globalPos.x() + size().width(), globalPos.y());
+    con->show();
+}
+
+void MainWindow::closeController()
+{
+    if (con != NULL) {
+        qDebug("close controller");
+
+        con->close();
+        con = NULL;
+    }
+}
+
 void MainWindow::resizeEvent(QResizeEvent *event)
 {
     qDebug("resize main window");
@@ -219,7 +241,7 @@ void MainWindow::setRegion(QImage baseImage)
                 baseImage.width() * getUIState()->getScaleFactor(),
                 baseImage.height() * getUIState()->getScaleFactor());
 
-    setMask(QRegion(QBitmap(QPixmap::fromImage(region))));
+    setMask(QRegion(QBitmap::fromImage(region)));
 }
 
 MainWindow::~MainWindow()
index d5618893706165b4b69efff6f9872620d017c858..71cda0c7b31a180a5644ac01d158cacd336436c7 100644 (file)
@@ -51,6 +51,8 @@ public:
     void rotate(int angle);
     void scale(int scale);
     ControllerWidget *getController();
+    void openController(int index);
+    void closeController();
 
     UIInformation *uiInfo;
     QLabel *getLabel();
index 502826eb23aad948ed48fa8174287ed7e7644473..3f12ab2918f9cbe6367d1c800f3e46815bfa88d8 100644 (file)
@@ -96,6 +96,26 @@ ContextMenu::ContextMenu(QWidget *parent) :
 
     addSeparator();
 
+    /* = Controller menu = */
+    QMenu *controllerMenu = NULL;
+    if (win->uiInfo->controllerList.isEmpty() == false) {
+        controllerMenu = addMenu("Controller");
+        QActionGroup *controllerGroup = new QActionGroup(this);
+        QSignalMapper *controllerMapper = new QSignalMapper(this);
+        connect(controllerMapper, SIGNAL(mapped(int)), this, SLOT(slotController(int)));
+
+        for (int i = 0; i < win->uiInfo->controllerList.count(); i++) {
+            action = controllerMenu->addAction(win->uiInfo->controllerList.at(i)->name);
+            action->setActionGroup(controllerGroup);
+            action->setCheckable(true);
+            controllerMapper->setMapping(action, i);
+            connect(action, SIGNAL(triggered()), controllerMapper, SLOT(map()));
+        }
+
+        action = (QAction *)controllerMapper->mapping(0);
+        action->setChecked(true);
+    }
+
     /* = Advanced menu = */
     QMenu *advancedMenu = addMenu(QIcon(QPixmap(":/icons/advanced.png")), "Advanced");
 
@@ -170,6 +190,14 @@ void ContextMenu::slotScale(int scale)
     ((MainWindow *)this->parent())->scale(scale);
 }
 
+void ContextMenu::slotController(int index)
+{
+    qDebug("controller : %d", index);
+
+    MainWindow *win = ((MainWindow *)this->parent());
+    win->openController(index);
+}
+
 void ContextMenu::slotShell()
 {
     qDebug("SDB shell");
index 5c3fe96ebe62a342124957cca18c077adbf2baf0..2ed94e7340fd9b5dcc429161de82edbe73cb33c2 100644 (file)
@@ -26,6 +26,7 @@ public slots:
     void slotTopMost(bool check);
     void slotRotate(int angle);
     void slotScale(int scale);
+    void slotController(int index);
     void slotShell();
     void slotAbout();
     void slotForceClose();
index 5a4a067a9030675d98809cffd333b392d001cbc1..80e9a96c10a9ec38dbf6b36899f47ccde0d2821f 100644 (file)
@@ -25,26 +25,48 @@ DetailedInfoDialog::DetailedInfoDialog(QWidget *parent) :
     // TODO:
     QTableWidgetItem *item = new QTableWidgetItem("VM Name");
     info->setItem(0, 0, item);
+    item = new QTableWidgetItem(win->uiInfo->vmName);
+    info->setItem(0, 1, item);
+
     item = new QTableWidgetItem("Skin name");
     info->setItem(1, 0, item);
+    item = new QTableWidgetItem(win->uiInfo->skinName);
+    info->setItem(1, 1, item);
+
     item = new QTableWidgetItem("CPU");
     info->setItem(2, 0, item);
+    item = new QTableWidgetItem("x86");
+    info->setItem(2, 1, item);
+
     item = new QTableWidgetItem("Ram Size");
     info->setItem(3, 0, item);
+
     item = new QTableWidgetItem("Display Resolution");
     info->setItem(4, 0, item);
+    item = new QTableWidgetItem(QString::number(win->uiInfo->resolution.width())
+        + "x" + QString::number(win->uiInfo->resolution.height()));
+    info->setItem(4, 1, item);
+
     item = new QTableWidgetItem("Display Density");
     info->setItem(5, 0, item);
 
-    item = new QTableWidgetItem(win->uiInfo->vmName);
-    info->setItem(0, 1, item);
-    item = new QTableWidgetItem(win->uiInfo->skinName);
-    info->setItem(1, 1, item);
-    item = new QTableWidgetItem("x86");
-    info->setItem(2, 1, item);
-    item = new QTableWidgetItem(QString::number(win->uiInfo->resolution.width()) + "x"
-                                + QString::number(win->uiInfo->resolution.height()));
-    info->setItem(4, 1, item);
+    item = new QTableWidgetItem("File Sharing");
+    info->setItem(6, 0, item);
+
+    item = new QTableWidgetItem("File Shared Path");
+    info->setItem(7, 0, item);
+
+    item = new QTableWidgetItem("CPU Virtualization");
+    info->setItem(8, 0, item);
+
+    item = new QTableWidgetItem("GPU Virtualization");
+    info->setItem(9, 0, item);
+
+    item = new QTableWidgetItem("Image Path");
+    info->setItem(10, 0, item);
+
+    item = new QTableWidgetItem("Log Path");
+    info->setItem(11, 0, item);
 
     /* OK button */
     QPushButton *okBtn = new QPushButton("OK", this);
index 4f6dc2b8cf5445228838c996936a9a408afaf3e2..8704bc5bd70a3e20f4191f8a51e298dba1b73261 100644 (file)
@@ -78,5 +78,5 @@ void SkinControllerView::mouseMoveEvent(QMouseEvent *event)
 
 SkinControllerView::~SkinControllerView()
 {
-    qDebug("destroy scontroller view");
+    qDebug("destroy controller view");
 }