diff --git a/source/glest_game/menu/menu_state_graphic_info.cpp b/source/glest_game/menu/menu_state_graphic_info.cpp index 424ca53c..9320bddd 100644 --- a/source/glest_game/menu/menu_state_graphic_info.cpp +++ b/source/glest_game/menu/menu_state_graphic_info.cpp @@ -14,7 +14,7 @@ #include "renderer.h" #include "sound_renderer.h" #include "core_data.h" -#include "menu_state_options.h" +#include "menu_state_options_graphics.h" #include "config.h" #include "opengl.h" #include "leak_dumper.h" @@ -123,7 +123,7 @@ void MenuStateGraphicInfo::mouseClick(int x, int y, MouseButton mouseButton){ if(buttonReturn.mouseClick(x,y)){ soundRenderer.playFx(coreData.getClickSoundA()); - mainMenu->setState(new MenuStateOptions(program, mainMenu)); + mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu)); } } diff --git a/source/glest_game/menu/menu_state_keysetup.cpp b/source/glest_game/menu/menu_state_keysetup.cpp index e3e4fb3c..a1af2fba 100644 --- a/source/glest_game/menu/menu_state_keysetup.cpp +++ b/source/glest_game/menu/menu_state_keysetup.cpp @@ -17,6 +17,11 @@ #include "config.h" #include "menu_state_options.h" #include "menu_state_root.h" +#include "menu_state_keysetup.h" +#include "menu_state_options_graphics.h" +#include "menu_state_options_sound.h" +#include "menu_state_options_network.h" +#include "menu_state_options_sound.h" #include "metrics.h" #include "string_utils.h" @@ -38,26 +43,63 @@ MenuStateKeysetup::MenuStateKeysetup(Program *program, MainMenu *mainMenu, containerName = "KeySetup"; this->parentUI = parentUI; + this->console.setOnlyChatMessagesInStoredLines(false); hotkeyIndex = -1; hotkeyChar = SDLK_UNKNOWN; Lang &lang= Lang::getInstance(); int buttonRowPos=80; + if(this->parentUI==NULL){ + int tabButtonWidth=200; + int tabButtonHeight=30; + + buttonAudioSection.registerGraphicComponent(containerName,"buttonAudioSection"); + buttonAudioSection.init(0, 720,tabButtonWidth,tabButtonHeight); + buttonAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonAudioSection.setText(lang.get("Audio")); + // Video Section + buttonVideoSection.registerGraphicComponent(containerName,"labelVideoSection"); + buttonVideoSection.init(200, 720,tabButtonWidth,tabButtonHeight); + buttonVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonVideoSection.setText(lang.get("Video")); + //currentLine-=lineOffset; + //MiscSection + buttonMiscSection.registerGraphicComponent(containerName,"labelMiscSection"); + buttonMiscSection.init(400, 720,tabButtonWidth,tabButtonHeight); + buttonMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonMiscSection.setText(lang.get("Misc")); + //NetworkSettings + buttonNetworkSettings.registerGraphicComponent(containerName,"labelNetworkSettingsSection"); + buttonNetworkSettings.init(600, 720,tabButtonWidth,tabButtonHeight); + buttonNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonNetworkSettings.setText(lang.get("Network")); + + //KeyboardSetup + buttonKeyboardSetup.registerGraphicComponent(containerName,"buttonKeyboardSetup"); + buttonKeyboardSetup.init(800, 700,tabButtonWidth,tabButtonHeight+20); + buttonKeyboardSetup.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonKeyboardSetup.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonKeyboardSetup.setText(lang.get("Keyboardsetup")); + } // header labelTitle.registerGraphicComponent(containerName,"labelTitle"); - labelTitle.init(330,700); + labelTitle.init(330,670); labelTitle.setFont(CoreData::getInstance().getMenuFontBig()); labelTitle.setFont3D(CoreData::getInstance().getMenuFontBig3D()); labelTitle.setText(lang.get("Keyboardsetup")); labelTestTitle.registerGraphicComponent(containerName,"labelTestTitle"); - labelTestTitle.init(50,700); + labelTestTitle.init(50,670); labelTestTitle.setFont(CoreData::getInstance().getMenuFontBig()); labelTestTitle.setFont3D(CoreData::getInstance().getMenuFontBig3D()); labelTestTitle.setText(lang.get("KeyboardsetupTest")); labelTestValue.registerGraphicComponent(containerName,"labelTestValue"); - labelTestValue.init(50,670); + labelTestValue.init(50,640); labelTestValue.setFont(CoreData::getInstance().getMenuFontBig()); labelTestValue.setFont3D(CoreData::getInstance().getMenuFontBig3D()); labelTestValue.setText(""); @@ -78,7 +120,7 @@ MenuStateKeysetup::MenuStateKeysetup(Program *program, MainMenu *mainMenu, // buttons buttonOk.registerGraphicComponent(containerName,"buttonOk"); buttonOk.init(200, buttonRowPos, 100); - buttonOk.setText(lang.get("Ok")); + buttonOk.setText(lang.get("Save")); buttonDefaults.registerGraphicComponent(containerName,"buttonDefaults"); buttonDefaults.init(310, buttonRowPos, 100); @@ -86,7 +128,7 @@ MenuStateKeysetup::MenuStateKeysetup(Program *program, MainMenu *mainMenu, buttonReturn.registerGraphicComponent(containerName,"buttonReturn"); buttonReturn.init(420, buttonRowPos, 100); - buttonReturn.setText(lang.get("Abort")); + buttonReturn.setText(lang.get("Return")); keyButtonsLineHeight=25; keyButtonsHeight=20; @@ -178,12 +220,11 @@ void MenuStateKeysetup::reloadUI() { // mainMassegeBox mainMessageBox.init(lang.get("Ok")); - buttonOk.setText(lang.get("Ok")); + buttonOk.setText(lang.get("Save")); + buttonReturn.setText(lang.get("Return")); buttonDefaults.setText(lang.get("Defaults")); - buttonReturn.setText(lang.get("Abort")); - GraphicComponent::reloadFontsForRegisterGraphicComponents(containerName); } @@ -280,18 +321,19 @@ void MenuStateKeysetup::mouseClick(int x, int y, MouseButton mouseButton){ configKeys.setUserProperties(userProperties); configKeys.save(); configKeys.reload(); - } + } - if(this->parentUI != NULL) { - *this->parentUI = NULL; - delete *this->parentUI; - } - - mainMenu->setState(new MenuStateOptions(program, mainMenu)); + Lang &lang= Lang::getInstance(); + console.addLine(lang.get("SettingsSaved")); +// if(this->parentUI != NULL) { +// *this->parentUI = NULL; +// delete *this->parentUI; +// } +// +// mainMenu->setState(new MenuStateOptions(program, mainMenu)); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); } - else { - if ( keyScrollBar.getElementCount() != 0) { + else if ( keyScrollBar.getElementCount() != 0) { for (int i = keyScrollBar.getVisibleStart(); i <= keyScrollBar.getVisibleEnd(); ++i) { if (keyButtons[i]->mouseClick(x, y)) { @@ -301,7 +343,38 @@ void MenuStateKeysetup::mouseClick(int x, int y, MouseButton mouseButton){ } } } - } + + if(this->parentUI==NULL){ + if(buttonKeyboardSetup.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + //mainMenu->setState(new MenuStateKeysetup(program, mainMenu)); // open keyboard shortcuts setup screen + //mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu)); // open keyboard shortcuts setup screen + //mainMenu->setState(new MenuStateOptionsNetwork(program, mainMenu)); // open keyboard shortcuts setup screen + //mainMenu->setState(new MenuStateKeysetup(program, mainMenu)); // open keyboard shortcuts setup screen + //showMessageBox("Not implemented yet", "Keyboard setup", false); + return; + } + else if(buttonAudioSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsSound(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonNetworkSettings.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsNetwork(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonMiscSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptions(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonVideoSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + } } void MenuStateKeysetup::mouseUp(int x, int y, const MouseButton mouseButton){ @@ -313,6 +386,13 @@ void MenuStateKeysetup::mouseUp(int x, int y, const MouseButton mouseButton){ void MenuStateKeysetup::mouseMove(int x, int y, const MouseState *ms){ buttonReturn.mouseMove(x, y); buttonOk.mouseMove(x, y); + if(this->parentUI==NULL){ + buttonKeyboardSetup.mouseMove(x, y); + buttonAudioSection.mouseMove(x, y); + buttonNetworkSettings.mouseMove(x, y); + buttonMiscSection.mouseMove(x, y); + buttonVideoSection.mouseMove(x, y); + } if (ms->get(mbLeft)) { keyScrollBar.mouseDown(x, y); } else { @@ -341,6 +421,13 @@ void MenuStateKeysetup::render(){ renderer.renderButton(&buttonReturn); renderer.renderButton(&buttonDefaults); renderer.renderButton(&buttonOk); + if(this->parentUI==NULL){ + renderer.renderButton(&buttonKeyboardSetup); + renderer.renderButton(&buttonVideoSection); + renderer.renderButton(&buttonAudioSection); + renderer.renderButton(&buttonMiscSection); + renderer.renderButton(&buttonNetworkSettings); + } renderer.renderLabel(&labelTitle); renderer.renderLabel(&labelTestTitle); renderer.renderLabel(&labelTestValue); diff --git a/source/glest_game/menu/menu_state_keysetup.h b/source/glest_game/menu/menu_state_keysetup.h index d4fc9167..33649ae0 100644 --- a/source/glest_game/menu/menu_state_keysetup.h +++ b/source/glest_game/menu/menu_state_keysetup.h @@ -32,6 +32,12 @@ private: GraphicButton buttonDefaults; GraphicButton buttonReturn; + GraphicButton buttonKeyboardSetup; // configure the keyboard + GraphicButton buttonVideoSection; + GraphicButton buttonAudioSection; + GraphicButton buttonMiscSection; + GraphicButton buttonNetworkSettings; + GraphicLabel labelTitle; GraphicScrollBar keyScrollBar; diff --git a/source/glest_game/menu/menu_state_options.cpp b/source/glest_game/menu/menu_state_options.cpp index 51b450c1..897620e9 100644 --- a/source/glest_game/menu/menu_state_options.cpp +++ b/source/glest_game/menu/menu_state_options.cpp @@ -21,6 +21,9 @@ #include "util.h" #include "menu_state_graphic_info.h" #include "menu_state_keysetup.h" +#include "menu_state_options_graphics.h" +#include "menu_state_options_network.h" +#include "menu_state_options_sound.h" #include "string_utils.h" #include "metrics.h" #include "leak_dumper.h" @@ -32,19 +35,20 @@ namespace Glest{ namespace Game{ // ===================================================== // class MenuStateOptions // ===================================================== -MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu): +MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu, ProgramState **parentUI): MenuState(program, mainMenu, "config") { try { containerName = "Options"; + this->parentUI=parentUI; Lang &lang= Lang::getInstance(); Config &config= Config::getInstance(); + this->console.setOnlyChatMessagesInStoredLines(false); //modeinfos=list (); - Shared::PlatformCommon::getFullscreenVideoModes(&modeInfos,!config.getBool("Windowed")); activeInputLabel=NULL; int leftLabelStart=50; - int leftColumnStart=leftLabelStart+180; + int leftColumnStart=leftLabelStart+280; int rightLabelStart=450; int rightColumnStart=rightLabelStart+280; int buttonRowPos=50; @@ -54,298 +58,49 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu): int currentColumnStart=leftColumnStart; int currentLine=700; int lineOffset=27; + int tabButtonWidth=200; + int tabButtonHeight=30; mainMessageBox.registerGraphicComponent(containerName,"mainMessageBox"); mainMessageBox.init(lang.get("Ok")); mainMessageBox.setEnabled(false); mainMessageBoxState=0; - labelAudioSection.registerGraphicComponent(containerName,"labelAudioSection"); - labelAudioSection.init(currentLabelStart+captionOffset, currentLine); - labelAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); - labelAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); - labelAudioSection.setText(lang.get("Audio")); - currentLine-=lineOffset; - currentLine-=lineOffset/2; - - //soundboxes - labelSoundFactory.registerGraphicComponent(containerName,"labelSoundFactory"); - labelSoundFactory.init(currentLabelStart, currentLine); - labelSoundFactory.setText(lang.get("SoundAndMusic")); - - listBoxSoundFactory.registerGraphicComponent(containerName,"listBoxSoundFactory"); - listBoxSoundFactory.init(currentColumnStart, currentLine, 100); - listBoxSoundFactory.pushBackItem("None"); - listBoxSoundFactory.pushBackItem("OpenAL"); - // deprecated as of 3.6.1 - //#ifdef WIN32 - //listBoxSoundFactory.pushBackItem("DirectSound8"); - //#endif - - listBoxSoundFactory.setSelectedItem(config.getString("FactorySound")); - currentLine-=lineOffset; - - labelVolumeFx.registerGraphicComponent(containerName,"labelVolumeFx"); - labelVolumeFx.init(currentLabelStart, currentLine); - labelVolumeFx.setText(lang.get("FxVolume")); - - listBoxVolumeFx.registerGraphicComponent(containerName,"listBoxVolumeFx"); - listBoxVolumeFx.init(currentColumnStart, currentLine, 80); - currentLine-=lineOffset; - - labelVolumeAmbient.registerGraphicComponent(containerName,"labelVolumeAmbient"); - labelVolumeAmbient.init(currentLabelStart, currentLine); - - listBoxVolumeAmbient.registerGraphicComponent(containerName,"listBoxVolumeAmbient"); - listBoxVolumeAmbient.init(currentColumnStart, currentLine, 80); - labelVolumeAmbient.setText(lang.get("AmbientVolume")); - currentLine-=lineOffset; - - labelVolumeMusic.registerGraphicComponent(containerName,"labelVolumeMusic"); - labelVolumeMusic.init(currentLabelStart, currentLine); - - listBoxVolumeMusic.registerGraphicComponent(containerName,"listBoxVolumeMusic"); - listBoxVolumeMusic.init(currentColumnStart, currentLine, 80); - labelVolumeMusic.setText(lang.get("MusicVolume")); - currentLine-=lineOffset; - - for(int i=0; i<=100; i+=5){ - listBoxVolumeFx.pushBackItem(intToStr(i)); - listBoxVolumeAmbient.pushBackItem(intToStr(i)); - listBoxVolumeMusic.pushBackItem(intToStr(i)); - } - listBoxVolumeFx.setSelectedItem(intToStr(config.getInt("SoundVolumeFx")/5*5)); - listBoxVolumeAmbient.setSelectedItem(intToStr(config.getInt("SoundVolumeAmbient")/5*5)); - listBoxVolumeMusic.setSelectedItem(intToStr(config.getInt("SoundVolumeMusic")/5*5)); - - currentLine-=lineOffset/2; + buttonAudioSection.registerGraphicComponent(containerName,"buttonAudioSection"); + buttonAudioSection.init(0, 720,tabButtonWidth,tabButtonHeight); + buttonAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonAudioSection.setText(lang.get("Audio")); // Video Section - labelVideoSection.registerGraphicComponent(containerName,"labelVideoSection"); - labelVideoSection.init(currentLabelStart+captionOffset, currentLine); - labelVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); - labelVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); - labelVideoSection.setText(lang.get("Video")); - currentLine-=lineOffset/2; - currentLine-=lineOffset; - - //resolution - labelScreenModes.registerGraphicComponent(containerName,"labelScreenModes"); - labelScreenModes.init(currentLabelStart, currentLine); - labelScreenModes.setText(lang.get("Resolution")); - - listBoxScreenModes.registerGraphicComponent(containerName,"listBoxScreenModes"); - listBoxScreenModes.init(currentColumnStart, currentLine, 170); - - string currentResString = config.getString("ScreenWidth") + "x" + - config.getString("ScreenHeight") + "-" + - intToStr(config.getInt("ColorBits")); - bool currentResolutionFound = false; - for(vector::const_iterator it= modeInfos.begin(); it!=modeInfos.end(); ++it){ - if((*it).getString() == currentResString) { - currentResolutionFound = true; - } - listBoxScreenModes.pushBackItem((*it).getString()); - } - if(currentResolutionFound == false) { - listBoxScreenModes.pushBackItem(currentResString); - } - listBoxScreenModes.setSelectedItem(currentResString); - currentLine-=lineOffset; - - - //FullscreenWindowed - labelFullscreenWindowed.registerGraphicComponent(containerName,"labelFullscreenWindowed"); - labelFullscreenWindowed.init(currentLabelStart, currentLine); - - checkBoxFullscreenWindowed.registerGraphicComponent(containerName,"checkBoxFullscreenWindowed"); - checkBoxFullscreenWindowed.init(currentColumnStart, currentLine); - labelFullscreenWindowed.setText(lang.get("Windowed")); - checkBoxFullscreenWindowed.setValue(config.getBool("Windowed")); - currentLine-=lineOffset; - - //gammaCorrection - labelGammaCorrection.registerGraphicComponent(containerName,"labelGammaCorrection"); - labelGammaCorrection.init(currentLabelStart, currentLine); - labelGammaCorrection.setText(lang.get("GammaCorrection")); - - listBoxGammaCorrection.registerGraphicComponent(containerName,"listBoxGammaCorrection"); - listBoxGammaCorrection.init(currentColumnStart, currentLine, 170); - for (float f=0.5;f<3.0f;f=f+0.1f) { - listBoxGammaCorrection.pushBackItem(floatToStr(f)); - } - float gammaValue=config.getFloat("GammaValue","1.0"); - if(gammaValue==0.0f) gammaValue=1.0f; - listBoxGammaCorrection.setSelectedItem(floatToStr(gammaValue)); - - currentLine-=lineOffset; - - //filter - labelFilter.registerGraphicComponent(containerName,"labelFilter"); - labelFilter.init(currentLabelStart, currentLine); - labelFilter.setText(lang.get("Filter")); - - listBoxFilter.registerGraphicComponent(containerName,"listBoxFilter"); - listBoxFilter.init(currentColumnStart, currentLine, 170); - listBoxFilter.pushBackItem("Bilinear"); - listBoxFilter.pushBackItem("Trilinear"); - listBoxFilter.setSelectedItem(config.getString("Filter")); - currentLine-=lineOffset; - - //selectionType - labelSelectionType.registerGraphicComponent(containerName,"labelSelectionType"); - labelSelectionType.init(currentLabelStart, currentLine); - labelSelectionType.setText(lang.get("SelectionType")); - - listBoxSelectionType.registerGraphicComponent(containerName,"listBoxSelectionType"); - listBoxSelectionType.init(currentColumnStart, currentLine, 170); - listBoxSelectionType.pushBackItem("SelectBuffer"); - listBoxSelectionType.pushBackItem("ColorPicking"); - listBoxSelectionType.pushBackItem("FrustumPicking"); - - const string selectionType=toLower(config.getString("SelectionType",Config::selectBufPicking)); - if( selectionType==Config::colorPicking) - listBoxSelectionType.setSelectedItemIndex(1); - else if ( selectionType==Config::frustumPicking ) - listBoxSelectionType.setSelectedItemIndex(2); - else - listBoxSelectionType.setSelectedItemIndex(0); - currentLine-=lineOffset; - - //shadows - labelShadows.registerGraphicComponent(containerName,"labelShadows"); - labelShadows.init(currentLabelStart, currentLine); - labelShadows.setText(lang.get("Shadows")); - - listBoxShadows.registerGraphicComponent(containerName,"listBoxShadows"); - listBoxShadows.init(currentColumnStart, currentLine, 170); - for(int i= 0; i(i)))); - } - string str= config.getString("Shadows"); - listBoxShadows.setSelectedItemIndex(clamp(Renderer::strToShadows(str), 0, Renderer::sCount-1)); - currentLine-=lineOffset; - - //shadows - labelShadowTextureSize.registerGraphicComponent(containerName,"labelShadowTextureSize"); - labelShadowTextureSize.init(currentLabelStart, currentLine); - labelShadowTextureSize.setText(lang.get("ShadowTextureSize")); - - listBoxShadowTextureSize.registerGraphicComponent(containerName,"listBoxShadowTextureSize"); - listBoxShadowTextureSize.init(currentColumnStart, currentLine, 170); - listBoxShadowTextureSize.pushBackItem("256"); - listBoxShadowTextureSize.pushBackItem("512"); - listBoxShadowTextureSize.pushBackItem("1024"); - listBoxShadowTextureSize.setSelectedItemIndex(1,false); - listBoxShadowTextureSize.setSelectedItem(intToStr(config.getInt("ShadowTextureSize","512")),false); - currentLine-=lineOffset; - - //textures 3d - labelTextures3D.registerGraphicComponent(containerName,"labelTextures3D"); - labelTextures3D.init(currentLabelStart, currentLine); - - checkBoxTextures3D.registerGraphicComponent(containerName,"checkBoxTextures3D"); - checkBoxTextures3D.init(currentColumnStart, currentLine); - labelTextures3D.setText(lang.get("Textures3D")); - checkBoxTextures3D.setValue(config.getBool("Textures3D")); - currentLine-=lineOffset; - - //lights - labelLights.registerGraphicComponent(containerName,"labelLights"); - labelLights.init(currentLabelStart, currentLine); - labelLights.setText(lang.get("MaxLights")); - - listBoxLights.registerGraphicComponent(containerName,"listBoxLights"); - listBoxLights.init(currentColumnStart, currentLine, 80); - for(int i= 1; i<=8; ++i){ - listBoxLights.pushBackItem(intToStr(i)); - } - listBoxLights.setSelectedItemIndex(clamp(config.getInt("MaxLights")-1, 0, 7)); - currentLine-=lineOffset; - - //unit particles - labelUnitParticles.registerGraphicComponent(containerName,"labelUnitParticles"); - labelUnitParticles.init(currentLabelStart,currentLine); - labelUnitParticles.setText(lang.get("ShowUnitParticles")); - - checkBoxUnitParticles.registerGraphicComponent(containerName,"checkBoxUnitParticles"); - checkBoxUnitParticles.init(currentColumnStart,currentLine); - checkBoxUnitParticles.setValue(config.getBool("UnitParticles","true")); - currentLine-=lineOffset; - - //tileset particles - labelTilesetParticles.registerGraphicComponent(containerName,"labelTilesetParticles"); - labelTilesetParticles.init(currentLabelStart,currentLine); - labelTilesetParticles.setText(lang.get("ShowTilesetParticles")); - - checkBoxTilesetParticles.registerGraphicComponent(containerName,"checkBoxTilesetParticles"); - checkBoxTilesetParticles.init(currentColumnStart,currentLine); - checkBoxTilesetParticles.setValue(config.getBool("TilesetParticles","true")); - currentLine-=lineOffset; - - //unit particles - labelMapPreview.registerGraphicComponent(containerName,"labelMapPreview"); - labelMapPreview.init(currentLabelStart,currentLine); - labelMapPreview.setText(lang.get("ShowMapPreview")); - - checkBoxMapPreview.registerGraphicComponent(containerName,"checkBoxMapPreview"); - checkBoxMapPreview.init(currentColumnStart,currentLine); - checkBoxMapPreview.setValue(config.getBool("MapPreview","true")); - currentLine-=lineOffset; - - // Texture Compression flag - labelEnableTextureCompression.registerGraphicComponent(containerName,"labelEnableTextureCompression"); - labelEnableTextureCompression.init(currentLabelStart ,currentLine); - labelEnableTextureCompression.setText(lang.get("EnableTextureCompression")); - - checkBoxEnableTextureCompression.registerGraphicComponent(containerName,"checkBoxEnableTextureCompression"); - checkBoxEnableTextureCompression.init(currentColumnStart ,currentLine ); - checkBoxEnableTextureCompression.setValue(config.getBool("EnableTextureCompression","false")); - currentLine-=lineOffset; - - labelRainEffect.registerGraphicComponent(containerName,"labelRainEffect"); - labelRainEffect.init(currentLabelStart ,currentLine); - labelRainEffect.setText(lang.get("RainEffectMenuGame")); - - checkBoxRainEffectMenu.registerGraphicComponent(containerName,"checkBoxRainEffectMenu"); - checkBoxRainEffectMenu.init(currentColumnStart ,currentLine ); - checkBoxRainEffectMenu.setValue(config.getBool("RainEffectMenu","true")); - - labelRainEffectSeparator.registerGraphicComponent(containerName,"labelRainEffect"); - labelRainEffectSeparator.init(currentColumnStart+30 ,currentLine); - labelRainEffectSeparator.setText("/"); - - checkBoxRainEffect.registerGraphicComponent(containerName,"checkBoxRainEffect"); - checkBoxRainEffect.init(currentColumnStart+42 ,currentLine ); - checkBoxRainEffect.setValue(config.getBool("RainEffect","true")); - currentLine-=lineOffset; - - labelVideos.registerGraphicComponent(containerName,"labelVideos"); - labelVideos.init(currentLabelStart ,currentLine); - labelVideos.setText(lang.get("EnableVideos")); - - checkBoxVideos.registerGraphicComponent(containerName,"checkBoxVideos"); - checkBoxVideos.init(currentColumnStart ,currentLine ); - checkBoxVideos.setValue(config.getBool("EnableVideos","true")); - - // end - - ////////////////////////////////////////////////////////////////// - ///////// RIGHT SIDE - ////////////////////////////////////////////////////////////////// - - currentLine=700; // reset line pos - currentLabelStart=rightLabelStart; // set to right side - currentColumnStart=rightColumnStart; // set to right side - - + buttonVideoSection.registerGraphicComponent(containerName,"labelVideoSection"); + buttonVideoSection.init(200, 720,tabButtonWidth,tabButtonHeight); + buttonVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonVideoSection.setText(lang.get("Video")); //currentLine-=lineOffset; - labelMiscSection.registerGraphicComponent(containerName,"labelMiscSection"); - labelMiscSection.init(currentLabelStart+captionOffset, currentLine); - labelMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); - labelMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); - labelMiscSection.setText(lang.get("Misc")); - currentLine-=lineOffset; - currentLine-=lineOffset/2; + //MiscSection + buttonMiscSection.registerGraphicComponent(containerName,"labelMiscSection"); + buttonMiscSection.init(400, 700,tabButtonWidth,tabButtonHeight+20); + buttonMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonMiscSection.setText(lang.get("Misc")); + //NetworkSettings + buttonNetworkSettings.registerGraphicComponent(containerName,"labelNetworkSettingsSection"); + buttonNetworkSettings.init(600, 720,tabButtonWidth,tabButtonHeight); + buttonNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonNetworkSettings.setText(lang.get("Network")); + + //KeyboardSetup + buttonKeyboardSetup.registerGraphicComponent(containerName,"buttonKeyboardSetup"); + buttonKeyboardSetup.init(800, 720,tabButtonWidth,tabButtonHeight); + buttonKeyboardSetup.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonKeyboardSetup.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonKeyboardSetup.setText(lang.get("Keyboardsetup")); + + currentLine=650; // reset line pos + currentLabelStart=leftLabelStart; // set to right side + currentColumnStart=leftColumnStart; // set to right side //lang labelLang.registerGraphicComponent(containerName,"labelLang"); @@ -494,194 +249,67 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu): currentLine-=lineOffset; currentLine-=lineOffset/2; - labelNetworkSettings.registerGraphicComponent(containerName,"labelNetworkSettingsSection"); - labelNetworkSettings.init(currentLabelStart+captionOffset, currentLine); - labelNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); - labelNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); - labelNetworkSettings.setText(lang.get("Network")); - currentLine-=lineOffset/2; - // external server port - currentLine-=lineOffset; - labelPublishServerExternalPort.registerGraphicComponent(containerName,"labelPublishServerExternalPort"); - labelPublishServerExternalPort.init(currentLabelStart, currentLine, 150); - labelPublishServerExternalPort.setText(lang.get("PublishServerExternalPort")); - - labelExternalPort.init(currentColumnStart,currentLine); - string extPort= config.getString("PortExternal","not set"); - if(extPort == "not set" || extPort == "0"){ - extPort=" --- "; - } - else{ - extPort="!!! "+extPort+" !!!"; - } - labelExternalPort.setText(extPort); - - currentLine-=lineOffset; - // server port - labelServerPortLabel.registerGraphicComponent(containerName,"labelServerPortLabel"); - labelServerPortLabel.init(currentLabelStart,currentLine); - labelServerPortLabel.setText(lang.get("ServerPort")); - - listBoxServerPort.registerGraphicComponent(containerName,"listBoxPublishServerExternalPort"); - listBoxServerPort.init(currentColumnStart, currentLine, 170); - - string portListString = config.getString("PortList",intToStr(GameConstants::serverPort).c_str()); - std::vector portList; - Tokenize(portListString,portList,","); - - string currentPort=config.getString("PortServer", intToStr(GameConstants::serverPort).c_str()); - int portSelectionIndex=0; - for(int idx = 0; idx < portList.size(); idx++) { - if(portList[idx] != "" && IsNumeric(portList[idx].c_str(),false)) { - listBoxServerPort.pushBackItem(portList[idx]); - if(currentPort==portList[idx]) - { - portSelectionIndex=idx; - } - } - } - listBoxServerPort.setSelectedItemIndex(portSelectionIndex); - - currentLine-=lineOffset; - labelFTPServerPortLabel.registerGraphicComponent(containerName,"labelFTPServerPortLabel"); - labelFTPServerPortLabel.init(currentLabelStart ,currentLine ); - labelFTPServerPortLabel.setText(lang.get("FTPServerPort")); - - int FTPPort = config.getInt("FTPServerPort",intToStr(ServerSocket::getFTPServerPort()).c_str()); - labelFTPServerPort.registerGraphicComponent(containerName,"labelFTPServerPort"); - labelFTPServerPort.init(currentColumnStart ,currentLine ); - labelFTPServerPort.setText(intToStr(FTPPort)); - currentLine-=lineOffset; - labelFTPServerDataPortsLabel.registerGraphicComponent(containerName,"labelFTPServerDataPortsLabel"); - labelFTPServerDataPortsLabel.init(currentLabelStart ,currentLine ); - labelFTPServerDataPortsLabel.setText(lang.get("FTPServerDataPort")); - - char szBuf[8096]=""; - snprintf(szBuf,8096,"%d - %d",FTPPort + 1, FTPPort + GameConstants::maxPlayers); - - labelFTPServerDataPorts.registerGraphicComponent(containerName,"labelFTPServerDataPorts"); - labelFTPServerDataPorts.init(currentColumnStart,currentLine ); - labelFTPServerDataPorts.setText(szBuf); - currentLine-=lineOffset; - labelEnableFTPServer.registerGraphicComponent(containerName,"labelEnableFTPServer"); - labelEnableFTPServer.init(currentLabelStart ,currentLine); - labelEnableFTPServer.setText(lang.get("EnableFTPServer")); - - checkBoxEnableFTPServer.registerGraphicComponent(containerName,"checkBoxEnableFTPServer"); - checkBoxEnableFTPServer.init(currentColumnStart ,currentLine ); - checkBoxEnableFTPServer.setValue(config.getBool("EnableFTPServer","true")); - currentLine-=lineOffset; - // FTP Config - start - labelEnableFTP.registerGraphicComponent(containerName,"labelEnableFTP"); - labelEnableFTP.init(currentLabelStart ,currentLine); - labelEnableFTP.setText(lang.get("EnableFTP")); - - checkBoxEnableFTP.registerGraphicComponent(containerName,"checkBoxEnableFTP"); - checkBoxEnableFTP.init(currentColumnStart ,currentLine ); - checkBoxEnableFTP.setValue(config.getBool("EnableFTPXfer","true")); - currentLine-=lineOffset; - - labelEnableFTPServerInternetTilesetXfer.registerGraphicComponent(containerName,"labelEnableFTPServerInternetTilesetXfer"); - labelEnableFTPServerInternetTilesetXfer.init(currentLabelStart ,currentLine ); - labelEnableFTPServerInternetTilesetXfer.setText(lang.get("EnableFTPServerInternetTilesetXfer")); - - checkBoxEnableFTPServerInternetTilesetXfer.registerGraphicComponent(containerName,"checkBoxEnableFTPServerInternetTilesetXfer"); - checkBoxEnableFTPServerInternetTilesetXfer.init(currentColumnStart ,currentLine ); - checkBoxEnableFTPServerInternetTilesetXfer.setValue(config.getBool("EnableFTPServerInternetTilesetXfer","true")); - - currentLine-=lineOffset; - - labelEnableFTPServerInternetTechtreeXfer.registerGraphicComponent(containerName,"labelEnableFTPServerInternetTechtreeXfer"); - labelEnableFTPServerInternetTechtreeXfer.init(currentLabelStart ,currentLine ); - labelEnableFTPServerInternetTechtreeXfer.setText(lang.get("EnableFTPServerInternetTechtreeXfer")); - - checkBoxEnableFTPServerInternetTechtreeXfer.registerGraphicComponent(containerName,"checkBoxEnableFTPServerInternetTechtreeXfer"); - checkBoxEnableFTPServerInternetTechtreeXfer.init(currentColumnStart ,currentLine ); - checkBoxEnableFTPServerInternetTechtreeXfer.setValue(config.getBool("EnableFTPServerInternetTechtreeXfer","true")); - - currentLine-=lineOffset; - - - // FTP config end - - // Privacy flag - labelEnablePrivacy.registerGraphicComponent(containerName,"labelEnablePrivacy"); - labelEnablePrivacy.init(currentLabelStart ,currentLine); - labelEnablePrivacy.setText(lang.get("PrivacyPlease")); - - checkBoxEnablePrivacy.registerGraphicComponent(containerName,"checkBoxEnablePrivacy"); - checkBoxEnablePrivacy.init(currentColumnStart ,currentLine ); - checkBoxEnablePrivacy.setValue(config.getBool("PrivacyPlease","false")); - //currentLine-=lineOffset; - // end // buttons buttonOk.registerGraphicComponent(containerName,"buttonOk"); buttonOk.init(buttonStartPos, buttonRowPos, 100); - buttonOk.setText(lang.get("Ok")); - buttonAbort.setText(lang.get("Abort")); + buttonOk.setText(lang.get("Save")); - buttonAbort.registerGraphicComponent(containerName,"buttonAbort"); - buttonAbort.init(buttonStartPos+110, buttonRowPos, 100); - buttonAutoConfig.setText(lang.get("AutoConfig")); - - buttonAutoConfig.registerGraphicComponent(containerName,"buttonAutoConfig"); - buttonAutoConfig.init(buttonStartPos+250, buttonRowPos, 125); - - buttonVideoInfo.setText(lang.get("VideoInfo")); - buttonVideoInfo.registerGraphicComponent(containerName,"buttonVideoInfo"); - buttonVideoInfo.init(buttonStartPos+385, buttonRowPos, 125); // was 620 - - buttonKeyboardSetup.setText(lang.get("Keyboardsetup")); - buttonKeyboardSetup.registerGraphicComponent(containerName,"buttonKeyboardSetup"); - buttonKeyboardSetup.init(buttonStartPos+520, buttonRowPos, 145); + buttonReturn.registerGraphicComponent(containerName,"buttonAbort"); + buttonReturn.init(buttonStartPos+110, buttonRowPos, 100); + buttonReturn.setText(lang.get("Return")); // Transifex related UI + currentLine-=lineOffset*4; labelCustomTranslation.registerGraphicComponent(containerName,"labelCustomTranslation"); - labelCustomTranslation.init(currentColumnStart ,700); + labelCustomTranslation.init(currentLabelStart ,currentLine); labelCustomTranslation.setText(lang.get("CustomTranslation")); checkBoxCustomTranslation.registerGraphicComponent(containerName,"checkBoxCustomTranslation"); - checkBoxCustomTranslation.init(currentColumnStart + 200 ,700 ); + checkBoxCustomTranslation.init(currentColumnStart ,currentLine ); checkBoxCustomTranslation.setValue(false); - - buttonGetNewLanguageFiles.registerGraphicComponent(containerName,"buttonGetNewLanguageFiles"); - buttonGetNewLanguageFiles.init(buttonStartPos, buttonRowPos - 60, 200); - buttonGetNewLanguageFiles.setText(lang.get("TransifexGetLanguageFiles")); - - buttonDeleteNewLanguageFiles.registerGraphicComponent(containerName,"buttonDeleteNewLanguageFiles"); - buttonDeleteNewLanguageFiles.init(buttonStartPos + 230, buttonRowPos - 60, 200); - buttonDeleteNewLanguageFiles.setText(lang.get("TransifexDeleteLanguageFiles")); + currentLine-=lineOffset; labelTransifexUserLabel.registerGraphicComponent(containerName,"labelTransifexUserLabel"); - labelTransifexUserLabel.init(buttonStartPos ,buttonRowPos - 20); + labelTransifexUserLabel.init(currentLabelStart + 20,currentLine); labelTransifexUserLabel.setText(lang.get("TransifexUserName")); + labelTransifexPwdLabel.registerGraphicComponent(containerName,"labelTransifexPwdLabel"); + labelTransifexPwdLabel.init(currentLabelStart + 220 ,currentLine); + labelTransifexPwdLabel.setText(lang.get("TransifexPwd")); + + labelTransifexI18NLabel.registerGraphicComponent(containerName,"labelTransifexI18NLabel"); + labelTransifexI18NLabel.init(currentLabelStart + 380 ,currentLine); + labelTransifexI18NLabel.setText(lang.get("TransifexI18N")); + + currentLine-=lineOffset; + labelTransifexUser.registerGraphicComponent(containerName,"labelTransifexUser"); - labelTransifexUser.init(buttonStartPos ,buttonRowPos - 40); + labelTransifexUser.init(currentLabelStart + 20,currentLine); labelTransifexUser.setMaxEditWidth(60); labelTransifexUser.setMaxEditRenderWidth(120); labelTransifexUser.setText(config.getString("TranslationGetURLUser","")); - labelTransifexPwdLabel.registerGraphicComponent(containerName,"labelTransifexPwdLabel"); - labelTransifexPwdLabel.init(buttonStartPos + 200 ,buttonRowPos - 20); - labelTransifexPwdLabel.setText(lang.get("TransifexPwd")); - labelTransifexPwd.registerGraphicComponent(containerName,"labelTransifexPwd"); - labelTransifexPwd.init(buttonStartPos + 200 ,buttonRowPos - 40); + labelTransifexPwd.init(currentLabelStart + 220 ,currentLine); labelTransifexPwd.setIsPassword(true); labelTransifexPwd.setMaxEditWidth(60); labelTransifexPwd.setMaxEditRenderWidth(120); labelTransifexPwd.setText(config.getString("TranslationGetURLPassword","")); - labelTransifexI18NLabel.registerGraphicComponent(containerName,"labelTransifexI18NLabel"); - labelTransifexI18NLabel.init(buttonStartPos + 360 ,buttonRowPos - 20); - labelTransifexI18NLabel.setText(lang.get("TransifexI18N")); - labelTransifexI18N.registerGraphicComponent(containerName,"labelTransifexI18N"); - labelTransifexI18N.init(buttonStartPos + 360 ,buttonRowPos - 40); + labelTransifexI18N.init(currentLabelStart + 380 ,currentLine); labelTransifexI18N.setMaxEditWidth(3); labelTransifexI18N.setText(config.getString("TranslationGetURLLanguage","en")); + currentLine-=lineOffset; + + buttonGetNewLanguageFiles.registerGraphicComponent(containerName,"buttonGetNewLanguageFiles"); + buttonGetNewLanguageFiles.init(currentLabelStart+20, currentLine, 200); + buttonGetNewLanguageFiles.setText(lang.get("TransifexGetLanguageFiles")); + + buttonDeleteNewLanguageFiles.registerGraphicComponent(containerName,"buttonDeleteNewLanguageFiles"); + buttonDeleteNewLanguageFiles.init(currentLabelStart + 250, currentLine, 200); + buttonDeleteNewLanguageFiles.setText(lang.get("TransifexDeleteLanguageFiles")); setupTransifexUI(); @@ -697,71 +325,29 @@ void MenuStateOptions::reloadUI() { Lang &lang= Lang::getInstance(); console.resetFonts(); + GraphicComponent::reloadFontsForRegisterGraphicComponents(containerName); mainMessageBox.init(lang.get("Ok")); luaMessageBox.init(lang.get("Yes"),lang.get("No")); - labelAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); - labelAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); - labelAudioSection.setText(lang.get("Audio")); + buttonAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonAudioSection.setText(lang.get("Audio")); - labelSoundFactory.setText(lang.get("SoundAndMusic")); + buttonVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonVideoSection.setText(lang.get("Video")); - std::vector listboxData; - listboxData.push_back("None"); - listboxData.push_back("OpenAL"); -// deprecated as of 3.6.1 -//#ifdef WIN32 -// listboxData.push_back("DirectSound8"); -//#endif + buttonMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonMiscSection.setText(lang.get("Misc")); - listBoxSoundFactory.setItems(listboxData); + buttonNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonNetworkSettings.setText(lang.get("Network")); - labelVolumeFx.setText(lang.get("FxVolume")); - - labelVolumeAmbient.setText(lang.get("AmbientVolume")); - labelVolumeMusic.setText(lang.get("MusicVolume")); - - labelVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); - labelVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); - labelVideoSection.setText(lang.get("Video")); - - labelScreenModes.setText(lang.get("Resolution")); - - labelFullscreenWindowed.setText(lang.get("Windowed")); - labelFilter.setText(lang.get("Filter")); - - listboxData.clear(); - listboxData.push_back("Bilinear"); - listboxData.push_back("Trilinear"); - listBoxFilter.setItems(listboxData); - - listboxData.clear(); - for (float f=0.0;f<2.1f;f=f+0.1f) { - listboxData.push_back(floatToStr(f)); - } - listBoxGammaCorrection.setItems(listboxData); - - - labelShadows.setText(lang.get("Shadows")); - labelShadowTextureSize.setText(lang.get("ShadowTextureSize")); - - listboxData.clear(); - for(int i= 0; i(i)))); - } - listBoxShadows.setItems(listboxData); - - labelTextures3D.setText(lang.get("Textures3D")); - - labelLights.setText(lang.get("MaxLights")); - - labelUnitParticles.setText(lang.get("ShowUnitParticles")); - - labelTilesetParticles.setText(lang.get("ShowTilesetParticles")); - - labelMapPreview.setText(lang.get("ShowMapPreview")); - - labelEnableTextureCompression.setText(lang.get("EnableTextureCompression")); + buttonKeyboardSetup.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonKeyboardSetup.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonKeyboardSetup.setText(lang.get("Keyboardsetup")); labelVisibleHud.setText(lang.get("VisibleHUD")); labelChatStaysActive.setText(lang.get("ChatStaysActive")); @@ -769,14 +355,6 @@ void MenuStateOptions::reloadUI() { labelLuaDisableSecuritySandbox.setText(lang.get("LuaDisableSecuritySandbox")); - labelRainEffect.setText(lang.get("RainEffect")); - - labelVideos.setText(lang.get("EnableVideos")); - - labelMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); - labelMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); - labelMiscSection.setText(lang.get("Misc")); - labelLang.setText(lang.get("Language")); labelPlayerNameLabel.setText(lang.get("Playername")); @@ -792,36 +370,9 @@ void MenuStateOptions::reloadUI() { labelMouseMoveScrollsWorld.setText(lang.get("MouseScrollsWorld")); - labelNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); - labelNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); - labelNetworkSettings.setText(lang.get("Network")); - labelServerPortLabel.setText(lang.get("ServerPort")); - - labelPublishServerExternalPort.setText(lang.get("PublishServerExternalPort")); - - labelEnableFTP.setText(lang.get("EnableFTP")); - - labelEnableFTPServer.setText(lang.get("EnableFTPServer")); - - labelFTPServerPortLabel.setText(lang.get("FTPServerPort")); - - labelFTPServerDataPortsLabel.setText(lang.get("FTPServerDataPort")); - - labelEnableFTPServerInternetTilesetXfer.setText(lang.get("EnableFTPServerInternetTilesetXfer")); - - labelEnableFTPServerInternetTechtreeXfer.setText(lang.get("EnableFTPServerInternetTechtreeXfer")); - - labelEnablePrivacy.setText(lang.get("PrivacyPlease")); - - buttonOk.setText(lang.get("Ok")); - buttonAbort.setText(lang.get("Abort")); - - buttonAutoConfig.setText(lang.get("AutoConfig")); - - buttonVideoInfo.setText(lang.get("VideoInfo")); - - buttonKeyboardSetup.setText(lang.get("Keyboardsetup")); + buttonOk.setText(lang.get("Save")); + buttonReturn.setText(lang.get("Return")); labelCustomTranslation.setText(lang.get("CustomTranslation")); buttonGetNewLanguageFiles.setText(lang.get("TransifexGetLanguageFiles")); @@ -829,10 +380,6 @@ void MenuStateOptions::reloadUI() { labelTransifexUserLabel.setText(lang.get("TransifexUserName")); labelTransifexPwdLabel.setText(lang.get("TransifexPwd")); labelTransifexI18NLabel.setText(lang.get("TransifexI18N")); - - labelSelectionType.setText(lang.get("SelectionType")); - - GraphicComponent::reloadFontsForRegisterGraphicComponents(containerName); } void MenuStateOptions::setupTransifexUI() { @@ -910,31 +457,6 @@ void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){ Lang &lang= Lang::getInstance(); mainMessageBox.init(lang.get("Ok")); - - //!!! - // Revert resolution or fullscreen - checkBoxFullscreenWindowed.setValue(config.getBool("Windowed")); - string currentResString = config.getString("ScreenWidth") + "x" + - config.getString("ScreenHeight") + "-" + - intToStr(config.getInt("ColorBits")); - listBoxScreenModes.setSelectedItem(currentResString); - - - changeVideoModeFullScreen(!config.getBool("Windowed")); - WindowGl *window = this->program->getWindow(); - window->ChangeVideoMode(true, - config.getInt("ScreenWidth"), - config.getInt("ScreenHeight"), - !config.getBool("Windowed"), - config.getInt("ColorBits"), - config.getInt("DepthBits"), - config.getInt("StencilBits"), - config.getBool("HardwareAcceleration","false"), - config.getBool("FullScreenAntiAliasing","false"), - config.getFloat("GammaValue","0.0")); - - Metrics::reload(); - this->mainMenu->init(); } } } @@ -964,63 +486,6 @@ void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){ else if(buttonOk.mouseClick(x, y)){ soundRenderer.playFx(coreData.getClickSoundA()); - bool selectedFullscreenWindowed = checkBoxFullscreenWindowed.getValue(); - string currentResolution=config.getString("ScreenWidth")+"x"+config.getString("ScreenHeight")+"-"+intToStr(config.getInt("ColorBits")); - string selectedResolution=listBoxScreenModes.getSelectedItem(); - if(currentResolution != selectedResolution){ -// if(currentResolution != selectedResolution || -// currentFullscreenWindowed != selectedFullscreenWindowed) { -// -// changeVideoModeFullScreen(!config.getBool("Windowed")); -// WindowGl *window = this->program->getWindow(); -// window->ChangeVideoMode(true, -// config.getInt("ScreenWidth"), -// config.getInt("ScreenHeight"), -// !config.getBool("Windowed"), -// config.getInt("ColorBits"), -// config.getInt("DepthBits"), -// config.getInt("StencilBits"), -// config.getBool("HardwareAcceleration","false"), -// config.getBool("FullScreenAntiAliasing","false"), -// config.getFloat("GammaValue","0.0")); -// -// Metrics::reload(); -// this->mainMenu->init(); -// } - - changeVideoModeFullScreen(!selectedFullscreenWindowed); - const ModeInfo *selectedMode = NULL; - for(vector::const_iterator it= modeInfos.begin(); it!=modeInfos.end(); ++it) { - if((*it).getString() == selectedResolution) { - //config.setInt("ScreenWidth",(*it).width); - //config.setInt("ScreenHeight",(*it).height); - //config.setInt("ColorBits",(*it).depth); - selectedMode = &(*it); - } - } - - WindowGl *window = this->program->getWindow(); - window->ChangeVideoMode(true, - selectedMode->width, - selectedMode->height, - !selectedFullscreenWindowed, - selectedMode->depth, - config.getInt("DepthBits"), - config.getInt("StencilBits"), - config.getBool("HardwareAcceleration","false"), - config.getBool("FullScreenAntiAliasing","false"), - strToFloat(listBoxGammaCorrection.getSelectedItem())); - - Metrics::reload(selectedMode->width,selectedMode->height); - this->mainMenu->init(); - - mainMessageBoxState=1; - Lang &lang= Lang::getInstance(); - mainMessageBox.init(lang.get("Ok"),lang.get("Cancel")); - //showMessageBox(lang.get("RestartNeeded"), lang.get("ResolutionChanged"), false); - showMessageBox(lang.get("ResolutionChanged"), lang.get("Notice"), false); - return; - } string currentFontSizeAdjustment=config.getString("FontSizeAdjustment"); string selectedFontSizeAdjustment=listFontSizeAdjustment.getSelectedItem(); if(currentFontSizeAdjustment != selectedFontSizeAdjustment){ @@ -1030,88 +495,46 @@ void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){ return; } - bool currentFullscreenWindowed=config.getBool("Windowed"); - //bool selectedFullscreenWindowed = checkBoxFullscreenWindowed.getValue(); - if(currentFullscreenWindowed != selectedFullscreenWindowed) { - //mainMessageBoxState=1; - //Lang &lang= Lang::getInstance(); - //showMessageBox(lang.get("RestartNeeded"), lang.get("DisplaySettingsChanged"), false); - //return; - - changeVideoModeFullScreen(!selectedFullscreenWindowed); - const ModeInfo *selectedMode = NULL; - for(vector::const_iterator it= modeInfos.begin(); it!=modeInfos.end(); ++it) { - if((*it).getString() == selectedResolution) { - //config.setInt("ScreenWidth",(*it).width); - //config.setInt("ScreenHeight",(*it).height); - //config.setInt("ColorBits",(*it).depth); - selectedMode = &(*it); - } - } - - WindowGl *window = this->program->getWindow(); - window->ChangeVideoMode(true, - selectedMode->width, - selectedMode->height, - !selectedFullscreenWindowed, - selectedMode->depth, - config.getInt("DepthBits"), - config.getInt("StencilBits"), - config.getBool("HardwareAcceleration","false"), - config.getBool("FullScreenAntiAliasing","false"), - strToFloat(listBoxGammaCorrection.getSelectedItem())); - - Metrics::reload(selectedMode->width,selectedMode->height); - this->mainMenu->init(); - - mainMessageBoxState=1; - Lang &lang= Lang::getInstance(); - mainMessageBox.init(lang.get("Ok"),lang.get("Cancel")); - //showMessageBox(lang.get("RestartNeeded"), lang.get("ResolutionChanged"), false); - showMessageBox(lang.get("DisplaySettingsChanged"), lang.get("Notice"), false); - return; - } - saveConfig(); - mainMenu->setState(new MenuStateRoot(program, mainMenu)); + //mainMenu->setState(new MenuStateRoot(program, mainMenu)); + reloadUI(); return; } - else if(buttonAbort.mouseClick(x, y)){ + else if(buttonReturn.mouseClick(x, y)){ soundRenderer.playFx(coreData.getClickSoundA()); - - // reset the gamma to former value - string currentGammaCorrection=config.getString("GammaValue","1.0"); - string selectedGammaCorrection=listFontSizeAdjustment.getSelectedItem(); - if(currentGammaCorrection!=selectedGammaCorrection){ - float gammaValue=strToFloat(currentGammaCorrection); - if(gammaValue==0.0f) gammaValue=1.0f; - if(gammaValue!=0.0){ - program->getWindow()->setGamma(gammaValue); - SDL_SetGamma(gammaValue, gammaValue, gammaValue); - } + if(this->parentUI != NULL) { + *this->parentUI = NULL; + delete *this->parentUI; } - mainMenu->setState(new MenuStateRoot(program, mainMenu)); return; } - else if(buttonAutoConfig.mouseClick(x, y)){ - soundRenderer.playFx(coreData.getClickSoundA()); - Renderer::getInstance().autoConfig(); - //saveConfig(); - mainMenu->setState(new MenuStateOptions(program, mainMenu)); - return; - } - else if(buttonVideoInfo.mouseClick(x, y)){ - soundRenderer.playFx(coreData.getClickSoundA()); - mainMenu->setState(new MenuStateGraphicInfo(program, mainMenu)); - return; - } else if(buttonKeyboardSetup.mouseClick(x, y)){ soundRenderer.playFx(coreData.getClickSoundA()); - mainMenu->setState(new MenuStateKeysetup(program, mainMenu)); // open keyboard shortcuts setup screen + mainMenu->setState(new MenuStateKeysetup(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen //showMessageBox("Not implemented yet", "Keyboard setup", false); return; } + else if(buttonAudioSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsSound(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonNetworkSettings.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsNetwork(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonMiscSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + //mainMenu->setState(new MenuStateOptions(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonVideoSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } else if(checkBoxCustomTranslation.mouseClick(x, y)) { setupTransifexUI(); } @@ -1472,50 +895,7 @@ void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){ else { listBoxLang.mouseClick(x, y); - listBoxSelectionType.mouseClick(x, y); - listBoxShadows.mouseClick(x, y); - listBoxShadowTextureSize.mouseClick(x, y); - listBoxFilter.mouseClick(x, y); - if(listBoxGammaCorrection.mouseClick(x, y)){ - float gammaValue=strToFloat(listBoxGammaCorrection.getSelectedItem()); - if(gammaValue!=0.0){ - program->getWindow()->setGamma(gammaValue); - SDL_SetGamma(gammaValue, gammaValue, gammaValue); - } - } - checkBoxTextures3D.mouseClick(x, y); - checkBoxUnitParticles.mouseClick(x, y); - checkBoxTilesetParticles.mouseClick(x, y); - checkBoxMapPreview.mouseClick(x, y); - listBoxLights.mouseClick(x, y); - listBoxSoundFactory.mouseClick(x, y); - listBoxVolumeFx.mouseClick(x, y); - listBoxVolumeAmbient.mouseClick(x, y); - listBoxVolumeMusic.mouseClick(x, y); - listBoxScreenModes.mouseClick(x, y); listFontSizeAdjustment.mouseClick(x, y); - checkBoxFullscreenWindowed.mouseClick(x, y); - if(listBoxServerPort.mouseClick(x, y)){ - int selectedPort=strToInt(listBoxServerPort.getSelectedItem()); - if(selectedPort<10000){ - selectedPort=GameConstants::serverPort; - } - // use the following ports for ftp - char szBuf[8096]=""; - snprintf(szBuf,8096,"%d - %d",selectedPort + 2, selectedPort + 1 + GameConstants::maxPlayers); - labelFTPServerPort.setText(intToStr(selectedPort+1)); - labelFTPServerDataPorts.setText(szBuf); - } - - checkBoxEnableFTP.mouseClick(x, y); - checkBoxEnableFTPServer.mouseClick(x, y); - - checkBoxEnableFTPServerInternetTilesetXfer.mouseClick(x, y); - checkBoxEnableFTPServerInternetTechtreeXfer.mouseClick(x, y); - - checkBoxEnablePrivacy.mouseClick(x, y); - - checkBoxEnableTextureCompression.mouseClick(x, y); listBoxScreenShotType.mouseClick(x, y); @@ -1524,13 +904,7 @@ void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){ checkBoxVisibleHud.mouseClick(x, y); checkBoxChatStaysActive.mouseClick(x, y); checkBoxTimeDisplay.mouseClick(x, y); - checkBoxLuaDisableSecuritySandbox.mouseClick(x, y); - - checkBoxRainEffect.mouseClick(x,y); - checkBoxRainEffectMenu.mouseClick(x,y); - - checkBoxVideos.mouseClick(x,y); } } @@ -1543,51 +917,24 @@ void MenuStateOptions::mouseMove(int x, int y, const MouseState *ms){ } buttonOk.mouseMove(x, y); - buttonAbort.mouseMove(x, y); - buttonAutoConfig.mouseMove(x, y); - buttonVideoInfo.mouseMove(x, y); + buttonReturn.mouseMove(x, y); buttonKeyboardSetup.mouseMove(x, y); + buttonAudioSection.mouseMove(x, y); + buttonNetworkSettings.mouseMove(x, y); + buttonMiscSection.mouseMove(x, y); + buttonVideoSection.mouseMove(x, y); buttonGetNewLanguageFiles.mouseMove(x, y); buttonDeleteNewLanguageFiles.mouseMove(x, y); listBoxLang.mouseMove(x, y); - listBoxSoundFactory.mouseMove(x, y); - listBoxVolumeFx.mouseMove(x, y); - listBoxVolumeAmbient.mouseMove(x, y); - listBoxVolumeMusic.mouseMove(x, y); listBoxLang.mouseMove(x, y); - listBoxFilter.mouseMove(x, y); - listBoxGammaCorrection.mouseMove(x, y); - listBoxSelectionType.mouseMove(x, y); - listBoxShadows.mouseMove(x, y); - checkBoxTextures3D.mouseMove(x, y); - checkBoxUnitParticles.mouseMove(x, y); - checkBoxTilesetParticles.mouseMove(x, y); - checkBoxMapPreview.mouseMove(x, y); - listBoxLights.mouseMove(x, y); - listBoxScreenModes.mouseMove(x, y); - checkBoxFullscreenWindowed.mouseMove(x, y); listFontSizeAdjustment.mouseMove(x, y); - listBoxServerPort.mouseMove(x, y); - checkBoxEnableFTP.mouseMove(x, y); - checkBoxEnableFTPServer.mouseMove(x, y); - checkBoxEnableFTPServerInternetTilesetXfer.mouseMove(x, y); - checkBoxEnableFTPServerInternetTechtreeXfer.mouseMove(x, y); - checkBoxEnablePrivacy.mouseMove(x, y); - checkBoxEnableTextureCompression.mouseMove(x, y); listBoxScreenShotType.mouseMove(x, y); checkBoxDisableScreenshotConsoleText.mouseMove(x, y); checkBoxMouseMoveScrollsWorld.mouseMove(x, y); checkBoxVisibleHud.mouseMove(x, y); checkBoxChatStaysActive.mouseMove(x, y); checkBoxTimeDisplay.mouseMove(x, y); - checkBoxLuaDisableSecuritySandbox.mouseMove(x, y); - - checkBoxRainEffect.mouseMove(x, y); - checkBoxRainEffectMenu.mouseMove(x, y); - - checkBoxVideos.mouseMove(x, y); - checkBoxCustomTranslation.mouseMove(x, y); } @@ -1633,10 +980,12 @@ void MenuStateOptions::render(){ else { renderer.renderButton(&buttonOk); - renderer.renderButton(&buttonAbort); - renderer.renderButton(&buttonAutoConfig); - renderer.renderButton(&buttonVideoInfo); + renderer.renderButton(&buttonReturn); renderer.renderButton(&buttonKeyboardSetup); + renderer.renderButton(&buttonVideoSection); + renderer.renderButton(&buttonAudioSection); + renderer.renderButton(&buttonMiscSection); + renderer.renderButton(&buttonNetworkSettings); renderer.renderLabel(&labelCustomTranslation); renderer.renderCheckBox(&checkBoxCustomTranslation); @@ -1651,70 +1000,11 @@ void MenuStateOptions::render(){ if(labelTransifexI18N.getEnabled()) renderer.renderLabel(&labelTransifexI18N); renderer.renderListBox(&listBoxLang); - renderer.renderListBox(&listBoxShadows); - renderer.renderCheckBox(&checkBoxTextures3D); - renderer.renderCheckBox(&checkBoxUnitParticles); - renderer.renderCheckBox(&checkBoxTilesetParticles); - renderer.renderCheckBox(&checkBoxMapPreview); - renderer.renderListBox(&listBoxLights); - renderer.renderListBox(&listBoxFilter); - renderer.renderListBox(&listBoxGammaCorrection); - renderer.renderListBox(&listBoxSoundFactory); - renderer.renderListBox(&listBoxVolumeFx); - renderer.renderListBox(&listBoxVolumeAmbient); - renderer.renderListBox(&listBoxVolumeMusic); renderer.renderLabel(&labelLang); renderer.renderLabel(&labelPlayerNameLabel); renderer.renderLabel(&labelPlayerName); - renderer.renderLabel(&labelShadows); - renderer.renderLabel(&labelTextures3D); - renderer.renderLabel(&labelUnitParticles); - renderer.renderLabel(&labelTilesetParticles); - renderer.renderLabel(&labelMapPreview); - renderer.renderLabel(&labelLights); - renderer.renderLabel(&labelFilter); - renderer.renderLabel(&labelGammaCorrection); - renderer.renderLabel(&labelSoundFactory); - renderer.renderLabel(&labelVolumeFx); - renderer.renderLabel(&labelVolumeAmbient); - renderer.renderLabel(&labelVolumeMusic); - renderer.renderLabel(&labelVideoSection); - renderer.renderLabel(&labelAudioSection); - renderer.renderLabel(&labelMiscSection); - renderer.renderLabel(&labelScreenModes); - renderer.renderListBox(&listBoxScreenModes); - renderer.renderLabel(&labelServerPortLabel); - renderer.renderLabel(&labelExternalPort); renderer.renderListBox(&listFontSizeAdjustment); renderer.renderLabel(&labelFontSizeAdjustment); - renderer.renderLabel(&labelFullscreenWindowed); - renderer.renderCheckBox(&checkBoxFullscreenWindowed); - renderer.renderLabel(&labelPublishServerExternalPort); - renderer.renderListBox(&listBoxServerPort); - renderer.renderLabel(&labelNetworkSettings); - - - renderer.renderLabel(&labelEnableFTP); - renderer.renderCheckBox(&checkBoxEnableFTP); - - renderer.renderLabel(&labelEnableFTPServer); - renderer.renderCheckBox(&checkBoxEnableFTPServer); - - renderer.renderLabel(&labelFTPServerPortLabel); - renderer.renderLabel(&labelFTPServerPort); - renderer.renderLabel(&labelFTPServerDataPortsLabel); - renderer.renderLabel(&labelFTPServerDataPorts); - - renderer.renderLabel(&labelEnableFTPServerInternetTilesetXfer); - renderer.renderCheckBox(&checkBoxEnableFTPServerInternetTilesetXfer); - renderer.renderLabel(&labelEnableFTPServerInternetTechtreeXfer); - renderer.renderCheckBox(&checkBoxEnableFTPServerInternetTechtreeXfer); - - renderer.renderLabel(&labelEnablePrivacy); - renderer.renderCheckBox(&checkBoxEnablePrivacy); - - renderer.renderLabel(&labelEnableTextureCompression); - renderer.renderCheckBox(&checkBoxEnableTextureCompression); renderer.renderLabel(&labelScreenShotType); renderer.renderListBox(&listBoxScreenShotType); @@ -1736,19 +1026,6 @@ void MenuStateOptions::render(){ renderer.renderCheckBox(&checkBoxChatStaysActive); renderer.renderCheckBox(&checkBoxTimeDisplay); - renderer.renderLabel(&labelRainEffect); - renderer.renderCheckBox(&checkBoxRainEffect); - renderer.renderLabel(&labelRainEffectSeparator); - renderer.renderCheckBox(&checkBoxRainEffectMenu); - - renderer.renderLabel(&labelShadowTextureSize); - renderer.renderListBox(&listBoxShadowTextureSize); - - renderer.renderLabel(&labelSelectionType); - renderer.renderListBox(&listBoxSelectionType); - - renderer.renderLabel(&labelVideos); - renderer.renderCheckBox(&checkBoxVideos); } renderer.renderConsole(&console,false,true); @@ -1771,49 +1048,7 @@ void MenuStateOptions::saveConfig(){ config.setString("Lang", iterMap->first); lang.loadStrings(config.getString("Lang")); - int selectionTypeindex= listBoxSelectionType.getSelectedItemIndex(); - if(selectionTypeindex==0){ - config.setString("SelectionType",Config::selectBufPicking); - } - else if (selectionTypeindex==1){ - config.setString("SelectionType",Config::colorPicking); - } - else if (selectionTypeindex==2){ - config.setString("SelectionType",Config::frustumPicking); - } - - int index= listBoxShadows.getSelectedItemIndex(); - config.setString("Shadows", Renderer::shadowsToStr(static_cast(index))); - - string texSizeString= listBoxShadowTextureSize.getSelectedItem(); - config.setInt("ShadowTextureSize",strToInt(texSizeString) ); - - config.setBool("Windowed", checkBoxFullscreenWindowed.getValue()); - config.setString("Filter", listBoxFilter.getSelectedItem()); - config.setFloat("GammaValue", strToFloat(listBoxGammaCorrection.getSelectedItem())); - config.setBool("Textures3D", checkBoxTextures3D.getValue()); - config.setBool("UnitParticles", (checkBoxUnitParticles.getValue())); - config.setBool("TilesetParticles", (checkBoxTilesetParticles.getValue())); - config.setBool("MapPreview", checkBoxMapPreview.getValue()); - config.setInt("MaxLights", listBoxLights.getSelectedItemIndex()+1); - config.setString("FactorySound", listBoxSoundFactory.getSelectedItem()); - config.setString("SoundVolumeFx", listBoxVolumeFx.getSelectedItem()); - config.setString("SoundVolumeAmbient", listBoxVolumeAmbient.getSelectedItem()); config.setString("FontSizeAdjustment", listFontSizeAdjustment.getSelectedItem()); - CoreData::getInstance().getMenuMusic()->setVolume(strToInt(listBoxVolumeMusic.getSelectedItem())/100.f); - config.setString("SoundVolumeMusic", listBoxVolumeMusic.getSelectedItem()); - config.setString("PortServer", listBoxServerPort.getSelectedItem()); - config.setInt("FTPServerPort",config.getInt("PortServer")+1); - config.setBool("EnableFTPXfer", checkBoxEnableFTP.getValue()); - config.setBool("EnableFTPServer", checkBoxEnableFTPServer.getValue()); - - config.setBool("EnableFTPServerInternetTilesetXfer", checkBoxEnableFTPServerInternetTilesetXfer.getValue()); - config.setBool("EnableFTPServerInternetTechtreeXfer", checkBoxEnableFTPServerInternetTechtreeXfer.getValue()); - - config.setBool("PrivacyPlease", checkBoxEnablePrivacy.getValue()); - - config.setBool("EnableTextureCompression", checkBoxEnableTextureCompression.getValue()); - config.setString("ScreenShotFileType", listBoxScreenShotType.getSelectedItem()); config.setBool("DisableScreenshotConsoleText", !checkBoxDisableScreenshotConsoleText.getValue()); @@ -1823,44 +1058,13 @@ void MenuStateOptions::saveConfig(){ config.setBool("TimeDisplay", checkBoxTimeDisplay.getValue()); config.setBool("DisableLuaSandbox", checkBoxLuaDisableSecuritySandbox.getValue()); - - config.setBool("RainEffect", checkBoxRainEffect.getValue()); - config.setBool("RainEffectMenu", checkBoxRainEffectMenu.getValue()); - - config.setBool("EnableVideos", checkBoxVideos.getValue()); - - string currentResolution=config.getString("ScreenWidth")+"x"+config.getString("ScreenHeight"); - string selectedResolution=listBoxScreenModes.getSelectedItem(); - if(currentResolution!=selectedResolution){ - for(vector::const_iterator it= modeInfos.begin(); it!=modeInfos.end(); ++it){ - if((*it).getString()==selectedResolution) - { - config.setInt("ScreenWidth",(*it).width); - config.setInt("ScreenHeight",(*it).height); - config.setInt("ColorBits",(*it).depth); - } - } - } - config.save(); if(config.getBool("DisableLuaSandbox","false") == true) { LuaScript::setDisableSandbox(true); } - - SoundRenderer &soundRenderer= SoundRenderer::getInstance(); - soundRenderer.stopAllSounds(); - program->stopSoundSystem(); - soundRenderer.init(program->getWindow()); - soundRenderer.loadConfig(); - soundRenderer.setMusicVolume(CoreData::getInstance().getMenuMusic()); - program->startSoundSystem(); - - if(CoreData::getInstance().hasMainMenuVideoFilename() == false) { - soundRenderer.playMusic(CoreData::getInstance().getMenuMusic()); - } - Renderer::getInstance().loadConfig(); + console.addLine(lang.get("SettingsSaved")); } void MenuStateOptions::setActiveInputLable(GraphicLabel *newLable) { diff --git a/source/glest_game/menu/menu_state_options.h b/source/glest_game/menu/menu_state_options.h index af2fd582..4cdfbe44 100644 --- a/source/glest_game/menu/menu_state_options.h +++ b/source/glest_game/menu/menu_state_options.h @@ -25,89 +25,30 @@ class MenuStateOptions: public MenuState{ private: GraphicButton buttonOk; - GraphicButton buttonAbort; - GraphicButton buttonAutoConfig; - GraphicButton buttonVideoInfo; - GraphicButton buttonKeyboardSetup; // configure the keyboard + GraphicButton buttonReturn; GraphicLabel labelLang; - GraphicLabel labelShadows; - GraphicLabel labelFilter; - GraphicLabel labelTextures3D; - GraphicLabel labelLights; - GraphicLabel labelUnitParticles; - GraphicLabel labelTilesetParticles; - GraphicLabel labelSoundFactory; - GraphicLabel labelVolumeFx; - GraphicLabel labelVolumeAmbient; - GraphicLabel labelVolumeMusic; GraphicListBox listBoxLang; - GraphicListBox listBoxShadows; - GraphicListBox listBoxFilter; - GraphicCheckBox checkBoxTextures3D; - GraphicListBox listBoxLights; - GraphicCheckBox checkBoxUnitParticles; - GraphicCheckBox checkBoxTilesetParticles; - GraphicListBox listBoxSoundFactory; - GraphicListBox listBoxVolumeFx; - GraphicListBox listBoxVolumeAmbient; - GraphicListBox listBoxVolumeMusic; GraphicLabel labelPlayerName; GraphicLabel labelPlayerNameLabel; GraphicLabel *activeInputLabel; - GraphicLabel labelExternalPort; - GraphicLabel labelServerPortLabel; - GraphicLabel labelScreenModes; - GraphicListBox listBoxScreenModes; - vector modeInfos; - - GraphicLabel labelFullscreenWindowed; - GraphicCheckBox checkBoxFullscreenWindowed; - - GraphicLabel labelVideoSection; - GraphicLabel labelAudioSection; - GraphicLabel labelMiscSection; - GraphicLabel labelNetworkSettings; + GraphicButton buttonKeyboardSetup; // configure the keyboard + GraphicButton buttonVideoSection; + GraphicButton buttonAudioSection; + GraphicButton buttonMiscSection; + GraphicButton buttonNetworkSettings; GraphicLabel labelFontSizeAdjustment; GraphicListBox listFontSizeAdjustment; - GraphicLabel labelMapPreview; - GraphicCheckBox checkBoxMapPreview; GraphicMessageBox mainMessageBox; int mainMessageBoxState; - GraphicLabel labelPublishServerExternalPort; - GraphicListBox listBoxServerPort; - GraphicLabel labelEnableFTP; - GraphicCheckBox checkBoxEnableFTP; - - GraphicLabel labelEnableFTPServer; - GraphicCheckBox checkBoxEnableFTPServer; - - GraphicLabel labelFTPServerPortLabel; - GraphicLabel labelFTPServerPort; - - GraphicLabel labelFTPServerDataPortsLabel; - GraphicLabel labelFTPServerDataPorts; - - GraphicLabel labelEnableFTPServerInternetTilesetXfer; - GraphicCheckBox checkBoxEnableFTPServerInternetTilesetXfer; - - GraphicLabel labelEnableFTPServerInternetTechtreeXfer; - GraphicCheckBox checkBoxEnableFTPServerInternetTechtreeXfer; - - GraphicLabel labelEnablePrivacy; - GraphicCheckBox checkBoxEnablePrivacy; - - GraphicLabel labelEnableTextureCompression; - GraphicCheckBox checkBoxEnableTextureCompression; - GraphicLabel labelScreenShotType; GraphicListBox listBoxScreenShotType; @@ -124,20 +65,6 @@ private: GraphicLabel labelChatStaysActive; GraphicCheckBox checkBoxChatStaysActive; - GraphicLabel labelRainEffect; - GraphicLabel labelRainEffectSeparator; - GraphicCheckBox checkBoxRainEffect; - GraphicCheckBox checkBoxRainEffectMenu; - - GraphicLabel labelGammaCorrection; - GraphicListBox listBoxGammaCorrection; - - GraphicLabel labelShadowTextureSize; - GraphicListBox listBoxShadowTextureSize; - - GraphicLabel labelVideos; - GraphicCheckBox checkBoxVideos; - GraphicLabel labelLuaDisableSecuritySandbox; GraphicCheckBox checkBoxLuaDisableSecuritySandbox; @@ -158,12 +85,10 @@ private: GraphicLabel labelTransifexI18NLabel; GraphicLabel labelTransifexI18N; - GraphicLabel labelSelectionType; - GraphicListBox listBoxSelectionType; - + ProgramState **parentUI; public: - MenuStateOptions(Program *program, MainMenu *mainMenu); + MenuStateOptions(Program *program, MainMenu *mainMenu, ProgramState **parentUI=NULL); void mouseClick(int x, int y, MouseButton mouseButton); void mouseMove(int x, int y, const MouseState *mouseState); diff --git a/source/glest_game/menu/menu_state_options_graphics.cpp b/source/glest_game/menu/menu_state_options_graphics.cpp new file mode 100644 index 00000000..05c2f372 --- /dev/null +++ b/source/glest_game/menu/menu_state_options_graphics.cpp @@ -0,0 +1,900 @@ +// ============================================================== +// 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 "menu_state_options_graphics.h" + +#include "renderer.h" +#include "game.h" +#include "program.h" +#include "sound_renderer.h" +#include "core_data.h" +#include "config.h" +#include "menu_state_root.h" +#include "menu_state_options.h" +#include "util.h" +#include "menu_state_graphic_info.h" +#include "menu_state_keysetup.h" +#include "menu_state_options_graphics.h" +#include "menu_state_options_sound.h" +#include "menu_state_options_network.h" +#include "string_utils.h" +#include "metrics.h" +#include "leak_dumper.h" + +using namespace Shared::Util; + +namespace Glest{ namespace Game{ + +// ===================================================== +// class MenuStateOptions +// ===================================================== +MenuStateOptionsGraphics::MenuStateOptionsGraphics(Program *program, MainMenu *mainMenu, ProgramState **parentUI): + MenuState(program, mainMenu, "config") +{ + try { + containerName = "Options"; + this->parentUI=parentUI; + Lang &lang= Lang::getInstance(); + Config &config= Config::getInstance(); + this->console.setOnlyChatMessagesInStoredLines(false); + //modeinfos=list (); + Shared::PlatformCommon::getFullscreenVideoModes(&modeInfos,!config.getBool("Windowed")); + + int leftLabelStart=50; + int leftColumnStart=leftLabelStart+180; + int rightLabelStart=450; + int rightColumnStart=rightLabelStart+280; + int buttonRowPos=50; + int buttonStartPos=170; + int captionOffset=75; + int currentLabelStart=leftLabelStart; + int currentColumnStart=leftColumnStart; + int currentLine=700; + int lineOffset=27; + int tabButtonWidth=200; + int tabButtonHeight=30; + + mainMessageBox.registerGraphicComponent(containerName,"mainMessageBox"); + mainMessageBox.init(lang.get("Ok")); + mainMessageBox.setEnabled(false); + mainMessageBoxState=0; + + buttonAudioSection.registerGraphicComponent(containerName,"buttonAudioSection"); + buttonAudioSection.init(0, 720,tabButtonWidth,tabButtonHeight); + buttonAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonAudioSection.setText(lang.get("Audio")); + // Video Section + buttonVideoSection.registerGraphicComponent(containerName,"labelVideoSection"); + buttonVideoSection.init(200, 700,tabButtonWidth,tabButtonHeight+20); + buttonVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonVideoSection.setText(lang.get("Video")); + //currentLine-=lineOffset; + //MiscSection + buttonMiscSection.registerGraphicComponent(containerName,"labelMiscSection"); + buttonMiscSection.init(400, 720,tabButtonWidth,tabButtonHeight); + buttonMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonMiscSection.setText(lang.get("Misc")); + //NetworkSettings + buttonNetworkSettings.registerGraphicComponent(containerName,"labelNetworkSettingsSection"); + buttonNetworkSettings.init(600, 720,tabButtonWidth,tabButtonHeight); + buttonNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonNetworkSettings.setText(lang.get("Network")); + + //KeyboardSetup + buttonKeyboardSetup.registerGraphicComponent(containerName,"buttonKeyboardSetup"); + buttonKeyboardSetup.init(800, 720,tabButtonWidth,tabButtonHeight); + buttonKeyboardSetup.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonKeyboardSetup.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonKeyboardSetup.setText(lang.get("Keyboardsetup")); + + currentLine=650; // reset line pos + currentLabelStart=leftLabelStart; // set to right side + currentColumnStart=leftColumnStart; // set to right side + + //resolution + labelScreenModes.registerGraphicComponent(containerName,"labelScreenModes"); + labelScreenModes.init(currentLabelStart, currentLine); + labelScreenModes.setText(lang.get("Resolution")); + + listBoxScreenModes.registerGraphicComponent(containerName,"listBoxScreenModes"); + listBoxScreenModes.init(currentColumnStart, currentLine, 170); + + string currentResString = config.getString("ScreenWidth") + "x" + + config.getString("ScreenHeight") + "-" + + intToStr(config.getInt("ColorBits")); + bool currentResolutionFound = false; + for(vector::const_iterator it= modeInfos.begin(); it!=modeInfos.end(); ++it){ + if((*it).getString() == currentResString) { + currentResolutionFound = true; + } + listBoxScreenModes.pushBackItem((*it).getString()); + } + if(currentResolutionFound == false) { + listBoxScreenModes.pushBackItem(currentResString); + } + listBoxScreenModes.setSelectedItem(currentResString); + currentLine-=lineOffset; + + + //FullscreenWindowed + labelFullscreenWindowed.registerGraphicComponent(containerName,"labelFullscreenWindowed"); + labelFullscreenWindowed.init(currentLabelStart, currentLine); + + checkBoxFullscreenWindowed.registerGraphicComponent(containerName,"checkBoxFullscreenWindowed"); + checkBoxFullscreenWindowed.init(currentColumnStart, currentLine); + labelFullscreenWindowed.setText(lang.get("Windowed")); + checkBoxFullscreenWindowed.setValue(config.getBool("Windowed")); + currentLine-=lineOffset; + + //gammaCorrection + labelGammaCorrection.registerGraphicComponent(containerName,"labelGammaCorrection"); + labelGammaCorrection.init(currentLabelStart, currentLine); + labelGammaCorrection.setText(lang.get("GammaCorrection")); + + listBoxGammaCorrection.registerGraphicComponent(containerName,"listBoxGammaCorrection"); + listBoxGammaCorrection.init(currentColumnStart, currentLine, 170); + for (float f=0.5;f<3.0f;f=f+0.1f) { + listBoxGammaCorrection.pushBackItem(floatToStr(f)); + } + float gammaValue=config.getFloat("GammaValue","1.0"); + if(gammaValue==0.0f) gammaValue=1.0f; + listBoxGammaCorrection.setSelectedItem(floatToStr(gammaValue)); + + currentLine-=lineOffset; + + //filter + labelFilter.registerGraphicComponent(containerName,"labelFilter"); + labelFilter.init(currentLabelStart, currentLine); + labelFilter.setText(lang.get("Filter")); + + listBoxFilter.registerGraphicComponent(containerName,"listBoxFilter"); + listBoxFilter.init(currentColumnStart, currentLine, 170); + listBoxFilter.pushBackItem("Bilinear"); + listBoxFilter.pushBackItem("Trilinear"); + listBoxFilter.setSelectedItem(config.getString("Filter")); + currentLine-=lineOffset; + + //selectionType + labelSelectionType.registerGraphicComponent(containerName,"labelSelectionType"); + labelSelectionType.init(currentLabelStart, currentLine); + labelSelectionType.setText(lang.get("SelectionType")); + + listBoxSelectionType.registerGraphicComponent(containerName,"listBoxSelectionType"); + listBoxSelectionType.init(currentColumnStart, currentLine, 170); + listBoxSelectionType.pushBackItem("SelectBuffer"); + listBoxSelectionType.pushBackItem("ColorPicking"); + listBoxSelectionType.pushBackItem("FrustumPicking"); + + const string selectionType=toLower(config.getString("SelectionType",Config::selectBufPicking)); + if( selectionType==Config::colorPicking) + listBoxSelectionType.setSelectedItemIndex(1); + else if ( selectionType==Config::frustumPicking ) + listBoxSelectionType.setSelectedItemIndex(2); + else + listBoxSelectionType.setSelectedItemIndex(0); + currentLine-=lineOffset; + + //shadows + labelShadows.registerGraphicComponent(containerName,"labelShadows"); + labelShadows.init(currentLabelStart, currentLine); + labelShadows.setText(lang.get("Shadows")); + + listBoxShadows.registerGraphicComponent(containerName,"listBoxShadows"); + listBoxShadows.init(currentColumnStart, currentLine, 170); + for(int i= 0; i(i)))); + } + string str= config.getString("Shadows"); + listBoxShadows.setSelectedItemIndex(clamp(Renderer::strToShadows(str), 0, Renderer::sCount-1)); + currentLine-=lineOffset; + + //shadows + labelShadowTextureSize.registerGraphicComponent(containerName,"labelShadowTextureSize"); + labelShadowTextureSize.init(currentLabelStart, currentLine); + labelShadowTextureSize.setText(lang.get("ShadowTextureSize")); + + listBoxShadowTextureSize.registerGraphicComponent(containerName,"listBoxShadowTextureSize"); + listBoxShadowTextureSize.init(currentColumnStart, currentLine, 170); + listBoxShadowTextureSize.pushBackItem("256"); + listBoxShadowTextureSize.pushBackItem("512"); + listBoxShadowTextureSize.pushBackItem("1024"); + listBoxShadowTextureSize.setSelectedItemIndex(1,false); + listBoxShadowTextureSize.setSelectedItem(intToStr(config.getInt("ShadowTextureSize","512")),false); + currentLine-=lineOffset; + + //textures 3d + labelTextures3D.registerGraphicComponent(containerName,"labelTextures3D"); + labelTextures3D.init(currentLabelStart, currentLine); + + checkBoxTextures3D.registerGraphicComponent(containerName,"checkBoxTextures3D"); + checkBoxTextures3D.init(currentColumnStart, currentLine); + labelTextures3D.setText(lang.get("Textures3D")); + checkBoxTextures3D.setValue(config.getBool("Textures3D")); + currentLine-=lineOffset; + + //lights + labelLights.registerGraphicComponent(containerName,"labelLights"); + labelLights.init(currentLabelStart, currentLine); + labelLights.setText(lang.get("MaxLights")); + + listBoxLights.registerGraphicComponent(containerName,"listBoxLights"); + listBoxLights.init(currentColumnStart, currentLine, 80); + for(int i= 1; i<=8; ++i){ + listBoxLights.pushBackItem(intToStr(i)); + } + listBoxLights.setSelectedItemIndex(clamp(config.getInt("MaxLights")-1, 0, 7)); + currentLine-=lineOffset; + + //unit particles + labelUnitParticles.registerGraphicComponent(containerName,"labelUnitParticles"); + labelUnitParticles.init(currentLabelStart,currentLine); + labelUnitParticles.setText(lang.get("ShowUnitParticles")); + + checkBoxUnitParticles.registerGraphicComponent(containerName,"checkBoxUnitParticles"); + checkBoxUnitParticles.init(currentColumnStart,currentLine); + checkBoxUnitParticles.setValue(config.getBool("UnitParticles","true")); + currentLine-=lineOffset; + + //tileset particles + labelTilesetParticles.registerGraphicComponent(containerName,"labelTilesetParticles"); + labelTilesetParticles.init(currentLabelStart,currentLine); + labelTilesetParticles.setText(lang.get("ShowTilesetParticles")); + + checkBoxTilesetParticles.registerGraphicComponent(containerName,"checkBoxTilesetParticles"); + checkBoxTilesetParticles.init(currentColumnStart,currentLine); + checkBoxTilesetParticles.setValue(config.getBool("TilesetParticles","true")); + currentLine-=lineOffset; + + //unit particles + labelMapPreview.registerGraphicComponent(containerName,"labelMapPreview"); + labelMapPreview.init(currentLabelStart,currentLine); + labelMapPreview.setText(lang.get("ShowMapPreview")); + + checkBoxMapPreview.registerGraphicComponent(containerName,"checkBoxMapPreview"); + checkBoxMapPreview.init(currentColumnStart,currentLine); + checkBoxMapPreview.setValue(config.getBool("MapPreview","true")); + currentLine-=lineOffset; + + // Texture Compression flag + labelEnableTextureCompression.registerGraphicComponent(containerName,"labelEnableTextureCompression"); + labelEnableTextureCompression.init(currentLabelStart ,currentLine); + labelEnableTextureCompression.setText(lang.get("EnableTextureCompression")); + + checkBoxEnableTextureCompression.registerGraphicComponent(containerName,"checkBoxEnableTextureCompression"); + checkBoxEnableTextureCompression.init(currentColumnStart ,currentLine ); + checkBoxEnableTextureCompression.setValue(config.getBool("EnableTextureCompression","false")); + currentLine-=lineOffset; + + labelRainEffect.registerGraphicComponent(containerName,"labelRainEffect"); + labelRainEffect.init(currentLabelStart ,currentLine); + labelRainEffect.setText(lang.get("RainEffectMenuGame")); + + checkBoxRainEffectMenu.registerGraphicComponent(containerName,"checkBoxRainEffectMenu"); + checkBoxRainEffectMenu.init(currentColumnStart ,currentLine ); + checkBoxRainEffectMenu.setValue(config.getBool("RainEffectMenu","true")); + + labelRainEffectSeparator.registerGraphicComponent(containerName,"labelRainEffect"); + labelRainEffectSeparator.init(currentColumnStart+30 ,currentLine); + labelRainEffectSeparator.setText("/"); + + checkBoxRainEffect.registerGraphicComponent(containerName,"checkBoxRainEffect"); + checkBoxRainEffect.init(currentColumnStart+42 ,currentLine ); + checkBoxRainEffect.setValue(config.getBool("RainEffect","true")); + currentLine-=lineOffset; + + labelVideos.registerGraphicComponent(containerName,"labelVideos"); + labelVideos.init(currentLabelStart ,currentLine); + labelVideos.setText(lang.get("EnableVideos")); + + checkBoxVideos.registerGraphicComponent(containerName,"checkBoxVideos"); + checkBoxVideos.init(currentColumnStart ,currentLine ); + checkBoxVideos.setValue(config.getBool("EnableVideos","true")); + + // end + + // external server port + currentLine-=lineOffset; + + // buttons + buttonOk.registerGraphicComponent(containerName,"buttonOk"); + buttonOk.init(buttonStartPos, buttonRowPos, 100); + buttonOk.setText(lang.get("Save")); + buttonReturn.setText(lang.get("Return")); + + buttonReturn.registerGraphicComponent(containerName,"buttonAbort"); + buttonReturn.init(buttonStartPos+110, buttonRowPos, 100); + buttonAutoConfig.setText(lang.get("AutoConfig")); + + buttonAutoConfig.registerGraphicComponent(containerName,"buttonAutoConfig"); + buttonAutoConfig.init(buttonStartPos+250, buttonRowPos, 125); + + buttonVideoInfo.setText(lang.get("VideoInfo")); + buttonVideoInfo.registerGraphicComponent(containerName,"buttonVideoInfo"); + buttonVideoInfo.init(buttonStartPos+385, buttonRowPos, 125); // was 620 + + GraphicComponent::applyAllCustomProperties(containerName); + } + catch(exception &e) { + SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error loading options: %s\n",__FILE__,__FUNCTION__,__LINE__,e.what()); + throw megaglest_runtime_error(string("Error loading options msg: ") + e.what()); + } +} + +void MenuStateOptionsGraphics::reloadUI() { + Lang &lang= Lang::getInstance(); + + console.resetFonts(); + mainMessageBox.init(lang.get("Ok")); + + buttonAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonAudioSection.setText(lang.get("Audio")); + + buttonVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonVideoSection.setText(lang.get("Video")); + + buttonMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonMiscSection.setText(lang.get("Misc")); + + buttonNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonNetworkSettings.setText(lang.get("Network")); + + std::vector listboxData; + listboxData.push_back("None"); + listboxData.push_back("OpenAL"); +// deprecated as of 3.6.1 +//#ifdef WIN32 +// listboxData.push_back("DirectSound8"); +//#endif + + labelScreenModes.setText(lang.get("Resolution")); + + labelFullscreenWindowed.setText(lang.get("Windowed")); + labelFilter.setText(lang.get("Filter")); + + listboxData.clear(); + listboxData.push_back("Bilinear"); + listboxData.push_back("Trilinear"); + listBoxFilter.setItems(listboxData); + + listboxData.clear(); + for (float f=0.0;f<2.1f;f=f+0.1f) { + listboxData.push_back(floatToStr(f)); + } + listBoxGammaCorrection.setItems(listboxData); + + + labelShadows.setText(lang.get("Shadows")); + labelShadowTextureSize.setText(lang.get("ShadowTextureSize")); + + listboxData.clear(); + for(int i= 0; i(i)))); + } + listBoxShadows.setItems(listboxData); + + labelTextures3D.setText(lang.get("Textures3D")); + + labelLights.setText(lang.get("MaxLights")); + + labelUnitParticles.setText(lang.get("ShowUnitParticles")); + + labelTilesetParticles.setText(lang.get("ShowTilesetParticles")); + + labelMapPreview.setText(lang.get("ShowMapPreview")); + + labelEnableTextureCompression.setText(lang.get("EnableTextureCompression")); + + + labelRainEffect.setText(lang.get("RainEffect")); + + labelVideos.setText(lang.get("EnableVideos")); + + buttonOk.setText(lang.get("Save")); + buttonReturn.setText(lang.get("Return")); + + buttonAutoConfig.setText(lang.get("AutoConfig")); + + buttonVideoInfo.setText(lang.get("VideoInfo")); + + labelSelectionType.setText(lang.get("SelectionType")); + + GraphicComponent::reloadFontsForRegisterGraphicComponents(containerName); +} + + +void MenuStateOptionsGraphics::showMessageBox(const string &text, const string &header, bool toggle){ + if(!toggle){ + mainMessageBox.setEnabled(false); + } + + if(!mainMessageBox.getEnabled()){ + mainMessageBox.setText(text); + mainMessageBox.setHeader(header); + mainMessageBox.setEnabled(true); + } + else{ + mainMessageBox.setEnabled(false); + } +} + + +void MenuStateOptionsGraphics::mouseClick(int x, int y, MouseButton mouseButton){ + + Config &config= Config::getInstance(); + CoreData &coreData= CoreData::getInstance(); + SoundRenderer &soundRenderer= SoundRenderer::getInstance(); + + if(mainMessageBox.getEnabled()) { + int button= 0; + if(mainMessageBox.mouseClick(x, y, button)) { + soundRenderer.playFx(coreData.getClickSoundA()); + if(button == 0) { + if(mainMessageBoxState == 1) { + mainMessageBoxState=0; + mainMessageBox.setEnabled(false); + saveConfig(); + + Lang &lang= Lang::getInstance(); + mainMessageBox.init(lang.get("Ok")); + //mainMenu->setState(new MenuStateOptions(program, mainMenu)); + } + else { + mainMessageBox.setEnabled(false); + + Lang &lang= Lang::getInstance(); + mainMessageBox.init(lang.get("Ok")); + } + } + else { + if(mainMessageBoxState == 1) { + mainMessageBoxState=0; + mainMessageBox.setEnabled(false); + + Lang &lang= Lang::getInstance(); + mainMessageBox.init(lang.get("Ok")); + + //!!! + // Revert resolution or fullscreen + checkBoxFullscreenWindowed.setValue(config.getBool("Windowed")); + string currentResString = config.getString("ScreenWidth") + "x" + + config.getString("ScreenHeight") + "-" + + intToStr(config.getInt("ColorBits")); + listBoxScreenModes.setSelectedItem(currentResString); + + + changeVideoModeFullScreen(!config.getBool("Windowed")); + WindowGl *window = this->program->getWindow(); + window->ChangeVideoMode(true, + config.getInt("ScreenWidth"), + config.getInt("ScreenHeight"), + !config.getBool("Windowed"), + config.getInt("ColorBits"), + config.getInt("DepthBits"), + config.getInt("StencilBits"), + config.getBool("HardwareAcceleration","false"), + config.getBool("FullScreenAntiAliasing","false"), + config.getFloat("GammaValue","0.0")); + + Metrics::reload(); + this->mainMenu->init(); + } + } + } + } + else if(buttonOk.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + Lang &lang= Lang::getInstance(); + bool selectedFullscreenWindowed = checkBoxFullscreenWindowed.getValue(); + string currentResolution=config.getString("ScreenWidth")+"x"+config.getString("ScreenHeight")+"-"+intToStr(config.getInt("ColorBits")); + string selectedResolution=listBoxScreenModes.getSelectedItem(); + if(currentResolution != selectedResolution){ +// if(currentResolution != selectedResolution || +// currentFullscreenWindowed != selectedFullscreenWindowed) { +// +// changeVideoModeFullScreen(!config.getBool("Windowed")); +// WindowGl *window = this->program->getWindow(); +// window->ChangeVideoMode(true, +// config.getInt("ScreenWidth"), +// config.getInt("ScreenHeight"), +// !config.getBool("Windowed"), +// config.getInt("ColorBits"), +// config.getInt("DepthBits"), +// config.getInt("StencilBits"), +// config.getBool("HardwareAcceleration","false"), +// config.getBool("FullScreenAntiAliasing","false"), +// config.getFloat("GammaValue","0.0")); +// +// Metrics::reload(); +// this->mainMenu->init(); +// } + + changeVideoModeFullScreen(!selectedFullscreenWindowed); + const ModeInfo *selectedMode = NULL; + for(vector::const_iterator it= modeInfos.begin(); it!=modeInfos.end(); ++it) { + if((*it).getString() == selectedResolution) { + //config.setInt("ScreenWidth",(*it).width); + //config.setInt("ScreenHeight",(*it).height); + //config.setInt("ColorBits",(*it).depth); + selectedMode = &(*it); + } + } + + WindowGl *window = this->program->getWindow(); + window->ChangeVideoMode(true, + selectedMode->width, + selectedMode->height, + !selectedFullscreenWindowed, + selectedMode->depth, + config.getInt("DepthBits"), + config.getInt("StencilBits"), + config.getBool("HardwareAcceleration","false"), + config.getBool("FullScreenAntiAliasing","false"), + strToFloat(listBoxGammaCorrection.getSelectedItem())); + + //Metrics::reload(selectedMode->width,selectedMode->height); + //this->mainMenu->init(); + + mainMessageBoxState=1; + mainMessageBox.init(lang.get("Ok"),lang.get("Cancel")); + //showMessageBox(lang.get("RestartNeeded"), lang.get("ResolutionChanged"), false); + showMessageBox(lang.get("ResolutionChanged"), lang.get("Notice"), false); + return; + } + + bool currentFullscreenWindowed=config.getBool("Windowed"); + //bool selectedFullscreenWindowed = checkBoxFullscreenWindowed.getValue(); + if(currentFullscreenWindowed != selectedFullscreenWindowed) { + //mainMessageBoxState=1; + //Lang &lang= Lang::getInstance(); + //showMessageBox(lang.get("RestartNeeded"), lang.get("DisplaySettingsChanged"), false); + //return; + + changeVideoModeFullScreen(!selectedFullscreenWindowed); + const ModeInfo *selectedMode = NULL; + for(vector::const_iterator it= modeInfos.begin(); it!=modeInfos.end(); ++it) { + if((*it).getString() == selectedResolution) { + //config.setInt("ScreenWidth",(*it).width); + //config.setInt("ScreenHeight",(*it).height); + //config.setInt("ColorBits",(*it).depth); + selectedMode = &(*it); + } + } + + WindowGl *window = this->program->getWindow(); + window->ChangeVideoMode(true, + selectedMode->width, + selectedMode->height, + !selectedFullscreenWindowed, + selectedMode->depth, + config.getInt("DepthBits"), + config.getInt("StencilBits"), + config.getBool("HardwareAcceleration","false"), + config.getBool("FullScreenAntiAliasing","false"), + strToFloat(listBoxGammaCorrection.getSelectedItem())); + + Metrics::reload(selectedMode->width,selectedMode->height); + this->mainMenu->init(); + + mainMessageBoxState=1; + mainMessageBox.init(lang.get("Ok"),lang.get("Cancel")); + //showMessageBox(lang.get("RestartNeeded"), lang.get("ResolutionChanged"), false); + showMessageBox(lang.get("DisplaySettingsChanged"), lang.get("Notice"), false); + return; + } + + saveConfig(); + //mainMenu->setState(new MenuStateOptions(program, mainMenu)); + return; + } + else if(buttonReturn.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + + // reset the gamma to former value + string currentGammaCorrection=config.getString("GammaValue","1.0"); + string selectedGammaCorrection=listBoxGammaCorrection.getSelectedItem(); + if(currentGammaCorrection!=selectedGammaCorrection){ + float gammaValue=strToFloat(currentGammaCorrection); + if(gammaValue==0.0f) gammaValue=1.0f; + if(gammaValue!=0.0){ + program->getWindow()->setGamma(gammaValue); + SDL_SetGamma(gammaValue, gammaValue, gammaValue); + } + } + if(this->parentUI != NULL) { + *this->parentUI = NULL; + delete *this->parentUI; + } + mainMenu->setState(new MenuStateRoot(program, mainMenu)); + return; + } + else if(buttonKeyboardSetup.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + //mainMenu->setState(new MenuStateKeysetup(program, mainMenu)); // open keyboard shortcuts setup screen + //mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu)); // open keyboard shortcuts setup screen + //mainMenu->setState(new MenuStateOptionsNetwork(program, mainMenu)); // open keyboard shortcuts setup screen + mainMenu->setState(new MenuStateKeysetup(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + //showMessageBox("Not implemented yet", "Keyboard setup", false); + return; + } + else if(buttonAudioSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsSound(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonNetworkSettings.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsNetwork(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonMiscSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptions(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonVideoSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + //mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonAutoConfig.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + Renderer::getInstance().autoConfig(); + //saveConfig(); + mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu)); + return; + } + else if(buttonVideoInfo.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateGraphicInfo(program, mainMenu)); + return; + } + else + { + listBoxSelectionType.mouseClick(x, y); + listBoxShadows.mouseClick(x, y); + listBoxShadowTextureSize.mouseClick(x, y); + listBoxFilter.mouseClick(x, y); + if(listBoxGammaCorrection.mouseClick(x, y)){ + float gammaValue=strToFloat(listBoxGammaCorrection.getSelectedItem()); + if(gammaValue!=0.0){ + program->getWindow()->setGamma(gammaValue); + SDL_SetGamma(gammaValue, gammaValue, gammaValue); + } + } + checkBoxTextures3D.mouseClick(x, y); + checkBoxUnitParticles.mouseClick(x, y); + checkBoxTilesetParticles.mouseClick(x, y); + checkBoxMapPreview.mouseClick(x, y); + listBoxLights.mouseClick(x, y); + listBoxScreenModes.mouseClick(x, y); + checkBoxFullscreenWindowed.mouseClick(x, y); + checkBoxEnableTextureCompression.mouseClick(x, y); + checkBoxRainEffect.mouseClick(x,y); + checkBoxRainEffectMenu.mouseClick(x,y); + + checkBoxVideos.mouseClick(x,y); + } +} + +void MenuStateOptionsGraphics::mouseMove(int x, int y, const MouseState *ms){ + if (mainMessageBox.getEnabled()) { + mainMessageBox.mouseMove(x, y); + } + + buttonOk.mouseMove(x, y); + buttonReturn.mouseMove(x, y); + buttonKeyboardSetup.mouseMove(x, y); + buttonAudioSection.mouseMove(x, y); + buttonNetworkSettings.mouseMove(x, y); + buttonMiscSection.mouseMove(x, y); + buttonVideoSection.mouseMove(x, y); + buttonAutoConfig.mouseMove(x, y); + buttonVideoInfo.mouseMove(x, y); + listBoxFilter.mouseMove(x, y); + listBoxGammaCorrection.mouseMove(x, y); + listBoxSelectionType.mouseMove(x, y); + listBoxShadows.mouseMove(x, y); + checkBoxTextures3D.mouseMove(x, y); + checkBoxUnitParticles.mouseMove(x, y); + checkBoxTilesetParticles.mouseMove(x, y); + checkBoxMapPreview.mouseMove(x, y); + listBoxLights.mouseMove(x, y); + listBoxScreenModes.mouseMove(x, y); + checkBoxFullscreenWindowed.mouseMove(x, y); + checkBoxEnableTextureCompression.mouseMove(x, y); + + checkBoxRainEffect.mouseMove(x, y); + checkBoxRainEffectMenu.mouseMove(x, y); + + checkBoxVideos.mouseMove(x, y); +} + +//bool MenuStateOptionsGraphics::isInSpecialKeyCaptureEvent() { +// return (activeInputLabel != NULL); +//} +// +//void MenuStateOptionsGraphics::keyDown(SDL_KeyboardEvent key) { +// if(activeInputLabel != NULL) { +// keyDownEditLabel(key, &activeInputLabel); +// } +//} + +void MenuStateOptionsGraphics::keyPress(SDL_KeyboardEvent c) { +// if(activeInputLabel != NULL) { +// //printf("[%d]\n",c); fflush(stdout); +// if( &labelPlayerName == activeInputLabel || +// &labelTransifexUser == activeInputLabel || +// &labelTransifexPwd == activeInputLabel || +// &labelTransifexI18N == activeInputLabel) { +// keyPressEditLabel(c, &activeInputLabel); +// } +// } +// else { + Config &configKeys = Config::getInstance(std::pair(cfgMainKeys,cfgUserKeys)); + if(isKeyPressed(configKeys.getSDLKey("SaveGUILayout"),c) == true) { + GraphicComponent::saveAllCustomProperties(containerName); + //Lang &lang= Lang::getInstance(); + //console.addLine(lang.get("GUILayoutSaved") + " [" + (saved ? lang.get("Yes") : lang.get("No"))+ "]"); + } +// } +} + +void MenuStateOptionsGraphics::render(){ + Renderer &renderer= Renderer::getInstance(); + + if(mainMessageBox.getEnabled()){ + renderer.renderMessageBox(&mainMessageBox); + } + else + { + renderer.renderButton(&buttonOk); + renderer.renderButton(&buttonReturn); + renderer.renderButton(&buttonKeyboardSetup); + renderer.renderButton(&buttonVideoSection); + renderer.renderButton(&buttonAudioSection); + renderer.renderButton(&buttonMiscSection); + renderer.renderButton(&buttonNetworkSettings); + renderer.renderButton(&buttonAutoConfig); + renderer.renderButton(&buttonVideoInfo); + renderer.renderListBox(&listBoxShadows); + renderer.renderCheckBox(&checkBoxTextures3D); + renderer.renderCheckBox(&checkBoxUnitParticles); + renderer.renderCheckBox(&checkBoxTilesetParticles); + renderer.renderCheckBox(&checkBoxMapPreview); + renderer.renderListBox(&listBoxLights); + renderer.renderListBox(&listBoxFilter); + renderer.renderListBox(&listBoxGammaCorrection); + renderer.renderLabel(&labelShadows); + renderer.renderLabel(&labelTextures3D); + renderer.renderLabel(&labelUnitParticles); + renderer.renderLabel(&labelTilesetParticles); + renderer.renderLabel(&labelMapPreview); + renderer.renderLabel(&labelLights); + renderer.renderLabel(&labelFilter); + renderer.renderLabel(&labelGammaCorrection); + renderer.renderLabel(&labelScreenModes); + renderer.renderListBox(&listBoxScreenModes); + renderer.renderLabel(&labelFullscreenWindowed); + renderer.renderCheckBox(&checkBoxFullscreenWindowed); + + renderer.renderLabel(&labelEnableTextureCompression); + renderer.renderCheckBox(&checkBoxEnableTextureCompression); + + renderer.renderLabel(&labelRainEffect); + renderer.renderCheckBox(&checkBoxRainEffect); + renderer.renderLabel(&labelRainEffectSeparator); + renderer.renderCheckBox(&checkBoxRainEffectMenu); + + renderer.renderLabel(&labelShadowTextureSize); + renderer.renderListBox(&listBoxShadowTextureSize); + + renderer.renderLabel(&labelSelectionType); + renderer.renderListBox(&listBoxSelectionType); + + renderer.renderLabel(&labelVideos); + renderer.renderCheckBox(&checkBoxVideos); + } + + renderer.renderConsole(&console,false,true); + if(program != NULL) program->renderProgramMsgBox(); +} + +void MenuStateOptionsGraphics::saveConfig(){ + Config &config= Config::getInstance(); + Lang &lang= Lang::getInstance(); + //setActiveInputLable(NULL); + + int selectionTypeindex= listBoxSelectionType.getSelectedItemIndex(); + if(selectionTypeindex==0){ + config.setString("SelectionType",Config::selectBufPicking); + } + else if (selectionTypeindex==1){ + config.setString("SelectionType",Config::colorPicking); + } + else if (selectionTypeindex==2){ + config.setString("SelectionType",Config::frustumPicking); + } + + int index= listBoxShadows.getSelectedItemIndex(); + config.setString("Shadows", Renderer::shadowsToStr(static_cast(index))); + + string texSizeString= listBoxShadowTextureSize.getSelectedItem(); + config.setInt("ShadowTextureSize",strToInt(texSizeString) ); + + config.setBool("Windowed", checkBoxFullscreenWindowed.getValue()); + config.setString("Filter", listBoxFilter.getSelectedItem()); + config.setFloat("GammaValue", strToFloat(listBoxGammaCorrection.getSelectedItem())); + config.setBool("Textures3D", checkBoxTextures3D.getValue()); + config.setBool("UnitParticles", (checkBoxUnitParticles.getValue())); + config.setBool("TilesetParticles", (checkBoxTilesetParticles.getValue())); + config.setBool("MapPreview", checkBoxMapPreview.getValue()); + config.setInt("MaxLights", listBoxLights.getSelectedItemIndex()+1); + + config.setBool("RainEffect", checkBoxRainEffect.getValue()); + config.setBool("RainEffectMenu", checkBoxRainEffectMenu.getValue()); + + config.setBool("EnableVideos", checkBoxVideos.getValue()); + + string currentResolution=config.getString("ScreenWidth")+"x"+config.getString("ScreenHeight"); + string selectedResolution=listBoxScreenModes.getSelectedItem(); + if(currentResolution!=selectedResolution){ + for(vector::const_iterator it= modeInfos.begin(); it!=modeInfos.end(); ++it){ + if((*it).getString()==selectedResolution) + { + config.setInt("ScreenWidth",(*it).width); + config.setInt("ScreenHeight",(*it).height); + config.setInt("ColorBits",(*it).depth); + } + } + } + + config.save(); + + if(config.getBool("DisableLuaSandbox","false") == true) { + LuaScript::setDisableSandbox(true); + } + + SoundRenderer &soundRenderer= SoundRenderer::getInstance(); + soundRenderer.stopAllSounds(); + program->stopSoundSystem(); + soundRenderer.init(program->getWindow()); + soundRenderer.loadConfig(); + soundRenderer.setMusicVolume(CoreData::getInstance().getMenuMusic()); + program->startSoundSystem(); + + if(CoreData::getInstance().hasMainMenuVideoFilename() == false) { + soundRenderer.playMusic(CoreData::getInstance().getMenuMusic()); + } + + Renderer::getInstance().loadConfig(); + console.addLine(lang.get("SettingsSaved")); +} + +//void MenuStateOptionsGraphics::setActiveInputLable(GraphicLabel *newLable) { +// MenuState::setActiveInputLabel(newLable,&activeInputLabel); +// +// if(newLable == &labelTransifexPwd) { +// labelTransifexPwd.setIsPassword(false); +// } +// else { +// labelTransifexPwd.setIsPassword(true); +// } +//} + +}}//end namespace diff --git a/source/glest_game/menu/menu_state_options_graphics.h b/source/glest_game/menu/menu_state_options_graphics.h new file mode 100644 index 00000000..ecbaa6ae --- /dev/null +++ b/source/glest_game/menu/menu_state_options_graphics.h @@ -0,0 +1,110 @@ +// ============================================================== +// 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 +// ============================================================== + +#ifndef _GLEST_GAME_MENUSTATEOPTIONS_GRAPHICS_H_ +#define _GLEST_GAME_MENUSTATEOPTIONS_GRAPHICS_H_ + +#include "main_menu.h" +#include "leak_dumper.h" + +namespace Glest{ namespace Game{ + +// =============================== +// class MenuStateOptionsGraphics +// =============================== + +class MenuStateOptionsGraphics: public MenuState{ +private: + + GraphicButton buttonOk; + GraphicButton buttonReturn; + GraphicButton buttonAutoConfig; + GraphicButton buttonVideoInfo; + + GraphicButton buttonKeyboardSetup; // configure the keyboard + GraphicButton buttonVideoSection; + GraphicButton buttonAudioSection; + GraphicButton buttonMiscSection; + GraphicButton buttonNetworkSettings; + + GraphicLabel labelShadows; + GraphicListBox listBoxShadows; + GraphicLabel labelFilter; + GraphicListBox listBoxFilter; + GraphicLabel labelTextures3D; + GraphicCheckBox checkBoxTextures3D; + GraphicLabel labelLights; + GraphicListBox listBoxLights; + GraphicLabel labelUnitParticles; + GraphicCheckBox checkBoxUnitParticles; + GraphicLabel labelTilesetParticles; + GraphicCheckBox checkBoxTilesetParticles; + + GraphicLabel labelScreenModes; + GraphicListBox listBoxScreenModes; + vector modeInfos; + + GraphicLabel labelFullscreenWindowed; + GraphicCheckBox checkBoxFullscreenWindowed; + + + GraphicLabel labelMapPreview; + GraphicCheckBox checkBoxMapPreview; + + GraphicMessageBox mainMessageBox; + int mainMessageBoxState; + + GraphicLabel labelEnableTextureCompression; + GraphicCheckBox checkBoxEnableTextureCompression; + + GraphicLabel labelRainEffect; + GraphicLabel labelRainEffectSeparator; + GraphicCheckBox checkBoxRainEffect; + GraphicCheckBox checkBoxRainEffectMenu; + + GraphicLabel labelGammaCorrection; + GraphicListBox listBoxGammaCorrection; + + GraphicLabel labelShadowTextureSize; + GraphicListBox listBoxShadowTextureSize; + + GraphicLabel labelVideos; + GraphicCheckBox checkBoxVideos; + + GraphicLabel labelSelectionType; + GraphicListBox listBoxSelectionType; + + ProgramState **parentUI; + +public: + MenuStateOptionsGraphics(Program *program, MainMenu *mainMenu, ProgramState **parentUI=NULL); + + void mouseClick(int x, int y, MouseButton mouseButton); + void mouseMove(int x, int y, const MouseState *mouseState); + void render(); + //virtual void keyDown(SDL_KeyboardEvent key); + virtual void keyPress(SDL_KeyboardEvent c); + //virtual bool isInSpecialKeyCaptureEvent(); + + virtual void reloadUI(); + + +private: + void saveConfig(); + void setActiveInputLable(GraphicLabel* newLable); + void showMessageBox(const string &text, const string &header, bool toggle); + + void setupTransifexUI(); +}; + +}}//end namespace + +#endif diff --git a/source/glest_game/menu/menu_state_options_network.cpp b/source/glest_game/menu/menu_state_options_network.cpp new file mode 100644 index 00000000..04deaae2 --- /dev/null +++ b/source/glest_game/menu/menu_state_options_network.cpp @@ -0,0 +1,550 @@ +// ============================================================== +// 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 "menu_state_options_network.h" + +#include "renderer.h" +#include "game.h" +#include "program.h" +#include "sound_renderer.h" +#include "core_data.h" +#include "config.h" +#include "menu_state_root.h" +#include "menu_state_options.h" +#include "util.h" +#include "menu_state_keysetup.h" +#include "menu_state_options_graphics.h" +#include "menu_state_options_network.h" +#include "menu_state_options_sound.h" +#include "string_utils.h" +#include "metrics.h" +#include "leak_dumper.h" + +using namespace Shared::Util; + +namespace Glest{ namespace Game{ + +// ===================================================== +// class MenuStateOptions +// ===================================================== +MenuStateOptionsNetwork::MenuStateOptionsNetwork(Program *program, MainMenu *mainMenu, ProgramState **parentUI): + MenuState(program, mainMenu, "config") +{ + try { + containerName = "Options"; + Lang &lang= Lang::getInstance(); + Config &config= Config::getInstance(); + this->parentUI=parentUI; + this->console.setOnlyChatMessagesInStoredLines(false); + //modeinfos=list (); + int leftLabelStart=50; + int leftColumnStart=leftLabelStart+180; + int rightLabelStart=450; + int rightColumnStart=rightLabelStart+280; + int buttonRowPos=50; + int buttonStartPos=170; + int captionOffset=75; + int currentLabelStart=leftLabelStart; + int currentColumnStart=leftColumnStart; + int currentLine=700; + int lineOffset=27; + int tabButtonWidth=200; + int tabButtonHeight=30; + + mainMessageBox.registerGraphicComponent(containerName,"mainMessageBox"); + mainMessageBox.init(lang.get("Ok")); + mainMessageBox.setEnabled(false); + mainMessageBoxState=0; + + buttonAudioSection.registerGraphicComponent(containerName,"buttonAudioSection"); + buttonAudioSection.init(0, 720,tabButtonWidth,tabButtonHeight); + buttonAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonAudioSection.setText(lang.get("Audio")); + // Video Section + buttonVideoSection.registerGraphicComponent(containerName,"labelVideoSection"); + buttonVideoSection.init(200, 720,tabButtonWidth,tabButtonHeight); + buttonVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonVideoSection.setText(lang.get("Video")); + //currentLine-=lineOffset; + //MiscSection + buttonMiscSection.registerGraphicComponent(containerName,"labelMiscSection"); + buttonMiscSection.init(400, 720,tabButtonWidth,tabButtonHeight); + buttonMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonMiscSection.setText(lang.get("Misc")); + //NetworkSettings + buttonNetworkSettings.registerGraphicComponent(containerName,"labelNetworkSettingsSection"); + buttonNetworkSettings.init(600, 700,tabButtonWidth,tabButtonHeight+20); + buttonNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonNetworkSettings.setText(lang.get("Network")); + + //KeyboardSetup + buttonKeyboardSetup.registerGraphicComponent(containerName,"buttonKeyboardSetup"); + buttonKeyboardSetup.init(800, 720,tabButtonWidth,tabButtonHeight); + buttonKeyboardSetup.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonKeyboardSetup.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonKeyboardSetup.setText(lang.get("Keyboardsetup")); + + currentLine=650; // reset line pos + currentLabelStart=leftLabelStart; // set to right side + currentColumnStart=leftColumnStart; // set to right side + + + // external server port + labelPublishServerExternalPort.registerGraphicComponent(containerName,"labelPublishServerExternalPort"); + labelPublishServerExternalPort.init(currentLabelStart, currentLine, 150); + labelPublishServerExternalPort.setText(lang.get("PublishServerExternalPort")); + + labelExternalPort.init(currentColumnStart,currentLine); + string extPort= config.getString("PortExternal","not set"); + if(extPort == "not set" || extPort == "0"){ + extPort=" --- "; + } + else{ + extPort="!!! "+extPort+" !!!"; + } + labelExternalPort.setText(extPort); + + currentLine-=lineOffset; + // server port + labelServerPortLabel.registerGraphicComponent(containerName,"labelServerPortLabel"); + labelServerPortLabel.init(currentLabelStart,currentLine); + labelServerPortLabel.setText(lang.get("ServerPort")); + + listBoxServerPort.registerGraphicComponent(containerName,"listBoxPublishServerExternalPort"); + listBoxServerPort.init(currentColumnStart, currentLine, 170); + + string portListString = config.getString("PortList",intToStr(GameConstants::serverPort).c_str()); + std::vector portList; + Tokenize(portListString,portList,","); + + string currentPort=config.getString("PortServer", intToStr(GameConstants::serverPort).c_str()); + int portSelectionIndex=0; + for(int idx = 0; idx < portList.size(); idx++) { + if(portList[idx] != "" && IsNumeric(portList[idx].c_str(),false)) { + listBoxServerPort.pushBackItem(portList[idx]); + if(currentPort==portList[idx]) + { + portSelectionIndex=idx; + } + } + } + listBoxServerPort.setSelectedItemIndex(portSelectionIndex); + + currentLine-=lineOffset; + labelFTPServerPortLabel.registerGraphicComponent(containerName,"labelFTPServerPortLabel"); + labelFTPServerPortLabel.init(currentLabelStart ,currentLine ); + labelFTPServerPortLabel.setText(lang.get("FTPServerPort")); + + int FTPPort = config.getInt("FTPServerPort",intToStr(ServerSocket::getFTPServerPort()).c_str()); + labelFTPServerPort.registerGraphicComponent(containerName,"labelFTPServerPort"); + labelFTPServerPort.init(currentColumnStart ,currentLine ); + labelFTPServerPort.setText(intToStr(FTPPort)); + currentLine-=lineOffset; + labelFTPServerDataPortsLabel.registerGraphicComponent(containerName,"labelFTPServerDataPortsLabel"); + labelFTPServerDataPortsLabel.init(currentLabelStart ,currentLine ); + labelFTPServerDataPortsLabel.setText(lang.get("FTPServerDataPort")); + + char szBuf[8096]=""; + snprintf(szBuf,8096,"%d - %d",FTPPort + 1, FTPPort + GameConstants::maxPlayers); + + labelFTPServerDataPorts.registerGraphicComponent(containerName,"labelFTPServerDataPorts"); + labelFTPServerDataPorts.init(currentColumnStart,currentLine ); + labelFTPServerDataPorts.setText(szBuf); + currentLine-=lineOffset; + labelEnableFTPServer.registerGraphicComponent(containerName,"labelEnableFTPServer"); + labelEnableFTPServer.init(currentLabelStart ,currentLine); + labelEnableFTPServer.setText(lang.get("EnableFTPServer")); + + checkBoxEnableFTPServer.registerGraphicComponent(containerName,"checkBoxEnableFTPServer"); + checkBoxEnableFTPServer.init(currentColumnStart ,currentLine ); + checkBoxEnableFTPServer.setValue(config.getBool("EnableFTPServer","true")); + currentLine-=lineOffset; + // FTP Config - start + labelEnableFTP.registerGraphicComponent(containerName,"labelEnableFTP"); + labelEnableFTP.init(currentLabelStart ,currentLine); + labelEnableFTP.setText(lang.get("EnableFTP")); + + checkBoxEnableFTP.registerGraphicComponent(containerName,"checkBoxEnableFTP"); + checkBoxEnableFTP.init(currentColumnStart ,currentLine ); + checkBoxEnableFTP.setValue(config.getBool("EnableFTPXfer","true")); + currentLine-=lineOffset; + + labelEnableFTPServerInternetTilesetXfer.registerGraphicComponent(containerName,"labelEnableFTPServerInternetTilesetXfer"); + labelEnableFTPServerInternetTilesetXfer.init(currentLabelStart ,currentLine ); + labelEnableFTPServerInternetTilesetXfer.setText(lang.get("EnableFTPServerInternetTilesetXfer")); + + checkBoxEnableFTPServerInternetTilesetXfer.registerGraphicComponent(containerName,"checkBoxEnableFTPServerInternetTilesetXfer"); + checkBoxEnableFTPServerInternetTilesetXfer.init(currentColumnStart ,currentLine ); + checkBoxEnableFTPServerInternetTilesetXfer.setValue(config.getBool("EnableFTPServerInternetTilesetXfer","true")); + + currentLine-=lineOffset; + + labelEnableFTPServerInternetTechtreeXfer.registerGraphicComponent(containerName,"labelEnableFTPServerInternetTechtreeXfer"); + labelEnableFTPServerInternetTechtreeXfer.init(currentLabelStart ,currentLine ); + labelEnableFTPServerInternetTechtreeXfer.setText(lang.get("EnableFTPServerInternetTechtreeXfer")); + + checkBoxEnableFTPServerInternetTechtreeXfer.registerGraphicComponent(containerName,"checkBoxEnableFTPServerInternetTechtreeXfer"); + checkBoxEnableFTPServerInternetTechtreeXfer.init(currentColumnStart ,currentLine ); + checkBoxEnableFTPServerInternetTechtreeXfer.setValue(config.getBool("EnableFTPServerInternetTechtreeXfer","true")); + + currentLine-=lineOffset; + + + // FTP config end + + // Privacy flag + labelEnablePrivacy.registerGraphicComponent(containerName,"labelEnablePrivacy"); + labelEnablePrivacy.init(currentLabelStart ,currentLine); + labelEnablePrivacy.setText(lang.get("PrivacyPlease")); + + checkBoxEnablePrivacy.registerGraphicComponent(containerName,"checkBoxEnablePrivacy"); + checkBoxEnablePrivacy.init(currentColumnStart ,currentLine ); + checkBoxEnablePrivacy.setValue(config.getBool("PrivacyPlease","false")); + //currentLine-=lineOffset; + // end + + // buttons + buttonOk.registerGraphicComponent(containerName,"buttonOk"); + buttonOk.init(buttonStartPos, buttonRowPos, 100); + buttonOk.setText(lang.get("Save")); + buttonReturn.setText(lang.get("Return")); + + buttonReturn.registerGraphicComponent(containerName,"buttonAbort"); + buttonReturn.init(buttonStartPos+110, buttonRowPos, 100); + + GraphicComponent::applyAllCustomProperties(containerName); + } + catch(exception &e) { + SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error loading options: %s\n",__FILE__,__FUNCTION__,__LINE__,e.what()); + throw megaglest_runtime_error(string("Error loading options msg: ") + e.what()); + } +} + +void MenuStateOptionsNetwork::reloadUI() { + Lang &lang= Lang::getInstance(); + + console.resetFonts(); + mainMessageBox.init(lang.get("Ok")); + + buttonAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonAudioSection.setText(lang.get("Audio")); + + buttonVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonVideoSection.setText(lang.get("Video")); + + buttonMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonMiscSection.setText(lang.get("Misc")); + + buttonNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonNetworkSettings.setText(lang.get("Network")); + + std::vector listboxData; + listboxData.push_back("None"); + listboxData.push_back("OpenAL"); +// deprecated as of 3.6.1 +//#ifdef WIN32 +// listboxData.push_back("DirectSound8"); +//#endif + + + listboxData.clear(); + listboxData.push_back("Bilinear"); + listboxData.push_back("Trilinear"); + + listboxData.clear(); + for (float f=0.0;f<2.1f;f=f+0.1f) { + listboxData.push_back(floatToStr(f)); + } + listboxData.clear(); + for(int i= 0; i(i)))); + } + + + labelServerPortLabel.setText(lang.get("ServerPort")); + + labelPublishServerExternalPort.setText(lang.get("PublishServerExternalPort")); + + labelEnableFTP.setText(lang.get("EnableFTP")); + + labelEnableFTPServer.setText(lang.get("EnableFTPServer")); + + labelFTPServerPortLabel.setText(lang.get("FTPServerPort")); + + labelFTPServerDataPortsLabel.setText(lang.get("FTPServerDataPort")); + + labelEnableFTPServerInternetTilesetXfer.setText(lang.get("EnableFTPServerInternetTilesetXfer")); + + labelEnableFTPServerInternetTechtreeXfer.setText(lang.get("EnableFTPServerInternetTechtreeXfer")); + + labelEnablePrivacy.setText(lang.get("PrivacyPlease")); + + buttonOk.setText(lang.get("Save")); + buttonReturn.setText(lang.get("Return")); + + GraphicComponent::reloadFontsForRegisterGraphicComponents(containerName); +} + +void MenuStateOptionsNetwork::showMessageBox(const string &text, const string &header, bool toggle){ + if(!toggle){ + mainMessageBox.setEnabled(false); + } + + if(!mainMessageBox.getEnabled()){ + mainMessageBox.setText(text); + mainMessageBox.setHeader(header); + mainMessageBox.setEnabled(true); + } + else{ + mainMessageBox.setEnabled(false); + } +} + + +void MenuStateOptionsNetwork::mouseClick(int x, int y, MouseButton mouseButton){ + + Config &config= Config::getInstance(); + CoreData &coreData= CoreData::getInstance(); + SoundRenderer &soundRenderer= SoundRenderer::getInstance(); + + if(mainMessageBox.getEnabled()) { + int button= 0; + if(mainMessageBox.mouseClick(x, y, button)) { + soundRenderer.playFx(coreData.getClickSoundA()); + if(button == 0) { + if(mainMessageBoxState == 1) { + mainMessageBoxState=0; + mainMessageBox.setEnabled(false); + saveConfig(); + + Lang &lang= Lang::getInstance(); + mainMessageBox.init(lang.get("Ok")); + mainMenu->setState(new MenuStateOptions(program, mainMenu)); + } + else { + mainMessageBox.setEnabled(false); + + Lang &lang= Lang::getInstance(); + mainMessageBox.init(lang.get("Ok")); + } + } + + } + } + else if(buttonOk.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + saveConfig(); + //mainMenu->setState(new MenuStateOptions(program, mainMenu,this->parentUI)); + return; + } + else if(buttonReturn.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + if(this->parentUI != NULL) { + *this->parentUI = NULL; + delete *this->parentUI; + } + mainMenu->setState(new MenuStateRoot(program, mainMenu)); + return; + } + else if(buttonAudioSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsSound(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonNetworkSettings.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + //mainMenu->setState(new MenuStateOptionsNetwork(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonMiscSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptions(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonVideoSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + return; + } + else if(buttonKeyboardSetup.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateKeysetup(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen + //showMessageBox("Not implemented yet", "Keyboard setup", false); + return; + } + else + { + if(listBoxServerPort.mouseClick(x, y)){ + int selectedPort=strToInt(listBoxServerPort.getSelectedItem()); + if(selectedPort<10000){ + selectedPort=GameConstants::serverPort; + } + // use the following ports for ftp + char szBuf[8096]=""; + snprintf(szBuf,8096,"%d - %d",selectedPort + 2, selectedPort + 1 + GameConstants::maxPlayers); + labelFTPServerPort.setText(intToStr(selectedPort+1)); + labelFTPServerDataPorts.setText(szBuf); + } + + checkBoxEnableFTP.mouseClick(x, y); + checkBoxEnableFTPServer.mouseClick(x, y); + + checkBoxEnableFTPServerInternetTilesetXfer.mouseClick(x, y); + checkBoxEnableFTPServerInternetTechtreeXfer.mouseClick(x, y); + + checkBoxEnablePrivacy.mouseClick(x, y); + } +} + +void MenuStateOptionsNetwork::mouseMove(int x, int y, const MouseState *ms){ + if (mainMessageBox.getEnabled()) { + mainMessageBox.mouseMove(x, y); + } + + buttonOk.mouseMove(x, y); + buttonReturn.mouseMove(x, y); + buttonKeyboardSetup.mouseMove(x, y); + buttonAudioSection.mouseMove(x, y); + buttonNetworkSettings.mouseMove(x, y); + buttonMiscSection.mouseMove(x, y); + buttonVideoSection.mouseMove(x, y); + listBoxServerPort.mouseMove(x, y); + checkBoxEnableFTP.mouseMove(x, y); + checkBoxEnableFTPServer.mouseMove(x, y); + checkBoxEnableFTPServerInternetTilesetXfer.mouseMove(x, y); + checkBoxEnableFTPServerInternetTechtreeXfer.mouseMove(x, y); + checkBoxEnablePrivacy.mouseMove(x, y); +} + +//bool MenuStateOptionsNetwork::isInSpecialKeyCaptureEvent() { +// return (activeInputLabel != NULL); +//} +// +//void MenuStateOptionsNetwork::keyDown(SDL_KeyboardEvent key) { +// if(activeInputLabel != NULL) { +// keyDownEditLabel(key, &activeInputLabel); +// } +//} + +void MenuStateOptionsNetwork::keyPress(SDL_KeyboardEvent c) { +// if(activeInputLabel != NULL) { +// //printf("[%d]\n",c); fflush(stdout); +// if( &labelPlayerName == activeInputLabel || +// &labelTransifexUser == activeInputLabel || +// &labelTransifexPwd == activeInputLabel || +// &labelTransifexI18N == activeInputLabel) { +// keyPressEditLabel(c, &activeInputLabel); +// } +// } +// else { + Config &configKeys = Config::getInstance(std::pair(cfgMainKeys,cfgUserKeys)); + if(isKeyPressed(configKeys.getSDLKey("SaveGUILayout"),c) == true) { + GraphicComponent::saveAllCustomProperties(containerName); + //Lang &lang= Lang::getInstance(); + //console.addLine(lang.get("GUILayoutSaved") + " [" + (saved ? lang.get("Yes") : lang.get("No"))+ "]"); + } +// } +} + +void MenuStateOptionsNetwork::render(){ + Renderer &renderer= Renderer::getInstance(); + + if(mainMessageBox.getEnabled()){ + renderer.renderMessageBox(&mainMessageBox); + } + else + { + renderer.renderButton(&buttonOk); + renderer.renderButton(&buttonReturn); + renderer.renderButton(&buttonKeyboardSetup); + renderer.renderButton(&buttonVideoSection); + renderer.renderButton(&buttonAudioSection); + renderer.renderButton(&buttonMiscSection); + renderer.renderButton(&buttonNetworkSettings); + renderer.renderLabel(&labelServerPortLabel); + renderer.renderLabel(&labelExternalPort); + renderer.renderLabel(&labelPublishServerExternalPort); + renderer.renderListBox(&listBoxServerPort); + + + renderer.renderLabel(&labelEnableFTP); + renderer.renderCheckBox(&checkBoxEnableFTP); + + renderer.renderLabel(&labelEnableFTPServer); + renderer.renderCheckBox(&checkBoxEnableFTPServer); + + renderer.renderLabel(&labelFTPServerPortLabel); + renderer.renderLabel(&labelFTPServerPort); + renderer.renderLabel(&labelFTPServerDataPortsLabel); + renderer.renderLabel(&labelFTPServerDataPorts); + + renderer.renderLabel(&labelEnableFTPServerInternetTilesetXfer); + renderer.renderCheckBox(&checkBoxEnableFTPServerInternetTilesetXfer); + renderer.renderLabel(&labelEnableFTPServerInternetTechtreeXfer); + renderer.renderCheckBox(&checkBoxEnableFTPServerInternetTechtreeXfer); + + renderer.renderLabel(&labelEnablePrivacy); + renderer.renderCheckBox(&checkBoxEnablePrivacy); + + } + + renderer.renderConsole(&console,false,true); + if(program != NULL) program->renderProgramMsgBox(); +} + +void MenuStateOptionsNetwork::saveConfig(){ + Config &config= Config::getInstance(); + Lang &lang= Lang::getInstance(); + setActiveInputLable(NULL); + + + lang.loadStrings(config.getString("Lang")); + + config.setString("PortServer", listBoxServerPort.getSelectedItem()); + config.setInt("FTPServerPort",config.getInt("PortServer")+1); + config.setBool("EnableFTPXfer", checkBoxEnableFTP.getValue()); + config.setBool("EnableFTPServer", checkBoxEnableFTPServer.getValue()); + + config.setBool("EnableFTPServerInternetTilesetXfer", checkBoxEnableFTPServerInternetTilesetXfer.getValue()); + config.setBool("EnableFTPServerInternetTechtreeXfer", checkBoxEnableFTPServerInternetTechtreeXfer.getValue()); + + config.setBool("PrivacyPlease", checkBoxEnablePrivacy.getValue()); + + config.save(); + + SoundRenderer &soundRenderer= SoundRenderer::getInstance(); + soundRenderer.stopAllSounds(); + program->stopSoundSystem(); + soundRenderer.init(program->getWindow()); + soundRenderer.loadConfig(); + soundRenderer.setMusicVolume(CoreData::getInstance().getMenuMusic()); + program->startSoundSystem(); + + if(CoreData::getInstance().hasMainMenuVideoFilename() == false) { + soundRenderer.playMusic(CoreData::getInstance().getMenuMusic()); + } + + Renderer::getInstance().loadConfig(); + console.addLine(lang.get("SettingsSaved")); +} + +void MenuStateOptionsNetwork::setActiveInputLable(GraphicLabel *newLable) { +} + +}}//end namespace diff --git a/source/glest_game/menu/menu_state_options_network.h b/source/glest_game/menu/menu_state_options_network.h new file mode 100644 index 00000000..50efad74 --- /dev/null +++ b/source/glest_game/menu/menu_state_options_network.h @@ -0,0 +1,90 @@ +// ============================================================== +// 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 +// ============================================================== + +#ifndef _GLEST_GAME_MENUSTATEOPTIONS_NETWORK_H_ +#define _GLEST_GAME_MENUSTATEOPTIONS_NETWORK_H_ + +#include "main_menu.h" +#include "leak_dumper.h" + +namespace Glest{ namespace Game{ + +// =============================== +// class MenuStateOptionsNetwork +// =============================== + +class MenuStateOptionsNetwork: public MenuState{ +private: + + GraphicButton buttonOk; + GraphicButton buttonReturn; + + GraphicButton buttonKeyboardSetup; // configure the keyboard + GraphicButton buttonVideoSection; + GraphicButton buttonAudioSection; + GraphicButton buttonMiscSection; + GraphicButton buttonNetworkSettings; + + + GraphicMessageBox mainMessageBox; + int mainMessageBoxState; + + GraphicLabel labelExternalPort; + GraphicLabel labelServerPortLabel; + + GraphicLabel labelPublishServerExternalPort; + GraphicListBox listBoxServerPort; + + GraphicLabel labelEnableFTP; + GraphicCheckBox checkBoxEnableFTP; + + GraphicLabel labelEnableFTPServer; + GraphicCheckBox checkBoxEnableFTPServer; + + GraphicLabel labelFTPServerPortLabel; + GraphicLabel labelFTPServerPort; + + GraphicLabel labelFTPServerDataPortsLabel; + GraphicLabel labelFTPServerDataPorts; + + GraphicLabel labelEnableFTPServerInternetTilesetXfer; + GraphicCheckBox checkBoxEnableFTPServerInternetTilesetXfer; + + GraphicLabel labelEnableFTPServerInternetTechtreeXfer; + GraphicCheckBox checkBoxEnableFTPServerInternetTechtreeXfer; + + GraphicLabel labelEnablePrivacy; + GraphicCheckBox checkBoxEnablePrivacy; + + ProgramState **parentUI; + +public: + MenuStateOptionsNetwork(Program *program, MainMenu *mainMenu, ProgramState **parentUI=NULL); + + void mouseClick(int x, int y, MouseButton mouseButton); + void mouseMove(int x, int y, const MouseState *mouseState); + void render(); + //virtual void keyDown(SDL_KeyboardEvent key); + virtual void keyPress(SDL_KeyboardEvent c); + //virtual bool isInSpecialKeyCaptureEvent(); + + virtual void reloadUI(); + + +private: + void saveConfig(); + void setActiveInputLable(GraphicLabel* newLable); + void showMessageBox(const string &text, const string &header, bool toggle); +}; + +}}//end namespace + +#endif diff --git a/source/glest_game/menu/menu_state_options_sound.cpp b/source/glest_game/menu/menu_state_options_sound.cpp new file mode 100644 index 00000000..f54171be --- /dev/null +++ b/source/glest_game/menu/menu_state_options_sound.cpp @@ -0,0 +1,461 @@ +// ============================================================== +// 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 "menu_state_options_sound.h" + +#include "renderer.h" +#include "game.h" +#include "program.h" +#include "sound_renderer.h" +#include "core_data.h" +#include "config.h" +#include "menu_state_root.h" +#include "menu_state_options.h" +#include "util.h" +#include "menu_state_keysetup.h" +#include "menu_state_options_graphics.h" +#include "menu_state_options_network.h" +#include "menu_state_options_sound.h" +#include "string_utils.h" +#include "metrics.h" +#include "leak_dumper.h" + +using namespace Shared::Util; + +namespace Glest{ namespace Game{ + +// ===================================================== +// class MenuStateOptions +// ===================================================== +MenuStateOptionsSound::MenuStateOptionsSound(Program *program, MainMenu *mainMenu, ProgramState **parentUI): + MenuState(program, mainMenu, "config") +{ + try { + containerName = "Options"; + this->parentUI=parentUI; + Lang &lang= Lang::getInstance(); + Config &config= Config::getInstance(); + this->console.setOnlyChatMessagesInStoredLines(false); + + int leftLabelStart=50; + int leftColumnStart=leftLabelStart+180; + int rightLabelStart=450; + int rightColumnStart=rightLabelStart+280; + int buttonRowPos=50; + int buttonStartPos=170; + int captionOffset=75; + int currentLabelStart=leftLabelStart; + int currentColumnStart=leftColumnStart; + int currentLine=700; + int lineOffset=27; + int tabButtonWidth=200; + int tabButtonHeight=30; + + mainMessageBox.registerGraphicComponent(containerName,"mainMessageBox"); + mainMessageBox.init(lang.get("Ok")); + mainMessageBox.setEnabled(false); + mainMessageBoxState=0; + + buttonAudioSection.registerGraphicComponent(containerName,"buttonAudioSection"); + buttonAudioSection.init(0, 700,tabButtonWidth,tabButtonHeight+20); + buttonAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonAudioSection.setText(lang.get("Audio")); + // Video Section + buttonVideoSection.registerGraphicComponent(containerName,"labelVideoSection"); + buttonVideoSection.init(200, 720,tabButtonWidth,tabButtonHeight); + buttonVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonVideoSection.setText(lang.get("Video")); + //currentLine-=lineOffset; + //MiscSection + buttonMiscSection.registerGraphicComponent(containerName,"labelMiscSection"); + buttonMiscSection.init(400, 720,tabButtonWidth,tabButtonHeight); + buttonMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonMiscSection.setText(lang.get("Misc")); + //NetworkSettings + buttonNetworkSettings.registerGraphicComponent(containerName,"labelNetworkSettingsSection"); + buttonNetworkSettings.init(600, 720,tabButtonWidth,tabButtonHeight); + buttonNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonNetworkSettings.setText(lang.get("Network")); + + //KeyboardSetup + buttonKeyboardSetup.registerGraphicComponent(containerName,"buttonKeyboardSetup"); + buttonKeyboardSetup.init(800, 720,tabButtonWidth,tabButtonHeight); + buttonKeyboardSetup.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonKeyboardSetup.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonKeyboardSetup.setText(lang.get("Keyboardsetup")); + + currentLine=650; // reset line pos + currentLabelStart=leftLabelStart; // set to right side + currentColumnStart=leftColumnStart; // set to right side + + //soundboxes + labelSoundFactory.registerGraphicComponent(containerName,"labelSoundFactory"); + labelSoundFactory.init(currentLabelStart, currentLine); + labelSoundFactory.setText(lang.get("SoundAndMusic")); + + listBoxSoundFactory.registerGraphicComponent(containerName,"listBoxSoundFactory"); + listBoxSoundFactory.init(currentColumnStart, currentLine, 100); + listBoxSoundFactory.pushBackItem("None"); + listBoxSoundFactory.pushBackItem("OpenAL"); + // deprecated as of 3.6.1 + //#ifdef WIN32 + //listBoxSoundFactory.pushBackItem("DirectSound8"); + //#endif + + listBoxSoundFactory.setSelectedItem(config.getString("FactorySound")); + currentLine-=lineOffset; + + labelVolumeFx.registerGraphicComponent(containerName,"labelVolumeFx"); + labelVolumeFx.init(currentLabelStart, currentLine); + labelVolumeFx.setText(lang.get("FxVolume")); + + listBoxVolumeFx.registerGraphicComponent(containerName,"listBoxVolumeFx"); + listBoxVolumeFx.init(currentColumnStart, currentLine, 80); + currentLine-=lineOffset; + + labelVolumeAmbient.registerGraphicComponent(containerName,"labelVolumeAmbient"); + labelVolumeAmbient.init(currentLabelStart, currentLine); + + listBoxVolumeAmbient.registerGraphicComponent(containerName,"listBoxVolumeAmbient"); + listBoxVolumeAmbient.init(currentColumnStart, currentLine, 80); + labelVolumeAmbient.setText(lang.get("AmbientVolume")); + currentLine-=lineOffset; + + labelVolumeMusic.registerGraphicComponent(containerName,"labelVolumeMusic"); + labelVolumeMusic.init(currentLabelStart, currentLine); + + listBoxVolumeMusic.registerGraphicComponent(containerName,"listBoxVolumeMusic"); + listBoxVolumeMusic.init(currentColumnStart, currentLine, 80); + labelVolumeMusic.setText(lang.get("MusicVolume")); + currentLine-=lineOffset; + + for(int i=0; i<=100; i+=5){ + listBoxVolumeFx.pushBackItem(intToStr(i)); + listBoxVolumeAmbient.pushBackItem(intToStr(i)); + listBoxVolumeMusic.pushBackItem(intToStr(i)); + } + listBoxVolumeFx.setSelectedItem(intToStr(config.getInt("SoundVolumeFx")/5*5)); + listBoxVolumeAmbient.setSelectedItem(intToStr(config.getInt("SoundVolumeAmbient")/5*5)); + listBoxVolumeMusic.setSelectedItem(intToStr(config.getInt("SoundVolumeMusic")/5*5)); + + currentLine-=lineOffset/2; + + + + ////////////////////////////////////////////////////////////////// + ///////// RIGHT SIDE + ////////////////////////////////////////////////////////////////// + + currentLine=700; // reset line pos + currentLabelStart=rightLabelStart; // set to right side + currentColumnStart=rightColumnStart; // set to right side + + + // buttons + buttonOk.registerGraphicComponent(containerName,"buttonOk"); + buttonOk.init(buttonStartPos, buttonRowPos, 100); + buttonOk.setText(lang.get("Save")); + buttonReturn.setText(lang.get("Return")); + + buttonReturn.registerGraphicComponent(containerName,"buttonAbort"); + buttonReturn.init(buttonStartPos+110, buttonRowPos, 100); + + GraphicComponent::applyAllCustomProperties(containerName); + } + catch(exception &e) { + SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error loading options: %s\n",__FILE__,__FUNCTION__,__LINE__,e.what()); + throw megaglest_runtime_error(string("Error loading options msg: ") + e.what()); + } +} + +void MenuStateOptionsSound::reloadUI() { + Lang &lang= Lang::getInstance(); + + console.resetFonts(); + mainMessageBox.init(lang.get("Ok")); + + buttonAudioSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonAudioSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonAudioSection.setText(lang.get("Audio")); + + buttonVideoSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonVideoSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonVideoSection.setText(lang.get("Video")); + + buttonMiscSection.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonMiscSection.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonMiscSection.setText(lang.get("Misc")); + + buttonNetworkSettings.setFont(CoreData::getInstance().getMenuFontVeryBig()); + buttonNetworkSettings.setFont3D(CoreData::getInstance().getMenuFontVeryBig3D()); + buttonNetworkSettings.setText(lang.get("Network")); + + labelSoundFactory.setText(lang.get("SoundAndMusic")); + + std::vector listboxData; + listboxData.push_back("None"); + listboxData.push_back("OpenAL"); +// deprecated as of 3.6.1 +//#ifdef WIN32 +// listboxData.push_back("DirectSound8"); +//#endif + + listBoxSoundFactory.setItems(listboxData); + + labelVolumeFx.setText(lang.get("FxVolume")); + + labelVolumeAmbient.setText(lang.get("AmbientVolume")); + labelVolumeMusic.setText(lang.get("MusicVolume")); + + + listboxData.clear(); + + buttonOk.setText(lang.get("Save")); + buttonReturn.setText(lang.get("Return")); + + GraphicComponent::reloadFontsForRegisterGraphicComponents(containerName); +} + + + +void MenuStateOptionsSound::showMessageBox(const string &text, const string &header, bool toggle){ + if(!toggle){ + mainMessageBox.setEnabled(false); + } + + if(!mainMessageBox.getEnabled()){ + mainMessageBox.setText(text); + mainMessageBox.setHeader(header); + mainMessageBox.setEnabled(true); + } + else{ + mainMessageBox.setEnabled(false); + } +} + + +void MenuStateOptionsSound::mouseClick(int x, int y, MouseButton mouseButton){ + + Config &config= Config::getInstance(); + CoreData &coreData= CoreData::getInstance(); + SoundRenderer &soundRenderer= SoundRenderer::getInstance(); + + if(mainMessageBox.getEnabled()) { + int button= 0; + if(mainMessageBox.mouseClick(x, y, button)) { + soundRenderer.playFx(coreData.getClickSoundA()); + if(button == 0) { + if(mainMessageBoxState == 1) { + mainMessageBoxState=0; + mainMessageBox.setEnabled(false); + saveConfig(); + + Lang &lang= Lang::getInstance(); + mainMessageBox.init(lang.get("Ok")); + mainMenu->setState(new MenuStateOptions(program, mainMenu)); + } + else { + mainMessageBox.setEnabled(false); + + Lang &lang= Lang::getInstance(); + mainMessageBox.init(lang.get("Ok")); + } + } + else { + if(mainMessageBoxState == 1) { + mainMessageBoxState=0; + mainMessageBox.setEnabled(false); + + Lang &lang= Lang::getInstance(); + mainMessageBox.init(lang.get("Ok")); + + + this->mainMenu->init(); + } + } + } + } + else if(buttonOk.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + saveConfig(); + //mainMenu->setState(new MenuStateOptions(program, mainMenu)); + return; + } + else if(buttonReturn.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + if(this->parentUI != NULL) { + *this->parentUI = NULL; + delete *this->parentUI; + } + mainMenu->setState(new MenuStateRoot(program, mainMenu)); + return; + } + else if(buttonKeyboardSetup.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + //mainMenu->setState(new MenuStateKeysetup(program, mainMenu)); // open keyboard shortcuts setup screen + //mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu)); // open keyboard shortcuts setup screen + //mainMenu->setState(new MenuStateOptionsNetwork(program, mainMenu)); // open keyboard shortcuts setup screen + mainMenu->setState(new MenuStateKeysetup(program, mainMenu)); // open keyboard shortcuts setup screen + //showMessageBox("Not implemented yet", "Keyboard setup", false); + return; + } + else if(buttonAudioSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + //mainMenu->setState(new MenuStateOptionsSound(program, mainMenu)); // open keyboard shortcuts setup screen + return; + } + else if(buttonNetworkSettings.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsNetwork(program, mainMenu)); // open keyboard shortcuts setup screen + return; + } + else if(buttonMiscSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptions(program, mainMenu)); // open keyboard shortcuts setup screen + return; + } + else if(buttonVideoSection.mouseClick(x, y)){ + soundRenderer.playFx(coreData.getClickSoundA()); + mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu)); // open keyboard shortcuts setup screen + return; + } + else + { + listBoxSoundFactory.mouseClick(x, y); + listBoxVolumeFx.mouseClick(x, y); + listBoxVolumeAmbient.mouseClick(x, y); + listBoxVolumeMusic.mouseClick(x, y); + } +} + +void MenuStateOptionsSound::mouseMove(int x, int y, const MouseState *ms){ + if (mainMessageBox.getEnabled()) { + mainMessageBox.mouseMove(x, y); + } + buttonOk.mouseMove(x, y); + buttonReturn.mouseMove(x, y); + buttonKeyboardSetup.mouseMove(x, y); + buttonAudioSection.mouseMove(x, y); + buttonNetworkSettings.mouseMove(x, y); + buttonMiscSection.mouseMove(x, y); + buttonVideoSection.mouseMove(x, y); + + listBoxSoundFactory.mouseMove(x, y); + listBoxVolumeFx.mouseMove(x, y); + listBoxVolumeAmbient.mouseMove(x, y); + listBoxVolumeMusic.mouseMove(x, y); +} + +//bool MenuStateOptionsSound::isInSpecialKeyCaptureEvent() { +// return (activeInputLabel != NULL); +//} +// +//void MenuStateOptionsSound::keyDown(SDL_KeyboardEvent key) { +// if(activeInputLabel != NULL) { +// keyDownEditLabel(key, &activeInputLabel); +// } +//} + +void MenuStateOptionsSound::keyPress(SDL_KeyboardEvent c) { +// if(activeInputLabel != NULL) { +// //printf("[%d]\n",c); fflush(stdout); +// if( &labelPlayerName == activeInputLabel || +// &labelTransifexUser == activeInputLabel || +// &labelTransifexPwd == activeInputLabel || +// &labelTransifexI18N == activeInputLabel) { +// keyPressEditLabel(c, &activeInputLabel); +// } +// } +// else { + Config &configKeys = Config::getInstance(std::pair(cfgMainKeys,cfgUserKeys)); + if(isKeyPressed(configKeys.getSDLKey("SaveGUILayout"),c) == true) { + GraphicComponent::saveAllCustomProperties(containerName); + //Lang &lang= Lang::getInstance(); + //console.addLine(lang.get("GUILayoutSaved") + " [" + (saved ? lang.get("Yes") : lang.get("No"))+ "]"); + } +// } +} + +void MenuStateOptionsSound::render(){ + Renderer &renderer= Renderer::getInstance(); + + if(mainMessageBox.getEnabled()){ + renderer.renderMessageBox(&mainMessageBox); + } + else + { + renderer.renderButton(&buttonOk); + renderer.renderButton(&buttonReturn); + renderer.renderButton(&buttonKeyboardSetup); + renderer.renderButton(&buttonVideoSection); + renderer.renderButton(&buttonAudioSection); + renderer.renderButton(&buttonMiscSection); + renderer.renderButton(&buttonNetworkSettings); + renderer.renderListBox(&listBoxSoundFactory); + renderer.renderLabel(&labelSoundFactory); + + + renderer.renderListBox(&listBoxVolumeFx); + renderer.renderLabel(&labelVolumeFx); + renderer.renderListBox(&listBoxVolumeAmbient); + renderer.renderLabel(&labelVolumeAmbient); + renderer.renderListBox(&listBoxVolumeMusic); + renderer.renderLabel(&labelVolumeMusic); + + + + } + + renderer.renderConsole(&console,false,true); + if(program != NULL) program->renderProgramMsgBox(); +} + +void MenuStateOptionsSound::saveConfig(){ + Config &config= Config::getInstance(); + Lang &lang= Lang::getInstance(); + setActiveInputLable(NULL); + + config.setString("FactorySound", listBoxSoundFactory.getSelectedItem()); + config.setString("SoundVolumeFx", listBoxVolumeFx.getSelectedItem()); + config.setString("SoundVolumeAmbient", listBoxVolumeAmbient.getSelectedItem()); + CoreData::getInstance().getMenuMusic()->setVolume(strToInt(listBoxVolumeMusic.getSelectedItem())/100.f); + config.setString("SoundVolumeMusic", listBoxVolumeMusic.getSelectedItem()); + + config.save(); + + if(config.getBool("DisableLuaSandbox","false") == true) { + LuaScript::setDisableSandbox(true); + } + + SoundRenderer &soundRenderer= SoundRenderer::getInstance(); + soundRenderer.stopAllSounds(); + program->stopSoundSystem(); + soundRenderer.init(program->getWindow()); + soundRenderer.loadConfig(); + soundRenderer.setMusicVolume(CoreData::getInstance().getMenuMusic()); + program->startSoundSystem(); + + if(CoreData::getInstance().hasMainMenuVideoFilename() == false) { + soundRenderer.playMusic(CoreData::getInstance().getMenuMusic()); + } + + Renderer::getInstance().loadConfig(); + console.addLine(lang.get("SettingsSaved")); +} + +void MenuStateOptionsSound::setActiveInputLable(GraphicLabel *newLable) { +} + +}}//end namespace diff --git a/source/glest_game/menu/menu_state_options_sound.h b/source/glest_game/menu/menu_state_options_sound.h new file mode 100644 index 00000000..c2bf1773 --- /dev/null +++ b/source/glest_game/menu/menu_state_options_sound.h @@ -0,0 +1,74 @@ +// ============================================================== +// 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 +// ============================================================== + +#ifndef _GLEST_GAME_MENUSTATEOPTIONS_SOUND_H_ +#define _GLEST_GAME_MENUSTATEOPTIONS_SOUND_H_ + +#include "main_menu.h" +#include "leak_dumper.h" + +namespace Glest{ namespace Game{ + +// =============================== +// class MenuStateOptionsSound +// =============================== + +class MenuStateOptionsSound: public MenuState{ +private: + + GraphicButton buttonOk; + GraphicButton buttonReturn; + + GraphicButton buttonKeyboardSetup; // configure the keyboard + GraphicButton buttonVideoSection; + GraphicButton buttonAudioSection; + GraphicButton buttonMiscSection; + GraphicButton buttonNetworkSettings; + + GraphicLabel labelSoundFactory; + GraphicListBox listBoxSoundFactory; + + GraphicLabel labelVolumeFx; + GraphicListBox listBoxVolumeFx; + + GraphicLabel labelVolumeAmbient; + GraphicListBox listBoxVolumeAmbient; + + GraphicLabel labelVolumeMusic; + GraphicListBox listBoxVolumeMusic; + + GraphicMessageBox mainMessageBox; + int mainMessageBoxState; + + ProgramState **parentUI; + +public: + MenuStateOptionsSound(Program *program, MainMenu *mainMenu, ProgramState **parentUI=NULL); + + void mouseClick(int x, int y, MouseButton mouseButton); + void mouseMove(int x, int y, const MouseState *mouseState); + void render(); + //virtual void keyDown(SDL_KeyboardEvent key); + virtual void keyPress(SDL_KeyboardEvent c); + //virtual bool isInSpecialKeyCaptureEvent(); + + virtual void reloadUI(); + + +private: + void saveConfig(); + void setActiveInputLable(GraphicLabel* newLable); + void showMessageBox(const string &text, const string &header, bool toggle); +}; + +}}//end namespace + +#endif