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 + + + Ryzom configuration + + + + + Are you sure you want to quit without saving the configuration? + + + + + CDisplaySettingsDetailsWidget + + + Low + + + + + Medium + + + + + Normal + + + + + High + + + + + Low (32 MB) + + + + + Normal (64 MB) + + + + + High (128 MB) + + + + + CSoundSettingsWidget + + + %1 tracks + + + + + client_config_dialog + + + Ryzom Configuration + + + + + + General + + + + + Category + + + + + Display + + + + + Display details + + + + + Display advanced + + + + + Sound + + + + + System information + + + + + OpenGL information + + + + + Direct3D information + + + + + Apply + + + + + Default + + + + + Play Ryzom + + + + + display_settings_advanced_widget + + + 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 + + + + + display_settings_details_widget + + + Display details + + + + + Landscape + + + + + + + + Level of detail + + + + + + + + Low + + + + + Characters + + + + + FX + + + + + Textures + + + + + display_settings_widget + + + 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 + + + + + Windowed + + + + + Width + + + + + Height + + + + + X position + + + + + Y position + + + + + general_settings_widget + + + Form + + + + + Language + + + + + English + + + + + French + + + + + German + + + + + Hungarian + + + + + Save config file when quitting the game + + + + + Advanced + + + + + Slow down the game ( process low priority ) + + + + + sound_settings_widget + + + Sound + + + + + Enable sound + + + + + Enable EAX + + + + + Enable FMod + + + + + Software sound buffer ( may increase FPS ) + + + + + Sound tracks + + + + + 8 tracks + + + + + sys_info_d3d_widget + + + Direct3D information + + + + + Direct3D + + + + + Description + + + + + Driver + + + + + Driver version + + + + + sys_info_opengl_widget + + + OpenGL information + + + + + OpenGL + + + + + Vendor + + + + + Renderer + + + + + Version + + + + + Extensions + + + + + sys_info_widget + + + + System information + + + + + Operating system + + + + + CPU + + + + + Physical memory + + + + + Video device + + + + + Video driver version + + + + 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 + + + Ryzom configuration + Ryom beállító + + + + Are you sure you want to quit without saving the configuration? + Biztosan ki akar lépni mentés nélkül? + + + + CDisplaySettingsDetailsWidget + + + Low + Alacsony + + + + Medium + Közepes + + + + Normal + Normális + + + + High + Magas + + + + Low (32 MB) + Alacsony (32 MB) + + + + Normal (64 MB) + Normális (64 MB) + + + + High (128 MB) + Magas (128 MB) + + + + CSoundSettingsWidget + + + %1 tracks + %1 sáv + + + + ClientConfigDialog + + Ryzom Configuration + Ryzom beállító + + + General + Általános + + + Category + Kategória + + + Display + Megjelenítés + + + Display details + Megjelenítés részletek + + + Display advanced + Megjelenítés haladóknak + + + Sound + Hang + + + System information + Rendszer információk + + + OpenGL information + OpenGL információk + + + Direct3D information + Direct3D információk + + + Apply + Alkalmaz + + + Default + Alapbeállítások + + + Play Ryzom + Ryom indítása + + + Ryzom configuration + Ryom beállító + + + Are you sure you want to quit without saving the configuration? + Biztosan ki akar lépni mentés nélkül? + + + + DisplaySettingAdvancedWidget + + Display advanced + Megjelenítés haladóknak + + + Modify these settings only if you have trouble launching the game + Csak akkor változtasson ezeken a beállításokon ha nem tudja elindítani a játékot + + + Disable texture compression + Textúratömörítés kikapcsolása + + + Disable vertex shaders + Csúcsárnyalók kikapcsolása + + + Disable AGP for vertices + AGP kikapcsolása a csúcsok számára + + + Disable pixel shaders + Képpont árnyalók kikapcsolása + + + + DisplaySettingsDetailsWidget + + Display details + Megjelenítés részletek + + + Landscape + Terep + + + Level of detail + Részletesség + + + Low + Alacsony + + + Characters + Karakterek + + + FX + FX + + + Textures + Textúrák + + + Medium + Közepes + + + Normal + Normális + + + High + Magas + + + Low (32 MB) + Alacsony (32 MB) + + + Normal (64 MB) + Normális (64 MB) + + + High (128 MB) + Magas (128 MB) + + + + DisplaySettingsWidget + + Display + Megjelenítés + + + Driver + Meghajtó + + + Auto + Automatikus + + + Specify if Ryzom is to be run in OpenGL or Direct3D. + Határozza meg, hogy a Ryzom OpenGL-t vagy Direct3D-t használjon. + + + Parameters + Paraméterek + + + Specify if Ryzom is to be run in full screen or window mode: + Határozza meg, hogy a Ryzom teljes képernyős vagy ablakos üzemmódban fusson: + + + Full screen + Teljes képernyő + + + Windowed + Ablakos + + + Specify a video mode + Határozza meg a megjelenítési módot + + + Width + Szélesség + + + Height + Magasság + + + X position + X helyzet + + + Y position + Y Helyzet + + + + GeneralSettingsWidget + + Language + Nyelv + + + Save config file when quitting the game + Mentsük a beállításokat kilépéskor + + + Advanced + Haladó + + + Slow down the game ( process low priority ) + Játék lassítása ( alacsony prioritású folyamat ) + + + English + Angol + + + French + Francia + + + German + Német + + + Hungarian + Magyar + + + + QObject + + Low + Alacsony + + + Medium + Közepes + + + Normal + Normális + + + High + Magas + + + + SoundSettingsWidget + + Sound + Hang + + + Software sound buffer ( may increase FPS ) + Software-es hang tárolás ( növelheti az FPS-t ) + + + 8 tracks + 8 sáv + + + Enable sound + Hang bekapcsolása + + + Enable EAX + EAX bekapcsolása + + + Enable FMod + FMod bekapcsolása + + + Software sound + Software-es hang + + + Sound tracks + Hangsávok + + + %1 tracks + %1 sáv + + + + SysInfoD3DWidget + + Direct3D information + Direct3D információk + + + Description + Leírás + + + Driver + Meghajtó + + + Driver version + Meghajtó verziószám + + + + SysInfoOpenGLWidget + + OpenGL information + OpenGL információk + + + Extensions + Kiegészítések + + + Vendor + Szállító + + + Mesa3D OpenGL library + Mesa3D OpenGL könyvtár + + + Renderer + Megjelenítő + + + Mesa3D OpenGL Software Renderer + Mesa3D OpenGL software megjelenítő + + + Version + Verziószám + + + + SysInfoWidget + + System information + Rendszer információk + + + Operating system + Alaprendszer + + + Physical memory + Fizikai memória + + + Video device + Megjelenítő eszköz + + + Video driver version + Megjelenítő meghajtó verziószám + + + + client_config_dialog + + + Ryzom Configuration + Ryzom beállító + + + + + General + Általános + + + + Category + Kategória + + + + Display + Megjelenítés + + + + Display details + Megjelenítés részletek + + + + Display advanced + Megjelenítés haladóknak + + + + Sound + Hang + + + + System information + Rendszer információk + + + + OpenGL information + OpenGL információk + + + + Direct3D information + Direct3D információk + + + + Apply + Alkalmaz + + + + Default + Alapbeállítások + + + + Play Ryzom + Ryom indítása + + + + display_settings_advanced_widget + + + Display advanced + Megjelenítés haladóknak + + + + Modify these settings only if you have trouble launching the game + Csak akkor változtasson ezeken a beállításokon ha nem tudja elindítani a játékot + + + + Disable texture compression + Textúratömörítés kikapcsolása + + + + Disable vertex shaders + Csúcsárnyalók kikapcsolása + + + + Disable AGP for vertices + AGP kikapcsolása a csúcsok számára + + + + Disable pixel shaders + Képpont árnyalók kikapcsolása + + + + display_settings_details_widget + + + Display details + Megjelenítés részletek + + + + Landscape + Terep + + + + + + + Level of detail + Részletesség + + + + + + + Low + Alacsony + + + + Characters + Karakterek + + + + FX + FX + + + + Textures + Textúrák + + + + display_settings_widget + + + Display + Megjelenítés + + + + Driver + Meghajtó + + + + Specify if Ryzom is to be run in OpenGL or Direct3D. + Határozza meg, hogy a Ryzom OpenGL-t vagy Direct3D-t használjon. + + + + Auto + Automatikus + + + + OpenGL + + + + + Direct3D + + + + + Parameters + Paraméterek + + + + Specify if Ryzom is to be run in full screen or window mode: + Határozza meg, hogy a Ryzom teljes képernyős vagy ablakos üzemmódban fusson: + + + + Full screen + Teljes képernyő + + + + Specify a video mode + Határozza meg a megjelenítési módot + + + + Windowed + Ablakos + + + + Width + Szélesség + + + + Height + Magasság + + + + X position + X helyzet + + + + Y position + Y Helyzet + + + + general_settings_widget + + + Form + + + + + Language + Nyelv + + + + English + Angol + + + + French + Francia + + + + German + Német + + + + Hungarian + Magyar + + + + Save config file when quitting the game + Mentsük a beállításokat kilépéskor + + + + Advanced + Haladó + + + + Slow down the game ( process low priority ) + Játék lassítása ( alacsony prioritású folyamat ) + + + + sound_settings_widget + + + Sound + Hang + + + + Enable sound + Hang bekapcsolása + + + + Enable EAX + EAX bekapcsolása + + + + Enable FMod + FMod bekapcsolása + + + + Software sound buffer ( may increase FPS ) + Software-es hang tárolás ( növelheti az FPS-t ) + + + + Sound tracks + Hangsávok + + + + 8 tracks + 8 sáv + + + + sys_info_d3d_widget + + + Direct3D information + Direct3D információk + + + + Direct3D + + + + + Description + Leírás + + + + Driver + Meghajtó + + + + Driver version + Meghajtó verziószám + + + + sys_info_opengl_widget + + + OpenGL information + OpenGL információk + + + + OpenGL + + + + + Vendor + Szállító + + + + Renderer + Megjelenítő + + + + Version + Verziószám + + + + Extensions + Kiegészítések + + + + sys_info_widget + + + + System information + Rendszer információk + + + + Operating system + Alaprendszer + + + + CPU + + + + + Physical memory + Fizikai memória + + + + Video device + Megjelenítő eszköz + + + + Video driver version + 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