khanat-opennel-code/code/nel/samples/3d/nel_qt/graphics_config.cpp
2010-05-07 11:06:20 +02:00

275 lines
9.1 KiB
C++

// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <nel/misc/types_nl.h>
#include "graphics_config.h"
// STL includes
// Qt includes
#include <QtGui/QVBoxLayout>
#include <QtGui/QHBoxLayout>
#include <QtGui/QUndoStack>
// NeL includes
// #include <nel/misc/debug.h>
#include <nel/misc/i18n.h>
// Project includes
#include "main_window.h"
#include "configuration.h"
#include "internationalization.h"
#include "undo_redo_binders.h"
using namespace std;
using namespace NLMISC;
namespace NLQT {
namespace {
QString nli18n(const char *label)
{
return QString::fromUtf16(CI18N::get(label).c_str());
}
} /* anonymous namespace */
CGraphicsConfig::CGraphicsConfig(QWidget *parent, CConfiguration *configuration, CInternationalization *internationalization, QUndoStack *undoStack)
: QWidget(parent), m_Configuration(configuration), m_Internationalization(internationalization), m_UndoStack(undoStack),
m_DriverGroup(NULL), m_Enabled(NULL), m_DriverLabel(NULL), m_Driver(NULL),
m_FontNameLabel(NULL), m_FontName(NULL), m_Apply(NULL),
m_RenderGroup(NULL), m_BackgroundColor(NULL), m_FontShadow(NULL),
m_ScreenshotGroup(NULL)
{
nlassert(m_Configuration);
nlassert(m_Internationalization);
nlassert(m_UndoStack);
QVBoxLayout *vboxLayout = new QVBoxLayout();
// Driver
{
nlassert(!m_DriverGroup);
m_DriverGroup = new QGroupBox();
QVBoxLayout *groupVboxLayout = new QVBoxLayout();
// Enabled
{
nlassert(!m_Enabled);
m_Enabled = new QCheckBox();
groupVboxLayout->addWidget(m_Enabled);
}
// Driver
{
QHBoxLayout *hboxLayout = new QHBoxLayout();
nlassert(!m_DriverLabel);
m_DriverLabel = new QLabel();
nlassert(!m_Driver);
m_Driver = new QComboBox();
m_DriverLabel->setBuddy(m_Driver);
hboxLayout->addWidget(m_DriverLabel);
hboxLayout->addWidget(m_Driver);
hboxLayout->setStretch(1, 1);
groupVboxLayout->addLayout(hboxLayout);
}
// Font Name
{
QHBoxLayout *hboxLayout = new QHBoxLayout();
nlassert(!m_FontNameLabel);
m_FontNameLabel = new QLabel();
nlassert(!m_FontName);
m_FontName = new QLineEdit();
m_FontNameLabel->setBuddy(m_FontName);
hboxLayout->addWidget(m_FontNameLabel);
hboxLayout->addWidget(m_FontName);
hboxLayout->setStretch(1, 1);
groupVboxLayout->addLayout(hboxLayout);
}
// Apply
{
nlassert(!m_Apply);
m_Apply = new QPushButton();
m_Apply->setDefault(true);
groupVboxLayout->addWidget(m_Apply);
connect(m_Apply, SIGNAL(pressed()), this, SLOT(applyPressed()));
}
m_DriverGroup->setLayout(groupVboxLayout);
vboxLayout->addWidget(m_DriverGroup);
}
// Render
{
nlassert(!m_RenderGroup);
m_RenderGroup = new QGroupBox();
QVBoxLayout *groupVboxLayout = new QVBoxLayout();
// Background Color
{
m_BackgroundColor = new QtColorPicker();
m_BackgroundColor->setStandardColors();
groupVboxLayout->addWidget(m_BackgroundColor);
connect(m_BackgroundColor, SIGNAL(colorChanged(const QColor &)), this, SLOT(uicbBackgroundColor(const QColor &)));
}
// Font Shadow
{
nlassert(!m_FontShadow);
m_FontShadow = new QCheckBox();
groupVboxLayout->addWidget(m_FontShadow);
connect(m_FontShadow, SIGNAL(toggled(bool)), this, SLOT(uicbFontShadow(bool)));
}
m_RenderGroup->setLayout(groupVboxLayout);
vboxLayout->addWidget(m_RenderGroup);
}
// Screenshots
{
nlassert(!m_ScreenshotGroup);
m_ScreenshotGroup = new QGroupBox();
QVBoxLayout *groupVboxLayout = new QVBoxLayout();
m_ScreenshotGroup->setLayout(groupVboxLayout);
vboxLayout->addWidget(m_ScreenshotGroup);
}
vboxLayout->addStretch();
setLayout(vboxLayout);
// setup config file callbacks and initialize values
m_Configuration->setAndCallback("GraphicsEnabled", CConfigCallback(this, &CGraphicsConfig::cfcbGraphicsEnabled));
m_Configuration->setCallback("GraphicsDriver", CConfigCallback(this, &CGraphicsConfig::cfcbGraphicsDriver));
m_Configuration->setAndCallback("GraphicsDrivers", CConfigCallback(this, &CGraphicsConfig::cfcbGraphicsDrivers));
m_Configuration->setAndCallback("FontName", CConfigCallback(this, &CGraphicsConfig::cfcbFontName));
m_Configuration->setAndCallback("BackgroundColor", CConfigCallback(this, &CGraphicsConfig::cfcbBackgroundColor));
m_Configuration->setAndCallback("FontShadow", CConfigCallback(this, &CGraphicsConfig::cfcbFontShadow));
// setup translation callback and initialize translation
m_Internationalization->enableCallback(CEmptyCallback(this, &CGraphicsConfig::incbTranslate));
incbTranslate();
// setup undo/redo automation
CUndoRedoBinderButton *undoRedoEnabled = new CUndoRedoBinderButton(m_Enabled, undoStack);
CUndoRedoBinderComboBox *undoRedoDriver = new CUndoRedoBinderComboBox(m_Driver, undoStack);
CUndoRedoBinderLineEdit *undoRedoFontName = new CUndoRedoBinderLineEdit(m_FontName, undoStack);
CUndoRedoBinderColorPicker *undoRedoBackgroundColor = new CUndoRedoBinderColorPicker(m_BackgroundColor, undoStack);
CUndoRedoBinderButton *undoRedoFontShadow = new CUndoRedoBinderButton(m_FontShadow, undoStack);
}
CGraphicsConfig::~CGraphicsConfig()
{
m_Internationalization->disableCallback(CEmptyCallback(this, &CGraphicsConfig::incbTranslate));
m_Configuration->dropCallback("FontShadow");
m_Configuration->dropCallback("BackgroundColor");
m_Configuration->dropCallback("FontName");
m_Configuration->dropCallback("GraphicsDrivers");
m_Configuration->dropCallback("GraphicsDriver");
m_Configuration->dropCallback("GraphicsEnabled");
}
void CGraphicsConfig::incbTranslate()
{
m_DriverGroup->setTitle(nli18n("GraphicsConfigDriverGroup"));
m_Enabled->setText(nli18n("GraphicsConfigEnabled"));
m_DriverLabel->setText(nli18n("GraphicsConfigDriver"));
m_FontNameLabel->setText(nli18n("GraphicsConfigFontName"));
m_Apply->setText(nli18n("GraphicsConfigApply"));
m_RenderGroup->setTitle(nli18n("GraphicsConfigRenderGroup"));
m_BackgroundColor->setText(nli18n("GraphicsConfigBackgroundColor"));
m_FontShadow->setText(nli18n("GraphicsConfigFontShadow"));
m_ScreenshotGroup->setTitle(nli18n("GraphicsConfigScreenshotGroup"));
}
void CGraphicsConfig::cfcbGraphicsEnabled(NLMISC::CConfigFile::CVar &var)
{
m_Enabled->setChecked(var.asBool());
}
void CGraphicsConfig::cfcbGraphicsDrivers(NLMISC::CConfigFile::CVar &var)
{
while (m_Driver->count())
m_Driver->removeItem(0);
for (uint i = 0; i < var.size(); ++i)
m_Driver->addItem(var.asString(i).c_str());
cfcbGraphicsDriver(m_Configuration->getConfigFile().getVar("GraphicsDriver"));
m_UndoStack->clear();
}
void CGraphicsConfig::cfcbGraphicsDriver(NLMISC::CConfigFile::CVar &var)
{
QString value = var.asString().c_str();
QString dn = value.toLower();
for (sint i = 0; i < m_Driver->count(); ++i)
{
if (dn == m_Driver->itemText(i).toLower())
{
m_Driver->setCurrentIndex(i);
return;
}
}
nlwarning("Unknown GraphicsDriver specified in config, skipping value.");
}
void CGraphicsConfig::cfcbFontName(NLMISC::CConfigFile::CVar &var)
{
m_FontName->setText(var.asString().c_str());
}
void CGraphicsConfig::cfcbBackgroundColor(NLMISC::CConfigFile::CVar &var)
{
m_BackgroundColor->setCurrentColor(QColor(var.asInt(0), var.asInt(1), var.asInt(2)));
emit onBackgroundColor(getBackgroundColor());
}
void CGraphicsConfig::cfcbFontShadow(NLMISC::CConfigFile::CVar &var)
{
m_FontShadow->setChecked(var.asBool());
emit onFontShadow(getFontShadow());
}
void CGraphicsConfig::applyPressed()
{
m_Configuration->getConfigFile().getVar("GraphicsEnabled").setAsInt(getGraphicsEnabled() ? 1 : 0);
m_Configuration->getConfigFile().getVar("GraphicsDriver").setAsString(getGraphicsDriver());
m_Configuration->getConfigFile().getVar("FontName").setAsString(getFontName());
emit applyGraphicsConfig();
}
void CGraphicsConfig::uicbBackgroundColor(const QColor &backgroundColor)
{
m_Configuration->getConfigFile().getVar("BackgroundColor").setAsInt(backgroundColor.red(), 0);
m_Configuration->getConfigFile().getVar("BackgroundColor").setAsInt(backgroundColor.green(), 1);
m_Configuration->getConfigFile().getVar("BackgroundColor").setAsInt(backgroundColor.blue(), 2);
emit onBackgroundColor(getBackgroundColor());
}
void CGraphicsConfig::uicbFontShadow(bool checked)
{
m_Configuration->getConfigFile().getVar("FontShadow").setAsInt(checked ? 1 : 0);
emit onFontShadow(checked);
}
} /* namespace NLQT */
/* end of file */