Go to the documentation of this file.00001 #include "vgui_qt_menu.h"
00002
00003
00004 #include "vgui_qt_adaptor.h"
00005
00006
00007
00008 vgui_qt_menu::vgui_qt_menu(const vgui_menu& menu, QWidget * parent )
00009 : QMenu(parent)
00010 {
00011 connect(this, SIGNAL(triggered(QAction*)), this, SLOT(upon_trigger(QAction*)));
00012
00013 for (unsigned int i=0; i < menu.size(); ++i)
00014 {
00015 if (menu[i].is_separator())
00016 {
00017 this->addSeparator();
00018 }
00019 else if (menu[i].is_command())
00020 {
00021 QAction* action = this->addAction(menu[i].name.c_str());
00022 action->setShortcut(vgui_key_to_qt(menu[i].short_cut.key,
00023 menu[i].short_cut.mod));
00024 commands_[action] = menu[i].cmnd;
00025 }
00026 else if (menu[i].is_submenu())
00027 {
00028 vgui_qt_menu* qm = new vgui_qt_menu(*(menu[i].menu));
00029 qm->setTitle(menu[i].name.c_str());
00030 this->addMenu((QMenu*)qm);
00031 }
00032 }
00033 }
00034
00035
00036
00037
00038
00039 void vgui_qt_menu::upon_trigger(QAction * action) const
00040 {
00041 vcl_map<QAction*, vgui_command_sptr>::const_iterator i = commands_.find(action);
00042 if (i != commands_.end() && bool(i->second))
00043 i->second->execute();
00044 }
00045
00046
00047
00048
00049 QKeySequence vgui_key_to_qt(vgui_key key, vgui_modifier mod)
00050 {
00051 int keypress = 0;
00052 keypress += vgui_qt_adaptor::translate(mod);
00053 keypress += vgui_qt_adaptor::translate(key);
00054
00055 return QKeySequence( keypress );
00056 }