namespace phoenix { void pMenu::append(Action& action) { if(dynamic_cast(&action)) { qtMenu->addMenu(((Menu&)action).p.qtMenu); } else if(dynamic_cast(&action)) { qtMenu->addAction(((Separator&)action).p.qtAction); } else if(dynamic_cast(&action)) { qtMenu->addAction(((Item&)action).p.qtAction); } else if(dynamic_cast(&action)) { qtMenu->addAction(((CheckItem&)action).p.qtAction); } else if(dynamic_cast(&action)) { qtMenu->addAction(((RadioItem&)action).p.qtAction); } } void pMenu::remove(Action& action) { if(dynamic_cast(&action)) { //QMenu::removeMenu() does not exist qtMenu->clear(); for(auto &action : menu.state.action) append(action); } else if(dynamic_cast(&action)) { qtMenu->removeAction(((Separator&)action).p.qtAction); } else if(dynamic_cast(&action)) { qtMenu->removeAction(((Item&)action).p.qtAction); } else if(dynamic_cast(&action)) { qtMenu->removeAction(((CheckItem&)action).p.qtAction); } else if(dynamic_cast(&action)) { qtMenu->removeAction(((CheckItem&)action).p.qtAction); } } void pMenu::setFont(const string& font) { qtMenu->setFont(pFont::create(font)); for(auto &item : menu.state.action) item.p.setFont(font); } void pMenu::setImage(const image& image) { qtMenu->setIcon(CreateIcon(image)); } void pMenu::setText(const string& text) { qtMenu->setTitle(QString::fromUtf8(text)); } void pMenu::constructor() { qtMenu = new QMenu; } void pMenu::destructor() { if(action.state.menu) action.state.menu->remove(menu); delete qtMenu; qtMenu = nullptr; } }