Changed: #1193 Removed nel configuration module, is used only QSettings.
This commit is contained in:
parent
f7b7dae1a3
commit
4f53f3ab39
32 changed files with 664 additions and 1514 deletions
|
@ -1,29 +0,0 @@
|
||||||
RootConfigFilename = "object_viewer_default.cfg";
|
|
||||||
SearchPaths = {
|
|
||||||
"/mnt/disk_d/NEL3D/texture", "/mnt/disk_d/NEL3D/SFX/maps", "/mnt/disk_d/NEL3D/Database_proto/Stuff/fyros/agent/actors/_textures"
|
|
||||||
};
|
|
||||||
GraphicsEnabled = 1;
|
|
||||||
SoundEnabled = 1;
|
|
||||||
GraphicsDriver = "OpenGL";
|
|
||||||
SoundDriver = "OpenAL";
|
|
||||||
SoundDevice = "";
|
|
||||||
LanguageCode = "en";
|
|
||||||
QtStyle = "";
|
|
||||||
FontName = "andbasr.ttf";
|
|
||||||
FontShadow = 1;
|
|
||||||
BackgroundColor = {
|
|
||||||
98, 98, 98
|
|
||||||
};
|
|
||||||
FogStart = 0.0000000000;
|
|
||||||
FogEnd = 10.0000000000;
|
|
||||||
FogColor = {
|
|
||||||
88, 88, 88
|
|
||||||
};
|
|
||||||
SoundAutoLoadSample = 1;
|
|
||||||
SoundMaxTrack = 48;
|
|
||||||
SoundEnableOccludeObstruct = 1;
|
|
||||||
SoundEnableReverb = 1;
|
|
||||||
SoundManualRolloff = 1;
|
|
||||||
SoundUseADPCM = 0;
|
|
||||||
SoundForceSoftware = 0;
|
|
||||||
CameraFocal = 75.0000000000;
|
|
|
@ -1,156 +0,0 @@
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Config file for Object Viewer Qt ////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
//
|
|
||||||
// This file is used to setup the Object Viewer tool.
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// NeL Qt ////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// Root directory where we can find the client datas (zones, tiles, maps, ...)
|
|
||||||
// You must uncomment this line on GNU/Linux and comment the next one
|
|
||||||
//SearchPaths = { "/usr/local/share/games/nel_qt/" };
|
|
||||||
SearchPaths = { "data" };
|
|
||||||
|
|
||||||
// Which extensions to remap to what if needed (pairs of 2)
|
|
||||||
RemapExtensions = { "png", "tga", "dds", "tga"};
|
|
||||||
|
|
||||||
|
|
||||||
// The language code of the client
|
|
||||||
LanguageCode = "en";
|
|
||||||
|
|
||||||
// If changes to the config should be saved on exit
|
|
||||||
SaveConfig = 1;
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Qt ////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
QtStyle = "Cleanlooks";
|
|
||||||
QtPalette = 0;
|
|
||||||
QtWindowState = "";
|
|
||||||
QtWindowGeometry = "";
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Graphics //////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// Use OpenGL or Direct3D (Windows)
|
|
||||||
GraphicsEnabled = 1;
|
|
||||||
GraphicsDrivers = { "OpenGL", "Direct3D" };
|
|
||||||
GraphicsDriver = "OpenGL";
|
|
||||||
|
|
||||||
// Resolution of the screen
|
|
||||||
// ScreenWidth = 1360;
|
|
||||||
// ScreenHeight = 768;
|
|
||||||
// ScreenDepth = 32;
|
|
||||||
|
|
||||||
// If 1, run in fullscreen mode, 0 for windowed
|
|
||||||
// Fullscreen = 0;
|
|
||||||
|
|
||||||
// Font name used for all text in the client (it can be a .ttf, .fon, .pfb)
|
|
||||||
FontName = "andbasr.ttf";
|
|
||||||
FontShadow = 1;
|
|
||||||
|
|
||||||
// Background color
|
|
||||||
BackgroundColor = { 151, 156, 182 };
|
|
||||||
|
|
||||||
// Bloom effect
|
|
||||||
BloomEffect = 1;
|
|
||||||
BloomSquare = 1;
|
|
||||||
BloomDensity = 120;
|
|
||||||
|
|
||||||
// Path where screenshots are saved
|
|
||||||
ScreenshotName = "nel_qt";
|
|
||||||
ScreenshotJPG = 1;
|
|
||||||
ScreenshotPNG = 1;
|
|
||||||
ScreenshotTGA = 0;
|
|
||||||
ScreenshotPath = "screenshots";
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Environment ///////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CameraFocal = 75.0;
|
|
||||||
|
|
||||||
SunDirection = { -2.935, +0.107, -1.22 };
|
|
||||||
SunAmbient = { 190, 170, 150 };
|
|
||||||
SunDiffuse = { 255, 248, 255 };
|
|
||||||
SunSpecular = { 255, 255, 255};
|
|
||||||
|
|
||||||
// 1 if you want to see the fog
|
|
||||||
FogEnable = 1;
|
|
||||||
FogStart = 100.0; // in meter
|
|
||||||
FogEnd = 250.0; // in meter
|
|
||||||
FogColor = { 129, 136, 205 }; // { 147, 125, 114 };
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////
|
|
||||||
//// Vegetable Landscape Setup (for vegetable edition) //////
|
|
||||||
/////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
VegetTileBank = ""; // this is optional, but obligatory for Vegetable Edit to work properly
|
|
||||||
VegetTileFarBank = ""; // this is optional, but obligatory for Vegetable Edit to work properly
|
|
||||||
VegetLandscapeZones = // this is optional, but obligatory for Vegetable Edit to work properly
|
|
||||||
{
|
|
||||||
"WARNING: Delete this string" // NOT DELETE
|
|
||||||
};
|
|
||||||
|
|
||||||
VegetLandscapeThreshold = 0.01; // this is optional
|
|
||||||
VegetLandscapeTileNear = 50.0; // this is optional
|
|
||||||
VegetLandscapeAmbient = {17, 54, 100, 255} ; // this is optional
|
|
||||||
VegetLandscapeDiffuse = {241, 226, 244, 255} ; // this is optional
|
|
||||||
VegetLandscapeSnapHeight = 1.70; // this is optional
|
|
||||||
VegetLandscapeMultiply = 1.5;
|
|
||||||
|
|
||||||
// veget setup
|
|
||||||
VegetTexture = ""; // this is optional, but important for Vegetable Edit to behave properly
|
|
||||||
VegetAmbient = {80, 80, 80}; // this is optional
|
|
||||||
VegetDiffuse = {255, 255, 255}; // this is optional. NB: works like veget_landscape_diffuse (ie maxLightFactor possible)
|
|
||||||
VegetLightDir = {0.0, 1.0, -1.0}; // this is optional
|
|
||||||
VegetWindDir = {1.0, 1.0, 0.0}; // this is optional
|
|
||||||
VegetWindFreq = 0.5; // this is optional
|
|
||||||
VegetWindPower = 5.0; // this is optional
|
|
||||||
VegetWindBendMin = 0.5; // this is optional
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Time //////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
FpsSmoothing = 64;
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Sound /////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// The sound driver, choose between "Auto", "FMod", "DSound" and "OpenAl"
|
|
||||||
SoundEnabled = 1;
|
|
||||||
SoundDrivers = { "Auto", "OpenAL", "XAudio2", "FMod", "DSound" };
|
|
||||||
SoundDriver = "OpenAL";
|
|
||||||
SoundDevice = "";
|
|
||||||
SoundMaxTrack = 48;
|
|
||||||
SoundEnableOccludeObstruct = 1;
|
|
||||||
SoundEnableReverb = 1;
|
|
||||||
SoundManualRolloff = 1;
|
|
||||||
SoundUseADPCM = 0;
|
|
||||||
SoundForceSoftware = 0;
|
|
||||||
SoundAutoLoadSample = 1;
|
|
||||||
|
|
||||||
SoundPackedSheetPath = "/home/timon/sound";
|
|
||||||
SoundSamplePath = "/home/timon/sound";
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Interface /////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Debug HUD /////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// end of file
|
|
|
@ -71,7 +71,7 @@ public:
|
||||||
virtual void extensionsInitialized() = 0;
|
virtual void extensionsInitialized() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@\brief Called during a shutdown sequence in the same order as initialization
|
@brief Called during a shutdown sequence in the same order as initialization
|
||||||
before the plugins get deleted in reverse order.
|
before the plugins get deleted in reverse order.
|
||||||
|
|
||||||
@details This method should be used to disconnect from other plugins,
|
@details This method should be used to disconnect from other plugins,
|
||||||
|
@ -80,7 +80,7 @@ public:
|
||||||
virtual void shutdown() { }
|
virtual void shutdown() { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@\brief This method should be implemented to work properly NeL singletons.
|
@brief This method should be implemented to work properly NeL singletons.
|
||||||
Called immediately after loading the plugin.
|
Called immediately after loading the plugin.
|
||||||
@code
|
@code
|
||||||
void Plugin::setNelContext(NLMISC::INelContext *nelContext)
|
void Plugin::setNelContext(NLMISC::INelContext *nelContext)
|
||||||
|
|
|
@ -54,7 +54,7 @@ void MenuManager::registerAction(QAction *action, const QString &id)
|
||||||
QMenu *MenuManager::menu(const QString &id) const
|
QMenu *MenuManager::menu(const QString &id) const
|
||||||
{
|
{
|
||||||
QMenu *result = 0;
|
QMenu *result = 0;
|
||||||
if (_menuMap.count(id) == 0)
|
if (!_menuMap.contains(id))
|
||||||
nlwarning("QMenu %s not found", id.toStdString().c_str());
|
nlwarning("QMenu %s not found", id.toStdString().c_str());
|
||||||
else
|
else
|
||||||
result = _menuMap.value(id);
|
result = _menuMap.value(id);
|
||||||
|
@ -64,7 +64,7 @@ QMenu *MenuManager::menu(const QString &id) const
|
||||||
QAction *MenuManager::action(const QString &id) const
|
QAction *MenuManager::action(const QString &id) const
|
||||||
{
|
{
|
||||||
QAction *result = 0;
|
QAction *result = 0;
|
||||||
if (_actionMap.count(id) == 0)
|
if (!_actionMap.contains(id))
|
||||||
nlwarning("QAction %s not found", id.toStdString().c_str());
|
nlwarning("QAction %s not found", id.toStdString().c_str());
|
||||||
else
|
else
|
||||||
result = _actionMap.value(id);
|
result = _actionMap.value(id);
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
namespace Core
|
namespace Core
|
||||||
{
|
{
|
||||||
|
|
||||||
|
QString lastDir = ".";
|
||||||
|
|
||||||
CSearchPathsSettingsPage::CSearchPathsSettingsPage(QObject *parent)
|
CSearchPathsSettingsPage::CSearchPathsSettingsPage(QObject *parent)
|
||||||
: IOptionsPage(parent),
|
: IOptionsPage(parent),
|
||||||
m_page(0)
|
m_page(0)
|
||||||
|
@ -104,13 +106,14 @@ void CSearchPathsSettingsPage::applySearchPaths()
|
||||||
|
|
||||||
void CSearchPathsSettingsPage::addPath()
|
void CSearchPathsSettingsPage::addPath()
|
||||||
{
|
{
|
||||||
QString newPath = QFileDialog::getExistingDirectory(m_page);
|
QString newPath = QFileDialog::getExistingDirectory(m_page, "", lastDir);
|
||||||
if (!newPath.isEmpty())
|
if (!newPath.isEmpty())
|
||||||
{
|
{
|
||||||
QListWidgetItem *newItem = new QListWidgetItem;
|
QListWidgetItem *newItem = new QListWidgetItem;
|
||||||
newItem->setText(newPath);
|
newItem->setText(newPath);
|
||||||
newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||||||
m_ui.pathsListWidget->addItem(newItem);
|
m_ui.pathsListWidget->addItem(newItem);
|
||||||
|
lastDir = newPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkEnabledButton();
|
checkEnabledButton();
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2010 by authors
|
|
||||||
*
|
|
||||||
* This file is part of NEL QT.
|
|
||||||
* NEL QT is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* NEL QT is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with NEL QT; see the file COPYING. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "stdpch.h"
|
|
||||||
#include "callback.h"
|
|
||||||
|
|
||||||
namespace NLQT
|
|
||||||
{
|
|
||||||
|
|
||||||
} /* namespace NLQT */
|
|
||||||
|
|
||||||
/* end of file */
|
|
|
@ -1,327 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2010 by authors
|
|
||||||
*
|
|
||||||
* This file is part of NEL QT.
|
|
||||||
* NEL QT is free software: you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* NEL QT is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with NEL QT; see the file COPYING. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NLQT_CALLBACK_H
|
|
||||||
#define NLQT_CALLBACK_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#ifdef NL_COMP_GCC
|
|
||||||
// temporary fix for GCC 4.4 segmentation fault
|
|
||||||
# undef nlassert
|
|
||||||
# define nlassert(x)
|
|
||||||
#else
|
|
||||||
# include <nel/misc/debug.h>
|
|
||||||
#endif // NL_COMP_GCC
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
|
|
||||||
namespace NLQT
|
|
||||||
{
|
|
||||||
|
|
||||||
#define NLQT_CALLBACK_TEMPLATE \
|
|
||||||
/** \
|
|
||||||
* \brief NLQT_CALLBACK_ARGS_CLASS \
|
|
||||||
* \date 2009-03-03 18:09GMT \
|
|
||||||
* \author Jan Boon (Kaetemi) \
|
|
||||||
* Awesome callback template \
|
|
||||||
*/ \
|
|
||||||
template<typename TReturn NLQT_CALLBACK_ARGS_TYPENAME> \
|
|
||||||
class NLQT_CALLBACK_ARGS_CLASS \
|
|
||||||
{ \
|
|
||||||
/* Very simple reference counting callback base */ \
|
|
||||||
class CCallbackBase \
|
|
||||||
{ \
|
|
||||||
public: \
|
|
||||||
CCallbackBase() : m_RefCount(0) \
|
|
||||||
{ \
|
|
||||||
\
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
virtual ~CCallbackBase() \
|
|
||||||
{ \
|
|
||||||
nlassert(!m_RefCount); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
void refAdd() \
|
|
||||||
{ \
|
|
||||||
++m_RefCount; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
void refRemove() \
|
|
||||||
{ \
|
|
||||||
--m_RefCount; \
|
|
||||||
if (!m_RefCount) \
|
|
||||||
delete this; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
virtual TReturn callback(NLQT_CALLBACK_ARGS_DECL) = 0; \
|
|
||||||
\
|
|
||||||
virtual bool equals(const CCallbackBase *callbackBase) = 0; \
|
|
||||||
\
|
|
||||||
/* disable copy */ \
|
|
||||||
CCallbackBase(const CCallbackBase &); \
|
|
||||||
CCallbackBase &operator=(const CCallbackBase &); \
|
|
||||||
\
|
|
||||||
private: \
|
|
||||||
uint m_RefCount; \
|
|
||||||
}; \
|
|
||||||
\
|
|
||||||
typedef TReturn TCallbackFunction(NLQT_CALLBACK_ARGS_DECL); \
|
|
||||||
class CCallbackFunction : public CCallbackBase \
|
|
||||||
{ \
|
|
||||||
public: \
|
|
||||||
CCallbackFunction(TCallbackFunction *callbackFunction) : m_CallbackFunction(callbackFunction) \
|
|
||||||
{ \
|
|
||||||
nlassert(m_CallbackFunction); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
virtual ~CCallbackFunction() \
|
|
||||||
{ \
|
|
||||||
m_CallbackFunction = NULL; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
virtual TReturn callback(NLQT_CALLBACK_ARGS_DECL) \
|
|
||||||
{ \
|
|
||||||
return m_CallbackFunction(NLQT_CALLBACK_ARGS_IMPL); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
virtual bool equals(const CCallbackBase *callbackBase) \
|
|
||||||
{ \
|
|
||||||
const CCallbackFunction *callbackFunction = \
|
|
||||||
dynamic_cast<const CCallbackFunction *>(callbackBase); \
|
|
||||||
if (!callbackFunction) return false; \
|
|
||||||
return m_CallbackFunction == callbackFunction->m_CallbackFunction; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
private: \
|
|
||||||
TCallbackFunction *m_CallbackFunction; \
|
|
||||||
}; \
|
|
||||||
\
|
|
||||||
template<typename TClass> \
|
|
||||||
class CCallbackMethod : public CCallbackBase \
|
|
||||||
{ \
|
|
||||||
typedef TReturn (TClass::*TCallbackMethod)(NLQT_CALLBACK_ARGS_DECL); \
|
|
||||||
public: \
|
|
||||||
CCallbackMethod(TClass *callbackObject, TCallbackMethod callbackMethod) : m_CallbackObject(callbackObject), m_CallbackMethod(callbackMethod) \
|
|
||||||
{ \
|
|
||||||
nlassert(m_CallbackObject); \
|
|
||||||
nlassert(m_CallbackMethod); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
virtual ~CCallbackMethod() \
|
|
||||||
{ \
|
|
||||||
m_CallbackObject = NULL; \
|
|
||||||
m_CallbackMethod = NULL; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
virtual TReturn callback(NLQT_CALLBACK_ARGS_DECL) \
|
|
||||||
{ \
|
|
||||||
return (m_CallbackObject->*m_CallbackMethod)(NLQT_CALLBACK_ARGS_IMPL); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
virtual bool equals(const CCallbackBase *callbackBase) \
|
|
||||||
{ \
|
|
||||||
const CCallbackMethod *callbackMethod = \
|
|
||||||
dynamic_cast<const CCallbackMethod *>(callbackBase); \
|
|
||||||
if (!callbackMethod) return false; \
|
|
||||||
return m_CallbackObject == callbackMethod->m_CallbackObject \
|
|
||||||
&& m_CallbackMethod == callbackMethod->m_CallbackMethod; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
private: \
|
|
||||||
TClass *m_CallbackObject; \
|
|
||||||
TCallbackMethod m_CallbackMethod; \
|
|
||||||
}; \
|
|
||||||
\
|
|
||||||
public: \
|
|
||||||
CCallback() : m_CallbackBase(NULL) \
|
|
||||||
{ \
|
|
||||||
\
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
CCallback(TCallbackFunction *callbackFunction) : m_CallbackBase(new CCallbackFunction(callbackFunction)) \
|
|
||||||
{ \
|
|
||||||
nlassert(m_CallbackBase); \
|
|
||||||
m_CallbackBase->refAdd(); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
template<typename TClass> \
|
|
||||||
CCallback(TClass *callbackObject, TReturn (TClass::*callbackMethod)(NLQT_CALLBACK_ARGS_DECL)) : m_CallbackBase(new CCallbackMethod<TClass>(callbackObject, callbackMethod)) \
|
|
||||||
{ \
|
|
||||||
nlassert(m_CallbackBase); \
|
|
||||||
m_CallbackBase->refAdd(); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
CCallback(const CCallback &callback) \
|
|
||||||
{ \
|
|
||||||
m_CallbackBase = callback.m_CallbackBase; \
|
|
||||||
if (m_CallbackBase) \
|
|
||||||
m_CallbackBase->refAdd(); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
CCallback &operator=(const CCallback &callback) \
|
|
||||||
{ \
|
|
||||||
if (m_CallbackBase != callback.m_CallbackBase) \
|
|
||||||
{ \
|
|
||||||
if (m_CallbackBase) \
|
|
||||||
m_CallbackBase->refRemove(); \
|
|
||||||
m_CallbackBase = callback.m_CallbackBase; \
|
|
||||||
if (m_CallbackBase) \
|
|
||||||
m_CallbackBase->refAdd(); \
|
|
||||||
} \
|
|
||||||
return *this; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
~CCallback() \
|
|
||||||
{ \
|
|
||||||
if (m_CallbackBase) \
|
|
||||||
{ \
|
|
||||||
m_CallbackBase->refRemove(); \
|
|
||||||
m_CallbackBase = NULL; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
TReturn callback(NLQT_CALLBACK_ARGS_DECL) \
|
|
||||||
{ \
|
|
||||||
nlassert(m_CallbackBase); \
|
|
||||||
return m_CallbackBase->callback(NLQT_CALLBACK_ARGS_IMPL); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
TReturn operator()(NLQT_CALLBACK_ARGS_DECL) \
|
|
||||||
{ \
|
|
||||||
nlassert(m_CallbackBase); \
|
|
||||||
return m_CallbackBase->callback(NLQT_CALLBACK_ARGS_IMPL); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
bool valid() const \
|
|
||||||
{ \
|
|
||||||
return m_CallbackBase != NULL; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
operator bool() const \
|
|
||||||
{ \
|
|
||||||
return m_CallbackBase != NULL; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
bool operator==(const CCallback &callback) \
|
|
||||||
{ \
|
|
||||||
return m_CallbackBase->equals(callback.m_CallbackBase); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
private: \
|
|
||||||
CCallbackBase *m_CallbackBase; \
|
|
||||||
\
|
|
||||||
}; /* class CCallback */ \
|
|
||||||
|
|
||||||
template<typename TReturn, typename TArgsA = void, typename TArgsB = void, typename TArgsC = void, typename TArgsD = void, typename TArgsE = void, typename TArgsF = void, typename TArgsG = void, typename TDummy = void>
|
|
||||||
class CCallback;
|
|
||||||
|
|
||||||
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, void, void, void, void, void, void, void, void>
|
|
||||||
#define NLQT_CALLBACK_ARGS_TYPENAME
|
|
||||||
#define NLQT_CALLBACK_ARGS_DECL
|
|
||||||
#define NLQT_CALLBACK_ARGS_IMPL
|
|
||||||
NLQT_CALLBACK_TEMPLATE
|
|
||||||
#undef NLQT_CALLBACK_ARGS_CLASS
|
|
||||||
#undef NLQT_CALLBACK_ARGS_TYPENAME
|
|
||||||
#undef NLQT_CALLBACK_ARGS_DECL
|
|
||||||
#undef NLQT_CALLBACK_ARGS_IMPL
|
|
||||||
|
|
||||||
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, void, void, void, void, void, void, void>
|
|
||||||
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA
|
|
||||||
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA
|
|
||||||
#define NLQT_CALLBACK_ARGS_IMPL argsA
|
|
||||||
NLQT_CALLBACK_TEMPLATE
|
|
||||||
#undef NLQT_CALLBACK_ARGS_CLASS
|
|
||||||
#undef NLQT_CALLBACK_ARGS_TYPENAME
|
|
||||||
#undef NLQT_CALLBACK_ARGS_DECL
|
|
||||||
#undef NLQT_CALLBACK_ARGS_IMPL
|
|
||||||
|
|
||||||
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, void, void, void, void, void, void>
|
|
||||||
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB
|
|
||||||
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB
|
|
||||||
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB
|
|
||||||
NLQT_CALLBACK_TEMPLATE
|
|
||||||
#undef NLQT_CALLBACK_ARGS_CLASS
|
|
||||||
#undef NLQT_CALLBACK_ARGS_TYPENAME
|
|
||||||
#undef NLQT_CALLBACK_ARGS_DECL
|
|
||||||
#undef NLQT_CALLBACK_ARGS_IMPL
|
|
||||||
|
|
||||||
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, void, void, void, void, void>
|
|
||||||
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC
|
|
||||||
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC
|
|
||||||
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC
|
|
||||||
NLQT_CALLBACK_TEMPLATE
|
|
||||||
#undef NLQT_CALLBACK_ARGS_CLASS
|
|
||||||
#undef NLQT_CALLBACK_ARGS_TYPENAME
|
|
||||||
#undef NLQT_CALLBACK_ARGS_DECL
|
|
||||||
#undef NLQT_CALLBACK_ARGS_IMPL
|
|
||||||
|
|
||||||
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, TArgsD, void, void, void, void>
|
|
||||||
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC, typename TArgsD
|
|
||||||
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC, TArgsD argsD
|
|
||||||
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC, argsD
|
|
||||||
NLQT_CALLBACK_TEMPLATE
|
|
||||||
#undef NLQT_CALLBACK_ARGS_CLASS
|
|
||||||
#undef NLQT_CALLBACK_ARGS_TYPENAME
|
|
||||||
#undef NLQT_CALLBACK_ARGS_DECL
|
|
||||||
#undef NLQT_CALLBACK_ARGS_IMPL
|
|
||||||
|
|
||||||
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, TArgsD, TArgsE, void, void, void>
|
|
||||||
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC, typename TArgsD, typename TArgsE
|
|
||||||
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC, TArgsD argsD, TArgsE argsE
|
|
||||||
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC, argsD, argsE
|
|
||||||
NLQT_CALLBACK_TEMPLATE
|
|
||||||
#undef NLQT_CALLBACK_ARGS_CLASS
|
|
||||||
#undef NLQT_CALLBACK_ARGS_TYPENAME
|
|
||||||
#undef NLQT_CALLBACK_ARGS_DECL
|
|
||||||
#undef NLQT_CALLBACK_ARGS_IMPL
|
|
||||||
|
|
||||||
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, TArgsD, TArgsE, TArgsF, void, void>
|
|
||||||
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC, typename TArgsD, typename TArgsE, typename TArgsF
|
|
||||||
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC, TArgsD argsD, TArgsE argsE, TArgsF argsF
|
|
||||||
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC, argsD, argsE, argsF
|
|
||||||
NLQT_CALLBACK_TEMPLATE
|
|
||||||
#undef NLQT_CALLBACK_ARGS_CLASS
|
|
||||||
#undef NLQT_CALLBACK_ARGS_TYPENAME
|
|
||||||
#undef NLQT_CALLBACK_ARGS_DECL
|
|
||||||
#undef NLQT_CALLBACK_ARGS_IMPL
|
|
||||||
|
|
||||||
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, TArgsD, TArgsE, TArgsF, TArgsG, void>
|
|
||||||
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC, typename TArgsD, typename TArgsE, typename TArgsF, typename TArgsG
|
|
||||||
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC, TArgsD argsD, TArgsE argsE, TArgsF argsF, TArgsG argsG
|
|
||||||
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC, argsD, argsE, argsF, argsG
|
|
||||||
NLQT_CALLBACK_TEMPLATE
|
|
||||||
#undef NLQT_CALLBACK_ARGS_CLASS
|
|
||||||
#undef NLQT_CALLBACK_ARGS_TYPENAME
|
|
||||||
#undef NLQT_CALLBACK_ARGS_DECL
|
|
||||||
#undef NLQT_CALLBACK_ARGS_IMPL
|
|
||||||
#undef NLQT_CALLBACK_ARGS_CLASSNAME
|
|
||||||
|
|
||||||
#undef NLQT_CALLBACK_TEMPLATE
|
|
||||||
|
|
||||||
typedef CCallback<void> CEmptyCallback;
|
|
||||||
|
|
||||||
} /* namespace NLQT */
|
|
||||||
|
|
||||||
#endif /* #ifndef NLQT_CALLBACK_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
|
@ -1,224 +0,0 @@
|
||||||
/*
|
|
||||||
Object Viewer Qt
|
|
||||||
Copyright (C) 2010 Dzmitry Kamiahin <dnk-88@tut.by>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "stdpch.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/debug.h>
|
|
||||||
#include <nel/misc/hierarchical_timer.h>
|
|
||||||
#include <nel/misc/config_file.h>
|
|
||||||
#include <nel/misc/path.h>
|
|
||||||
|
|
||||||
#include "modules.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace NLMISC;
|
|
||||||
|
|
||||||
namespace NLQT
|
|
||||||
{
|
|
||||||
|
|
||||||
CConfiguration::CConfiguration()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
CConfiguration::~CConfiguration()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::init()
|
|
||||||
{
|
|
||||||
nldebug("CConfiguration::init");
|
|
||||||
|
|
||||||
// verify data
|
|
||||||
nlassert(!ConfigCallbacks.size());
|
|
||||||
|
|
||||||
// load config
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ConfigFile.load(NLQT_CONFIG_FILE);
|
|
||||||
}
|
|
||||||
catch(...)
|
|
||||||
{
|
|
||||||
nlerror("Error opening files object_viewer.cfg or object_viewer_default.cfg. Check this files");
|
|
||||||
}
|
|
||||||
// setup config file callback
|
|
||||||
Modules::config().setCallback("SearchPaths", CConfigCallback(this, &CConfiguration::cfcbSearchPaths));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::release()
|
|
||||||
{
|
|
||||||
nldebug("CConfiguration::release");
|
|
||||||
|
|
||||||
Modules::config().dropCallback("SearchPaths");
|
|
||||||
|
|
||||||
// save and release the config file
|
|
||||||
if (ConfigFile.exists("SaveConfig") && ConfigFile.getVarPtr("SaveConfig")->asBool())
|
|
||||||
{
|
|
||||||
ConfigFile.save();
|
|
||||||
}
|
|
||||||
ConfigFile.clear();
|
|
||||||
|
|
||||||
// release the search paths etc
|
|
||||||
CPath::releaseInstance();
|
|
||||||
|
|
||||||
// verify data
|
|
||||||
nlassert(!ConfigCallbacks.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::updateUtilities()
|
|
||||||
{
|
|
||||||
//H_AUTO2
|
|
||||||
CConfigFile::checkConfigFiles();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::configSearchPaths()
|
|
||||||
{
|
|
||||||
cfcbSearchPaths(Modules::config().getConfigFile().getVar("SearchPaths"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::configRemapExtensions()
|
|
||||||
{
|
|
||||||
CConfigFile::CVar *var;
|
|
||||||
var = ConfigFile.getVarPtr("RemapExtensions");
|
|
||||||
uint varsize = var->size();
|
|
||||||
for (uint i = 0; i < varsize; i += 2)
|
|
||||||
CPath::remapExtension(var->asString(i), var->asString(i + 1), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::setAndCallback(const std::string &varName, CConfigCallback configCallback)
|
|
||||||
{
|
|
||||||
ConfigCallbacks[varName] = configCallback;
|
|
||||||
ConfigFile.setCallback(varName, cbConfigCallback);
|
|
||||||
configCallback(*ConfigFile.getVarPtr(varName));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::setCallback(const std::string &varName, CConfigCallback configCallback)
|
|
||||||
{
|
|
||||||
ConfigCallbacks[varName] = configCallback;
|
|
||||||
ConfigFile.setCallback(varName, cbConfigCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::dropCallback(const std::string &varName)
|
|
||||||
{
|
|
||||||
ConfigFile.setCallback(varName, NULL);
|
|
||||||
ConfigCallbacks.erase(varName);
|
|
||||||
}
|
|
||||||
|
|
||||||
float CConfiguration::getValue(const string &varName, float defaultValue)
|
|
||||||
{
|
|
||||||
if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asFloat();
|
|
||||||
CConfigFile::CVar varToCopy;
|
|
||||||
varToCopy.forceAsDouble((double)defaultValue);
|
|
||||||
ConfigFile.insertVar(varName, varToCopy);
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
double CConfiguration::getValue(const string &varName, double defaultValue)
|
|
||||||
{
|
|
||||||
if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asDouble();
|
|
||||||
CConfigFile::CVar varToCopy;
|
|
||||||
varToCopy.forceAsDouble(defaultValue);
|
|
||||||
ConfigFile.insertVar(varName, varToCopy);
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int CConfiguration::getValue(const string &varName, int defaultValue)
|
|
||||||
{
|
|
||||||
if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asInt();
|
|
||||||
CConfigFile::CVar varToCopy;
|
|
||||||
varToCopy.forceAsInt(defaultValue);
|
|
||||||
ConfigFile.insertVar(varName, varToCopy);
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
string CConfiguration::getValue(const string &varName, const string &defaultValue)
|
|
||||||
{
|
|
||||||
if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asString();
|
|
||||||
CConfigFile::CVar varToCopy;
|
|
||||||
varToCopy.forceAsString(defaultValue);
|
|
||||||
ConfigFile.insertVar(varName, varToCopy);
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ucstring CConfiguration::getValue(const string &varName, const ucstring &defaultValue)
|
|
||||||
{
|
|
||||||
if (ConfigFile.exists(varName)) return ucstring::makeFromUtf8(ConfigFile.getVar(varName).asString());
|
|
||||||
CConfigFile::CVar varToCopy;
|
|
||||||
varToCopy.forceAsString(defaultValue.toUtf8());
|
|
||||||
ConfigFile.insertVar(varName, varToCopy);
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CConfiguration::getValue(const string &varName, bool defaultValue)
|
|
||||||
{
|
|
||||||
if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asBool();
|
|
||||||
CConfigFile::CVar varToCopy;
|
|
||||||
varToCopy.forceAsInt(defaultValue ? 1 : 0);
|
|
||||||
ConfigFile.insertVar(varName, varToCopy);
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
CRGBA CConfiguration::getValue(const string &varName, const CRGBA &defaultValue)
|
|
||||||
{
|
|
||||||
if (ConfigFile.exists(varName))
|
|
||||||
{
|
|
||||||
return getValue(ConfigFile.getVar(varName), defaultValue);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// create a new value only if one doesn't exist
|
|
||||||
CConfigFile::CVar varToCopy;
|
|
||||||
varToCopy.forceAsInt(defaultValue.R);
|
|
||||||
varToCopy.setAsInt(defaultValue.G, 1);
|
|
||||||
varToCopy.setAsInt(defaultValue.B, 2);
|
|
||||||
varToCopy.setAsInt(defaultValue.A, 3);
|
|
||||||
ConfigFile.insertVar(varName, varToCopy);
|
|
||||||
}
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
CRGBA CConfiguration::getValue(const CConfigFile::CVar &var, const CRGBA &defaultValue)
|
|
||||||
{
|
|
||||||
if (var.size() >= 3)
|
|
||||||
{
|
|
||||||
if (var.size() > 4)
|
|
||||||
nlwarning("RGBA value in config value '%s' is too long, ignoring unused values");
|
|
||||||
return CRGBA((uint8)var.asInt(0), (uint8)var.asInt(1), (uint8)var.asInt(2), var.size() >= 4 ? (uint8)var.asInt(3) : 255);
|
|
||||||
}
|
|
||||||
nlwarning("Invalid RGBA value in config value '%s', reverting to default { %i, %i, %i, %i }", var.Name.c_str(), (sint)defaultValue.R, (sint)defaultValue.G, (sint)defaultValue.B, (sint)defaultValue.A);
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::cbConfigCallback(NLMISC::CConfigFile::CVar &var)
|
|
||||||
{
|
|
||||||
Modules::config().ConfigCallbacks[var.Name](var);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfiguration::cfcbSearchPaths(NLMISC::CConfigFile::CVar &var)
|
|
||||||
{
|
|
||||||
uint varsize = var.size();
|
|
||||||
for (uint i = 0; i < varsize; ++i)
|
|
||||||
CPath::addSearchPath(var.asString(i), false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* namespace NLQT */
|
|
|
@ -1,97 +0,0 @@
|
||||||
/*
|
|
||||||
Object Viewer Qt
|
|
||||||
Copyright (C) 2010 Dzmitry Kamiahin <dnk-88@tut.by>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CONFIGURATION_H
|
|
||||||
#define CONFIGURATION_H
|
|
||||||
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/config_file.h>
|
|
||||||
#include <nel/misc/rgba.h>
|
|
||||||
#include <nel/misc/ucstring.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include "callback.h"
|
|
||||||
|
|
||||||
#define NLQT_CONFIG_FILE "object_viewer.cfg"
|
|
||||||
|
|
||||||
namespace NLQT
|
|
||||||
{
|
|
||||||
|
|
||||||
typedef CCallback<void, NLMISC::CConfigFile::CVar &> CConfigCallback;
|
|
||||||
|
|
||||||
/**
|
|
||||||
@class CConfiguration
|
|
||||||
@date 2010-02-05 15:44GMT
|
|
||||||
@author Jan Boon (Kaetemi)
|
|
||||||
@brief Read / write settings from the configuration file
|
|
||||||
@details Load the configuration file, and then read/write settings.
|
|
||||||
As well as automatic reading of the search paths and their sets.
|
|
||||||
*/
|
|
||||||
class CConfiguration
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CConfiguration();
|
|
||||||
virtual ~CConfiguration();
|
|
||||||
|
|
||||||
void init();
|
|
||||||
void release();
|
|
||||||
|
|
||||||
void updateUtilities();
|
|
||||||
void configSearchPaths();
|
|
||||||
void configRemapExtensions();
|
|
||||||
|
|
||||||
void setAndCallback(const std::string &varName, CConfigCallback configCallback);
|
|
||||||
void setCallback(const std::string &varName, CConfigCallback configCallback);
|
|
||||||
void dropCallback(const std::string &varName);
|
|
||||||
|
|
||||||
float getValue(const std::string &varName, float defaultValue);
|
|
||||||
double getValue(const std::string &varName, double defaultValue);
|
|
||||||
int getValue(const std::string &varName, int defaultValue);
|
|
||||||
std::string getValue(const std::string &varName, const std::string &defaultValue);
|
|
||||||
ucstring getValue(const std::string &varName, const ucstring &defaultValue);
|
|
||||||
bool getValue(const std::string &varName, bool defaultValue);
|
|
||||||
NLMISC::CRGBA getValue(const std::string &varName, const NLMISC::CRGBA &defaultValue);
|
|
||||||
NLMISC::CRGBA getValue(const NLMISC::CConfigFile::CVar &var, const NLMISC::CRGBA &defaultValue);
|
|
||||||
|
|
||||||
inline NLMISC::CConfigFile &getConfigFile()
|
|
||||||
{
|
|
||||||
return ConfigFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
static void cbConfigCallback(NLMISC::CConfigFile::CVar &var);
|
|
||||||
|
|
||||||
void cfcbSearchPaths(NLMISC::CConfigFile::CVar &var);
|
|
||||||
|
|
||||||
CConfiguration(const CConfiguration &);
|
|
||||||
CConfiguration &operator=(const CConfiguration &);
|
|
||||||
|
|
||||||
NLMISC::CConfigFile ConfigFile;
|
|
||||||
std::map<std::string, CConfigCallback> ConfigCallbacks;
|
|
||||||
|
|
||||||
};/* class CConfiguration */
|
|
||||||
|
|
||||||
} /* namespace NLQT */
|
|
||||||
|
|
||||||
#endif // CONFIGURATION_H
|
|
|
@ -391,6 +391,7 @@ void CEntity::animatePlayList(NL3D::TAnimationTime time)
|
||||||
// If a skeleton model
|
// If a skeleton model
|
||||||
if(!_Skeleton.empty())
|
if(!_Skeleton.empty())
|
||||||
{
|
{
|
||||||
|
_Skeleton.setTransformMode(NL3D::UTransformable::RotQuat);
|
||||||
// scale animated pos value with the CFG scale
|
// scale animated pos value with the CFG scale
|
||||||
pos *= _CharacterScalePos;
|
pos *= _CharacterScalePos;
|
||||||
_Skeleton.setPos(pos);
|
_Skeleton.setPos(pos);
|
||||||
|
@ -398,6 +399,7 @@ void CEntity::animatePlayList(NL3D::TAnimationTime time)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
_Instance.setTransformMode(NL3D::UTransformable::RotQuat);
|
||||||
_Instance.setPos(pos);
|
_Instance.setPos(pos);
|
||||||
_Instance.setRotQuat(current.getRot());
|
_Instance.setRotQuat(current.getRot());
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,12 @@
|
||||||
// Project includes
|
// Project includes
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"
|
||||||
#include "graphics_settings_page.h"
|
#include "graphics_settings_page.h"
|
||||||
|
#include "object_viewer_constants.h"
|
||||||
|
#include "../core/icore.h"
|
||||||
#include "modules.h"
|
#include "modules.h"
|
||||||
|
|
||||||
// Qt includes
|
// Qt includes
|
||||||
|
#include <QtCore/QSettings>
|
||||||
#include <QtGui/QWidget>
|
#include <QtGui/QWidget>
|
||||||
#include <QtGui/QStyleFactory>
|
#include <QtGui/QStyleFactory>
|
||||||
#include <QtGui/QStyle>
|
#include <QtGui/QStyle>
|
||||||
|
@ -49,7 +52,7 @@ QString GraphicsSettingsPage::trName() const
|
||||||
|
|
||||||
QString GraphicsSettingsPage::category() const
|
QString GraphicsSettingsPage::category() const
|
||||||
{
|
{
|
||||||
return QLatin1String("ObjectViewer");
|
return QLatin1String(Constants::OBJECT_VIEWER_SECTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString GraphicsSettingsPage::trCategory() const
|
QString GraphicsSettingsPage::trCategory() const
|
||||||
|
@ -62,13 +65,22 @@ QWidget *GraphicsSettingsPage::createPage(QWidget *parent)
|
||||||
m_page = new QWidget(parent);
|
m_page = new QWidget(parent);
|
||||||
m_ui.setupUi(m_page);
|
m_ui.setupUi(m_page);
|
||||||
|
|
||||||
Modules::config().setAndCallback("GraphicsDrivers", CConfigCallback(this, &GraphicsSettingsPage::cfcbGraphicsDrivers));
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
m_ui.enableBloomCheckBox->setChecked(Modules::objView().getBloomEffect());
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
|
|
||||||
|
QString graphicsDriver = settings->value(Constants::GRAPHICS_DRIVER, "OpenGL").toString();
|
||||||
|
m_ui.driverGraphComboBox->setCurrentIndex(m_ui.driverGraphComboBox->findText(graphicsDriver));
|
||||||
|
|
||||||
|
m_ui.enableBloomCheckBox->setChecked(settings->value(Constants::ENABLE_BLOOM, false).toBool());
|
||||||
m_ui.squareBloomCheckBox->setChecked(NL3D::CBloomEffect::instance().getSquareBloom());
|
m_ui.squareBloomCheckBox->setChecked(NL3D::CBloomEffect::instance().getSquareBloom());
|
||||||
m_ui.bloomDensityHorizontalSlider->setValue(NL3D::CBloomEffect::instance().getDensityBloom());
|
m_ui.bloomDensityHorizontalSlider->setValue(NL3D::CBloomEffect::instance().getDensityBloom());
|
||||||
|
|
||||||
m_ui.styleComboBox->addItems(QStyleFactory::keys());
|
m_ui.styleComboBox->addItems(QStyleFactory::keys());
|
||||||
m_ui.styleComboBox->setCurrentIndex(m_ui.styleComboBox->findText(Modules::config().getValue("QtStyle", std::string("")).c_str()));
|
QString style = settings->value(Constants::QT_STYLE, "").toString();
|
||||||
m_ui.paletteCheckBox->setChecked(Modules::config().getValue("QtPalette", false));
|
m_ui.styleComboBox->setCurrentIndex(m_ui.styleComboBox->findText(style));
|
||||||
|
m_ui.paletteCheckBox->setChecked(settings->value(Constants::QT_PALETTE, true).toBool());
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
|
|
||||||
connect(m_ui.enableBloomCheckBox, SIGNAL(toggled(bool)), this, SLOT(setEnableBloom(bool)));
|
connect(m_ui.enableBloomCheckBox, SIGNAL(toggled(bool)), this, SLOT(setEnableBloom(bool)));
|
||||||
connect(m_ui.squareBloomCheckBox, SIGNAL(toggled(bool)), this, SLOT(setEnableSquareBloon(bool)));
|
connect(m_ui.squareBloomCheckBox, SIGNAL(toggled(bool)), this, SLOT(setEnableSquareBloon(bool)));
|
||||||
|
@ -82,16 +94,19 @@ QWidget *GraphicsSettingsPage::createPage(QWidget *parent)
|
||||||
|
|
||||||
void GraphicsSettingsPage::apply()
|
void GraphicsSettingsPage::apply()
|
||||||
{
|
{
|
||||||
// save graphics settings to config file
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString(m_ui.driverGraphComboBox->currentText().toStdString());
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
|
|
||||||
Modules::config().getConfigFile().getVar("BloomEffect").setAsInt(m_ui.enableBloomCheckBox->isChecked());
|
settings->setValue(Constants::GRAPHICS_DRIVER, m_ui.driverGraphComboBox->currentText());
|
||||||
Modules::config().getConfigFile().getVar("BloomSquare").setAsInt(m_ui.squareBloomCheckBox->isChecked());
|
|
||||||
Modules::config().getConfigFile().getVar("BloomDensity").setAsInt(m_ui.bloomDensityHorizontalSlider->value());
|
|
||||||
|
|
||||||
Modules::config().getConfigFile().getVar("QtStyle").setAsString(m_ui.styleComboBox->currentText().toStdString());
|
// save settings
|
||||||
Modules::config().getConfigFile().getVar("QtPalette").setAsInt(m_ui.paletteCheckBox->isChecked());
|
settings->setValue(Constants::ENABLE_BLOOM, m_ui.enableBloomCheckBox->isChecked());
|
||||||
|
settings->setValue(Constants::ENABLE_SQUARE_BLOOM, m_ui.squareBloomCheckBox->isChecked());
|
||||||
|
settings->setValue(Constants::BLOOM_DENSITY, m_ui.bloomDensityHorizontalSlider->value());
|
||||||
|
settings->setValue(Constants::QT_STYLE, m_ui.styleComboBox->currentText());
|
||||||
|
settings->setValue(Constants::QT_PALETTE, m_ui.paletteCheckBox->isChecked());
|
||||||
|
|
||||||
|
// apply qt style and palette
|
||||||
QApplication::setStyle(QStyleFactory::create(m_ui.styleComboBox->currentText()));
|
QApplication::setStyle(QStyleFactory::create(m_ui.styleComboBox->currentText()));
|
||||||
|
|
||||||
if (m_ui.paletteCheckBox->isChecked())
|
if (m_ui.paletteCheckBox->isChecked())
|
||||||
|
@ -99,12 +114,12 @@ void GraphicsSettingsPage::apply()
|
||||||
else
|
else
|
||||||
QApplication::setPalette(Modules::mainWin().getOriginalPalette());
|
QApplication::setPalette(Modules::mainWin().getOriginalPalette());
|
||||||
|
|
||||||
// save config file
|
settings->endGroup();
|
||||||
Modules::config().getConfigFile().save();
|
settings->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsSettingsPage::finish()
|
void GraphicsSettingsPage::finish()
|
||||||
{
|
{
|
||||||
Modules::config().dropCallback("GraphicsDrivers");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsSettingsPage::setEnableBloom(bool state)
|
void GraphicsSettingsPage::setEnableBloom(bool state)
|
||||||
|
@ -122,26 +137,4 @@ void GraphicsSettingsPage::setDensityBloom(int density)
|
||||||
NL3D::CBloomEffect::instance().setDensityBloom(density);
|
NL3D::CBloomEffect::instance().setDensityBloom(density);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsSettingsPage::cfcbGraphicsDrivers(NLMISC::CConfigFile::CVar &var)
|
|
||||||
{
|
|
||||||
while (m_ui.driverGraphComboBox->count())
|
|
||||||
m_ui.driverGraphComboBox->removeItem(0);
|
|
||||||
|
|
||||||
// load types graphics driver from the config file
|
|
||||||
for (uint i = 0; i < var.size(); ++i)
|
|
||||||
m_ui.driverGraphComboBox->addItem(var.asString(i).c_str());
|
|
||||||
|
|
||||||
// set graphics driver from the config file
|
|
||||||
QString value = Modules::config().getValue("GraphicsDriver", std::string("OpenGL")).c_str();
|
|
||||||
QString dn = value.toLower();
|
|
||||||
for (sint i = 0; i < m_ui.driverGraphComboBox->count(); ++i)
|
|
||||||
{
|
|
||||||
if (dn == m_ui.driverGraphComboBox->itemText(i).toLower())
|
|
||||||
{
|
|
||||||
m_ui.driverGraphComboBox->setCurrentIndex(i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* namespace NLQT */
|
} /* namespace NLQT */
|
|
@ -24,8 +24,6 @@
|
||||||
|
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
|
|
||||||
#include <nel/misc/config_file.h>
|
|
||||||
|
|
||||||
class QWidget;
|
class QWidget;
|
||||||
|
|
||||||
namespace NLQT
|
namespace NLQT
|
||||||
|
@ -55,8 +53,6 @@ private Q_SLOTS:
|
||||||
void setDensityBloom(int density);
|
void setDensityBloom(int density);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void cfcbGraphicsDrivers(NLMISC::CConfigFile::CVar &var);
|
|
||||||
|
|
||||||
QWidget *m_page;
|
QWidget *m_page;
|
||||||
Ui::GraphicsSettingsPage m_ui;
|
Ui::GraphicsSettingsPage m_ui;
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,129 +6,21 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>540</width>
|
<width>274</width>
|
||||||
<height>326</height>
|
<height>277</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<property name="leftMargin">
|
<property name="margin">
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="topMargin">
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>3</number>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="4" column="1">
|
<item row="0" column="0" colspan="3">
|
||||||
<spacer name="verticalSpacer_2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>283</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
|
||||||
<widget class="QGroupBox" name="qtStyleGroupBox">
|
|
||||||
<property name="title">
|
|
||||||
<string>Qt Style</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_6">
|
|
||||||
<property name="text">
|
|
||||||
<string>Style</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer_5">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QComboBox" name="styleComboBox"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="paletteCheckBox">
|
|
||||||
<property name="text">
|
|
||||||
<string>Use style's standard palette</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QGroupBox" name="graphicsGroupBox">
|
|
||||||
<property name="title">
|
|
||||||
<string>Graphics settings</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="driverGraphLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>Driver</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer_3">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QComboBox" name="driverGraphComboBox">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QGroupBox" name="groupBox_2">
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Bloom effect</string>
|
<string>Bloom effect</string>
|
||||||
|
@ -172,6 +64,142 @@
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="0" colspan="3">
|
||||||
|
<widget class="QGroupBox" name="graphicsGroupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Graphics settings</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="driverGraphLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Driver</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="driverGraphComboBox">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>OpenGL</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Direct3D</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="3">
|
||||||
|
<widget class="QGroupBox" name="qtStyleGroupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Qt Style</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Style</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_5">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="styleComboBox"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="paletteCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Use style's standard palette</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Font</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QLineEdit" name="fontLineEdit">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QToolButton" name="fontSelectButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>283</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
#include "tune_mrm_dialog.h"
|
#include "tune_mrm_dialog.h"
|
||||||
#include "tune_timer_dialog.h"
|
#include "tune_timer_dialog.h"
|
||||||
#include "camera_control.h"
|
#include "camera_control.h"
|
||||||
|
#include "object_viewer_constants.h"
|
||||||
|
|
||||||
#include "../core/icore.h"
|
#include "../core/icore.h"
|
||||||
#include "../core/imenu_manager.h"
|
#include "../core/imenu_manager.h"
|
||||||
|
@ -79,11 +80,18 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||||
|
|
||||||
setDockNestingEnabled(true);
|
setDockNestingEnabled(true);
|
||||||
|
|
||||||
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
|
|
||||||
// setup Qt style and palette from config file
|
// setup Qt style and palette from config file
|
||||||
_originalPalette = QApplication::palette();
|
_originalPalette = QApplication::palette();
|
||||||
Modules::config().setAndCallback("QtStyle", CConfigCallback(this, &CMainWindow::cfcbQtStyle));
|
|
||||||
Modules::config().setAndCallback("QtPalette", CConfigCallback(this, &CMainWindow::cfcbQtPalette));
|
QApplication::setStyle(QStyleFactory::create(settings->value(Constants::QT_STYLE, "").toString()));
|
||||||
Modules::config().setAndCallback("SoundEnabled", CConfigCallback(this, &CMainWindow::cfcbSoundEnabled));
|
|
||||||
|
if (settings->value(Constants::QT_PALETTE, true).toBool())
|
||||||
|
QApplication::setPalette(QApplication::style()->standardPalette());
|
||||||
|
else
|
||||||
|
QApplication::setPalette(_originalPalette);
|
||||||
|
|
||||||
_GraphicsViewport->init();
|
_GraphicsViewport->init();
|
||||||
_isGraphicsInitialized = true;
|
_isGraphicsInitialized = true;
|
||||||
|
@ -103,18 +111,16 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||||
|
|
||||||
setWindowIcon(QIcon(":/images/nel.png"));
|
setWindowIcon(QIcon(":/images/nel.png"));
|
||||||
|
|
||||||
QSettings settings("object_viewer_qt.ini", QSettings::IniFormat);
|
restoreState(settings->value("QtWindowState").toByteArray());
|
||||||
settings.beginGroup("WindowSettings");
|
restoreGeometry(settings->value("QtWindowGeometry").toByteArray());
|
||||||
restoreState(settings.value("QtWindowState").toByteArray());
|
|
||||||
restoreGeometry(settings.value("QtWindowGeometry").toByteArray());
|
|
||||||
settings.endGroup();
|
|
||||||
|
|
||||||
// As a special case, a QTimer with a timeout of 0 will time out as soon as all the events in the window system's event queue have been processed.
|
// As a special case, a QTimer with a timeout of 0 will time out as soon as all the events in the window system's event queue have been processed.
|
||||||
// This can be used to do heavy work while providing a snappy user interface.
|
// This can be used to do heavy work while providing a snappy user interface.
|
||||||
_mainTimer = new QTimer(this);
|
_mainTimer = new QTimer(this);
|
||||||
connect(_mainTimer, SIGNAL(timeout()), this, SLOT(updateRender()));
|
connect(_mainTimer, SIGNAL(timeout()), this, SLOT(updateRender()));
|
||||||
connect(_TuneTimerDialog, SIGNAL(changeInterval(int)), this, SLOT(setInterval(int)));
|
connect(_TuneTimerDialog, SIGNAL(changeInterval(int)), this, SLOT(setInterval(int)));
|
||||||
_TuneTimerDialog->setInterval(settings.value("TimerInterval", 25).toInt());
|
_TuneTimerDialog->setInterval(settings->value("TimerInterval", 25).toInt());
|
||||||
|
settings->endGroup();
|
||||||
|
|
||||||
_statusBarTimer = new QTimer(this);
|
_statusBarTimer = new QTimer(this);
|
||||||
connect(_statusBarTimer, SIGNAL(timeout()), this, SLOT(updateStatusBar()));
|
connect(_statusBarTimer, SIGNAL(timeout()), this, SLOT(updateStatusBar()));
|
||||||
|
@ -129,16 +135,13 @@ CMainWindow::~CMainWindow()
|
||||||
nldebug("CMainWindow::~CMainWindow:");
|
nldebug("CMainWindow::~CMainWindow:");
|
||||||
|
|
||||||
// save state & geometry of window and widgets
|
// save state & geometry of window and widgets
|
||||||
QSettings settings("object_viewer_qt.ini", QSettings::IniFormat);
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
settings.beginGroup("WindowSettings");
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
settings.setValue("QtWindowState", saveState());
|
settings->setValue("QtWindowState", saveState());
|
||||||
settings.setValue("QtWindowGeometry", saveGeometry());
|
settings->setValue("QtWindowGeometry", saveGeometry());
|
||||||
settings.endGroup();
|
settings->setValue("TimerInterval", _mainTimer->interval());
|
||||||
settings.setValue("TimerInterval", _mainTimer->interval());
|
settings->endGroup();
|
||||||
|
settings->sync();
|
||||||
Modules::config().dropCallback("SoundEnabled");
|
|
||||||
Modules::config().dropCallback("QtPalette");
|
|
||||||
Modules::config().dropCallback("QtStyle");
|
|
||||||
|
|
||||||
delete _AnimationDialog;
|
delete _AnimationDialog;
|
||||||
delete _AnimationSetDialog;
|
delete _AnimationSetDialog;
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"
|
||||||
#include "modules.h"
|
#include "modules.h"
|
||||||
|
|
||||||
NLQT::CConfiguration *Modules::_configuration = NULL;
|
|
||||||
NLQT::CObjectViewer *Modules::_objectViewer = NULL;
|
NLQT::CObjectViewer *Modules::_objectViewer = NULL;
|
||||||
NLQT::CMainWindow *Modules::_mainWindow = NULL;
|
NLQT::CMainWindow *Modules::_mainWindow = NULL;
|
||||||
NLQT::CParticleEditor *Modules::_particleEditor = NULL;
|
NLQT::CParticleEditor *Modules::_particleEditor = NULL;
|
||||||
|
@ -29,9 +28,6 @@ NLQT::CVegetableEditor *Modules::_vegetableEditor = NULL;
|
||||||
|
|
||||||
void Modules::init()
|
void Modules::init()
|
||||||
{
|
{
|
||||||
if (_configuration == NULL) _configuration = new NLQT::CConfiguration;
|
|
||||||
config().init();
|
|
||||||
|
|
||||||
if (_objectViewer == NULL) _objectViewer = new NLQT::CObjectViewer;
|
if (_objectViewer == NULL) _objectViewer = new NLQT::CObjectViewer;
|
||||||
if (_soundSystem == NULL) _soundSystem = new NLQT::CSoundSystem;
|
if (_soundSystem == NULL) _soundSystem = new NLQT::CSoundSystem;
|
||||||
if (_particleEditor == NULL) _particleEditor = new NLQT::CParticleEditor;
|
if (_particleEditor == NULL) _particleEditor = new NLQT::CParticleEditor;
|
||||||
|
@ -51,8 +47,4 @@ void Modules::release()
|
||||||
_soundSystem = NULL;
|
_soundSystem = NULL;
|
||||||
delete _objectViewer;
|
delete _objectViewer;
|
||||||
_objectViewer = NULL;
|
_objectViewer = NULL;
|
||||||
|
|
||||||
config().release();
|
|
||||||
delete _configuration;
|
|
||||||
_configuration = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
#ifndef MODULES_H
|
#ifndef MODULES_H
|
||||||
#define MODULES_H
|
#define MODULES_H
|
||||||
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "object_viewer.h"
|
#include "object_viewer.h"
|
||||||
#include "particle_editor.h"
|
#include "particle_editor.h"
|
||||||
#include "main_window.h"
|
#include "main_window.h"
|
||||||
|
@ -37,10 +36,6 @@ public:
|
||||||
static void init();
|
static void init();
|
||||||
static void release();
|
static void release();
|
||||||
|
|
||||||
static NLQT::CConfiguration &config()
|
|
||||||
{
|
|
||||||
return *_configuration;
|
|
||||||
}
|
|
||||||
static NLQT::CObjectViewer &objView()
|
static NLQT::CObjectViewer &objView()
|
||||||
{
|
{
|
||||||
return *_objectViewer;
|
return *_objectViewer;
|
||||||
|
@ -63,7 +58,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static NLQT::CConfiguration *_configuration;
|
|
||||||
static NLQT::CObjectViewer *_objectViewer;
|
static NLQT::CObjectViewer *_objectViewer;
|
||||||
static NLQT::CMainWindow *_mainWindow;
|
static NLQT::CMainWindow *_mainWindow;
|
||||||
static NLQT::CParticleEditor *_particleEditor;
|
static NLQT::CParticleEditor *_particleEditor;
|
||||||
|
|
|
@ -16,11 +16,15 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
// Project includes
|
||||||
|
#include "modules.h"
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"
|
||||||
#include "object_viewer.h"
|
#include "object_viewer.h"
|
||||||
|
#include "object_viewer_constants.h"
|
||||||
|
#include "../core/icore.h"
|
||||||
|
|
||||||
// STL includes
|
// Qt includes
|
||||||
|
#include <QtCore/QSettings>
|
||||||
|
|
||||||
// NeL includes
|
// NeL includes
|
||||||
#include <nel/misc/debug.h>
|
#include <nel/misc/debug.h>
|
||||||
|
@ -45,14 +49,6 @@
|
||||||
#include <nel/3d/scene_user.h>
|
#include <nel/3d/scene_user.h>
|
||||||
#include <nel/3d/bloom_effect.h>
|
#include <nel/3d/bloom_effect.h>
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include "modules.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace NLMISC;
|
|
||||||
using namespace NL3D;
|
|
||||||
|
|
||||||
namespace NLQT
|
namespace NLQT
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -66,11 +62,12 @@ CObjectViewer::CObjectViewer()
|
||||||
_CurrentInstance(""),
|
_CurrentInstance(""),
|
||||||
_BloomEffect(false)
|
_BloomEffect(false)
|
||||||
{
|
{
|
||||||
|
loadConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
CObjectViewer::~CObjectViewer()
|
CObjectViewer::~CObjectViewer()
|
||||||
{
|
{
|
||||||
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h)
|
void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h)
|
||||||
|
@ -78,12 +75,10 @@ void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h)
|
||||||
//H_AUTO2
|
//H_AUTO2
|
||||||
nldebug("CObjectViewert::init");
|
nldebug("CObjectViewert::init");
|
||||||
|
|
||||||
loadConfig();
|
|
||||||
|
|
||||||
// create the driver
|
// create the driver
|
||||||
nlassert(!_Driver);
|
nlassert(!_Driver);
|
||||||
|
|
||||||
_Driver = UDriver::createDriver(0, _Direct3D, 0);
|
_Driver = NL3D::UDriver::createDriver(0, _Direct3D, 0);
|
||||||
nlassert(_Driver);
|
nlassert(_Driver);
|
||||||
|
|
||||||
// initialize the window with config file values
|
// initialize the window with config file values
|
||||||
|
@ -95,16 +90,16 @@ void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h)
|
||||||
|
|
||||||
_Driver->enableUsedTextureMemorySum();
|
_Driver->enableUsedTextureMemorySum();
|
||||||
|
|
||||||
_Light = ULight::createLight();
|
_Light = NL3D::ULight::createLight();
|
||||||
|
|
||||||
// set mode of the light
|
// set mode of the light
|
||||||
_Light->setMode(ULight::DirectionalLight);
|
_Light->setMode(NL3D::ULight::DirectionalLight);
|
||||||
|
|
||||||
// set position of the light
|
// set position of the light
|
||||||
_Light->setPosition(CVector(-20.f, 30.f, 10.f));
|
_Light->setPosition(NLMISC::CVector(-20.f, 30.f, 10.f));
|
||||||
|
|
||||||
// white light
|
// white light
|
||||||
_Light->setAmbiant(CRGBA(255, 255, 255));
|
_Light->setAmbiant(NLMISC::CRGBA(255, 255, 255));
|
||||||
|
|
||||||
// set and enable the light
|
// set and enable the light
|
||||||
_Driver->setLight(0, *_Light);
|
_Driver->setLight(0, *_Light);
|
||||||
|
@ -117,7 +112,7 @@ void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h)
|
||||||
NLMISC::CVector hotSpot=NLMISC::CVector(0,0,0);
|
NLMISC::CVector hotSpot=NLMISC::CVector(0,0,0);
|
||||||
|
|
||||||
_MouseListener = _Driver->create3dMouseListener();
|
_MouseListener = _Driver->create3dMouseListener();
|
||||||
_MouseListener->setMouseMode(U3dMouseListener::edit3d);
|
_MouseListener->setMouseMode(NL3D::U3dMouseListener::edit3d);
|
||||||
|
|
||||||
// set the cache size for the font manager(in bytes)
|
// set the cache size for the font manager(in bytes)
|
||||||
_Driver->setFontManagerMaxMemory(2097152);
|
_Driver->setFontManagerMaxMemory(2097152);
|
||||||
|
@ -130,8 +125,8 @@ void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h)
|
||||||
NL3D::CBloomEffect::instance().setDriver(_Driver);
|
NL3D::CBloomEffect::instance().setDriver(_Driver);
|
||||||
NL3D::CBloomEffect::instance().setScene(_Scene);
|
NL3D::CBloomEffect::instance().setScene(_Scene);
|
||||||
NL3D::CBloomEffect::instance().init(!_Direct3D);
|
NL3D::CBloomEffect::instance().init(!_Direct3D);
|
||||||
NL3D::CBloomEffect::instance().setDensityBloom(Modules::config().getConfigFile().getVar("BloomDensity").asInt());
|
NL3D::CBloomEffect::instance().setDensityBloom(uint8(_BloomDensity));
|
||||||
NL3D::CBloomEffect::instance().setSquareBloom(Modules::config().getConfigFile().getVar("BloomSquare").asBool());
|
NL3D::CBloomEffect::instance().setSquareBloom(_BloomSquare);
|
||||||
|
|
||||||
NL3D::CDriverUser *driver = dynamic_cast<NL3D::CDriverUser *>(Modules::objView().getDriver());
|
NL3D::CDriverUser *driver = dynamic_cast<NL3D::CDriverUser *>(Modules::objView().getDriver());
|
||||||
_IDriver = driver->getDriver();
|
_IDriver = driver->getDriver();
|
||||||
|
@ -145,8 +140,6 @@ void CObjectViewer::release()
|
||||||
//H_AUTO2
|
//H_AUTO2
|
||||||
nldebug("CObjectViewer::release");
|
nldebug("CObjectViewer::release");
|
||||||
|
|
||||||
saveConfig();
|
|
||||||
|
|
||||||
// release text context
|
// release text context
|
||||||
nlassert(_TextContext);
|
nlassert(_TextContext);
|
||||||
_Driver->deleteTextContext(_TextContext);
|
_Driver->deleteTextContext(_TextContext);
|
||||||
|
@ -232,7 +225,7 @@ void CObjectViewer::reloadTextures()
|
||||||
int tex;
|
int tex;
|
||||||
for (tex = 0; tex < NL3D::IDRV_MAT_MAXTEXTURES; tex++)
|
for (tex = 0; tex < NL3D::IDRV_MAT_MAXTEXTURES; tex++)
|
||||||
{
|
{
|
||||||
ITexture *texture = material->getTexture(tex);
|
NL3D::ITexture *texture = material->getTexture(tex);
|
||||||
|
|
||||||
// Touch it!
|
// Touch it!
|
||||||
if (texture)
|
if (texture)
|
||||||
|
@ -250,30 +243,30 @@ void CObjectViewer::saveScreenshot(const std::string &nameFile, bool jpg, bool p
|
||||||
// FIXME: create screenshot path if it doesn't exist!
|
// FIXME: create screenshot path if it doesn't exist!
|
||||||
|
|
||||||
// empty bitmap
|
// empty bitmap
|
||||||
CBitmap bitmap;
|
NLMISC::CBitmap bitmap;
|
||||||
// copy the driver buffer to the bitmap
|
// copy the driver buffer to the bitmap
|
||||||
_Driver->getBuffer(bitmap);
|
_Driver->getBuffer(bitmap);
|
||||||
// create the file name
|
// create the file name
|
||||||
string filename = std::string("./") + nameFile;
|
std::string filename = std::string("./") + nameFile;
|
||||||
// write the bitmap as a jpg, png or tga to the file
|
// write the bitmap as a jpg, png or tga to the file
|
||||||
if (jpg)
|
if (jpg)
|
||||||
{
|
{
|
||||||
string newfilename = CFile::findNewFile(filename + ".jpg");
|
std::string newfilename = NLMISC::CFile::findNewFile(filename + ".jpg");
|
||||||
COFile outputFile(newfilename);
|
NLMISC::COFile outputFile(newfilename);
|
||||||
bitmap.writeJPG(outputFile, 100);
|
bitmap.writeJPG(outputFile, 100);
|
||||||
nlinfo("Screenshot '%s' saved", newfilename.c_str());
|
nlinfo("Screenshot '%s' saved", newfilename.c_str());
|
||||||
}
|
}
|
||||||
if (png)
|
if (png)
|
||||||
{
|
{
|
||||||
string newfilename = CFile::findNewFile(filename + ".png");
|
std::string newfilename = NLMISC::CFile::findNewFile(filename + ".png");
|
||||||
COFile outputFile(newfilename);
|
NLMISC::COFile outputFile(newfilename);
|
||||||
bitmap.writePNG(outputFile, 24);
|
bitmap.writePNG(outputFile, 24);
|
||||||
nlinfo("Screenshot '%s' saved", newfilename.c_str());
|
nlinfo("Screenshot '%s' saved", newfilename.c_str());
|
||||||
}
|
}
|
||||||
if (tga)
|
if (tga)
|
||||||
{
|
{
|
||||||
string newfilename = CFile::findNewFile(filename + ".tga");
|
std::string newfilename = NLMISC::CFile::findNewFile(filename + ".tga");
|
||||||
COFile outputFile(newfilename);
|
NLMISC::COFile outputFile(newfilename);
|
||||||
bitmap.writeTGA(outputFile, 24, false);
|
bitmap.writeTGA(outputFile, 24, false);
|
||||||
nlinfo("Screenshot '%s' saved", newfilename.c_str());
|
nlinfo("Screenshot '%s' saved", newfilename.c_str());
|
||||||
}
|
}
|
||||||
|
@ -281,25 +274,25 @@ void CObjectViewer::saveScreenshot(const std::string &nameFile, bool jpg, bool p
|
||||||
|
|
||||||
bool CObjectViewer::loadMesh(const std::string &meshFileName, const std::string &skelFileName)
|
bool CObjectViewer::loadMesh(const std::string &meshFileName, const std::string &skelFileName)
|
||||||
{
|
{
|
||||||
std::string fileName = CFile::getFilenameWithoutExtension(meshFileName);
|
std::string fileName = NLMISC::CFile::getFilenameWithoutExtension(meshFileName);
|
||||||
if (_Entities.count(fileName) != 0)
|
if (_Entities.count(fileName) != 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
CPath::addSearchPath(CFile::getPath(meshFileName), false, false);
|
NLMISC::CPath::addSearchPath(NLMISC::CFile::getPath(meshFileName), false, false);
|
||||||
|
|
||||||
// create instance of the mesh character
|
// create instance of the mesh character
|
||||||
UInstance Entity = _Scene->createInstance(meshFileName);
|
NL3D::UInstance Entity = _Scene->createInstance(meshFileName);
|
||||||
|
|
||||||
// if we can't create entity, skip it
|
// if we can't create entity, skip it
|
||||||
if (Entity.empty()) return false;
|
if (Entity.empty()) return false;
|
||||||
|
|
||||||
CAABBox bbox;
|
NLMISC::CAABBox bbox;
|
||||||
Entity.getShapeAABBox(bbox);
|
Entity.getShapeAABBox(bbox);
|
||||||
setCamera(bbox , Entity, true);
|
setCamera(bbox , Entity, true);
|
||||||
|
|
||||||
_MouseListener->setMatrix(_Scene->getCam().getMatrix());
|
_MouseListener->setMatrix(_Scene->getCam().getMatrix());
|
||||||
|
|
||||||
USkeleton Skeleton = _Scene->createSkeleton(skelFileName);
|
NL3D::USkeleton Skeleton = _Scene->createSkeleton(skelFileName);
|
||||||
|
|
||||||
// TODO: remade at typedef std::map<std::string, *CEntity> CEntities;
|
// TODO: remade at typedef std::map<std::string, *CEntity> CEntities;
|
||||||
EIT eit = (_Entities.insert (make_pair (fileName, CEntity()))).first;
|
EIT eit = (_Entities.insert (make_pair (fileName, CEntity()))).first;
|
||||||
|
@ -322,8 +315,8 @@ bool CObjectViewer::loadMesh(const std::string &meshFileName, const std::string
|
||||||
|
|
||||||
bool CObjectViewer::loadInstanceGroup(const std::string &igName)
|
bool CObjectViewer::loadInstanceGroup(const std::string &igName)
|
||||||
{
|
{
|
||||||
CPath::addSearchPath (CFile::getPath(igName));
|
NLMISC::CPath::addSearchPath (NLMISC::CFile::getPath(igName));
|
||||||
UInstanceGroup *ig = UInstanceGroup::createInstanceGroup(igName);
|
NL3D::UInstanceGroup *ig = NL3D::UInstanceGroup::createInstanceGroup(igName);
|
||||||
if (ig == 0)
|
if (ig == 0)
|
||||||
return false;
|
return false;
|
||||||
ig->addToScene(*_Scene, _Driver);
|
ig->addToScene(*_Scene, _Driver);
|
||||||
|
@ -334,8 +327,8 @@ bool CObjectViewer::loadInstanceGroup(const std::string &igName)
|
||||||
|
|
||||||
void CObjectViewer::setCamera(NLMISC::CAABBox &bbox, NL3D::UTransform &entity, bool high_z)
|
void CObjectViewer::setCamera(NLMISC::CAABBox &bbox, NL3D::UTransform &entity, bool high_z)
|
||||||
{
|
{
|
||||||
CVector pos(0.f, 0.f, 0.f);
|
NLMISC::CVector pos(0.f, 0.f, 0.f);
|
||||||
CQuat quat(0.f, 0.f, 0.f, 0.f);
|
NLMISC::CQuat quat(0.f, 0.f, 0.f, 0.f);
|
||||||
NL3D::UInstance inst;
|
NL3D::UInstance inst;
|
||||||
inst.cast(entity);
|
inst.cast(entity);
|
||||||
if (!inst.empty())
|
if (!inst.empty())
|
||||||
|
@ -346,28 +339,28 @@ void CObjectViewer::setCamera(NLMISC::CAABBox &bbox, NL3D::UTransform &entity, b
|
||||||
|
|
||||||
// fix scale (some shapes have a different value)
|
// fix scale (some shapes have a different value)
|
||||||
entity.setScale(1.f, 1.f, 1.f);
|
entity.setScale(1.f, 1.f, 1.f);
|
||||||
UCamera Camera = _Scene->getCam();
|
NL3D::UCamera Camera = _Scene->getCam();
|
||||||
CVector max_radius = bbox.getHalfSize();
|
NLMISC::CVector max_radius = bbox.getHalfSize();
|
||||||
CVector center = bbox.getCenter();
|
NLMISC::CVector center = bbox.getCenter();
|
||||||
entity.setPivot(center);
|
entity.setPivot(center);
|
||||||
center += pos;
|
center += pos;
|
||||||
float fov = float(_CameraFocal * (float)Pi/180.0);
|
float fov = float(_CameraFocal * (float)NLMISC::Pi/180.0);
|
||||||
float radius = max(max(max_radius.x, max_radius.y), max_radius.z);
|
float radius = std::max(std::max(max_radius.x, max_radius.y), max_radius.z);
|
||||||
if (radius == 0.f) radius = 1.f;
|
if (radius == 0.f) radius = 1.f;
|
||||||
float left, right, bottom, top, znear, zfar;
|
float left, right, bottom, top, znear, zfar;
|
||||||
Camera.getFrustum(left, right, bottom, top, znear, zfar);
|
Camera.getFrustum(left, right, bottom, top, znear, zfar);
|
||||||
float dist = radius / (tan(fov/2));
|
float dist = radius / (tan(fov/2));
|
||||||
CVector eye(center);
|
NLMISC::CVector eye(center);
|
||||||
|
|
||||||
CVector ax(quat.getAxis());
|
NLMISC::CVector ax(quat.getAxis());
|
||||||
|
|
||||||
if (ax.isNull() || ax == CVector::I)
|
if (ax.isNull() || ax == NLMISC::CVector::I)
|
||||||
{
|
{
|
||||||
ax = CVector::J;
|
ax = NLMISC::CVector::J;
|
||||||
}
|
}
|
||||||
else if (ax == -CVector::K)
|
else if (ax == -NLMISC::CVector::K)
|
||||||
{
|
{
|
||||||
ax = -CVector::J;
|
ax = -NLMISC::CVector::J;
|
||||||
}
|
}
|
||||||
|
|
||||||
eye -= ax * (dist+radius);
|
eye -= ax * (dist+radius);
|
||||||
|
@ -423,24 +416,16 @@ void CObjectViewer::updateAnimation(NL3D::TAnimationTime time)
|
||||||
void CObjectViewer::setBackgroundColor(NLMISC::CRGBA backgroundColor)
|
void CObjectViewer::setBackgroundColor(NLMISC::CRGBA backgroundColor)
|
||||||
{
|
{
|
||||||
_BackgroundColor = backgroundColor;
|
_BackgroundColor = backgroundColor;
|
||||||
|
|
||||||
// config file variable changes
|
|
||||||
Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.R, 0);
|
|
||||||
Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.G, 1);
|
|
||||||
Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.B, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CObjectViewer::setGraphicsDriver(bool Direct3D)
|
void CObjectViewer::setGraphicsDriver(bool Direct3D)
|
||||||
{
|
{
|
||||||
_Direct3D = Direct3D;
|
_Direct3D = Direct3D;
|
||||||
|
|
||||||
if (_Direct3D) Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("Direct3D");
|
|
||||||
else Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("OpenGL");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CObjectViewer::setSizeViewport(uint16 w, uint16 h)
|
void CObjectViewer::setSizeViewport(uint16 w, uint16 h)
|
||||||
{
|
{
|
||||||
_Scene->getCam().setPerspective(_CameraFocal * (float)Pi/180.f, (float)w/h, 0.1f, 1000);
|
_Scene->getCam().setPerspective(_CameraFocal * (float)NLMISC::Pi/180.f, (float)w/h, 0.1f, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CObjectViewer::setCurrentObject(const std::string &name)
|
void CObjectViewer::setCurrentObject(const std::string &name)
|
||||||
|
@ -466,26 +451,41 @@ void CObjectViewer::getListObjects(std::vector<std::string> &listObj)
|
||||||
|
|
||||||
void CObjectViewer::loadConfig()
|
void CObjectViewer::loadConfig()
|
||||||
{
|
{
|
||||||
// set background color from config
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
Modules::config().setAndCallback("BackgroundColor", CConfigCallback(this, &CObjectViewer::cfcbBackgroundColor));
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
|
|
||||||
// set graphics driver from config
|
QColor color;
|
||||||
Modules::config().setAndCallback("GraphicsDriver",CConfigCallback(this,&CObjectViewer::cfcbGraphicsDriver));
|
color = settings->value("BackgroundColor", QColor(80, 80, 80)).value<QColor>();
|
||||||
|
_BackgroundColor = NLMISC::CRGBA(color.red(), color.green(), color.blue(), color.alpha());
|
||||||
|
|
||||||
Modules::config().setAndCallback("CameraFocal",CConfigCallback(this,&CObjectViewer::cfcbCameraFocal));
|
_Direct3D = false; //_Driver = OpenGL;
|
||||||
|
|
||||||
Modules::config().setAndCallback("FontName",CConfigCallback(this,&CObjectViewer::cfcbFontName));
|
#ifdef NL_OS_WINDOWS
|
||||||
|
QString driver = settings->value(Constants::GRAPHICS_DRIVER, "OpenGL").toString();
|
||||||
|
if (driver == "Direct3D") _Direct3D = true; //m_Driver = Direct3D;
|
||||||
|
else if (driver == "OpenGL") _Direct3D = false; //m_Driver = OpenGL;
|
||||||
|
else nlwarning("Invalid driver specified, defaulting to OpenGL");
|
||||||
|
#endif
|
||||||
|
|
||||||
Modules::config().setAndCallback("BloomEffect",CConfigCallback(this,&CObjectViewer::cfcbBloomEffect));
|
_CameraFocal = settings->value("CameraFocal", 75).toInt();
|
||||||
|
_FontName = settings->value(Constants::FONT, "andbasr.ttf").toString().toStdString();
|
||||||
|
_BloomEffect = settings->value(Constants::ENABLE_BLOOM, false).toBool();
|
||||||
|
_BloomDensity = settings->value(Constants::BLOOM_DENSITY, 0).toInt();
|
||||||
|
_BloomSquare = settings->value(Constants::ENABLE_SQUARE_BLOOM, false).toBool();
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CObjectViewer::saveConfig()
|
void CObjectViewer::saveConfig()
|
||||||
{
|
{
|
||||||
Modules::config().dropCallback("BackgroundColor");
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
Modules::config().dropCallback("GraphicsDriver");
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
Modules::config().dropCallback("CameraFocal");
|
|
||||||
Modules::config().dropCallback("FontName");
|
QColor color(_BackgroundColor.R, _BackgroundColor.G, _BackgroundColor.B, _BackgroundColor.A);
|
||||||
Modules::config().dropCallback("BloomEffect");
|
settings->setValue("BackgroundColor", color);
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
|
settings->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CObjectViewer::deleteEntities()
|
void CObjectViewer::deleteEntities()
|
||||||
|
@ -500,38 +500,4 @@ void CObjectViewer::deleteEntities()
|
||||||
_ListIG.clear();
|
_ListIG.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CObjectViewer::cfcbBackgroundColor(NLMISC::CConfigFile::CVar &var)
|
|
||||||
{
|
|
||||||
// read variable from config file
|
|
||||||
_BackgroundColor = CRGBA(var.asInt(0), var.asInt(1), var.asInt(2));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CObjectViewer::cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var)
|
|
||||||
{
|
|
||||||
// Choose driver opengl to work correctly under Linux example
|
|
||||||
_Direct3D = false; //_Driver = OpenGL;
|
|
||||||
|
|
||||||
#ifdef NL_OS_WINDOWS
|
|
||||||
std::string driver = var.asString();
|
|
||||||
if (driver == "Direct3D") _Direct3D = true; //m_Driver = Direct3D;
|
|
||||||
else if (driver == "OpenGL") _Direct3D = false; //m_Driver = OpenGL;
|
|
||||||
else nlwarning("Invalid driver specified, defaulting to OpenGL");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CObjectViewer::cfcbCameraFocal(NLMISC::CConfigFile::CVar &var)
|
|
||||||
{
|
|
||||||
_CameraFocal = var.asFloat();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CObjectViewer::cfcbFontName(NLMISC::CConfigFile::CVar &var)
|
|
||||||
{
|
|
||||||
_FontName = var.asString();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CObjectViewer::cfcbBloomEffect(NLMISC::CConfigFile::CVar &var)
|
|
||||||
{
|
|
||||||
_BloomEffect = var.asBool();
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* namespace NLQT */
|
} /* namespace NLQT */
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
// NeL includes
|
// NeL includes
|
||||||
#include <nel/misc/config_file.h>
|
|
||||||
#include <nel/misc/rgba.h>
|
#include <nel/misc/rgba.h>
|
||||||
#include <nel/3d/event_mouse_listener.h>
|
#include <nel/3d/event_mouse_listener.h>
|
||||||
|
|
||||||
|
@ -231,13 +230,6 @@ private:
|
||||||
// Delete all entities
|
// Delete all entities
|
||||||
void deleteEntities();
|
void deleteEntities();
|
||||||
|
|
||||||
// Load background color from config file, intended for CConfiguration.
|
|
||||||
void cfcbBackgroundColor(NLMISC::CConfigFile::CVar &var);
|
|
||||||
void cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var);
|
|
||||||
void cfcbCameraFocal(NLMISC::CConfigFile::CVar &var);
|
|
||||||
void cfcbFontName(NLMISC::CConfigFile::CVar &var);
|
|
||||||
void cfcbBloomEffect(NLMISC::CConfigFile::CVar &var);
|
|
||||||
|
|
||||||
NLMISC::CRGBA _BackgroundColor;
|
NLMISC::CRGBA _BackgroundColor;
|
||||||
NL3D::IDriver *_IDriver;
|
NL3D::IDriver *_IDriver;
|
||||||
NL3D::CScene *_CScene;
|
NL3D::CScene *_CScene;
|
||||||
|
@ -260,6 +252,8 @@ private:
|
||||||
|
|
||||||
bool _Direct3D;
|
bool _Direct3D;
|
||||||
bool _BloomEffect;
|
bool _BloomEffect;
|
||||||
|
int _BloomDensity;
|
||||||
|
bool _BloomSquare;
|
||||||
|
|
||||||
std::string _CurrentInstance;
|
std::string _CurrentInstance;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
// Copyright (C) 2010 Winch Gate Property Limited
|
||||||
|
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
|
||||||
|
//
|
||||||
|
// 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef OBJECT_VIEWER_CONSTANTS_H
|
||||||
|
#define OBJECT_VIEWER_CONSTANTS_H
|
||||||
|
|
||||||
|
namespace NLQT
|
||||||
|
{
|
||||||
|
namespace Constants
|
||||||
|
{
|
||||||
|
const char * const OBJECT_VIEWER_PLUGIN = "ObjectViewer";
|
||||||
|
|
||||||
|
//mainwindow
|
||||||
|
const char * const MAIN_WINDOW = "ObjectViewer.MainWindow";
|
||||||
|
|
||||||
|
//settings
|
||||||
|
const char * const OBJECT_VIEWER_SECTION = "ObjectViewer";
|
||||||
|
const char * const GRAPHICS_DRIVER = "GraphicsDriver";
|
||||||
|
const char * const ENABLE_BLOOM = "EnableBloom";
|
||||||
|
const char * const ENABLE_SQUARE_BLOOM = "EnableSquareBloom";
|
||||||
|
const char * const BLOOM_DENSITY = "BloomDensity";
|
||||||
|
const char * const QT_STYLE = "QtStyle";
|
||||||
|
const char * const QT_PALETTE = "QtPalette";
|
||||||
|
const char * const FONT = "Font";
|
||||||
|
|
||||||
|
const char * const SOUND_ENABLE = "SoundEnable";
|
||||||
|
const char * const SOUND_DRIVER = "SoundDriver";
|
||||||
|
const char * const SOUND_DEVICE = "SoundDevice";
|
||||||
|
const char * const SOUND_AUTO_LOAD_SAMPLE = "SoundAutoLoadSample";
|
||||||
|
const char * const SOUND_ENABLE_OCCLUDE_OBSTRUCT = "SoundEnableOccludeObstruct";
|
||||||
|
const char * const SOUND_ENABLE_REVERB = "SoundEnableReverb";
|
||||||
|
const char * const SOUND_MANUAL_ROLL_OFF = "SoundManualRolloff";
|
||||||
|
const char * const SOUND_FORCE_SOFTWARE = "SoundForceSoftware";
|
||||||
|
const char * const SOUND_USE_ADCPM = "SoundUseADPCM";
|
||||||
|
const char * const SOUND_MAX_TRACK = "SoundMaxTrack";
|
||||||
|
const char * const SOUND_PACKED_SHEET_PATH = "SoundPackedSheetPath";
|
||||||
|
const char * const SOUND_SAMPLE_PATH = "SoundSamplePath";
|
||||||
|
|
||||||
|
const char * const VEGET_TILE_BANK = "VegetTileBank";
|
||||||
|
const char * const VEGET_TILE_FAR_BANK = "VegetTileFarBank";
|
||||||
|
const char * const VEGET_TEXTURE = "VegetTexture";
|
||||||
|
const char * const VEGET_LANDSCAPE_ZONES = "VegetLandscapeZones";
|
||||||
|
const char * const COARSE_MESH_TEXTURE = "CoarseMeshTexture";
|
||||||
|
|
||||||
|
} // namespace Constants
|
||||||
|
} // namespace NLQT
|
||||||
|
|
||||||
|
#endif // OBJECT_VIEWER_CONSTANTS_H
|
|
@ -22,7 +22,7 @@ ObjectViewerPlugin::~ObjectViewerPlugin()
|
||||||
}
|
}
|
||||||
qDeleteAll(_autoReleaseObjects);
|
qDeleteAll(_autoReleaseObjects);
|
||||||
_autoReleaseObjects.clear();
|
_autoReleaseObjects.clear();
|
||||||
Modules::release();
|
//Modules::release();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjectViewerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
|
bool ObjectViewerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
|
||||||
|
@ -41,6 +41,11 @@ void ObjectViewerPlugin::extensionsInitialized()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObjectViewerPlugin::shutdown()
|
||||||
|
{
|
||||||
|
Modules::release();
|
||||||
|
}
|
||||||
|
|
||||||
void ObjectViewerPlugin::setNelContext(NLMISC::INelContext *nelContext)
|
void ObjectViewerPlugin::setNelContext(NLMISC::INelContext *nelContext)
|
||||||
{
|
{
|
||||||
#ifdef NL_OS_WINDOWS
|
#ifdef NL_OS_WINDOWS
|
||||||
|
|
|
@ -35,6 +35,7 @@ public:
|
||||||
|
|
||||||
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
|
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
|
||||||
void extensionsInitialized();
|
void extensionsInitialized();
|
||||||
|
void shutdown();
|
||||||
|
|
||||||
void setNelContext(NLMISC::INelContext *nelContext);
|
void setNelContext(NLMISC::INelContext *nelContext);
|
||||||
|
|
||||||
|
|
|
@ -17,23 +17,22 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Project includes
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"
|
||||||
#include "setup_fog_dialog.h"
|
#include "setup_fog_dialog.h"
|
||||||
|
#include "object_viewer_constants.h"
|
||||||
|
#include "../core/icore.h"
|
||||||
|
#include "modules.h"
|
||||||
|
|
||||||
// Qt includes
|
// Qt includes
|
||||||
#include <QtGui/QWidget>
|
#include <QtGui/QWidget>
|
||||||
#include <QtGui/QColorDialog>
|
#include <QtGui/QColorDialog>
|
||||||
|
#include <QtCore/QSettings>
|
||||||
|
|
||||||
// NeL includes
|
// NeL includes
|
||||||
#include <nel/misc/path.h>
|
#include <nel/misc/path.h>
|
||||||
#include <nel/3d/u_driver.h>
|
#include <nel/3d/u_driver.h>
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include "modules.h"
|
|
||||||
|
|
||||||
using namespace NL3D;
|
|
||||||
using namespace NLMISC;
|
|
||||||
|
|
||||||
namespace NLQT
|
namespace NLQT
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -42,10 +41,17 @@ CSetupFog::CSetupFog(QWidget *parent)
|
||||||
{
|
{
|
||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
|
|
||||||
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
|
|
||||||
// load fog value from config file
|
// load fog value from config file
|
||||||
ui.startDoubleSpinBox->setValue(Modules::config().getValue("FogStart", 0.0));
|
ui.startDoubleSpinBox->setValue(settings->value("FogStart", 0.0).toDouble());
|
||||||
ui.endDoubleSpinBox->setValue(Modules::config().getValue("FogEnd", 0.0));
|
ui.endDoubleSpinBox->setValue(settings->value("FogEnd", 0.0).toDouble());
|
||||||
colorFog = Modules::config().getValue("FogColor",CRGBA(0.0, 0.0, 0.0));
|
|
||||||
|
QColor color = settings->value("FogColor", QColor(80, 80, 80)).value<QColor>();
|
||||||
|
colorFog = NLMISC::CRGBA(color.red(), color.green(), color.blue(), color.alpha());
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
|
|
||||||
connect(ui.applyPushButton, SIGNAL(clicked()), this, SLOT(apply()));
|
connect(ui.applyPushButton, SIGNAL(clicked()), this, SLOT(apply()));
|
||||||
connect(ui.colorPushButton, SIGNAL(clicked()), this, SLOT(setColor()));
|
connect(ui.colorPushButton, SIGNAL(clicked()), this, SLOT(setColor()));
|
||||||
|
@ -53,13 +59,17 @@ CSetupFog::CSetupFog(QWidget *parent)
|
||||||
|
|
||||||
CSetupFog::~CSetupFog()
|
CSetupFog::~CSetupFog()
|
||||||
{
|
{
|
||||||
// save fog value from config file
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
Modules::config().getConfigFile().getVar("FogStart").setAsFloat(ui.startDoubleSpinBox->value());
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
Modules::config().getConfigFile().getVar("FogEnd").setAsFloat(ui.endDoubleSpinBox->value());
|
|
||||||
Modules::config().getConfigFile().getVar("FogColor").setAsInt(colorFog.R, 0);
|
|
||||||
Modules::config().getConfigFile().getVar("FogColor").setAsInt(colorFog.G, 1);
|
|
||||||
Modules::config().getConfigFile().getVar("FogColor").setAsInt(colorFog.B, 2);
|
|
||||||
|
|
||||||
|
settings->setValue("FogStart", ui.startDoubleSpinBox->value());
|
||||||
|
settings->setValue("FogEnd", ui.endDoubleSpinBox->value());
|
||||||
|
|
||||||
|
QColor color(colorFog.R, colorFog.G, colorFog.B, colorFog.A);
|
||||||
|
settings->setValue("FogColor", color);
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
|
settings->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSetupFog::apply()
|
void CSetupFog::apply()
|
||||||
|
|
|
@ -18,11 +18,14 @@
|
||||||
// Project includes
|
// Project includes
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"
|
||||||
#include "sound_settings_page.h"
|
#include "sound_settings_page.h"
|
||||||
|
#include "object_viewer_constants.h"
|
||||||
|
#include "../core/icore.h"
|
||||||
#include "modules.h"
|
#include "modules.h"
|
||||||
|
|
||||||
// Qt includes
|
// Qt includes
|
||||||
|
#include <QtCore/QSettings>
|
||||||
#include <QtGui/QWidget>
|
#include <QtGui/QWidget>
|
||||||
|
#include <QtGui/QFileDialog>
|
||||||
|
|
||||||
namespace NLQT
|
namespace NLQT
|
||||||
{
|
{
|
||||||
|
@ -45,7 +48,7 @@ QString SoundSettingsPage::trName() const
|
||||||
|
|
||||||
QString SoundSettingsPage::category() const
|
QString SoundSettingsPage::category() const
|
||||||
{
|
{
|
||||||
return QLatin1String("ObjectViewer");
|
return QLatin1String(Constants::OBJECT_VIEWER_SECTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString SoundSettingsPage::trCategory() const
|
QString SoundSettingsPage::trCategory() const
|
||||||
|
@ -58,61 +61,69 @@ QWidget *SoundSettingsPage::createPage(QWidget *parent)
|
||||||
m_page = new QWidget(parent);
|
m_page = new QWidget(parent);
|
||||||
m_ui.setupUi(m_page);
|
m_ui.setupUi(m_page);
|
||||||
|
|
||||||
// setup config file callbacks and initialize values
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
Modules::config().setAndCallback("SoundDrivers", CConfigCallback(this, &SoundSettingsPage::cfcbSoundDrivers));
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
|
|
||||||
|
QString soundDriver = settings->value(Constants::SOUND_DRIVER, "Auto").toString();
|
||||||
|
m_ui.driverSndComboBox->setCurrentIndex(m_ui.driverSndComboBox->findText(soundDriver));
|
||||||
|
|
||||||
// load settings from the config file
|
// load settings from the config file
|
||||||
m_ui.autoLoadSampleCheckBox->setChecked(Modules::config().getValue("SoundAutoLoadSample", true));
|
m_ui.autoLoadSampleCheckBox->setChecked(settings->value(Constants::SOUND_AUTO_LOAD_SAMPLE, true).toBool());
|
||||||
m_ui.enableOccludeObstructCheckBox->setChecked(Modules::config().getValue("SoundEnableOccludeObstruct", true));
|
m_ui.enableOccludeObstructCheckBox->setChecked(settings->value(Constants::SOUND_ENABLE_OCCLUDE_OBSTRUCT, true).toBool());
|
||||||
m_ui.enableReverbCheckBox->setChecked(Modules::config().getValue("SoundEnableReverb", true));
|
m_ui.enableReverbCheckBox->setChecked(settings->value(Constants::SOUND_ENABLE_REVERB, true).toBool());
|
||||||
m_ui.manualRolloffCheckBox->setChecked(Modules::config().getValue("SoundManualRolloff", true));
|
m_ui.manualRolloffCheckBox->setChecked(settings->value(Constants::SOUND_MANUAL_ROLL_OFF, true).toBool());
|
||||||
m_ui.forceSoftwareCheckBox->setChecked(Modules::config().getValue("SoundForceSoftware", false));
|
m_ui.forceSoftwareCheckBox->setChecked(settings->value(Constants::SOUND_FORCE_SOFTWARE, false).toBool());
|
||||||
m_ui.useADPCMCheckBox->setChecked(Modules::config().getValue("SoundUseADPCM", false));
|
m_ui.useADPCMCheckBox->setChecked(settings->value(Constants::SOUND_USE_ADCPM, false).toBool());
|
||||||
m_ui.maxTrackSpinBox->setValue(Modules::config().getValue("SoundMaxTrack", 48));
|
m_ui.maxTrackSpinBox->setValue(settings->value(Constants::SOUND_MAX_TRACK, 48).toInt());
|
||||||
|
m_ui.soundSamplePathLineEdit->setText(settings->value(Constants::SOUND_SAMPLE_PATH, "").toString());
|
||||||
|
m_ui.soundSheetPathLineEdit->setText(settings->value(Constants::SOUND_PACKED_SHEET_PATH, "").toString());
|
||||||
|
|
||||||
|
connect(m_ui.soundSamplePathButton, SIGNAL(clicked()), this, SLOT(setSamplePath()));
|
||||||
|
connect(m_ui.soundSheetPathButton, SIGNAL(clicked()), this, SLOT(setSheetPath()));
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
return m_page;
|
return m_page;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundSettingsPage::apply()
|
void SoundSettingsPage::apply()
|
||||||
{
|
{
|
||||||
// save sound settings to config file
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
Modules::config().getConfigFile().getVar("SoundDriver").setAsString(m_ui.driverSndComboBox->currentText().toStdString());
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
Modules::config().getConfigFile().getVar("SoundAutoLoadSample").setAsInt(m_ui.autoLoadSampleCheckBox->isChecked());
|
|
||||||
Modules::config().getConfigFile().getVar("SoundEnableOccludeObstruct").setAsInt(m_ui.enableOccludeObstructCheckBox->isChecked());
|
|
||||||
Modules::config().getConfigFile().getVar("SoundEnableReverb").setAsInt(m_ui.enableReverbCheckBox->isChecked());
|
|
||||||
Modules::config().getConfigFile().getVar("SoundManualRolloff").setAsInt(m_ui.manualRolloffCheckBox->isChecked());
|
|
||||||
Modules::config().getConfigFile().getVar("SoundForceSoftware").setAsInt(m_ui.forceSoftwareCheckBox->isChecked());
|
|
||||||
Modules::config().getConfigFile().getVar("SoundUseADPCM").setAsInt(m_ui.useADPCMCheckBox->isChecked());
|
|
||||||
Modules::config().getConfigFile().getVar("SoundMaxTrack").setAsInt(m_ui.maxTrackSpinBox->value());
|
|
||||||
|
|
||||||
// save config file
|
settings->setValue(Constants::SOUND_DRIVER, m_ui.driverSndComboBox->currentText());
|
||||||
Modules::config().getConfigFile().save();
|
settings->setValue(Constants::SOUND_AUTO_LOAD_SAMPLE, m_ui.autoLoadSampleCheckBox->isChecked());
|
||||||
|
settings->setValue(Constants::SOUND_ENABLE_OCCLUDE_OBSTRUCT, m_ui.enableOccludeObstructCheckBox->isChecked());
|
||||||
|
settings->setValue(Constants::SOUND_ENABLE_REVERB, m_ui.enableReverbCheckBox->isChecked());
|
||||||
|
settings->setValue(Constants::SOUND_MANUAL_ROLL_OFF, m_ui.manualRolloffCheckBox->isChecked());
|
||||||
|
settings->setValue(Constants::SOUND_FORCE_SOFTWARE, m_ui.forceSoftwareCheckBox->isChecked());
|
||||||
|
settings->setValue(Constants::SOUND_USE_ADCPM, m_ui.useADPCMCheckBox->isChecked());
|
||||||
|
settings->setValue(Constants::SOUND_MAX_TRACK, m_ui.maxTrackSpinBox->value());
|
||||||
|
settings->setValue(Constants::SOUND_SAMPLE_PATH, m_ui.soundSamplePathLineEdit->text());
|
||||||
|
settings->setValue(Constants::SOUND_PACKED_SHEET_PATH, m_ui.soundSheetPathLineEdit->text());
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
|
settings->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundSettingsPage::finish()
|
void SoundSettingsPage::finish()
|
||||||
{
|
{
|
||||||
Modules::config().dropCallback("SoundDrivers");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundSettingsPage::cfcbSoundDrivers(NLMISC::CConfigFile::CVar& var)
|
void SoundSettingsPage::setSheetPath()
|
||||||
{
|
{
|
||||||
while (m_ui.driverSndComboBox->count())
|
QString path = QFileDialog::getExistingDirectory();
|
||||||
m_ui.driverSndComboBox->removeItem(0);
|
if (!path.isEmpty())
|
||||||
|
|
||||||
// load types sound driver from the config file
|
|
||||||
for (uint i = 0; i < var.size(); ++i)
|
|
||||||
m_ui.driverSndComboBox->addItem(var.asString(i).c_str());
|
|
||||||
|
|
||||||
// set sound driver from the config file
|
|
||||||
QString value = Modules::config().getValue("SoundDriver",std::string("Auto")).c_str();
|
|
||||||
QString dn = value.toLower();
|
|
||||||
for (sint i = 0; i < m_ui.driverSndComboBox->count(); ++i)
|
|
||||||
{
|
{
|
||||||
if (dn == m_ui.driverSndComboBox->itemText(i).toLower())
|
m_ui.soundSheetPathLineEdit->setText(path);
|
||||||
{
|
}
|
||||||
m_ui.driverSndComboBox->setCurrentIndex(i);
|
}
|
||||||
return;
|
|
||||||
}
|
void SoundSettingsPage::setSamplePath()
|
||||||
|
{
|
||||||
|
QString path = QFileDialog::getExistingDirectory();
|
||||||
|
if (!path.isEmpty())
|
||||||
|
{
|
||||||
|
m_ui.soundSamplePathLineEdit->setText(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,9 +26,6 @@
|
||||||
// Qt includes
|
// Qt includes
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/config_file.h>
|
|
||||||
|
|
||||||
class QWidget;
|
class QWidget;
|
||||||
|
|
||||||
namespace NLQT
|
namespace NLQT
|
||||||
|
@ -52,9 +49,11 @@ public:
|
||||||
virtual void apply();
|
virtual void apply();
|
||||||
virtual void finish();
|
virtual void finish();
|
||||||
|
|
||||||
private:
|
private Q_SLOTS:
|
||||||
void cfcbSoundDrivers(NLMISC::CConfigFile::CVar &var);
|
void setSheetPath();
|
||||||
|
void setSamplePath();
|
||||||
|
|
||||||
|
private:
|
||||||
QWidget *m_page;
|
QWidget *m_page;
|
||||||
Ui::SoundSettingsPage m_ui;
|
Ui::SoundSettingsPage m_ui;
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,21 +6,15 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>326</width>
|
<width>331</width>
|
||||||
<height>268</height>
|
<height>278</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<property name="margin">
|
<item row="0" column="0" colspan="3">
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<property name="spacing">
|
|
||||||
<number>3</number>
|
|
||||||
</property>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="driverSndLabel">
|
<widget class="QLabel" name="driverSndLabel">
|
||||||
|
@ -50,53 +44,78 @@
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Auto</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>OpenAL</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>XAudio2</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>FMod</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>DSound</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0" colspan="2">
|
||||||
<widget class="QCheckBox" name="autoLoadSampleCheckBox">
|
<widget class="QCheckBox" name="autoLoadSampleCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SoundAutoLoadSample</string>
|
<string>SoundAutoLoadSample</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0" colspan="3">
|
||||||
<widget class="QCheckBox" name="enableOccludeObstructCheckBox">
|
<widget class="QCheckBox" name="enableOccludeObstructCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SoundEnableOccludeObstruct</string>
|
<string>SoundEnableOccludeObstruct</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0" colspan="2">
|
||||||
<widget class="QCheckBox" name="enableReverbCheckBox">
|
<widget class="QCheckBox" name="enableReverbCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SoundEnableReverb</string>
|
<string>SoundEnableReverb</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="4" column="0" colspan="2">
|
||||||
<widget class="QCheckBox" name="manualRolloffCheckBox">
|
<widget class="QCheckBox" name="manualRolloffCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SoundManualRolloff</string>
|
<string>SoundManualRolloff</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item row="5" column="0" colspan="2">
|
||||||
<widget class="QCheckBox" name="forceSoftwareCheckBox">
|
<widget class="QCheckBox" name="forceSoftwareCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SoundForceSoftware</string>
|
<string>SoundForceSoftware</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="0">
|
<item row="6" column="0" colspan="2">
|
||||||
<widget class="QCheckBox" name="useADPCMCheckBox">
|
<widget class="QCheckBox" name="useADPCMCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SoundUseADPCM</string>
|
<string>SoundUseADPCM</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="0">
|
<item row="7" column="0" colspan="3">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="maxTrackLabel">
|
<widget class="QLabel" name="maxTrackLabel">
|
||||||
|
@ -140,6 +159,40 @@
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="8" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>SoundPackedSheetPath</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="1">
|
||||||
|
<widget class="QLineEdit" name="soundSheetPathLineEdit"/>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="2">
|
||||||
|
<widget class="QToolButton" name="soundSheetPathButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="9" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>SoundSamplePath</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="9" column="1">
|
||||||
|
<widget class="QLineEdit" name="soundSamplePathLineEdit"/>
|
||||||
|
</item>
|
||||||
|
<item row="9" column="2">
|
||||||
|
<widget class="QToolButton" name="soundSamplePathButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="10" column="0">
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
|
|
|
@ -18,6 +18,11 @@
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"
|
||||||
#include "sound_system.h"
|
#include "sound_system.h"
|
||||||
|
|
||||||
|
// Project includes
|
||||||
|
#include "modules.h"
|
||||||
|
#include "object_viewer_constants.h"
|
||||||
|
#include "../core/icore.h"
|
||||||
|
|
||||||
// NeL includes
|
// NeL includes
|
||||||
#include <nel/sound/u_audio_mixer.h>
|
#include <nel/sound/u_audio_mixer.h>
|
||||||
#include <nel/sound/u_listener.h>
|
#include <nel/sound/u_listener.h>
|
||||||
|
@ -26,8 +31,8 @@
|
||||||
#include <nel/3d/u_particle_system_sound.h>
|
#include <nel/3d/u_particle_system_sound.h>
|
||||||
#include <nel/misc/path.h>
|
#include <nel/misc/path.h>
|
||||||
|
|
||||||
// Project includes
|
// Qt includes
|
||||||
#include "modules.h"
|
#include <QtCore/QSettings>
|
||||||
|
|
||||||
namespace NLQT
|
namespace NLQT
|
||||||
{
|
{
|
||||||
|
@ -58,7 +63,7 @@ void CSoundSystem::setListenerMatrix(const NLMISC::CMatrix &m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSoundSystem::init ()
|
void CSoundSystem::init()
|
||||||
{
|
{
|
||||||
//H_AUTO2
|
//H_AUTO2
|
||||||
nldebug("CSoundSystem::init");
|
nldebug("CSoundSystem::init");
|
||||||
|
@ -73,23 +78,28 @@ void CSoundSystem::init ()
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// init audiomixer
|
// init audiomixer
|
||||||
_PackedSheetPath = Modules::config().getValue("SoundPackedSheetPath", std::string(""));
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
_SamplePath = Modules::config().getValue("SoundSamplePath", std::string(""));
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
|
|
||||||
|
_PackedSheetPath = settings->value(Constants::SOUND_PACKED_SHEET_PATH, "").toString().toStdString();
|
||||||
|
_SamplePath = settings->value(Constants::SOUND_SAMPLE_PATH, "").toString().toStdString();
|
||||||
_AudioMixer->setSamplePath(_SamplePath);
|
_AudioMixer->setSamplePath(_SamplePath);
|
||||||
_AudioMixer->setPackedSheetOption(_PackedSheetPath, true);
|
_AudioMixer->setPackedSheetOption(_PackedSheetPath, true);
|
||||||
std::vector<std::string> devices;
|
std::vector<std::string> devices;
|
||||||
_AudioMixer->initDriver(Modules::config().getValue("SoundDriver", std::string("Auto")));
|
_AudioMixer->initDriver(settings->value(Constants::SOUND_DRIVER, "Auto").toString().toStdString());
|
||||||
_AudioMixer->getDevices(devices);
|
_AudioMixer->getDevices(devices);
|
||||||
NLSOUND::UAudioMixer::CInitInfo audioInfo;
|
NLSOUND::UAudioMixer::CInitInfo audioInfo;
|
||||||
audioInfo.AutoLoadSample = Modules::config().getValue("SoundAutoLoadSample", true);
|
audioInfo.AutoLoadSample = settings->value(Constants::SOUND_AUTO_LOAD_SAMPLE, true).toBool();
|
||||||
audioInfo.EnableOccludeObstruct = Modules::config().getValue("SoundEnableOccludeObstruct", true);
|
audioInfo.EnableOccludeObstruct = settings->value(Constants::SOUND_ENABLE_OCCLUDE_OBSTRUCT, true).toBool();
|
||||||
audioInfo.EnableReverb = Modules::config().getValue("SoundEnableReverb", true);
|
audioInfo.EnableReverb = settings->value(Constants::SOUND_ENABLE_REVERB, true).toBool();
|
||||||
audioInfo.ManualRolloff = Modules::config().getValue("SoundManualRolloff", true);
|
audioInfo.ManualRolloff = settings->value(Constants::SOUND_MANUAL_ROLL_OFF, true).toBool();
|
||||||
audioInfo.ForceSoftware = Modules::config().getValue("SoundForceSoftware", false);
|
audioInfo.ForceSoftware = settings->value(Constants::SOUND_FORCE_SOFTWARE, false).toBool();
|
||||||
audioInfo.MaxTrack = Modules::config().getValue("SoundMaxTrack", 48);
|
audioInfo.MaxTrack = settings->value(Constants::SOUND_MAX_TRACK, 48).toInt();
|
||||||
audioInfo.UseADPCM = Modules::config().getValue("SoundUseADPCM", false);
|
audioInfo.UseADPCM = settings->value(Constants::SOUND_USE_ADCPM, false).toBool();
|
||||||
_AudioMixer->initDevice(Modules::config().getValue("SoundDevice", std::string("")), audioInfo, NULL);
|
_AudioMixer->initDevice(settings->value(Constants::SOUND_DEVICE, "").toString().toStdString(), audioInfo, NULL);
|
||||||
_AudioMixer->setLowWaterMark(1);
|
_AudioMixer->setLowWaterMark(1);
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
}
|
}
|
||||||
catch(NLMISC::Exception &e)
|
catch(NLMISC::Exception &e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,12 +17,19 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Project includes
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"
|
||||||
#include "vegetable_editor.h"
|
#include "vegetable_editor.h"
|
||||||
|
#include "modules.h"
|
||||||
|
#include "object_viewer_constants.h"
|
||||||
|
#include "../core/icore.h"
|
||||||
|
|
||||||
// Qt includes
|
// Qt includes
|
||||||
#include <QtGui/QProgressDialog>
|
#include <QtGui/QProgressDialog>
|
||||||
#include <QtGui/QMessageBox>
|
#include <QtGui/QMessageBox>
|
||||||
|
#include <QtGui/QColor>
|
||||||
|
#include <QtGui/QVector3D>
|
||||||
|
#include <QtCore/QSettings>
|
||||||
|
|
||||||
// NeL includes
|
// NeL includes
|
||||||
#include <nel/3d/landscape_model.h>
|
#include <nel/3d/landscape_model.h>
|
||||||
|
@ -31,12 +38,8 @@
|
||||||
#include <nel/3d/driver.h>
|
#include <nel/3d/driver.h>
|
||||||
#include <nel/3d/scene_user.h>
|
#include <nel/3d/scene_user.h>
|
||||||
#include <nel/3d/scene.h>
|
#include <nel/3d/scene.h>
|
||||||
|
|
||||||
//#include <nel/3d/u_landscape.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include "modules.h"
|
|
||||||
#include <nel/3d/u_camera.h>
|
#include <nel/3d/u_camera.h>
|
||||||
|
//#include <nel/3d/u_landscape.h>
|
||||||
|
|
||||||
namespace NLQT
|
namespace NLQT
|
||||||
{
|
{
|
||||||
|
@ -258,7 +261,7 @@ bool CVegetableEditor::createVegetableLandscape()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Modules::objView().getScene()->setCoarseMeshManagerTexture(_CoarseMeshTexture.c_str());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -311,7 +314,7 @@ void CVegetableEditor::refreshVegetableLandscape(const NL3D::CTileVegetableDesc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVegetableEditor::setVegetableWindPower(float w)
|
void CVegetableEditor::setVegetableWindPower(double w)
|
||||||
{
|
{
|
||||||
_VegetableWindPower= w;
|
_VegetableWindPower= w;
|
||||||
if(_VegetableLandscape)
|
if(_VegetableLandscape)
|
||||||
|
@ -321,7 +324,7 @@ void CVegetableEditor::setVegetableWindPower(float w)
|
||||||
_VegetableWindBendMin);
|
_VegetableWindBendMin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVegetableEditor::setVegetableWindBendStart(float w)
|
void CVegetableEditor::setVegetableWindBendStart(double w)
|
||||||
{
|
{
|
||||||
_VegetableWindBendMin= w;
|
_VegetableWindBendMin= w;
|
||||||
if(_VegetableLandscape)
|
if(_VegetableLandscape)
|
||||||
|
@ -331,7 +334,7 @@ void CVegetableEditor::setVegetableWindBendStart(float w)
|
||||||
_VegetableWindBendMin);
|
_VegetableWindBendMin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVegetableEditor::setVegetableWindFrequency(float w)
|
void CVegetableEditor::setVegetableWindFrequency(double w)
|
||||||
{
|
{
|
||||||
_VegetableWindFreq= w;
|
_VegetableWindFreq= w;
|
||||||
if(_VegetableLandscape)
|
if(_VegetableLandscape)
|
||||||
|
@ -540,222 +543,94 @@ void CVegetableEditor::loadConfig()
|
||||||
_VegetableSnapToGround = false;
|
_VegetableSnapToGround = false;
|
||||||
|
|
||||||
// Load Landscape params.
|
// Load Landscape params.
|
||||||
// --------------
|
|
||||||
// threshold
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_VegetableLandscapeThreshold = Modules::config().getConfigFile().getVar("VegetLandscapeThreshold").asFloat();
|
|
||||||
// clamp to avoid divide/0.
|
|
||||||
_VegetableLandscapeThreshold = std::max(_VegetableLandscapeThreshold, 0.001f);
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableLandscapeThreshold = 0.003f;
|
|
||||||
}
|
|
||||||
// tilenear
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_VegetableLandscapeTileNear = Modules::config().getConfigFile().getVar("VegetLandscapeTileNear").asFloat();
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableLandscapeTileNear= 50;
|
|
||||||
}
|
|
||||||
// ambient
|
|
||||||
try
|
|
||||||
{
|
|
||||||
NLMISC::CConfigFile::CVar &color = Modules::config().getConfigFile().getVar("VegetLandscapeAmbient");
|
|
||||||
_VegetableLandscapeAmbient.R = color.asInt(0);
|
|
||||||
_VegetableLandscapeAmbient.G = color.asInt(1);
|
|
||||||
_VegetableLandscapeAmbient.B = color.asInt(2);
|
|
||||||
_VegetableLandscapeAmbient.A = color.asInt(3);
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableLandscapeAmbient.set(80, 80, 80, 255);
|
|
||||||
}
|
|
||||||
// diffuse
|
|
||||||
try
|
|
||||||
{
|
|
||||||
NLMISC::CConfigFile::CVar &color= Modules::config().getConfigFile().getVar("VegetLandscapeDiffuse");
|
|
||||||
_VegetableLandscapeDiffuse.R = color.asInt(0);
|
|
||||||
_VegetableLandscapeDiffuse.G = color.asInt(1);
|
|
||||||
_VegetableLandscapeDiffuse.B = color.asInt(2);
|
|
||||||
_VegetableLandscapeDiffuse.A = color.asInt(3);
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableLandscapeDiffuse.set(255, 255, 255, 255);
|
|
||||||
}
|
|
||||||
// Snapping
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_VegetableSnapHeight = Modules::config().getConfigFile().getVar("VegetLandscapeSnapHeight").asFloat();
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableSnapHeight = 1.70f;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
|
|
||||||
|
_VegetableLandscapeThreshold = std::max(settings->value("VegetLandscapeThreshold", 0.003).toDouble(), 0.001);
|
||||||
|
_VegetableLandscapeTileNear = settings->value("VegetLandscapeTileNear", 50).toDouble();
|
||||||
|
|
||||||
|
QColor color;
|
||||||
|
color = settings->value("VegetLandscapeAmbient", QColor(80, 80, 80)).value<QColor>();
|
||||||
|
_VegetableLandscapeAmbient = NLMISC::CRGBA(color.red(), color.green(), color.blue(), color.alpha());
|
||||||
|
|
||||||
|
color = settings->value("VegetLandscapeDiffuse", QColor(255, 255, 255)).value<QColor>();
|
||||||
|
_VegetableLandscapeDiffuse = NLMISC::CRGBA(color.red(), color.green(), color.blue(), color.alpha());
|
||||||
|
|
||||||
|
_VegetableSnapHeight = settings->value("VegetLandscapeSnapHeight", 1.70f).toFloat();
|
||||||
|
|
||||||
// Load Vegetable params.
|
// Load Vegetable params.
|
||||||
// --------------
|
|
||||||
|
|
||||||
// vegetable ambient
|
color = settings->value("VegetAmbient", QColor(80, 80, 80)).value<QColor>();
|
||||||
try
|
_VegetableAmbient = NLMISC::CRGBA(color.red(), color.green(), color.blue(), color.alpha());
|
||||||
{
|
|
||||||
NLMISC::CConfigFile::CVar &color = Modules::config().getConfigFile().getVar("VegetAmbient");
|
|
||||||
_VegetableAmbient.R = color.asInt(0);
|
|
||||||
_VegetableAmbient.G = color.asInt(1);
|
|
||||||
_VegetableAmbient.B = color.asInt(2);
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableAmbient.set(80, 80, 80, 255);
|
|
||||||
}
|
|
||||||
// vegetable diffuse
|
|
||||||
try
|
|
||||||
{
|
|
||||||
NLMISC::CConfigFile::CVar &color = Modules::config().getConfigFile().getVar("VegetDiffuse");
|
|
||||||
// setup to behave correclty ie as maxLightFactor:
|
|
||||||
sint R = color.asInt(0) - _VegetableAmbient.R;
|
|
||||||
NLMISC::clamp(R, 0, 255);
|
|
||||||
_VegetableDiffuse.R = R;
|
|
||||||
sint G = color.asInt(1) - _VegetableAmbient.G;
|
|
||||||
NLMISC::clamp(G, 0, 255);
|
|
||||||
_VegetableDiffuse.G = G;
|
|
||||||
sint B = color.asInt(2) - _VegetableAmbient.B;
|
|
||||||
NLMISC::clamp(B, 0, 255);
|
|
||||||
_VegetableDiffuse.B = B;
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
sint R = 255 - _VegetableAmbient.R;
|
|
||||||
NLMISC::clamp(R, 0, 255);
|
|
||||||
_VegetableDiffuse.R = R;
|
|
||||||
sint G = 255 - _VegetableAmbient.G;
|
|
||||||
NLMISC::clamp(G, 0, 255);
|
|
||||||
_VegetableDiffuse.G = G;
|
|
||||||
sint B = 255 - _VegetableAmbient.B;
|
|
||||||
NLMISC::clamp(B, 0, 255);
|
|
||||||
_VegetableDiffuse.B = B;
|
|
||||||
}
|
|
||||||
// vegetable lightDir
|
|
||||||
try
|
|
||||||
{
|
|
||||||
NLMISC::CConfigFile::CVar &var = Modules::config().getConfigFile().getVar("VegetLightDir");
|
|
||||||
_VegetableLightDir.x = var.asFloat(0);
|
|
||||||
_VegetableLightDir.y = var.asFloat(1);
|
|
||||||
_VegetableLightDir.z = var.asFloat(2);
|
|
||||||
_VegetableLightDir.normalize();
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableLightDir.set(0, 1, -1);
|
|
||||||
_VegetableLightDir.normalize();
|
|
||||||
}
|
|
||||||
|
|
||||||
// windDir
|
color = settings->value("VegetDiffuse", QColor(80, 80, 80)).value<QColor>();
|
||||||
try
|
|
||||||
{
|
// setup to behave correclty ie as maxLightFactor:
|
||||||
NLMISC::CConfigFile::CVar &var = Modules::config().getConfigFile().getVar("VegetWindDir");
|
sint R = color.red() - _VegetableAmbient.R;
|
||||||
_VegetableWindDir.x = var.asFloat(0);
|
NLMISC::clamp(R, 0, 255);
|
||||||
_VegetableWindDir.y = var.asFloat(1);
|
_VegetableDiffuse.R = R;
|
||||||
_VegetableWindDir.z = var.asFloat(2);
|
sint G = color.green() - _VegetableAmbient.G;
|
||||||
}
|
NLMISC::clamp(G, 0, 255);
|
||||||
catch (NLMISC::EUnknownVar &)
|
_VegetableDiffuse.G = G;
|
||||||
{
|
sint B = color.blue() - _VegetableAmbient.B;
|
||||||
_VegetableWindDir.x = 0.5f;
|
NLMISC::clamp(B, 0, 255);
|
||||||
_VegetableWindDir.y = 0.5f;
|
_VegetableDiffuse.B = B;
|
||||||
_VegetableWindDir.z = 0;
|
|
||||||
}
|
QVector3D vec;
|
||||||
// windFreq
|
vec = settings->value("VegetLightDir", QVector3D(0, 1, -1)).value<QVector3D>();
|
||||||
try
|
_VegetableLightDir = NLMISC::CVector(vec.x(), vec.y(), vec.z());
|
||||||
{
|
_VegetableLightDir.normalize();
|
||||||
_VegetableWindFreq = Modules::config().getConfigFile().getVar("VegetWindFreq").asFloat();
|
|
||||||
}
|
vec = settings->value("VegetWindDir", QVector3D(0.5f, 0.5f, 0)).value<QVector3D>();
|
||||||
catch (NLMISC::EUnknownVar &)
|
_VegetableWindDir = NLMISC::CVector(vec.x(), vec.y(), vec.z());
|
||||||
{
|
|
||||||
_VegetableWindFreq= 0.5;
|
_VegetableWindFreq = settings->value("VegetWindFreq", 0.5).toDouble();
|
||||||
}
|
_VegetableWindPower = settings->value("VegetWindPower", 1).toDouble();
|
||||||
// windPower
|
_VegetableWindBendMin = settings->value("VegetWindBendMin", 0).toDouble();
|
||||||
try
|
settings->endGroup();
|
||||||
{
|
|
||||||
_VegetableWindPower = Modules::config().getConfigFile().getVar("VegetWindPower").asFloat();
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableWindPower= 1;
|
|
||||||
}
|
|
||||||
// windBendMin
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_VegetableWindBendMin = Modules::config().getConfigFile().getVar("VegetWindBendMin").asFloat();
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableWindBendMin= 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVegetableEditor::loadLandscapeSetup()
|
void CVegetableEditor::loadLandscapeSetup()
|
||||||
{
|
{
|
||||||
// Load landscape setup
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
// --------------
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
try
|
|
||||||
{
|
|
||||||
// tileBank setup.
|
|
||||||
_VegetableLandscapeTileBank = Modules::config().getConfigFile().getVar("VegetTileBank").asString();
|
|
||||||
_VegetableLandscapeTileFarBank = Modules::config().getConfigFile().getVar("VegetTileFarBank").asString();
|
|
||||||
// zone list.
|
|
||||||
_VegetableLandscapeZoneNames.clear();
|
|
||||||
NLMISC::CConfigFile::CVar &zones = Modules::config().getConfigFile().getVar("VegetLandscapeZones");
|
|
||||||
for (uint i=0; i<(uint)zones.size(); i++)
|
|
||||||
_VegetableLandscapeZoneNames.push_back(zones.asString(i).c_str());
|
|
||||||
}
|
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableLandscapeTileBank.clear();
|
|
||||||
_VegetableLandscapeTileFarBank.clear();
|
|
||||||
_VegetableLandscapeZoneNames.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load Vegetable params.
|
_VegetableLandscapeTileBank = settings->value(Constants::VEGET_TILE_BANK, "").toString().toStdString();
|
||||||
// --------------
|
_VegetableLandscapeTileFarBank = settings->value(Constants::VEGET_TILE_FAR_BANK, "").toString().toStdString();
|
||||||
|
_CoarseMeshTexture = settings->value(Constants::COARSE_MESH_TEXTURE, "").toString().toStdString();
|
||||||
|
_VegetableTexture = settings->value(Constants::VEGET_TEXTURE, "").toString().toStdString();
|
||||||
|
|
||||||
// vegetable texture
|
QStringList list = settings->value(Constants::VEGET_LANDSCAPE_ZONES).toStringList();
|
||||||
try
|
_VegetableLandscapeZoneNames.clear();
|
||||||
{
|
for (int i = 0; i < list.size(); ++i)
|
||||||
_VegetableTexture = Modules::config().getConfigFile().getVar("VegetTexture").asString();
|
_VegetableLandscapeZoneNames.push_back(list[i].toStdString());
|
||||||
}
|
settings->endGroup();
|
||||||
catch (NLMISC::EUnknownVar &)
|
|
||||||
{
|
|
||||||
_VegetableTexture= "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVegetableEditor::saveConfig()
|
void CVegetableEditor::saveConfig()
|
||||||
{
|
{
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeThreshold").setAsFloat(_VegetableLandscapeThreshold);
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeTileNear").setAsFloat(_VegetableLandscapeTileNear);
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
|
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeAmbient").setAsInt(_VegetableLandscapeAmbient.R, 0);
|
settings->setValue("VegetLandscapeThreshold", _VegetableLandscapeThreshold);
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeAmbient").setAsInt(_VegetableLandscapeAmbient.G, 1);
|
settings->setValue("VegetLandscapeTileNear", _VegetableLandscapeTileNear);
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeAmbient").setAsInt(_VegetableLandscapeAmbient.B, 2);
|
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeAmbient").setAsInt(_VegetableLandscapeAmbient.A, 3);
|
|
||||||
|
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeDiffuse").setAsInt(_VegetableLandscapeDiffuse.R, 0);
|
QColor vAmbColor(_VegetableLandscapeAmbient.R, _VegetableLandscapeAmbient.G, _VegetableLandscapeAmbient.B, _VegetableLandscapeAmbient.A);
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeDiffuse").setAsInt(_VegetableLandscapeDiffuse.G, 1);
|
settings->setValue("VegetLandscapeAmbient", vAmbColor);
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeDiffuse").setAsInt(_VegetableLandscapeDiffuse.B, 2);
|
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeAmbient").setAsInt(_VegetableLandscapeAmbient.A, 3);
|
|
||||||
|
|
||||||
Modules::config().getConfigFile().getVar("VegetWindDir").setAsFloat(_VegetableWindDir.x, 0);
|
QColor vDifColor(_VegetableLandscapeDiffuse.R, _VegetableLandscapeDiffuse.G, _VegetableLandscapeDiffuse.B, _VegetableLandscapeDiffuse.A);
|
||||||
Modules::config().getConfigFile().getVar("VegetWindDir").setAsFloat(_VegetableWindDir.y, 1);
|
settings->setValue("VegetLandscapeDiffuse", vDifColor);
|
||||||
Modules::config().getConfigFile().getVar("VegetWindDir").setAsFloat(_VegetableWindDir.z, 2);
|
|
||||||
|
|
||||||
Modules::config().getConfigFile().getVar("VegetWindPower").setAsFloat(_VegetableWindPower);
|
QVector3D vec(_VegetableWindDir.x, _VegetableWindDir.y, _VegetableWindDir.z);
|
||||||
Modules::config().getConfigFile().getVar("VegetWindFreq").setAsFloat(_VegetableWindFreq);
|
settings->setValue("VegetWindDir", vec);
|
||||||
Modules::config().getConfigFile().getVar("VegetWindBendMin").setAsFloat(_VegetableWindBendMin);
|
|
||||||
|
settings->setValue("VegetWindPower", _VegetableWindPower);
|
||||||
|
settings->setValue("VegetWindFreq", _VegetableWindFreq);
|
||||||
|
settings->setValue("VegetWindBendMin", _VegetableWindBendMin);
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
|
settings->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* namespace NLQT */
|
} /* namespace NLQT */
|
|
@ -140,23 +140,23 @@ public:
|
||||||
void refreshVegetableLandscape(const NL3D::CTileVegetableDesc &tvdesc);
|
void refreshVegetableLandscape(const NL3D::CTileVegetableDesc &tvdesc);
|
||||||
|
|
||||||
/// Get vegetable Wind wetup.
|
/// Get vegetable Wind wetup.
|
||||||
float getVegetableWindPower() const
|
double getVegetableWindPower() const
|
||||||
{
|
{
|
||||||
return _VegetableWindPower;
|
return _VegetableWindPower;
|
||||||
}
|
}
|
||||||
float getVegetableWindBendStart() const
|
double getVegetableWindBendStart() const
|
||||||
{
|
{
|
||||||
return _VegetableWindBendMin;
|
return _VegetableWindBendMin;
|
||||||
}
|
}
|
||||||
float getVegetableWindFrequency() const
|
double getVegetableWindFrequency() const
|
||||||
{
|
{
|
||||||
return _VegetableWindFreq;
|
return _VegetableWindFreq;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Set vegetable Wind wetup (updat view if possible)
|
/// Set vegetable Wind wetup (updat view if possible)
|
||||||
void setVegetableWindPower(float w);
|
void setVegetableWindPower(double w);
|
||||||
void setVegetableWindBendStart(float w);
|
void setVegetableWindBendStart(double w);
|
||||||
void setVegetableWindFrequency(float w);
|
void setVegetableWindFrequency(double w);
|
||||||
|
|
||||||
void setVegetableAmbientLight(const NLMISC::CRGBA &ambient);
|
void setVegetableAmbientLight(const NLMISC::CRGBA &ambient);
|
||||||
void setVegetableDiffuseLight(const NLMISC::CRGBA &diffuse);
|
void setVegetableDiffuseLight(const NLMISC::CRGBA &diffuse);
|
||||||
|
@ -236,11 +236,12 @@ private:
|
||||||
std::string _VegetableLandscapeTileBank;
|
std::string _VegetableLandscapeTileBank;
|
||||||
std::string _VegetableLandscapeTileFarBank;
|
std::string _VegetableLandscapeTileFarBank;
|
||||||
std::vector<std::string> _VegetableLandscapeZoneNames;
|
std::vector<std::string> _VegetableLandscapeZoneNames;
|
||||||
|
std::string _CoarseMeshTexture;
|
||||||
|
|
||||||
// Misc.
|
// Misc.
|
||||||
float _VegetableLandscapeThreshold;
|
double _VegetableLandscapeThreshold;
|
||||||
float _VegetableLandscapeTileNear;
|
double _VegetableLandscapeTileNear;
|
||||||
float _VegetableLandscapeMultiply;
|
double _VegetableLandscapeMultiply;
|
||||||
NLMISC::CRGBA _VegetableLandscapeAmbient;
|
NLMISC::CRGBA _VegetableLandscapeAmbient;
|
||||||
NLMISC::CRGBA _VegetableLandscapeDiffuse;
|
NLMISC::CRGBA _VegetableLandscapeDiffuse;
|
||||||
std::string _VegetableTexture;
|
std::string _VegetableTexture;
|
||||||
|
@ -249,9 +250,9 @@ private:
|
||||||
NLMISC::CVector _VegetableLightDir;
|
NLMISC::CVector _VegetableLightDir;
|
||||||
// Vegetable wind.
|
// Vegetable wind.
|
||||||
NLMISC::CVector _VegetableWindDir;
|
NLMISC::CVector _VegetableWindDir;
|
||||||
float _VegetableWindFreq;
|
double _VegetableWindFreq;
|
||||||
float _VegetableWindPower;
|
double _VegetableWindPower;
|
||||||
float _VegetableWindBendMin;
|
double _VegetableWindBendMin;
|
||||||
|
|
||||||
bool _VegetableEnabled;
|
bool _VegetableEnabled;
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
// Project includes
|
// Project includes
|
||||||
#include "modules.h"
|
#include "modules.h"
|
||||||
|
|
||||||
#define NL_VEGETABLE_EDIT_WIND_MAX_POWER 10.f
|
#define NL_VEGETABLE_EDIT_WIND_MAX_POWER 10.0
|
||||||
#define NL_VEGETABLE_EDIT_WIND_MAX_FREQUENCY 10.f
|
#define NL_VEGETABLE_EDIT_WIND_MAX_FREQUENCY 10.0
|
||||||
#define NL_VEGETABLE_EDIT_WIND_MAX_BENDSTART 1.f
|
#define NL_VEGETABLE_EDIT_WIND_MAX_BENDSTART 1.0
|
||||||
|
|
||||||
namespace NLQT
|
namespace NLQT
|
||||||
{
|
{
|
||||||
|
@ -43,15 +43,15 @@ CVegetableLandscapePage::CVegetableLandscapePage(QWidget *parent)
|
||||||
connect(_ui.diffuseColorWidget, SIGNAL(colorChanged(NLMISC::CRGBA)), this, SLOT(setColorDiffuse(NLMISC::CRGBA)));
|
connect(_ui.diffuseColorWidget, SIGNAL(colorChanged(NLMISC::CRGBA)), this, SLOT(setColorDiffuse(NLMISC::CRGBA)));
|
||||||
connect(_ui.ambientColorwidget, SIGNAL(colorChanged(NLMISC::CRGBA)), this, SLOT(setColorAmbient(NLMISC::CRGBA)));
|
connect(_ui.ambientColorwidget, SIGNAL(colorChanged(NLMISC::CRGBA)), this, SLOT(setColorAmbient(NLMISC::CRGBA)));
|
||||||
|
|
||||||
float windPower = Modules::veget().getVegetableWindPower();
|
double windPower = Modules::veget().getVegetableWindPower();
|
||||||
NLMISC::clamp(windPower, 0, NL_VEGETABLE_EDIT_WIND_MAX_POWER);
|
NLMISC::clamp(windPower, 0, NL_VEGETABLE_EDIT_WIND_MAX_POWER);
|
||||||
_ui.powerHorizontalSlider->setValue(int(windPower * _ui.powerHorizontalSlider->maximum() / NL_VEGETABLE_EDIT_WIND_MAX_POWER));
|
_ui.powerHorizontalSlider->setValue(int(windPower * _ui.powerHorizontalSlider->maximum() / NL_VEGETABLE_EDIT_WIND_MAX_POWER));
|
||||||
|
|
||||||
float bendStar = Modules::veget().getVegetableWindBendStart();
|
double bendStar = Modules::veget().getVegetableWindBendStart();
|
||||||
NLMISC::clamp(bendStar, 0, NL_VEGETABLE_EDIT_WIND_MAX_BENDSTART);
|
NLMISC::clamp(bendStar, 0, NL_VEGETABLE_EDIT_WIND_MAX_BENDSTART);
|
||||||
_ui.bendStartHorizontalSlider->setValue(int(bendStar * _ui.bendStartHorizontalSlider->maximum() / NL_VEGETABLE_EDIT_WIND_MAX_BENDSTART));
|
_ui.bendStartHorizontalSlider->setValue(int(bendStar * _ui.bendStartHorizontalSlider->maximum() / NL_VEGETABLE_EDIT_WIND_MAX_BENDSTART));
|
||||||
|
|
||||||
float frequency = Modules::veget().getVegetableWindFrequency();
|
double frequency = Modules::veget().getVegetableWindFrequency();
|
||||||
NLMISC::clamp(frequency, 0, NL_VEGETABLE_EDIT_WIND_MAX_FREQUENCY);
|
NLMISC::clamp(frequency, 0, NL_VEGETABLE_EDIT_WIND_MAX_FREQUENCY);
|
||||||
_ui.frequencyHorizontalSlider->setValue(int(frequency * _ui.frequencyHorizontalSlider->maximum() / NL_VEGETABLE_EDIT_WIND_MAX_FREQUENCY));
|
_ui.frequencyHorizontalSlider->setValue(int(frequency * _ui.frequencyHorizontalSlider->maximum() / NL_VEGETABLE_EDIT_WIND_MAX_FREQUENCY));
|
||||||
|
|
||||||
|
|
|
@ -18,19 +18,21 @@
|
||||||
// Project includes
|
// Project includes
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"
|
||||||
#include "vegetable_settings_page.h"
|
#include "vegetable_settings_page.h"
|
||||||
|
#include "object_viewer_constants.h"
|
||||||
|
#include "../core/icore.h"
|
||||||
#include "modules.h"
|
#include "modules.h"
|
||||||
|
|
||||||
// Qt includes
|
// Qt includes
|
||||||
#include <QtGui/QWidget>
|
#include <QtGui/QWidget>
|
||||||
|
#include <QtCore/QSettings>
|
||||||
#include <QtGui/QMessageBox>
|
#include <QtGui/QMessageBox>
|
||||||
#include <QtGui/QFileDialog>
|
#include <QtGui/QFileDialog>
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/config_file.h>
|
|
||||||
|
|
||||||
namespace NLQT
|
namespace NLQT
|
||||||
{
|
{
|
||||||
|
|
||||||
|
QString LastDir = ".";
|
||||||
|
|
||||||
VegetableSettingsPage::VegetableSettingsPage(QObject *parent)
|
VegetableSettingsPage::VegetableSettingsPage(QObject *parent)
|
||||||
: IOptionsPage(parent),
|
: IOptionsPage(parent),
|
||||||
m_page(0)
|
m_page(0)
|
||||||
|
@ -49,7 +51,7 @@ QString VegetableSettingsPage::trName() const
|
||||||
|
|
||||||
QString VegetableSettingsPage::category() const
|
QString VegetableSettingsPage::category() const
|
||||||
{
|
{
|
||||||
return QLatin1String("ObjectViewer");
|
return QLatin1String(Constants::OBJECT_VIEWER_SECTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString VegetableSettingsPage::trCategory() const
|
QString VegetableSettingsPage::trCategory() const
|
||||||
|
@ -62,23 +64,21 @@ QWidget *VegetableSettingsPage::createPage(QWidget *parent)
|
||||||
m_page = new QWidget(parent);
|
m_page = new QWidget(parent);
|
||||||
m_ui.setupUi(m_page);
|
m_ui.setupUi(m_page);
|
||||||
|
|
||||||
m_ui.tileBankLineEdit->setText(Modules::config().getConfigFile().getVar("VegetTileBank").asString().c_str());
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
m_ui.tileFarBankLineEdit->setText(Modules::config().getConfigFile().getVar("VegetTileFarBank").asString().c_str());
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
m_ui.vegetTextureLineEdit->setText(Modules::config().getConfigFile().getVar("VegetTexture").asString().c_str());
|
|
||||||
|
|
||||||
m_ui.zonesListWidget->clear();
|
m_ui.tileBankLineEdit->setText(settings->value(Constants::VEGET_TILE_BANK, "").toString());
|
||||||
|
m_ui.tileFarBankLineEdit->setText(settings->value(Constants::VEGET_TILE_FAR_BANK, "").toString());
|
||||||
|
m_ui.vegetTextureLineEdit->setText(settings->value(Constants::VEGET_TEXTURE, "").toString());
|
||||||
|
m_ui.coarseLineEdit->setText(settings->value(Constants::COARSE_MESH_TEXTURE, "").toString());
|
||||||
|
m_ui.zonesListWidget->addItems(settings->value(Constants::VEGET_LANDSCAPE_ZONES).toStringList());
|
||||||
|
|
||||||
// load vegetable landscape zone paths from config file
|
settings->endGroup();
|
||||||
NLMISC::CConfigFile::CVar &var = Modules::config().getConfigFile().getVar("VegetLandscapeZones");
|
|
||||||
for (uint i = 0; i < var.size(); ++i)
|
|
||||||
{
|
|
||||||
m_ui.zonesListWidget->addItem(var.asString(i).c_str());
|
|
||||||
m_ui.zonesListWidget->item(i)->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
|
||||||
}
|
|
||||||
|
|
||||||
connect(m_ui.tileBankToolButton, SIGNAL(clicked()), this, SLOT(setTileBank()));
|
connect(m_ui.tileBankToolButton, SIGNAL(clicked()), this, SLOT(setTileBank()));
|
||||||
connect(m_ui.tileFarBankToolButton, SIGNAL(clicked()), this, SLOT(setTileFarBank()));
|
connect(m_ui.tileFarBankToolButton, SIGNAL(clicked()), this, SLOT(setTileFarBank()));
|
||||||
connect(m_ui.vegetTexToolButton, SIGNAL(clicked()), this, SLOT(setTextureVegetable()));
|
connect(m_ui.vegetTexToolButton, SIGNAL(clicked()), this, SLOT(setTextureVegetable()));
|
||||||
|
connect(m_ui.coarseToolButton, SIGNAL(clicked()), this, SLOT(setCoarseMeshTexture()));
|
||||||
connect(m_ui.addZoneToolButton, SIGNAL(clicked()), this, SLOT(addZone()));
|
connect(m_ui.addZoneToolButton, SIGNAL(clicked()), this, SLOT(addZone()));
|
||||||
connect(m_ui.removeZoneToolButton, SIGNAL(clicked()), this, SLOT(removeZone()));
|
connect(m_ui.removeZoneToolButton, SIGNAL(clicked()), this, SLOT(removeZone()));
|
||||||
|
|
||||||
|
@ -87,21 +87,22 @@ QWidget *VegetableSettingsPage::createPage(QWidget *parent)
|
||||||
|
|
||||||
void VegetableSettingsPage::apply()
|
void VegetableSettingsPage::apply()
|
||||||
{
|
{
|
||||||
Modules::config().getConfigFile().getVar("VegetTileBank").setAsString(m_ui.tileBankLineEdit->text().toStdString());
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
Modules::config().getConfigFile().getVar("VegetTileFarBank").setAsString(m_ui.tileFarBankLineEdit->text().toStdString());
|
settings->beginGroup(Constants::OBJECT_VIEWER_SECTION);
|
||||||
Modules::config().getConfigFile().getVar("VegetTexture").setAsString(m_ui.vegetTextureLineEdit->text().toStdString());
|
|
||||||
|
|
||||||
std::vector<std::string> list;
|
settings->setValue(Constants::VEGET_TILE_BANK, m_ui.tileBankLineEdit->text());
|
||||||
|
settings->setValue(Constants::VEGET_TILE_FAR_BANK, m_ui.tileFarBankLineEdit->text());
|
||||||
|
settings->setValue(Constants::COARSE_MESH_TEXTURE, m_ui.coarseLineEdit->text());
|
||||||
|
settings->setValue(Constants::VEGET_TEXTURE, m_ui.vegetTextureLineEdit->text());
|
||||||
|
|
||||||
|
QStringList list;
|
||||||
for (sint i = 0; i < m_ui.zonesListWidget->count(); ++i)
|
for (sint i = 0; i < m_ui.zonesListWidget->count(); ++i)
|
||||||
{
|
list.push_back(m_ui.zonesListWidget->item(i)->text());
|
||||||
std::string str = m_ui.zonesListWidget->item(i)->text().toStdString();
|
|
||||||
list.push_back(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeZones").Type = NLMISC::CConfigFile::CVar::T_STRING;
|
settings->setValue(Constants::VEGET_LANDSCAPE_ZONES, list);
|
||||||
Modules::config().getConfigFile().getVar("VegetLandscapeZones").setAsString(list);
|
|
||||||
|
|
||||||
Modules::config().getConfigFile().save();
|
settings->endGroup();
|
||||||
|
settings->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VegetableSettingsPage::finish()
|
void VegetableSettingsPage::finish()
|
||||||
|
@ -141,10 +142,21 @@ void VegetableSettingsPage::setTextureVegetable()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VegetableSettingsPage::setCoarseMeshTexture()
|
||||||
|
{
|
||||||
|
QString fileName = QFileDialog::getOpenFileName(0, tr("Set Coarse Mesh texture"),
|
||||||
|
m_ui.vegetTextureLineEdit->text(),
|
||||||
|
tr("Texture file (*.tga *.png *.jpg *.dds);;"));
|
||||||
|
if (!fileName.isEmpty())
|
||||||
|
{
|
||||||
|
m_ui.coarseLineEdit->setText(fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void VegetableSettingsPage::addZone()
|
void VegetableSettingsPage::addZone()
|
||||||
{
|
{
|
||||||
QStringList fileNames = QFileDialog::getOpenFileNames(0,
|
QStringList fileNames = QFileDialog::getOpenFileNames(0,
|
||||||
tr("Add zone files"), ".",
|
tr("Add zone files"), LastDir,
|
||||||
tr("Zonel files (*.zonel *.zone);;"));
|
tr("Zonel files (*.zonel *.zone);;"));
|
||||||
|
|
||||||
if (!fileNames.isEmpty())
|
if (!fileNames.isEmpty())
|
||||||
|
|
|
@ -48,10 +48,11 @@ public:
|
||||||
virtual void apply();
|
virtual void apply();
|
||||||
virtual void finish();
|
virtual void finish();
|
||||||
|
|
||||||
public Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void setTileBank();
|
void setTileBank();
|
||||||
void setTileFarBank();
|
void setTileFarBank();
|
||||||
void setTextureVegetable();
|
void setTextureVegetable();
|
||||||
|
void setCoarseMeshTexture();
|
||||||
void addZone();
|
void addZone();
|
||||||
void removeZone();
|
void removeZone();
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_7">
|
<widget class="QLabel" name="label_7">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>false</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Coarse mesh texture</string>
|
<string>Coarse mesh texture</string>
|
||||||
|
@ -105,14 +105,14 @@
|
||||||
<item row="3" column="1" colspan="2">
|
<item row="3" column="1" colspan="2">
|
||||||
<widget class="QLineEdit" name="coarseLineEdit">
|
<widget class="QLineEdit" name="coarseLineEdit">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>false</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="3">
|
<item row="3" column="3">
|
||||||
<widget class="QToolButton" name="coarseToolButton">
|
<widget class="QToolButton" name="coarseToolButton">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>false</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>...</string>
|
||||||
|
|
Loading…
Reference in a new issue