/* position */
QRect hostBounds = UIUtil::getHostScreenBounds();
- qDebug() << "host geometry : " << hostBounds;
+ qDebug() << "host geometry :" << hostBounds;
int defaultValueX = hostBounds.x() - 1;
int defaultValueY = hostBounds.y() - 1;
QFileInfo fileInfo(*file);
QXmlStreamReader xml(file);
+ /* parse xml */
XmlLayoutParser parser(fileInfo.absolutePath(), uiInfo);
-
- QXmlStreamReader::TokenType token;
- while (xml.atEnd() == false && xml.hasError() == false) {
- token = xml.readNext();
- /* If token is just StartDocument, go to next.*/
- if(token == QXmlStreamReader::StartDocument) {
- continue;
- }
-
- if (token == QXmlStreamReader::StartElement) {
- if (xml.name() == "EmulatorUI") {
- continue;
- }
-
- if (xml.name() == "layoutVersion") {
- qDebug() << "layout version :" << xml.readElementText();
- continue;
- } else if (xml.name() == "formList") {
- int cnt = parser.parseMainFormList(xml, uiInfo->mainFormList);
- qDebug("- formList : %d", cnt);
- } else if (xml.name() == "menuList") {
- int cnt = parser.parseMenuList(xml, uiInfo->menuList);
- qDebug("- menuList : %d", cnt);
- }
- }
- }
+ QString version = parser.parseEmulatorUI(xml);
+ qDebug() << "layout version :" << version;
const bool hasError = xml.hasError();
xml.clear();
QFileInfo fileInfo(*file);
QXmlStreamReader xml(file);
+ /* parse xml */
XmlLayoutParser parser(fileInfo.absolutePath(), uiInfo);
-
- ControllerForm *form = NULL;
- QXmlStreamReader::TokenType token;
- while (xml.atEnd() == false && xml.hasError() == false) {
- token = xml.readNext();
- /* If token is just StartDocument, go to next.*/
- if(token == QXmlStreamReader::StartDocument) {
- continue;
- }
-
- if (token == QXmlStreamReader::StartElement) {
- if (xml.name() == "ControllerUI") {
- continue;
- }
-
- if (xml.name() == "layoutVersion") {
- qDebug() << "layout version :" << xml.readElementText();
- continue;
- } else if (xml.name() == "form") {
- form = parser.parseControllerForm(xml);
- if (form != NULL) {
- uiInfo->conFormList.append(form);
- }
- }
- }
- }
+ QString version = parser.parseControllerUI(xml);
+ qDebug() << "layout version :" << version;
const bool hasError = xml.hasError();
xml.clear();
*/
#include "xmllayoutparser.h"
-#include "menu/advancedmenuitem.h"
-#include "menu/scalemenuitem.h"
+
+#define NAME_ATTR_KEYWORD "name"
+#define PROP_ATTR_KEYWORD "property"
+#define LAYOUTVER_KEYWORD "layoutVersion"
+#define REGION_KEYWORD "region"
+#define KEYLIST_KEYWORD "keyList"
+#define FORM_KEYWORD "form"
+#define SHORTCUT_KEYWORD "shortcut"
+#define MENULIST_KEYWORD "menuList"
XmlLayoutParser::XmlLayoutParser(QString path, UIInformation *uiInfo)
{
int left = 0, top = 0;
unsigned int width = 0, height = 0;
- if (xml.name() == "region" &&
+ if (xml.name() == REGION_KEYWORD &&
xml.tokenType() == QXmlStreamReader::StartElement) {
QXmlStreamAttributes attributes = xml.attributes();
+
if (attributes.hasAttribute("left")) {
left = attributes.value("left").toString().toInt();
}
token == QXmlStreamReader::EndElement) == false) /* ~ </display> */
{
if (token == QXmlStreamReader::StartElement) {
- if (xml.name() == "region") {
+ if (xml.name() == REGION_KEYWORD) {
/* region */
displayRegion = parseRegion(xml);
qDebug("- display : (%d,%d %dx%d)",
HardwareKey *XmlLayoutParser::parseKey(QXmlStreamReader &xml)
{
- QString keyName;
QRect keyRegion;
int keycode = 0;
QString keyTooptip;
/* attribute */
- QXmlStreamAttributes attributes = xml.attributes();
- if (attributes.hasAttribute("name")) {
- keyName = attributes.value("name").toString();
- }
+ QString keyName = xml.attributes().value(NAME_ATTR_KEYWORD).toString();
QXmlStreamReader::TokenType token = xml.readNext();
token == QXmlStreamReader::EndElement) == false) /* ~ </key> */
{
if (token == QXmlStreamReader::StartElement) {
- if (xml.name() == "region") {
+ if (xml.name() == REGION_KEYWORD) {
/* region */
keyRegion = parseRegion(xml);
} else if (xml.name() == "keycode") {
HardwareKey *hwKey = NULL;
QXmlStreamReader::TokenType token = xml.readNext();
- while (xml.atEnd() == false && (xml.name() == "keyList" &&
+ while (xml.atEnd() == false && (xml.name() == KEYLIST_KEYWORD &&
token == QXmlStreamReader::EndElement) == false) /* ~ </keyList> */
{
if (token == QXmlStreamReader::StartElement) {
MainForm *XmlLayoutParser::parseMainForm(QXmlStreamReader &xml)
{
- QString formName = "";
-
/* attribute */
- QXmlStreamAttributes attributes = xml.attributes();
- if (attributes.hasAttribute("name")) {
- formName = attributes.value("name").toString();
- }
-
+ QString formName = xml.attributes().value(NAME_ATTR_KEYWORD).toString();
MainForm *form = new MainForm(formName);
QXmlStreamReader::TokenType token = xml.readNext();
- while (xml.atEnd() == false && (xml.name() == "form" &&
+ while (xml.atEnd() == false && (xml.name() == FORM_KEYWORD &&
token == QXmlStreamReader::EndElement) == false) /* ~ </form> */
{
if (token == QXmlStreamReader::StartElement) {
form->skinImg[MainForm::pressed].load(
xmlPath + QDir::separator() + pressedImageFileName);
- } else if (xml.name() == "keyList") {
+ } else if (xml.name() == "maskImage") {
+ /* mask image */
+ // TODO:
+ } else if (xml.name() == KEYLIST_KEYWORD) {
/* HW keys */
int cnt = parseKeyList(xml, form->keyList);
qDebug("- keyList : %d", cnt);
token == QXmlStreamReader::EndElement) == false) /* ~ </formList> */
{
if (token == QXmlStreamReader::StartElement) {
- if (xml.name() == "form") {
+ if (xml.name() == FORM_KEYWORD) {
form = parseMainForm(xml);
if (form != NULL) {
list.append(form);
/* menu */
int XmlLayoutParser::parseFactorList(
- QXmlStreamReader &xml, QList<int> &list)
+ QXmlStreamReader &xml, QMap<int, QString> &map)
{
- int factor = 0;
QXmlStreamReader::TokenType token = xml.readNext();
while (xml.atEnd() == false && (xml.name() == "factorList" &&
{
if (token == QXmlStreamReader::StartElement) {
if (xml.name() == "factor") {
- factor = xml.readElementText().toInt();
- if (factor > 0) {
- list.append(factor);
- }
+ QString value = xml.attributes().value(NAME_ATTR_KEYWORD).toString();
+ map.insert(xml.readElementText().toInt(), value);
}
}
token = xml.readNext();
}
- return list.count();
+ return map.count();
+}
+
+int XmlLayoutParser::parseShortcut(
+ QXmlStreamReader &xml, QMap<QString, QString> &map)
+{
+ QString key = xml.attributes().value(PROP_ATTR_KEYWORD).toString();
+ map.insert(key, xml.readElementText());
+
+ return map.count();
}
-MenuItem *XmlLayoutParser::parseMenuItem(QXmlStreamReader &xml, int menuType)
+AdvancedMenuItem *XmlLayoutParser::parseAdvancedMenuItem(QXmlStreamReader &xml)
{
- QString menuName = "";
+ /* attribute */
+ QString menuName = xml.attributes().value(NAME_ATTR_KEYWORD).toString();
+ AdvancedMenuItem *item = new AdvancedMenuItem(menuName);
+
+ QXmlStreamReader::TokenType token = xml.readNext();
+
+ while (xml.atEnd() == false && (xml.name() == "advancedItem" &&
+ token == QXmlStreamReader::EndElement) == false) /* ~ </advancedItem> */
+ {
+ if (token == QXmlStreamReader::StartElement) {
+ if (xml.name() == SHORTCUT_KEYWORD) {
+ parseShortcut(xml, item->getShortcutMap());
+ } else if (xml.name() == MENULIST_KEYWORD) {
+ int cnt = parseMenuList(xml, item->getMenuList());
+ qDebug("- advanced menuList : %d", cnt);
+ }
+ }
+
+ token = xml.readNext();
+ }
+ return item;
+}
+
+ScaleMenuItem *XmlLayoutParser::parseScaleMenuItem(QXmlStreamReader &xml)
+{
/* attribute */
- QXmlStreamAttributes attributes = xml.attributes();
- if (attributes.hasAttribute("name")) {
- menuName = attributes.value("name").toString();
+ QString menuName = xml.attributes().value(NAME_ATTR_KEYWORD).toString();
+ ScaleMenuItem *item = new ScaleMenuItem(menuName);
+
+ QXmlStreamReader::TokenType token = xml.readNext();
+
+ while (xml.atEnd() == false && (xml.name() == "scaleItem" &&
+ token == QXmlStreamReader::EndElement) == false) /* ~ </scaleItem> */
+ {
+ if (token == QXmlStreamReader::StartElement) {
+ if (xml.name() == SHORTCUT_KEYWORD) {
+ parseShortcut(xml, item->getShortcutMap());
+ } else if (xml.name() == "factorList") {
+ int cnt = parseFactorList(xml, item->getFactorMap());
+ qDebug("- scale factorList : %d", cnt);
+ }
+ }
+
+ token = xml.readNext();
}
- // TODO: shortcut
+ return item;
+}
+
+MenuItem *XmlLayoutParser::parseGeneralMenuItem(
+ QXmlStreamReader &xml, int menuType)
+{
+ QString itemKeyword = xml.name().toString();
+
+ /* attribute */
+ QString menuName = xml.attributes().value(NAME_ATTR_KEYWORD).toString();
+ MenuItem *item = new MenuItem(menuType, menuName);
+
+ QString shortcut;
+ QXmlStreamReader::TokenType token = xml.readNext();
+
+ while (xml.atEnd() == false && (xml.name().compare(itemKeyword) == 0 &&
+ token == QXmlStreamReader::EndElement) == false) /* ~ </xxItem> */
+ {
+ if (token == QXmlStreamReader::StartElement) {
+ if (xml.name() == SHORTCUT_KEYWORD) {
+ parseShortcut(xml, item->getShortcutMap());
+ }
+ }
- switch (menuType) {
- case MenuItemType::advancedItem:
- return (MenuItem *)new AdvancedMenuItem(menuName);
- case MenuItemType::scaleItem:
- return (MenuItem *)new ScaleMenuItem(menuName);
+ token = xml.readNext();
}
- return new MenuItem(menuType, menuName);
+ return item;
}
-int XmlLayoutParser::parseMenuListItems(QXmlStreamReader &xml,
- const QString &keyword, QList<MenuItem *> &list)
+int XmlLayoutParser::parseMenuList(
+ QXmlStreamReader &xml, QList<MenuItem *> &list)
{
MenuItem *item = NULL;
QXmlStreamReader::TokenType token = xml.readNext();
- while (xml.atEnd() == false && (xml.name().compare(keyword) == 0 &&
- token == QXmlStreamReader::EndElement) == false)
+ while (xml.atEnd() == false && (xml.name() == MENULIST_KEYWORD &&
+ token == QXmlStreamReader::EndElement) == false) /* ~ </menuList> */
{
if (token == QXmlStreamReader::StartElement) {
if (xml.name() == "separator") {
item = new MenuItem(MenuItemType::separator, NULL);
- list.append(item);
-
- item = NULL;
- } else if (xml.name() == "advancedList") {
- item = parseMenuItem(xml, MenuItemType::advancedItem);
if (item != NULL) {
list.append(item);
-
- int cnt = parseAdvancedMenuList(xml,
- ((AdvancedMenuItem *)item)->getMenuList());
- qDebug("- advanced menuList : %d", cnt);
+ }
+ } else if (xml.name() == "advancedItem") {
+ item = (MenuItem *)parseAdvancedMenuItem(xml);
+ if (item != NULL) {
+ list.append(item);
}
} else if (xml.name() == "infoItem") {
- item = parseMenuItem(xml, MenuItemType::infoItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::infoItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "onTopItem") {
- item = parseMenuItem(xml, MenuItemType::onTopItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::onTopItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "switchItem") {
- item = parseMenuItem(xml, MenuItemType::switchItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::switchItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "scaleItem") {
- item = parseMenuItem(xml, MenuItemType::scaleItem);
+ item = (MenuItem *)parseScaleMenuItem(xml);
if (item != NULL) {
list.append(item);
-
- int cnt = parseFactorList(xml,
- ((ScaleMenuItem *)item)->getFactorList());
- qDebug("- scale factorList : %d", cnt);
}
} else if (xml.name() == "controllerItem") {
- item = parseMenuItem(xml, MenuItemType::controllerItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::controllerItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "hostKeyboardItem") {
- item = parseMenuItem(xml, MenuItemType::hostKeyboardItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::hostKeyboardItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "shellItem") {
- item = parseMenuItem(xml, MenuItemType::shellItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::shellItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "controlPanelItem") {
- item = parseMenuItem(xml, MenuItemType::controlPanelItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::controlPanelItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "screenShotItem") {
- item = parseMenuItem(xml, MenuItemType::screenShotItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::screenShotItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "aboutItem") {
- item = parseMenuItem(xml, MenuItemType::aboutItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::aboutItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "forceCloseItem") {
- item = parseMenuItem(xml, MenuItemType::forceCloseItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::forceCloseItem);
if (item != NULL) {
list.append(item);
}
} else if (xml.name() == "closeItem") {
- item = parseMenuItem(xml, MenuItemType::closeItem);
+ item = parseGeneralMenuItem(xml, MenuItemType::closeItem);
if (item != NULL) {
list.append(item);
}
return list.count();
}
-int XmlLayoutParser::parseAdvancedMenuList(
- QXmlStreamReader &xml, QList<MenuItem *> &list)
+QString XmlLayoutParser::parseEmulatorUI(QXmlStreamReader &xml)
{
- return parseMenuListItems(xml, "advancedList", list);
-}
+ QString layoutVersion = "undefined";
-int XmlLayoutParser::parseMenuList(
- QXmlStreamReader &xml, QList<MenuItem *> &list)
-{
- return parseMenuListItems(xml, "menuList", list);
+ QXmlStreamReader::TokenType token;
+
+ while (xml.atEnd() == false && xml.hasError() == false) {
+ token = xml.readNext();
+ /* If token is just StartDocument, go to next.*/
+ if (token == QXmlStreamReader::StartDocument) {
+ continue;
+ }
+
+ if (token == QXmlStreamReader::StartElement) {
+ if (xml.name() == "EmulatorUI") {
+ continue;
+ }
+
+ if (xml.name() == LAYOUTVER_KEYWORD) {
+ layoutVersion = xml.readElementText();
+ continue;
+ } else if (xml.name() == "formList") {
+ int cnt = parseMainFormList(xml, uiInfo->mainFormList);
+ qDebug("- formList : %d", cnt);
+ } else if (xml.name() == MENULIST_KEYWORD) {
+ int cnt = parseMenuList(xml, uiInfo->menuList);
+ qDebug("- menuList : %d", cnt);
+ }
+ }
+ }
+
+ return layoutVersion;
}
/* controller */
ControllerForm *XmlLayoutParser::parseControllerForm(QXmlStreamReader &xml)
{
- QString formName = "";
-
/* attribute */
- QXmlStreamAttributes attributes = xml.attributes();
- if (attributes.hasAttribute("name")) {
- formName = attributes.value("name").toString();
- }
-
+ QString formName = xml.attributes().value(NAME_ATTR_KEYWORD).toString();
ControllerForm *form = new ControllerForm(
formName.isEmpty() ? xmlPath.section(QDir::separator(), -1) : formName);
QXmlStreamReader::TokenType token = xml.readNext();
- while (xml.atEnd() == false && (xml.name() == "form" &&
+ while (xml.atEnd() == false && (xml.name() == FORM_KEYWORD &&
token == QXmlStreamReader::EndElement) == false) /* ~ </form> */
{
if (token == QXmlStreamReader::StartElement) {
form->conImg[ControllerForm::pressed].load(
xmlPath + QDir::separator() + pressedImageFileName);
- } else if (xml.name() == "keyList") {
+ } else if (xml.name() == KEYLIST_KEYWORD) {
/* HW keys */
int cnt = parseKeyList(xml, form->keyList);
qDebug("- keyList : %d", cnt);
return form;
}
+
+QString XmlLayoutParser::parseControllerUI(QXmlStreamReader &xml)
+{
+ QString layoutVersion = "undefined";
+
+ ControllerForm *form = NULL;
+ QXmlStreamReader::TokenType token;
+
+ while (xml.atEnd() == false && xml.hasError() == false) {
+ token = xml.readNext();
+ /* If token is just StartDocument, go to next.*/
+ if (token == QXmlStreamReader::StartDocument) {
+ continue;
+ }
+
+ if (token == QXmlStreamReader::StartElement) {
+ if (xml.name() == "ControllerUI") {
+ continue;
+ }
+
+ if (xml.name() == LAYOUTVER_KEYWORD) {
+ layoutVersion = xml.readElementText();
+ continue;
+ } else if (xml.name() == FORM_KEYWORD) {
+ form = parseControllerForm(xml);
+ if (form != NULL) {
+ uiInfo->conFormList.append(form);
+ }
+ }
+ }
+ }
+
+ return layoutVersion;
+}
#include "uiinformation.h"
#include "mainform.h"
#include "menu/menuitem.h"
+#include "menu/advancedmenuitem.h"
+#include "menu/scalemenuitem.h"
#include "controllerform.h"
class XmlLayoutParser
public:
XmlLayoutParser(QString path, UIInformation *uiInfo /* out */);
- int parseMainFormList(QXmlStreamReader &xml, QList<MainForm *> &list);
- int parseMenuList(QXmlStreamReader &xml, QList<MenuItem *> &list);
- ControllerForm *parseControllerForm(QXmlStreamReader &xml);
+ QString parseEmulatorUI(QXmlStreamReader &xml);
+ QString parseControllerUI(QXmlStreamReader &xml);
private:
QRect parseRegion(QXmlStreamReader &xml);
HardwareKey *parseKey(QXmlStreamReader &xml);
int parseKeyList(QXmlStreamReader &xml, QList<HardwareKey *> &list);
MainForm *parseMainForm(QXmlStreamReader &xml);
+ int parseMainFormList(QXmlStreamReader &xml, QList<MainForm *> &list);
- int parseFactorList(QXmlStreamReader &xml, QList<int> &list);
- MenuItem *parseMenuItem(QXmlStreamReader &xml, int menuType);
- int parseMenuListItems(QXmlStreamReader &xml,
- const QString &keyword, QList<MenuItem *> &list);
- int parseAdvancedMenuList(
- QXmlStreamReader &xml, QList<MenuItem *> &list);
+ int parseFactorList(QXmlStreamReader &xml, QMap<int, QString> &map);
+ int parseShortcut(QXmlStreamReader &xml, QMap<QString, QString> &map);
+ AdvancedMenuItem *parseAdvancedMenuItem(QXmlStreamReader &xml);
+ ScaleMenuItem *parseScaleMenuItem(QXmlStreamReader &xml);
+ MenuItem *parseGeneralMenuItem(QXmlStreamReader &xml, int menuType);
+ int parseMenuList(QXmlStreamReader &xml, QList<MenuItem *> &list);
+
+ ControllerForm *parseControllerForm(QXmlStreamReader &xml);
QString xmlPath;
UIInformation *uiInfo;
#include "menu/menuitem.h"
-class AdvancedMenuItem : MenuItem
+class AdvancedMenuItem : public MenuItem
{
public:
AdvancedMenuItem(QString name);
void ContextMenu::createSeparator(QMenu *menu)
{
+ if (menu == NULL) {
+ return;
+ }
+
menu->addSeparator();
}
void ContextMenu::createAdvancedItem(QMenu *menu, MenuItem *item)
{
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
QString menuName = item->getName();
advancedMenu = menu->addMenu(QIcon(QPixmap(":/icons/advanced.png")),
menuName.isEmpty() ? "Advanced" : menuName);
void ContextMenu::createInfoItem(QMenu *menu, MenuItem *item)
{
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
QString menuName = item->getName();
- actionDetailedInfo = addGeneralAction(menu, menuName.isEmpty() ? vmName : menuName,
- QIcon(QPixmap(":/icons/detailed_info.png")), SLOT(slotDetailedInfo()));
+ actionDetailedInfo = addGeneralAction(menu, QIcon(QPixmap(":/icons/detailed_info.png")),
+ menuName.isEmpty() ? vmName : menuName, SLOT(slotDetailedInfo()));
}
void ContextMenu::createOnTopItem(QMenu *menu, MenuItem *item)
{
- actionTopMost = menu->addAction(item->getName());
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
+ QString menuName = item->getName();
+ actionTopMost = menu->addAction(menuName.isEmpty() ? "Always on Top" : menuName);
actionTopMost->setCheckable(true);
connect(actionTopMost, SIGNAL(triggered(bool)), this, SLOT(slotTopMost(bool)));
}
void ContextMenu::createSwitchItem(QMenu *menu, MenuItem *item)
{
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
QList<MainForm *> mainFormList = parent->uiInfo->mainFormList;
if (mainFormList.isEmpty() == false) {
+ QString menuName = item->getName();
switchMenu = menu->addMenu(
- QIcon(QPixmap(":/icons/rotate.png")), item->getName());
+ QIcon(QPixmap(":/icons/rotate.png")), menuName.isEmpty() ? "Switch" : menuName);
QActionGroup *switchGroup = new QActionGroup(this);
switchMapper = new QSignalMapper(this);
connect(switchMapper, SIGNAL(mapped(int)), this, SLOT(slotSwitch(int)));
void ContextMenu::createScaleItem(QMenu *menu, MenuItem *item)
{
- QList<int> factorList = ((ScaleMenuItem *)item)->getFactorList();
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
+ QMap<int, QString> factorMap = ((ScaleMenuItem *)item)->getFactorMap();
- if (factorList.isEmpty() == false) {
+ if (factorMap.isEmpty() == false) {
+ QString menuName = item->getName();
scaleMenu = menu->addMenu(
- QIcon(QPixmap(":/icons/scale.png")), item->getName());
+ QIcon(QPixmap(":/icons/scale.png")), menuName.isEmpty() ? "Scale" : menuName);
QActionGroup *scaleGroup = new QActionGroup(this);
scaleMapper = new QSignalMapper(this);
connect(scaleMapper, SIGNAL(mapped(int)), this, SLOT(slotScale(int)));
QAction *action = NULL;
- for (int i = 0; i < factorList.count(); i++) {
- action = scaleMenu->addAction(QString::number(factorList.at(i)) + "%");
+
+ QMapIterator<int, QString> iter(factorMap);
+ iter.toBack();
+ while(iter.hasPrevious() == true) {
+ iter.previous();
+
+ QString factorName = iter.value();
+ action = scaleMenu->addAction(
+ factorName.isEmpty() ? (QString::number(iter.key()) + '%') : factorName);
action->setActionGroup(scaleGroup);
action->setCheckable(true);
- scaleMapper->setMapping(action, factorList.at(i));
+ scaleMapper->setMapping(action, iter.key());
connect(action, SIGNAL(triggered()), scaleMapper, SLOT(map()));
}
void ContextMenu::createControllerItem(QMenu *menu, MenuItem *item)
{
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
QList<ControllerForm *> conFormList = parent->uiInfo->conFormList;
if (conFormList.isEmpty() == false) {
- controllerMenu = menu->addMenu(item->getName());
+ QString menuName = item->getName();
+ controllerMenu = menu->addMenu(menuName.isEmpty() ? "Controller" : menuName);
QActionGroup *controllerGroup = new QActionGroup(this);
controllerMapper = new QSignalMapper(this);
connect(controllerMapper, SIGNAL(mapped(int)), this,
void ContextMenu::createHostKeyboardItem(QMenu *menu, MenuItem *item)
{
- QMenu *keyboardMenu = menu->addMenu(
- QIcon(QPixmap(":/icons/host_keyboard.png")), item->getName());
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
+ QString menuName = item->getName();
+ QMenu *keyboardMenu = menu->addMenu(QIcon(QPixmap(":/icons/host_keyboard.png")),
+ menuName.isEmpty() ? "Host keyboard" : menuName);
QActionGroup *keyboardGroup = new QActionGroup(this);
QAction *action = keyboardMenu->addAction("On");
void ContextMenu::createShellItem(QMenu *menu, MenuItem *item)
{
- actionShell = addGeneralAction(menu, item->getName(),
- QIcon(QPixmap(":/icons/shell.png")), SLOT(slotShell()));
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
+ QString menuName = item->getName();
+ actionShell = addGeneralAction(menu, QIcon(QPixmap(":/icons/shell.png")),
+ menuName.isEmpty() ? "Shell" : menuName, SLOT(slotShell()));
}
void ContextMenu::createControlPanelItem(QMenu *menu, MenuItem *item)
{
- actionControlPanel = addGeneralAction(menu, item->getName(),
- QIcon(QPixmap(":/icons/control_panel.png")), SLOT(slotControlPanel()));
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
+ QString menuName = item->getName();
+ actionControlPanel = addGeneralAction(menu, QIcon(QPixmap(":/icons/control_panel.png")),
+ menuName.isEmpty() ? "Control Panel" : menuName, SLOT(slotControlPanel()));
}
void ContextMenu::createScreenShotItem(QMenu *menu, MenuItem *item)
{
- actionScreenShot = addGeneralAction(menu, item->getName(),
- QIcon(QPixmap(":/icons/screen_shot.png")),
- SLOT(slotRequestScreenshot()));
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
+ QString menuName = item->getName();
+ actionScreenShot = addGeneralAction(menu, QIcon(QPixmap(":/icons/screen_shot.png")),
+ menuName.isEmpty() ? "Screen Shot" : menuName, SLOT(slotRequestScreenshot()));
}
void ContextMenu::createAboutItem(QMenu *menu, MenuItem *item)
{
- actionAbout = addGeneralAction(menu, item->getName(),
- QIcon(QPixmap(":/icons/about.png")), SLOT(slotAbout()));
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
+ QString menuName = item->getName();
+ actionAbout = addGeneralAction(menu, QIcon(QPixmap(":/icons/about.png")),
+ menuName.isEmpty() ? "About" : menuName, SLOT(slotAbout()));
}
void ContextMenu::createForceCloseItem(QMenu *menu, MenuItem *item)
{
- actionForceClose = addGeneralAction(menu, item->getName(),
- QIcon(QPixmap(":/icons/force_close.png")), SLOT(slotForceClose()));
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
+ QString menuName = item->getName();
+ actionForceClose = addGeneralAction(menu, QIcon(QPixmap(":/icons/force_close.png")),
+ menuName.isEmpty() ? "Force Close" : menuName, SLOT(slotForceClose()));
}
void ContextMenu::createCloseItem(QMenu *menu, MenuItem *item)
{
- actionClose = addGeneralAction(menu, item->getName(),
- QIcon(QPixmap(":/icons/close.png")), SLOT(slotClose()));
+ if (menu == NULL || item == NULL) {
+ return;
+ }
+
+ QString menuName = item->getName();
+ actionClose = addGeneralAction(menu, QIcon(QPixmap(":/icons/close.png")),
+ menuName.isEmpty() ? "Close" : menuName, SLOT(slotClose()));
}
QAction *ContextMenu::addGeneralAction(QMenu *menu,
- const QString &text, const QIcon &icon, const char *slot)
+ const QIcon &icon, const QString &text, const char *slot)
{
QAction *action = menu->addAction(text);
action->setIcon(icon);
private:
QAction *addGeneralAction(QMenu *menu,
- const QString &text, const QIcon &icon, const char *slot);
+ const QIcon &icon, const QString &text, const char *slot);
void showPopup(QString msg);
MainWindow *parent;
return name;
}
+QMap<QString, QString> &MenuItem::getShortcutMap()
+{
+ return shortcutMap;
+}
+
MenuItem::~MenuItem()
{
/* do nothing */
#define MENUITEM_H
#include <QString>
+#include <QMap>
namespace MenuItemType
{
int getType();
QString getName();
+ QMap<QString, QString> &getShortcutMap();
private:
int type;
QString name;
+ QMap<QString, QString> shortcutMap;
};
#endif // MENUITEM_H
/* do nothing */
}
-QList<int> &ScaleMenuItem::getFactorList()
+QMap<int, QString> &ScaleMenuItem::getFactorMap()
{
- return factorList;
+ return factorMap;
}
ScaleMenuItem::~ScaleMenuItem()
{
qDebug("destroy a scale menu item");
- factorList.clear();
+ factorMap.clear();
}
#ifndef SCALEMENUITEM_H
#define SCALEMENUITEM_H
-#include <QList>
+#include <QMap>
#include "menu/menuitem.h"
-class ScaleMenuItem : MenuItem
+class ScaleMenuItem : public MenuItem
{
public:
ScaleMenuItem(QString name);
~ScaleMenuItem();
- QList<int> &getFactorList();
+ QMap<int, QString> &getFactorMap();
private:
- QList<int> factorList;
+ QMap<int, QString> factorMap;
};
#endif // SCALEMENUITEM_H
<shortcut>Ctrl+F2</shortcut>
</onTopItem>
<switchItem name="Rotate">
- <shortcut property="up">Ctrl+Num7</shortcut>
- <shortcut property="down">Ctrl+Num9</shortcut>
+ <shortcut property="prev">Ctrl+Num7</shortcut>
+ <shortcut property="next">Ctrl+Num9</shortcut>
</switchItem>
<scaleItem name="Scale">
- <shortcut property="up">Ctrl+F9</shortcut>
- <shortcut property="down">Ctrl+F10</shortcut>
+ <shortcut property="prev">Ctrl+F9</shortcut>
+ <shortcut property="next">Ctrl+F10</shortcut>
<factorList>
- <factor>100</factor>
- <factor>75</factor>
- <factor>50</factor>
- <factor>25</factor>
+ <factor name="1x">100</factor>
+ <factor name="3/4x">75</factor>
+ <factor name="1/2x">50</factor>
+ <factor name="1/4x">25</factor>
</factorList>
</scaleItem>
<separator/>
- <advancedList>
- <screenShotItem name="Screen Shot">
- <shortcut>Ctrl+F7</shortcut>
- </screenShotItem>
- <separator/>
- <aboutItem name="About"/>
- <forceCloseItem name="Force Close">
- <shortcut>Ctrl+F4</shortcut>
- </forceCloseItem>
- </advancedList>
+ <advancedItem>
+ <menuList>
+ <screenShotItem name="Screen Shot">
+ <shortcut>Ctrl+F7</shortcut>
+ </screenShotItem>
+ <hostKeyboardItem name="Host Keyboard">
+ </hostKeyboardItem>
+ <separator/>
+ <aboutItem name="About"/>
+ <forceCloseItem name="Force Close">
+ <shortcut>Ctrl+F4</shortcut>
+ </forceCloseItem>
+ </menuList>
+ </advancedItem>
<shellItem name="Shell">
<shortcut>Ctrl+F5</shortcut>
</shellItem>
<controlPanelItem name="Control Panel">
<shortcut>Ctrl+F6</shortcut>
</controlPanelItem>
+ <separator/>
<closeItem name="Close">
<shortcut>F4</shortcut>
</closeItem>
</keyList>
</form>
</formList>
+
+ <menuList>
+ <infoItem>
+ <shortcut>Ctrl+F1</shortcut>
+ </infoItem>
+ <separator/>
+ <onTopItem name="Always on Top">
+ <shortcut>Ctrl+F2</shortcut>
+ </onTopItem>
+ <switchItem name="Rotate">
+ <shortcut property="prev">Ctrl+Num7</shortcut>
+ <shortcut property="next">Ctrl+Num9</shortcut>
+ </switchItem>
+ <separator/>
+ <advancedItem>
+ <menuList>
+ <screenShotItem name="Screen Shot">
+ <shortcut>Ctrl+F7</shortcut>
+ </screenShotItem>
+ <separator/>
+ <aboutItem name="About"/>
+ <forceCloseItem name="Force Close">
+ <shortcut>Ctrl+F4</shortcut>
+ </forceCloseItem>
+ </menuList>
+ </advancedItem>
+ <shellItem name="Shell">
+ <shortcut>Ctrl+F5</shortcut>
+ </shellItem>
+ <controlPanelItem name="Control Panel">
+ <shortcut>Ctrl+F6</shortcut>
+ </controlPanelItem>
+ <separator/>
+ <closeItem name="Close">
+ <shortcut>F4</shortcut>
+ </closeItem>
+ </menuList>
+
</EmulatorUI>