2009-12-29 23:18:24 +00:00
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers , whose names
* are too numerous to list here . Please refer to the COPYRIGHT
* file distributed with this source distribution .
*
2021-12-26 18:47:58 +01:00
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
2014-02-18 02:34:22 +01:00
*
2009-12-29 23:18:24 +00:00
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2014-02-18 02:34:22 +01:00
*
2009-12-29 23:18:24 +00:00
* You should have received a copy of the GNU General Public License
2021-12-26 18:47:58 +01:00
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
2009-12-29 23:18:24 +00:00
*
*/
# include "mohawk/mohawk.h"
# include "mohawk/dialogs.h"
2010-11-16 10:19:01 +00:00
# include "gui/gui-manager.h"
2020-03-27 19:45:25 +01:00
# include "gui/message.h"
2016-02-20 17:33:13 +01:00
# include "gui/saveload.h"
2020-03-22 15:19:56 +01:00
# include "gui/ThemeEval.h"
2011-04-24 11:34:27 +03:00
# include "gui/widget.h"
2017-02-15 06:30:27 +01:00
# include "gui/widgets/popup.h"
2020-03-22 15:19:56 +01:00
# include "common/gui_options.h"
2011-04-24 11:34:27 +03:00
# include "common/system.h"
2010-06-15 10:57:47 +00:00
# include "common/translation.h"
2009-12-29 23:18:24 +00:00
2011-03-28 15:20:30 -04:00
# ifdef ENABLE_MYST
# include "mohawk/myst.h"
2020-03-22 15:19:56 +01:00
# include "mohawk/myst_actions.h"
2018-05-27 21:39:15 +02:00
# include "mohawk/myst_scripts.h"
2020-08-25 17:45:31 +05:30
# include "mohawk/myst_metaengine.h"
2011-03-28 15:20:30 -04:00
# endif
2011-03-28 23:41:32 -04:00
# ifdef ENABLE_RIVEN
# include "mohawk/riven.h"
2017-02-15 06:30:27 +01:00
# include "mohawk/riven_graphics.h"
2020-08-25 17:45:31 +05:30
# include "mohawk/riven_metaengine.h"
2011-03-28 23:41:32 -04:00
# endif
2009-12-29 23:18:24 +00:00
namespace Mohawk {
// This used to have GUI::Dialog("MohawkDummyDialog"), but that doesn't work with the gui branch merge :P (Sorry, Tanoku!)
2020-07-02 04:53:38 +05:30
InfoDialog : : InfoDialog ( MohawkEngine * vm , const Common : : U32String & message ) : _vm ( vm ) , GUI : : Dialog ( 0 , 0 , 1 , 1 ) , _message ( message ) {
2009-12-29 23:18:24 +00:00
_backgroundType = GUI : : ThemeEngine : : kDialogBackgroundSpecial ;
2010-01-25 01:39:44 +00:00
2011-02-14 12:49:04 +01:00
_text = new GUI : : StaticTextWidget ( this , 0 , 0 , 10 , 10 , _message , Graphics : : kTextAlignCenter ) ;
2009-12-29 23:18:24 +00:00
}
2020-07-02 04:53:38 +05:30
void InfoDialog : : setInfoText ( const Common : : U32String & message ) {
2009-12-29 23:18:24 +00:00
_message = message ;
_text - > setLabel ( _message ) ;
}
void InfoDialog : : reflowLayout ( ) {
const int screenW = g_system - > getOverlayWidth ( ) ;
const int screenH = g_system - > getOverlayHeight ( ) ;
2010-01-25 01:39:44 +00:00
2009-12-29 23:18:24 +00:00
int width = g_gui . getStringWidth ( _message ) + 16 ;
int height = g_gui . getFontHeight ( ) + 8 ;
2010-01-25 01:39:44 +00:00
2009-12-29 23:18:24 +00:00
_w = width ;
_h = height ;
_x = ( screenW - width ) / 2 ;
_y = ( screenH - height ) / 2 ;
2010-01-25 01:39:44 +00:00
2011-02-14 12:49:04 +01:00
_text - > setSize ( _w , _h ) ;
2009-12-29 23:18:24 +00:00
}
2020-07-02 04:53:38 +05:30
PauseDialog : : PauseDialog ( MohawkEngine * vm , const Common : : U32String & message ) : InfoDialog ( vm , message ) {
2009-12-29 23:18:24 +00:00
}
void PauseDialog : : handleKeyDown ( Common : : KeyState state ) {
if ( state . ascii = = ' ' )
close ( ) ;
else
InfoDialog : : handleKeyDown ( state ) ;
}
enum {
2011-05-15 14:53:05 +02:00
kDropCmd = ' DROP ' ,
2020-03-22 15:19:56 +01:00
kMapCmd = ' SMAP ' ,
kMenuCmd = ' MENU '
2009-12-29 23:18:24 +00:00
} ;
2016-07-04 20:40:44 +02:00
# ifdef ENABLE_MYST
2020-03-22 15:19:56 +01:00
MystOptionsWidget : : MystOptionsWidget ( GuiObject * boss , const Common : : String & name , const Common : : String & domain ) :
2021-01-06 21:21:18 +00:00
OptionsContainerWidget ( boss , name , " MystGameOptionsDialog " , false , domain ) ,
2020-03-22 15:19:56 +01:00
_zipModeCheckbox ( nullptr ) ,
_transitionsCheckbox ( nullptr ) ,
_mystFlyByCheckbox ( nullptr ) ,
2021-06-12 20:07:18 +02:00
_spaceshipFuzzyLogicCheckbox ( nullptr ) ,
2021-06-13 21:15:41 +02:00
_addCdromDelayCheckbox ( nullptr ) ,
2020-03-27 19:45:25 +01:00
_languagePopUp ( nullptr ) ,
2020-03-22 15:19:56 +01:00
_dropPageButton ( nullptr ) ,
_showMapButton ( nullptr ) ,
_returnToMenuButton ( nullptr ) {
2020-03-27 19:45:25 +01:00
Common : : String guiOptions = ConfMan . get ( " guioptions " , _domain ) ;
bool isDemo = checkGameGUIOption ( GAMEOPTION_DEMO , guiOptions ) ;
bool isME = checkGameGUIOption ( GAMEOPTION_ME , guiOptions ) ;
2020-03-22 15:19:56 +01:00
2020-03-27 19:45:25 +01:00
if ( ! isDemo ) {
2020-03-22 15:19:56 +01:00
// I18N: Option for fast scene switching
2021-06-13 14:54:46 +02:00
_zipModeCheckbox = new GUI : : CheckboxWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.ZipMode " , _ ( " ~Z~ip Mode Activated " ) ,
2021-06-24 11:29:14 +01:00
_ ( " When activated, clicking on an item or area with the lightning bolt cursor takes you directly there, skipping intermediate screens. You can only 'Zip' to a precise area you've already been. " ) ) ;
2020-03-22 15:19:56 +01:00
}
2018-06-18 21:42:34 +02:00
2021-06-13 14:54:46 +02:00
_transitionsCheckbox = new GUI : : CheckboxWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.Transistions " , _ ( " ~T~ransitions Enabled " ) ,
_ ( " Toggle screen transitions on or off. Turning off screen transitions will enable you to navigate more quickly through the game. " ) ) ;
2018-04-29 19:22:50 +02:00
2020-03-27 19:45:25 +01:00
if ( isME ) {
2021-01-06 21:21:18 +00:00
_mystFlyByCheckbox = new GUI : : CheckboxWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.PlayMystFlyBy " , _ ( " Play the Myst fly by movie " ) ,
2021-06-13 14:54:46 +02:00
_ ( " The Myst fly by movie was not played by the original engine. " ) ) ;
2020-03-22 15:19:56 +01:00
}
2016-07-04 20:40:44 +02:00
2021-06-12 20:07:18 +02:00
if ( ! isDemo ) {
/**
* I18N :
* This Option is for hard - of - hearing .
* It makes it easier to solve the spaceship puzzle .
* Normally game uses strict binary logic here .
* We change it to use fuzzy logic .
* By default the option is off .
*/
2021-08-07 17:47:13 +02:00
_spaceshipFuzzyLogicCheckbox = new GUI : : CheckboxWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.FuzzyMode " , _ ( " Improve Selenitic Age puzzle ~a~ccessibility " ) ,
_ ( " Allow solving Selenitic Age audio puzzles with more error margin. " ) ) ;
2021-06-12 20:07:18 +02:00
}
2021-08-08 11:11:08 +02:00
_addCdromDelayCheckbox = new GUI : : CheckboxWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.CdromDelay " , _ ( " Simulate loading times of old CD drives " ) ,
_ ( " Simulate loading times of old CD-ROM drives by adding a random delay during scene transitions. " ) ) ;
2021-06-13 21:15:41 +02:00
2020-03-22 15:19:56 +01:00
if ( isInGame ( ) ) {
MohawkEngine_Myst * vm = static_cast < MohawkEngine_Myst * > ( g_engine ) ;
assert ( vm ) ;
2016-07-04 20:40:44 +02:00
2020-03-22 15:19:56 +01:00
// I18N: Drop book page
2021-01-06 21:21:18 +00:00
_dropPageButton = new GUI : : ButtonWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.DropPage " , _ ( " ~D~rop Page " ) , Common : : U32String ( ) , kDropCmd ) ;
2018-06-18 21:42:34 +02:00
2020-03-22 15:19:56 +01:00
// Myst ME only has maps
2020-03-27 20:14:46 +01:00
if ( vm - > isGameVariant ( GF_ME ) ) {
2021-01-06 21:21:18 +00:00
_showMapButton = new GUI : : ButtonWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.ShowMap " , _ ( " Show ~M~ap " ) , Common : : U32String ( ) , kMapCmd ) ;
2020-03-22 15:19:56 +01:00
}
2016-07-04 20:40:44 +02:00
2020-03-22 15:19:56 +01:00
// Myst demo only has a menu
2020-03-27 20:14:46 +01:00
if ( vm - > isGameVariant ( GF_DEMO ) ) {
2021-01-06 21:21:18 +00:00
_returnToMenuButton = new GUI : : ButtonWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.MainMenu " , _ ( " Main Men~u~ " ) , Common : : U32String ( ) , kMenuCmd ) ;
2020-03-22 15:19:56 +01:00
}
2020-03-27 19:45:25 +01:00
2020-03-27 20:14:46 +01:00
if ( vm - > isGameVariant ( GF_25TH ) ) {
2021-01-06 21:21:18 +00:00
GUI : : StaticTextWidget * languageCaption = new GUI : : StaticTextWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.LanguageDesc " , _ ( " Language: " ) ) ;
2020-03-27 19:45:25 +01:00
languageCaption - > setAlign ( Graphics : : kTextAlignRight ) ;
2021-01-06 21:21:18 +00:00
_languagePopUp = new GUI : : PopUpWidget ( widgetsBoss ( ) , " MystGameOptionsDialog.Language " ) ;
2020-03-27 19:45:25 +01:00
2020-08-07 23:59:31 +05:30
const MystLanguage * languages = MohawkMetaEngine_Myst : : listLanguages ( ) ;
2020-03-27 19:45:25 +01:00
while ( languages - > language ! = Common : : UNK_LANG ) {
2020-07-04 03:13:05 +05:30
_languagePopUp - > appendEntry ( Common : : getLanguageDescription ( languages - > language ) , languages - > language ) ;
2020-03-27 19:45:25 +01:00
languages + + ;
}
}
2020-03-22 15:19:56 +01:00
}
2016-07-04 20:40:44 +02:00
}
2020-03-22 15:19:56 +01:00
MystOptionsWidget : : ~ MystOptionsWidget ( ) {
}
2016-07-04 20:40:44 +02:00
2020-03-22 15:19:56 +01:00
void MystOptionsWidget : : defineLayout ( GUI : : ThemeEval & layouts , const Common : : String & layoutName , const Common : : String & overlayedLayout ) const {
layouts . addDialog ( layoutName , overlayedLayout )
. addLayout ( GUI : : ThemeLayout : : kLayoutVertical )
. addPadding ( 16 , 16 , 16 , 16 )
. addWidget ( " ZipMode " , " Checkbox " )
. addWidget ( " Transistions " , " Checkbox " )
. addWidget ( " PlayMystFlyBy " , " Checkbox " )
2021-06-12 20:07:18 +02:00
. addWidget ( " FuzzyMode " , " Checkbox " )
2021-06-13 21:15:41 +02:00
. addWidget ( " CdromDelay " , " Checkbox " )
2020-03-27 19:45:25 +01:00
. addLayout ( GUI : : ThemeLayout : : kLayoutHorizontal )
. addPadding ( 0 , 0 , 0 , 0 )
. addWidget ( " LanguageDesc " , " OptionsLabel " )
. addWidget ( " Language " , " PopUp " )
. closeLayout ( )
2020-03-22 15:19:56 +01:00
. addLayout ( GUI : : ThemeLayout : : kLayoutHorizontal )
. addPadding ( 0 , 0 , 16 , 0 )
. addSpace ( )
. addWidget ( " DropPage " , " Button " )
. addWidget ( " ShowMap " , " Button " )
. addWidget ( " MainMenu " , " Button " )
. addSpace ( )
. closeLayout ( )
. closeLayout ( )
. closeDialog ( ) ;
}
2016-07-04 20:40:44 +02:00
2020-03-22 15:19:56 +01:00
bool MystOptionsWidget : : isInGame ( ) const {
return _domain . equals ( ConfMan . getActiveDomainName ( ) ) ;
}
2016-07-04 20:40:44 +02:00
2020-03-22 15:19:56 +01:00
void MystOptionsWidget : : load ( ) {
if ( _zipModeCheckbox ) {
_zipModeCheckbox - > setState ( ConfMan . getBool ( " zip_mode " , _domain ) ) ;
2018-05-17 20:46:42 +02:00
}
2016-07-04 20:40:44 +02:00
2020-03-22 15:19:56 +01:00
_transitionsCheckbox - > setState ( ConfMan . getBool ( " transition_mode " , _domain ) ) ;
2016-07-04 20:40:44 +02:00
2020-03-22 15:19:56 +01:00
if ( _mystFlyByCheckbox ) {
_mystFlyByCheckbox - > setState ( ConfMan . getBool ( " playmystflyby " , _domain ) ) ;
2018-04-29 19:22:50 +02:00
}
2018-06-18 21:42:34 +02:00
2021-06-12 20:07:18 +02:00
if ( _spaceshipFuzzyLogicCheckbox ) {
_spaceshipFuzzyLogicCheckbox - > setState ( ConfMan . getBool ( " fuzzy_logic " , _domain ) ) ;
}
2021-06-13 21:15:41 +02:00
if ( _addCdromDelayCheckbox ) {
_addCdromDelayCheckbox - > setState ( ConfMan . getBool ( " cdromdelay " , _domain ) ) ;
}
2020-03-27 19:45:25 +01:00
if ( _languagePopUp ) {
Common : : Language language = Common : : parseLanguage ( ConfMan . get ( " language " , _domain ) ) ;
const MystLanguage * languageDesc = MohawkEngine_Myst : : getLanguageDesc ( language ) ;
if ( languageDesc ) {
_languagePopUp - > setSelectedTag ( languageDesc - > language ) ;
}
}
2020-03-22 15:19:56 +01:00
if ( isInGame ( ) ) {
MohawkEngine_Myst * vm = static_cast < MohawkEngine_Myst * > ( g_engine ) ;
assert ( vm ) ;
2018-06-18 21:42:34 +02:00
2020-03-22 15:19:56 +01:00
_dropPageButton - > setEnabled ( vm - > canDoAction ( kMystActionDropPage ) ) ;
2018-06-18 21:42:34 +02:00
2020-03-22 15:19:56 +01:00
if ( _showMapButton ) {
_showMapButton - > setEnabled ( vm - > canDoAction ( kMystActionShowMap ) ) ;
2018-06-18 21:42:34 +02:00
}
2020-03-22 15:19:56 +01:00
if ( _returnToMenuButton ) {
// Return to menu button is not enabled on the menu
_returnToMenuButton - > setEnabled ( vm - > canDoAction ( kMystActionOpenMainMenu ) ) ;
}
2018-06-18 21:42:34 +02:00
}
}
2020-03-22 15:19:56 +01:00
bool MystOptionsWidget : : save ( ) {
if ( _zipModeCheckbox ) {
ConfMan . setBool ( " zip_mode " , _zipModeCheckbox - > getState ( ) , _domain ) ;
}
2018-06-18 21:42:34 +02:00
2020-03-22 15:19:56 +01:00
ConfMan . setBool ( " transition_mode " , _transitionsCheckbox - > getState ( ) , _domain ) ;
if ( _mystFlyByCheckbox ) {
ConfMan . setBool ( " playmystflyby " , _mystFlyByCheckbox - > getState ( ) , _domain ) ;
}
2021-06-12 20:07:18 +02:00
if ( _spaceshipFuzzyLogicCheckbox ) {
ConfMan . setBool ( " fuzzy_logic " , _spaceshipFuzzyLogicCheckbox - > getState ( ) , _domain ) ;
}
2021-06-13 21:15:41 +02:00
if ( _addCdromDelayCheckbox ) {
ConfMan . setBool ( " cdromdelay " , _addCdromDelayCheckbox - > getState ( ) , _domain ) ;
}
2020-03-27 19:45:25 +01:00
if ( _languagePopUp ) {
MohawkEngine_Myst * vm = static_cast < MohawkEngine_Myst * > ( g_engine ) ;
assert ( vm ) ;
int32 selectedLanguage = _languagePopUp - > getSelectedTag ( ) ;
const MystLanguage * languageDesc = nullptr ;
if ( selectedLanguage > = 0 ) {
languageDesc = MohawkEngine_Myst : : getLanguageDesc ( static_cast < Common : : Language > ( selectedLanguage ) ) ;
}
Common : : Language newLanguage = Common : : UNK_LANG ;
if ( languageDesc ! = nullptr ) {
newLanguage = languageDesc - > language ;
ConfMan . set ( " language " , Common : : getLanguageCode ( languageDesc - > language ) ) ;
}
Common : : Language currentLanguage = vm - > getLanguage ( ) ;
if ( newLanguage ! = currentLanguage & & vm - > isGameStarted ( ) ) {
GUI : : MessageDialog dialog ( _ ( " The new language will be applied after restarting the game. " ) ) ;
dialog . runModal ( ) ;
}
}
2020-03-22 15:19:56 +01:00
return true ;
2016-02-20 14:40:55 +01:00
}
2020-03-22 15:19:56 +01:00
void MystOptionsWidget : : handleCommand ( GUI : : CommandSender * sender , uint32 cmd , uint32 data ) {
assert ( _parentDialog ) ;
GUI : : CommandSender dialog ( _parentDialog ) ;
2009-12-29 23:18:24 +00:00
switch ( cmd ) {
2011-05-14 19:26:33 +02:00
case kDropCmd :
2020-03-22 15:19:56 +01:00
dialog . sendCommand ( GUI : : kCloseWithResultCmd , kMystActionDropPage ) ;
2011-05-14 19:26:33 +02:00
break ;
2011-05-15 14:53:05 +02:00
case kMapCmd :
2020-03-22 15:19:56 +01:00
dialog . sendCommand ( GUI : : kCloseWithResultCmd , kMystActionShowMap ) ;
2016-02-20 14:30:17 +01:00
break ;
2011-08-14 09:17:14 +02:00
case kMenuCmd :
2020-03-22 15:19:56 +01:00
dialog . sendCommand ( GUI : : kCloseWithResultCmd , kMystActionOpenMainMenu ) ;
2016-02-20 14:30:17 +01:00
break ;
2009-12-30 07:14:09 +00:00
default :
2020-03-22 15:19:56 +01:00
OptionsContainerWidget : : handleCommand ( sender , cmd , data ) ;
2009-12-29 23:18:24 +00:00
}
}
2020-03-22 15:19:56 +01:00
MystMenuDialog : : MystMenuDialog ( Engine * engine ) :
MainMenuDialog ( engine ) {
2019-10-30 05:51:22 +01:00
}
2020-03-22 15:19:56 +01:00
MystMenuDialog : : ~ MystMenuDialog ( ) {
2019-10-30 05:51:22 +01:00
}
2020-03-22 15:19:56 +01:00
void MystMenuDialog : : handleCommand ( GUI : : CommandSender * sender , uint32 cmd , uint32 data ) {
MohawkEngine_Myst * vm = static_cast < MohawkEngine_Myst * > ( _engine ) ;
assert ( vm ) ;
2019-10-30 05:51:22 +01:00
2020-03-22 15:19:56 +01:00
switch ( cmd ) {
case kOptionsCmd : {
GUI : : ConfigDialog configDialog ;
int result = configDialog . runModal ( ) ;
if ( result > kMystActionNone & & result < = kMystActionLast ) {
close ( ) ;
MystEventAction action = static_cast < MystEventAction > ( result ) ;
vm - > scheduleAction ( action ) ;
}
break ;
}
case kQuitCmd :
close ( ) ;
2020-04-08 20:17:25 +02:00
vm - > saveAutosaveIfEnabled ( ) ;
2020-03-22 15:19:56 +01:00
vm - > runCredits ( ) ;
break ;
default :
MainMenuDialog : : handleCommand ( sender , cmd , data ) ;
break ;
}
2019-10-30 05:51:22 +01:00
}
2011-03-28 15:20:30 -04:00
# endif
2011-03-28 23:41:32 -04:00
# ifdef ENABLE_RIVEN
2020-03-22 15:19:56 +01:00
RivenOptionsWidget : : RivenOptionsWidget ( GuiObject * boss , const Common : : String & name , const Common : : String & domain ) :
2020-03-24 19:13:10 +01:00
OptionsContainerWidget ( boss , name , " RivenOptionsDialog " , false , domain ) ,
_languagePopUp ( nullptr ) {
Common : : String guiOptions = ConfMan . get ( " guioptions " , domain ) ;
bool is25th = checkGameGUIOption ( GAMEOPTION_25TH , guiOptions ) ;
2020-03-22 15:19:56 +01:00
2022-02-18 13:10:10 +02:00
_zipModeCheckbox = new GUI : : CheckboxWidget ( widgetsBoss ( ) , " RivenOptionsDialog.ZipMode " , _ ( " ~Z~ip Mode Activated " ) , _ ( " When activated, clicking on an item or area with the lightning bolt cursor takes you directly there, skipping intermediate screens. You can only 'Zip' to a precise area you've already been. " ) ) ;
_waterEffectCheckbox = new GUI : : CheckboxWidget ( widgetsBoss ( ) , " RivenOptionsDialog.WaterEffect " , _ ( " ~W~ater Effect Enabled " ) , _ ( " Toggles the use of QuickTime videos for visual effects related to water surfaces (ripples, waves, etc.). " ) ) ;
2020-03-22 15:19:56 +01:00
2022-02-18 13:10:10 +02:00
GUI : : StaticTextWidget * transitionModeCaption = new GUI : : StaticTextWidget ( widgetsBoss ( ) , " RivenOptionsDialog.TransistionsDesc " , _ ( " Transitions: " ) , _ ( " Adjusts the speed of screen transitions. Disabling screen transitions will enable you to navigate more quickly through the game. " ) ) ;
2020-03-22 15:19:56 +01:00
transitionModeCaption - > setAlign ( Graphics : : kTextAlignRight ) ;
2017-02-15 06:30:27 +01:00
2020-03-22 15:19:56 +01:00
_transitionModePopUp = new GUI : : PopUpWidget ( widgetsBoss ( ) , " RivenOptionsDialog.Transistions " ) ;
2017-02-15 06:30:27 +01:00
_transitionModePopUp - > appendEntry ( _ ( " Disabled " ) , kRivenTransitionModeDisabled ) ;
_transitionModePopUp - > appendEntry ( _ ( " Fastest " ) , kRivenTransitionModeFastest ) ;
_transitionModePopUp - > appendEntry ( _ ( " Normal " ) , kRivenTransitionModeNormal ) ;
_transitionModePopUp - > appendEntry ( _ ( " Best " ) , kRivenTransitionModeBest ) ;
2020-03-24 19:13:10 +01:00
// Only the 25th anniversary edition is multi-language
// Only allow changing the language at run-time, so that there is only one
// language selection drop down in the edit game dialog.
if ( is25th & & g_engine ) {
bool canChangeLanguage = true ;
MohawkEngine_Riven * vm = static_cast < MohawkEngine_Riven * > ( g_engine ) ;
2020-04-08 20:17:25 +02:00
canChangeLanguage = vm - > isInteractive ( ) | | vm - > isInMainMenu ( ) ;
2020-03-24 19:13:10 +01:00
GUI : : StaticTextWidget * languageCaption = new GUI : : StaticTextWidget ( widgetsBoss ( ) , " RivenOptionsDialog.LanguageDesc " , _ ( " Language: " ) ) ;
languageCaption - > setAlign ( Graphics : : kTextAlignRight ) ;
_languagePopUp = new GUI : : PopUpWidget ( widgetsBoss ( ) , " RivenOptionsDialog.Language " ) ;
_languagePopUp - > setEnabled ( canChangeLanguage ) ;
2020-08-07 23:59:31 +05:30
const RivenLanguage * languages = MohawkMetaEngine_Riven : : listLanguages ( ) ;
2020-03-24 19:13:10 +01:00
while ( languages - > language ! = Common : : UNK_LANG ) {
2020-07-04 03:13:05 +05:30
_languagePopUp - > appendEntry ( Common : : getLanguageDescription ( languages - > language ) , languages - > language ) ;
2020-03-24 19:13:10 +01:00
languages + + ;
}
}
2009-12-29 23:18:24 +00:00
}
2020-03-22 15:19:56 +01:00
RivenOptionsWidget : : ~ RivenOptionsWidget ( ) {
2019-10-29 21:23:09 +01:00
}
2020-03-22 15:19:56 +01:00
void RivenOptionsWidget : : defineLayout ( GUI : : ThemeEval & layouts , const Common : : String & layoutName , const Common : : String & overlayedLayout ) const {
layouts . addDialog ( layoutName , overlayedLayout )
. addLayout ( GUI : : ThemeLayout : : kLayoutVertical )
. addPadding ( 16 , 16 , 16 , 16 )
. addWidget ( " ZipMode " , " Checkbox " )
. addWidget ( " WaterEffect " , " Checkbox " )
. addLayout ( GUI : : ThemeLayout : : kLayoutHorizontal )
. addPadding ( 0 , 0 , 0 , 0 )
. addWidget ( " TransistionsDesc " , " OptionsLabel " )
. addWidget ( " Transistions " , " PopUp " )
. closeLayout ( )
2020-03-24 19:13:10 +01:00
. addLayout ( GUI : : ThemeLayout : : kLayoutHorizontal )
. addPadding ( 0 , 0 , 0 , 0 )
. addWidget ( " LanguageDesc " , " OptionsLabel " )
. addWidget ( " Language " , " PopUp " )
. closeLayout ( )
2020-03-22 15:19:56 +01:00
. closeLayout ( )
. closeDialog ( ) ;
2019-10-29 21:23:09 +01:00
}
2020-03-22 15:19:56 +01:00
void RivenOptionsWidget : : load ( ) {
_zipModeCheckbox - > setState ( ConfMan . getBool ( " zip_mode " , _domain ) ) ;
_waterEffectCheckbox - > setState ( ConfMan . getBool ( " water_effects " , _domain ) ) ;
2019-10-29 21:23:09 +01:00
2020-03-22 15:19:56 +01:00
uint32 transitions = ConfMan . getInt ( " transition_mode " , _domain ) ;
_transitionModePopUp - > setSelectedTag ( RivenGraphics : : sanitizeTransitionMode ( transitions ) ) ;
2020-03-24 19:13:10 +01:00
if ( _languagePopUp ) {
Common : : Language language = Common : : parseLanguage ( ConfMan . get ( " language " , _domain ) ) ;
const RivenLanguage * languageDesc = MohawkEngine_Riven : : getLanguageDesc ( language ) ;
if ( languageDesc ) {
_languagePopUp - > setSelectedTag ( languageDesc - > language ) ;
}
}
2019-10-29 21:23:09 +01:00
}
2020-03-22 15:19:56 +01:00
bool RivenOptionsWidget : : save ( ) {
ConfMan . setBool ( " zip_mode " , _zipModeCheckbox - > getState ( ) , _domain ) ;
ConfMan . setBool ( " water_effects " , _waterEffectCheckbox - > getState ( ) , _domain ) ;
ConfMan . setInt ( " transition_mode " , _transitionModePopUp - > getSelectedTag ( ) , _domain ) ;
2009-12-29 23:18:24 +00:00
2020-03-24 19:13:10 +01:00
if ( _languagePopUp ) {
int32 selectedLanguage = _languagePopUp - > getSelectedTag ( ) ;
const RivenLanguage * languageDesc = nullptr ;
if ( selectedLanguage > = 0 ) {
languageDesc = MohawkEngine_Riven : : getLanguageDesc ( static_cast < Common : : Language > ( selectedLanguage ) ) ;
}
if ( languageDesc ! = nullptr ) {
ConfMan . set ( " language " , Common : : getLanguageCode ( languageDesc - > language ) ) ;
}
}
2020-03-22 15:19:56 +01:00
return true ;
2009-12-29 23:18:24 +00:00
}
2011-03-28 23:41:32 -04:00
# endif
2009-12-29 23:18:24 +00:00
} // End of namespace Mohawk