287 lines
9.3 KiB
C++
287 lines
9.3 KiB
C++
/**
|
|
* CGraphicsConfig
|
|
* $Id: graphics_config.cpp 2247 2010-02-15 21:16:38Z kaetemi $
|
|
* \file graphics_config.cpp
|
|
* \brief CGraphicsConfig
|
|
* \date 2010-02-07 10:15GMT
|
|
* \author Jan Boon (Kaetemi)
|
|
*/
|
|
|
|
/*
|
|
* 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 <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 */
|