From 8ce27a9a1b67bce6c8511abc5cafdc749ea2edf4 Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 8 Jun 2013 14:56:58 +0200 Subject: [PATCH 01/14] Fixed: EOL for client_config_qt --- .../client/client_config_qt/CMakeLists.txt | 114 ++-- .../client_config_qt/client_config_dialog.cpp | 518 ++++++++--------- .../client_config_qt/client_config_dialog.h | 134 ++--- .../tools/client/client_config_qt/config.cpp | 508 ++++++++--------- .../tools/client/client_config_qt/config.h | 240 ++++---- .../display_settings_advanced_widget.cpp | 172 +++--- .../display_settings_advanced_widget.h | 82 +-- .../display_settings_details_widget.cpp | 534 +++++++++--------- .../display_settings_details_widget.h | 242 ++++---- .../display_settings_widget.cpp | 454 +++++++-------- .../display_settings_widget.h | 144 ++--- .../general_settings_widget.cpp | 242 ++++---- .../general_settings_widget.h | 132 ++--- .../tools/client/client_config_qt/main.cpp | 72 +-- .../sound_settings_widget.cpp | 196 +++---- .../client_config_qt/sound_settings_widget.h | 100 ++-- .../client_config_qt/sys_info_d3d_widget.cpp | 82 +-- .../client_config_qt/sys_info_d3d_widget.h | 78 +-- .../sys_info_opengl_widget.cpp | 84 +-- .../client_config_qt/sys_info_opengl_widget.h | 76 +-- .../client_config_qt/sys_info_widget.cpp | 92 +-- .../client/client_config_qt/sys_info_widget.h | 76 +-- .../tools/client/client_config_qt/system.cpp | 360 ++++++------ .../tools/client/client_config_qt/system.h | 224 ++++---- .../client/client_config_qt/widget_base.h | 122 ++-- 25 files changed, 2539 insertions(+), 2539 deletions(-) diff --git a/code/ryzom/tools/client/client_config_qt/CMakeLists.txt b/code/ryzom/tools/client/client_config_qt/CMakeLists.txt index c69bb6aed..87c5d7b05 100644 --- a/code/ryzom/tools/client/client_config_qt/CMakeLists.txt +++ b/code/ryzom/tools/client/client_config_qt/CMakeLists.txt @@ -1,57 +1,57 @@ -INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${QT_INCLUDES} ) - -FILE( GLOB SRC *.cpp *.h ) - -SET( CLIENT_CONFIG_HDR - client_config_dialog.h - display_settings_advanced_widget.h - display_settings_details_widget.h - display_settings_widget.h - general_settings_widget.h - sound_settings_widget.h - sys_info_d3d_widget.h - sys_info_opengl_widget.h - sys_info_widget.h - widget_base.h -) - -SET( CLIENT_CONFIG_UIS - 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 -) - -SET( CLIENT_CONFIG_TRANS - translations/ryzom_configuration_en.ts - translations/ryzom_configuration_hu.ts -) - -CONFIGURE_FILE( translations/translations.qrc ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc COPYONLY ) -SET( CLIENT_CONFIG_RCS resources.qrc ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc ) -SET( QT_USE_QTGUI TRUE ) -SET( QT_USE_QTOPENGL TRUE ) -SET( QT_USE_QTCORE TRUE ) -QT4_ADD_TRANSLATION( CLIENT_CONFIG_QM ${CLIENT_CONFIG_TRANS} ) -QT4_ADD_RESOURCES( CLIENT_CONFIG_RC_SRCS ${CLIENT_CONFIG_RCS} ) -QT4_WRAP_CPP( CLIENT_CONFIG_MOC_SRC ${CLIENT_CONFIG_HDR} ) -QT4_WRAP_UI( CLIENT_CONFIG_UI_HDRS ${CLIENT_CONFIG_UIS} ) -SOURCE_GROUP( "Resources" FILES ${CLIENT_CONFIG_RCS} ) -SOURCE_GROUP( "Forms" FILES ${CLIENT_CONFIG_UIS} ) -SOURCE_GROUP( "Generated Files" FILES ${CLIENT_CONFIG_UI_HDRS} ${CLIENT_CONFIG_MOC_SRC} ) -SOURCE_GROUP( "Translation Files" FILES ${CLIENT_CONFIG_TRANS} ) -ADD_DEFINITIONS( ${QT_DEFINITIONS} ) -ADD_EXECUTABLE( ryzom_configuration_qt WIN32 MACOSX_BUNDLE ${SRC} ${CLIENT_CONFIG_MOC_SRC} ${CLIENT_CONFIG_UI_HDRS} ${CLIENT_CONFIG_RC_SRCS} ${CLIENT_CONFIG_TRANS} ) -NL_DEFAULT_PROPS( ryzom_configuration_qt "Ryzom, Tools: Ryzom Configuration Qt" ) -NL_ADD_RUNTIME_FLAGS( ryzom_configuration_qt ) -NL_ADD_LIB_SUFFIX( ryzom_configuration_qt ) -TARGET_LINK_LIBRARIES( ryzom_configuration_qt nelmisc nel3d ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${OPENGL_gl_LIBRARY} ) -INSTALL( TARGETS ryzom_configuration_qt RUNTIME DESTINATION games COMPONENT client BUNDLE DESTINATION /Applications ) - +INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${QT_INCLUDES} ) + +FILE( GLOB SRC *.cpp *.h ) + +SET( CLIENT_CONFIG_HDR + client_config_dialog.h + display_settings_advanced_widget.h + display_settings_details_widget.h + display_settings_widget.h + general_settings_widget.h + sound_settings_widget.h + sys_info_d3d_widget.h + sys_info_opengl_widget.h + sys_info_widget.h + widget_base.h +) + +SET( CLIENT_CONFIG_UIS + 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 +) + +SET( CLIENT_CONFIG_TRANS + translations/ryzom_configuration_en.ts + translations/ryzom_configuration_hu.ts +) + +CONFIGURE_FILE( translations/translations.qrc ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc COPYONLY ) +SET( CLIENT_CONFIG_RCS resources.qrc ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc ) +SET( QT_USE_QTGUI TRUE ) +SET( QT_USE_QTOPENGL TRUE ) +SET( QT_USE_QTCORE TRUE ) +QT4_ADD_TRANSLATION( CLIENT_CONFIG_QM ${CLIENT_CONFIG_TRANS} ) +QT4_ADD_RESOURCES( CLIENT_CONFIG_RC_SRCS ${CLIENT_CONFIG_RCS} ) +QT4_WRAP_CPP( CLIENT_CONFIG_MOC_SRC ${CLIENT_CONFIG_HDR} ) +QT4_WRAP_UI( CLIENT_CONFIG_UI_HDRS ${CLIENT_CONFIG_UIS} ) +SOURCE_GROUP( "Resources" FILES ${CLIENT_CONFIG_RCS} ) +SOURCE_GROUP( "Forms" FILES ${CLIENT_CONFIG_UIS} ) +SOURCE_GROUP( "Generated Files" FILES ${CLIENT_CONFIG_UI_HDRS} ${CLIENT_CONFIG_MOC_SRC} ) +SOURCE_GROUP( "Translation Files" FILES ${CLIENT_CONFIG_TRANS} ) +ADD_DEFINITIONS( ${QT_DEFINITIONS} ) +ADD_EXECUTABLE( ryzom_configuration_qt WIN32 MACOSX_BUNDLE ${SRC} ${CLIENT_CONFIG_MOC_SRC} ${CLIENT_CONFIG_UI_HDRS} ${CLIENT_CONFIG_RC_SRCS} ${CLIENT_CONFIG_TRANS} ) +NL_DEFAULT_PROPS( ryzom_configuration_qt "Ryzom, Tools: Ryzom Configuration Qt" ) +NL_ADD_RUNTIME_FLAGS( ryzom_configuration_qt ) +NL_ADD_LIB_SUFFIX( ryzom_configuration_qt ) +TARGET_LINK_LIBRARIES( ryzom_configuration_qt nelmisc nel3d ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${OPENGL_gl_LIBRARY} ) +INSTALL( TARGETS ryzom_configuration_qt RUNTIME DESTINATION games COMPONENT client BUNDLE DESTINATION /Applications ) + 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 index 2f1e2225f..5c6801152 100644 --- a/code/ryzom/tools/client/client_config_qt/client_config_dialog.cpp +++ b/code/ryzom/tools/client/client_config_qt/client_config_dialog.cpp @@ -1,259 +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; -} - +// 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 index f4902b3f3..d9855afc0 100644 --- a/code/ryzom/tools/client/client_config_qt/client_config_dialog.h +++ b/code/ryzom/tools/client/client_config_qt/client_config_dialog.h @@ -1,67 +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 +// 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/config.cpp b/code/ryzom/tools/client/client_config_qt/config.cpp index f215a87ff..93a757b27 100644 --- a/code/ryzom/tools/client/client_config_qt/config.cpp +++ b/code/ryzom/tools/client/client_config_qt/config.cpp @@ -1,255 +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() ); - } +// 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 index 7749b41b1..df48e19e0 100644 --- a/code/ryzom/tools/client/client_config_qt/config.h +++ b/code/ryzom/tools/client/client_config_qt/config.h @@ -1,120 +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 +// 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 index 7f324f40c..211a4911b 100644 --- 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 @@ -1,86 +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 ); -} +// 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 index 92ca1775a..3f956f626 100644 --- 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 @@ -1,41 +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 +// 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_details_widget.cpp b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.cpp index fdc47d2bd..aeddcf628 100644 --- 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 @@ -1,268 +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; - } +// 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 index 535c3710c..001189432 100644 --- 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 @@ -1,121 +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 +// 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_widget.cpp b/code/ryzom/tools/client/client_config_qt/display_settings_widget.cpp index 89ed62783..f6775a0b7 100644 --- a/code/ryzom/tools/client/client_config_qt/display_settings_widget.cpp +++ b/code/ryzom/tools/client/client_config_qt/display_settings_widget.cpp @@ -1,227 +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; -} +// 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 index 5da578bbf..f67ec8b15 100644 --- a/code/ryzom/tools/client/client_config_qt/display_settings_widget.h +++ b/code/ryzom/tools/client/client_config_qt/display_settings_widget.h @@ -1,72 +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 +// 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/general_settings_widget.cpp b/code/ryzom/tools/client/client_config_qt/general_settings_widget.cpp index 357bd45d4..fcb85dec2 100644 --- a/code/ryzom/tools/client/client_config_qt/general_settings_widget.cpp +++ b/code/ryzom/tools/client/client_config_qt/general_settings_widget.cpp @@ -1,121 +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", std::string( languageCodes[ languageComboBox->currentIndex() ].toUtf8() ) ); - - 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( ":/translations/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; -} +// 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", std::string( languageCodes[ languageComboBox->currentIndex() ].toUtf8() ) ); + + 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( ":/translations/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 index dd6e41752..c8d530ea5 100644 --- a/code/ryzom/tools/client/client_config_qt/general_settings_widget.h +++ b/code/ryzom/tools/client/client_config_qt/general_settings_widget.h @@ -1,66 +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 +// 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/main.cpp b/code/ryzom/tools/client/client_config_qt/main.cpp index f643005bc..758598e92 100644 --- a/code/ryzom/tools/client/client_config_qt/main.cpp +++ b/code/ryzom/tools/client/client_config_qt/main.cpp @@ -1,36 +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(); -} +// 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/sound_settings_widget.cpp b/code/ryzom/tools/client/client_config_qt/sound_settings_widget.cpp index 1b7dc5248..5436ac2b4 100644 --- a/code/ryzom/tools/client/client_config_qt/sound_settings_widget.cpp +++ b/code/ryzom/tools/client/client_config_qt/sound_settings_widget.cpp @@ -1,99 +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 ) ); +// 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 index f1a54114b..d98a89d82 100644 --- a/code/ryzom/tools/client/client_config_qt/sound_settings_widget.h +++ b/code/ryzom/tools/client/client_config_qt/sound_settings_widget.h @@ -1,50 +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 +// 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/sys_info_d3d_widget.cpp b/code/ryzom/tools/client/client_config_qt/sys_info_d3d_widget.cpp index 2852a98dd..894ea07ac 100644 --- 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 @@ -1,41 +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 ); -} +// 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 index 64d13a6a4..6f79782ae 100644 --- 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 @@ -1,39 +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 +// 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_opengl_widget.cpp b/code/ryzom/tools/client/client_config_qt/sys_info_opengl_widget.cpp index 9792bbdbc..0665025be 100644 --- 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 @@ -1,42 +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 ); -} +// 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 index 6f40db7d7..f1d396f51 100644 --- 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 @@ -1,38 +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 +// 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_widget.cpp b/code/ryzom/tools/client/client_config_qt/sys_info_widget.cpp index 58845fd38..26d52ddb8 100644 --- a/code/ryzom/tools/client/client_config_qt/sys_info_widget.cpp +++ b/code/ryzom/tools/client/client_config_qt/sys_info_widget.cpp @@ -1,46 +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 ); -} +// 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 index 8bb885aee..d266c119d 100644 --- a/code/ryzom/tools/client/client_config_qt/sys_info_widget.h +++ b/code/ryzom/tools/client/client_config_qt/sys_info_widget.h @@ -1,38 +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 +// 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/system.cpp b/code/ryzom/tools/client/client_config_qt/system.cpp index 1bb50e845..c4c93f76d 100644 --- a/code/ryzom/tools/client/client_config_qt/system.cpp +++ b/code/ryzom/tools/client/client_config_qt/system.cpp @@ -1,181 +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 ); - } - } +// 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 index fceb6cdd3..bcb5f90bf 100644 --- a/code/ryzom/tools/client/client_config_qt/system.h +++ b/code/ryzom/tools/client/client_config_qt/system.h @@ -1,112 +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 +// 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 index 1cc30c0c3..d9948aeac 100644 --- a/code/ryzom/tools/client/client_config_qt/widget_base.h +++ b/code/ryzom/tools/client/client_config_qt/widget_base.h @@ -1,61 +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 +// 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 From f8083efd87f1ac652492defeafb6f1788ae594ce Mon Sep 17 00:00:00 2001 From: kervala Date: Mon, 10 Jun 2013 15:48:10 +0200 Subject: [PATCH 02/14] Added: CMake project for shape2obj --- code/nel/tools/3d/CMakeLists.txt | 1 + code/nel/tools/3d/shape2obj/CMakeLists.txt | 9 +++++++++ code/nel/tools/3d/shape2obj/main.cpp | 10 ++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 code/nel/tools/3d/shape2obj/CMakeLists.txt diff --git a/code/nel/tools/3d/CMakeLists.txt b/code/nel/tools/3d/CMakeLists.txt index 58360aec0..63bf49cf4 100644 --- a/code/nel/tools/3d/CMakeLists.txt +++ b/code/nel/tools/3d/CMakeLists.txt @@ -21,6 +21,7 @@ SUBDIRS( shapes_exporter tga_cut tga_resize + shape2obj zone_check_bind zone_dump zviewer) diff --git a/code/nel/tools/3d/shape2obj/CMakeLists.txt b/code/nel/tools/3d/shape2obj/CMakeLists.txt new file mode 100644 index 000000000..c6fb25ec7 --- /dev/null +++ b/code/nel/tools/3d/shape2obj/CMakeLists.txt @@ -0,0 +1,9 @@ +FILE(GLOB SRC *.cpp) + +ADD_EXECUTABLE(shape2obj ${SRC}) + +TARGET_LINK_LIBRARIES(shape2obj nelmisc nel3d) +NL_DEFAULT_PROPS(shape2obj "NeL, Tools, 3D: shape2obj") +NL_ADD_RUNTIME_FLAGS(shape2obj) + +INSTALL(TARGETS shape2obj RUNTIME DESTINATION ${NL_BIN_PREFIX} COMPONENT tools3d) diff --git a/code/nel/tools/3d/shape2obj/main.cpp b/code/nel/tools/3d/shape2obj/main.cpp index 91945bdb6..66d9dd6c4 100644 --- a/code/nel/tools/3d/shape2obj/main.cpp +++ b/code/nel/tools/3d/shape2obj/main.cpp @@ -66,7 +66,7 @@ const CIndexBuffer *getRdrPassPrimitiveBlock(const CMeshMRMSkinnedGeom *mesh, ui bool ProcessMeshMRMSkinned(const std::string &filename, IShape *shapeMesh); bool ProcessMeshMRM(const std::string &filename, IShape *shapeMesh); -bool ProcessMesh(const std::string &filename, IShape *shapeMesh); +//bool ProcessMesh(const std::string &filename, IShape *shapeMesh); int main(int argc, char* argv[]) { @@ -110,7 +110,7 @@ int main(int argc, char* argv[]) if (ProcessMeshMRMSkinned(filename, shapeMesh)) return 0; if (ProcessMeshMRM(filename, shapeMesh)) return 0; - if (ProcessMesh(filename, shapeMesh)) return 0; +// if (ProcessMesh(filename, shapeMesh)) return 0; return 0; } @@ -519,6 +519,10 @@ bool ProcessMeshMRM(const std::string &filename, IShape *shapeMesh) return true; } +/* + +TODO: implement this + bool ProcessMesh(const std::string &filename, IShape *shapeMesh) { CMesh *mesh = dynamic_cast(shapeMesh); @@ -666,3 +670,5 @@ bool ProcessMesh(const std::string &filename, IShape *shapeMesh) return true; } + +*/ \ No newline at end of file From cfec0964d4ad3bd02cc1c490ef3beb033a37f560 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sat, 15 Jun 2013 15:52:18 +0200 Subject: [PATCH 03/14] Ignore .Sync* files --- .hgignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgignore b/.hgignore index 6f730f76e..aaea3b6c6 100644 --- a/.hgignore +++ b/.hgignore @@ -146,6 +146,7 @@ external_stlport .svn thumbs.db Thumbs.db +.Sync* # build code/nel/build/* From 7bb67752615ce3c738b1f7bb3f790c11baf28eec Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sun, 16 Jun 2013 02:33:04 +0200 Subject: [PATCH 04/14] Compile NLGUI with lua 5.2 --- code/nel/include/nel/gui/lua_helper.h | 7 +++- code/nel/include/nel/gui/lua_helper_inline.h | 27 +++++++++++++ code/nel/src/gui/lua_helper.cpp | 41 ++++++++++++++++++-- code/nel/src/gui/lua_object.cpp | 4 ++ 4 files changed, 75 insertions(+), 4 deletions(-) diff --git a/code/nel/include/nel/gui/lua_helper.h b/code/nel/include/nel/gui/lua_helper.h index 10b78daa8..d35a1a6df 100644 --- a/code/nel/include/nel/gui/lua_helper.h +++ b/code/nel/include/nel/gui/lua_helper.h @@ -217,6 +217,9 @@ namespace NLGUI void clear() { setTop(0); } int getTop(); bool empty() { return getTop() == 0; } +#if LUA_VERSION_NUM >= 502 + void pushGlobalTable(); +#endif void pushValue(int index); // copie nth element of stack to the top of the stack void remove(int index); // remove nth element of stack void insert(int index); // insert last element of the stack before the given position @@ -301,7 +304,8 @@ namespace NLGUI /** Helper : Execute a function by name. Lookup for the function is done in the table at the index 'funcTableIndex' * the behaviour is the same than with call of pcall. */ - int pcallByName(const char *functionName, int nargs, int nresults, int funcTableIndex = LUA_GLOBALSINDEX, int errfunc = 0); + int pcallByNameGlobal(const char *functionName, int nargs, int nresults, int errfunc = 0); + int pcallByName(const char *functionName, int nargs, int nresults, int funcTableIndex, int errfunc = 0); // push a C closure (pop n element from the stack and associate with the function) void pushCClosure(lua_CFunction function, int n); @@ -367,6 +371,7 @@ namespace NLGUI CLuaState &operator=(const CLuaState &/* other */) { nlassert(0); return *this; } void executeScriptInternal(const std::string &code, const std::string &dbgSrc, int numRet = 0); + int pcallByNameInternal(const char *functionName, int nargs, int nresults, int errfunc, int initialStackSize); }; diff --git a/code/nel/include/nel/gui/lua_helper_inline.h b/code/nel/include/nel/gui/lua_helper_inline.h index 0b9113ce1..60cb00ec4 100644 --- a/code/nel/include/nel/gui/lua_helper_inline.h +++ b/code/nel/include/nel/gui/lua_helper_inline.h @@ -42,10 +42,16 @@ inline void CLuaState::checkIndex(int index) //H_AUTO(Lua_CLuaState_checkIndex) // NB : more restrictive test that in the documentation there, because // we don't expose the check stack function +#if LUA_VERSION_NUM >= 502 + nlassert( (index!=0 && abs(index) <= getTop()) + || index == LUA_REGISTRYINDEX + ); +#else nlassert( (index!=0 && abs(index) <= getTop()) || index == LUA_REGISTRYINDEX || index == LUA_GLOBALSINDEX ); +#endif } //================================================================================ @@ -75,6 +81,15 @@ inline void CLuaState::setTop(int index) lua_settop(_State, index); } +#if LUA_VERSION_NUM >= 502 +//================================================================================ +inline void CLuaState::pushGlobalTable() +{ + //H_AUTO(Lua_CLuaState_pushGlobalTable) + lua_pushglobaltable(_State); +} +#endif + //================================================================================ inline void CLuaState::pushValue(int index) { @@ -243,7 +258,11 @@ inline size_t CLuaState::strlen(int index) { //H_AUTO(Lua_CLuaState_strlen) checkIndex(index); +#if LUA_VERSION_NUM >= 502 + return lua_rawlen(_State, index); +#else return lua_strlen(_State, index); +#endif } //================================================================================ @@ -342,7 +361,11 @@ inline bool CLuaState::equal(int index1, int index2) //H_AUTO(Lua_CLuaState_equal) checkIndex(index1); checkIndex(index2); +#if LUA_VERSION_NUM >= 502 + return lua_compare(_State, index1, index2, LUA_OPEQ) != 0; +#else return lua_equal(_State, index1, index2) != 0; +#endif } //================================================================================ @@ -376,7 +399,11 @@ inline bool CLuaState::lessThan(int index1, int index2) //H_AUTO(Lua_CLuaState_lessThan) checkIndex(index1); checkIndex(index2); +#if LUA_VERSION_NUM >= 502 + return lua_compare(_State, index1, index2, LUA_OPLT) != 0; +#else return lua_lessthan(_State, index1, index2) != 0; +#endif } diff --git a/code/nel/src/gui/lua_helper.cpp b/code/nel/src/gui/lua_helper.cpp index bc800725b..16dca8d7a 100644 --- a/code/nel/src/gui/lua_helper.cpp +++ b/code/nel/src/gui/lua_helper.cpp @@ -361,7 +361,11 @@ namespace NLGUI rd.Str = &code; rd.Done = false; - int result = lua_load(_State, CHelper::luaChunkReaderFromString, (void *) &rd, dbgSrc.c_str()); + int result = lua_load(_State, CHelper::luaChunkReaderFromString, (void *) &rd, dbgSrc.c_str() +#if LUA_VERSION_NUM >= 502 + , NULL +#endif + ); if (result !=0) { // pop the error code @@ -569,9 +573,17 @@ namespace NLGUI //H_AUTO(Lua_CLuaState_registerFunc) nlassert(function); CLuaStackChecker lsc(this); +#if LUA_VERSION_NUM >= 502 + pushGlobalTable(); +#endif push(name); push(function); +#if LUA_VERSION_NUM >= 502 + setTable(-3); // -3 is the pushGlobalTable + pop(1); // pop the pushGlobalTable value (setTable popped the 2 pushes) +#else setTable(LUA_GLOBALSINDEX); +#endif } @@ -643,13 +655,31 @@ namespace NLGUI } // *************************************************************************** - int CLuaState::pcallByName(const char *functionName, int nargs, int nresults, int funcTableIndex /*=LUA_GLOBALSINDEX*/, int errfunc /*= 0*/) + int CLuaState::pcallByNameGlobal(const char *functionName, int nargs, int nresults, int errfunc /*= 0*/) + { + int initialStackSize = getTop(); + nlassert(functionName); +#if LUA_VERSION_NUM >= 502 + pushGlobalTable(); +#else + nlassert(isTable(LUA_GLOBALSINDEX)); + pushValue(LUA_GLOBALSINDEX); +#endif + return pcallByNameInternal(functionName, nargs, nresults, errfunc, initialStackSize); + } + + int CLuaState::pcallByName(const char *functionName, int nargs, int nresults, int funcTableIndex, int errfunc /*= 0*/) { - //H_AUTO(Lua_CLuaState_pcallByName) int initialStackSize = getTop(); nlassert(functionName); nlassert(isTable(funcTableIndex)); pushValue(funcTableIndex); + return pcallByNameInternal(functionName, nargs, nresults, errfunc, initialStackSize); + } + + int CLuaState::pcallByNameInternal(const char *functionName, int nargs, int nresults, int errfunc /*= 0*/, int initialStackSize) + { + //H_AUTO(Lua_CLuaState_pcallByName) push(functionName); getTable(-2); remove(-2); // get rid of the table @@ -782,7 +812,12 @@ namespace NLGUI int CLuaState::getGCCount() { //H_AUTO(Lua_CLuaState_getGCCount) +#if LUA_VERSION_NUM >= 502 + // deprecated + return 0; +#else return lua_getgccount(_State); +#endif } //================================================================================ diff --git a/code/nel/src/gui/lua_object.cpp b/code/nel/src/gui/lua_object.cpp index a7bbbb7f8..3f8924517 100644 --- a/code/nel/src/gui/lua_object.cpp +++ b/code/nel/src/gui/lua_object.cpp @@ -474,7 +474,11 @@ namespace NLGUI CLuaState *luaState = table.getLuaState(); CLuaStackChecker lsc(luaState); // get pointer to the 'next' function +#if LUA_VERSION_NUM >= 502 + luaState->pushGlobalTable(); +#else luaState->pushValue(LUA_GLOBALSINDEX); +#endif _NextFunction = CLuaObject(*luaState)["next"]; // nlassert(luaState); From a06e10621248ae4376bc9e3db475551fd3814f8e Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sun, 16 Jun 2013 03:19:02 +0200 Subject: [PATCH 05/14] Allow compiling with shared libxml2 on Windows --- code/CMakeLists.txt | 4 +++- code/CMakeModules/nel.cmake | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 1ae01610f..0cd9afd54 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -111,9 +111,11 @@ FIND_PACKAGE(LibXml2 REQUIRED) FIND_PACKAGE(PNG REQUIRED) FIND_PACKAGE(Jpeg) +IF(WITH_STATIC_LIBXML2) + SET(LIBXML2_DEFINITIONS ${LIBXML2_DEFINITIONS} -DLIBXML_STATIC) +ENDIF(WITH_STATIC_LIBXML2) IF(WITH_STATIC) # libxml2 could need winsock2 library - SET(LIBXML2_DEFINITIONS ${LIBXML2_DEFINITIONS} -DLIBXML_STATIC) SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${WINSOCK2_LIB}) # on Mac OS X libxml2 requires iconv and liblzma diff --git a/code/CMakeModules/nel.cmake b/code/CMakeModules/nel.cmake index 72e2d07e4..4308d0b44 100644 --- a/code/CMakeModules/nel.cmake +++ b/code/CMakeModules/nel.cmake @@ -247,6 +247,11 @@ MACRO(NL_SETUP_DEFAULT_OPTIONS) ELSE(WIN32) OPTION(WITH_STATIC "With static libraries." OFF) ENDIF(WIN32) + IF (WITH_STATIC) + OPTION(WITH_STATIC_LIBXML2 "With static libxml2" ON ) + ELSE(WITH_STATIC) + OPTION(WITH_STATIC_LIBXML2 "With static libxml2" OFF) + ENDIF(WITH_STATIC) OPTION(WITH_STATIC_DRIVERS "With static drivers." OFF) IF(WIN32) OPTION(WITH_EXTERNAL "With provided external." ON ) From 5fa4beab46937558b3685864fd74eb9991cb02a9 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sun, 16 Jun 2013 03:43:45 +0200 Subject: [PATCH 06/14] Fixes to compile Ryzom Client with lua 5.2 --- code/nel/include/nel/gui/lua_helper.h | 2 -- code/nel/include/nel/gui/lua_helper_inline.h | 7 +++++-- code/ryzom/client/src/commands.cpp | 2 +- .../client/src/interface_v3/dbctrl_sheet.cpp | 4 ++-- .../client/src/interface_v3/lua_ihm_ryzom.cpp | 10 ++++++--- code/ryzom/client/src/main_loop.cpp | 2 +- .../client/src/r2/dmc/com_lua_module.cpp | 21 ++++++++++++++++--- code/ryzom/client/src/r2/editor.cpp | 6 ++++-- .../ryzom/client/src/session_browser_impl.cpp | 10 ++++----- 9 files changed, 43 insertions(+), 21 deletions(-) diff --git a/code/nel/include/nel/gui/lua_helper.h b/code/nel/include/nel/gui/lua_helper.h index d35a1a6df..69639fc04 100644 --- a/code/nel/include/nel/gui/lua_helper.h +++ b/code/nel/include/nel/gui/lua_helper.h @@ -217,9 +217,7 @@ namespace NLGUI void clear() { setTop(0); } int getTop(); bool empty() { return getTop() == 0; } -#if LUA_VERSION_NUM >= 502 void pushGlobalTable(); -#endif void pushValue(int index); // copie nth element of stack to the top of the stack void remove(int index); // remove nth element of stack void insert(int index); // insert last element of the stack before the given position diff --git a/code/nel/include/nel/gui/lua_helper_inline.h b/code/nel/include/nel/gui/lua_helper_inline.h index 60cb00ec4..01afd142f 100644 --- a/code/nel/include/nel/gui/lua_helper_inline.h +++ b/code/nel/include/nel/gui/lua_helper_inline.h @@ -81,14 +81,17 @@ inline void CLuaState::setTop(int index) lua_settop(_State, index); } -#if LUA_VERSION_NUM >= 502 //================================================================================ inline void CLuaState::pushGlobalTable() { //H_AUTO(Lua_CLuaState_pushGlobalTable) +#if LUA_VERSION_NUM >= 502 lua_pushglobaltable(_State); -} +#else + checkIndex(LUA_GLOBALSINDEX); + lua_pushvalue(_State, LUA_GLOBALSINDEX); #endif +} //================================================================================ inline void CLuaState::pushValue(int index) diff --git a/code/ryzom/client/src/commands.cpp b/code/ryzom/client/src/commands.cpp index 406d554e3..3805122f2 100644 --- a/code/ryzom/client/src/commands.cpp +++ b/code/ryzom/client/src/commands.cpp @@ -5164,7 +5164,7 @@ NLMISC_COMMAND(luaObject, "Dump the content of a lua object", " [max CLuaIHMRyzom::debugInfo(e.what()); return false; } - luaState->pushValue(LUA_GLOBALSINDEX); + luaState->pushGlobalTable(); CLuaObject env; env.pop(*luaState); uint maxDepth; diff --git a/code/ryzom/client/src/interface_v3/dbctrl_sheet.cpp b/code/ryzom/client/src/interface_v3/dbctrl_sheet.cpp index 088bcc571..ae06d0997 100644 --- a/code/ryzom/client/src/interface_v3/dbctrl_sheet.cpp +++ b/code/ryzom/client/src/interface_v3/dbctrl_sheet.cpp @@ -108,7 +108,7 @@ ucstring CControlSheetTooltipInfoWaiter::infoValidated(CDBCtrlSheet* ctrlSheet, CLuaStackRestorer lsr(ls, 0); CLuaIHM::pushReflectableOnStack(*ls, (CReflectableRefPtrTarget *)ctrlSheet); - ls->pushValue(LUA_GLOBALSINDEX); + ls->pushGlobalTable(); CLuaObject game(*ls); game = game["game"]; game.callMethodByNameNoThrow(luaMethodName.c_str(), 1, 1); @@ -3170,7 +3170,7 @@ void CDBCtrlSheet::getContextHelp(ucstring &help) const _PhraseAdapter = new CSPhraseComAdpater; _PhraseAdapter->Phrase = pPM->getPhrase(phraseId); CLuaIHM::pushReflectableOnStack(*ls, _PhraseAdapter); - ls->pushValue(LUA_GLOBALSINDEX); + ls->pushGlobalTable(); CLuaObject game(*ls); game = game["game"]; game.callMethodByNameNoThrow("updatePhraseTooltip", 1, 1); diff --git a/code/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp b/code/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp index 06b0b8557..fe4c6a716 100644 --- a/code/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp +++ b/code/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp @@ -187,9 +187,11 @@ static DECLARE_INTERFACE_USER_FCT(lua) // *** clear return value const std::string retId= "__ui_internal_ret_"; CLuaStackChecker lsc(&ls); + ls.pushGlobalTable(); ls.push(retId); ls.pushNil(); - ls.setTable(LUA_GLOBALSINDEX); + ls.setTable(-3); //pop pop + ls.pop(); // *** execute script @@ -201,8 +203,10 @@ static DECLARE_INTERFACE_USER_FCT(lua) // *** retrieve and convert return value + ls.pushGlobalTable(); ls.push(retId); - ls.getTable(LUA_GLOBALSINDEX); + ls.getTable(-2); + ls.remove(-2); bool ok= false; sint type= ls.type(); if (type==LUA_TBOOLEAN) @@ -370,7 +374,7 @@ void CLuaIHMRyzom::RegisterRyzomFunctions( NLGUI::CLuaState &ls ) ls.registerFunc("SNode", CUICtor::SNode); // *** Register the metatable for access to client.cfg (nb nico this may be more general later -> access to any config file ...) - ls.pushValue(LUA_GLOBALSINDEX); + ls.pushGlobalTable(); CLuaObject globals(ls); CLuaObject clientCfg = globals.newTable("config"); CLuaObject mt = globals.newTable("__cfmt"); diff --git a/code/ryzom/client/src/main_loop.cpp b/code/ryzom/client/src/main_loop.cpp index 45c6b5b3a..2c362aceb 100644 --- a/code/ryzom/client/src/main_loop.cpp +++ b/code/ryzom/client/src/main_loop.cpp @@ -3235,7 +3235,7 @@ class CHandlerDebugUiDumpElementUnderMouse : public IActionHandler if (!lua) return; CLuaStackRestorer lsr(lua, 0); CLuaIHM::pushUIOnStack(*lua, HighlightedDebugUI); - lua->pushValue(LUA_GLOBALSINDEX); + lua->pushGlobalTable(); CLuaObject env(*lua); env["inspect"].callNoThrow(1, 0); } diff --git a/code/ryzom/client/src/r2/dmc/com_lua_module.cpp b/code/ryzom/client/src/r2/dmc/com_lua_module.cpp index 80275d280..b91aca95c 100644 --- a/code/ryzom/client/src/r2/dmc/com_lua_module.cpp +++ b/code/ryzom/client/src/r2/dmc/com_lua_module.cpp @@ -77,7 +77,7 @@ CComLuaModule::CComLuaModule(CDynamicMapClient* client, lua_State *luaState /*= #ifdef LUA_NEVRAX_VERSION _LuaState = lua_open(NULL, NULL); #else - _LuaState = lua_open(); + _LuaState = luaL_newstate(); #endif _LuaOwnerShip = false; luaopen_base(_LuaState); @@ -105,7 +105,7 @@ CComLuaModule::CComLuaModule(CDynamicMapClient* client, lua_State *luaState /*= void CComLuaModule::initLuaLib() { //H_AUTO(R2_CComLuaModule_initLuaLib) - const luaL_reg methods[] = + const luaL_Reg methods[] = { {"updateScenario", CComLuaModule::luaUpdateScenario}, {"requestUpdateRtScenario", CComLuaModule::luaRequestUpdateRtScenario}, @@ -237,7 +237,12 @@ void CComLuaModule::initLuaLib() }; int initialStackSize = lua_gettop(_LuaState); +#if LUA_VERSION_NUM >= 502 + luaL_newlib(_LuaState, methods); + lua_setglobal(_LuaState, R2_LUA_PATH); +#else luaL_openlib(_LuaState, R2_LUA_PATH, methods, 0); +#endif lua_settop(_LuaState, initialStackSize); } @@ -1046,7 +1051,11 @@ void CComLuaModule::setObjectToLua(lua_State* state, CObject* object) { int initialStackSize = lua_gettop(state); +#if LUA_VERSION_NUM >= 502 + lua_pushglobaltable(state); // _G +#else lua_pushvalue(state, LUA_GLOBALSINDEX); // _G +#endif lua_pushstring(state, "r2"); // _G, "r2" lua_gettable(state, -2); // G, r2 @@ -1106,6 +1115,8 @@ void CComLuaModule::setObjectToLua(lua_State* state, CObject* object) } } +#if 0 + // okay! if (0) { @@ -1128,6 +1139,7 @@ void CComLuaModule::setObjectToLua(lua_State* state, CObject* object) } } } +#endif } else { @@ -1147,8 +1159,11 @@ CObject* CComLuaModule::getObjectFromLua(lua_State* state, sint idx) { if (lua_getmetatable(state, -1)) { - +#if LUA_VERSION_NUM >= 502 + lua_pushglobaltable(state); // obj, mt, _G +#else lua_pushvalue(state, LUA_GLOBALSINDEX); // obj, mt, _G +#endif lua_pushstring(state, "r2"); // obj, mt, _G, "r2" diff --git a/code/ryzom/client/src/r2/editor.cpp b/code/ryzom/client/src/r2/editor.cpp index bee527bbd..c27001140 100644 --- a/code/ryzom/client/src/r2/editor.cpp +++ b/code/ryzom/client/src/r2/editor.cpp @@ -2613,7 +2613,7 @@ void CEditor::init(TMode initialMode, TAccessMode accessMode) } // CLuaStackChecker lsc(&getLua()); - getLua().pushValue(LUA_GLOBALSINDEX); + getLua().pushGlobalTable(); _Globals.pop(getLua()); getLua().pushValue(LUA_REGISTRYINDEX); _Registry.pop(getLua()); @@ -3956,9 +3956,11 @@ void CEditor::release() // clear the environment if (CLuaManager::getInstance().getLuaState()) { + getLua().pushGlobalTable(); getLua().push(R2_LUA_PATH); getLua().pushNil(); - getLua().setTable(LUA_GLOBALSINDEX); + getLua().setTable(-3); // pop pop + getLua().pop(); _Globals.release(); _Registry.release(); _ObjectProjectionMetatable.release(); // AJM diff --git a/code/ryzom/client/src/session_browser_impl.cpp b/code/ryzom/client/src/session_browser_impl.cpp index 5cdd69291..1802aefbf 100644 --- a/code/ryzom/client/src/session_browser_impl.cpp +++ b/code/ryzom/client/src/session_browser_impl.cpp @@ -51,7 +51,7 @@ void CSessionBrowserImpl::init(CLuaState *ls) { nlassert(ls); _Lua = ls; - _Lua->pushValue(LUA_GLOBALSINDEX); + _Lua->pushGlobalTable(); CLuaObject game(*_Lua); game = game["game"]; game.setValue("getRingSessionList", luaGetRingSessionList); @@ -759,7 +759,7 @@ void CSessionBrowserImpl::callRingAccessPointMethod(const char *name, int numArg nlassert(name); { CLuaStackRestorer lsr(_Lua, _Lua->getTop() + numResult); - _Lua->pushValue(LUA_GLOBALSINDEX); + _Lua->pushGlobalTable(); CLuaObject rap(*_Lua); rap = rap["RingAccessPoint"]; rap.callMethodByNameNoThrow(name, numArg, numResult); @@ -774,7 +774,7 @@ void CSessionBrowserImpl::callRingCharTrackingMethod(const char *name, int numAr nlassert(name); { CLuaStackRestorer lsr(_Lua, _Lua->getTop() + numResult); - _Lua->pushValue(LUA_GLOBALSINDEX); + _Lua->pushGlobalTable(); CLuaObject rap(*_Lua); rap = rap["CharTracking"]; rap.callMethodByNameNoThrow(name, numArg, numResult); @@ -789,7 +789,7 @@ void CSessionBrowserImpl::callRingPlayerInfoMethod(const char *name, int numArg, nlassert(name); { CLuaStackRestorer lsr(_Lua, _Lua->getTop() + numResult); - _Lua->pushValue(LUA_GLOBALSINDEX); + _Lua->pushGlobalTable(); CLuaObject rap(*_Lua); rap = rap["RingPlayerInfo"]; rap.callMethodByNameNoThrow(name, numArg, numResult); @@ -804,7 +804,7 @@ void CSessionBrowserImpl::callScenarioScoresMethod(const char *name, int numArg, nlassert(name); { CLuaStackRestorer lsr(_Lua, _Lua->getTop() + numResult); - _Lua->pushValue(LUA_GLOBALSINDEX); + _Lua->pushGlobalTable(); CLuaObject rap(*_Lua); rap = rap["ScenarioScores"]; rap.callMethodByNameNoThrow(name, numArg, numResult); From 3df3fb730b15ab967bfbe4488c9ab1413d32d08f Mon Sep 17 00:00:00 2001 From: kaetemi Date: Tue, 25 Jun 2013 23:57:23 +0200 Subject: [PATCH 07/14] Fix Ryzom Client scripts for lua 5.2 --- .../data/gamedev/interfaces_v3/bg_downloader.lua | 2 +- .../data/gamedev/interfaces_v3/game_r2_loading.lua | 2 +- .../client/data/gamedev/interfaces_v3/interaction.lua | 2 +- .../data/gamedev/interfaces_v3/out_v2_appear.lua | 2 +- .../client/data/gamedev/interfaces_v3/outpost.lua | 10 +++++----- .../ryzom/client/data/gamedev/interfaces_v3/player.lua | 4 ++-- .../data/gamedev/interfaces_v3/ring_access_point.lua | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua b/code/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua index 686e21b6c..c2569b301 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua +++ b/code/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua @@ -84,7 +84,7 @@ function bgdownloader:setPatchProgress(progress) self:getPrioCB().active = true local progressPercentText = string.format("%d%%", 100 * progress) - local progressPostfix = math.mod(os.time(), 3) + local progressPostfix = math.fmod(os.time(), 3) local progressDate = nltime.getLocalTime() / 500 local colValue = math.floor(230 + 24 * math.sin(progressDate)) local color = string.format("%d %d %d %d", colValue, colValue, colValue, 255) diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua b/code/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua index dd3af3c88..33a3810d3 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua +++ b/code/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua @@ -521,7 +521,7 @@ function GameR2Loading:validateLoading() local filename = GameR2Loading.CurrentFile - if string.find(filename, '\.r2', -3) == nil then + if string.find(filename, '.r2', -3) == nil then messageBox(i18n.get("uiR2EDLoadScenario_InvalidFileName")) return end diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/interaction.lua b/code/ryzom/client/data/gamedev/interfaces_v3/interaction.lua index 07d081874..d36486e99 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/interaction.lua +++ b/code/ryzom/client/data/gamedev/interfaces_v3/interaction.lua @@ -131,7 +131,7 @@ local function levelToForceRegion(level) end local function levelToLevelForce(level) - return math.floor(math.mod(level, 50) * 5 / 50) + 1 + return math.floor(math.fmod(level, 50) * 5 / 50) + 1 end diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua b/code/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua index c082f9c00..3754b6b76 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua +++ b/code/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua @@ -135,7 +135,7 @@ end --function outgame:setPatchProgress(progress) -- --debugInfo("*** 3 ***") -- local progressPercentText = string.format("%d%%", 100 * progress) --- local progressPostfix = math.mod(os.time(), 3) +-- local progressPostfix = math.fmod(os.time(), 3) -- --debugInfo("Patch in progress : " .. tostring(progress)) -- local progressDate = nltime.getLocalTime() / 500 -- local colValue = math.floor(230 + 24 * math.sin(progressDate)) diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/outpost.lua b/code/ryzom/client/data/gamedev/interfaces_v3/outpost.lua index e015cdf7e..1036148a0 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/outpost.lua +++ b/code/ryzom/client/data/gamedev/interfaces_v3/outpost.lua @@ -56,7 +56,7 @@ function game:outpostAdjustHour(uiLocal, prop) local h = runExpr(prop); -- add time zone and clamp hour - h = math.mod(h + tz + 24, 24); + h = math.fmod(h + tz + 24, 24); uiGroup[uiLocal].uc_hardtext = string.format('%02d:00', h); end @@ -288,8 +288,8 @@ function game:outpostActiveDefenderHourButton() local timeRangeDef= getDbProp(path .. ':TIME_RANGE_DEF'); local timeRangeDefWanted= getDbProp(path .. ':TIME_RANGE_DEF_WANTED'); timeRangeDef= secondsSince1970ToHour( timeRangeDef ); - timeRangeDef= math.mod(timeRangeDef+24, 24); - timeRangeDefWanted= math.mod(timeRangeDefWanted+24, 24); + timeRangeDef= math.fmod(timeRangeDef+24, 24); + timeRangeDefWanted= math.fmod(timeRangeDefWanted+24, 24); -- if time required is the one obtained, or if we are in peace if( timeRangeDef == timeRangeDefWanted or status<=game.OutpostEnums.Peace ) then @@ -323,8 +323,8 @@ function game:outpostActiveAttackerHourButton() local timeRangeAtt= getDbProp('UI:TEMP:OUTPOST:DECLARE_WAR_ACK_TIME_RANGE_ATT'); local timeRangeAttWanted= getDbProp('UI:TEMP:OUTPOST:DECLARE_WAR_ATTACK_PERIOD'); timeRangeAtt= secondsSince1970ToHour( timeRangeAtt ); - timeRangeAtt= math.mod(timeRangeAtt+24, 24); - timeRangeAttWanted= math.mod(timeRangeAttWanted+24, 24); + timeRangeAtt= math.fmod(timeRangeAtt+24, 24); + timeRangeAttWanted= math.fmod(timeRangeAttWanted+24, 24); -- if time required is the one obtained if( timeRangeAtt == timeRangeAttWanted ) then diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/player.lua b/code/ryzom/client/data/gamedev/interfaces_v3/player.lua index c1abe7b22..062f09690 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/player.lua +++ b/code/ryzom/client/data/gamedev/interfaces_v3/player.lua @@ -803,8 +803,8 @@ end function game:timeInSecondsToReadableTime(regenTime) - local seconds = math.mod(regenTime, 60) - local minutes = math.mod(math.floor(regenTime / 60), 60) + local seconds = math.fmod(regenTime, 60) + local minutes = math.fmod(math.floor(regenTime / 60), 60) local hours = math.floor(regenTime / 3600) local result = "" if seconds > 0 then result = concatUCString(tostring(seconds), i18n.get("uittSecondsShort")) end diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua b/code/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua index d07f5abee..ca04561f1 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua +++ b/code/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua @@ -904,7 +904,7 @@ function RingAccessPoint:onDraw() self.LastRefreshTime = nltime.getLocalTime() / 1000 --self:getWindow():find("refreshText").active = false else - local waitText = i18n.get("uiRAP_WaitMsg" .. math.mod(os.time(), 3)) + local waitText = i18n.get("uiRAP_WaitMsg" .. math.fmod(os.time(), 3)) self:setInfoMessage(waitText) --local refreshText = self:getWindow():find("refreshText") --if not self.ListReceived then From 8795d4bfa2de7620575feb03e7144894d11e4930 Mon Sep 17 00:00:00 2001 From: Matthew Lagoe Date: Tue, 17 Jul 2012 02:48:44 -0700 Subject: [PATCH 08/14] maxlen fix for password and username, also fixed 255 maxlen in email 254 is real max --- .../data/gamedev/interfaces_v3/login_main.xml | 1674 ++++++++--------- 1 file changed, 837 insertions(+), 837 deletions(-) diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/login_main.xml b/code/ryzom/client/data/gamedev/interfaces_v3/login_main.xml index f6dab0c1e..4b8ebd3a5 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/login_main.xml +++ b/code/ryzom/client/data/gamedev/interfaces_v3/login_main.xml @@ -1,837 +1,837 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -