core/vgui/impl/qt4/vgui_qt_menu.cxx
Go to the documentation of this file.
00001 #include "vgui_qt_menu.h"
00002 //:
00003 // \file
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 //: Convert a vgui keypress into a QT key press
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 }