- bugfixes and cleanup for g3d editor and map editor so they now compile and run using newer wxwidgets (should also be backwards compatible with 2.8
This commit is contained in:
parent
c75181f350
commit
829c499568
|
@ -209,23 +209,26 @@ MainWindow::MainWindow( std::pair<string,vector<string> > unitToLoad,
|
||||||
string appPath)
|
string appPath)
|
||||||
: wxFrame(NULL, -1, ToUnicode(winHeader),
|
: wxFrame(NULL, -1, ToUnicode(winHeader),
|
||||||
wxPoint(Renderer::windowX, Renderer::windowY),
|
wxPoint(Renderer::windowX, Renderer::windowY),
|
||||||
wxSize(Renderer::windowW, Renderer::windowH)), model(NULL), glCanvas(NULL), renderer(NULL), initTextureManager(true), timer(NULL)
|
wxSize(Renderer::windowW, Renderer::windowH)),
|
||||||
|
model(NULL), glCanvas(NULL), renderer(NULL),
|
||||||
|
initTextureManager(true), timer(NULL),
|
||||||
|
startupSettingsInited(false)
|
||||||
{
|
{
|
||||||
this->appPath = appPath;
|
this->appPath = appPath;
|
||||||
Properties::setApplicationPath(extractDirectoryPathFromFile(appPath));
|
Properties::setApplicationPath(extractDirectoryPathFromFile(appPath));
|
||||||
|
|
||||||
Config &config = Config::getInstance();
|
Config &config = Config::getInstance();
|
||||||
//getGlPlatformExtensions();
|
//getGlPlatformExtensions();
|
||||||
|
|
||||||
int args[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_MIN_ALPHA, 8 }; // to prevent flicker
|
int args[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_MIN_ALPHA, 8 }; // to prevent flicker
|
||||||
glCanvas = new GlCanvas(this, args);
|
glCanvas = new GlCanvas(this, args);
|
||||||
|
|
||||||
#if wxCHECK_VERSION(2, 9, 1)
|
#if wxCHECK_VERSION(2, 9, 1)
|
||||||
|
//glCanvas->setCurrentGLContext();
|
||||||
#else
|
#else
|
||||||
glCanvas->SetCurrent();
|
glCanvas->SetCurrent();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
renderer= Renderer::getInstance();
|
|
||||||
|
|
||||||
model= NULL;
|
model= NULL;
|
||||||
unitPath = unitToLoad;
|
unitPath = unitToLoad;
|
||||||
|
|
||||||
|
@ -302,56 +305,7 @@ MainWindow::MainWindow( std::pair<string,vector<string> > unitToLoad,
|
||||||
menuMode->Check(miModeGrid, true);
|
menuMode->Check(miModeGrid, true);
|
||||||
menuCustomColor->Check(miColorRed, true);
|
menuCustomColor->Check(miColorRed, true);
|
||||||
|
|
||||||
for(unsigned int i = 0; i < autoScreenShotParams.size(); ++i) {
|
//!!!
|
||||||
if(autoScreenShotParams[i] == "transparent") {
|
|
||||||
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
|
||||||
menuFile->Check(miFileToggleScreenshotTransparent,true);
|
|
||||||
float alpha = 0.0f;
|
|
||||||
renderer->setAlphaColor(alpha);
|
|
||||||
}
|
|
||||||
if(autoScreenShotParams[i] == "enable_grid") {
|
|
||||||
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
|
||||||
menuMode->Check(miModeGrid,true);
|
|
||||||
if(renderer->getGrid() == false) {
|
|
||||||
renderer->toggleGrid();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(autoScreenShotParams[i] == "enable_wireframe") {
|
|
||||||
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
|
||||||
menuMode->Check(miModeWireframe,true);
|
|
||||||
if(renderer->getWireframe() == false) {
|
|
||||||
renderer->toggleWireframe();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(autoScreenShotParams[i] == "enable_normals") {
|
|
||||||
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
|
||||||
menuMode->Check(miModeNormals,true);
|
|
||||||
if(renderer->getNormals() == false) {
|
|
||||||
renderer->toggleNormals();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(autoScreenShotParams[i] == "disable_grid") {
|
|
||||||
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
|
||||||
menuMode->Check(miModeGrid,false);
|
|
||||||
if(renderer->getGrid() == true) {
|
|
||||||
renderer->toggleGrid();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(autoScreenShotParams[i] == "enable_wireframe") {
|
|
||||||
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
|
||||||
menuMode->Check(miModeWireframe,false);
|
|
||||||
if(renderer->getWireframe() == true) {
|
|
||||||
renderer->toggleWireframe();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(autoScreenShotParams[i] == "enable_normals") {
|
|
||||||
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
|
||||||
menuMode->Check(miModeNormals,false);
|
|
||||||
if(renderer->getNormals() == true) {
|
|
||||||
renderer->toggleNormals();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SetMenuBar(menu);
|
SetMenuBar(menu);
|
||||||
|
|
||||||
|
@ -393,8 +347,8 @@ MainWindow::MainWindow( std::pair<string,vector<string> > unitToLoad,
|
||||||
|
|
||||||
glCanvas->SetFocus();
|
glCanvas->SetFocus();
|
||||||
|
|
||||||
timer = new wxTimer(this);
|
//timer = new wxTimer(this);
|
||||||
timer->Start(100);
|
//timer->Start(100);
|
||||||
|
|
||||||
// For windows register g3d file extension to launch this app
|
// For windows register g3d file extension to launch this app
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@ -426,6 +380,70 @@ MainWindow::MainWindow( std::pair<string,vector<string> > unitToLoad,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::setupTimer() {
|
||||||
|
timer = new wxTimer(this);
|
||||||
|
timer->Start(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setupStartupSettings() {
|
||||||
|
renderer= Renderer::getInstance();
|
||||||
|
|
||||||
|
for(unsigned int i = 0; i < autoScreenShotParams.size(); ++i) {
|
||||||
|
if(autoScreenShotParams[i] == "transparent") {
|
||||||
|
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
||||||
|
menuFile->Check(miFileToggleScreenshotTransparent,true);
|
||||||
|
float alpha = 0.0f;
|
||||||
|
renderer->setAlphaColor(alpha);
|
||||||
|
}
|
||||||
|
if(autoScreenShotParams[i] == "enable_grid") {
|
||||||
|
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
||||||
|
menuMode->Check(miModeGrid,true);
|
||||||
|
if(renderer->getGrid() == false) {
|
||||||
|
renderer->toggleGrid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(autoScreenShotParams[i] == "enable_wireframe") {
|
||||||
|
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
||||||
|
menuMode->Check(miModeWireframe,true);
|
||||||
|
if(renderer->getWireframe() == false) {
|
||||||
|
renderer->toggleWireframe();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(autoScreenShotParams[i] == "enable_normals") {
|
||||||
|
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
||||||
|
menuMode->Check(miModeNormals,true);
|
||||||
|
if(renderer->getNormals() == false) {
|
||||||
|
renderer->toggleNormals();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(autoScreenShotParams[i] == "disable_grid") {
|
||||||
|
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
||||||
|
menuMode->Check(miModeGrid,false);
|
||||||
|
if(renderer->getGrid() == true) {
|
||||||
|
renderer->toggleGrid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(autoScreenShotParams[i] == "enable_wireframe") {
|
||||||
|
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
||||||
|
menuMode->Check(miModeWireframe,false);
|
||||||
|
if(renderer->getWireframe() == true) {
|
||||||
|
renderer->toggleWireframe();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(autoScreenShotParams[i] == "enable_normals") {
|
||||||
|
printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str());
|
||||||
|
menuMode->Check(miModeNormals,false);
|
||||||
|
if(renderer->getNormals() == true) {
|
||||||
|
renderer->toggleNormals();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
renderer->init();
|
||||||
|
|
||||||
|
wxCommandEvent event;
|
||||||
|
onMenuRestart(event);
|
||||||
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow(){
|
MainWindow::~MainWindow(){
|
||||||
delete renderer;
|
delete renderer;
|
||||||
renderer = NULL;
|
renderer = NULL;
|
||||||
|
@ -440,18 +458,27 @@ MainWindow::~MainWindow(){
|
||||||
|
|
||||||
void MainWindow::init() {
|
void MainWindow::init() {
|
||||||
#if wxCHECK_VERSION(2, 9, 1)
|
#if wxCHECK_VERSION(2, 9, 1)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
glCanvas->SetCurrent();
|
glCanvas->SetCurrent();
|
||||||
#endif
|
#endif
|
||||||
renderer->init();
|
//renderer->init();
|
||||||
|
|
||||||
wxCommandEvent event;
|
//wxCommandEvent event;
|
||||||
onMenuRestart(event);
|
//onMenuRestart(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onPaint(wxPaintEvent &event){
|
void MainWindow::onPaint(wxPaintEvent &event) {
|
||||||
//printf("Start onPaint\n");
|
if(!IsShown()) return;
|
||||||
//fflush(stdout);
|
|
||||||
|
#if wxCHECK_VERSION(2, 9, 1)
|
||||||
|
glCanvas->setCurrentGLContext();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(startupSettingsInited == false) {
|
||||||
|
startupSettingsInited = true;
|
||||||
|
setupStartupSettings();
|
||||||
|
}
|
||||||
|
|
||||||
renderer->reset(GetClientSize().x, GetClientSize().y, playerColor);
|
renderer->reset(GetClientSize().x, GetClientSize().y, playerColor);
|
||||||
|
|
||||||
|
@ -1006,7 +1033,7 @@ void MainWindow::loadModel(string path) {
|
||||||
for(unsigned int idx =0; idx < this->modelPathList.size(); idx++) {
|
for(unsigned int idx =0; idx < this->modelPathList.size(); idx++) {
|
||||||
string modelPath = this->modelPathList[idx];
|
string modelPath = this->modelPathList[idx];
|
||||||
|
|
||||||
printf("Loading model [%s] %u of %lu\n",modelPath.c_str(),idx, this->modelPathList.size());
|
//printf("Loading model [%s] %u of %lu\n",modelPath.c_str(),idx, this->modelPathList.size());
|
||||||
|
|
||||||
if(timer) timer->Stop();
|
if(timer) timer->Stop();
|
||||||
delete model;
|
delete model;
|
||||||
|
@ -1712,9 +1739,25 @@ void translateCoords(wxWindow *wnd, int &x, int &y) {
|
||||||
|
|
||||||
// to prevent flicker
|
// to prevent flicker
|
||||||
GlCanvas::GlCanvas(MainWindow * mainWindow, int *args)
|
GlCanvas::GlCanvas(MainWindow * mainWindow, int *args)
|
||||||
|
#if wxCHECK_VERSION(2, 9, 1)
|
||||||
|
: wxGLCanvas(mainWindow, -1, args, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas")) {
|
||||||
|
this->context = new wxGLContext(this);
|
||||||
|
#else
|
||||||
: wxGLCanvas(mainWindow, -1, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas"), args) {
|
: wxGLCanvas(mainWindow, -1, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas"), args) {
|
||||||
|
this->context = NULL;
|
||||||
|
#endif
|
||||||
this->mainWindow = mainWindow;
|
this->mainWindow = mainWindow;
|
||||||
//
|
}
|
||||||
|
|
||||||
|
GlCanvas::~GlCanvas() {
|
||||||
|
delete this->context;
|
||||||
|
this->context = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlCanvas::setCurrentGLContext() {
|
||||||
|
if(this->context) {
|
||||||
|
this->SetCurrent(*this->context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for the mousewheel
|
// for the mousewheel
|
||||||
|
@ -2103,6 +2146,7 @@ bool App::OnInit(){
|
||||||
mainWindow->Show();
|
mainWindow->Show();
|
||||||
mainWindow->init();
|
mainWindow->init();
|
||||||
mainWindow->Update();
|
mainWindow->Update();
|
||||||
|
mainWindow->setupTimer();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,6 +106,8 @@ private:
|
||||||
|
|
||||||
string appPath;
|
string appPath;
|
||||||
|
|
||||||
|
bool startupSettingsInited;
|
||||||
|
|
||||||
void loadUnit(string path, string skillName);
|
void loadUnit(string path, string skillName);
|
||||||
void loadModel(string path);
|
void loadModel(string path);
|
||||||
void loadParticle(string path);
|
void loadParticle(string path);
|
||||||
|
@ -159,6 +161,9 @@ public:
|
||||||
void onKeyDown(wxKeyEvent &e);
|
void onKeyDown(wxKeyEvent &e);
|
||||||
|
|
||||||
string getModelInfo();
|
string getModelInfo();
|
||||||
|
|
||||||
|
void setupTimer();
|
||||||
|
void setupStartupSettings();
|
||||||
};
|
};
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
@ -171,14 +176,17 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GlCanvas(MainWindow *mainWindow, int *args);
|
GlCanvas(MainWindow *mainWindow, int *args);
|
||||||
|
~GlCanvas();
|
||||||
|
|
||||||
void onMouseWheel(wxMouseEvent &event);
|
void onMouseWheel(wxMouseEvent &event);
|
||||||
void onMouseMove(wxMouseEvent &event);
|
void onMouseMove(wxMouseEvent &event);
|
||||||
void onPaint(wxPaintEvent &event);
|
void onPaint(wxPaintEvent &event);
|
||||||
void onKeyDown(wxKeyEvent &event);
|
void onKeyDown(wxKeyEvent &event);
|
||||||
|
void setCurrentGLContext();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MainWindow *mainWindow;
|
MainWindow *mainWindow;
|
||||||
|
wxGLContext *context;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ MainWindow::MainWindow()
|
||||||
, menuBar(NULL)
|
, menuBar(NULL)
|
||||||
, panel(NULL)
|
, panel(NULL)
|
||||||
, glCanvas(NULL)
|
, glCanvas(NULL)
|
||||||
, program(NULL), boxsizer(NULL) {
|
, program(NULL), boxsizer(NULL), startupSettingsInited(false) {
|
||||||
|
|
||||||
this->panel = new wxPanel(this, wxID_ANY);
|
this->panel = new wxPanel(this, wxID_ANY);
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@ void MainWindow::onToolPlayer(wxCommandEvent& event){
|
||||||
|
|
||||||
void MainWindow::init(string fname) {
|
void MainWindow::init(string fname) {
|
||||||
#if wxCHECK_VERSION(2, 9, 1)
|
#if wxCHECK_VERSION(2, 9, 1)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
glCanvas->SetCurrent();
|
glCanvas->SetCurrent();
|
||||||
#endif
|
#endif
|
||||||
|
@ -349,18 +350,18 @@ void MainWindow::init(string fname) {
|
||||||
this->panel->SetSizer(boxsizer);
|
this->panel->SetSizer(boxsizer);
|
||||||
this->Layout();
|
this->Layout();
|
||||||
|
|
||||||
program = new Program(glCanvas->GetClientSize().x, glCanvas->GetClientSize().y);
|
//program = new Program(glCanvas->GetClientSize().x, glCanvas->GetClientSize().y);
|
||||||
|
|
||||||
fileName = "New (unsaved) Map";
|
fileName = "New (unsaved) Map";
|
||||||
if (!fname.empty() && fileExists(fname)) {
|
if (!fname.empty() && fileExists(fname)) {
|
||||||
program->loadMap(fname);
|
//program->loadMap(fname);
|
||||||
currentFile = fname;
|
currentFile = fname;
|
||||||
fileName = cutLastExt(extractFileFromDirectoryPath(fname.c_str()));
|
fileName = cutLastExt(extractFileFromDirectoryPath(fname.c_str()));
|
||||||
fileDialog->SetPath(ToUnicode(fname));
|
fileDialog->SetPath(ToUnicode(fname));
|
||||||
}
|
}
|
||||||
SetTitle(ToUnicode(currentFile + " - " + winHeader));
|
SetTitle(ToUnicode(currentFile + " - " + winHeader));
|
||||||
setDirty(false);
|
//setDirty(false);
|
||||||
setExtension();
|
//setExtension();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onClose(wxCloseEvent &event) {
|
void MainWindow::onClose(wxCloseEvent &event) {
|
||||||
|
@ -372,6 +373,21 @@ void MainWindow::onClose(wxCloseEvent &event) {
|
||||||
delete this;
|
delete this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::setupStartupSettings() {
|
||||||
|
program = new Program(glCanvas->GetClientSize().x, glCanvas->GetClientSize().y);
|
||||||
|
|
||||||
|
fileName = "New (unsaved) Map";
|
||||||
|
if (!currentFile.empty() && fileExists(currentFile)) {
|
||||||
|
program->loadMap(currentFile);
|
||||||
|
//currentFile = fname;
|
||||||
|
fileName = cutLastExt(extractFileFromDirectoryPath(currentFile.c_str()));
|
||||||
|
fileDialog->SetPath(ToUnicode(currentFile));
|
||||||
|
}
|
||||||
|
SetTitle(ToUnicode(currentFile + " - " + winHeader));
|
||||||
|
setDirty(false);
|
||||||
|
setExtension();
|
||||||
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow() {
|
MainWindow::~MainWindow() {
|
||||||
delete program;
|
delete program;
|
||||||
program = NULL;
|
program = NULL;
|
||||||
|
@ -395,7 +411,7 @@ void MainWindow::setDirty(bool val) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::setExtension() {
|
void MainWindow::setExtension() {
|
||||||
if (currentFile.empty()) {
|
if (currentFile.empty() || program == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
string extnsn = ext(currentFile);
|
string extnsn = ext(currentFile);
|
||||||
|
@ -412,7 +428,7 @@ void MainWindow::setExtension() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMouseDown(wxMouseEvent &event, int x, int y) {
|
void MainWindow::onMouseDown(wxMouseEvent &event, int x, int y) {
|
||||||
if (event.LeftIsDown()) {
|
if (event.LeftIsDown() && program != NULL) {
|
||||||
program->setUndoPoint(enabledGroup);
|
program->setUndoPoint(enabledGroup);
|
||||||
program->setRefAlt(x, y);
|
program->setRefAlt(x, y);
|
||||||
change(x, y);
|
change(x, y);
|
||||||
|
@ -427,18 +443,27 @@ void MainWindow::onMouseDown(wxMouseEvent &event, int x, int y) {
|
||||||
|
|
||||||
// for the mousewheel
|
// for the mousewheel
|
||||||
void MainWindow::onMouseWheelDown(wxMouseEvent &event) {
|
void MainWindow::onMouseWheelDown(wxMouseEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
wxPaintEvent ev;
|
wxPaintEvent ev;
|
||||||
program->incCellSize(1);
|
program->incCellSize(1);
|
||||||
onPaint(ev);
|
onPaint(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMouseWheelUp(wxMouseEvent &event) {
|
void MainWindow::onMouseWheelUp(wxMouseEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
wxPaintEvent ev;
|
wxPaintEvent ev;
|
||||||
program->incCellSize(-1);
|
program->incCellSize(-1);
|
||||||
onPaint(ev);
|
onPaint(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMouseMove(wxMouseEvent &event, int x, int y) {
|
void MainWindow::onMouseMove(wxMouseEvent &event, int x, int y) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
bool repaint = false;
|
bool repaint = false;
|
||||||
int dif;
|
int dif;
|
||||||
if (event.LeftIsDown()) {
|
if (event.LeftIsDown()) {
|
||||||
|
@ -477,6 +502,20 @@ void MainWindow::onMouseMove(wxMouseEvent &event, int x, int y) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onPaint(wxPaintEvent &event) {
|
void MainWindow::onPaint(wxPaintEvent &event) {
|
||||||
|
if(!IsShown()) {
|
||||||
|
event.Skip();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if wxCHECK_VERSION(2, 9, 1)
|
||||||
|
glCanvas->setCurrentGLContext();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(startupSettingsInited == false) {
|
||||||
|
startupSettingsInited = true;
|
||||||
|
setupStartupSettings();
|
||||||
|
}
|
||||||
|
|
||||||
if(lastPaintEvent.getMillis() < 30) {
|
if(lastPaintEvent.getMillis() < 30) {
|
||||||
sleep(1);
|
sleep(1);
|
||||||
return;
|
return;
|
||||||
|
@ -499,6 +538,10 @@ void MainWindow::onPaint(wxPaintEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuFileLoad(wxCommandEvent &event) {
|
void MainWindow::onMenuFileLoad(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
fileDialog->SetMessage(wxT("Select Glestmap to load"));
|
fileDialog->SetMessage(wxT("Select Glestmap to load"));
|
||||||
fileDialog->SetWildcard(wxT("Glest&Mega Map (*.gbm *.mgm)|*.gbm;*.mgm|Glest Map (*.gbm)|*.gbm|Mega Map (*.mgm)|*.mgm"));
|
fileDialog->SetWildcard(wxT("Glest&Mega Map (*.gbm *.mgm)|*.gbm;*.mgm|Glest Map (*.gbm)|*.gbm|Mega Map (*.mgm)|*.mgm"));
|
||||||
if (fileDialog->ShowModal() == wxID_OK) {
|
if (fileDialog->ShowModal() == wxID_OK) {
|
||||||
|
@ -512,6 +555,10 @@ void MainWindow::onMenuFileLoad(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuFileSave(wxCommandEvent &event) {
|
void MainWindow::onMenuFileSave(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (currentFile.empty()) {
|
if (currentFile.empty()) {
|
||||||
wxCommandEvent ev;
|
wxCommandEvent ev;
|
||||||
onMenuFileSaveAs(ev);
|
onMenuFileSaveAs(ev);
|
||||||
|
@ -523,6 +570,9 @@ void MainWindow::onMenuFileSave(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuFileSaveAs(wxCommandEvent &event) {
|
void MainWindow::onMenuFileSaveAs(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#if wxCHECK_VERSION(2, 9, 1)
|
#if wxCHECK_VERSION(2, 9, 1)
|
||||||
wxFileDialog fd(this, wxT("Select file"), wxT(""), wxT(""), wxT("*.gbm|*.mgm"), wxFD_SAVE);
|
wxFileDialog fd(this, wxT("Select file"), wxT(""), wxT(""), wxT("*.gbm|*.mgm"), wxFD_SAVE);
|
||||||
|
@ -548,6 +598,10 @@ void MainWindow::onMenuFileExit(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditUndo(wxCommandEvent &event) {
|
void MainWindow::onMenuEditUndo(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// std::cout << "Undo Pressed" << std::endl;
|
// std::cout << "Undo Pressed" << std::endl;
|
||||||
if (program->undo()) {
|
if (program->undo()) {
|
||||||
wxPaintEvent e;
|
wxPaintEvent e;
|
||||||
|
@ -557,7 +611,10 @@ void MainWindow::onMenuEditUndo(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditRedo(wxCommandEvent &event) {
|
void MainWindow::onMenuEditRedo(wxCommandEvent &event) {
|
||||||
// std::cout << "Redo Pressed" << std::endl;
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (program->redo()) {
|
if (program->redo()) {
|
||||||
wxPaintEvent e;
|
wxPaintEvent e;
|
||||||
onPaint(e);
|
onPaint(e);
|
||||||
|
@ -566,6 +623,10 @@ void MainWindow::onMenuEditRedo(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditReset(wxCommandEvent &event) {
|
void MainWindow::onMenuEditReset(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
program->setUndoPoint(ctAll);
|
program->setUndoPoint(ctAll);
|
||||||
SimpleDialog simpleDialog;
|
SimpleDialog simpleDialog;
|
||||||
simpleDialog.addValue("Width", "128","(must be 16,32,64,128,256,512...)"); // must be an exponent of two
|
simpleDialog.addValue("Width", "128","(must be 16,32,64,128,256,512...)"); // must be an exponent of two
|
||||||
|
@ -591,6 +652,10 @@ void MainWindow::onMenuEditReset(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditResetPlayers(wxCommandEvent &event) {
|
void MainWindow::onMenuEditResetPlayers(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SimpleDialog simpleDialog;
|
SimpleDialog simpleDialog;
|
||||||
simpleDialog.addValue("Number of players", intToStr(program->getMap()->getMaxFactions()));
|
simpleDialog.addValue("Number of players", intToStr(program->getMap()->getMaxFactions()));
|
||||||
if (!simpleDialog.show("Reset players")) return;
|
if (!simpleDialog.show("Reset players")) return;
|
||||||
|
@ -606,6 +671,10 @@ void MainWindow::onMenuEditResetPlayers(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditResize(wxCommandEvent &event) {
|
void MainWindow::onMenuEditResize(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SimpleDialog simpleDialog;
|
SimpleDialog simpleDialog;
|
||||||
simpleDialog.addValue("Width", intToStr(program->getMap()->getW()),"(must be 16,32,64,128,256,512...)");
|
simpleDialog.addValue("Width", intToStr(program->getMap()->getW()),"(must be 16,32,64,128,256,512...)");
|
||||||
simpleDialog.addValue("Height", intToStr(program->getMap()->getH()),"(must be 16,32,64,128,256,512...)");
|
simpleDialog.addValue("Height", intToStr(program->getMap()->getH()),"(must be 16,32,64,128,256,512...)");
|
||||||
|
@ -627,73 +696,121 @@ void MainWindow::onMenuEditResize(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditFlipX(wxCommandEvent &event) {
|
void MainWindow::onMenuEditFlipX(wxCommandEvent &event) {
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->flipX();
|
program->flipX();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditFlipY(wxCommandEvent &event) {
|
void MainWindow::onMenuEditFlipY(wxCommandEvent &event) {
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->flipY();
|
program->flipY();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditMirrorX(wxCommandEvent &event) { // copy left to right
|
void MainWindow::onMenuEditMirrorX(wxCommandEvent &event) { // copy left to right
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->mirrorX();
|
program->mirrorX();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditMirrorY(wxCommandEvent &event) { // copy top to bottom
|
void MainWindow::onMenuEditMirrorY(wxCommandEvent &event) { // copy top to bottom
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->mirrorY();
|
program->mirrorY();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditMirrorXY(wxCommandEvent &event) { // copy bottomleft tp topright
|
void MainWindow::onMenuEditMirrorXY(wxCommandEvent &event) { // copy bottomleft tp topright
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->mirrorXY();
|
program->mirrorXY();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditRotatecopyX(wxCommandEvent &event) { // copy left to right, rotated
|
void MainWindow::onMenuEditRotatecopyX(wxCommandEvent &event) { // copy left to right, rotated
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->rotatecopyX();
|
program->rotatecopyX();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditRotatecopyY(wxCommandEvent &event) { // copy top to bottom, rotated
|
void MainWindow::onMenuEditRotatecopyY(wxCommandEvent &event) { // copy top to bottom, rotated
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->rotatecopyY();
|
program->rotatecopyY();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditRotatecopyXY(wxCommandEvent &event) { // copy bottomleft to topright, rotated
|
void MainWindow::onMenuEditRotatecopyXY(wxCommandEvent &event) { // copy bottomleft to topright, rotated
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->rotatecopyXY();
|
program->rotatecopyXY();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditRotatecopyCorner(wxCommandEvent &event) { // copy top left 1/4 to top right 1/4, rotated
|
void MainWindow::onMenuEditRotatecopyCorner(wxCommandEvent &event) { // copy top left 1/4 to top right 1/4, rotated
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->rotatecopyCorner();
|
program->rotatecopyCorner();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MainWindow::onMenuEditRandomizeHeights(wxCommandEvent &event) {
|
void MainWindow::onMenuEditRandomizeHeights(wxCommandEvent &event) {
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->randomizeMapHeights();
|
program->randomizeMapHeights();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditRandomize(wxCommandEvent &event) {
|
void MainWindow::onMenuEditRandomize(wxCommandEvent &event) {
|
||||||
program->setUndoPoint(ctAll);
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
program->setUndoPoint(ctAll);
|
||||||
program->randomizeMap();
|
program->randomizeMap();
|
||||||
setDirty();
|
setDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditSwitchSurfaces(wxCommandEvent &event) {
|
void MainWindow::onMenuEditSwitchSurfaces(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SimpleDialog simpleDialog;
|
SimpleDialog simpleDialog;
|
||||||
simpleDialog.addValue("Surface1", "1","replace this surface with...");
|
simpleDialog.addValue("Surface1", "1","replace this surface with...");
|
||||||
simpleDialog.addValue("Surface2", "2","...this and vice versa");
|
simpleDialog.addValue("Surface2", "2","...this and vice versa");
|
||||||
|
@ -712,6 +829,10 @@ void MainWindow::onMenuEditSwitchSurfaces(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditInfo(wxCommandEvent &event) {
|
void MainWindow::onMenuEditInfo(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SimpleDialog simpleDialog;
|
SimpleDialog simpleDialog;
|
||||||
simpleDialog.addValue("Title", program->getMap()->getTitle());
|
simpleDialog.addValue("Title", program->getMap()->getTitle());
|
||||||
simpleDialog.addValue("Description", program->getMap()->getDesc());
|
simpleDialog.addValue("Description", program->getMap()->getDesc());
|
||||||
|
@ -730,6 +851,10 @@ void MainWindow::onMenuEditInfo(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditAdvanced(wxCommandEvent &event) {
|
void MainWindow::onMenuEditAdvanced(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SimpleDialog simpleDialog;
|
SimpleDialog simpleDialog;
|
||||||
simpleDialog.addValue("Height Factor", intToStr(program->getMap()->getHeightFactor()),"(lower means map is more more zoomed in)");
|
simpleDialog.addValue("Height Factor", intToStr(program->getMap()->getHeightFactor()),"(lower means map is more more zoomed in)");
|
||||||
simpleDialog.addValue("Water Level", intToStr(program->getMap()->getWaterLevel()),"(water is visible below this, and walkable until 1.5 less)");
|
simpleDialog.addValue("Water Level", intToStr(program->getMap()->getWaterLevel()),"(water is visible below this, and walkable until 1.5 less)");
|
||||||
|
@ -751,12 +876,20 @@ void MainWindow::onMenuEditAdvanced(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuViewResetZoomAndPos(wxCommandEvent &event) {
|
void MainWindow::onMenuViewResetZoomAndPos(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
program->resetOfset();
|
program->resetOfset();
|
||||||
wxPaintEvent e;
|
wxPaintEvent e;
|
||||||
onPaint(e);
|
onPaint(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuViewGrid(wxCommandEvent &event) {
|
void MainWindow::onMenuViewGrid(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
menuView->Check(miViewGrid, program->setGridOnOff()); // miViewGrid event.GetId()
|
menuView->Check(miViewGrid, program->setGridOnOff()); // miViewGrid event.GetId()
|
||||||
wxPaintEvent e;
|
wxPaintEvent e;
|
||||||
onPaint(e);
|
onPaint(e);
|
||||||
|
@ -860,6 +993,10 @@ void MainWindow::onMenuRadius(wxCommandEvent &e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::change(int x, int y) {
|
void MainWindow::change(int x, int y) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (enabledGroup) {
|
switch (enabledGroup) {
|
||||||
case ctHeight:
|
case ctHeight:
|
||||||
program->glestChangeMapHeight(x, y, height, radius);
|
program->glestChangeMapHeight(x, y, height, radius);
|
||||||
|
@ -910,6 +1047,10 @@ void MainWindow::uncheckRadius() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onKeyDown(wxKeyEvent &e) {
|
void MainWindow::onKeyDown(wxKeyEvent &e) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (currentBrush == btHeight || currentBrush == btGradient) { // 'height' brush
|
if (currentBrush == btHeight || currentBrush == btGradient) { // 'height' brush
|
||||||
if (e.GetKeyCode() >= '0' && e.GetKeyCode() <= '5') {
|
if (e.GetKeyCode() >= '0' && e.GetKeyCode() <= '5') {
|
||||||
height = e.GetKeyCode() - 48; // '0'-'5' == 0-5
|
height = e.GetKeyCode() - 48; // '0'-'5' == 0-5
|
||||||
|
@ -1077,10 +1218,28 @@ END_EVENT_TABLE()
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
|
||||||
GlCanvas::GlCanvas(MainWindow *mainWindow, wxWindow *parent, int *args)
|
GlCanvas::GlCanvas(MainWindow *mainWindow, wxWindow *parent, int *args)
|
||||||
|
#if wxCHECK_VERSION(2, 9, 1)
|
||||||
|
: wxGLCanvas(parent, -1, args, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas")) {
|
||||||
|
this->context = new wxGLContext(this);
|
||||||
|
#else
|
||||||
: wxGLCanvas(parent, -1, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas"), args) {
|
: wxGLCanvas(parent, -1, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas"), args) {
|
||||||
|
this->context = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
this->mainWindow = mainWindow;
|
this->mainWindow = mainWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GlCanvas::~GlCanvas() {
|
||||||
|
delete this->context;
|
||||||
|
this->context = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlCanvas::setCurrentGLContext() {
|
||||||
|
if(this->context) {
|
||||||
|
this->SetCurrent(*this->context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void translateCoords(wxWindow *wnd, int &x, int &y) {
|
void translateCoords(wxWindow *wnd, int &x, int &y) {
|
||||||
/*
|
/*
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
|
@ -183,6 +183,8 @@ private:
|
||||||
|
|
||||||
wxBoxSizer *boxsizer;
|
wxBoxSizer *boxsizer;
|
||||||
|
|
||||||
|
bool startupSettingsInited;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MainWindow();
|
MainWindow();
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
@ -247,9 +249,11 @@ public:
|
||||||
void uncheckRadius();
|
void uncheckRadius();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool isDirty() const { return fileModified; }
|
bool isDirty() const { return fileModified; }
|
||||||
void setDirty(bool val=true);
|
void setDirty(bool val=true);
|
||||||
void setExtension();
|
void setExtension();
|
||||||
|
void setupStartupSettings();
|
||||||
};
|
};
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
@ -262,14 +266,18 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GlCanvas(MainWindow *mainWindow, wxWindow *parent, int *args);
|
GlCanvas(MainWindow *mainWindow, wxWindow *parent, int *args);
|
||||||
|
~GlCanvas();
|
||||||
|
|
||||||
void onMouseDown(wxMouseEvent &event);
|
void onMouseDown(wxMouseEvent &event);
|
||||||
void onMouseMove(wxMouseEvent &event);
|
void onMouseMove(wxMouseEvent &event);
|
||||||
void onMouseWheel(wxMouseEvent &event);
|
void onMouseWheel(wxMouseEvent &event);
|
||||||
void onKeyDown(wxKeyEvent &event);
|
void onKeyDown(wxKeyEvent &event);
|
||||||
void onPaint(wxPaintEvent &event);
|
void onPaint(wxPaintEvent &event);
|
||||||
|
|
||||||
|
void setCurrentGLContext();
|
||||||
private:
|
private:
|
||||||
MainWindow *mainWindow;
|
MainWindow *mainWindow;
|
||||||
|
wxGLContext *context;
|
||||||
};
|
};
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
|
Loading…
Reference in New Issue