2013-05-05 13:37:06 +00:00
|
|
|
#include "dialogterrainpainting.h"
|
|
|
|
#include "ui_dialogterrainpainting.h"
|
|
|
|
|
|
|
|
#include "tools.h"
|
2013-05-10 15:40:49 +00:00
|
|
|
#include <QKeyEvent>
|
|
|
|
#include <QWheelEvent>
|
|
|
|
#include <QMessageBox>
|
2013-05-05 13:37:06 +00:00
|
|
|
|
|
|
|
DialogTerrainPainting::DialogTerrainPainting(QWidget*parent, TerrainDefinition* terrain) :
|
|
|
|
QDialog(parent),
|
|
|
|
ui(new Ui::DialogTerrainPainting)
|
|
|
|
{
|
|
|
|
ui->setupUi(this);
|
|
|
|
|
|
|
|
_terrain_original = terrain;
|
|
|
|
_terrain_modified = (TerrainDefinition*)TerrainDefinitionClass.create();
|
|
|
|
|
2013-05-10 15:40:49 +00:00
|
|
|
QWidget* widget = findChild<QWidget*>("widget_commands");
|
|
|
|
if (widget)
|
|
|
|
{
|
|
|
|
widget->hide();
|
|
|
|
}
|
|
|
|
|
2013-05-05 13:37:06 +00:00
|
|
|
revert();
|
|
|
|
|
|
|
|
brushConfigChanged();
|
|
|
|
}
|
|
|
|
|
|
|
|
DialogTerrainPainting::~DialogTerrainPainting()
|
|
|
|
{
|
|
|
|
delete ui;
|
|
|
|
}
|
|
|
|
|
2013-05-10 15:40:49 +00:00
|
|
|
void DialogTerrainPainting::keyReleaseEvent(QKeyEvent* event)
|
|
|
|
{
|
|
|
|
QComboBox* input_brush_mode = findChild<QComboBox*>("input_brush_mode");
|
|
|
|
|
|
|
|
switch (event->key())
|
|
|
|
{
|
|
|
|
case Qt::Key_F2:
|
|
|
|
if (input_brush_mode)
|
|
|
|
{
|
|
|
|
input_brush_mode->setCurrentIndex(0);
|
|
|
|
}
|
|
|
|
event->accept();
|
|
|
|
break;
|
|
|
|
case Qt::Key_F3:
|
|
|
|
if (input_brush_mode)
|
|
|
|
{
|
|
|
|
input_brush_mode->setCurrentIndex(1);
|
|
|
|
}
|
|
|
|
event->accept();
|
|
|
|
break;
|
|
|
|
case Qt::Key_F4:
|
|
|
|
if (input_brush_mode)
|
|
|
|
{
|
|
|
|
input_brush_mode->setCurrentIndex(2);
|
|
|
|
}
|
|
|
|
event->accept();
|
|
|
|
break;
|
|
|
|
case Qt::Key_F11:
|
|
|
|
if (input_brush_mode)
|
|
|
|
{
|
|
|
|
input_brush_mode->setCurrentIndex(3);
|
|
|
|
}
|
|
|
|
event->accept();
|
|
|
|
break;
|
|
|
|
case Qt::Key_F12:
|
|
|
|
if (input_brush_mode)
|
|
|
|
{
|
|
|
|
input_brush_mode->setCurrentIndex(4);
|
|
|
|
}
|
|
|
|
event->accept();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
QDialog::keyReleaseEvent(event);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DialogTerrainPainting::wheelEvent(QWheelEvent* event)
|
|
|
|
{
|
|
|
|
QSlider* input_brush_size = findChild<QSlider*>("input_brush_size");
|
|
|
|
QSlider* input_brush_smoothing = findChild<QSlider*>("input_brush_smoothing");
|
|
|
|
QSlider* input_brush_strength = findChild<QSlider*>("input_brush_strength");
|
|
|
|
|
|
|
|
if (event->modifiers() & Qt::ControlModifier)
|
|
|
|
{
|
|
|
|
if (input_brush_size)
|
|
|
|
{
|
|
|
|
input_brush_size->setValue(input_brush_size->value() + (event->delta() > 0 ? 1 : -1));
|
|
|
|
}
|
|
|
|
event->accept();
|
|
|
|
}
|
|
|
|
else if (event->modifiers() & Qt::ShiftModifier)
|
|
|
|
{
|
|
|
|
if (input_brush_strength)
|
|
|
|
{
|
|
|
|
input_brush_strength->setValue(input_brush_strength->value() + (event->delta() > 0 ? 1 : -1));
|
|
|
|
}
|
|
|
|
event->accept();
|
|
|
|
}
|
|
|
|
else if (event->modifiers() & Qt::AltModifier)
|
|
|
|
{
|
|
|
|
if (input_brush_smoothing)
|
|
|
|
{
|
|
|
|
input_brush_smoothing->setValue(input_brush_smoothing->value() + (event->delta() > 0 ? 1 : -1));
|
|
|
|
}
|
|
|
|
event->accept();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
event->ignore();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-05 13:37:06 +00:00
|
|
|
void DialogTerrainPainting::accept()
|
|
|
|
{
|
|
|
|
TerrainDefinitionClass.copy(_terrain_modified, _terrain_original);
|
|
|
|
QDialog::accept();
|
|
|
|
}
|
|
|
|
|
|
|
|
void DialogTerrainPainting::revert()
|
|
|
|
{
|
|
|
|
TerrainDefinitionClass.copy(_terrain_original, _terrain_modified);
|
|
|
|
|
|
|
|
WidgetHeightMap* heightmap = findChild<WidgetHeightMap*>("widget_heightmap");
|
|
|
|
if (heightmap)
|
|
|
|
{
|
|
|
|
heightmap->setTerrain(_terrain_modified);
|
|
|
|
heightmap->setBrush(&_brush);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DialogTerrainPainting::brushConfigChanged()
|
|
|
|
{
|
2013-05-05 16:42:55 +00:00
|
|
|
QLabel* label;
|
2013-05-05 13:37:06 +00:00
|
|
|
QComboBox* combobox;
|
|
|
|
QSlider* slider;
|
|
|
|
|
|
|
|
// Fill brush object
|
|
|
|
combobox = findChild<QComboBox*>("input_brush_mode");
|
|
|
|
if (combobox)
|
|
|
|
{
|
|
|
|
_brush.setMode((PaintingBrushMode)combobox->currentIndex());
|
|
|
|
}
|
|
|
|
slider = findChild<QSlider*>("input_brush_size");
|
|
|
|
if (slider)
|
|
|
|
{
|
|
|
|
_brush.setSize(slider);
|
|
|
|
}
|
|
|
|
slider = findChild<QSlider*>("input_brush_smoothing");
|
|
|
|
if (slider)
|
|
|
|
{
|
|
|
|
_brush.setSmoothing(slider);
|
|
|
|
}
|
|
|
|
slider = findChild<QSlider*>("input_brush_strength");
|
|
|
|
if (slider)
|
|
|
|
{
|
|
|
|
_brush.setStrength(slider);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Update brush description
|
2013-05-05 16:42:55 +00:00
|
|
|
label = findChild<QLabel*>("label_brush_description");
|
|
|
|
if (label)
|
|
|
|
{
|
|
|
|
label->setText(getHelpText());
|
|
|
|
}
|
2013-05-05 13:37:06 +00:00
|
|
|
|
|
|
|
// Update brush preview
|
|
|
|
|
|
|
|
// Tell to 3D widget
|
|
|
|
WidgetHeightMap* heightmap = findChild<WidgetHeightMap*>("widget_heightmap");
|
|
|
|
if (heightmap)
|
|
|
|
{
|
|
|
|
heightmap->setBrush(&_brush);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DialogTerrainPainting::heightmapChanged()
|
|
|
|
{
|
|
|
|
QLabel* label = findChild<QLabel*>("label_memory_consumption");
|
|
|
|
if (label)
|
|
|
|
{
|
|
|
|
qint64 memused = terrainGetMemoryStats(_terrain_modified);
|
|
|
|
label->setText(tr("Memory used: %1").arg(getHumanMemory(memused)));
|
|
|
|
|
|
|
|
// TODO Find available memory
|
|
|
|
QProgressBar* progress = findChild<QProgressBar*>("progress_memory_consumption");
|
|
|
|
if (progress)
|
|
|
|
{
|
|
|
|
progress->setMaximum(1024);
|
|
|
|
progress->setValue(memused / 1024);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2013-05-05 16:42:55 +00:00
|
|
|
|
|
|
|
QString DialogTerrainPainting::getHelpText()
|
|
|
|
{
|
|
|
|
QString result = _brush.getHelpText();
|
|
|
|
return result;
|
|
|
|
}
|