forked from teamnwah/openmw-tes3coop
Command macro for complete drag-editing operations.
This commit is contained in:
parent
9f742d5b1f
commit
cf7a0f715e
3 changed files with 34 additions and 12 deletions
|
@ -196,8 +196,21 @@ void CSVRender::TerrainTextureMode::secondarySelectPressed(const WorldspaceHitRe
|
||||||
bool CSVRender::TerrainTextureMode::primaryEditStartDrag (const QPoint& pos)
|
bool CSVRender::TerrainTextureMode::primaryEditStartDrag (const QPoint& pos)
|
||||||
{
|
{
|
||||||
WorldspaceHitResult hit = getWorldspaceWidget().mousePick (pos, getWorldspaceWidget().getInteractionMask());
|
WorldspaceHitResult hit = getWorldspaceWidget().mousePick (pos, getWorldspaceWidget().getInteractionMask());
|
||||||
|
|
||||||
|
CSMDoc::Document& document = getWorldspaceWidget().getDocument();
|
||||||
|
CSMWorld::IdTable& landTable = dynamic_cast<CSMWorld::IdTable&> (
|
||||||
|
*document.getData().getTableModel (CSMWorld::UniversalId::Type_Land));
|
||||||
|
CSMWorld::IdTable& ltexTable = dynamic_cast<CSMWorld::IdTable&> (
|
||||||
|
*document.getData().getTableModel (CSMWorld::UniversalId::Type_LandTextures));
|
||||||
|
|
||||||
|
mCellId = getWorldspaceWidget().getCellId (hit.worldPos);
|
||||||
|
|
||||||
|
QUndoStack& undoStack = document.getUndoStack();
|
||||||
|
undoStack.beginMacro ("Edit texture records");
|
||||||
|
undoStack.push (new CSMWorld::TouchLandCommand(landTable, ltexTable, mCellId));
|
||||||
editTerrainTextureGrid(hit);
|
editTerrainTextureGrid(hit);
|
||||||
return false;
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CSVRender::TerrainTextureMode::secondaryEditStartDrag (const QPoint& pos)
|
bool CSVRender::TerrainTextureMode::secondaryEditStartDrag (const QPoint& pos)
|
||||||
|
@ -215,10 +228,16 @@ bool CSVRender::TerrainTextureMode::secondarySelectStartDrag (const QPoint& pos)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVRender::TerrainTextureMode::drag (const QPoint& pos, int diffX, int diffY, double speedFactor) {
|
void CSVRender::TerrainTextureMode::drag (const QPoint& pos, int diffX, int diffY, double speedFactor)
|
||||||
|
{
|
||||||
|
WorldspaceHitResult hit = getWorldspaceWidget().mousePick (pos, getWorldspaceWidget().getInteractionMask());
|
||||||
|
editTerrainTextureGrid(hit);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVRender::TerrainTextureMode::dragCompleted(const QPoint& pos) {
|
void CSVRender::TerrainTextureMode::dragCompleted(const QPoint& pos) {
|
||||||
|
CSMDoc::Document& document = getWorldspaceWidget().getDocument();
|
||||||
|
QUndoStack& undoStack = document.getUndoStack();
|
||||||
|
undoStack.endMacro();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVRender::TerrainTextureMode::dragAborted() {
|
void CSVRender::TerrainTextureMode::dragAborted() {
|
||||||
|
@ -266,8 +285,6 @@ void CSVRender::TerrainTextureMode::editTerrainTextureGrid(const WorldspaceHitRe
|
||||||
CSMDoc::Document& document = getWorldspaceWidget().getDocument();
|
CSMDoc::Document& document = getWorldspaceWidget().getDocument();
|
||||||
CSMWorld::IdTable& landTable = dynamic_cast<CSMWorld::IdTable&> (
|
CSMWorld::IdTable& landTable = dynamic_cast<CSMWorld::IdTable&> (
|
||||||
*document.getData().getTableModel (CSMWorld::UniversalId::Type_Land));
|
*document.getData().getTableModel (CSMWorld::UniversalId::Type_Land));
|
||||||
CSMWorld::IdTable& ltexTable = dynamic_cast<CSMWorld::IdTable&> (
|
|
||||||
*document.getData().getTableModel (CSMWorld::UniversalId::Type_LandTextures));
|
|
||||||
|
|
||||||
int textureColumn = landTable.findColumnIndex(CSMWorld::Columns::ColumnId_LandTexturesIndex);
|
int textureColumn = landTable.findColumnIndex(CSMWorld::Columns::ColumnId_LandTexturesIndex);
|
||||||
|
|
||||||
|
@ -284,7 +301,7 @@ void CSVRender::TerrainTextureMode::editTerrainTextureGrid(const WorldspaceHitRe
|
||||||
CSMWorld::LandTexturesColumn::DataType mPointer = landTable.data(landTable.getModelIndex(mCellId, textureColumn)).value<CSMWorld::LandTexturesColumn::DataType>();
|
CSMWorld::LandTexturesColumn::DataType mPointer = landTable.data(landTable.getModelIndex(mCellId, textureColumn)).value<CSMWorld::LandTexturesColumn::DataType>();
|
||||||
CSMWorld::LandTexturesColumn::DataType mNew(mPointer);
|
CSMWorld::LandTexturesColumn::DataType mNew(mPointer);
|
||||||
mNew[yHitInCell*landTextureSize+xHitInCell] = brushInt;
|
mNew[yHitInCell*landTextureSize+xHitInCell] = brushInt;
|
||||||
pushEditToCommand(mNew, document, landTable, ltexTable, mCellId);
|
pushEditToCommand(mNew, document, landTable, mCellId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mBrushShape == 1)
|
if (mBrushShape == 1)
|
||||||
|
@ -329,7 +346,7 @@ void CSVRender::TerrainTextureMode::editTerrainTextureGrid(const WorldspaceHitRe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pushEditToCommand(mNew, document, landTable, ltexTable, iteratedCellId);
|
pushEditToCommand(mNew, document, landTable, iteratedCellId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -386,7 +403,7 @@ void CSVRender::TerrainTextureMode::editTerrainTextureGrid(const WorldspaceHitRe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pushEditToCommand(mNew, document, landTable, ltexTable, iteratedCellId);
|
pushEditToCommand(mNew, document, landTable, iteratedCellId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -398,16 +415,15 @@ 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, CSMWorld::IdTable& ltexTable, std::string cellId)
|
CSMWorld::IdTable& landTable, std::string cellId)
|
||||||
{
|
{
|
||||||
QVariant changedLand;
|
QVariant changedLand;
|
||||||
changedLand.setValue(newLandGrid);
|
changedLand.setValue(newLandGrid);
|
||||||
|
|
||||||
CSMWorld::CommandMacro macro (document.getUndoStack(), "Edit texture records");
|
|
||||||
QModelIndex index(landTable.getModelIndex (cellId, landTable.findColumnIndex (CSMWorld::Columns::ColumnId_LandTexturesIndex)));
|
QModelIndex index(landTable.getModelIndex (cellId, landTable.findColumnIndex (CSMWorld::Columns::ColumnId_LandTexturesIndex)));
|
||||||
|
|
||||||
macro.push (new CSMWorld::TouchLandCommand(landTable, ltexTable, cellId));
|
QUndoStack& undoStack = document.getUndoStack();
|
||||||
macro.push (new CSMWorld::ModifyCommand(landTable, index, changedLand));
|
undoStack.push (new CSMWorld::ModifyCommand(landTable, index, changedLand));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVRender::TerrainTextureMode::dragMoveEvent (QDragMoveEvent *event) {
|
void CSVRender::TerrainTextureMode::dragMoveEvent (QDragMoveEvent *event) {
|
||||||
|
|
|
@ -113,7 +113,7 @@ namespace CSVRender
|
||||||
|
|
||||||
void editTerrainTextureGrid (const WorldspaceHitResult& hit);
|
void editTerrainTextureGrid (const WorldspaceHitResult& hit);
|
||||||
void pushEditToCommand (CSMWorld::LandTexturesColumn::DataType& newLandGrid, CSMDoc::Document& document,
|
void pushEditToCommand (CSMWorld::LandTexturesColumn::DataType& newLandGrid, CSMDoc::Document& document,
|
||||||
CSMWorld::IdTable& landTable, CSMWorld::IdTable& ltexTable, std::string cellId);
|
CSMWorld::IdTable& landTable, std::string cellId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TextureBrushWindow *textureBrushWindow;
|
TextureBrushWindow *textureBrushWindow;
|
||||||
|
|
|
@ -651,6 +651,12 @@ void CSVRender::WorldspaceWidget::mouseMoveEvent (QMouseEvent *event)
|
||||||
mDragX = event->posF().x();
|
mDragX = event->posF().x();
|
||||||
mDragY = height() - event->posF().y();
|
mDragY = height() - event->posF().y();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (mDragMode == InteractionType_PrimaryEdit)
|
||||||
|
{
|
||||||
|
EditMode& editMode = dynamic_cast<CSVRender::EditMode&> (*mEditMode->getCurrent());
|
||||||
|
editMode.drag (event->pos(), mDragX, mDragY, mDragFactor); // note: terraintexturemode only uses pos
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue