diff --git a/mk/linux/glest b/mk/linux/glest
index 5c929cdc..0977f231 100755
--- a/mk/linux/glest
+++ b/mk/linux/glest
@@ -19,6 +19,7 @@ cd $GAMEDIR
# export game library directory
test -n "${LIBDIR}" && export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${GAMEDIR}/${LIBDIR}"
-./glest.bin > glest.log 2>&1
+#./glest.bin > glest.log 2>&1
+./glest.bin
# ./glest > /tmp/`date +"%F_%k-%M-%S"`.glest.log 2>&1
diff --git a/mk/windoze/Glest.suo b/mk/windoze/Glest.suo
index 7ce27957..5b51999f 100644
Binary files a/mk/windoze/Glest.suo and b/mk/windoze/Glest.suo differ
diff --git a/mk/windoze/g3d_viewer.vcproj b/mk/windoze/g3d_viewer.vcproj
index b37836ba..516ae410 100644
--- a/mk/windoze/g3d_viewer.vcproj
+++ b/mk/windoze/g3d_viewer.vcproj
@@ -39,7 +39,7 @@
@@ -192,7 +192,7 @@
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
@@ -202,11 +202,11 @@
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
diff --git a/mk/windoze/glest_editor.vcproj b/mk/windoze/glest_editor.vcproj
index 73716002..6e4af51c 100644
--- a/mk/windoze/glest_editor.vcproj
+++ b/mk/windoze/glest_editor.vcproj
@@ -40,7 +40,7 @@
@@ -201,7 +201,7 @@
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
@@ -211,19 +211,19 @@
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
diff --git a/mk/windoze/glest_game.vcproj b/mk/windoze/glest_game.vcproj
index b2fd0d46..ffef3c8c 100644
--- a/mk/windoze/glest_game.vcproj
+++ b/mk/windoze/glest_game.vcproj
@@ -388,6 +388,10 @@
RelativePath="..\..\source\glest_game\graphics\renderer.h"
>
+
+
-
-#include "conversion.h"
-
-using namespace Shared::Util;
-using namespace std;
-
-namespace MapEditor {
-
-const string MainWindow::versionString = "v1.5.0-beta3";
-const string MainWindow::winHeader = "Glest Map Editor " + versionString + " - Built: " + __DATE__;
-
-// ===============================================
-// class Global functions
-// ===============================================
-
-wxString ToUnicode(const char* str) {
- return wxString(str, wxConvUTF8);
-}
-
-wxString ToUnicode(const string& str) {
- return wxString(str.c_str(), wxConvUTF8);
-}
-
-// ===============================================
-// class MainWindow
-// ===============================================
-
-MainWindow::MainWindow()
- : wxFrame(NULL, -1, ToUnicode(winHeader), wxDefaultPosition, wxSize(800, 600)) {
-
- fileModified=false;
- lastX=0;
- lastY=0;
- radius=1;
- height=0;
- surface=1;
- object=0;
- resource=0;
- startLocation=1;
- enabledGroup=ctHeight;
- currentBrush=btHeight;
- resourceUnderMouse=0;
- objectUnderMouse=0;
-
- //gl canvas
- int args[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER };
- glCanvas = new GlCanvas(this, args);
-
- //menus
- menuBar = new wxMenuBar();
-
- //file
- menuFile = new wxMenu();
- menuFile->Append(wxID_OPEN);
- menuFile->AppendSeparator();
- menuFile->Append(wxID_SAVE);
- menuFile->Append(wxID_SAVEAS);
- menuFile->AppendSeparator();
- menuFile->Append(wxID_EXIT);
- menuBar->Append(menuFile, wxT("&File"));
-
- //edit
- menuEdit = new wxMenu();
- menuEdit->Append(miEditUndo, wxT("&Undo\tCTRL+z"));
- menuEdit->Append(miEditRedo, wxT("&Redo\tCTRL+y"));
- menuEdit->Append(miEditReset, wxT("Rese&t"));
- menuEdit->Append(miEditResetPlayers, wxT("Reset &Players"));
- menuEdit->Append(miEditResize, wxT("Re&size"));
- menuEdit->Append(miEditFlipX, wxT("Flip &X"));
- menuEdit->Append(miEditFlipY, wxT("Flip &Y"));
- menuEdit->Append(miEditRandomizeHeights, wxT("Randomize &Heights"));
- menuEdit->Append(miEditRandomize, wxT("Randomi&ze"));
- menuEdit->Append(miEditSwitchSurfaces, wxT("Switch Su&rfaces"));
- menuEdit->Append(miEditInfo, wxT("&Info"));
- menuEdit->Append(miEditAdvanced, wxT("&Advanced"));
- menuBar->Append(menuEdit, wxT("&Edit"));
-
- //misc
- menuMisc = new wxMenu();
- menuMisc->Append(miMiscResetZoomAndPos, wxT("&Reset zoom and pos"));
- menuMisc->Append(miMiscAbout, wxT("&About"));
- menuMisc->Append(miMiscHelp, wxT("&Help"));
- menuBar->Append(menuMisc, wxT("&Misc"));
-
- //brush
- menuBrush = new wxMenu();
-
- // Glest height brush
- menuBrushHeight = new wxMenu();
- for (int i = 0; i < heightCount; ++i) {
- menuBrushHeight->AppendCheckItem(miBrushHeight + i + 1, ToUnicode(intToStr(i - heightCount / 2)));
- }
- menuBrushHeight->Check(miBrushHeight + (heightCount + 1) / 2, true);
- menuBrush->Append(miBrushHeight, wxT("&Height"), menuBrushHeight);
-
- enabledGroup = ctHeight;
-
- // ZombiePirate height brush
- menuBrushGradient = new wxMenu();
- for (int i = 0; i < heightCount; ++i) {
- menuBrushGradient->AppendCheckItem(miBrushGradient + i + 1, ToUnicode(intToStr(i - heightCount / 2)));
- }
- menuBrush->Append(miBrushGradient, wxT("&Gradient"), menuBrushGradient);
-
- //surface
- menuBrushSurface = new wxMenu();
- menuBrushSurface->AppendCheckItem(miBrushSurface + 1, wxT("&1 - Grass"));
- menuBrushSurface->AppendCheckItem(miBrushSurface + 2, wxT("&2 - Secondary Grass"));
- menuBrushSurface->AppendCheckItem(miBrushSurface + 3, wxT("&3 - Road"));
- menuBrushSurface->AppendCheckItem(miBrushSurface + 4, wxT("&4 - Stone"));
- menuBrushSurface->AppendCheckItem(miBrushSurface + 5, wxT("&5 - Ground"));
- menuBrush->Append(miBrushSurface, wxT("&Surface"), menuBrushSurface);
-
- //objects
- menuBrushObject = new wxMenu();
- menuBrushObject->AppendCheckItem(miBrushObject + 1, wxT("&0 - None (erase)"));
- menuBrushObject->AppendCheckItem(miBrushObject+2, wxT("&1 - Tree (unwalkable/harvestable)"));
- menuBrushObject->AppendCheckItem(miBrushObject+3, wxT("&2 - DeadTree/Cactuses/Thornbush (unwalkable)"));
- menuBrushObject->AppendCheckItem(miBrushObject+4, wxT("&3 - Stone (unwalkable)"));
- menuBrushObject->AppendCheckItem(miBrushObject+5, wxT("&4 - Bush/Grass/Fern (walkable)"));
- menuBrushObject->AppendCheckItem(miBrushObject+6, wxT("&5 - Water Object/Reed/Papyrus (walkable)"));
- menuBrushObject->AppendCheckItem(miBrushObject+7, wxT("&6 - C1 BigTree/DeadTree/OldPalm (unwalkable/not harvestable)"));
- menuBrushObject->AppendCheckItem(miBrushObject+8, wxT("&7 - C2 Hanged/Impaled (unwalkable)"));
- menuBrushObject->AppendCheckItem(miBrushObject+9, wxT("&8 - C3 Statues (unwalkable)"));
- menuBrushObject->AppendCheckItem(miBrushObject+10, wxT("&9 - C4 Big Rock (Mountain) (unwalkable)"));
- menuBrushObject->AppendCheckItem(miBrushObject+11, wxT("10 &- C5 Invisible Blocking Object (unwalkable)"));
- menuBrush->Append(miBrushObject, wxT("&Object"), menuBrushObject);
-
- //resources
- menuBrushResource = new wxMenu();
- menuBrushResource->AppendCheckItem(miBrushResource + 1, wxT("&0 - None"));
- menuBrushResource->AppendCheckItem(miBrushResource+2, wxT("&1 - gold (unwalkable)"));
- menuBrushResource->AppendCheckItem(miBrushResource+3, wxT("&2 - stone (unwalkable)"));
- menuBrushResource->AppendCheckItem(miBrushResource+4, wxT("&3 - custom"));
- menuBrushResource->AppendCheckItem(miBrushResource+5, wxT("&4 - custom"));
- menuBrushResource->AppendCheckItem(miBrushResource+6, wxT("&5 - custom"));
- menuBrush->Append(miBrushResource, wxT("&Resource"), menuBrushResource);
-
- //players
- menuBrushStartLocation = new wxMenu();
- menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 1, wxT("&1 - Player 1"));
- menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 2, wxT("&2 - Player 2"));
- menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 3, wxT("&3 - Player 3"));
- menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 4, wxT("&4 - Player 4"));
- menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 5, wxT("&5 - Player 5 "));
- menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 6, wxT("&6 - Player 6 "));
- menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 7, wxT("&7 - Player 7 "));
- menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 8, wxT("&8 - Player 8 "));
- menuBrush->Append(miBrushStartLocation, wxT("&Player"), menuBrushStartLocation);
- menuBar->Append(menuBrush, wxT("&Brush"));
-
- //radius
- menuRadius = new wxMenu();
- for (int i = 1; i <= radiusCount; ++i) {
- menuRadius->AppendCheckItem(miRadius + i, ToUnicode("&" + intToStr(i) + "\tALT+" + intToStr(i)));
- }
- menuRadius->Check(miRadius + 1, true);
- menuBar->Append(menuRadius, wxT("&Radius"));
-
- SetMenuBar(menuBar);
-
- fileName = "New (unsaved) map";
- int status_widths[siCOUNT] = {
- 10, // empty
- -2, // File name
- -1, // File type
- -2, // Current Object
- -2, // Brush Type
- -2, // Brush 'Value'
- -1, // Brush Radius
- };
- CreateStatusBar(siCOUNT);
- GetStatusBar()->SetStatusWidths(siCOUNT, status_widths);
-
- SetStatusText(wxT("File: ") + ToUnicode(fileName), siFILE_NAME);
- SetStatusText(wxT(".gbm"), siFILE_TYPE);
- SetStatusText(wxT("Object: None (Erase)"), siCURR_OBJECT);
- SetStatusText(wxT("Brush: Height"), siBRUSH_TYPE);
- SetStatusText(wxT("Value: 0"), siBRUSH_VALUE);
- SetStatusText(wxT("Radius: 1"), siBRUSH_RADIUS);
-
-#ifndef WIN32
- timer = new wxTimer(this);
- timer->Start(100);
-#endif
- glCanvas->SetFocus();
-}
-
-void MainWindow::init(string fname) {
- glCanvas->SetCurrent();
- program = new Program(GetClientSize().x, GetClientSize().y);
-
- fileName = "New (unsaved) Map";
- if (!fname.empty() && fileExists(fname)) {
- program->loadMap(fname);
- currentFile = fname;
- fileName = cutLastExt(lastFile(fname));
- }
- SetTitle(ToUnicode(winHeader + "; " + currentFile));
- setDirty(false);
- setExtension();
-}
-
-void MainWindow::onClose(wxCloseEvent &event) {
- delete this;
-}
-
-MainWindow::~MainWindow() {
- delete program;
- delete glCanvas;
-}
-
-void MainWindow::setDirty(bool val) {
- if (fileModified && val) {
- return;
- }
- fileModified = val;
- if (fileModified) {
- SetStatusText(wxT("File: ") + ToUnicode(fileName) + wxT("*"), siFILE_NAME);
- } else {
- SetStatusText(wxT("File: ") + ToUnicode(fileName), siFILE_NAME);
- }
-}
-
-void MainWindow::setExtension() {
- if (currentFile.empty()) {
- return;
- }
- string extnsn = ext(currentFile);
- if (extnsn == "gbm" || extnsn == "mgm") {
- currentFile = cutLastExt(currentFile);
- }
- if (Program::getMap()->getMaxFactions() <= 4) {
- SetStatusText(wxT(".gbm"), siFILE_TYPE);
- currentFile += ".gbm";
- } else {
- SetStatusText(wxT(".mgm"), siFILE_TYPE);
- currentFile += ".mgm";
- }
-}
-
-void MainWindow::onTimer(wxTimerEvent &event) {
- wxPaintEvent paintEvent;
- onPaint(paintEvent);
-
-}
-
-void MainWindow::onMouseDown(wxMouseEvent &event) {
- if (event.LeftIsDown()) {
- program->setUndoPoint(enabledGroup);
- program->setRefAlt(event.GetX(), event.GetY());
- change(event.GetX(), event.GetY());
- if (!isDirty()) {
- setDirty(true);
- }
- wxPaintEvent ev;
- onPaint(ev);
- }
- event.Skip();
-}
-
-void MainWindow::onMouseMove(wxMouseEvent &event) {
- int dif;
-
- int x = event.GetX();
- int y = event.GetY();
-
- bool doPaint = true;
- if (event.LeftIsDown()) {
- change(x, y);
- } else if (event.MiddleIsDown()) {
- dif = (y - lastY);
- if (dif != 0) {
- program->incCellSize(dif / abs(dif));
- }
- } else if (event.RightIsDown()) {
- program->setOfset(x - lastX, y - lastY);
- } else {
- doPaint = false;
- }
- lastX = x;
- lastY = y;
- if (doPaint) {
- wxPaintEvent ev;
- onPaint(ev);
- }
- else {
- int currResource = program->getResource(x,y);
- if(currResource>0){
- SetStatusText(wxT("Resource: ") + ToUnicode(resource_descs[currResource]), siCURR_OBJECT);
- resourceUnderMouse = currResource;
- objectUnderMouse = 0;
- }
- else {
- int currObject = program->getObject(x,y);
- SetStatusText(wxT("Object: ") + ToUnicode(object_descs[currObject]), siCURR_OBJECT);
- resourceUnderMouse = 0;
- objectUnderMouse = currObject;
- }
- }
-
- event.Skip();
-}
-
-void MainWindow::onPaint(wxPaintEvent &event) {
- program->renderMap(GetClientSize().x, GetClientSize().y);
- glCanvas->SwapBuffers();
-}
-
-void MainWindow::onMenuFileLoad(wxCommandEvent &event) {
- wxFileDialog fileDialog(this);
- fileDialog.SetWildcard(wxT("Glest Map (*.gbm)|*.gbm|Mega Map (*.mgm)|*.mgm"));
- if (fileDialog.ShowModal() == wxID_OK) {
- currentFile = fileDialog.GetPath().ToAscii();
- program->loadMap(currentFile);
- fileName = cutLastExt(lastFile(currentFile));
- setDirty(false);
- setExtension();
- SetTitle(ToUnicode(winHeader + "; " + currentFile));
- }
-}
-
-void MainWindow::onMenuFileSave(wxCommandEvent &event) {
- if (currentFile.empty()) {
- wxCommandEvent ev;
- onMenuFileSaveAs(ev);
- } else {
- setExtension();
- program->saveMap(currentFile);
- setDirty(false);
- }
-}
-
-void MainWindow::onMenuFileSaveAs(wxCommandEvent &event) {
- wxFileDialog fileDialog(this, wxT("Select file"), wxT(""), wxT(""), wxT("*.gbm|*.mgm"), wxSAVE);
- fileDialog.SetWildcard(wxT("Glest Map (*.gbm)|*.gbm|Mega Map (*.mgm)|*.mgm"));
- if (fileDialog.ShowModal() == wxID_OK) {
- currentFile = fileDialog.GetPath().ToAscii();
- setExtension();
- program->saveMap(currentFile);
- fileName = cutLastExt(lastFile(currentFile));
- setDirty(false);
- }
- SetTitle(ToUnicode(winHeader + "; " + currentFile));
-}
-
-void MainWindow::onMenuFileExit(wxCommandEvent &event) {
- Close();
-}
-
-void MainWindow::onMenuEditUndo(wxCommandEvent &event) {
- std::cout << "Undo Pressed" << std::endl;
- if (program->undo()) {
- Refresh();
- setDirty();
- }
-}
-
-void MainWindow::onMenuEditRedo(wxCommandEvent &event) {
- std::cout << "Redo Pressed" << std::endl;
- if (program->redo()) {
- Refresh();
- setDirty();
- }
-}
-
-void MainWindow::onMenuEditReset(wxCommandEvent &event) {
- program->setUndoPoint(ctAll);
- SimpleDialog simpleDialog;
- simpleDialog.addValue("Altitude", "10");
- simpleDialog.addValue("Surface", "1");
- simpleDialog.addValue("Width", "64");
- simpleDialog.addValue("Height", "64");
- simpleDialog.show();
-
- try {
- program->reset(
- strToInt(simpleDialog.getValue("Width")),
- strToInt(simpleDialog.getValue("Height")),
- strToInt(simpleDialog.getValue("Altitude")),
- strToInt(simpleDialog.getValue("Surface")));
- } catch (const exception &e) {
- wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
- }
- currentFile = "";
- fileName = "New (unsaved) map";
-}
-
-void MainWindow::onMenuEditResetPlayers(wxCommandEvent &event) {
- SimpleDialog simpleDialog;
- simpleDialog.addValue("Factions", intToStr(program->getMap()->getMaxFactions()));
- simpleDialog.show();
-
- try {
- program->resetFactions(strToInt(simpleDialog.getValue("Factions")));
- } catch (const exception &e) {
- wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
- }
- setDirty();
- setExtension();
-}
-
-void MainWindow::onMenuEditResize(wxCommandEvent &event) {
- SimpleDialog simpleDialog;
- simpleDialog.addValue("Altitude", "10");
- simpleDialog.addValue("Surface", "1");
- simpleDialog.addValue("Height", "64");
- simpleDialog.addValue("Width", "64");
- simpleDialog.show();
-
- try {
- program->resize(
- strToInt(simpleDialog.getValue("Height")),
- strToInt(simpleDialog.getValue("Width")),
- strToInt(simpleDialog.getValue("Altitude")),
- strToInt(simpleDialog.getValue("Surface")));
- } catch (const exception &e) {
- wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
- }
- setDirty();
-}
-
-void MainWindow::onMenuEditFlipX(wxCommandEvent &event) {
- program->flipX();
- setDirty();
-}
-
-void MainWindow::onMenuEditFlipY(wxCommandEvent &event) {
- program->flipY();
- setDirty();
-}
-
-void MainWindow::onMenuEditRandomizeHeights(wxCommandEvent &event) {
- program->randomizeMapHeights();
- setDirty();
-}
-
-void MainWindow::onMenuEditRandomize(wxCommandEvent &event) {
- program->randomizeMap();
- setDirty();
-}
-
-void MainWindow::onMenuEditSwitchSurfaces(wxCommandEvent &event) {
- SimpleDialog simpleDialog;
- simpleDialog.addValue("Surface1", "1");
- simpleDialog.addValue("Surface2", "2");
- simpleDialog.show();
-
- try {
- program->switchMapSurfaces(
- strToInt(simpleDialog.getValue("Surface1")),
- strToInt(simpleDialog.getValue("Surface2")));
- } catch (const exception &e) {
- wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
- }
- setDirty();
-}
-
-void MainWindow::onMenuEditInfo(wxCommandEvent &event) {
- SimpleDialog simpleDialog;
- simpleDialog.addValue("Title", program->getMap()->getTitle());
- simpleDialog.addValue("Desc", program->getMap()->getDesc());
- simpleDialog.addValue("Author", program->getMap()->getAuthor());
-
- simpleDialog.show();
-
- if (program->setMapTitle(simpleDialog.getValue("Title"))
- || program->setMapDesc(simpleDialog.getValue("Desc"))
- || program->setMapAuthor(simpleDialog.getValue("Author"))) {
- if (!isDirty()) {
- setDirty(true);
- }
- }
-}
-
-void MainWindow::onMenuEditAdvanced(wxCommandEvent &event) {
- SimpleDialog simpleDialog;
- simpleDialog.addValue("Height Factor", intToStr(program->getMap()->getHeightFactor()));
- simpleDialog.addValue("Water Level", intToStr(program->getMap()->getWaterLevel()));
-
- simpleDialog.show();
-
- try {
- program->setMapAdvanced(
- strToInt(simpleDialog.getValue("Height Factor")),
- strToInt(simpleDialog.getValue("Water Level")));
- } catch (const exception &e) {
- wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
- }
- setDirty();
-}
-
-void MainWindow::onMenuMiscResetZoomAndPos(wxCommandEvent &event) {
- program->resetOfset();
-}
-
-void MainWindow::onMenuMiscAbout(wxCommandEvent &event) {
- wxMessageDialog(
- NULL,
- wxT("Glest Map Editor - Copyright 2004 The Glest Team\n(with improvements by others, 2010)."),
- wxT("About")).ShowModal();
-}
-
-void MainWindow::onMenuMiscHelp(wxCommandEvent &event) {
- wxMessageDialog(
- NULL,
- wxT("Left mouse click: draw\nRight mouse drag: move\nCenter mouse drag: zoom"),
- wxT("Help")).ShowModal();
-}
-
-void MainWindow::onMenuBrushHeight(wxCommandEvent &e) {
- uncheckBrush();
- menuBrushHeight->Check(e.GetId(), true);
- height = e.GetId() - miBrushHeight - heightCount / 2 - 1;
- enabledGroup = ctHeight;
- currentBrush = btHeight;
- SetStatusText(wxT("Brush: Height"), siBRUSH_TYPE);
- SetStatusText(wxT("Value: ") + ToUnicode(intToStr(height)), siBRUSH_VALUE);
-}
-
-void MainWindow::onMenuBrushGradient(wxCommandEvent &e) {
- uncheckBrush();
- menuBrushGradient->Check(e.GetId(), true);
- height = e.GetId() - miBrushGradient - heightCount / 2 - 1;
- enabledGroup = ctGradient;
- currentBrush = btGradient;
- SetStatusText(wxT("Brush: Gradient"), siBRUSH_TYPE);
- SetStatusText(wxT("Value: ") + ToUnicode(intToStr(height)), siBRUSH_VALUE);
-}
-
-
-void MainWindow::onMenuBrushSurface(wxCommandEvent &e) {
- uncheckBrush();
- menuBrushSurface->Check(e.GetId(), true);
- surface = e.GetId() - miBrushSurface;
- enabledGroup = ctSurface;
- currentBrush = btSurface;
- SetStatusText(wxT("Brush: Surface"), siBRUSH_TYPE);
- SetStatusText(
- wxT("Value: ") + ToUnicode(intToStr(surface)) + wxT(" ")
- + ToUnicode(surface_descs[surface - 1]), siBRUSH_VALUE);
-}
-
-void MainWindow::onMenuBrushObject(wxCommandEvent &e) {
- uncheckBrush();
- menuBrushObject->Check(e.GetId(), true);
- object = e.GetId() - miBrushObject - 1;
- enabledGroup = ctObject;
- currentBrush = btObject;
- SetStatusText(wxT("Brush: Object"), siBRUSH_TYPE);
- SetStatusText(
- wxT("Value: ") + ToUnicode(intToStr(object)) + wxT(" ")
- + ToUnicode(object_descs[object]), siBRUSH_VALUE);
-}
-
-void MainWindow::onMenuBrushResource(wxCommandEvent &e) {
- uncheckBrush();
- menuBrushResource->Check(e.GetId(), true);
- resource = e.GetId() - miBrushResource - 1;
- enabledGroup = ctResource;
- currentBrush = btResource;
- SetStatusText(wxT("Brush: Resource"), siBRUSH_TYPE);
- SetStatusText(
- wxT("Value: ") + ToUnicode(intToStr(resource)) + wxT(" ")
- + ToUnicode(resource_descs[resource]), siBRUSH_VALUE);
-}
-
-void MainWindow::onMenuBrushStartLocation(wxCommandEvent &e) {
- uncheckBrush();
- menuBrushStartLocation->Check(e.GetId(), true);
- startLocation = e.GetId() - miBrushStartLocation;
- enabledGroup = ctLocation;
- currentBrush = btStartLocation;
- SetStatusText(wxT("Brush: Start Locations"), siBRUSH_TYPE);
- SetStatusText(wxT("Value: ") + ToUnicode(intToStr(startLocation)), siBRUSH_VALUE);
-}
-
-void MainWindow::onMenuRadius(wxCommandEvent &e) {
- uncheckRadius();
- menuRadius->Check(e.GetId(), true);
- radius = e.GetId() - miRadius;
- SetStatusText(wxT("Radius: ") + ToUnicode(intToStr(radius)), siBRUSH_RADIUS);
-}
-
-void MainWindow::change(int x, int y) {
- switch (enabledGroup) {
- case ctHeight:
- program->glestChangeMapHeight(x, y, height, radius);
- break;
- case ctSurface:
- program->changeMapSurface(x, y, surface, radius);
- break;
- case ctObject:
- program->changeMapObject(x, y, object, radius);
- break;
- case ctResource:
- program->changeMapResource(x, y, resource, radius);
- break;
- case ctLocation:
- program->changeStartLocation(x, y, startLocation - 1);
- break;
- case ctGradient:
- program->pirateChangeMapHeight(x, y, height, radius);
- break;
- }
-}
-
-void MainWindow::uncheckBrush() {
- for (int i = 0; i < heightCount; ++i) {
- menuBrushHeight->Check(miBrushHeight + i + 1, false);
- }
- for (int i = 0; i < heightCount; ++i) {
- menuBrushGradient->Check(miBrushGradient + i + 1, false);
- }
- for (int i = 0; i < surfaceCount; ++i) {
- menuBrushSurface->Check(miBrushSurface + i + 1, false);
- }
- for (int i = 0; i < objectCount; ++i) {
- menuBrushObject->Check(miBrushObject + i + 1, false);
- }
- for (int i = 0; i < resourceCount; ++i) {
- menuBrushResource->Check(miBrushResource + i + 1, false);
- }
- for (int i = 0; i < startLocationCount; ++i) {
- menuBrushStartLocation->Check(miBrushStartLocation + i + 1, false);
- }
-}
-
-void MainWindow::uncheckRadius() {
- for (int i = 1; i <= radiusCount; ++i) {
- menuRadius->Check(miRadius + i, false);
- }
-}
-
- void MainWindow::onKeyDown(wxKeyEvent &e) {
- if (currentBrush == btHeight || currentBrush == btGradient) { // 'height' brush
- if (e.GetKeyCode() >= '0' && e.GetKeyCode() <= '5') {
- height = e.GetKeyCode() - 48; // '0'-'5' == 0-5
- if (e.GetModifiers() == wxMOD_CONTROL) { // Ctrl means negative
- height = -height ;
- }
- int id_offset = heightCount / 2 + height + 1;
- if (currentBrush == btHeight) {
- wxCommandEvent evt(wxEVT_NULL, miBrushHeight + id_offset);
- onMenuBrushHeight(evt);
- } else {
- wxCommandEvent evt(wxEVT_NULL, miBrushGradient + id_offset);
- onMenuBrushGradient(evt);
- }
- return;
- }
- }
- if (currentBrush == btSurface) { // surface texture
- if (e.GetKeyCode() >= '1' && e.GetKeyCode() <= '5') {
- surface = e.GetKeyCode() - 48; // '1'-'5' == 1-5
- wxCommandEvent evt(wxEVT_NULL, miBrushSurface + surface);
- onMenuBrushSurface(evt);
- return;
- }
- }
- if (currentBrush == btObject) {
- bool valid = true;
- if (e.GetKeyCode() >= '1' && e.GetKeyCode() <= '9') {
- object = e.GetKeyCode() - 48; // '1'-'9' == 1-9
- } else if (e.GetKeyCode() == '0') { // '0' == 10
- object = 10;
- } else if (e.GetKeyCode() == '-') { // '-' == 0
- object = 0;
- } else {
- valid = false;
- }
- if (valid) {
- wxCommandEvent evt(wxEVT_NULL, miBrushObject + object + 1);
- onMenuBrushObject(evt);
- return;
- }
- }
- if (currentBrush == btResource) {
- if (e.GetKeyCode() >= '0' && e.GetKeyCode() <= '5') {
- resource = e.GetKeyCode() - 48; // '0'-'5' == 0-5
- wxCommandEvent evt(wxEVT_NULL, miBrushResource + resource + 1);
- onMenuBrushResource(evt);
- return;
- }
- }
- if (currentBrush == btStartLocation) {
- if (e.GetKeyCode() >= '1' && e.GetKeyCode() <= '8') {
- startLocation = e.GetKeyCode() - 48; // '1'-'8' == 0-7
- wxCommandEvent evt(wxEVT_NULL, miBrushStartLocation + startLocation);
- onMenuBrushStartLocation(evt);
- return;
- }
- }
- if (e.GetKeyCode() == 'H') {
- wxCommandEvent evt(wxEVT_NULL, miBrushHeight + height + heightCount / 2 + 1);
- onMenuBrushHeight(evt);
- } else if (e.GetKeyCode() == ' ') {
- if( resourceUnderMouse != 0 )
- {
- wxCommandEvent evt(wxEVT_NULL, miBrushResource + resourceUnderMouse + 1);
- onMenuBrushResource(evt);
- }
- else
- {
- wxCommandEvent evt(wxEVT_NULL, miBrushObject + objectUnderMouse + 1);
- onMenuBrushObject(evt);
- }
- } else if (e.GetKeyCode() == 'G') {
- wxCommandEvent evt(wxEVT_NULL, miBrushGradient + height + heightCount / 2 + 1);
- onMenuBrushGradient(evt);
- } else if (e.GetKeyCode() == 'S') {
- wxCommandEvent evt(wxEVT_NULL, miBrushSurface + surface);
- onMenuBrushSurface(evt);
- } else if (e.GetKeyCode() == 'O') {
- wxCommandEvent evt(wxEVT_NULL, miBrushObject + object + 1);
- onMenuBrushObject(evt);
- } else if (e.GetKeyCode() == 'R') {
- wxCommandEvent evt(wxEVT_NULL, miBrushResource + resource + 1);
- onMenuBrushResource(evt);
- } else if (e.GetKeyCode() == 'L') {
- wxCommandEvent evt(wxEVT_NULL, miBrushStartLocation + startLocation + 1);
- onMenuBrushStartLocation(evt);
- } else {
- e.Skip();
- }
-}
-
-BEGIN_EVENT_TABLE(MainWindow, wxFrame)
-
- EVT_TIMER(-1, MainWindow::onTimer)
-
- EVT_CLOSE(MainWindow::onClose)
-
- // these are 'handled' by GlCanvas and funneled to these handlers
- //EVT_LEFT_DOWN(MainWindow::onMouseDown)
- //EVT_MOTION(MainWindow::onMouseMove)
- //EVT_KEY_DOWN(MainWindow::onKeyDown)
-
- EVT_MENU(wxID_OPEN, MainWindow::onMenuFileLoad)
- EVT_MENU(wxID_SAVE, MainWindow::onMenuFileSave)
- EVT_MENU(wxID_SAVEAS, MainWindow::onMenuFileSaveAs)
- EVT_MENU(wxID_EXIT, MainWindow::onMenuFileExit)
-
- EVT_MENU(miEditUndo, MainWindow::onMenuEditUndo)
- EVT_MENU(miEditRedo, MainWindow::onMenuEditRedo)
- EVT_MENU(miEditReset, MainWindow::onMenuEditReset)
- EVT_MENU(miEditResetPlayers, MainWindow::onMenuEditResetPlayers)
- EVT_MENU(miEditResize, MainWindow::onMenuEditResize)
- EVT_MENU(miEditFlipX, MainWindow::onMenuEditFlipX)
- EVT_MENU(miEditFlipY, MainWindow::onMenuEditFlipY)
- EVT_MENU(miEditRandomizeHeights, MainWindow::onMenuEditRandomizeHeights)
- EVT_MENU(miEditRandomize, MainWindow::onMenuEditRandomize)
- EVT_MENU(miEditSwitchSurfaces, MainWindow::onMenuEditSwitchSurfaces)
- EVT_MENU(miEditInfo, MainWindow::onMenuEditInfo)
- EVT_MENU(miEditAdvanced, MainWindow::onMenuEditAdvanced)
-
- EVT_MENU(miMiscResetZoomAndPos, MainWindow::onMenuMiscResetZoomAndPos)
- EVT_MENU(miMiscAbout, MainWindow::onMenuMiscAbout)
- EVT_MENU(miMiscHelp, MainWindow::onMenuMiscHelp)
-
- EVT_MENU_RANGE(miBrushHeight + 1, miBrushHeight + heightCount, MainWindow::onMenuBrushHeight)
- EVT_MENU_RANGE(miBrushGradient + 1, miBrushGradient + heightCount, MainWindow::onMenuBrushGradient)
- EVT_MENU_RANGE(miBrushSurface + 1, miBrushSurface + surfaceCount, MainWindow::onMenuBrushSurface)
- EVT_MENU_RANGE(miBrushObject + 1, miBrushObject + objectCount, MainWindow::onMenuBrushObject)
- EVT_MENU_RANGE(miBrushResource + 1, miBrushResource + resourceCount, MainWindow::onMenuBrushResource)
- EVT_MENU_RANGE(miBrushStartLocation + 1, miBrushStartLocation + startLocationCount, MainWindow::onMenuBrushStartLocation)
- EVT_MENU_RANGE(miRadius, miRadius + radiusCount, MainWindow::onMenuRadius)
-END_EVENT_TABLE()
-
-// =====================================================
-// class GlCanvas
-// =====================================================
-
-GlCanvas::GlCanvas(MainWindow * mainWindow, int* args)
- : wxGLCanvas(mainWindow, -1, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas"), args) {
- this->mainWindow = mainWindow;
-}
-
-void GlCanvas::onMouseDown(wxMouseEvent &event) {
- mainWindow->onMouseDown(event);
-}
-
-void GlCanvas::onMouseMove(wxMouseEvent &event) {
- mainWindow->onMouseMove(event);
-}
-
- void GlCanvas::onKeyDown(wxKeyEvent &event) {
- mainWindow->onKeyDown(event);
- }
-
-BEGIN_EVENT_TABLE(GlCanvas, wxGLCanvas)
- EVT_KEY_DOWN(GlCanvas::onKeyDown)
-
- EVT_LEFT_DOWN(GlCanvas::onMouseDown)
- EVT_MOTION(GlCanvas::onMouseMove)
-END_EVENT_TABLE()
-
-// ===============================================
-// class SimpleDialog
-// ===============================================
-
-void SimpleDialog::addValue(const string &key, const string &value) {
- values.push_back(pair(key, value));
-}
-
-string SimpleDialog::getValue(const string &key) {
- for (int i = 0; i < values.size(); ++i) {
- if (values[i].first == key) {
- return values[i].second;
- }
- }
- return "";
-}
-
-void SimpleDialog::show() {
-
- Create(NULL, -1, wxT("Edit Values"));
-
- wxSizer *sizer = new wxFlexGridSizer(2);
-
- vector texts;
-
- for (Values::iterator it = values.begin(); it != values.end(); ++it) {
- sizer->Add(new wxStaticText(this, -1, ToUnicode(it->first)), 0, wxALL, 5);
- wxTextCtrl *text = new wxTextCtrl(this, -1, ToUnicode(it->second));
- sizer->Add(text, 0, wxALL, 5);
- texts.push_back(text);
- }
- SetSizerAndFit(sizer);
-
- ShowModal();
-
- for (int i = 0; i < texts.size(); ++i) {
- values[i].second = texts[i]->GetValue().ToAscii();
- }
-}
-
-// ===============================================
-// class App
-// ===============================================
-
-bool App::OnInit() {
- string fileparam;
- if(argc==2){
- fileparam = wxFNCONV(argv[1]);
- }
-
- mainWindow = new MainWindow();
- mainWindow->Show();
- mainWindow->init(fileparam);
- return true;
-}
-
-int App::MainLoop() {
- try {
- return wxApp::MainLoop();
- } catch (const exception &e) {
- wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
- }
- return 0;
-}
-
-int App::OnExit() {
- return 0;
-}
-
-}// end namespace
-
-IMPLEMENT_APP(MapEditor::App)
+// ==============================================================
+// This file is part of Glest (www.glest.org)
+//
+// Copyright (C) 2001-2008 Marti�o Figueroa
+//
+// You can redistribute this code and/or modify it under
+// the terms of the GNU General Public License as published
+// by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version
+// ==============================================================
+
+
+
+#include "main.h"
+
+#include
+
+#include "conversion.h"
+#include
+
+using namespace Shared::Util;
+using namespace std;
+
+namespace MapEditor {
+
+const string MainWindow::versionString = "v1.5.0-beta3";
+const string MainWindow::winHeader = "Glest Map Editor " + versionString + " - Built: " + __DATE__;
+
+// ===============================================
+// class Global functions
+// ===============================================
+
+wxString ToUnicode(const char* str) {
+ return wxString(str, wxConvUTF8);
+}
+
+wxString ToUnicode(const string& str) {
+ return wxString(str.c_str(), wxConvUTF8);
+}
+
+// ===============================================
+// class MainWindow
+// ===============================================
+
+MainWindow::MainWindow()
+ : wxFrame(NULL, -1, ToUnicode(winHeader), wxDefaultPosition, wxSize(800, 600)) {
+
+ fileModified=false;
+ lastX=0;
+ lastY=0;
+ radius=1;
+ height=0;
+ surface=1;
+ object=0;
+ resource=0;
+ startLocation=1;
+ enabledGroup=ctHeight;
+ currentBrush=btHeight;
+ resourceUnderMouse=0;
+ objectUnderMouse=0;
+
+ //gl canvas
+ int args[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER };
+ glCanvas = new GlCanvas(this, args);
+
+ //menus
+ menuBar = new wxMenuBar();
+
+ //file
+ menuFile = new wxMenu();
+ menuFile->Append(wxID_OPEN);
+ menuFile->AppendSeparator();
+ menuFile->Append(wxID_SAVE);
+ menuFile->Append(wxID_SAVEAS);
+ menuFile->AppendSeparator();
+ menuFile->Append(wxID_EXIT);
+ menuBar->Append(menuFile, wxT("&File"));
+
+ //edit
+ menuEdit = new wxMenu();
+ menuEdit->Append(miEditUndo, wxT("&Undo\tCTRL+z"));
+ menuEdit->Append(miEditRedo, wxT("&Redo\tCTRL+y"));
+ menuEdit->Append(miEditReset, wxT("Rese&t"));
+ menuEdit->Append(miEditResetPlayers, wxT("Reset &Players"));
+ menuEdit->Append(miEditResize, wxT("Re&size"));
+ menuEdit->Append(miEditFlipX, wxT("Flip &X"));
+ menuEdit->Append(miEditFlipY, wxT("Flip &Y"));
+ menuEdit->Append(miEditRandomizeHeights, wxT("Randomize &Heights"));
+ menuEdit->Append(miEditRandomize, wxT("Randomi&ze"));
+ menuEdit->Append(miEditSwitchSurfaces, wxT("Switch Su&rfaces"));
+ menuEdit->Append(miEditInfo, wxT("&Info"));
+ menuEdit->Append(miEditAdvanced, wxT("&Advanced"));
+ menuBar->Append(menuEdit, wxT("&Edit"));
+
+ //misc
+ menuMisc = new wxMenu();
+ menuMisc->Append(miMiscResetZoomAndPos, wxT("&Reset zoom and pos"));
+ menuMisc->Append(miMiscAbout, wxT("&About"));
+ menuMisc->Append(miMiscHelp, wxT("&Help"));
+ menuBar->Append(menuMisc, wxT("&Misc"));
+
+ //brush
+ menuBrush = new wxMenu();
+
+ // Glest height brush
+ menuBrushHeight = new wxMenu();
+ for (int i = 0; i < heightCount; ++i) {
+ menuBrushHeight->AppendCheckItem(miBrushHeight + i + 1, ToUnicode(intToStr(i - heightCount / 2)));
+ }
+ menuBrushHeight->Check(miBrushHeight + (heightCount + 1) / 2, true);
+ menuBrush->Append(miBrushHeight, wxT("&Height"), menuBrushHeight);
+
+ enabledGroup = ctHeight;
+
+ // ZombiePirate height brush
+ menuBrushGradient = new wxMenu();
+ for (int i = 0; i < heightCount; ++i) {
+ menuBrushGradient->AppendCheckItem(miBrushGradient + i + 1, ToUnicode(intToStr(i - heightCount / 2)));
+ }
+ menuBrush->Append(miBrushGradient, wxT("&Gradient"), menuBrushGradient);
+
+ //surface
+ menuBrushSurface = new wxMenu();
+ menuBrushSurface->AppendCheckItem(miBrushSurface + 1, wxT("&1 - Grass"));
+ menuBrushSurface->AppendCheckItem(miBrushSurface + 2, wxT("&2 - Secondary Grass"));
+ menuBrushSurface->AppendCheckItem(miBrushSurface + 3, wxT("&3 - Road"));
+ menuBrushSurface->AppendCheckItem(miBrushSurface + 4, wxT("&4 - Stone"));
+ menuBrushSurface->AppendCheckItem(miBrushSurface + 5, wxT("&5 - Ground"));
+ menuBrush->Append(miBrushSurface, wxT("&Surface"), menuBrushSurface);
+
+ //objects
+ menuBrushObject = new wxMenu();
+ menuBrushObject->AppendCheckItem(miBrushObject + 1, wxT("&0 - None (erase)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+2, wxT("&1 - Tree (unwalkable/harvestable)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+3, wxT("&2 - DeadTree/Cactuses/Thornbush (unwalkable)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+4, wxT("&3 - Stone (unwalkable)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+5, wxT("&4 - Bush/Grass/Fern (walkable)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+6, wxT("&5 - Water Object/Reed/Papyrus (walkable)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+7, wxT("&6 - C1 BigTree/DeadTree/OldPalm (unwalkable/not harvestable)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+8, wxT("&7 - C2 Hanged/Impaled (unwalkable)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+9, wxT("&8 - C3 Statues (unwalkable)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+10, wxT("&9 - C4 Big Rock (Mountain) (unwalkable)"));
+ menuBrushObject->AppendCheckItem(miBrushObject+11, wxT("10 &- C5 Invisible Blocking Object (unwalkable)"));
+ menuBrush->Append(miBrushObject, wxT("&Object"), menuBrushObject);
+
+ //resources
+ menuBrushResource = new wxMenu();
+ menuBrushResource->AppendCheckItem(miBrushResource + 1, wxT("&0 - None"));
+ menuBrushResource->AppendCheckItem(miBrushResource+2, wxT("&1 - gold (unwalkable)"));
+ menuBrushResource->AppendCheckItem(miBrushResource+3, wxT("&2 - stone (unwalkable)"));
+ menuBrushResource->AppendCheckItem(miBrushResource+4, wxT("&3 - custom"));
+ menuBrushResource->AppendCheckItem(miBrushResource+5, wxT("&4 - custom"));
+ menuBrushResource->AppendCheckItem(miBrushResource+6, wxT("&5 - custom"));
+ menuBrush->Append(miBrushResource, wxT("&Resource"), menuBrushResource);
+
+ //players
+ menuBrushStartLocation = new wxMenu();
+ menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 1, wxT("&1 - Player 1"));
+ menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 2, wxT("&2 - Player 2"));
+ menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 3, wxT("&3 - Player 3"));
+ menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 4, wxT("&4 - Player 4"));
+ menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 5, wxT("&5 - Player 5 "));
+ menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 6, wxT("&6 - Player 6 "));
+ menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 7, wxT("&7 - Player 7 "));
+ menuBrushStartLocation->AppendCheckItem(miBrushStartLocation + 8, wxT("&8 - Player 8 "));
+ menuBrush->Append(miBrushStartLocation, wxT("&Player"), menuBrushStartLocation);
+ menuBar->Append(menuBrush, wxT("&Brush"));
+
+ //radius
+ menuRadius = new wxMenu();
+ for (int i = 1; i <= radiusCount; ++i) {
+ menuRadius->AppendCheckItem(miRadius + i, ToUnicode("&" + intToStr(i) + "\tALT+" + intToStr(i)));
+ }
+ menuRadius->Check(miRadius + 1, true);
+ menuBar->Append(menuRadius, wxT("&Radius"));
+
+ SetMenuBar(menuBar);
+
+ fileName = "New (unsaved) map";
+ int status_widths[siCOUNT] = {
+ 10, // empty
+ -2, // File name
+ -1, // File type
+ -2, // Current Object
+ -2, // Brush Type
+ -2, // Brush 'Value'
+ -1, // Brush Radius
+ };
+ CreateStatusBar(siCOUNT);
+ GetStatusBar()->SetStatusWidths(siCOUNT, status_widths);
+
+ SetStatusText(wxT("File: ") + ToUnicode(fileName), siFILE_NAME);
+ SetStatusText(wxT(".gbm"), siFILE_TYPE);
+ SetStatusText(wxT("Object: None (Erase)"), siCURR_OBJECT);
+ SetStatusText(wxT("Brush: Height"), siBRUSH_TYPE);
+ SetStatusText(wxT("Value: 0"), siBRUSH_VALUE);
+ SetStatusText(wxT("Radius: 1"), siBRUSH_RADIUS);
+
+#ifndef WIN32
+ timer = new wxTimer(this);
+ timer->Start(100);
+#endif
+ glCanvas->SetFocus();
+}
+
+void MainWindow::init(string fname) {
+ glCanvas->SetCurrent();
+ program = new Program(GetClientSize().x, GetClientSize().y);
+
+ fileName = "New (unsaved) Map";
+ if (!fname.empty() && fileExists(fname)) {
+ program->loadMap(fname);
+ currentFile = fname;
+ fileName = cutLastExt(lastFile(fname));
+ }
+ SetTitle(ToUnicode(winHeader + "; " + currentFile));
+ setDirty(false);
+ setExtension();
+}
+
+void MainWindow::onClose(wxCloseEvent &event) {
+ delete this;
+}
+
+MainWindow::~MainWindow() {
+ delete program;
+ delete glCanvas;
+}
+
+void MainWindow::setDirty(bool val) {
+ if (fileModified && val) {
+ return;
+ }
+ fileModified = val;
+ if (fileModified) {
+ SetStatusText(wxT("File: ") + ToUnicode(fileName) + wxT("*"), siFILE_NAME);
+ } else {
+ SetStatusText(wxT("File: ") + ToUnicode(fileName), siFILE_NAME);
+ }
+}
+
+void MainWindow::setExtension() {
+ if (currentFile.empty()) {
+ return;
+ }
+ string extnsn = ext(currentFile);
+ if (extnsn == "gbm" || extnsn == "mgm") {
+ currentFile = cutLastExt(currentFile);
+ }
+ if (Program::getMap()->getMaxFactions() <= 4) {
+ SetStatusText(wxT(".gbm"), siFILE_TYPE);
+ currentFile += ".gbm";
+ } else {
+ SetStatusText(wxT(".mgm"), siFILE_TYPE);
+ currentFile += ".mgm";
+ }
+}
+
+void MainWindow::onTimer(wxTimerEvent &event) {
+ wxPaintEvent paintEvent;
+ onPaint(paintEvent);
+
+}
+
+void MainWindow::onMouseDown(wxMouseEvent &event) {
+ if (event.LeftIsDown()) {
+ program->setUndoPoint(enabledGroup);
+ program->setRefAlt(event.GetX(), event.GetY());
+ change(event.GetX(), event.GetY());
+ if (!isDirty()) {
+ setDirty(true);
+ }
+ wxPaintEvent ev;
+ onPaint(ev);
+ }
+ event.Skip();
+}
+
+void MainWindow::onMouseMove(wxMouseEvent &event) {
+ int dif;
+
+ int x = event.GetX();
+ int y = event.GetY();
+
+ bool doPaint = true;
+ if (event.LeftIsDown()) {
+ change(x, y);
+ } else if (event.MiddleIsDown()) {
+ dif = (y - lastY);
+ if (dif != 0) {
+ program->incCellSize(dif / abs(dif));
+ }
+ } else if (event.RightIsDown()) {
+ program->setOfset(x - lastX, y - lastY);
+ } else {
+ doPaint = false;
+ }
+ lastX = x;
+ lastY = y;
+ if (doPaint) {
+ wxPaintEvent ev;
+ onPaint(ev);
+ }
+ else {
+ int currResource = program->getResource(x,y);
+ if(currResource>0){
+ SetStatusText(wxT("Resource: ") + ToUnicode(resource_descs[currResource]), siCURR_OBJECT);
+ resourceUnderMouse = currResource;
+ objectUnderMouse = 0;
+ }
+ else {
+ int currObject = program->getObject(x,y);
+ SetStatusText(wxT("Object: ") + ToUnicode(object_descs[currObject]), siCURR_OBJECT);
+ resourceUnderMouse = 0;
+ objectUnderMouse = currObject;
+ }
+ }
+
+ event.Skip();
+}
+
+void MainWindow::onPaint(wxPaintEvent &event) {
+ program->renderMap(GetClientSize().x, GetClientSize().y);
+ glCanvas->SwapBuffers();
+}
+
+void MainWindow::onMenuFileLoad(wxCommandEvent &event) {
+ wxFileDialog fileDialog(this);
+ fileDialog.SetWildcard(wxT("Glest Map (*.gbm)|*.gbm|Mega Map (*.mgm)|*.mgm"));
+ if (fileDialog.ShowModal() == wxID_OK) {
+ currentFile = fileDialog.GetPath().ToAscii();
+ program->loadMap(currentFile);
+ fileName = cutLastExt(lastFile(currentFile));
+ setDirty(false);
+ setExtension();
+ SetTitle(ToUnicode(winHeader + "; " + currentFile));
+ }
+}
+
+void MainWindow::onMenuFileSave(wxCommandEvent &event) {
+ if (currentFile.empty()) {
+ wxCommandEvent ev;
+ onMenuFileSaveAs(ev);
+ } else {
+ setExtension();
+ program->saveMap(currentFile);
+ setDirty(false);
+ }
+}
+
+void MainWindow::onMenuFileSaveAs(wxCommandEvent &event) {
+ wxFileDialog fileDialog(this, wxT("Select file"), wxT(""), wxT(""), wxT("*.gbm|*.mgm"), wxSAVE);
+ fileDialog.SetWildcard(wxT("Glest Map (*.gbm)|*.gbm|Mega Map (*.mgm)|*.mgm"));
+ if (fileDialog.ShowModal() == wxID_OK) {
+ currentFile = fileDialog.GetPath().ToAscii();
+ setExtension();
+ program->saveMap(currentFile);
+ fileName = cutLastExt(lastFile(currentFile));
+ setDirty(false);
+ }
+ SetTitle(ToUnicode(winHeader + "; " + currentFile));
+}
+
+void MainWindow::onMenuFileExit(wxCommandEvent &event) {
+ Close();
+}
+
+void MainWindow::onMenuEditUndo(wxCommandEvent &event) {
+ std::cout << "Undo Pressed" << std::endl;
+ if (program->undo()) {
+ Refresh();
+ setDirty();
+ }
+}
+
+void MainWindow::onMenuEditRedo(wxCommandEvent &event) {
+ std::cout << "Redo Pressed" << std::endl;
+ if (program->redo()) {
+ Refresh();
+ setDirty();
+ }
+}
+
+void MainWindow::onMenuEditReset(wxCommandEvent &event) {
+ program->setUndoPoint(ctAll);
+ SimpleDialog simpleDialog;
+ simpleDialog.addValue("Altitude", "10");
+ simpleDialog.addValue("Surface", "1");
+ simpleDialog.addValue("Width", "64");
+ simpleDialog.addValue("Height", "64");
+ simpleDialog.show();
+
+ try {
+ program->reset(
+ strToInt(simpleDialog.getValue("Width")),
+ strToInt(simpleDialog.getValue("Height")),
+ strToInt(simpleDialog.getValue("Altitude")),
+ strToInt(simpleDialog.getValue("Surface")));
+ } catch (const exception &e) {
+ wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
+ }
+ currentFile = "";
+ fileName = "New (unsaved) map";
+}
+
+void MainWindow::onMenuEditResetPlayers(wxCommandEvent &event) {
+ SimpleDialog simpleDialog;
+ simpleDialog.addValue("Factions", intToStr(program->getMap()->getMaxFactions()));
+ simpleDialog.show();
+
+ try {
+ program->resetFactions(strToInt(simpleDialog.getValue("Factions")));
+ } catch (const exception &e) {
+ wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
+ }
+ setDirty();
+ setExtension();
+}
+
+void MainWindow::onMenuEditResize(wxCommandEvent &event) {
+ SimpleDialog simpleDialog;
+ simpleDialog.addValue("Altitude", "10");
+ simpleDialog.addValue("Surface", "1");
+ simpleDialog.addValue("Height", "64");
+ simpleDialog.addValue("Width", "64");
+ simpleDialog.show();
+
+ try {
+ program->resize(
+ strToInt(simpleDialog.getValue("Height")),
+ strToInt(simpleDialog.getValue("Width")),
+ strToInt(simpleDialog.getValue("Altitude")),
+ strToInt(simpleDialog.getValue("Surface")));
+ } catch (const exception &e) {
+ wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
+ }
+ setDirty();
+}
+
+void MainWindow::onMenuEditFlipX(wxCommandEvent &event) {
+ program->flipX();
+ setDirty();
+}
+
+void MainWindow::onMenuEditFlipY(wxCommandEvent &event) {
+ program->flipY();
+ setDirty();
+}
+
+void MainWindow::onMenuEditRandomizeHeights(wxCommandEvent &event) {
+ program->randomizeMapHeights();
+ setDirty();
+}
+
+void MainWindow::onMenuEditRandomize(wxCommandEvent &event) {
+ program->randomizeMap();
+ setDirty();
+}
+
+void MainWindow::onMenuEditSwitchSurfaces(wxCommandEvent &event) {
+ SimpleDialog simpleDialog;
+ simpleDialog.addValue("Surface1", "1");
+ simpleDialog.addValue("Surface2", "2");
+ simpleDialog.show();
+
+ try {
+ program->switchMapSurfaces(
+ strToInt(simpleDialog.getValue("Surface1")),
+ strToInt(simpleDialog.getValue("Surface2")));
+ } catch (const exception &e) {
+ wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
+ }
+ setDirty();
+}
+
+void MainWindow::onMenuEditInfo(wxCommandEvent &event) {
+ SimpleDialog simpleDialog;
+ simpleDialog.addValue("Title", program->getMap()->getTitle());
+ simpleDialog.addValue("Desc", program->getMap()->getDesc());
+ simpleDialog.addValue("Author", program->getMap()->getAuthor());
+
+ simpleDialog.show();
+
+ if (program->setMapTitle(simpleDialog.getValue("Title"))
+ || program->setMapDesc(simpleDialog.getValue("Desc"))
+ || program->setMapAuthor(simpleDialog.getValue("Author"))) {
+ if (!isDirty()) {
+ setDirty(true);
+ }
+ }
+}
+
+void MainWindow::onMenuEditAdvanced(wxCommandEvent &event) {
+ SimpleDialog simpleDialog;
+ simpleDialog.addValue("Height Factor", intToStr(program->getMap()->getHeightFactor()));
+ simpleDialog.addValue("Water Level", intToStr(program->getMap()->getWaterLevel()));
+
+ simpleDialog.show();
+
+ try {
+ program->setMapAdvanced(
+ strToInt(simpleDialog.getValue("Height Factor")),
+ strToInt(simpleDialog.getValue("Water Level")));
+ } catch (const exception &e) {
+ wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
+ }
+ setDirty();
+}
+
+void MainWindow::onMenuMiscResetZoomAndPos(wxCommandEvent &event) {
+ program->resetOfset();
+}
+
+void MainWindow::onMenuMiscAbout(wxCommandEvent &event) {
+ wxMessageDialog(
+ NULL,
+ wxT("Glest Map Editor - Copyright 2004 The Glest Team\n(with improvements by others, 2010)."),
+ wxT("About")).ShowModal();
+}
+
+void MainWindow::onMenuMiscHelp(wxCommandEvent &event) {
+ wxMessageDialog(
+ NULL,
+ wxT("Left mouse click: draw\nRight mouse drag: move\nCenter mouse drag: zoom"),
+ wxT("Help")).ShowModal();
+}
+
+void MainWindow::onMenuBrushHeight(wxCommandEvent &e) {
+ uncheckBrush();
+ menuBrushHeight->Check(e.GetId(), true);
+ height = e.GetId() - miBrushHeight - heightCount / 2 - 1;
+ enabledGroup = ctHeight;
+ currentBrush = btHeight;
+ SetStatusText(wxT("Brush: Height"), siBRUSH_TYPE);
+ SetStatusText(wxT("Value: ") + ToUnicode(intToStr(height)), siBRUSH_VALUE);
+}
+
+void MainWindow::onMenuBrushGradient(wxCommandEvent &e) {
+ uncheckBrush();
+ menuBrushGradient->Check(e.GetId(), true);
+ height = e.GetId() - miBrushGradient - heightCount / 2 - 1;
+ enabledGroup = ctGradient;
+ currentBrush = btGradient;
+ SetStatusText(wxT("Brush: Gradient"), siBRUSH_TYPE);
+ SetStatusText(wxT("Value: ") + ToUnicode(intToStr(height)), siBRUSH_VALUE);
+}
+
+
+void MainWindow::onMenuBrushSurface(wxCommandEvent &e) {
+ uncheckBrush();
+ menuBrushSurface->Check(e.GetId(), true);
+ surface = e.GetId() - miBrushSurface;
+ enabledGroup = ctSurface;
+ currentBrush = btSurface;
+ SetStatusText(wxT("Brush: Surface"), siBRUSH_TYPE);
+ SetStatusText(
+ wxT("Value: ") + ToUnicode(intToStr(surface)) + wxT(" ")
+ + ToUnicode(surface_descs[surface - 1]), siBRUSH_VALUE);
+}
+
+void MainWindow::onMenuBrushObject(wxCommandEvent &e) {
+ uncheckBrush();
+ menuBrushObject->Check(e.GetId(), true);
+ object = e.GetId() - miBrushObject - 1;
+ enabledGroup = ctObject;
+ currentBrush = btObject;
+ SetStatusText(wxT("Brush: Object"), siBRUSH_TYPE);
+ SetStatusText(
+ wxT("Value: ") + ToUnicode(intToStr(object)) + wxT(" ")
+ + ToUnicode(object_descs[object]), siBRUSH_VALUE);
+}
+
+void MainWindow::onMenuBrushResource(wxCommandEvent &e) {
+ uncheckBrush();
+ menuBrushResource->Check(e.GetId(), true);
+ resource = e.GetId() - miBrushResource - 1;
+ enabledGroup = ctResource;
+ currentBrush = btResource;
+ SetStatusText(wxT("Brush: Resource"), siBRUSH_TYPE);
+ SetStatusText(
+ wxT("Value: ") + ToUnicode(intToStr(resource)) + wxT(" ")
+ + ToUnicode(resource_descs[resource]), siBRUSH_VALUE);
+}
+
+void MainWindow::onMenuBrushStartLocation(wxCommandEvent &e) {
+ uncheckBrush();
+ menuBrushStartLocation->Check(e.GetId(), true);
+ startLocation = e.GetId() - miBrushStartLocation;
+ enabledGroup = ctLocation;
+ currentBrush = btStartLocation;
+ SetStatusText(wxT("Brush: Start Locations"), siBRUSH_TYPE);
+ SetStatusText(wxT("Value: ") + ToUnicode(intToStr(startLocation)), siBRUSH_VALUE);
+}
+
+void MainWindow::onMenuRadius(wxCommandEvent &e) {
+ uncheckRadius();
+ menuRadius->Check(e.GetId(), true);
+ radius = e.GetId() - miRadius;
+ SetStatusText(wxT("Radius: ") + ToUnicode(intToStr(radius)), siBRUSH_RADIUS);
+}
+
+void MainWindow::change(int x, int y) {
+ switch (enabledGroup) {
+ case ctHeight:
+ program->glestChangeMapHeight(x, y, height, radius);
+ break;
+ case ctSurface:
+ program->changeMapSurface(x, y, surface, radius);
+ break;
+ case ctObject:
+ program->changeMapObject(x, y, object, radius);
+ break;
+ case ctResource:
+ program->changeMapResource(x, y, resource, radius);
+ break;
+ case ctLocation:
+ program->changeStartLocation(x, y, startLocation - 1);
+ break;
+ case ctGradient:
+ program->pirateChangeMapHeight(x, y, height, radius);
+ break;
+ }
+}
+
+void MainWindow::uncheckBrush() {
+ for (int i = 0; i < heightCount; ++i) {
+ menuBrushHeight->Check(miBrushHeight + i + 1, false);
+ }
+ for (int i = 0; i < heightCount; ++i) {
+ menuBrushGradient->Check(miBrushGradient + i + 1, false);
+ }
+ for (int i = 0; i < surfaceCount; ++i) {
+ menuBrushSurface->Check(miBrushSurface + i + 1, false);
+ }
+ for (int i = 0; i < objectCount; ++i) {
+ menuBrushObject->Check(miBrushObject + i + 1, false);
+ }
+ for (int i = 0; i < resourceCount; ++i) {
+ menuBrushResource->Check(miBrushResource + i + 1, false);
+ }
+ for (int i = 0; i < startLocationCount; ++i) {
+ menuBrushStartLocation->Check(miBrushStartLocation + i + 1, false);
+ }
+}
+
+void MainWindow::uncheckRadius() {
+ for (int i = 1; i <= radiusCount; ++i) {
+ menuRadius->Check(miRadius + i, false);
+ }
+}
+
+ void MainWindow::onKeyDown(wxKeyEvent &e) {
+ if (currentBrush == btHeight || currentBrush == btGradient) { // 'height' brush
+ if (e.GetKeyCode() >= '0' && e.GetKeyCode() <= '5') {
+ height = e.GetKeyCode() - 48; // '0'-'5' == 0-5
+ if (e.GetModifiers() == wxMOD_CONTROL) { // Ctrl means negative
+ height = -height ;
+ }
+ int id_offset = heightCount / 2 + height + 1;
+ if (currentBrush == btHeight) {
+ wxCommandEvent evt(wxEVT_NULL, miBrushHeight + id_offset);
+ onMenuBrushHeight(evt);
+ } else {
+ wxCommandEvent evt(wxEVT_NULL, miBrushGradient + id_offset);
+ onMenuBrushGradient(evt);
+ }
+ return;
+ }
+ }
+ if (currentBrush == btSurface) { // surface texture
+ if (e.GetKeyCode() >= '1' && e.GetKeyCode() <= '5') {
+ surface = e.GetKeyCode() - 48; // '1'-'5' == 1-5
+ wxCommandEvent evt(wxEVT_NULL, miBrushSurface + surface);
+ onMenuBrushSurface(evt);
+ return;
+ }
+ }
+ if (currentBrush == btObject) {
+ bool valid = true;
+ if (e.GetKeyCode() >= '1' && e.GetKeyCode() <= '9') {
+ object = e.GetKeyCode() - 48; // '1'-'9' == 1-9
+ } else if (e.GetKeyCode() == '0') { // '0' == 10
+ object = 10;
+ } else if (e.GetKeyCode() == '-') { // '-' == 0
+ object = 0;
+ } else {
+ valid = false;
+ }
+ if (valid) {
+ wxCommandEvent evt(wxEVT_NULL, miBrushObject + object + 1);
+ onMenuBrushObject(evt);
+ return;
+ }
+ }
+ if (currentBrush == btResource) {
+ if (e.GetKeyCode() >= '0' && e.GetKeyCode() <= '5') {
+ resource = e.GetKeyCode() - 48; // '0'-'5' == 0-5
+ wxCommandEvent evt(wxEVT_NULL, miBrushResource + resource + 1);
+ onMenuBrushResource(evt);
+ return;
+ }
+ }
+ if (currentBrush == btStartLocation) {
+ if (e.GetKeyCode() >= '1' && e.GetKeyCode() <= '8') {
+ startLocation = e.GetKeyCode() - 48; // '1'-'8' == 0-7
+ wxCommandEvent evt(wxEVT_NULL, miBrushStartLocation + startLocation);
+ onMenuBrushStartLocation(evt);
+ return;
+ }
+ }
+ if (e.GetKeyCode() == 'H') {
+ wxCommandEvent evt(wxEVT_NULL, miBrushHeight + height + heightCount / 2 + 1);
+ onMenuBrushHeight(evt);
+ } else if (e.GetKeyCode() == ' ') {
+ if( resourceUnderMouse != 0 )
+ {
+ wxCommandEvent evt(wxEVT_NULL, miBrushResource + resourceUnderMouse + 1);
+ onMenuBrushResource(evt);
+ }
+ else
+ {
+ wxCommandEvent evt(wxEVT_NULL, miBrushObject + objectUnderMouse + 1);
+ onMenuBrushObject(evt);
+ }
+ } else if (e.GetKeyCode() == 'G') {
+ wxCommandEvent evt(wxEVT_NULL, miBrushGradient + height + heightCount / 2 + 1);
+ onMenuBrushGradient(evt);
+ } else if (e.GetKeyCode() == 'S') {
+ wxCommandEvent evt(wxEVT_NULL, miBrushSurface + surface);
+ onMenuBrushSurface(evt);
+ } else if (e.GetKeyCode() == 'O') {
+ wxCommandEvent evt(wxEVT_NULL, miBrushObject + object + 1);
+ onMenuBrushObject(evt);
+ } else if (e.GetKeyCode() == 'R') {
+ wxCommandEvent evt(wxEVT_NULL, miBrushResource + resource + 1);
+ onMenuBrushResource(evt);
+ } else if (e.GetKeyCode() == 'L') {
+ wxCommandEvent evt(wxEVT_NULL, miBrushStartLocation + startLocation + 1);
+ onMenuBrushStartLocation(evt);
+ } else {
+ e.Skip();
+ }
+}
+
+BEGIN_EVENT_TABLE(MainWindow, wxFrame)
+
+ EVT_TIMER(-1, MainWindow::onTimer)
+
+ EVT_CLOSE(MainWindow::onClose)
+
+ // these are 'handled' by GlCanvas and funneled to these handlers
+ //EVT_LEFT_DOWN(MainWindow::onMouseDown)
+ //EVT_MOTION(MainWindow::onMouseMove)
+ //EVT_KEY_DOWN(MainWindow::onKeyDown)
+
+ EVT_MENU(wxID_OPEN, MainWindow::onMenuFileLoad)
+ EVT_MENU(wxID_SAVE, MainWindow::onMenuFileSave)
+ EVT_MENU(wxID_SAVEAS, MainWindow::onMenuFileSaveAs)
+ EVT_MENU(wxID_EXIT, MainWindow::onMenuFileExit)
+
+ EVT_MENU(miEditUndo, MainWindow::onMenuEditUndo)
+ EVT_MENU(miEditRedo, MainWindow::onMenuEditRedo)
+ EVT_MENU(miEditReset, MainWindow::onMenuEditReset)
+ EVT_MENU(miEditResetPlayers, MainWindow::onMenuEditResetPlayers)
+ EVT_MENU(miEditResize, MainWindow::onMenuEditResize)
+ EVT_MENU(miEditFlipX, MainWindow::onMenuEditFlipX)
+ EVT_MENU(miEditFlipY, MainWindow::onMenuEditFlipY)
+ EVT_MENU(miEditRandomizeHeights, MainWindow::onMenuEditRandomizeHeights)
+ EVT_MENU(miEditRandomize, MainWindow::onMenuEditRandomize)
+ EVT_MENU(miEditSwitchSurfaces, MainWindow::onMenuEditSwitchSurfaces)
+ EVT_MENU(miEditInfo, MainWindow::onMenuEditInfo)
+ EVT_MENU(miEditAdvanced, MainWindow::onMenuEditAdvanced)
+
+ EVT_MENU(miMiscResetZoomAndPos, MainWindow::onMenuMiscResetZoomAndPos)
+ EVT_MENU(miMiscAbout, MainWindow::onMenuMiscAbout)
+ EVT_MENU(miMiscHelp, MainWindow::onMenuMiscHelp)
+
+ EVT_MENU_RANGE(miBrushHeight + 1, miBrushHeight + heightCount, MainWindow::onMenuBrushHeight)
+ EVT_MENU_RANGE(miBrushGradient + 1, miBrushGradient + heightCount, MainWindow::onMenuBrushGradient)
+ EVT_MENU_RANGE(miBrushSurface + 1, miBrushSurface + surfaceCount, MainWindow::onMenuBrushSurface)
+ EVT_MENU_RANGE(miBrushObject + 1, miBrushObject + objectCount, MainWindow::onMenuBrushObject)
+ EVT_MENU_RANGE(miBrushResource + 1, miBrushResource + resourceCount, MainWindow::onMenuBrushResource)
+ EVT_MENU_RANGE(miBrushStartLocation + 1, miBrushStartLocation + startLocationCount, MainWindow::onMenuBrushStartLocation)
+ EVT_MENU_RANGE(miRadius, miRadius + radiusCount, MainWindow::onMenuRadius)
+END_EVENT_TABLE()
+
+// =====================================================
+// class GlCanvas
+// =====================================================
+
+GlCanvas::GlCanvas(MainWindow * mainWindow, int* args)
+ : wxGLCanvas(mainWindow, -1, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas"), args) {
+ this->mainWindow = mainWindow;
+}
+
+void GlCanvas::onMouseDown(wxMouseEvent &event) {
+ mainWindow->onMouseDown(event);
+}
+
+void GlCanvas::onMouseMove(wxMouseEvent &event) {
+ mainWindow->onMouseMove(event);
+}
+
+ void GlCanvas::onKeyDown(wxKeyEvent &event) {
+ mainWindow->onKeyDown(event);
+ }
+
+BEGIN_EVENT_TABLE(GlCanvas, wxGLCanvas)
+ EVT_KEY_DOWN(GlCanvas::onKeyDown)
+
+ EVT_LEFT_DOWN(GlCanvas::onMouseDown)
+ EVT_MOTION(GlCanvas::onMouseMove)
+END_EVENT_TABLE()
+
+// ===============================================
+// class SimpleDialog
+// ===============================================
+
+void SimpleDialog::addValue(const string &key, const string &value) {
+ values.push_back(pair(key, value));
+}
+
+string SimpleDialog::getValue(const string &key) {
+ for (int i = 0; i < values.size(); ++i) {
+ if (values[i].first == key) {
+ return values[i].second;
+ }
+ }
+ return "";
+}
+
+void SimpleDialog::show() {
+
+ Create(NULL, -1, wxT("Edit Values"));
+
+ wxSizer *sizer = new wxFlexGridSizer(2);
+
+ vector texts;
+
+ for (Values::iterator it = values.begin(); it != values.end(); ++it) {
+ sizer->Add(new wxStaticText(this, -1, ToUnicode(it->first)), 0, wxALL, 5);
+ wxTextCtrl *text = new wxTextCtrl(this, -1, ToUnicode(it->second));
+ sizer->Add(text, 0, wxALL, 5);
+ texts.push_back(text);
+ }
+ SetSizerAndFit(sizer);
+
+ ShowModal();
+
+ for (int i = 0; i < texts.size(); ++i) {
+ values[i].second = texts[i]->GetValue().ToAscii();
+ }
+}
+
+// ===============================================
+// class App
+// ===============================================
+
+bool App::OnInit() {
+ string fileparam;
+ if(argc==2){
+ fileparam = wxFNCONV(argv[1]);
+ }
+
+ mainWindow = new MainWindow();
+ mainWindow->Show();
+ mainWindow->init(fileparam);
+ return true;
+}
+
+int App::MainLoop() {
+ try {
+ return wxApp::MainLoop();
+ } catch (const exception &e) {
+ wxMessageDialog(NULL, ToUnicode(e.what()), wxT("Exception"), wxOK | wxICON_ERROR).ShowModal();
+ }
+ return 0;
+}
+
+int App::OnExit() {
+ return 0;
+}
+
+}// end namespace
+
+IMPLEMENT_APP(MapEditor::App)
diff --git a/source/shared_lib/include/platform/sdl/platform_util.h b/source/shared_lib/include/platform/sdl/platform_util.h
index 197aba33..bd1c7cc8 100644
--- a/source/shared_lib/include/platform/sdl/platform_util.h
+++ b/source/shared_lib/include/platform/sdl/platform_util.h
@@ -88,7 +88,7 @@ public:
// Misc
// =====================================================
-void findAll(const string &path, vector &results, bool cutExtension=false);
+void findAll(const string &path, vector &results, bool cutExtension=false, bool errorOnNotFound=true);
int32 getFolderTreeContentsCheckSumRecursively(const string &path, const string &filterFileExt, Checksum *recursiveChecksum);
vector > getFolderTreeContentsCheckSumListRecursively(const string &path, const string &filterFileExt, vector > *recursiveMap);
void createDirectoryPaths(string Path);
diff --git a/source/shared_lib/include/platform/win32/platform_util.h b/source/shared_lib/include/platform/win32/platform_util.h
index cd832183..bc3adb88 100644
--- a/source/shared_lib/include/platform/win32/platform_util.h
+++ b/source/shared_lib/include/platform/win32/platform_util.h
@@ -98,7 +98,7 @@ public:
// Misc
// =====================================================
-void findAll(const string &path, vector &results, bool cutExtension=false);
+void findAll(const string &path, vector &results, bool cutExtension=false, bool errorOnNotFound=true);
int32 getFolderTreeContentsCheckSumRecursively(const string &path, const string &filterFileExt, Checksum *recursiveChecksum);
vector > getFolderTreeContentsCheckSumListRecursively(const string &path, const string &filterFileExt, vector > *recursiveMap);
void createDirectoryPaths(string Path);
diff --git a/source/shared_lib/sources/platform/sdl/platform_util.cpp b/source/shared_lib/sources/platform/sdl/platform_util.cpp
index b860bd6f..8c404cfe 100644
--- a/source/shared_lib/sources/platform/sdl/platform_util.cpp
+++ b/source/shared_lib/sources/platform/sdl/platform_util.cpp
@@ -119,7 +119,7 @@ int64 Chrono::queryCounter(int multiplier) const {
// =====================================
//finds all filenames like path and stores them in resultys
-void findAll(const string &path, vector &results, bool cutExtension) {
+void findAll(const string &path, vector &results, bool cutExtension, bool errorOnNotFound) {
results.clear();
std::string mypath = path;
@@ -131,6 +131,8 @@ void findAll(const string &path, vector &results, bool cutExtension) {
mypath += "*";
}
+ if(Socket::enableDebugText) printf("In [%s::%s] scanning [%s]\n",__FILE__,__FUNCTION__,mypath.c_str());
+
glob_t globbuf;
int res = glob(mypath.c_str(), 0, 0, &globbuf);
@@ -153,7 +155,7 @@ void findAll(const string &path, vector &results, bool cutExtension) {
globfree(&globbuf);
- if(results.size() == 0) {
+ if(results.size() == 0 && errorOnNotFound == true) {
throw runtime_error("No files found in: " + mypath);
}
diff --git a/source/shared_lib/sources/platform/win32/platform_util.cpp b/source/shared_lib/sources/platform/win32/platform_util.cpp
index a4d51cce..849f764f 100644
--- a/source/shared_lib/sources/platform/win32/platform_util.cpp
+++ b/source/shared_lib/sources/platform/win32/platform_util.cpp
@@ -163,7 +163,7 @@ void PlatformExceptionHandler::install(string dumpFileName){
// =====================================================
//finds all filenames like path and stores them in resultys
-void findAll(const string &path, vector &results, bool cutExtension){
+void findAll(const string &path, vector &results, bool cutExtension, bool errorOnNotFound){
int i= 0;
struct _finddata_t fi;
@@ -184,11 +184,11 @@ void findAll(const string &path, vector &results, bool cutExtension){
}
while(_findnext(handle, &fi)==0);
}
- else{
+ else if(errorOnNotFound == true){
throw runtime_error("Error opening files: "+ path);
}
- if(i==0){
+ if(i==0 && errorOnNotFound == true){
throw runtime_error("No files found: "+ path);
}