}
}
} else {
- GeneralPurposeCon *generalCon = new GeneralPurposeCon();
+ GeneralPurposeCon *generalCon = new GeneralPurposeCon(parent->getMainWindow());
- generalCon->createHeaderBarAndBorder(scene(), parent->getMainWindow()->getUiInfo(), false);
+ generalCon->createHeaderBarAndBorder(scene(), false);
QList<HWKeyButton *> buttons
= generalCon->createButtons(scene(), parentWidget(), conForm);
-
- for (int i = 0; i < buttons.count(); i++) {
- HWKeyButton *button = buttons.at(i);
- if (button->getSlot() == NULL) {
- continue;
- }
- connect(button, SIGNAL(clicked()),
- parent->getMainWindow()->getPopupMenu(), button->getSlot());
- }
}
}
}
}
} else {
- GeneralPurposeCon *generalCon = new GeneralPurposeCon();
+ GeneralPurposeCon *generalCon = new GeneralPurposeCon(parent->getMainWindow());
- generalCon->createHeaderBarAndBorder(scene(), parent->getMainWindow()->getUiInfo(), true);
+ generalCon->createHeaderBarAndBorder(scene(), true);
QList<HWKeyButton *> buttons
= generalCon->createButtons(scene(), parentWidget(), conForm);
-
- for (int i = 0; i < buttons.count(); i++) {
- HWKeyButton *button = buttons.at(i);
- if (button->getSlot() == NULL) {
- continue;
- }
- connect(button, SIGNAL(clicked()),
- parent->getMainWindow()->getPopupMenu(), button->getSlot());
- }
}
}
#include "generalpurposecon.h"
#include "resource/ui_strings.h"
+#include "menu/advancedmenuitem.h"
-GeneralPurposeCon::GeneralPurposeCon()
+GeneralPurposeCon::GeneralPurposeCon(MainWindow *window)
{
qDebug("create general purpose controller");
+ mainWindow = window;
}
-void GeneralPurposeCon::createHeaderBarAndBorder(QGraphicsScene *scene, UiInformation *uiInfo, bool isFloating)
+void GeneralPurposeCon::createHeaderBarAndBorder(QGraphicsScene *scene, bool isFloating)
{
+ UiInformation *uiInfo = mainWindow->getUiInfo();
QSize size = uiInfo->getConSize();
// draw color bar
keyButton->setToolTip(hwKey->getName() + " " + tooltip);
keyButton->move(topLeft.x() + (GPC_KEYBUTTON_WIDTH + GPC_KEYBUTTON_HSPACING) * c,
topLeft.y() + (GPC_KEYBUTTON_HEIGHT + GPC_KEYBUTTON_VSPACING) * i);
+ if (hwKey->getKeycode() == 0) {
+ // set menu slot
+ bool find = setMenuSlot(keyButton, hwKey->getName(), mainWindow->getUiInfo()->getMenuList());
+ if (!find) {
+ QObject::connect(keyButton, SIGNAL(clicked()), mainWindow->getPopupMenu(),
+ SLOT(slotUndefinedMenu()));
+ }
+ }
buttonList.append(keyButton);
}
}
}
+bool GeneralPurposeCon::setMenuSlot(HWKeyButton *button, QString name, QList<MenuItem *> &list)
+{
+ MenuItem *item = NULL;
+ bool find = false;
+ for (int i = 0; i < list.count(); i++) {
+ item = list.at(i);
+ if (item->getType() == MenuItemType::advancedItem) {
+ find = setMenuSlot(button, name, ((AdvancedMenuItem *)item)->getMenuList());
+ if (find == true) {
+ break;
+ }
+ } else {
+ if (QString::compare(name, item->getName()) == 0) {
+ QObject::connect(button,
+ SIGNAL(clicked()), mainWindow->getPopupMenu(), item->getSlot());
+ find = true;
+ break;
+ }
+ }
+ }
+
+ return find;
+}
+
GeneralPurposeCon::~GeneralPurposeCon()
{
qDebug("destroy general purpose controller");
#include "layout/hardwarekey.h"
#include "controller/hwkeybutton.h"
#include "layout/controllerform.h"
-#include "uiinformation.h"
+#include "mainwindow.h"
#define GPC_HEAD_BAR_HEIGHT (5)
#define GPC_BORDER_SIZE (1.0)
{
public:
- GeneralPurposeCon();
+ GeneralPurposeCon(MainWindow *window);
~GeneralPurposeCon();
- void createHeaderBarAndBorder(QGraphicsScene *scene, UiInformation *uiInfo, bool isFloating);
+ void createHeaderBarAndBorder(QGraphicsScene *scene, bool isFloating);
QList<HWKeyButton *> createButtons(QGraphicsScene *scene, QWidget *parent, ControllerForm *form);
private:
void createKeyList(QWidget *parent, QList<HardwareKey *> keyList, QPoint topLeft, int count, QList<HWKeyButton *> &buttonList);
+ bool setMenuSlot(HWKeyButton *dbutton, QString name, QList<MenuItem *> &list);
+ MainWindow *mainWindow;
};
#endif // GENERALPURPOSECON_H
initialize(DEFAULT_NAME, size);
}
}
-
- //FIXME: set slot for menu button
- if (hwKey->getKeycode() == 0) {
- QString name = hwKey->getName();
- if (QString::compare(name, "Control Panel") == 0) {
- slot = SLOT(slotControlPanel());
- } else if (QString::compare(name, "Screen Shot") == 0) {
- slot = SLOT(slotRequestScreenshot());
- } else if (QString::compare(name, "Rotate") == 0) {
- slot = SLOT(slotSwitchShortcutNext());
- } else if (QString::compare(name, "Shell") == 0) {
- slot = SLOT(slotShell());
- } else {
- slot = NULL;
- }
- } else {
- slot = NULL;
- }
}
void HWKeyButton::initialize(QSize size)
QPushButton::mouseReleaseEvent(event);
}
-const char *HWKeyButton::getSlot()
-{
- return slot;
-}
-
HWKeyButton::~HWKeyButton()
{
/* do nothing */
public:
HWKeyButton(QWidget *parent, HardwareKey *hwKey, QSize size);
~HWKeyButton();
- virtual const char *getSlot();
protected:
virtual void initialize(QSize size);
private:
HardwareKey *hwKey;
- const char *slot;
};
#endif // HWKEYBUTTON_H
actionDetailedInfo->setIconText(menuName.isEmpty() ? QString(DETAILED_INFO_TITLE) : menuName);
+ item->setSlot(SLOT(slotDetailedInfo()));
item->setAction(actionDetailedInfo);
}
attachShortcut(actionOnTop, shortcut, SLOT(slotOnTopShortcut()));
}
+ item->setSlot(SLOT(slotOnTopShortcut()));
item->setAction(actionOnTop);
}
: new QShortcut(item->getShortcuts().begin().value(), parent),
SLOT(slotMove()));
+ item->setSlot(SLOT(slotMove()));
item->setAction(actionMove);
}
qWarning("cannot create a switchItem");
}
+ item->setSlot(SLOT(slotSwitchShortcutNext()));
item->setAction(switchMenu->menuAction());
}
qWarning("cannot create a scaleItem");
}
+ item->setSlot(SLOT(slotScaleShortcutNext()));
item->setAction(scaleMenu->menuAction());
}
qWarning("cannot create a controllerItem");
}
+ item->setSlot(SLOT(slotConShortcutNext()));
item->setAction(controllerMenu->menuAction());
}
hostKbdAction->setCheckable(true);
hostKbdAction->setChecked(true);
+ // item->setSlot(slotHostKeyboardShortcut());
item->setAction(hostKbdAction);
}
new QShortcut(item->getShortcuts().begin().value(), parent),
SLOT(slotShell()));
+ item->setSlot(SLOT(slotShell()));
item->setAction(actionShell);
}
new QShortcut(item->getShortcuts().begin().value(), parent),
SLOT(slotControlPanel()));
+ item->setSlot(SLOT(slotControlPanel()));
item->setAction(actionControlPanel);
}
new QShortcut(item->getShortcuts().begin().value(), parent),
SLOT(slotRequestScreenshot()));
+ item->setSlot(SLOT(slotRequestScreenshot()));
item->setAction(actionScreenShot);
}
new QShortcut(item->getShortcuts().begin().value(), parent),
SLOT(slotAbout()));
+ item->setSlot(SLOT(slotAbout()));
item->setAction(actionAbout);
}
new QShortcut(item->getShortcuts().begin().value(), parent),
SLOT(slotSystemReset()));
+ item->setSlot(SLOT(slotSystemReset()));
item->setAction(actionSystemReset);
}
new QShortcut(item->getShortcuts().begin().value(), parent),
SLOT(slotForceClose()));
+ item->setSlot(SLOT(slotForceClose()));
item->setAction(actionForceClose);
}
new QShortcut(item->getShortcuts().begin().value(), parent),
SLOT(slotClose()));
+ item->setSlot(SLOT(slotClose()));
item->setAction(actionClose);
}
return QObject::eventFilter(obj, event);
}
+void ContextMenu::slotUndefinedMenu()
+{
+ QMessageBox::warning(parent, EMULATOR_TITLE, MENU_UNDEFINED_ERROR);
+}
+
void ContextMenu::slotAmbiguousShortcut()
{
/* When a shortcut's key sequence is completed, activatedAmbiguously()
* start of one or more other shortcuts). */
qWarning("one shortcut key was overlapped with another");
- QMessageBox::warning(parent, EMULATOR_TITLE,
- "When a key sequence is being typed at the keyboard, "\
- "it is said to be ambiguous as long as it matches the start of more than one shortcut.");
+ QMessageBox::warning(parent, EMULATOR_TITLE, MENE_AMBIGUOUS_SHORTCUT);
}
void ContextMenu::slotDetailedInfo()
void slotClose();
void slotPwkeyRelease();
+ void slotUndefinedMenu();
+
protected:
void createItems(QMenu *menu, QList<MenuItem *> &list);
void createSeparator(QMenu *menu);
return action;
}
+const char *MenuItem::getSlot()
+{
+ return slot;
+}
+
+void MenuItem::setSlot(const char *slot)
+{
+ this->slot = slot;
+}
+
+
MenuItem::~MenuItem()
{
/* do nothing */
QMap<QString, QKeySequence> &getShortcuts();
void setAction(QAction *action);
QAction *getAction();
+ const char *getSlot();
+ void setSlot(const char *slot);
private:
int type;
QString name;
QMap<QString, QKeySequence> shortcuts;
QAction *action;
+
+ const char *slot;
};
#endif // MENUITEM_H
#define MENU_ON_ITEM_TEXT "On"
#define MENU_OFF_ITEM_TEXT "OFF"
+#define MENU_UNDEFINED_ERROR "The corresponding context menu does not exist"
+#define MENE_AMBIGUOUS_SHORTCUT "When a key sequence is being typed at the keyboard,\n"\
+ "it is said to be ambiguous as long as it matches the start of more than one shortcut."
/* detailed info dialog */
#define DETAILED_INFO_TITLE "Detailed Info"
#define DETAILED_INFO_VMTAB_TITLE "VM Info"