From c6eaa7429d690f6cc28237b8b97ae1c798e59197 Mon Sep 17 00:00:00 2001 From: GiWoong Kim Date: Tue, 10 Feb 2015 19:16:03 +0900 Subject: [PATCH] menu: reinforce the XML parsing declare default menu names added shortcut parsing dynamic configuration for scale factor code cleanup & etc Change-Id: Ibb50b0a856560ddfede52af5721709220f7230ce Signed-off-by: GiWoong Kim --- tizen/src/display/qt5_supplement.cpp | 60 +---- tizen/src/display/xmllayoutparser.cpp | 278 ++++++++++++++------- tizen/src/display/xmllayoutparser.h | 22 +- tizen/src/ui/menu/advancedmenuitem.h | 2 +- tizen/src/ui/menu/contextmenu.cpp | 127 ++++++++-- tizen/src/ui/menu/contextmenu.h | 2 +- tizen/src/ui/menu/menuitem.cpp | 5 + tizen/src/ui/menu/menuitem.h | 3 + tizen/src/ui/menu/scalemenuitem.cpp | 6 +- tizen/src/ui/menu/scalemenuitem.h | 8 +- .../ui/resource/mobile-720x1280-3btn/layout.xml | 41 +-- .../ui/resource/wearable-320x320-1btn/layout.xml | 38 +++ 12 files changed, 390 insertions(+), 202 deletions(-) diff --git a/tizen/src/display/qt5_supplement.cpp b/tizen/src/display/qt5_supplement.cpp index 4321bef..ac531c2 100644 --- a/tizen/src/display/qt5_supplement.cpp +++ b/tizen/src/display/qt5_supplement.cpp @@ -170,7 +170,7 @@ void qt5_gui_init(void) /* position */ QRect hostBounds = UIUtil::getHostScreenBounds(); - qDebug() << "host geometry : " << hostBounds; + qDebug() << "host geometry :" << hostBounds; int defaultValueX = hostBounds.x() - 1; int defaultValueY = hostBounds.y() - 1; @@ -380,33 +380,10 @@ void loadMainFormFromXML(QFile *file, UIInformation *uiInfo/* out */) 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(); @@ -436,33 +413,10 @@ void loadConFormFromXML(QFile *file, UIInformation *uiInfo/* out */) 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(); diff --git a/tizen/src/display/xmllayoutparser.cpp b/tizen/src/display/xmllayoutparser.cpp index 00b250b..c74ffee 100644 --- a/tizen/src/display/xmllayoutparser.cpp +++ b/tizen/src/display/xmllayoutparser.cpp @@ -28,8 +28,15 @@ */ #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) { @@ -42,9 +49,10 @@ QRect XmlLayoutParser::parseRegion(QXmlStreamReader &xml) 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(); } @@ -73,7 +81,7 @@ DisplayType *XmlLayoutParser::parseDisplay(QXmlStreamReader &xml) token == QXmlStreamReader::EndElement) == false) /* ~ */ { if (token == QXmlStreamReader::StartElement) { - if (xml.name() == "region") { + if (xml.name() == REGION_KEYWORD) { /* region */ displayRegion = parseRegion(xml); qDebug("- display : (%d,%d %dx%d)", @@ -93,16 +101,12 @@ DisplayType *XmlLayoutParser::parseDisplay(QXmlStreamReader &xml) 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(); @@ -110,7 +114,7 @@ HardwareKey *XmlLayoutParser::parseKey(QXmlStreamReader &xml) token == QXmlStreamReader::EndElement) == false) /* ~ */ { if (token == QXmlStreamReader::StartElement) { - if (xml.name() == "region") { + if (xml.name() == REGION_KEYWORD) { /* region */ keyRegion = parseRegion(xml); } else if (xml.name() == "keycode") { @@ -134,7 +138,7 @@ int XmlLayoutParser::parseKeyList( 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) /* ~ */ { if (token == QXmlStreamReader::StartElement) { @@ -154,19 +158,13 @@ int XmlLayoutParser::parseKeyList( 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) /* ~ */ { if (token == QXmlStreamReader::StartElement) { @@ -187,7 +185,10 @@ MainForm *XmlLayoutParser::parseMainForm(QXmlStreamReader &xml) 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); @@ -212,7 +213,7 @@ int XmlLayoutParser::parseMainFormList( token == QXmlStreamReader::EndElement) == false) /* ~ */ { if (token == QXmlStreamReader::StartElement) { - if (xml.name() == "form") { + if (xml.name() == FORM_KEYWORD) { form = parseMainForm(xml); if (form != NULL) { list.append(form); @@ -228,9 +229,8 @@ int XmlLayoutParser::parseMainFormList( /* menu */ int XmlLayoutParser::parseFactorList( - QXmlStreamReader &xml, QList &list) + QXmlStreamReader &xml, QMap &map) { - int factor = 0; QXmlStreamReader::TokenType token = xml.readNext(); while (xml.atEnd() == false && (xml.name() == "factorList" && @@ -238,126 +238,182 @@ int XmlLayoutParser::parseFactorList( { 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 &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) /* ~ */ + { + 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) /* ~ */ + { + 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) /* ~ */ + { + 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 &list) +int XmlLayoutParser::parseMenuList( + QXmlStreamReader &xml, QList &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) /* ~ */ { 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); } @@ -370,35 +426,51 @@ int XmlLayoutParser::parseMenuListItems(QXmlStreamReader &xml, return list.count(); } -int XmlLayoutParser::parseAdvancedMenuList( - QXmlStreamReader &xml, QList &list) +QString XmlLayoutParser::parseEmulatorUI(QXmlStreamReader &xml) { - return parseMenuListItems(xml, "advancedList", list); -} + QString layoutVersion = "undefined"; -int XmlLayoutParser::parseMenuList( - QXmlStreamReader &xml, QList &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) /* ~ */ { if (token == QXmlStreamReader::StartElement) { @@ -416,7 +488,7 @@ ControllerForm *XmlLayoutParser::parseControllerForm(QXmlStreamReader &xml) 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); @@ -430,3 +502,37 @@ ControllerForm *XmlLayoutParser::parseControllerForm(QXmlStreamReader &xml) 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; +} diff --git a/tizen/src/display/xmllayoutparser.h b/tizen/src/display/xmllayoutparser.h index 99a6d4a..9c38c62 100644 --- a/tizen/src/display/xmllayoutparser.h +++ b/tizen/src/display/xmllayoutparser.h @@ -35,6 +35,8 @@ #include "uiinformation.h" #include "mainform.h" #include "menu/menuitem.h" +#include "menu/advancedmenuitem.h" +#include "menu/scalemenuitem.h" #include "controllerform.h" class XmlLayoutParser @@ -42,9 +44,8 @@ class XmlLayoutParser public: XmlLayoutParser(QString path, UIInformation *uiInfo /* out */); - int parseMainFormList(QXmlStreamReader &xml, QList &list); - int parseMenuList(QXmlStreamReader &xml, QList &list); - ControllerForm *parseControllerForm(QXmlStreamReader &xml); + QString parseEmulatorUI(QXmlStreamReader &xml); + QString parseControllerUI(QXmlStreamReader &xml); private: QRect parseRegion(QXmlStreamReader &xml); @@ -52,13 +53,16 @@ private: HardwareKey *parseKey(QXmlStreamReader &xml); int parseKeyList(QXmlStreamReader &xml, QList &list); MainForm *parseMainForm(QXmlStreamReader &xml); + int parseMainFormList(QXmlStreamReader &xml, QList &list); - int parseFactorList(QXmlStreamReader &xml, QList &list); - MenuItem *parseMenuItem(QXmlStreamReader &xml, int menuType); - int parseMenuListItems(QXmlStreamReader &xml, - const QString &keyword, QList &list); - int parseAdvancedMenuList( - QXmlStreamReader &xml, QList &list); + int parseFactorList(QXmlStreamReader &xml, QMap &map); + int parseShortcut(QXmlStreamReader &xml, QMap &map); + AdvancedMenuItem *parseAdvancedMenuItem(QXmlStreamReader &xml); + ScaleMenuItem *parseScaleMenuItem(QXmlStreamReader &xml); + MenuItem *parseGeneralMenuItem(QXmlStreamReader &xml, int menuType); + int parseMenuList(QXmlStreamReader &xml, QList &list); + + ControllerForm *parseControllerForm(QXmlStreamReader &xml); QString xmlPath; UIInformation *uiInfo; diff --git a/tizen/src/ui/menu/advancedmenuitem.h b/tizen/src/ui/menu/advancedmenuitem.h index 5ff6d4f..df7c1cb 100644 --- a/tizen/src/ui/menu/advancedmenuitem.h +++ b/tizen/src/ui/menu/advancedmenuitem.h @@ -34,7 +34,7 @@ #include "menu/menuitem.h" -class AdvancedMenuItem : MenuItem +class AdvancedMenuItem : public MenuItem { public: AdvancedMenuItem(QString name); diff --git a/tizen/src/ui/menu/contextmenu.cpp b/tizen/src/ui/menu/contextmenu.cpp index 8c3e6e5..a7a5ec9 100644 --- a/tizen/src/ui/menu/contextmenu.cpp +++ b/tizen/src/ui/menu/contextmenu.cpp @@ -143,11 +143,19 @@ void ContextMenu::createItems(QMenu *menu, QList &list) 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); @@ -157,25 +165,39 @@ void ContextMenu::createAdvancedItem(QMenu *menu, MenuItem *item) 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 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))); @@ -199,21 +221,33 @@ void ContextMenu::createSwitchItem(QMenu *menu, MenuItem *item) void ContextMenu::createScaleItem(QMenu *menu, MenuItem *item) { - QList factorList = ((ScaleMenuItem *)item)->getFactorList(); + if (menu == NULL || item == NULL) { + return; + } + + QMap 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 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())); } @@ -229,10 +263,15 @@ void ContextMenu::createScaleItem(QMenu *menu, MenuItem *item) void ContextMenu::createControllerItem(QMenu *menu, MenuItem *item) { + if (menu == NULL || item == NULL) { + return; + } + QList 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, @@ -259,8 +298,13 @@ void ContextMenu::createControllerItem(QMenu *menu, MenuItem *item) 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"); @@ -276,43 +320,72 @@ void ContextMenu::createHostKeyboardItem(QMenu *menu, MenuItem *item) 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); diff --git a/tizen/src/ui/menu/contextmenu.h b/tizen/src/ui/menu/contextmenu.h index a6d7cbb..bc68969 100644 --- a/tizen/src/ui/menu/contextmenu.h +++ b/tizen/src/ui/menu/contextmenu.h @@ -103,7 +103,7 @@ protected: 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; diff --git a/tizen/src/ui/menu/menuitem.cpp b/tizen/src/ui/menu/menuitem.cpp index 68fd3a5..b8090fa 100644 --- a/tizen/src/ui/menu/menuitem.cpp +++ b/tizen/src/ui/menu/menuitem.cpp @@ -45,6 +45,11 @@ QString MenuItem::getName() return name; } +QMap &MenuItem::getShortcutMap() +{ + return shortcutMap; +} + MenuItem::~MenuItem() { /* do nothing */ diff --git a/tizen/src/ui/menu/menuitem.h b/tizen/src/ui/menu/menuitem.h index a1586d1..f4629b7 100644 --- a/tizen/src/ui/menu/menuitem.h +++ b/tizen/src/ui/menu/menuitem.h @@ -31,6 +31,7 @@ #define MENUITEM_H #include +#include namespace MenuItemType { @@ -60,10 +61,12 @@ public: int getType(); QString getName(); + QMap &getShortcutMap(); private: int type; QString name; + QMap shortcutMap; }; #endif // MENUITEM_H diff --git a/tizen/src/ui/menu/scalemenuitem.cpp b/tizen/src/ui/menu/scalemenuitem.cpp index ecd45ca..461d9cb 100644 --- a/tizen/src/ui/menu/scalemenuitem.cpp +++ b/tizen/src/ui/menu/scalemenuitem.cpp @@ -35,14 +35,14 @@ ScaleMenuItem::ScaleMenuItem(QString name) : /* do nothing */ } -QList &ScaleMenuItem::getFactorList() +QMap &ScaleMenuItem::getFactorMap() { - return factorList; + return factorMap; } ScaleMenuItem::~ScaleMenuItem() { qDebug("destroy a scale menu item"); - factorList.clear(); + factorMap.clear(); } diff --git a/tizen/src/ui/menu/scalemenuitem.h b/tizen/src/ui/menu/scalemenuitem.h index f413d81..276bcf2 100644 --- a/tizen/src/ui/menu/scalemenuitem.h +++ b/tizen/src/ui/menu/scalemenuitem.h @@ -30,20 +30,20 @@ #ifndef SCALEMENUITEM_H #define SCALEMENUITEM_H -#include +#include #include "menu/menuitem.h" -class ScaleMenuItem : MenuItem +class ScaleMenuItem : public MenuItem { public: ScaleMenuItem(QString name); ~ScaleMenuItem(); - QList &getFactorList(); + QMap &getFactorMap(); private: - QList factorList; + QMap factorMap; }; #endif // SCALEMENUITEM_H diff --git a/tizen/src/ui/resource/mobile-720x1280-3btn/layout.xml b/tizen/src/ui/resource/mobile-720x1280-3btn/layout.xml index 50051c7..c882b07 100644 --- a/tizen/src/ui/resource/mobile-720x1280-3btn/layout.xml +++ b/tizen/src/ui/resource/mobile-720x1280-3btn/layout.xml @@ -173,36 +173,41 @@ Ctrl+F2 - Ctrl+Num7 - Ctrl+Num9 + Ctrl+Num7 + Ctrl+Num9 - Ctrl+F9 - Ctrl+F10 + Ctrl+F9 + Ctrl+F10 - 100 - 75 - 50 - 25 + 100 + 75 + 50 + 25 - - - Ctrl+F7 - - - - - Ctrl+F4 - - + + + + Ctrl+F7 + + + + + + + Ctrl+F4 + + + Ctrl+F5 Ctrl+F6 + F4 diff --git a/tizen/src/ui/resource/wearable-320x320-1btn/layout.xml b/tizen/src/ui/resource/wearable-320x320-1btn/layout.xml index d43acca..e813380 100644 --- a/tizen/src/ui/resource/wearable-320x320-1btn/layout.xml +++ b/tizen/src/ui/resource/wearable-320x320-1btn/layout.xml @@ -63,4 +63,42 @@ + + + + Ctrl+F1 + + + + Ctrl+F2 + + + Ctrl+Num7 + Ctrl+Num9 + + + + + + Ctrl+F7 + + + + + Ctrl+F4 + + + + + Ctrl+F5 + + + Ctrl+F6 + + + + F4 + + + -- 2.7.4