static UIInformation *uiInfo;
#define FORM_FILE_NAME "layout.qml"
+#define CON_FORM_SUBPATH "controller-layout"
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!");
// 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)
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");
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();
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(
#include "controllerlayout.h"
-ControllerLayout::ControllerLayout()
+ControllerLayout::ControllerLayout(QString name)
{
+ this->name = name;
}
ControllerLayout::~ControllerLayout()
Q_ENUMS(ConImgType)
public:
- ControllerLayout();
+ ControllerLayout(QString name);
~ControllerLayout();
+ QString name;
QImage conImg[2];
QList<HardwareKey *> keyList;
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);
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");
~ControllerWidget();
protected:
+ void showEvent(QShowEvent *event);
+
+ void setRegion(QImage baseImage);
private:
SkinControllerView *conView;
+ ControllerLayout *conLayout;
};
#endif // CONTROLLERWIDGET_H
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);
/*
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");
baseImage.width() * getUIState()->getScaleFactor(),
baseImage.height() * getUIState()->getScaleFactor());
- setMask(QRegion(QBitmap(QPixmap::fromImage(region))));
+ setMask(QRegion(QBitmap::fromImage(region)));
}
MainWindow::~MainWindow()
void rotate(int angle);
void scale(int scale);
ControllerWidget *getController();
+ void openController(int index);
+ void closeController();
UIInformation *uiInfo;
QLabel *getLabel();
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");
((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");
void slotTopMost(bool check);
void slotRotate(int angle);
void slotScale(int scale);
+ void slotController(int index);
void slotShell();
void slotAbout();
void slotForceClose();
// 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);
SkinControllerView::~SkinControllerView()
{
- qDebug("destroy scontroller view");
+ qDebug("destroy controller view");
}