new options menu(s)

This commit is contained in:
Titus Tscharntke 2013-04-21 17:04:36 +00:00
parent 883cfbbd27
commit 1884fc5653
11 changed files with 2435 additions and 1028 deletions

View File

@ -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));
}
}

View File

@ -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);

View File

@ -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;

File diff suppressed because it is too large Load Diff

View File

@ -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<ModeInfo> 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);

View File

@ -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<ModeInfo> ();
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<ModeInfo>::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<Renderer::sCount; ++i){
listBoxShadows.pushBackItem(lang.get(Renderer::shadowsToStr(static_cast<Renderer::Shadows>(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<string> 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<Renderer::sCount; ++i){
listboxData.push_back(lang.get(Renderer::shadowsToStr(static_cast<Renderer::Shadows>(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<ModeInfo>::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<ModeInfo>::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<ConfigType,ConfigType>(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<Renderer::Shadows>(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<ModeInfo>::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

View File

@ -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<ModeInfo> 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

View File

@ -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<ModeInfo> ();
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<std::string> 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<string> 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<Renderer::sCount; ++i){
listboxData.push_back(lang.get(Renderer::shadowsToStr(static_cast<Renderer::Shadows>(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<ConfigType,ConfigType>(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

View File

@ -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

View File

@ -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<string> 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<ConfigType,ConfigType>(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

View File

@ -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