diff --git a/code/ryzom/tools/client/client_config_qt/.hgignore b/code/ryzom/tools/client/client_config_qt/.hgignore
new file mode 100644
index 000000000..2311283fc
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/.hgignore
@@ -0,0 +1,19 @@
+syntax: glob
+
+*.user
+*.sln
+*.ncb
+*.vcproj
+*.suo
+debug
+release
+Win32
+GeneratedFiles
+*.dll
+*.log
+*.cfg
+*.pdb
+*.qm
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/client_config_dialog.cpp b/code/ryzom/tools/client/client_config_qt/client_config_dialog.cpp
new file mode 100644
index 000000000..2f1e2225f
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/client_config_dialog.cpp
@@ -0,0 +1,259 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "client_config_dialog.h"
+
+#include "general_settings_widget.h"
+#include "display_settings_widget.h"
+#include "display_settings_details_widget.h"
+#include "display_settings_advanced_widget.h"
+#include "sound_settings_widget.h"
+#include "sys_info_widget.h"
+#include "sys_info_opengl_widget.h"
+#include "sys_info_d3d_widget.h"
+
+#include "system.h"
+
+#include
+
+CClientConfigDialog::CClientConfigDialog( QWidget *parent ) :
+ QDialog( parent )
+{
+ setupUi( this );
+ connect( buttonBox->button( QDialogButtonBox::Cancel ), SIGNAL( clicked() ), this, SLOT( close() ) );
+ connect( buttonBox->button( QDialogButtonBox::Ok ), SIGNAL( clicked() ), this, SLOT( onClickOK() ) );
+ connect( applyButton, SIGNAL( clicked() ), this, SLOT( onClickApply() ) );
+ connect( defaultButton, SIGNAL( clicked() ), this, SLOT( onClickDefault() ) );
+ connect( playButton, SIGNAL( clicked() ), this, SLOT( onClickPlay() ) );
+ connect( treeWidget, SIGNAL( itemClicked( QTreeWidgetItem *, int ) ),
+ this, SLOT( onClickCategory( QTreeWidgetItem * ) ) );
+
+ // General
+ QTreeWidgetItem *item = treeWidget->topLevelItem( 0 );
+ item->setData( 0, Qt::UserRole, 0 );
+
+ // Display
+ item = treeWidget->topLevelItem( 1 );
+ item->setData( 0, Qt::UserRole, 1 );
+
+ // Display details
+ item = treeWidget->topLevelItem( 1 )->child( 0 );
+ item->setData( 0, Qt::UserRole, 2 );
+
+ // Display advanced
+ item = treeWidget->topLevelItem( 1 )->child( 1 );
+ item->setData( 0, Qt::UserRole, 3 );
+
+ // Sound
+ item = treeWidget->topLevelItem( 2 );
+ item->setData( 0, Qt::UserRole, 4 );
+
+ // System information
+ item = treeWidget->topLevelItem( 3 );
+ item->setData( 0, Qt::UserRole, 5 );
+
+ // OpenGL info
+ item = treeWidget->topLevelItem( 3 )->child( 0 );
+ item->setData( 0, Qt::UserRole, 6 );
+
+ // Direct3D info
+ item = treeWidget->topLevelItem( 3 )->child( 1 );
+ item->setData( 0, Qt::UserRole, 7 );
+
+
+ CategoryStackedWidget->addWidget( new CGeneralSettingsWidget( CategoryStackedWidget ) );
+ CategoryStackedWidget->addWidget( new CDisplaySettingsWidget( CategoryStackedWidget ) );
+ CategoryStackedWidget->addWidget( new CDisplaySettingsDetailsWidget( CategoryStackedWidget ) );
+ CategoryStackedWidget->addWidget( new CDisplaySettingsAdvancedWidget( CategoryStackedWidget ) );
+ CategoryStackedWidget->addWidget( new CSoundSettingsWidget( CategoryStackedWidget ) );
+ CategoryStackedWidget->addWidget( new CSysInfoWidget( CategoryStackedWidget ) );
+ CategoryStackedWidget->addWidget( new CSysInfoOpenGLWidget( CategoryStackedWidget ) );
+ CategoryStackedWidget->addWidget( new CSysInfoD3DWidget( CategoryStackedWidget ) );
+
+ for( sint32 i = 0; i < CategoryStackedWidget->count(); i++ )
+ {
+ QWidget *w = CategoryStackedWidget->widget( i );
+
+ // The sysinfo pages are not derived from CWidgetBase, so they don't have this signal!
+ if( qobject_cast< CWidgetBase * >( w ) == NULL )
+ continue;
+
+ connect( w, SIGNAL( changed() ), this, SLOT( onSomethingChanged() ) );
+ }
+
+ applyButton->setEnabled( false );
+}
+
+CClientConfigDialog::~CClientConfigDialog()
+{
+}
+
+void CClientConfigDialog::closeEvent( QCloseEvent *event )
+{
+ if( isOKToQuit() )
+ event->accept();
+ else
+ event->ignore();
+}
+
+void CClientConfigDialog::changeEvent( QEvent *event )
+{
+ if( event->type() == QEvent::LanguageChange )
+ {
+ int pageIndex = CategoryStackedWidget->currentIndex();
+ // Signals that are emitted on index change need to be disconnected, since retranslation cleans the widget
+ disconnect( treeWidget, SIGNAL( itemClicked( QTreeWidgetItem *, int ) ),
+ this, SLOT( onClickCategory( QTreeWidgetItem * ) ) );
+
+ retranslateUi( this );
+
+ connect( treeWidget, SIGNAL( itemClicked( QTreeWidgetItem *, int ) ),
+ this, SLOT( onClickCategory( QTreeWidgetItem * ) ) );
+
+ CategoryStackedWidget->setCurrentIndex( pageIndex );
+ }
+
+ QDialog::changeEvent( event );
+}
+
+void CClientConfigDialog::onClickOK()
+{
+ saveChanges();
+ // Since we use the apply button's enabled state to check for unsaved changes on quit, we disable it
+ applyButton->setEnabled( false );
+ close();
+}
+
+void CClientConfigDialog::onClickApply()
+{
+ saveChanges();
+ applyButton->setEnabled( false );
+}
+
+void CClientConfigDialog::onClickDefault()
+{
+ CSystem::GetInstance().config.revertToDefault();
+ CSystem::GetInstance().config.save();
+ reloadPages();
+ applyButton->setEnabled( false );
+}
+
+void CClientConfigDialog::onClickPlay()
+{
+ bool started = false;
+
+#ifdef WIN32
+ started = QProcess::startDetached( "ryzom_client_r.exe" );
+ if( !started )
+ QProcess::startDetached( "ryzom_client_rd.exe" );
+ if( !started )
+ QProcess::startDetached( "ryzom_client_d.exe" );
+#else
+ started = QProcess::startDetached( "./ryzom_client_r" );
+ if( !started )
+ QProcess::startDetached( "./ryzom_client_rd" );
+ if( !started )
+ QProcess::startDetached( "./ryzom_client_d" );
+#endif
+
+ onClickOK();
+}
+
+void CClientConfigDialog::onClickCategory( QTreeWidgetItem *item )
+{
+ if( item == NULL )
+ return;
+
+ static const char *iconNames[] =
+ {
+ ":/resources/general_icon.bmp",
+ ":/resources/display_icon.bmp",
+ ":/resources/display_properties_icon.bmp",
+ ":/resources/display_config_icon.bmp",
+ ":/resources/sound_icon.bmp",
+ ":/resources/general_icon.bmp",
+ ":/resources/card_icon.bmp",
+ ":/resources/card_icon.bmp"
+ };
+
+ sint32 index = item->data( 0, Qt::UserRole ).toInt();
+
+ if( ( index < 0 ) || ( index > 7 ) )
+ return;
+
+ CategoryStackedWidget->setCurrentIndex( index );
+ categoryLabel->setText( item->text( 0 ) );
+ topleftIcon->setPixmap( QPixmap( QString::fromUtf8( iconNames[ index ] ) ) );
+}
+
+void CClientConfigDialog::onSomethingChanged()
+{
+ applyButton->setEnabled( true );
+}
+
+void CClientConfigDialog::saveChanges()
+{
+ // First we tell the pages to save their changes into the cached config file
+ for( sint32 i = 0; i < CategoryStackedWidget->count(); i++ )
+ {
+ QWidget *w = CategoryStackedWidget->widget( i );
+ CWidgetBase *wb = qobject_cast< CWidgetBase * >( w );
+
+ // The system information pages are not derived from CWidgetBase, so they can't save!
+ if( wb == NULL )
+ continue;
+
+ wb->save();
+ }
+
+ // Then we write the cache to the disk
+ CSystem::GetInstance().config.save();
+}
+
+void CClientConfigDialog::reloadPages()
+{
+ for( sint32 i = 0; i < CategoryStackedWidget->count(); i++ )
+ {
+ QWidget *w = CategoryStackedWidget->widget( i );
+ CWidgetBase *wb = qobject_cast< CWidgetBase * >( w );
+
+ // The system information pages are not derived from CWidgetBase, so they can't load!
+ if( wb == NULL )
+ continue;
+
+ wb->load();
+ }
+}
+
+bool CClientConfigDialog::isOKToQuit()
+{
+ // If the apply button is enabled we have unsaved changes
+ if( applyButton->isEnabled() )
+ {
+ sint32 r = QMessageBox::warning(
+ this,
+ tr( "Ryzom configuration" ),
+ tr( "Are you sure you want to quit without saving the configuration?" ),
+ QMessageBox::Yes | QMessageBox::No
+ );
+
+ if( r == QMessageBox::No )
+ return false;
+ }
+
+ return true;
+}
+
diff --git a/code/ryzom/tools/client/client_config_qt/client_config_dialog.h b/code/ryzom/tools/client/client_config_qt/client_config_dialog.h
new file mode 100644
index 000000000..f4902b3f3
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/client_config_dialog.h
@@ -0,0 +1,67 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef CLIENT_CONFIG_DIALOG_H
+#define CLIENT_CONFIG_DIALOG_H
+
+#include "ui_client_config_dialog.h"
+
+/**
+ @brief The main dialog of the configuration tool
+ @details Sets up and controls the configuration pages, sets up navigation,
+ sets up the ok, cancel, apply, etc buttons.
+*/
+class CClientConfigDialog : public QDialog, public Ui::client_config_dialog
+{
+ Q_OBJECT
+
+public:
+ CClientConfigDialog( QWidget *parent = NULL );
+ ~CClientConfigDialog();
+
+protected:
+ void closeEvent( QCloseEvent *event );
+ void changeEvent( QEvent *event );
+
+private slots:
+ //////////////////////////// Main dialog buttons /////////////////////
+ void onClickOK();
+ void onClickApply();
+ void onClickDefault();
+ void onClickPlay();
+ //////////////////////////////////////////////////////////////////////
+ void onClickCategory( QTreeWidgetItem *item );
+ void onSomethingChanged();
+
+private:
+ /**
+ @brief Tells the config pages to save their changes into the config file
+ */
+ void saveChanges();
+
+ /**
+ @brief Reloads the pages' contents from the config file.
+ */
+ void reloadPages();
+
+ /**
+ @brief Checks if it's OK to quit the application, may query the user
+ @return Returns true if it's OK to quit, returns false otherwise.
+ */
+ bool isOKToQuit();
+};
+
+#endif // CLIENT_CONFIG_DIALOG_H
diff --git a/code/ryzom/tools/client/client_config_qt/client_config_dialog.ui b/code/ryzom/tools/client/client_config_qt/client_config_dialog.ui
new file mode 100644
index 000000000..d8fde7665
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/client_config_dialog.ui
@@ -0,0 +1,275 @@
+
+
+ client_config_dialog
+
+
+
+ 0
+ 0
+ 941
+ 567
+
+
+
+
+ 0
+ 0
+
+
+
+ Ryzom Configuration
+
+
+ -
+
+
-
+
+
+ true
+
+
+
+
+
+ :/resources/left_bitmap_0.bmp
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 28
+
+
+
+
+
+
+ -
+
+
-
+
+
-
+
+
+
+
+
+ :/resources/general_icon.bmp
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 118
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 451
+ 61
+
+
+
+
+ 20
+ 50
+ true
+ false
+ PreferAntialias
+
+
+
+ background-image: url(:/resources/top_right.bmp);
+
+
+ General
+
+
+
+
+
+ -
+
+
-
+
+
-
+
+
+
+ 171
+ 431
+
+
+
+ false
+
+
+
+ Category
+
+
+
-
+
+ General
+
+
+
+ 75
+ true
+
+
+
+ -
+
+ Display
+
+
+
+ 75
+ true
+
+
+
-
+
+ Display details
+
+
+ -
+
+ Display advanced
+
+
+
+ -
+
+ Sound
+
+
+
+ 75
+ true
+
+
+
+ -
+
+ System information
+
+
+
+ 75
+ true
+
+
+
-
+
+ OpenGL information
+
+
+ -
+
+ Direct3D information
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 391
+ 429
+
+
+
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 148
+ 20
+
+
+
+
+ -
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+ -
+
+
+ false
+
+
+ Apply
+
+
+
+ -
+
+
+ Default
+
+
+
+ -
+
+
+ Play Ryzom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/config.cpp b/code/ryzom/tools/client/client_config_qt/config.cpp
new file mode 100644
index 000000000..f215a87ff
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/config.cpp
@@ -0,0 +1,255 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "Config.h"
+
+CConfig::CConfig()
+{
+}
+
+CConfig::~CConfig()
+{
+}
+
+bool CConfig::load( const char *fileName )
+{
+ try
+ {
+ cf.load( fileName );
+
+ std::string def = getString( "RootConfigFilename" );
+ if( def.compare( "" ) != 0 )
+ dcf.load( def );
+ }
+ catch( NLMISC::Exception &e )
+ {
+ nlwarning( "%s", e.what() );
+ return false;
+ }
+
+ return true;
+}
+
+bool CConfig::reload()
+{
+ try
+ {
+ cf.clear();
+ cf.reparse();
+ }
+ catch( NLMISC::Exception &e )
+ {
+ nlwarning( "%s", e.what() );
+ return false;
+ }
+ return true;
+}
+
+void CConfig::revertToDefault()
+{
+ // If there's no default config, all we can do is revert the current changes
+ if( !dcf.loaded() )
+ {
+ reload();
+ return;
+ }
+
+ // If there is a default config, we can however revert to the default!
+ // Code taken from the original config tool
+ uint32 count = cf.getNumVar();
+ uint32 i = 0;
+ for( i = 0; i < count; i++ )
+ {
+ NLMISC::CConfigFile::CVar *dst = cf.getVar( i );
+
+ // Comment from the original
+ // Temp: avoid changing this variable (debug: binded to the actual texture set installed)
+ if( dst->Name.compare( "HDTextureInstalled" ) == 0 )
+ continue;
+
+ NLMISC::CConfigFile::CVar *src = dcf.getVarPtr( dst->Name );
+ if( ( src != NULL ) && !dst->Root &&
+ ( ( src->Type == NLMISC::CConfigFile::CVar::T_INT ) && ( dst->Type == NLMISC::CConfigFile::CVar::T_INT ) ||
+ ( src->Type == NLMISC::CConfigFile::CVar::T_REAL ) && ( dst->Type == NLMISC::CConfigFile::CVar::T_INT ) ||
+ ( src->Type == NLMISC::CConfigFile::CVar::T_INT ) && ( dst->Type == NLMISC::CConfigFile::CVar::T_REAL ) ||
+ ( src->Type == NLMISC::CConfigFile::CVar::T_REAL ) && ( dst->Type == NLMISC::CConfigFile::CVar::T_REAL ) ||
+ ( src->Type == NLMISC::CConfigFile::CVar::T_STRING ) && ( dst->Type == NLMISC::CConfigFile::CVar::T_STRING ) ) )
+ {
+
+ if( src->Type == NLMISC::CConfigFile::CVar::T_INT )
+ {
+ setInt( src->Name.c_str(), src->asInt() );
+ }
+ else if( src->Type == NLMISC::CConfigFile::CVar::T_REAL )
+ {
+ setFloat( src->Name.c_str(), src->asFloat() );
+ }
+ else if( src->Type == NLMISC::CConfigFile::CVar::T_STRING )
+ {
+ setString( src->Name.c_str(), src->asString() );
+ }
+ }
+ }
+}
+
+bool CConfig::save()
+{
+ try
+ {
+ cf.save();
+ }
+ catch( NLMISC::Exception &e )
+ {
+ nlwarning( "%s", e.what() );
+ return false;
+ }
+ return true;
+}
+
+bool CConfig::getBool( const char *key )
+{
+ NLMISC::CConfigFile::CVar *var = cf.getVarPtr( key );
+
+ if( var != NULL )
+ {
+ return var->asBool();
+ }
+ else
+ {
+ nlwarning( "Couldn't find key %s in %s.", key, cf.getFilename().c_str() );
+ return false;
+ }
+}
+
+sint32 CConfig::getInt( const char *key )
+{
+ NLMISC::CConfigFile::CVar *var = cf.getVarPtr( key );
+
+ if( var != NULL )
+ {
+ return var->asInt();
+ }
+ else
+ {
+ nlwarning( "Couldn't find key %s in %s.", key, cf.getFilename().c_str() );
+ return 0;
+ }
+}
+
+float CConfig::getFloat( const char *key )
+{
+ NLMISC::CConfigFile::CVar *var = cf.getVarPtr( key );
+
+ if( var != NULL )
+ {
+ return var->asFloat();
+ }
+ else
+ {
+ nlwarning( "Couldn't find key %s in %s.", key, cf.getFilename().c_str() );
+ return 0.0f;
+ }
+}
+
+std::string CConfig::getString( const char *key )
+{
+ NLMISC::CConfigFile::CVar *var = cf.getVarPtr( key );
+
+ if( var != NULL )
+ {
+ return var->asString();
+ }
+ else
+ {
+ nlwarning( "Couldn't find key %s in %s.", key, cf.getFilename().c_str() );
+ return "";
+ }
+}
+
+void CConfig::setBool( const char *key, bool value )
+{
+ NLMISC::CConfigFile::CVar *var = cf.getVarPtr( key );
+
+ if( var != NULL )
+ {
+ if( var->Type == NLMISC::CConfigFile::CVar::T_BOOL )
+ {
+ if( value )
+ var->setAsString( "true" );
+ else
+ var->setAsString( "false" );
+ }
+ else
+ {
+ nlwarning( "Key %s in %s is not a boolean.", key, cf.getFilename().c_str() );
+ }
+ }
+ else
+ {
+ nlwarning( "Couldn't find key %s in %s.", key, cf.getFilename().c_str() );
+ }
+}
+
+void CConfig::setInt(const char *key, sint32 value)
+{
+ NLMISC::CConfigFile::CVar *var = cf.getVarPtr( key );
+
+ if( var != NULL )
+ {
+ if( var->Type == NLMISC::CConfigFile::CVar::T_INT )
+ var->setAsInt( value );
+ else
+ nlwarning( "Key %s in %s is not an integer.", key, cf.getFilename().c_str() );
+ }
+ else
+ {
+ nlwarning( "Couldn't find key %s in %s.", key, cf.getFilename().c_str() );
+ }
+}
+
+void CConfig::setFloat( const char *key, float value )
+{
+ NLMISC::CConfigFile::CVar *var = cf.getVarPtr( key );
+
+ if( var != NULL )
+ {
+ if( var->Type == NLMISC::CConfigFile::CVar::T_REAL )
+ var->setAsFloat( value );
+ else
+ nlwarning( "Key %s in %s is not a float.", key, cf.getFilename().c_str() );
+ }
+ else
+ {
+ nlwarning( "Couldn't find key %s in %s.", key, cf.getFilename().c_str() );
+ }
+}
+
+void CConfig::setString( const char *key, std::string &value )
+{
+ NLMISC::CConfigFile::CVar *var = cf.getVarPtr( key );
+
+ if( var != NULL )
+ {
+ if( var->Type == NLMISC::CConfigFile::CVar::T_STRING )
+ var->setAsString( value );
+ else
+ nlwarning( "Key %s in %s is not a string.", key, cf.getFilename().c_str() );
+ }
+ else
+ {
+ nlwarning( "Couldn't find key %s in %s.", key, cf.getFilename().c_str() );
+ }
+}
\ No newline at end of file
diff --git a/code/ryzom/tools/client/client_config_qt/config.h b/code/ryzom/tools/client/client_config_qt/config.h
new file mode 100644
index 000000000..7749b41b1
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/config.h
@@ -0,0 +1,120 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include
+
+/**
+ @brief Wrapper for a Ryzom config file, allows setting and querying values.
+*/
+class CConfig
+{
+public:
+ CConfig();
+ ~CConfig();
+
+ /**
+ @brief Loads a config file.
+ @param fileName - The file to load
+ @return Returns true on success, returns false on failure.
+ */
+ bool load( const char *fileName );
+
+ /**
+ @brief Reloads the contents of the config file
+ @return Return true on success, returns false on failure.
+ */
+ bool reload();
+
+ /**
+ @brief Reverts the config file to the default
+ @details Reverts the config file to the default if possible.
+ If there is no default config, it reverts the current changes only.
+ */
+ void revertToDefault();
+
+ /**
+ @brief Saves the configuration to the config file.
+ @return Returns true on success, returns false on failure.
+ */
+ bool save();
+
+ /**
+ @brief Queries the value for the specified key.
+ @param key - The key we are interested in
+ @return Returns the value as a bool, returns false if the key doesn't exist.
+ */
+ bool getBool( const char *key );
+
+ /**
+ @brief Queries the value for the specified key.
+ @param key - The key we are interested in
+ @return Returns the value as an integer, returns 0 if the key doesn't exist.
+ */
+ sint32 getInt( const char *key );
+
+ /**
+ @brief Queries the value for the specified key.
+ @param key - The key we are interested in
+ @return Returns the value as a float, returns 0.0f if the key doesn't exist.
+ */
+ float getFloat( const char *key );
+
+ /**
+ @brief Queries the value for the specified key.
+ @param key - The key we are interested in
+ @return Returns the value as a std::string, returns an empty string if the key doesn't exist.
+ */
+ std::string getString( const char *key );
+
+ /**
+ @brief Sets the specified key to the specified value.
+ @param key - the key we want to alter
+ @param value - the value we want to set
+ */
+ void setBool( const char *key, bool value );
+
+ /**
+ @brief Sets the specified key to the specified value.
+ @param key - the key we want to alter
+ @param value - the value we want to set
+ */
+ void setInt( const char *key, sint32 value );
+
+ /**
+ @brief Sets the specified key to the specified value.
+ @param key - the key we want to alter
+ @param value - the value we want to set
+ */
+ void setFloat( const char *key, float value );
+
+ /**
+ @brief Sets the specified key to the specified value.
+ @param key - the key we want to alter
+ @param value - the value we want to set
+ */
+ void setString( const char *key, std::string &value );
+
+private:
+ // config file
+ NLMISC::CConfigFile cf;
+ // default config file
+ NLMISC::CConfigFile dcf;
+};
+
+#endif
diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_advanced_widget.cpp b/code/ryzom/tools/client/client_config_qt/display_settings_advanced_widget.cpp
new file mode 100644
index 000000000..7f324f40c
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/display_settings_advanced_widget.cpp
@@ -0,0 +1,86 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "display_settings_advanced_widget.h"
+#include "system.h"
+
+CDisplaySettingsAdvancedWidget::CDisplaySettingsAdvancedWidget( QWidget *parent ) :
+ CWidgetBase( parent )
+{
+ setupUi( this );
+ load();
+
+ connect( texcompressionCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( vertexshaderCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( verticesagpCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( pixelshadersCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+}
+
+CDisplaySettingsAdvancedWidget::~CDisplaySettingsAdvancedWidget()
+{
+}
+
+void CDisplaySettingsAdvancedWidget::load()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ if( s.config.getInt( "ForceDXTC" ) == 1 )
+ texcompressionCheckBox->setChecked( true );
+
+ if( s.config.getInt( "DisableVtxProgram" ) == 1 )
+ vertexshaderCheckBox->setChecked( true );
+
+ if( s.config.getInt( "DisableVtxAGP" ) == 1 )
+ verticesagpCheckBox->setChecked( true );
+
+ if( s.config.getInt( "DisableTextureShdr" ) == 1 )
+ pixelshadersCheckBox->setChecked( true );
+}
+
+void CDisplaySettingsAdvancedWidget::save()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ if( texcompressionCheckBox->isChecked() )
+ s.config.setInt( "ForceDXTC", 1 );
+ else
+ s.config.setInt( "ForceDXTC", 0 );
+
+ if( vertexshaderCheckBox->isChecked() )
+ s.config.setInt( "DisableVtxProgram", 1 );
+ else
+ s.config.setInt( "DisableVtxProgram", 0 );
+
+ if( verticesagpCheckBox->isChecked() )
+ s.config.setInt( "DisableVtxAGP", 1 );
+ else
+ s.config.setInt( "DisableVtxAGP", 0 );
+
+ if( pixelshadersCheckBox->isChecked() )
+ s.config.setInt( "DisableTextureShdr", 1 );
+ else
+ s.config.setInt( "DisableTextureShdr", 0 );
+}
+
+void CDisplaySettingsAdvancedWidget::changeEvent( QEvent *event )
+{
+ if( event->type() == QEvent::LanguageChange )
+ {
+ retranslateUi( this );
+ }
+
+ QWidget::changeEvent( event );
+}
diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_advanced_widget.h b/code/ryzom/tools/client/client_config_qt/display_settings_advanced_widget.h
new file mode 100644
index 000000000..92ca1775a
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/display_settings_advanced_widget.h
@@ -0,0 +1,41 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef DISPLAYSETTINGSADVANCEDWIDGET_H
+#define DISPLAYSETTINGSADVANCEDWIDGET_H
+
+#include "ui_display_settings_advanced_widget.h"
+#include "widget_base.h"
+
+/**
+ @brief The advanced display settings page of the configuration tool
+*/
+class CDisplaySettingsAdvancedWidget : public CWidgetBase, public Ui::display_settings_advanced_widget
+{
+ Q_OBJECT
+public:
+ CDisplaySettingsAdvancedWidget( QWidget *parent );
+ ~CDisplaySettingsAdvancedWidget();
+
+ void load();
+ void save();
+
+protected:
+ void changeEvent( QEvent *event );
+
+};
+
+#endif // DISPLAYSETTINGSADVANCEDWIDGET_H
diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_advanced_widget.ui b/code/ryzom/tools/client/client_config_qt/display_settings_advanced_widget.ui
new file mode 100644
index 000000000..053104e2c
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/display_settings_advanced_widget.ui
@@ -0,0 +1,77 @@
+
+
+ display_settings_advanced_widget
+
+
+
+ 0
+ 0
+ 391
+ 429
+
+
+
+ Display advanced
+
+
+ -
+
+
-
+
+
+ Modify these settings only if you have trouble launching the game
+
+
+
+ -
+
+
-
+
+
+ Disable texture compression
+
+
+
+ -
+
+
+ Disable vertex shaders
+
+
+
+ -
+
+
+ Disable AGP for vertices
+
+
+
+ -
+
+
+ Disable pixel shaders
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 293
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.cpp b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.cpp
new file mode 100644
index 000000000..fdc47d2bd
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.cpp
@@ -0,0 +1,268 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "system.h"
+#include "display_settings_details_widget.h"
+
+CDisplaySettingsDetailsWidget::CDisplaySettingsDetailsWidget( QWidget *parent ) :
+ CWidgetBase( parent )
+{
+ setupUi( this );
+ connect( landscapeSlider, SIGNAL( valueChanged( int ) ), this, SLOT( onLandscapeSliderChange( int ) ) );
+ connect( charactersSlider, SIGNAL( valueChanged( int ) ), this, SLOT( onCharactersSliderChange( int ) ) );
+ connect( fxSlider, SIGNAL( valueChanged( int ) ), this, SLOT( onFXSliderChange( int ) ) );
+ connect( texturesSlider, SIGNAL( valueChanged( int ) ), this, SLOT( onTexturesSliderChange( int ) ) );
+ load();
+}
+
+CDisplaySettingsDetailsWidget::~CDisplaySettingsDetailsWidget()
+{
+}
+
+void CDisplaySettingsDetailsWidget::load()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ landscapeSlider->setValue( getQuality( qualityToLandscapeThreshold, s.config.getFloat( "LandscapeThreshold" ) ) );
+ landscapeSlider->setValue( std::min( landscapeSlider->value(), getQuality( qualityToZFar, s.config.getFloat( "Vision" ) ) ) );
+ landscapeSlider->setValue( std::min( landscapeSlider->value(), getQuality( qualityToLandscapeTileNear, s.config.getFloat( "LandscapeTileNear" ) ) ) );
+ landscapeSlider->setValue( std::min( landscapeSlider->value(), getQuality( qualityToMicrovegetDensity, s.config.getFloat( "MicroVegetDensity" ) ) ) );
+
+ charactersSlider->setValue( getQuality( qualityToSkinNbMaxPoly, s.config.getInt( "SkinNbMaxPoly" ) ) );
+ charactersSlider->setValue( std::min( charactersSlider->value(), getQuality( qualityToNbMaxSkeletonNotCLod, s.config.getInt( "NbMaxSkeletonNotCLod" ) ) ) );
+ charactersSlider->setValue( std::min( charactersSlider->value(), getQuality( qualityToCharacterFarClip, s.config.getFloat( "CharacterFarClip" ) ) ) );
+
+ fxSlider->setValue( getQuality( qualityToFxNbMaxPoly, s.config.getInt( "FxNbMaxPoly" ) ) );
+
+ int hdTextureInstalled = s.config.getInt( "HDTextureInstalled" );
+ if( hdTextureInstalled == 1 )
+ texturesSlider->setMaximum( QUALITY_NORMAL );
+ else
+ texturesSlider->setMaximum( QUALITY_MEDIUM );
+
+ // Comment taken from the original config tool:
+ // NB: if the player changes its client.cfg, mixing HDEntityTexture=1 and DivideTextureSizeBy2=1, it will
+ // result to a low quality!
+ if( s.config.getInt( "DivideTextureSizeBy2" ) )
+ texturesSlider->setValue( QUALITY_LOW );
+ else if( s.config.getInt( "HDEntityTexture" ) && ( hdTextureInstalled == 1 ) )
+ texturesSlider->setValue( QUALITY_NORMAL );
+ else
+ texturesSlider->setValue( QUALITY_MEDIUM );
+}
+
+void CDisplaySettingsDetailsWidget::save()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ s.config.setFloat( "Vision", qualityToZFar[ landscapeSlider->value() ] );
+ s.config.setFloat( "LandscapeTileNear", qualityToLandscapeTileNear[ landscapeSlider->value() ] );
+ s.config.setFloat( "LandscapeThreshold", qualityToLandscapeThreshold[ landscapeSlider->value() ] );
+
+ if( landscapeSlider->value() > QUALITY_LOW )
+ s.config.setInt( "MicroVeget", 1 );
+ else
+ s.config.setInt( "MicroVeget", 0 );
+
+ s.config.setFloat( "MicroVegetDensity", qualityToMicrovegetDensity[ landscapeSlider->value() ] );
+
+
+ s.config.setInt( "SkinNbMaxPoly", qualityToSkinNbMaxPoly[ charactersSlider->value() ] );
+ s.config.setInt( "NbMaxSkeletonNotCLod", qualityToNbMaxSkeletonNotCLod[ charactersSlider->value() ] );
+ s.config.setFloat( "CharacterFarClip", qualityToCharacterFarClip[ charactersSlider->value() ] );
+
+
+ s.config.setInt( "FxNbMaxPoly", qualityToFxNbMaxPoly[ fxSlider->value() ] );
+ if( fxSlider->value() > QUALITY_LOW )
+ {
+ s.config.setInt( "Shadows", 1 );
+ s.config.setInt( "Bloom", 1 );
+ s.config.setInt( "SquareBloom", 1 );
+ }
+ else
+ {
+ s.config.setInt( "Shadows", 0 );
+ s.config.setInt( "Bloom", 0 );
+ s.config.setInt( "SquareBloom", 0 );
+ }
+
+
+ if( texturesSlider->value() == QUALITY_NORMAL )
+ s.config.setInt( "HDEntityTexture", 1 );
+ else if( texturesSlider->value() == QUALITY_LOW )
+ s.config.setInt( "DivideTextureSizeBy2", 1 );
+}
+
+void CDisplaySettingsDetailsWidget::changeEvent( QEvent *event )
+{
+ if( event->type() == QEvent::LanguageChange )
+ {
+ retranslateUi( this );
+
+ landscapeLabel->setText( getQualityString( landscapeSlider->value() ) );
+ characterLabel->setText( getQualityString( charactersSlider->value() ) );
+ fxLabel->setText( getQualityString( fxSlider->value() ) );
+ textureLabel->setText( getTextureQualityString( texturesSlider->value() ) );
+ }
+ QWidget::changeEvent( event );
+}
+
+
+void CDisplaySettingsDetailsWidget::onLandscapeSliderChange( int value )
+{
+ if( ( value < 0 ) || ( value > 3 ) )
+ return;
+
+ landscapeLabel->setText( getQualityString( value ) );
+ emit changed();
+}
+
+void CDisplaySettingsDetailsWidget::onCharactersSliderChange( int value )
+{
+ if( ( value < 0 ) || ( value > 3 ) )
+ return;
+
+ characterLabel->setText( getQualityString( value ) );
+ emit changed();
+}
+
+void CDisplaySettingsDetailsWidget::onFXSliderChange( int value )
+{
+ if( ( value < 0 ) || ( value > 3 ) )
+ return;
+
+ fxLabel->setText( getQualityString( value ) );
+ emit changed();
+}
+
+void CDisplaySettingsDetailsWidget::onTexturesSliderChange( int value )
+{
+ if( ( value < 0 ) || ( value > 3 ) )
+ return;
+
+ textureLabel->setText( getTextureQualityString( value ) );
+ emit changed();
+}
+
+const float CDisplaySettingsDetailsWidget::qualityToZFar[ QUALITY_STEP ] =
+{
+ 200.0f,
+ 400.0f,
+ 500.0f,
+ 800.0f
+};
+
+const float CDisplaySettingsDetailsWidget::qualityToLandscapeTileNear[ QUALITY_STEP ] =
+{
+ 20.0f,
+ 100.0f,
+ 150.0f,
+ 200.0f
+};
+
+const float CDisplaySettingsDetailsWidget::qualityToLandscapeThreshold[ QUALITY_STEP ] =
+{
+ 100.0f,
+ 1000.0f,
+ 2000.0f,
+ 3000.0f
+};
+
+
+const float CDisplaySettingsDetailsWidget::qualityToMicrovegetDensity[ QUALITY_STEP ] =
+{
+ 10.0f,
+ 30.0f,
+ 80.0f,
+ 100.0f
+};
+
+
+const sint32 CDisplaySettingsDetailsWidget::qualityToSkinNbMaxPoly[ QUALITY_STEP ] =
+{
+ 10000,
+ 70000,
+ 100000,
+ 200000
+};
+
+const sint32 CDisplaySettingsDetailsWidget::qualityToNbMaxSkeletonNotCLod[ QUALITY_STEP ] =
+{
+ 10,
+ 50,
+ 125,
+ 255
+};
+
+const float CDisplaySettingsDetailsWidget::qualityToCharacterFarClip[ QUALITY_STEP ] =
+{
+ 50.0f,
+ 100.0f,
+ 200.0f,
+ 500.0f
+};
+
+const sint32 CDisplaySettingsDetailsWidget::qualityToFxNbMaxPoly[ QUALITY_STEP ] =
+{
+ 2000,
+ 10000,
+ 20000,
+ 50000
+};
+
+QString CDisplaySettingsDetailsWidget::getQualityString( uint32 quality )
+{
+ switch( quality )
+ {
+ case QUALITY_LOW:
+ return tr( "Low" );
+ break;
+ case QUALITY_MEDIUM:
+ return tr( "Medium" );
+ break;
+ case QUALITY_NORMAL:
+ return tr( "Normal" );
+ break;
+ case QUALITY_HIGH:
+ return tr( "High" );
+ break;
+ default:
+ return "";
+ break;
+ }
+}
+
+QString CDisplaySettingsDetailsWidget::getTextureQualityString( uint32 quality )
+{
+ switch( quality )
+ {
+ case TEXQUALITY_LOW:
+ return tr( "Low (32 MB)" );
+ break;
+
+ case TEXQUALITY_NORMAL:
+ return tr( "Normal (64 MB)" );
+ break;
+
+ case TEXQUALITY_HIGH:
+ return tr( "High (128 MB)" );
+ break;
+
+ default:
+ return "";
+ break;
+ }
+}
\ No newline at end of file
diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.h b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.h
new file mode 100644
index 000000000..535c3710c
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.h
@@ -0,0 +1,121 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef DISPLAYSETTINGSDETAILSWIDGET_H
+#define DISPLAYSETTINGSDETAILSWIDGET_H
+
+#include "ui_display_settings_details_widget.h"
+#include "widget_base.h"
+#include
+
+enum
+{
+ QUALITY_LOW = 0,
+ QUALITY_MEDIUM = 1,
+ QUALITY_NORMAL = 2,
+ QUALITY_HIGH = 3,
+ QUALITY_STEP = 4
+};
+
+enum
+{
+ TEXQUALITY_LOW = 0,
+ TEXQUALITY_NORMAL = 1,
+ TEXQUALITY_HIGH = 2
+};
+
+/**
+ @brief The display details page of the configuration tool
+*/
+class CDisplaySettingsDetailsWidget : public CWidgetBase, public Ui::display_settings_details_widget
+{
+ Q_OBJECT
+public:
+ CDisplaySettingsDetailsWidget( QWidget *parent = NULL );
+ ~CDisplaySettingsDetailsWidget();
+
+ void load();
+ void save();
+
+protected:
+ void changeEvent( QEvent *event );
+
+private slots:
+ void onLandscapeSliderChange( int value );
+ void onCharactersSliderChange( int value );
+ void onFXSliderChange( int value );
+ void onTexturesSliderChange( int value );
+
+private:
+ /**
+ @brief Looks up and returns the "quality" ( see the enums on the top), that belongs to the specified value.
+ @param table - The lookup table you want to use.
+ @param value - The value that we want to look up.
+ @return Returns the "quality" that best fits the specified value.
+ */
+ template< typename T >
+ int getQuality( const T *table, T value )
+ {
+ if( table[ 0 ] < table[ QUALITY_STEP - 1 ] )
+ {
+ uint32 i = 0;
+ while( ( i < QUALITY_STEP ) && ( table[ i ] < value ) )
+ i++;
+ return i;
+ }
+ else
+ {
+ uint32 i = 0;
+ while( ( i < QUALITY_STEP ) && ( table[ i ] > value ) )
+ i++;
+ return i;
+ }
+ }
+
+
+ /**
+ @brief Retrieves the string that belongs to the specified quality.
+ @param quality - The quality value
+ @return Returns a string describing the quality value, Returns an empty string if an invalid value is specified.
+ */
+ static QString getQualityString( uint32 quality );
+
+
+ /**
+ @brief Retrieves the string that belongs to the specified texture quality.
+ @param quality - The texture quality value
+ @return Returns a string describing the texture quality, Returns an empty string if an invalid value is specified.
+ */
+ static QString getTextureQualityString( uint32 quality );
+
+
+ ///////////////////////// Landscape values ///////////////////////
+ static const float qualityToZFar[ QUALITY_STEP ];
+ static const float qualityToLandscapeTileNear[ QUALITY_STEP ];
+ static const float qualityToLandscapeThreshold[ QUALITY_STEP ];
+ static const float qualityToMicrovegetDensity[ QUALITY_STEP ];
+
+ //////////////////////// Character values ////////////////////////
+ static const sint32 qualityToSkinNbMaxPoly[ QUALITY_STEP ];
+ static const sint32 qualityToNbMaxSkeletonNotCLod[ QUALITY_STEP ];
+ static const float qualityToCharacterFarClip[ QUALITY_STEP ];
+
+ /////////////////////// FX values ////////////////////////////////
+ static const sint32 qualityToFxNbMaxPoly[ QUALITY_STEP ];
+
+};
+
+#endif // DISPLAYSETTINGSDETAILSWIDGET_H
diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.ui b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.ui
new file mode 100644
index 000000000..9a3e3052f
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.ui
@@ -0,0 +1,347 @@
+
+
+ display_settings_details_widget
+
+
+
+ 0
+ 0
+ 391
+ 429
+
+
+
+ Display details
+
+
+ -
+
+
+ Landscape
+
+
+
-
+
+
-
+
+
-
+
+
+ Level of detail
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 98
+ 20
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 3
+
+
+ 3
+
+
+ Qt::Horizontal
+
+
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 78
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Low
+
+
+
+
+
+
+
+
+ -
+
+
+ Characters
+
+
+
-
+
+
-
+
+
-
+
+
+ Level of detail
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 98
+ 20
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 3
+
+
+ 3
+
+
+ Qt::Horizontal
+
+
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 78
+ 20
+
+
+
+
+ -
+
+
+ Low
+
+
+
+
+
+
+
+
+ -
+
+
+ FX
+
+
+
-
+
+
-
+
+
-
+
+
+ Level of detail
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 98
+ 20
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 3
+
+
+ 3
+
+
+ Qt::Horizontal
+
+
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 78
+ 20
+
+
+
+
+ -
+
+
+ Low
+
+
+
+
+
+
+
+
+ -
+
+
+ Textures
+
+
+
-
+
+
-
+
+
-
+
+
+ Level of detail
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 98
+ 20
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 3
+
+
+ 3
+
+
+ Qt::Horizontal
+
+
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 78
+ 20
+
+
+
+
+ -
+
+
+ Low
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_widget.cpp b/code/ryzom/tools/client/client_config_qt/display_settings_widget.cpp
new file mode 100644
index 000000000..89ed62783
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/display_settings_widget.cpp
@@ -0,0 +1,227 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include
+#include
+#include "display_settings_widget.h"
+#include "system.h"
+#include
+
+CDisplaySettingsWidget::CDisplaySettingsWidget( QWidget *parent ) :
+ CWidgetBase( parent )
+{
+ setupUi( this );
+ widthLineEdit->setValidator( new QRegExpValidator( QRegExp( "[0-9]{1,6}" ), widthLineEdit ) );
+ heightLineEdit->setValidator( new QRegExpValidator( QRegExp( "[0-9]{1,6}" ), heightLineEdit ) );
+ xpositionLineEdit->setValidator( new QRegExpValidator( QRegExp( "[0-9]{1,6}" ), xpositionLineEdit ) );
+ ypositionLineEdit->setValidator( new QRegExpValidator( QRegExp( "[0-9]{1,6}" ), ypositionLineEdit ) );
+ load();
+
+ connect( autoRadioButton, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( openglRadioButton, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( direct3dRadioButton, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( fullscreenRadioButton, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( windowedRadioButton, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( widthLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( onSomethingChanged() ) );
+ connect( heightLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( onSomethingChanged() ) );
+ connect( xpositionLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( onSomethingChanged() ) );
+ connect( ypositionLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( onSomethingChanged() ) );
+ connect( videomodeComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( onSomethingChanged() ) );
+ connect( autoRadioButton, SIGNAL( clicked( bool ) ), this, SLOT( updateVideoModes() ) );
+ connect( openglRadioButton, SIGNAL( clicked( bool ) ), this, SLOT( updateVideoModes() ) );
+ connect( direct3dRadioButton, SIGNAL( clicked( bool ) ), this, SLOT( updateVideoModes() ) );
+}
+
+CDisplaySettingsWidget::~CDisplaySettingsWidget()
+{
+}
+
+void CDisplaySettingsWidget::load()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ std::string driver = s.config.getString( "Driver3D" );
+ switch( getDriverFromConfigString( driver ) )
+ {
+ case DRV_AUTO:
+ autoRadioButton->setChecked( true );
+ break;
+ case DRV_OPENGL:
+ openglRadioButton->setChecked( true );
+ break;
+ case DRV_DIRECT3D:
+ direct3dRadioButton->setChecked( true );
+ break;
+ }
+
+ updateVideoModes();
+
+
+ CVideoMode mode;
+ mode.widht = s.config.getInt( "Width" );
+ mode.height = s.config.getInt( "Height" );
+ mode.depth = s.config.getInt( "Depth" );
+ mode.frequency = s.config.getInt( "Frequency" );
+
+ if( s.config.getInt( "FullScreen" ) == 1 )
+ {
+ fullscreenRadioButton->setChecked( true );
+ videomodeComboBox->setCurrentIndex( findVideoModeIndex( &mode ) );
+ }
+ else
+ {
+ windowedRadioButton->setChecked( true );
+ }
+
+ widthLineEdit->setText( QString( "%1" ).arg( mode.widht ) );
+ heightLineEdit->setText( QString( "%1" ).arg( mode.height ) );
+ xpositionLineEdit->setText( QString( "%1" ).arg( s.config.getInt( "PositionX" ) ) );
+ ypositionLineEdit->setText( QString( "%1" ).arg( s.config.getInt( "PositionY" ) ) );
+
+}
+
+void CDisplaySettingsWidget::save()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ if( openglRadioButton->isChecked() )
+ s.config.setString( "Driver3D", std::string( "OpenGL" ) );
+ else if( direct3dRadioButton->isChecked() )
+ s.config.setString( "Driver3D", std::string( "Direct3D" ) );
+ else
+ s.config.setString( "Driver3D", std::string( "Auto" ) );
+
+ if( fullscreenRadioButton->isChecked() )
+ {
+ s.config.setInt( "FullScreen", 1 );
+
+ sint32 index = videomodeComboBox->currentIndex();
+ CVideoMode mode;
+
+ // OpenGL should be available everywhere!
+ if( direct3dRadioButton->isChecked() )
+ mode = s.d3dInfo.modes[ index ];
+ else
+ mode = s.openglInfo.modes[ index ];
+
+ s.config.setInt( "Width", mode.widht );
+ s.config.setInt( "Height", mode.height );
+ s.config.setInt( "Depth", mode.depth );
+ s.config.setInt( "Frequency", mode.frequency );
+
+ }
+ else
+ {
+ s.config.setInt( "FullScreen", 0 );
+ s.config.setInt( "Width", widthLineEdit->text().toInt() );
+ s.config.setInt( "Height", heightLineEdit->text().toInt() );
+ }
+
+ s.config.setInt( "PositionX", xpositionLineEdit->text().toInt() );
+ s.config.setInt( "PositionY", ypositionLineEdit->text().toInt() );
+}
+
+void CDisplaySettingsWidget::changeEvent( QEvent *event )
+{
+ if( event->type() == QEvent::LanguageChange )
+ {
+ disconnect( videomodeComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( onSomethingChanged() ) );
+ retranslateUi( this );
+ connect( videomodeComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( onSomethingChanged() ) );
+ }
+ QWidget::changeEvent( event );
+}
+
+void CDisplaySettingsWidget::updateVideoModes()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ videomodeComboBox->clear();
+
+ if( direct3dRadioButton->isChecked() )
+ {
+ for( std::vector< CVideoMode >::iterator itr = s.d3dInfo.modes.begin(); itr != s.d3dInfo.modes.end(); ++itr )
+ {
+ std::stringstream ss;
+ ss << itr->widht << "x" << itr->height << " " << itr->depth << " bit @" << itr->frequency;
+ videomodeComboBox->addItem( ss.str().c_str() );
+ }
+ }
+ else
+ {
+ // OpenGL should be available everywhere!
+ for( std::vector< CVideoMode >::iterator itr = s.openglInfo.modes.begin(); itr != s.openglInfo.modes.end(); ++itr )
+ {
+ std::stringstream ss;
+ ss << itr->widht << "x" << itr->height << " " << itr->depth << " bit @" << itr->frequency;
+ videomodeComboBox->addItem( ss.str().c_str() );
+ }
+ }
+}
+
+uint32 CDisplaySettingsWidget::findVideoModeIndex( CVideoMode *mode )
+{
+ //////////////////////////////////////////////////////////////////////////////////
+ // WARNING:
+ // This part relies on that the video mode combo box is filled as the following:
+ //
+ //| --------------------------------------|
+ //| Selected driver | Modes |
+ //| --------------------------------------|
+ //| Auto | OpenGL modes |
+ //| OpenGL | OpenGL modes |
+ //| Direct3D | Direct3d modes |
+ //| --------------------------------------|
+ //
+ //
+ //////////////////////////////////////////////////////////////////////////////////
+
+ CVideoMode &m = *mode;
+ CSystem &s = CSystem::GetInstance();
+
+ if( direct3dRadioButton->isChecked() )
+ {
+ for( uint32 i = 0; i < s.d3dInfo.modes.size(); i++ )
+ if( s.d3dInfo.modes[ i ] == m )
+ return i;
+ }
+ else
+ {
+ // Again OpenGL should be available everywhere!
+ for( uint32 i = 0; i < s.openglInfo.modes.size(); i++ )
+ if( s.openglInfo.modes[ i ] == m )
+ return i;
+ }
+
+ return 0;
+}
+
+E3DDriver CDisplaySettingsWidget::getDriverFromConfigString(std::string &str) const
+{
+ if( str.compare( "0" ) == 0 )
+ return DRV_AUTO;
+ if( str.compare( "1" ) == 0 )
+ return DRV_OPENGL;
+ if( str.compare( "2" ) == 0 )
+ return DRV_DIRECT3D;
+ if( str.compare( "OpenGL" ) == 0 )
+ return DRV_OPENGL;
+ if( str.compare( "Direct3D" ) == 0)
+ return DRV_DIRECT3D;
+
+
+ return DRV_AUTO;
+}
diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_widget.h b/code/ryzom/tools/client/client_config_qt/display_settings_widget.h
new file mode 100644
index 000000000..5da578bbf
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/display_settings_widget.h
@@ -0,0 +1,72 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef DISPLAYSETTINGSWIDGET_H
+#define DISPLAYSETTINGSWIDGET_H
+
+#include "ui_display_settings_widget.h"
+#include "widget_base.h"
+#include
+
+struct CVideoMode;
+
+enum E3DDriver
+{
+ DRV_AUTO,
+ DRV_OPENGL,
+ DRV_DIRECT3D
+};
+
+/**
+ @brief The display settings page of the configuration tool
+*/
+class CDisplaySettingsWidget : public CWidgetBase, public Ui::display_settings_widget
+{
+ Q_OBJECT
+public:
+ CDisplaySettingsWidget( QWidget *parent = NULL );
+ ~CDisplaySettingsWidget();
+
+ void load();
+ void save();
+
+protected:
+ void changeEvent( QEvent *event );
+
+private slots:
+ /**
+ @brief Updates the video modes combo box, based on the current driver selection.
+ */
+ void updateVideoModes();
+
+private:
+ /**
+ @brief Finds the proper index for the video mode combobox
+ @param mode - the video mode read from config
+ @return Returns the proper video mode index if found, returns 0 otherwise.
+ */
+ uint32 findVideoModeIndex( CVideoMode *mode );
+
+
+ /**
+ @brief Retrieves the driver type from the config string.
+ @param str - Reference to the driver string.
+ @return Returns the driver type on success, rReturns E3DDriver::DRV_AUTO otherwise.
+ */
+ E3DDriver getDriverFromConfigString( std::string &str ) const;
+};
+
+#endif // DISPLAYSETTINGSWIDGET_H
diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_widget.ui b/code/ryzom/tools/client/client_config_qt/display_settings_widget.ui
new file mode 100644
index 000000000..2e24b455f
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/display_settings_widget.ui
@@ -0,0 +1,167 @@
+
+
+ display_settings_widget
+
+
+
+ 0
+ 0
+ 391
+ 429
+
+
+
+ Display
+
+
+ -
+
+
+ Driver
+
+
+
-
+
+
-
+
+
+ Specify if Ryzom is to be run in OpenGL or Direct3D.
+
+
+
+ -
+
+
+ Auto
+
+
+
+ -
+
+
+ OpenGL
+
+
+
+ -
+
+
+ Direct3D
+
+
+
+
+
+
+
+
+ -
+
+
+ Parameters
+
+
+
-
+
+
+ Specify if Ryzom is to be run in full screen or window mode:
+
+
+
+ -
+
+
+ Full screen
+
+
+
+ -
+
+
+ Specify a video mode
+
+
+
+ -
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 34
+
+
+
+
+ -
+
+
+ Windowed
+
+
+
+ -
+
+
-
+
+
-
+
+
+ Width
+
+
+
+ -
+
+
+ Height
+
+
+
+ -
+
+
+ X position
+
+
+
+ -
+
+
+ Y position
+
+
+
+
+
+ -
+
+
-
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/general_settings_widget.cpp b/code/ryzom/tools/client/client_config_qt/general_settings_widget.cpp
new file mode 100644
index 000000000..86b6dca63
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/general_settings_widget.cpp
@@ -0,0 +1,121 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "general_settings_widget.h"
+#include "system.h"
+#include
+
+const QString CGeneralSettingsWidget::languageCodes[ NUM_LANGUAGE_CODES ] =
+{
+ "en",
+ "fr",
+ "de",
+ "hu"
+};
+
+CGeneralSettingsWidget::CGeneralSettingsWidget( QWidget *parent ) :
+ CWidgetBase( parent )
+{
+ currentTranslator = NULL;
+ setupUi( this );
+ load();
+
+ connect( languageComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( onLanguageChanged() ) );
+ connect( saveConfigOnQuitCheckBox, SIGNAL( stateChanged( int ) ), this, SLOT( onSomethingChanged() ) );
+ connect( lowPriorityProcessCheckBox, SIGNAL( stateChanged( int ) ), this, SLOT( onSomethingChanged() ) );
+}
+
+CGeneralSettingsWidget::~CGeneralSettingsWidget()
+{
+}
+
+void CGeneralSettingsWidget::load()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ sint32 cbIndex = getIndexForLanguageCode( QString( s.config.getString( "LanguageCode" ).c_str() ) );
+ if( cbIndex != -1 ){
+ languageComboBox->setCurrentIndex( cbIndex );
+ onLanguageChanged();
+ }
+
+ if( s.config.getInt( "SaveConfig" ) )
+ saveConfigOnQuitCheckBox->setChecked( true );
+
+ if( s.config.getInt( "ProcessPriority" ) == -1 )
+ lowPriorityProcessCheckBox->setChecked( true );
+ else
+ lowPriorityProcessCheckBox->setChecked( false );
+}
+
+void CGeneralSettingsWidget::save()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ s.config.setString( "LanguageCode", languageCodes[ languageComboBox->currentIndex() ].toStdString() );
+
+ if( saveConfigOnQuitCheckBox->isChecked() )
+ s.config.setInt( "SaveConfig", 1 );
+ else
+ s.config.setInt( "SaveConfig", 0 );
+
+ if( lowPriorityProcessCheckBox->isChecked() )
+ s.config.setInt( "ProcessPriority", -1 );
+ else
+ s.config.setInt( "ProcessPriority", 0 );
+}
+
+void CGeneralSettingsWidget::onLanguageChanged()
+{
+ sint32 i = languageComboBox->currentIndex();
+
+ if( currentTranslator != NULL )
+ {
+ qApp->removeTranslator( currentTranslator );
+ delete currentTranslator;
+ currentTranslator = NULL;
+ }
+
+ currentTranslator = new QTranslator();
+ if( currentTranslator->load( QString( "ryzom_configuration_%1" ).arg( languageCodes[ i ] ) ) )
+ qApp->installTranslator( currentTranslator );
+
+ emit changed();
+}
+
+void CGeneralSettingsWidget::changeEvent( QEvent *event )
+{
+ if( event->type() == QEvent::LanguageChange )
+ {
+ sint32 i = languageComboBox->currentIndex();
+ // Signals that are emitted on index change need to be disconnected, since retranslation cleans the widget
+ disconnect( languageComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( onLanguageChanged() ) );
+ retranslateUi( this );
+ languageComboBox->setCurrentIndex( i );
+ connect( languageComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( onLanguageChanged() ) );
+ }
+
+ QWidget::changeEvent( event );
+}
+
+int CGeneralSettingsWidget::getIndexForLanguageCode( QString &languageCode )
+{
+ for( sint32 i = 0; i < NUM_LANGUAGE_CODES; i++ )
+ if( languageCode.compare( languageCodes[ i ] ) == 0 )
+ return i;
+
+ return -1;
+}
diff --git a/code/ryzom/tools/client/client_config_qt/general_settings_widget.h b/code/ryzom/tools/client/client_config_qt/general_settings_widget.h
new file mode 100644
index 000000000..dd6e41752
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/general_settings_widget.h
@@ -0,0 +1,66 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef GENERALSETTINGWIDGET_H
+#define GENERALSETTINGWIDGET_H
+
+#include "ui_general_settings_widget.h"
+#include "widget_base.h"
+#include
+
+class QTranslator;
+
+enum
+{
+ NUM_LANGUAGE_CODES = 4
+};
+
+/**
+ @brief The general settings page of the configuration tool
+*/
+class CGeneralSettingsWidget : public CWidgetBase, public Ui::general_settings_widget
+{
+ Q_OBJECT
+
+public:
+ CGeneralSettingsWidget( QWidget *parent = NULL );
+ ~CGeneralSettingsWidget();
+
+ void load();
+ void save();
+
+private slots:
+ void onLanguageChanged();
+
+protected:
+ void changeEvent( QEvent *event );
+
+private:
+ /**
+ @brief Retrieves the language combobox index for the language code provided.
+ @param languageCode - Reference to the language code, we are trying to find.
+ @return Returns the index on success, returns -1 if the language code cannot be found.
+ */
+ sint32 getIndexForLanguageCode( QString &languageCode );
+
+ // Contains the language codes used in the config file
+ // They are in the same order as the options in languageComboBox
+ static const QString languageCodes[ NUM_LANGUAGE_CODES ];
+
+ QTranslator *currentTranslator;
+};
+
+#endif // GENERALSETTINGWIDGET_H
diff --git a/code/ryzom/tools/client/client_config_qt/general_settings_widget.ui b/code/ryzom/tools/client/client_config_qt/general_settings_widget.ui
new file mode 100644
index 000000000..5e7ef9793
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/general_settings_widget.ui
@@ -0,0 +1,158 @@
+
+
+ general_settings_widget
+
+
+
+ 0
+ 0
+ 391
+ 429
+
+
+
+ Form
+
+
+ -
+
+
+
+ 8
+
+
+
+ Language
+
+
+
+ -
+
+
-
+
+ English
+
+
+ -
+
+ French
+
+
+ -
+
+ German
+
+
+ -
+
+ Hungarian
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Maximum
+
+
+
+ 20
+ 17
+
+
+
+
+ -
+
+
+ Save config file when quitting the game
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 230
+
+
+
+
+ -
+
+
+ Advanced
+
+
+
-
+
+
-
+
+
+ Slow down the game ( process low priority )
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Maximum
+
+
+
+ 20
+ 18
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 84
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Maximum
+
+
+
+ 20
+ 13
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/main.cpp b/code/ryzom/tools/client/client_config_qt/main.cpp
new file mode 100644
index 000000000..f643005bc
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/main.cpp
@@ -0,0 +1,36 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include
+#include "client_config_dialog.h"
+#include "system.h"
+
+int main( sint32 argc, char **argv )
+{
+ QApplication app( argc, argv );
+ QPixmap pixmap( ":/resources/splash_screen.bmp" );
+ QSplashScreen splash( pixmap );
+
+ splash.show();
+
+ CSystem::GetInstance().config.load( "client.cfg" );
+
+ CClientConfigDialog d;
+ d.show();
+ splash.finish( &d );
+
+ return app.exec();
+}
diff --git a/code/ryzom/tools/client/client_config_qt/resources.qrc b/code/ryzom/tools/client/client_config_qt/resources.qrc
new file mode 100644
index 000000000..d2e13bcdc
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/resources.qrc
@@ -0,0 +1,16 @@
+
+
+ resources/card_icon.bmp
+ resources/display_config_icon.bmp
+ resources/display_icon.bmp
+ resources/display_properties_icon.bmp
+ resources/general_icon.bmp
+ resources/left_bitmap_0.bmp
+ resources/network_icon.bmp
+ resources/sound_icon.bmp
+ resources/splash_screen.bmp
+ resources/top_right.bmp
+ resources/update_icon.bmp
+ resources/welcome_icon.bmp
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/resources/card_icon.bmp b/code/ryzom/tools/client/client_config_qt/resources/card_icon.bmp
new file mode 100644
index 000000000..705d913ab
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/card_icon.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/client_config.ico b/code/ryzom/tools/client/client_config_qt/resources/client_config.ico
new file mode 100644
index 000000000..9514f438b
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/client_config.ico differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/display_config_icon.bmp b/code/ryzom/tools/client/client_config_qt/resources/display_config_icon.bmp
new file mode 100644
index 000000000..4b76430f1
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/display_config_icon.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/display_icon.bmp b/code/ryzom/tools/client/client_config_qt/resources/display_icon.bmp
new file mode 100644
index 000000000..46e101004
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/display_icon.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/display_properties_icon.bmp b/code/ryzom/tools/client/client_config_qt/resources/display_properties_icon.bmp
new file mode 100644
index 000000000..db8dcb10d
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/display_properties_icon.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/general_icon.bmp b/code/ryzom/tools/client/client_config_qt/resources/general_icon.bmp
new file mode 100644
index 000000000..37bd9e722
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/general_icon.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/left_bitmap_0.bmp b/code/ryzom/tools/client/client_config_qt/resources/left_bitmap_0.bmp
new file mode 100644
index 000000000..5c1f762d4
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/left_bitmap_0.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/network_icon.bmp b/code/ryzom/tools/client/client_config_qt/resources/network_icon.bmp
new file mode 100644
index 000000000..664b5f207
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/network_icon.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/sound_icon.bmp b/code/ryzom/tools/client/client_config_qt/resources/sound_icon.bmp
new file mode 100644
index 000000000..54d7c5a91
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/sound_icon.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/splash_screen.bmp b/code/ryzom/tools/client/client_config_qt/resources/splash_screen.bmp
new file mode 100644
index 000000000..1360556ed
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/splash_screen.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/top_right.bmp b/code/ryzom/tools/client/client_config_qt/resources/top_right.bmp
new file mode 100644
index 000000000..70ccdb556
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/top_right.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/update_icon.bmp b/code/ryzom/tools/client/client_config_qt/resources/update_icon.bmp
new file mode 100644
index 000000000..138bec0d9
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/update_icon.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/resources/welcome_icon.bmp b/code/ryzom/tools/client/client_config_qt/resources/welcome_icon.bmp
new file mode 100644
index 000000000..c1b281023
Binary files /dev/null and b/code/ryzom/tools/client/client_config_qt/resources/welcome_icon.bmp differ
diff --git a/code/ryzom/tools/client/client_config_qt/ryzom_configuration.pro b/code/ryzom/tools/client/client_config_qt/ryzom_configuration.pro
new file mode 100644
index 000000000..216bcad13
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/ryzom_configuration.pro
@@ -0,0 +1,64 @@
+QT += core
+QT += gui
+QT += opengl
+
+INCLUDEPATH += E:/projects/ryzom/bin/include
+
+win32:LIBS += E:/projects/ryzom/bin/lib/nel3d_d.lib
+win32:LIBS += E:/projects/ryzom/bin/lib/nelmisc_d.lib
+win32:LIBS += E:/projects/ryzom/src/external_stlport/lib/libjpeg.lib
+win32:LIBS += E:/projects/ryzom/src/external_stlport/lib/libpng.lib
+win32:LIBS += user32.lib
+win32:LIBS += gdi32.lib
+win32:LIBS += advapi32.lib
+win32:LIBS += shell32.lib
+win32:LIBS += ole32.lib
+win32:LIBS += opengl32.lib
+
+SOURCES += \
+ client_config_dialog.cpp \
+ config.cpp \
+ display_settings_advanced_widget.cpp \
+ display_settings_details_widget.cpp \
+ display_settings_widget.cpp \
+ general_settings_widget.cpp \
+ main.cpp \
+ sound_settings_widget.cpp \
+ system.cpp \
+ sys_info_d3d_widget.cpp \
+ sys_info_opengl_widget.cpp \
+ sys_info_widget.cpp \
+
+
+FORMS += \
+ client_config_dialog.ui \
+ display_settings_advanced_widget.ui \
+ display_settings_details_widget.ui \
+ display_settings_widget.ui \
+ general_settings_widget.ui \
+ sound_settings_widget.ui \
+ sys_info_d3d_widget.ui \
+ sys_info_opengl_widget.ui \
+ sys_info_widget.ui \
+
+RESOURCES += \
+ resources.qrc
+
+HEADERS += \
+ client_config_dialog.h \
+ config.h \
+ display_settings_advanced_widget.h \
+ display_settings_details_widget.h \
+ display_settings_widget.h \
+ general_settings_widget.h \
+ sound_settings_widget.h \
+ system.h \
+ sys_info_d3d_widget.h \
+ sys_info_opengl_widget.h \
+ sys_info_widget.h \
+ widget_base.h \
+
+TRANSLATIONS = \
+ ryzom_configuration_en.ts \
+ ryzom_configuration_hu.ts
+
diff --git a/code/ryzom/tools/client/client_config_qt/ryzom_configuration_en.ts b/code/ryzom/tools/client/client_config_qt/ryzom_configuration_en.ts
new file mode 100644
index 000000000..47ae13098
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/ryzom_configuration_en.ts
@@ -0,0 +1,468 @@
+
+
+
+
+ CClientConfigDialog
+
+
+
+
+
+
+
+
+
+
+
+
+ CDisplaySettingsDetailsWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSoundSettingsWidget
+
+
+
+
+
+
+
+ client_config_dialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ display_settings_advanced_widget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ display_settings_details_widget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ display_settings_widget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ general_settings_widget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sound_settings_widget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sys_info_d3d_widget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sys_info_opengl_widget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sys_info_widget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/ryzom_configuration_hu.ts b/code/ryzom/tools/client/client_config_qt/ryzom_configuration_hu.ts
new file mode 100644
index 000000000..846fd7640
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/ryzom_configuration_hu.ts
@@ -0,0 +1,834 @@
+
+
+
+
+ CClientConfigDialog
+
+
+
+ Ryom beállító
+
+
+
+
+ Biztosan ki akar lépni mentés nélkül?
+
+
+
+ CDisplaySettingsDetailsWidget
+
+
+
+ Alacsony
+
+
+
+
+ Közepes
+
+
+
+
+ Normális
+
+
+
+
+ Magas
+
+
+
+
+ Alacsony (32 MB)
+
+
+
+
+ Normális (64 MB)
+
+
+
+
+ Magas (128 MB)
+
+
+
+ CSoundSettingsWidget
+
+
+
+ %1 sáv
+
+
+
+ ClientConfigDialog
+
+
+ Ryzom beállító
+
+
+
+ Általános
+
+
+
+ Kategória
+
+
+
+ Megjelenítés
+
+
+
+ Megjelenítés részletek
+
+
+
+ Megjelenítés haladóknak
+
+
+
+ Hang
+
+
+
+ Rendszer információk
+
+
+
+ OpenGL információk
+
+
+
+ Direct3D információk
+
+
+
+ Alkalmaz
+
+
+
+ Alapbeállítások
+
+
+
+ Ryom indítása
+
+
+
+ Ryom beállító
+
+
+
+ Biztosan ki akar lépni mentés nélkül?
+
+
+
+ DisplaySettingAdvancedWidget
+
+
+ Megjelenítés haladóknak
+
+
+
+ Csak akkor változtasson ezeken a beállításokon ha nem tudja elindítani a játékot
+
+
+
+ Textúratömörítés kikapcsolása
+
+
+
+ Csúcsárnyalók kikapcsolása
+
+
+
+ AGP kikapcsolása a csúcsok számára
+
+
+
+ Képpont árnyalók kikapcsolása
+
+
+
+ DisplaySettingsDetailsWidget
+
+
+ Megjelenítés részletek
+
+
+
+ Terep
+
+
+
+ Részletesség
+
+
+
+ Alacsony
+
+
+
+ Karakterek
+
+
+
+ FX
+
+
+
+ Textúrák
+
+
+
+ Közepes
+
+
+
+ Normális
+
+
+
+ Magas
+
+
+
+ Alacsony (32 MB)
+
+
+
+ Normális (64 MB)
+
+
+
+ Magas (128 MB)
+
+
+
+ DisplaySettingsWidget
+
+
+ Megjelenítés
+
+
+
+ Meghajtó
+
+
+
+ Automatikus
+
+
+
+ Határozza meg, hogy a Ryzom OpenGL-t vagy Direct3D-t használjon.
+
+
+
+ Paraméterek
+
+
+
+ Határozza meg, hogy a Ryzom teljes képernyős vagy ablakos üzemmódban fusson:
+
+
+
+ Teljes képernyő
+
+
+
+ Ablakos
+
+
+
+ Határozza meg a megjelenítési módot
+
+
+
+ Szélesség
+
+
+
+ Magasság
+
+
+
+ X helyzet
+
+
+
+ Y Helyzet
+
+
+
+ GeneralSettingsWidget
+
+
+ Nyelv
+
+
+
+ Mentsük a beállításokat kilépéskor
+
+
+
+ Haladó
+
+
+
+ Játék lassítása ( alacsony prioritású folyamat )
+
+
+
+ Angol
+
+
+
+ Francia
+
+
+
+ Német
+
+
+
+ Magyar
+
+
+
+ QObject
+
+
+ Alacsony
+
+
+
+ Közepes
+
+
+
+ Normális
+
+
+
+ Magas
+
+
+
+ SoundSettingsWidget
+
+
+ Hang
+
+
+
+ Software-es hang tárolás ( növelheti az FPS-t )
+
+
+
+ 8 sáv
+
+
+
+ Hang bekapcsolása
+
+
+
+ EAX bekapcsolása
+
+
+
+ FMod bekapcsolása
+
+
+
+ Software-es hang
+
+
+
+ Hangsávok
+
+
+
+ %1 sáv
+
+
+
+ SysInfoD3DWidget
+
+
+ Direct3D információk
+
+
+
+ Leírás
+
+
+
+ Meghajtó
+
+
+
+ Meghajtó verziószám
+
+
+
+ SysInfoOpenGLWidget
+
+
+ OpenGL információk
+
+
+
+ Kiegészítések
+
+
+
+ Szállító
+
+
+
+ Mesa3D OpenGL könyvtár
+
+
+
+ Megjelenítő
+
+
+
+ Mesa3D OpenGL software megjelenítő
+
+
+
+ Verziószám
+
+
+
+ SysInfoWidget
+
+
+ Rendszer információk
+
+
+
+ Alaprendszer
+
+
+
+ Fizikai memória
+
+
+
+ Megjelenítő eszköz
+
+
+
+ Megjelenítő meghajtó verziószám
+
+
+
+ client_config_dialog
+
+
+
+ Ryzom beállító
+
+
+
+
+
+ Általános
+
+
+
+
+ Kategória
+
+
+
+
+ Megjelenítés
+
+
+
+
+ Megjelenítés részletek
+
+
+
+
+ Megjelenítés haladóknak
+
+
+
+
+ Hang
+
+
+
+
+ Rendszer információk
+
+
+
+
+ OpenGL információk
+
+
+
+
+ Direct3D információk
+
+
+
+
+ Alkalmaz
+
+
+
+
+ Alapbeállítások
+
+
+
+
+ Ryom indítása
+
+
+
+ display_settings_advanced_widget
+
+
+
+ Megjelenítés haladóknak
+
+
+
+
+ Csak akkor változtasson ezeken a beállításokon ha nem tudja elindítani a játékot
+
+
+
+
+ Textúratömörítés kikapcsolása
+
+
+
+
+ Csúcsárnyalók kikapcsolása
+
+
+
+
+ AGP kikapcsolása a csúcsok számára
+
+
+
+
+ Képpont árnyalók kikapcsolása
+
+
+
+ display_settings_details_widget
+
+
+
+ Megjelenítés részletek
+
+
+
+
+ Terep
+
+
+
+
+
+
+
+ Részletesség
+
+
+
+
+
+
+
+ Alacsony
+
+
+
+
+ Karakterek
+
+
+
+
+ FX
+
+
+
+
+ Textúrák
+
+
+
+ display_settings_widget
+
+
+
+ Megjelenítés
+
+
+
+
+ Meghajtó
+
+
+
+
+ Határozza meg, hogy a Ryzom OpenGL-t vagy Direct3D-t használjon.
+
+
+
+
+ Automatikus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Paraméterek
+
+
+
+
+ Határozza meg, hogy a Ryzom teljes képernyős vagy ablakos üzemmódban fusson:
+
+
+
+
+ Teljes képernyő
+
+
+
+
+ Határozza meg a megjelenítési módot
+
+
+
+
+ Ablakos
+
+
+
+
+ Szélesség
+
+
+
+
+ Magasság
+
+
+
+
+ X helyzet
+
+
+
+
+ Y Helyzet
+
+
+
+ general_settings_widget
+
+
+
+
+
+
+
+
+ Nyelv
+
+
+
+
+ Angol
+
+
+
+
+ Francia
+
+
+
+
+ Német
+
+
+
+
+ Magyar
+
+
+
+
+ Mentsük a beállításokat kilépéskor
+
+
+
+
+ Haladó
+
+
+
+
+ Játék lassítása ( alacsony prioritású folyamat )
+
+
+
+ sound_settings_widget
+
+
+
+ Hang
+
+
+
+
+ Hang bekapcsolása
+
+
+
+
+ EAX bekapcsolása
+
+
+
+
+ FMod bekapcsolása
+
+
+
+
+ Software-es hang tárolás ( növelheti az FPS-t )
+
+
+
+
+ Hangsávok
+
+
+
+
+ 8 sáv
+
+
+
+ sys_info_d3d_widget
+
+
+
+ Direct3D információk
+
+
+
+
+
+
+
+
+
+ Leírás
+
+
+
+
+ Meghajtó
+
+
+
+
+ Meghajtó verziószám
+
+
+
+ sys_info_opengl_widget
+
+
+
+ OpenGL információk
+
+
+
+
+
+
+
+
+
+ Szállító
+
+
+
+
+ Megjelenítő
+
+
+
+
+ Verziószám
+
+
+
+
+ Kiegészítések
+
+
+
+ sys_info_widget
+
+
+
+
+ Rendszer információk
+
+
+
+
+ Alaprendszer
+
+
+
+
+
+
+
+
+
+ Fizikai memória
+
+
+
+
+ Megjelenítő eszköz
+
+
+
+
+ Megjelenítő meghajtó verziószám
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/sound_settings_widget.cpp b/code/ryzom/tools/client/client_config_qt/sound_settings_widget.cpp
new file mode 100644
index 000000000..1b7dc5248
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sound_settings_widget.cpp
@@ -0,0 +1,99 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "sound_settings_widget.h"
+#include "system.h"
+
+CSoundSettingsWidget::CSoundSettingsWidget( QWidget *parent ) :
+ CWidgetBase( parent )
+{
+ setupUi( this );
+ load();
+
+ connect( tracksSlider, SIGNAL( valueChanged( int ) ), this, SLOT( onTracksSliderChange() ) );
+ connect( soundCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( eaxCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( softwareCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+ connect( fmodCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
+}
+
+CSoundSettingsWidget::~CSoundSettingsWidget()
+{
+}
+
+void CSoundSettingsWidget::onTracksSliderChange()
+{
+ updateTracksLabel();
+ emit changed();
+}
+
+void CSoundSettingsWidget::load()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ if( s.config.getInt( "SoundOn" ) == 1 )
+ soundCheckBox->setChecked( true );
+
+ if( s.config.getInt( "UseEax" ) == 1 )
+ eaxCheckBox->setChecked( true );
+
+ if( s.config.getInt( "SoundForceSoftwareBuffer" ) == 1 )
+ softwareCheckBox->setChecked( true );
+
+ sint32 tracks = s.config.getInt( "MaxTrack" );
+ if( tracks < 4 )
+ tracks = 4;
+ if( tracks > 32 )
+ tracks = 32;
+ tracksSlider->setValue( tracks / 4 );
+
+ if( s.config.getString( "DriverSound" ).compare( "FMod" ) == 0 )
+ fmodCheckBox->setChecked( true );
+}
+
+void CSoundSettingsWidget::save()
+{
+ CSystem &s = CSystem::GetInstance();
+
+ if( soundCheckBox->isChecked() )
+ s.config.setInt( "SoundOn", 1 );
+
+ if( eaxCheckBox->isChecked() )
+ s.config.setInt( "UseEax", 1 );
+
+ if( softwareCheckBox->isChecked() )
+ s.config.setInt( "SoundForceSoftwareBuffer", 1 );
+
+ s.config.setInt( "MaxTrack", tracksSlider->value() * 4 );
+
+ if( fmodCheckBox->isChecked() )
+ s.config.setString( "DriverSound", std::string( "FMod" ) );
+}
+
+void CSoundSettingsWidget::changeEvent( QEvent *event )
+{
+ if( event->type() == QEvent::LanguageChange )
+ {
+ retranslateUi( this );
+ updateTracksLabel();
+ }
+ QWidget::changeEvent( event );
+}
+
+void CSoundSettingsWidget::updateTracksLabel()
+{
+ tracksLabel->setText( tr( "%1 tracks" ).arg( tracksSlider->value() * 4 ) );
+}
\ No newline at end of file
diff --git a/code/ryzom/tools/client/client_config_qt/sound_settings_widget.h b/code/ryzom/tools/client/client_config_qt/sound_settings_widget.h
new file mode 100644
index 000000000..f1a54114b
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sound_settings_widget.h
@@ -0,0 +1,50 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef SOUNDSETTINGSWIDGET_H
+#define SOUNDSETTINGSWIDGET_H
+
+#include "ui_sound_settings_widget.h"
+#include "widget_base.h"
+#include
+
+/**
+ @brief The sound settings page of the configuration tool
+*/
+class CSoundSettingsWidget : public CWidgetBase, public Ui::sound_settings_widget
+{
+ Q_OBJECT
+public:
+ CSoundSettingsWidget( QWidget *parent = NULL );
+ ~CSoundSettingsWidget();
+
+ void load();
+ void save();
+
+protected:
+ void changeEvent( QEvent *event );
+
+private slots:
+ void onTracksSliderChange();
+
+private:
+ /**
+ @brief Updates the text on the tracks label.
+ */
+ void updateTracksLabel();
+};
+
+#endif // SOUNDSETTINGSWIDGET_H
diff --git a/code/ryzom/tools/client/client_config_qt/sound_settings_widget.ui b/code/ryzom/tools/client/client_config_qt/sound_settings_widget.ui
new file mode 100644
index 000000000..7ae6ef699
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sound_settings_widget.ui
@@ -0,0 +1,155 @@
+
+
+ sound_settings_widget
+
+
+
+ 0
+ 0
+ 391
+ 429
+
+
+
+ Sound
+
+
+ -
+
+
-
+
+
-
+
+
+ Enable sound
+
+
+
+ -
+
+
+ Enable EAX
+
+
+
+ -
+
+
+ Enable FMod
+
+
+
+ -
+
+
+ Software sound buffer ( may increase FPS )
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Maximum
+
+
+
+ 20
+ 13
+
+
+
+
+ -
+
+
+ Sound tracks
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Maximum
+
+
+
+ 20
+ 18
+
+
+
+
+ -
+
+
-
+
+
+ 1
+
+
+ 8
+
+
+ 1
+
+
+ 4
+
+
+ 1
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ 8 tracks
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 180
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 223
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.cpp b/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.cpp
new file mode 100644
index 000000000..2852a98dd
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.cpp
@@ -0,0 +1,41 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "sys_info_d3d_widget.h"
+#include "system.h"
+
+CSysInfoD3DWidget::CSysInfoD3DWidget( QWidget *parent ) :
+ QWidget( parent )
+{
+ setupUi( this );
+
+ descriptionLabel->setText( CSystem::GetInstance().d3dInfo.device.c_str() );
+ driverLabel->setText( CSystem::GetInstance().d3dInfo.driver.c_str() );
+ versionLabel->setText( CSystem::GetInstance().d3dInfo.driverVersion.c_str() );
+}
+
+CSysInfoD3DWidget::~CSysInfoD3DWidget()
+{
+}
+
+void CSysInfoD3DWidget::changeEvent( QEvent *event )
+{
+ if( event->type() == QEvent::LanguageChange )
+ {
+ retranslateUi( this );
+ }
+ QWidget::changeEvent( event );
+}
diff --git a/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.h b/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.h
new file mode 100644
index 000000000..64d13a6a4
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.h
@@ -0,0 +1,39 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef SYSINFOD3DWIDGET_H
+#define SYSINFOD3DWIDGET_H
+
+#include "ui_sys_Info_d3d_widget.h"
+
+
+/**
+ @brief The Direct3D information page of the configuration tool
+*/
+class CSysInfoD3DWidget : public QWidget, public Ui::sys_info_d3d_widget
+{
+ Q_OBJECT
+public:
+ CSysInfoD3DWidget( QWidget *parent = NULL );
+ ~CSysInfoD3DWidget();
+
+protected:
+ void changeEvent( QEvent *event );
+
+};
+
+
+#endif // SYSINFOD3DWIDGET_H
diff --git a/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.ui b/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.ui
new file mode 100644
index 000000000..b60d753b2
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.ui
@@ -0,0 +1,156 @@
+
+
+ sys_info_d3d_widget
+
+
+
+ 0
+ 0
+ 391
+ 429
+
+
+
+ Direct3D information
+
+
+ -
+
+
+ Direct3D
+
+
+
-
+
+
-
+
+
-
+
+
+ Description
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ S3 Trio 64
+
+
+
+ -
+
+
+ Driver
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ s3trio64_d3d.dll
+
+
+
+ -
+
+
+ Driver version
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 66.6
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.cpp b/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.cpp
new file mode 100644
index 000000000..9792bbdbc
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.cpp
@@ -0,0 +1,42 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "sys_info_opengl_widget.h"
+#include "system.h"
+
+CSysInfoOpenGLWidget::CSysInfoOpenGLWidget( QWidget *parent ) :
+ QWidget( parent )
+{
+ setupUi( this );
+ vendorLabel->setText( CSystem::GetInstance().openglInfo.vendor.c_str() );
+ rendererLabel->setText( CSystem::GetInstance().openglInfo.renderer.c_str() );
+ versionLabel->setText( CSystem::GetInstance().openglInfo.driverVersion.c_str() );
+ extensionsBox->setPlainText( CSystem::GetInstance().openglInfo.extensions.c_str() );
+
+}
+
+CSysInfoOpenGLWidget::~CSysInfoOpenGLWidget()
+{
+}
+
+void CSysInfoOpenGLWidget::changeEvent( QEvent *event )
+{
+ if( event->type() == QEvent::LanguageChange )
+ {
+ retranslateUi( this );
+ }
+ QWidget::changeEvent( event );
+}
diff --git a/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.h b/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.h
new file mode 100644
index 000000000..6f40db7d7
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.h
@@ -0,0 +1,38 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef SYSINFOOPENGLWIDGET_H
+#define SYSINFOOPENGLWIDGET_H
+
+#include "ui_sys_info_opengl_widget.h"
+
+
+/**
+ @brief The OpenGL information page of the configuration tool
+*/
+class CSysInfoOpenGLWidget : public QWidget, public Ui::sys_info_opengl_widget
+{
+ Q_OBJECT
+public:
+ CSysInfoOpenGLWidget( QWidget *parent = NULL );
+ ~CSysInfoOpenGLWidget();
+
+protected:
+ void changeEvent( QEvent *event );
+
+};
+
+#endif // SYSINFOOPENGLWIDGET_H
diff --git a/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.ui b/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.ui
new file mode 100644
index 000000000..b533772cc
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.ui
@@ -0,0 +1,194 @@
+
+
+ sys_info_opengl_widget
+
+
+
+ 0
+ 0
+ 391
+ 429
+
+
+
+ OpenGL information
+
+
+ -
+
+
+ OpenGL
+
+
+
-
+
+
-
+
+
+ Vendor
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mesa3D OpenGL library
+
+
+
+ -
+
+
+ Renderer
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mesa3D OpenGL Software Renderer
+
+
+
+ -
+
+
+ Version
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 6.66
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 99
+
+
+
+
+ -
+
+
+ Extensions
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Qt::ScrollBarAsNeeded
+
+
+ false
+
+
+ true
+
+
+ GL_EXT_SUPERCOOL1
+GL_EXT_SUPERCOOL2
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/sys_info_widget.cpp b/code/ryzom/tools/client/client_config_qt/sys_info_widget.cpp
new file mode 100644
index 000000000..58845fd38
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sys_info_widget.cpp
@@ -0,0 +1,46 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "sys_info_widget.h"
+#include "system.h"
+
+CSysInfoWidget::CSysInfoWidget( QWidget *parent ) :
+ QWidget( parent )
+{
+ setupUi( this );
+
+ osLabel->setText( CSystem::GetInstance().sysInfo.osName.c_str() );
+ cpuLabel->setText( CSystem::GetInstance().sysInfo.cpuName.c_str() );
+
+ ramLabel->setText(
+ QString().setNum( CSystem::GetInstance().sysInfo.totalRAM ).append( " Mb" ) );
+
+ gfxcardLabel->setText( CSystem::GetInstance().sysInfo.videoDevice.c_str() );
+ gfxdriverLabel->setText( CSystem::GetInstance().sysInfo.videoDriverVersion.c_str() );
+}
+
+CSysInfoWidget::~CSysInfoWidget()
+{
+}
+
+void CSysInfoWidget::changeEvent( QEvent *event )
+{
+ if( event->type() == QEvent::LanguageChange )
+ {
+ retranslateUi( this );
+ }
+ QWidget::changeEvent( event );
+}
diff --git a/code/ryzom/tools/client/client_config_qt/sys_info_widget.h b/code/ryzom/tools/client/client_config_qt/sys_info_widget.h
new file mode 100644
index 000000000..8bb885aee
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sys_info_widget.h
@@ -0,0 +1,38 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef SYSINFOWIDGET_H
+#define SYSINFOWIDGET_H
+
+#include "ui_sys_info_widget.h"
+
+
+/**
+ @brief The system information page of the configuration tool
+*/
+class CSysInfoWidget : public QWidget, public Ui::sys_info_widget
+{
+ Q_OBJECT
+public:
+ CSysInfoWidget( QWidget *parent = NULL );
+ ~CSysInfoWidget();
+
+protected:
+ void changeEvent( QEvent *event );
+
+};
+
+#endif // SYSINFOWIDGET_H
diff --git a/code/ryzom/tools/client/client_config_qt/sys_info_widget.ui b/code/ryzom/tools/client/client_config_qt/sys_info_widget.ui
new file mode 100644
index 000000000..c48f4310d
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/sys_info_widget.ui
@@ -0,0 +1,223 @@
+
+
+ sys_info_widget
+
+
+
+ 0
+ 0
+ 391
+ 429
+
+
+
+ System information
+
+
+ -
+
+
+ System information
+
+
+
-
+
+
-
+
+
-
+
+
+ Operating system
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Linux 6.6.6
+
+
+ true
+
+
+
+ -
+
+
+ CPU
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cray threadstorm 64bit @500Mhz ( 96 cores )
+
+
+ true
+
+
+
+ -
+
+
+ Physical memory
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 8192 GB
+
+
+
+ -
+
+
+ Video device
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ S3 trio 64
+
+
+ true
+
+
+
+ -
+
+
+ Video driver version
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 6.66
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/tools/client/client_config_qt/system.cpp b/code/ryzom/tools/client/client_config_qt/system.cpp
new file mode 100644
index 000000000..1bb50e845
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/system.cpp
@@ -0,0 +1,181 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "system.h"
+#include
+#include
+#include
+#include
+
+CSystem *CSystem::instance = NULL;
+
+CSystem::CSystem()
+{
+ GatherSysInfo();
+#ifdef WIN32
+ GatherD3DInfo();
+#endif
+ GatherOpenGLInfo();
+}
+
+CSystem::~CSystem()
+{
+ instance = 0;
+}
+
+
+void CSystem::GatherSysInfo()
+{
+ std::string device;
+ uint64 driver;
+
+ if( NLMISC::CSystemInfo::getVideoInfo( device, driver ) )
+ {
+ sysInfo.videoDevice = device;
+
+ //////////////////////////////////////////////////////////////
+ // FIXME
+ // This is taken from the original configuration tool, and
+ // it generates the same *wrong* version number
+ //////////////////////////////////////////////////////////////
+ uint32 version = static_cast< uint32 >( driver & 0xffff );
+ std::stringstream ss;
+
+ ss << ( version / 1000 % 10 );
+ ss << ".";
+ ss << ( version / 100 % 10 );
+ ss << ".";
+ ss << ( version / 10 % 10 );
+ ss << ".";
+ ss << ( version % 10 );
+
+ sysInfo.videoDriverVersion = ss.str();
+ //////////////////////////////////////////////////////////////
+ }
+ else
+ {
+ sysInfo.videoDevice = "video card";
+ sysInfo.videoDriverVersion = "0.0.0.0";
+ }
+
+ sysInfo.osName = NLMISC::CSystemInfo::getOS();
+ sysInfo.cpuName = NLMISC::CSystemInfo::getProc();
+ sysInfo.totalRAM = NLMISC::CSystemInfo::totalPhysicalMemory();
+ sysInfo.totalRAM /= ( 1024 * 1024 );
+}
+
+#ifdef WIN32
+void CSystem::GatherD3DInfo()
+{
+ NL3D::IDriver *driver = NULL;
+ try
+ {
+ driver = NL3D::CDRU::createD3DDriver();
+
+ NL3D::IDriver::CAdapter adapter;
+
+ if( driver->getAdapter( 0xffffffff, adapter ) )
+ {
+ d3dInfo.device = adapter.Description;
+ d3dInfo.driver = adapter.Driver;
+
+ sint64 ver = adapter.DriverVersion;
+ std::stringstream ss;
+ ss << static_cast< uint16 >( ver >> 48 );
+ ss << ".";
+ ss << static_cast< uint16 >( ver >> 32 );
+ ss << ".";
+ ss << static_cast< uint16 >( ver >> 16 );
+ ss << ".";
+ ss << static_cast< uint16 >( ver & 0xFFFF );
+ d3dInfo.driverVersion = ss.str();
+ }
+
+ GetVideoModes( d3dInfo.modes, driver );
+
+ driver->release();
+ }
+
+ catch( NLMISC::Exception &e )
+ {
+ nlwarning( e.what() );
+ }
+}
+#endif
+
+void CSystem::GatherOpenGLInfo()
+{
+ QGLWidget *gl = new QGLWidget();
+
+ gl->makeCurrent();
+
+ const char *s = NULL;
+ s = reinterpret_cast< const char * >( glGetString( GL_VENDOR ) );
+ if( s != NULL )
+ openglInfo.vendor.assign( s );
+
+ s = reinterpret_cast< const char * >( glGetString( GL_RENDERER ) );
+ if( s != NULL )
+ openglInfo.renderer.assign( s );
+
+ s = reinterpret_cast< const char * >( glGetString( GL_VERSION ) );
+ if( s != NULL )
+ openglInfo.driverVersion.assign( s );
+
+ s = reinterpret_cast< const char * >( glGetString( GL_EXTENSIONS ) );
+ if( s != NULL )
+ {
+ openglInfo.extensions.assign( s );
+ for( std::string::iterator itr = openglInfo.extensions.begin(); itr != openglInfo.extensions.end(); ++itr )
+ if( *itr == ' ' )
+ *itr = '\n';
+ }
+
+ delete gl;
+
+ NL3D::IDriver *driver = NULL;
+ try
+ {
+ driver = NL3D::CDRU::createGlDriver();
+ GetVideoModes( openglInfo.modes, driver );
+ driver->release();
+ }
+
+ catch( NLMISC::Exception &e )
+ {
+ nlwarning( e.what() );
+ }
+}
+
+void CSystem::GetVideoModes( std::vector< CVideoMode > &dst, NL3D::IDriver *driver ) const
+{
+ std::vector< NL3D::GfxMode > modes;
+ driver->getModes( modes );
+
+ for( std::vector< NL3D::GfxMode >::iterator itr = modes.begin(); itr != modes.end(); ++itr )
+ {
+ if( ( itr->Width >= 800 ) && ( itr->Height >= 600 ) && ( itr->Depth == 32 ) && ( itr->Frequency >= 60 ) )
+ {
+ CVideoMode mode;
+ mode.depth = itr->Depth;
+ mode.widht = itr->Width;
+ mode.height = itr->Height;
+ mode.frequency = itr->Frequency;
+
+ dst.push_back( mode );
+ }
+ }
+}
\ No newline at end of file
diff --git a/code/ryzom/tools/client/client_config_qt/system.h b/code/ryzom/tools/client/client_config_qt/system.h
new file mode 100644
index 000000000..fceb6cdd3
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/system.h
@@ -0,0 +1,112 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef SYSTEM_H
+#define SYSTEM_H
+
+#include
+#include "config.h"
+
+namespace NL3D
+{
+class IDriver;
+}
+
+struct CVideoMode
+{
+ unsigned int widht;
+ unsigned int height;
+ unsigned int depth;
+ unsigned int frequency;
+
+ CVideoMode()
+ {
+ widht = 0;
+ height = 0;
+ depth = 0;
+ frequency = 0;
+ }
+
+ bool operator==( CVideoMode &o )
+ {
+ if( ( o.widht == widht ) && ( o.height == height ) && ( o.depth == depth ) && ( o.frequency == frequency ) )
+ return true;
+ else
+ return false;
+ }
+};
+
+/**
+ @brief Singleton class that holds the system information, configs, etc
+*/
+class CSystem
+{
+public:
+ CSystem();
+ ~CSystem();
+
+ static CSystem &GetInstance()
+ {
+ if( instance == 0 )
+ {
+ instance = new CSystem;
+ }
+ return *instance;
+ }
+
+ struct CSysInfo
+ {
+ std::string videoDevice;
+ std::string videoDriverVersion;
+ std::string osName;
+ std::string cpuName;
+ uint64 totalRAM;
+ } sysInfo;
+
+#ifdef WIN32
+ struct CD3DInfo
+ {
+ std::string device;
+ std::string driver;
+ std::string driverVersion;
+ std::vector< CVideoMode > modes;
+ } d3dInfo;
+#endif
+
+ struct COpenGLInfo
+ {
+ std::string vendor;
+ std::string renderer;
+ std::string driverVersion;
+ std::string extensions;
+ std::vector< CVideoMode > modes;
+ } openglInfo;
+
+ CConfig config;
+
+private:
+ void GatherSysInfo();
+#ifdef WIN32
+ void GatherD3DInfo();
+#endif
+ void GatherOpenGLInfo();
+
+ void GetVideoModes( std::vector< CVideoMode > &dst, NL3D::IDriver *driver ) const;
+
+ static CSystem *instance;
+};
+
+#endif // SYSTEM_H
diff --git a/code/ryzom/tools/client/client_config_qt/widget_base.h b/code/ryzom/tools/client/client_config_qt/widget_base.h
new file mode 100644
index 000000000..1cc30c0c3
--- /dev/null
+++ b/code/ryzom/tools/client/client_config_qt/widget_base.h
@@ -0,0 +1,61 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef WIDGETBASE_H
+#define WIDGETBASE_H
+
+#include
+
+/**
+ @brief Base class for the config tool's settings page widgets.
+*/
+class CWidgetBase : public QWidget
+{
+ Q_OBJECT
+
+public:
+ CWidgetBase( QWidget *parent = NULL ) : QWidget( parent ) {}
+ ~CWidgetBase() {}
+
+ /**
+ @brief Tells the widget to load it's values from the config.
+ */
+ virtual void load() = 0;
+
+ /**
+ @brief Tells the widget to save it's values into the config.
+ */
+ virtual void save() = 0;
+
+signals:
+ /**
+ @brief Emitted when the user changes a setting.
+ */
+ void changed();
+
+
+private slots:
+ /**
+ @brief Triggered when something changes in the widget, emits the Changed() signal.
+ */
+ void onSomethingChanged()
+ {
+ emit changed();
+ }
+};
+
+
+#endif