From: GiWoong Kim Date: Mon, 4 Aug 2014 04:26:21 +0000 (+0900) Subject: menu: create controller menu X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3e32ccce6c23ab318d86113520f3b82b82dfdf2e;p=sdk%2Femulator%2Fqemu.git menu: create controller menu Change-Id: I791db0ba0e0b77e9ae5d4cf884b2c97a3ade1002 Signed-off-by: GiWoong Kim --- diff --git a/tizen/src/display/qt5_supplement.cpp b/tizen/src/display/qt5_supplement.cpp index 0b42d7fa0c..22dc0d7902 100644 --- a/tizen/src/display/qt5_supplement.cpp +++ b/tizen/src/display/qt5_supplement.cpp @@ -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("EmulatorComponent", 1, 0, "Region"); qmlRegisterType("EmulatorComponent", 1, 0, "Key"); qmlRegisterType("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("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( diff --git a/tizen/src/ui/controllerlayout.cpp b/tizen/src/ui/controllerlayout.cpp index 2eb9a5bf38..0b2269a6cb 100644 --- a/tizen/src/ui/controllerlayout.cpp +++ b/tizen/src/ui/controllerlayout.cpp @@ -1,7 +1,8 @@ #include "controllerlayout.h" -ControllerLayout::ControllerLayout() +ControllerLayout::ControllerLayout(QString name) { + this->name = name; } ControllerLayout::~ControllerLayout() diff --git a/tizen/src/ui/controllerlayout.h b/tizen/src/ui/controllerlayout.h index 0436245dd9..b993affb69 100644 --- a/tizen/src/ui/controllerlayout.h +++ b/tizen/src/ui/controllerlayout.h @@ -10,9 +10,10 @@ class ControllerLayout Q_ENUMS(ConImgType) public: - ControllerLayout(); + ControllerLayout(QString name); ~ControllerLayout(); + QString name; QImage conImg[2]; QList keyList; diff --git a/tizen/src/ui/controllerwidget.cpp b/tizen/src/ui/controllerwidget.cpp index 32f4f1a73e..2978f7f2c4 100644 --- a/tizen/src/ui/controllerwidget.cpp +++ b/tizen/src/ui/controllerwidget.cpp @@ -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"); diff --git a/tizen/src/ui/controllerwidget.h b/tizen/src/ui/controllerwidget.h index ced9503a41..60ef55f550 100644 --- a/tizen/src/ui/controllerwidget.h +++ b/tizen/src/ui/controllerwidget.h @@ -15,9 +15,13 @@ public: ~ControllerWidget(); protected: + void showEvent(QShowEvent *event); + + void setRegion(QImage baseImage); private: SkinControllerView *conView; + ControllerLayout *conLayout; }; #endif // CONTROLLERWIDGET_H diff --git a/tizen/src/ui/mainwindow.cpp b/tizen/src/ui/mainwindow.cpp index 433c064d38..3606b1317d 100644 --- a/tizen/src/ui/mainwindow.cpp +++ b/tizen/src/ui/mainwindow.cpp @@ -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() diff --git a/tizen/src/ui/mainwindow.h b/tizen/src/ui/mainwindow.h index d561889370..71cda0c7b3 100644 --- a/tizen/src/ui/mainwindow.h +++ b/tizen/src/ui/mainwindow.h @@ -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(); diff --git a/tizen/src/ui/menu/contextmenu.cpp b/tizen/src/ui/menu/contextmenu.cpp index 502826eb23..3f12ab2918 100644 --- a/tizen/src/ui/menu/contextmenu.cpp +++ b/tizen/src/ui/menu/contextmenu.cpp @@ -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"); diff --git a/tizen/src/ui/menu/contextmenu.h b/tizen/src/ui/menu/contextmenu.h index 5c3fe96ebe..2ed94e7340 100644 --- a/tizen/src/ui/menu/contextmenu.h +++ b/tizen/src/ui/menu/contextmenu.h @@ -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(); diff --git a/tizen/src/ui/menu/detailedinfodialog.cpp b/tizen/src/ui/menu/detailedinfodialog.cpp index 5a4a067a90..80e9a96c10 100644 --- a/tizen/src/ui/menu/detailedinfodialog.cpp +++ b/tizen/src/ui/menu/detailedinfodialog.cpp @@ -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); diff --git a/tizen/src/ui/skincontrollerview.cpp b/tizen/src/ui/skincontrollerview.cpp index 4f6dc2b8cf..8704bc5bd7 100644 --- a/tizen/src/ui/skincontrollerview.cpp +++ b/tizen/src/ui/skincontrollerview.cpp @@ -78,5 +78,5 @@ void SkinControllerView::mouseMoveEvent(QMouseEvent *event) SkinControllerView::~SkinControllerView() { - qDebug("destroy scontroller view"); + qDebug("destroy controller view"); }