123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #include "StdInc.h"
- #include "Editor.h"
- #include "../lib/VCMI_Lib.h"
- #include "../lib/VCMIDirs.h"
- #include "../lib/filesystem/CResourceLoader.h"
- #include "../lib/CGeneralTextHandler.h"
- #include "../lib/mapping/CMap.h"
- #include "../lib/mapping/CMapService.h"
- Editor::Editor(QWidget *parent)
- : QMainWindow(parent)
- {
- logfile = new std::ofstream((VCMIDirs::get().localPath() + "/VCMI_Editor_log.txt").c_str());
- console = new CConsoleHandler;
- preinitDLL(console,logfile);
- loadDLLClasses();
- VLC->generaltexth->readToVector("DATA/EDITOR", txtEditor);
- VLC->generaltexth->readToVector("DATA/EDITRCMD", txtEditorCmd);
- ui.setupUi(this);
- createMenus();
- }
- Editor::~Editor()
- {
- }
- void Editor::createMenus()
- {
- 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
- //txts are in wrong order
- std::swap(txtEditor[793], txtEditor[797]);
- std::swap(txtEditor[794], txtEditor[797]);
- std::swap(txtEditor[795], txtEditor[797]);
- std::swap(txtEditor[796], txtEditor[797]);
- //setting up actions
- actions["file|1"] = [&]()
- {
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
- "",
- tr("Files (*.h3m)"));
- std::ifstream is;
- is.open (fileName.toStdString().c_str(), std::ios::binary );
- // get length of file
- is.seekg (0, std::ios::end);
- int length = is.tellg();
- is.seekg (0, std::ios::beg);
- char* buffer = new char [length];
- is.read (buffer, length);
- is.close();
- map = CMapService::loadMap((ui8*)buffer, length);
- };
- //setting up menus
- 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)
- toolMenus[i] = menus[TOOLS]->addMenu(tr(txtEditor[789+i].c_str()));
- using namespace boost::assign;
- std::vector<int> seps;
- seps += 4;
- addMenu(menus, 758, 6, "file", FILE, seps);
-
- seps.clear(); seps += 2, 6, 8;
- addMenu(menus, 860, 10, "edit", EDIT, seps);
- seps.clear(); seps += 2, 3, 7;
- addMenu(menus, 778, 10, "view", VIEW, seps);
- seps.clear(); seps += 0, 2;
- addMenu(menus, 795, 3, "tools", TOOLS, seps);
- 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);
- }
|