mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-13 19:54:17 +02:00
* editor menu improvements
This commit is contained in:
@@ -29,54 +29,71 @@ Editor::~Editor()
|
||||
|
||||
void Editor::createMenus()
|
||||
{
|
||||
enum MenuName {FILE, EDIT, VIEW, TOOLS, PLAYER, HELP};
|
||||
std::map<std::string, std::function<void()> > actions; //connect these to actions
|
||||
enum MenuName {FILE=0, EDIT, VIEW, TOOLS, PLAYER, HELP, //main level
|
||||
TERRAIN=0, RIVER, ROADS, ERASE, OBSTACLES, OBJECTS}; //tools submenus
|
||||
|
||||
QMenu * menus[6];
|
||||
for(int i=0; i<6; ++i)
|
||||
menus[i] = menuBar()->addMenu(tr(txtEditor[751+i].c_str()));
|
||||
|
||||
auto addMenu = [&](QMenu ** menuList, int txtBegin, int count, std::string actionBase, MenuName mn, const std::vector<int> & separators)
|
||||
{
|
||||
for(int i=0; i<count; ++i)
|
||||
{
|
||||
if(vstd::contains(separators, i))
|
||||
menuList[mn]->addSeparator();
|
||||
QAction * qa = new QAction(tr(txtEditor[txtBegin+i].c_str()), menus[mn]);
|
||||
std::string actionName = actionBase + "|" + boost::lexical_cast<std::string>(i);
|
||||
if(vstd::contains(actions, actionName))
|
||||
{
|
||||
QObject::connect(qa, &QAction::triggered, actions[actionName]);
|
||||
}
|
||||
menuList[mn]->addAction(qa);
|
||||
}
|
||||
};
|
||||
|
||||
//terrain submenus
|
||||
QMenu* toolMenus[6];
|
||||
for(int i=0; i<6; ++i)
|
||||
{
|
||||
if(i == 4)
|
||||
menus[FILE]->addSeparator();
|
||||
QAction * qa = new QAction(tr(txtEditor[758+i].c_str()), menus[FILE]);
|
||||
menus[FILE]->addAction(qa);
|
||||
}
|
||||
toolMenus[i] = menus[TOOLS]->addMenu(tr(txtEditor[789+i].c_str()));
|
||||
|
||||
for(int i=0; i<10; ++i)
|
||||
{
|
||||
if(i == 2 || i == 6 || i == 9)
|
||||
menus[EDIT]->addSeparator();
|
||||
QAction * qa = new QAction(tr(txtEditor[860+i].c_str()), menus[EDIT]);
|
||||
menus[EDIT]->addAction(qa);
|
||||
}
|
||||
using namespace boost::assign;
|
||||
std::vector<int> seps;
|
||||
seps += 4;
|
||||
|
||||
for(int i=0; i<10; ++i)
|
||||
{
|
||||
if(i == 2 || i == 3 || i == 7)
|
||||
menus[VIEW]->addSeparator();
|
||||
QAction * qa = new QAction(tr(txtEditor[778+i].c_str()), menus[VIEW]);
|
||||
menus[VIEW]->addAction(qa);
|
||||
}
|
||||
addMenu(menus, 758, 6, "file", FILE, seps);
|
||||
|
||||
seps.clear(); seps += 2, 6, 8;
|
||||
addMenu(menus, 860, 10, "edit", EDIT, seps);
|
||||
|
||||
for(int i=0; i<9; ++i)
|
||||
{
|
||||
if(i == 6 || i == 8)
|
||||
menus[TOOLS]->addSeparator();
|
||||
QAction * qa = new QAction(tr(txtEditor[789+i].c_str()), menus[TOOLS]);
|
||||
menus[TOOLS]->addAction(qa);
|
||||
}
|
||||
seps.clear(); seps += 2, 3, 7;
|
||||
addMenu(menus, 778, 10, "view", VIEW, seps);
|
||||
|
||||
for(int i=0; i<9; ++i)
|
||||
{
|
||||
QAction * qa = new QAction(tr(txtEditor[846+i].c_str()), menus[PLAYER]);
|
||||
menus[PLAYER]->addAction(qa);
|
||||
}
|
||||
seps.clear(); seps += 0, 2;
|
||||
addMenu(menus, 795, 3, "tools", TOOLS, seps);
|
||||
|
||||
for(int i=0; i<2; ++i)
|
||||
{
|
||||
if(i == 1)
|
||||
menus[HELP]->addSeparator();
|
||||
QAction * qa = new QAction(tr(txtEditor[856+i].c_str()), menus[HELP]);
|
||||
menus[HELP]->addAction(qa);
|
||||
}
|
||||
seps.clear();
|
||||
addMenu(menus, 846, 9, "player", PLAYER, seps);
|
||||
|
||||
seps.clear(); seps += 1;
|
||||
addMenu(menus, 856, 2, "help", HELP, seps);
|
||||
|
||||
seps.clear(); seps += 4;
|
||||
addMenu(toolMenus, 799, 14, "tools|terrain", TERRAIN, seps);
|
||||
|
||||
seps.clear();;
|
||||
addMenu(toolMenus, 814, 5, "tools|rivers", RIVER, seps);
|
||||
|
||||
seps.clear();
|
||||
addMenu(toolMenus, 820, 4, "tools|roads", ROADS, seps);
|
||||
|
||||
seps.clear();
|
||||
addMenu(toolMenus, 825, 4, "tools|erase", ERASE, seps);
|
||||
|
||||
seps.clear(); seps += 16;
|
||||
addMenu(toolMenus, 872, 17, "tools|obstacles", OBSTACLES, seps);
|
||||
|
||||
seps.clear();
|
||||
addMenu(toolMenus, 830, 15, "tools|objects", OBJECTS, seps);
|
||||
}
|
||||
|
Reference in New Issue
Block a user