forked from mirror/openmw-tes3mp
Remove texture filtering, better ltex importing, reindexing duplicates
This commit is contained in:
parent
8ae46519cf
commit
825c331764
4 changed files with 48 additions and 9 deletions
|
@ -11,11 +11,6 @@ namespace CSMWorld
|
||||||
|
|
||||||
bool LandTextureTableProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex& sourceParent) const
|
bool LandTextureTableProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex& sourceParent) const
|
||||||
{
|
{
|
||||||
int columnIndex = mSourceModel->findColumnIndex(Columns::ColumnId_Modification);
|
|
||||||
QModelIndex index = mSourceModel->index(sourceRow, columnIndex);
|
|
||||||
if (mSourceModel->data(index).toInt() != RecordBase::State_ModifiedOnly)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return IdTableProxyModel::filterAcceptsRow(sourceRow, sourceParent);
|
return IdTableProxyModel::filterAcceptsRow(sourceRow, sourceParent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ void CSVRender::TerrainTextureMode::activate(CSVWidget::SceneToolbar* toolbar)
|
||||||
connect(mTextureBrushScenetool->mTextureBrushWindow, SIGNAL(passBrushShape(int)), this, SLOT(setBrushShape(int)));
|
connect(mTextureBrushScenetool->mTextureBrushWindow, SIGNAL(passBrushShape(int)), this, SLOT(setBrushShape(int)));
|
||||||
connect(mTextureBrushScenetool->mTextureBrushWindow->mSizeSliders->mBrushSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(setBrushSize(int)));
|
connect(mTextureBrushScenetool->mTextureBrushWindow->mSizeSliders->mBrushSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(setBrushSize(int)));
|
||||||
connect(mTextureBrushScenetool, SIGNAL(passTextureId(std::string)), this, SLOT(setBrushTexture(std::string)));
|
connect(mTextureBrushScenetool, SIGNAL(passTextureId(std::string)), this, SLOT(setBrushTexture(std::string)));
|
||||||
|
connect(mTextureBrushScenetool->mTextureBrushWindow, SIGNAL(passTextureId(std::string)), this, SLOT(setBrushTexture(std::string)));
|
||||||
|
|
||||||
connect(mTextureBrushScenetool, SIGNAL(passEvent(QDropEvent*)), this, SLOT(handleDropEvent(QDropEvent*)));
|
connect(mTextureBrushScenetool, SIGNAL(passEvent(QDropEvent*)), this, SLOT(handleDropEvent(QDropEvent*)));
|
||||||
connect(this, SIGNAL(passBrushTexture(std::string)), mTextureBrushScenetool->mTextureBrushWindow, SLOT(setBrushTexture(std::string)));
|
connect(this, SIGNAL(passBrushTexture(std::string)), mTextureBrushScenetool->mTextureBrushWindow, SLOT(setBrushTexture(std::string)));
|
||||||
|
@ -391,12 +392,16 @@ void CSVRender::TerrainTextureMode::editTerrainTextureGrid(const WorldspaceHitRe
|
||||||
void CSVRender::TerrainTextureMode::pushEditToCommand(CSMWorld::LandTexturesColumn::DataType& newLandGrid, CSMDoc::Document& document,
|
void CSVRender::TerrainTextureMode::pushEditToCommand(CSMWorld::LandTexturesColumn::DataType& newLandGrid, CSMDoc::Document& document,
|
||||||
CSMWorld::IdTable& landTable, std::string cellId)
|
CSMWorld::IdTable& landTable, std::string cellId)
|
||||||
{
|
{
|
||||||
|
CSMWorld::IdTable& ltexTable = dynamic_cast<CSMWorld::IdTable&> (
|
||||||
|
*document.getData().getTableModel (CSMWorld::UniversalId::Type_LandTextures));
|
||||||
|
|
||||||
QVariant changedLand;
|
QVariant changedLand;
|
||||||
changedLand.setValue(newLandGrid);
|
changedLand.setValue(newLandGrid);
|
||||||
|
|
||||||
QModelIndex index(landTable.getModelIndex (cellId, landTable.findColumnIndex (CSMWorld::Columns::ColumnId_LandTexturesIndex)));
|
QModelIndex index(landTable.getModelIndex (cellId, landTable.findColumnIndex (CSMWorld::Columns::ColumnId_LandTexturesIndex)));
|
||||||
|
|
||||||
QUndoStack& undoStack = document.getUndoStack();
|
QUndoStack& undoStack = document.getUndoStack();
|
||||||
|
undoStack.push (new CSMWorld::TouchLandCommand(landTable, ltexTable, cellId));
|
||||||
undoStack.push (new CSMWorld::ModifyCommand(landTable, index, changedLand));
|
undoStack.push (new CSMWorld::ModifyCommand(landTable, index, changedLand));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include "../../model/doc/document.hpp"
|
#include "../../model/doc/document.hpp"
|
||||||
#include "../../model/prefs/state.hpp"
|
#include "../../model/prefs/state.hpp"
|
||||||
|
#include "../../model/world/commands.hpp"
|
||||||
#include "../../model/world/data.hpp"
|
#include "../../model/world/data.hpp"
|
||||||
#include "../../model/world/idcollection.hpp"
|
#include "../../model/world/idcollection.hpp"
|
||||||
#include "../../model/world/idtable.hpp"
|
#include "../../model/world/idtable.hpp"
|
||||||
|
@ -134,19 +135,57 @@ void CSVWidget::TextureBrushWindow::configureButtonInitialSettings(QPushButton *
|
||||||
|
|
||||||
void CSVWidget::TextureBrushWindow::setBrushTexture(std::string brushTexture)
|
void CSVWidget::TextureBrushWindow::setBrushTexture(std::string brushTexture)
|
||||||
{
|
{
|
||||||
|
mBrushTexture = brushTexture;
|
||||||
|
|
||||||
CSMWorld::IdCollection<CSMWorld::LandTexture>& landtexturesCollection = mDocument.getData().getLandTextures();
|
CSMWorld::IdCollection<CSMWorld::LandTexture>& landtexturesCollection = mDocument.getData().getLandTextures();
|
||||||
|
|
||||||
int landTextureFilename = landtexturesCollection.findColumnIndex(CSMWorld::Columns::ColumnId_Texture);
|
int landTextureFilename = landtexturesCollection.findColumnIndex(CSMWorld::Columns::ColumnId_Texture);
|
||||||
|
int columnModification = landtexturesCollection.findColumnIndex(CSMWorld::Columns::ColumnId_Modification);
|
||||||
int index = landtexturesCollection.searchId(mBrushTexture);
|
int index = landtexturesCollection.searchId(mBrushTexture);
|
||||||
mBrushTexture = brushTexture;
|
|
||||||
|
// Check if texture exists in current plugin
|
||||||
|
if(landtexturesCollection.getData(index, columnModification).value<int>() == 0)
|
||||||
|
{
|
||||||
|
CSMWorld::IdTable& ltexTable = dynamic_cast<CSMWorld::IdTable&> (
|
||||||
|
*mDocument.getData().getTableModel (CSMWorld::UniversalId::Type_LandTextures));
|
||||||
|
|
||||||
|
QUndoStack& undoStack = mDocument.getUndoStack();
|
||||||
|
|
||||||
|
QVariant textureFileNameVariant;
|
||||||
|
textureFileNameVariant.setValue(landtexturesCollection.getData(index, landTextureFilename).value<QString>());
|
||||||
|
|
||||||
|
std::size_t hashlocation = mBrushTexture.find("#");
|
||||||
|
std::string mBrushTexturePlugin = "L0#" + mBrushTexture.substr (hashlocation+1);
|
||||||
|
int indexPlugin = landtexturesCollection.searchId(mBrushTexturePlugin);
|
||||||
|
|
||||||
|
// Reindex texture if needed
|
||||||
|
if (indexPlugin != -1 && !landtexturesCollection.getRecord(indexPlugin).isDeleted())
|
||||||
|
{
|
||||||
|
int counter=0;
|
||||||
|
bool freeIndexFound = false;
|
||||||
|
do {
|
||||||
|
const size_t maxCounter = std::numeric_limits<uint16_t>::max() - 1;
|
||||||
|
mBrushTexturePlugin = CSMWorld::LandTexture::createUniqueRecordId(0, counter);
|
||||||
|
if (landtexturesCollection.searchId(mBrushTexturePlugin) != -1 && landtexturesCollection.getRecord(mBrushTexturePlugin).isDeleted() == 0) counter = (counter + 1) % maxCounter;
|
||||||
|
else freeIndexFound = true;
|
||||||
|
} while (freeIndexFound == false);
|
||||||
|
}
|
||||||
|
|
||||||
|
undoStack.beginMacro ("Add land texture record");
|
||||||
|
undoStack.push (new CSMWorld::CloneCommand (ltexTable, mBrushTexture, mBrushTexturePlugin, CSMWorld::UniversalId::Type_LandTexture));
|
||||||
|
undoStack.endMacro();
|
||||||
|
mBrushTexture = mBrushTexturePlugin;
|
||||||
|
emit passTextureId(mBrushTexture);
|
||||||
|
}
|
||||||
|
|
||||||
if (index != -1 && !landtexturesCollection.getRecord(index).isDeleted())
|
if (index != -1 && !landtexturesCollection.getRecord(index).isDeleted())
|
||||||
{
|
{
|
||||||
mSelectedBrush = new QLabel(QString::fromStdString(mBrushTextureLabel) + landtexturesCollection.getData(index, landTextureFilename).value<QString>());
|
mBrushTextureLabel = "Selected texture: " + mBrushTexture + " ";
|
||||||
|
mSelectedBrush->setText(QString::fromStdString(mBrushTextureLabel) + landtexturesCollection.getData(index, landTextureFilename).value<QString>());
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
mBrushTextureLabel = "No selected texture or invalid texture";
|
mBrushTextureLabel = "No selected texture or invalid texture";
|
||||||
mSelectedBrush = new QLabel(QString::fromStdString(mBrushTextureLabel));
|
mSelectedBrush->setText(QString::fromStdString(mBrushTextureLabel));
|
||||||
}
|
}
|
||||||
|
|
||||||
emit passBrushShape(mBrushShape); // update icon
|
emit passBrushShape(mBrushShape); // update icon
|
||||||
|
@ -242,7 +281,6 @@ void CSVWidget::SceneToolTextureBrush::setButtonIcon (int brushShape)
|
||||||
|
|
||||||
if (index != -1 && !landtexturesCollection.getRecord(index).isDeleted())
|
if (index != -1 && !landtexturesCollection.getRecord(index).isDeleted())
|
||||||
{
|
{
|
||||||
//QModelIndex qIndex = landtexturesCollection.getModelIndex (mBrushTexture, landTextureFilename);
|
|
||||||
tooltip += "<p>Selected texture: " + QString::fromStdString(mTextureBrushWindow->mBrushTexture) + " ";
|
tooltip += "<p>Selected texture: " + QString::fromStdString(mTextureBrushWindow->mBrushTexture) + " ";
|
||||||
|
|
||||||
tooltip += landtexturesCollection.getData(index, landTextureFilename).value<QString>();
|
tooltip += landtexturesCollection.getData(index, landTextureFilename).value<QString>();
|
||||||
|
|
|
@ -72,6 +72,7 @@ namespace CSVWidget
|
||||||
signals:
|
signals:
|
||||||
void passBrushSize (int brushSize);
|
void passBrushSize (int brushSize);
|
||||||
void passBrushShape(int brushShape);
|
void passBrushShape(int brushShape);
|
||||||
|
void passTextureId(std::string brushTexture);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SceneToolTextureBrush : public SceneTool
|
class SceneToolTextureBrush : public SceneTool
|
||||||
|
|
Loading…
Reference in a new issue