diff --git a/src/editing/basepreview.cpp b/src/editing/basepreview.cpp index 77780a3..f436011 100644 --- a/src/editing/basepreview.cpp +++ b/src/editing/basepreview.cpp @@ -690,15 +690,22 @@ void BasePreview::resizeEvent(QResizeEvent* event) void BasePreview::paintEvent(QPaintEvent*) { QPainter painter(this); - painter.drawImage(0, 0, *this->_pixbuf); - - QImage osd(_pixbuf->size(), _pixbuf->format()); - osd.fill(0x00000000); - for (int i = 0; i < _osd.size(); i++) + if (isEnabled()) { - _osd[i]->apply(&osd, xoffset, yoffset, scaling); + painter.drawImage(0, 0, *this->_pixbuf); + + QImage osd(_pixbuf->size(), _pixbuf->format()); + osd.fill(0x00000000); + for (int i = 0; i < _osd.size(); i++) + { + _osd[i]->apply(&osd, xoffset, yoffset, scaling); + } + painter.drawImage(0, 0, osd); + } + else + { + painter.fillRect(rect(), QColor(100, 100, 100)); } - painter.drawImage(0, 0, osd); } void BasePreview::updateScaling() diff --git a/src/editing/common/freeformhelper.cpp b/src/editing/common/freeformhelper.cpp index 8d05b89..8d191d6 100644 --- a/src/editing/common/freeformhelper.cpp +++ b/src/editing/common/freeformhelper.cpp @@ -149,6 +149,8 @@ void FreeFormHelper::setExploreButton(QPushButton* button) { _button_explore = button; + button->setToolTip(tr("Explore the scenery in 3D, with current changes applied")); + connect(button, SIGNAL(clicked()), this, SLOT(processExploreClicked())); } } @@ -164,6 +166,8 @@ void FreeFormHelper::setRenderButton(QPushButton* button) { _button_render = button; + button->setToolTip(tr("Quick render preview, with current changes applied")); + connect(button, SIGNAL(clicked()), this, SLOT(processRenderClicked())); } } diff --git a/src/editing/common/freelayerhelper.cpp b/src/editing/common/freelayerhelper.cpp new file mode 100644 index 0000000..a9a95e7 --- /dev/null +++ b/src/editing/common/freelayerhelper.cpp @@ -0,0 +1,117 @@ +#include "freelayerhelper.h" + +#include +#include + +FreeLayerHelper::FreeLayerHelper(Layers* layers, bool reverse) +{ + _table = NULL; + _selected = -1; + _layers = layers; + _reverse = reverse; +} + +FreeLayerHelper::~FreeLayerHelper() +{ +} + +void FreeLayerHelper::refreshLayers() +{ + if (_table) + { + int selected = _selected; + + emit tableUpdateNeeded(); + + int n = layersCount(_layers); + if (n == 0) + { + _selected = -1; + } + + if (selected < 0) + { + _table->clearSelection(); + emit selectionChanged(-1); + } + else + { + if (selected >= n) + { + selected = n - 1; + } + + _table->setCurrentCell(selected, 0); + } + } +} + +void FreeLayerHelper::setLayerTable(QTableWidget* table) +{ + _table = table; + + connect(table, SIGNAL(currentCellChanged(int, int, int, int)), this, SLOT(tableSelectionChanged(int, int))); + + refreshLayers(); +} + +void FreeLayerHelper::setAddButton(QPushButton* button) +{ + connect(button, SIGNAL(clicked()), this, SLOT(addLayer())); +} + +void FreeLayerHelper::setDelButton(QPushButton* button) +{ + connect(button, SIGNAL(clicked()), this, SLOT(deleteLayer())); +} + +void FreeLayerHelper::setDownButton(QPushButton* button) +{ + connect(button, SIGNAL(clicked()), this, SLOT(moveLayerDown())); +} + +void FreeLayerHelper::setUpButton(QPushButton* button) +{ + connect(button, SIGNAL(clicked()), this, SLOT(moveLayerUp())); +} + +void FreeLayerHelper::addLayer() +{ + _selected = layersAddLayer(_layers, NULL); + emit(layersChanged()); + refreshLayers(); +} + +void FreeLayerHelper::deleteLayer() +{ + if (_selected >= 0) + { + layersDeleteLayer(_layers, _selected); + emit(layersChanged()); + } + refreshLayers(); +} + +void FreeLayerHelper::moveLayerDown() +{ +} + +void FreeLayerHelper::moveLayerUp() +{ +} + +void FreeLayerHelper::tableSelectionChanged(int row, int) +{ + int n = layersCount(_layers); + + if (n == 0 or row >= n) + { + _selected = -1; + } + else + { + _selected = _reverse ? n - 1 - row : row; + } + + emit(selectionChanged(_selected)); +} diff --git a/src/editing/common/freelayerhelper.h b/src/editing/common/freelayerhelper.h new file mode 100644 index 0000000..6ff3615 --- /dev/null +++ b/src/editing/common/freelayerhelper.h @@ -0,0 +1,44 @@ +#ifndef _EDITING_COMMON_FREELAYERHELPER_H_ +#define _EDITING_COMMON_FREELAYERHELPER_H_ + +#include +#include "rendering/layers.h" + +class QTableWidget; +class QPushButton; + +class FreeLayerHelper : public QObject { + Q_OBJECT + +public: + FreeLayerHelper(Layers* layers, bool reverse=false); + ~FreeLayerHelper(); + + void refreshLayers(); + void setLayerTable(QTableWidget* table); + void setAddButton(QPushButton* button); + void setDelButton(QPushButton* button); + void setDownButton(QPushButton* button); + void setUpButton(QPushButton* button); + +signals: + void selectionChanged(int layer); + void layersChanged(); + void tableUpdateNeeded(); + +public slots: + void addLayer(); + void deleteLayer(); + void moveLayerDown(); + void moveLayerUp(); + void tableSelectionChanged(int row, int col); + +private: + QTableWidget* _table; + Layers* _layers; + int _selected; + bool _reverse; +}; + +#endif + diff --git a/src/editing/common/mainwindow.cpp b/src/editing/common/mainwindow.cpp index 21ebe9a..6b9f392 100644 --- a/src/editing/common/mainwindow.cpp +++ b/src/editing/common/mainwindow.cpp @@ -124,9 +124,9 @@ MainWindow::MainWindow() : ui->tabs->setCurrentIndex(0); // TODO Decide this according to platform / screen size - //ui->toolBar->hide(); + ui->toolBar->hide(); ui->tool_panel->hide(); - ui->menuBar->hide(); + //ui->menuBar->hide(); scenerySetCustomDataCallback(MainWindow::guiSaveCallback, MainWindow::guiLoadCallback, this); diff --git a/src/editing/paysages-qt.pro b/src/editing/paysages-qt.pro index 9336ebc..1b69752 100644 --- a/src/editing/paysages-qt.pro +++ b/src/editing/paysages-qt.pro @@ -72,7 +72,8 @@ HEADERS += \ terrain/widgetterrainbasenoisepreview.h \ common/mainwindow.h \ terrain/dialogbaseterrainnoise.h \ - textures/maintexturesform.h + textures/maintexturesform.h \ + common/freelayerhelper.h SOURCES += \ terrain/widgetheightmap.cpp \ @@ -124,7 +125,8 @@ SOURCES += \ terrain/widgetterrainbasenoisepreview.cpp \ common/mainwindow.cpp \ terrain/dialogbaseterrainnoise.cpp \ - textures/maintexturesform.cpp + textures/maintexturesform.cpp \ + common/freelayerhelper.cpp FORMS += \ terrain/dialogterrainpainting.ui \ diff --git a/src/editing/terrain/mainterrainform.ui b/src/editing/terrain/mainterrainform.ui index a1fc947..91b446a 100644 --- a/src/editing/terrain/mainterrainform.ui +++ b/src/editing/terrain/mainterrainform.ui @@ -74,6 +74,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -116,6 +129,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -185,6 +211,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -224,6 +263,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -329,6 +381,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/src/editing/textures/maintexturesform.cpp b/src/editing/textures/maintexturesform.cpp index d9e3f4a..0effdd3 100644 --- a/src/editing/textures/maintexturesform.cpp +++ b/src/editing/textures/maintexturesform.cpp @@ -1,14 +1,106 @@ #include "maintexturesform.h" #include "ui_maintexturesform.h" -MainTexturesForm::MainTexturesForm(QWidget *parent) : - QWidget(parent), - ui(new Ui::MainTexturesForm) +#include "../common/freeformhelper.h" +#include "../common/freelayerhelper.h" +#include "rendering/scenery.h" +#include "previewmaterial.h" + +MainTexturesForm::MainTexturesForm(QWidget *parent) : QWidget(parent), ui(new Ui::MainTexturesForm) { + textures = (TexturesDefinition*) TexturesDefinitionClass.create(); + ui->setupUi(this); + + form_helper = new FreeFormHelper(this); + form_helper->setApplyButton(ui->button_apply); + form_helper->setRevertButton(ui->button_revert); + form_helper->setExploreButton(ui->button_explore); + form_helper->setRenderButton(ui->button_render); + form_helper->startManaging(); + + layer_helper = new FreeLayerHelper(textures->layers, true); + layer_helper->setLayerTable(ui->layersGrid); + layer_helper->setAddButton(ui->layer_add); + layer_helper->setDelButton(ui->layer_del); + layer_helper->setDownButton(ui->layer_down); + layer_helper->setUpButton(ui->layer_up); + connect(layer_helper, SIGNAL(tableUpdateNeeded()), this, SLOT(updateLayers())); + connect(layer_helper, SIGNAL(layersChanged()), form_helper, SLOT(processDataChange())); + connect(layer_helper, SIGNAL(selectionChanged(int)), this, SLOT(selectLayer(int))); } MainTexturesForm::~MainTexturesForm() { delete ui; + delete form_helper; + delete layer_helper; +} + +void MainTexturesForm::updateLayers() +{ + int i, n; + + ui->layersGrid->clearContents(); + + n = layersCount(textures->layers); + ui->layersGrid->setRowCount(n); + + for (i = 0; i < n; i++) + { + QTableWidgetItem* item; + TexturesLayerDefinition* layer = (TexturesLayerDefinition*) layersGetLayer(textures->layers, i); + + item = new QTableWidgetItem(QString("%1").arg(i + 1)); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + ui->layersGrid->setItem(n - 1 - i, 0, item); + + item = new QTableWidgetItem(QString(layersGetName(textures->layers, i))); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + ui->layersGrid->setItem(n - 1 - i, 1, item); + + ui->layersGrid->setCellWidget(n - 1 - i, 2, new SmallMaterialPreview(ui->layersGrid, &layer->material)); + } + + ui->preview_cumul->setEnabled(n > 0); + + ui->layersGrid->resizeColumnsToContents(); +} + +void MainTexturesForm::selectLayer(int layer) +{ + if (layer < 0) + { + ui->preview_coverage->setEnabled(false); + ui->preview_texture->setEnabled(false); + } + else + { + ui->preview_coverage->setEnabled(true); + ui->preview_texture->setEnabled(true); + } +} + +void MainTexturesForm::updateLocalDataFromScenery() +{ + sceneryGetTextures(textures); +} + +void MainTexturesForm::commitLocalDataToScenery() +{ + scenerySetTextures(textures); +} + +void MainTexturesForm::refreshFromLocalData() +{ + layer_helper->refreshLayers(); +} + +void MainTexturesForm::refreshFromFellowData() +{ +} + +void MainTexturesForm::alterRenderer(Renderer* renderer) +{ + TexturesRendererClass.bind(renderer, textures); } diff --git a/src/editing/textures/maintexturesform.h b/src/editing/textures/maintexturesform.h index ec63a62..49ef3f8 100644 --- a/src/editing/textures/maintexturesform.h +++ b/src/editing/textures/maintexturesform.h @@ -2,21 +2,38 @@ #define MAINTEXTURESFORM_H #include +#include "rendering/textures/public.h" namespace Ui { class MainTexturesForm; } +class FreeFormHelper; +class FreeLayerHelper; + class MainTexturesForm : public QWidget { Q_OBJECT - + public: explicit MainTexturesForm(QWidget *parent = 0); ~MainTexturesForm(); - + +public slots: + void updateLocalDataFromScenery(); + void commitLocalDataToScenery(); + void refreshFromLocalData(); + void refreshFromFellowData(); + void alterRenderer(Renderer* renderer); + + void updateLayers(); + void selectLayer(int layer); + private: Ui::MainTexturesForm *ui; + TexturesDefinition* textures; + FreeFormHelper* form_helper; + FreeLayerHelper* layer_helper; }; #endif // MAINTEXTURESFORM_H diff --git a/src/editing/textures/maintexturesform.ui b/src/editing/textures/maintexturesform.ui index d4fbf17..79b545b 100644 --- a/src/editing/textures/maintexturesform.ui +++ b/src/editing/textures/maintexturesform.ui @@ -6,8 +6,8 @@ 0 0 - 1008 - 664 + 997 + 742 @@ -46,7 +46,43 @@ - + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + false + + + + Level + + + + + Name + + + + + Material + + + + + Modify terrain + + + @@ -64,7 +100,7 @@ - + Add layer @@ -72,10 +108,19 @@ :/buttons/logo/images/layer_add.png:/buttons/logo/images/layer_add.png + + + 32 + 32 + + + + false + - + Remove layer @@ -83,6 +128,12 @@ :/buttons/logo/images/layer_del.png:/buttons/logo/images/layer_del.png + + + 32 + 32 + + @@ -90,6 +141,9 @@ Qt::Vertical + + QSizePolicy::MinimumExpanding + 20 @@ -99,14 +153,20 @@ - + - Rename layer + Edit layer :/buttons/logo/images/layer_rename.png:/buttons/logo/images/layer_rename.png + + + 32 + 32 + + @@ -114,6 +174,9 @@ Qt::Vertical + + QSizePolicy::MinimumExpanding + 20 @@ -123,7 +186,7 @@ - + Move layer down @@ -131,10 +194,16 @@ :/buttons/logo/images/layer_down.png:/buttons/logo/images/layer_down.png + + + 32 + 32 + + - + Move layer up @@ -142,6 +211,12 @@ :/buttons/logo/images/layer_up.png:/buttons/logo/images/layer_up.png + + + 32 + 32 + + @@ -171,7 +246,7 @@ - + 0 @@ -203,7 +278,7 @@ - + 0 @@ -258,7 +333,7 @@ - + 0