r24810 by craig - #16716: Add undo/redo for table row/column resizing
scribus-commit
scribus-commit at lists.scribus.net
Wed Jan 19 16:18:08 UTC 2022
Author: craig
Date: Wed Jan 19 16:18:08 2022
New Revision: 24810
URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=24810
Log:
#16716: Add undo/redo for table row/column resizing
Modified:
trunk/Scribus/scribus/canvasgesture_columnresize.cpp
trunk/Scribus/scribus/canvasgesture_rowresize.cpp
trunk/Scribus/scribus/pageitem_table.cpp
trunk/Scribus/scribus/pageitem_table.h
trunk/Scribus/scribus/scribusdoc.cpp
Modified: trunk/Scribus/scribus/canvasgesture_columnresize.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24810&path=/trunk/Scribus/scribus/canvasgesture_columnresize.cpp
==============================================================================
--- trunk/Scribus/scribus/canvasgesture_columnresize.cpp (original)
+++ trunk/Scribus/scribus/canvasgesture_columnresize.cpp Wed Jan 19 16:18:08 2022
@@ -18,6 +18,7 @@
#include "pageitem_table.h"
#include "scribusdoc.h"
#include "scribusview.h"
+#include "undomanager.h"
#include "canvasgesture_columnresize.h"
@@ -60,6 +61,10 @@
else
strategy = PageItem_Table::ResizeFollowing;
+ UndoTransaction activeTransaction;
+ if (UndoManager::undoEnabled())
+ activeTransaction = UndoManager::instance()->beginTransaction(table()->getUName(), table()->getUPixmap(), Um::TableColumnWidth, QString(), Um::ITable);
+
table()->doc()->dontResize = true;
table()->resizeColumn(m_column, gridPoint.x() - table()->columnPosition(m_column), strategy);
if (strategy == PageItem_Table::MoveFollowing)
@@ -71,6 +76,9 @@
table()->adjustFrameToTable();
table()->doc()->setRedrawBounding(table());
table()->update();
+
+ if (activeTransaction)
+ activeTransaction.commit();
m_view->stopGesture();
}
Modified: trunk/Scribus/scribus/canvasgesture_rowresize.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24810&path=/trunk/Scribus/scribus/canvasgesture_rowresize.cpp
==============================================================================
--- trunk/Scribus/scribus/canvasgesture_rowresize.cpp (original)
+++ trunk/Scribus/scribus/canvasgesture_rowresize.cpp Wed Jan 19 16:18:08 2022
@@ -18,6 +18,7 @@
#include "pageitem_table.h"
#include "scribusdoc.h"
#include "scribusview.h"
+#include "undomanager.h"
#include "canvasgesture_rowresize.h"
@@ -60,6 +61,10 @@
else
strategy = PageItem_Table::ResizeFollowing;
+ UndoTransaction activeTransaction;
+ if (UndoManager::undoEnabled())
+ activeTransaction = UndoManager::instance()->beginTransaction(table()->getUName(), table()->getUPixmap(), Um::TableRowHeight, QString(), Um::ITable);
+
table()->doc()->dontResize = true;
table()->resizeRow(m_row, gridPoint.y() - table()->rowPosition(m_row), strategy);
if (strategy == PageItem_Table::MoveFollowing)
@@ -71,6 +76,9 @@
table()->adjustFrameToTable();
table()->doc()->setRedrawBounding(table());
table()->update();
+
+ if (activeTransaction)
+ activeTransaction.commit();
m_view->stopGesture();
}
Modified: trunk/Scribus/scribus/pageitem_table.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24810&path=/trunk/Scribus/scribus/pageitem_table.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitem_table.cpp (original)
+++ trunk/Scribus/scribus/pageitem_table.cpp Wed Jan 19 16:18:08 2022
@@ -758,7 +758,16 @@
if (!validRow(row))
return;
-
+ if (UndoManager::undoEnabled())
+ {
+ SimpleState *ss = new SimpleState(Um::TableRowHeight, QString(), Um::IResize);
+ ss->set("TABLE_ROW_HEIGHT");
+ ss->set("ROW", row);
+ ss->set("OLD_ROW_HEIGHT", rowHeight(row));
+ ss->set("NEW_ROW_HEIGHT", height);
+ ss->set("ROW_RESIZE_STRATEGY", strategy == MoveFollowing ? 0 : 1);
+ undoManager->action(this, ss);
+ }
if (strategy == MoveFollowing)
resizeRowMoveFollowing(row, height);
else if (strategy == ResizeFollowing)
@@ -820,7 +829,16 @@
if (!validColumn(column))
return;
-
+ if (UndoManager::undoEnabled())
+ {
+ SimpleState *ss = new SimpleState(Um::TableColumnWidth, QString(), Um::IResize);
+ ss->set("TABLE_COLUMN_WIDTH");
+ ss->set("COLUMN", column);
+ ss->set("OLD_COLUMN_WIDTH", columnWidth(column));
+ ss->set("NEW_COLUMN_WIDTH", width);
+ ss->set("COLUMN_RESIZE_STRATEGY", strategy == MoveFollowing ? 0 : 1);
+ undoManager->action(this, ss);
+ }
if (strategy == MoveFollowing)
resizeColumnMoveFollowing(column, width);
else if (strategy == ResizeFollowing)
@@ -2181,6 +2199,16 @@
restoreTableStyleReset(simpleState, isUndo);
doUpdate = true;
}
+ else if (simpleState->contains("TABLE_ROW_HEIGHT"))
+ {
+ restoreTableRowHeight(simpleState, isUndo);
+ doUpdate = true;
+ }
+ else if (simpleState->contains("TABLE_COLUMN_WIDTH"))
+ {
+ restoreTableColumnWidth(simpleState, isUndo);
+ doUpdate = true;
+ }
else
{
PageItem::restore(state, isUndo);
@@ -2490,4 +2518,36 @@
{
QString restoredStyle = state->get(isUndo ? "OLD_STYLE" : "NEW_STYLE");
setStyle(restoredStyle);
-}
+}
+
+void PageItem_Table::restoreTableRowHeight(SimpleState *state, bool isUndo)
+{
+ int row = state->getInt("ROW");
+ ResizeStrategy strategy = state->getInt("ROW_RESIZE_STRATEGY") == 0 ? MoveFollowing : ResizeFollowing;
+ if (isUndo)
+ {
+ double oldHeight = state->getDouble("OLD_ROW_HEIGHT");
+ resizeRow(row, oldHeight, strategy);
+ }
+ else
+ {
+ double newHeight = state->getDouble("NEW_ROW_HEIGHT");
+ resizeRow(row, newHeight, strategy);
+ }
+}
+
+void PageItem_Table::restoreTableColumnWidth(SimpleState *state, bool isUndo)
+{
+ int column = state->getInt("COLUMN");
+ ResizeStrategy strategy = state->getInt("COLUMN_RESIZE_STRATEGY") == 0 ? MoveFollowing : ResizeFollowing;
+ if (isUndo)
+ {
+ double oldWidth = state->getDouble("OLD_COLUMN_WIDTH");
+ resizeColumn(column, oldWidth, strategy);
+ }
+ else
+ {
+ double newWidth = state->getDouble("NEW_COLUMN_WIDTH");
+ resizeColumn(column, newWidth, strategy);
+ }
+}
Modified: trunk/Scribus/scribus/pageitem_table.h
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24810&path=/trunk/Scribus/scribus/pageitem_table.h
==============================================================================
--- trunk/Scribus/scribus/pageitem_table.h (original)
+++ trunk/Scribus/scribus/pageitem_table.h Wed Jan 19 16:18:08 2022
@@ -699,6 +699,12 @@
// Undo/redo unsetStyle action
void restoreTableStyleReset(SimpleState *state, bool isUndo);
+ // Undo/redo row height action
+ void restoreTableRowHeight(SimpleState *state, bool isUndo);
+
+ // Undo/redo column widht action
+ void restoreTableColumnWidth(SimpleState *state, bool isUndo);
+
private:
//<<Data we need to save
/// List of rows of cells in the table.
Modified: trunk/Scribus/scribus/scribusdoc.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24810&path=/trunk/Scribus/scribus/scribusdoc.cpp
==============================================================================
--- trunk/Scribus/scribus/scribusdoc.cpp (original)
+++ trunk/Scribus/scribus/scribusdoc.cpp Wed Jan 19 16:18:08 2022
@@ -8687,6 +8687,10 @@
const qreal rowHeight = dialog->rowHeight();
QScopedValueRollback<bool> dontResizeRb(dontResize, true);
+ UndoTransaction activeTransaction;
+ m_updateManager.setUpdatesDisabled();
+ if (UndoManager::undoEnabled())
+ activeTransaction = m_undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::TableRowHeight, item->itemName(), Um::ITable);
if (appMode == modeEditTable)
{
if (table->selectedCells().isEmpty())
@@ -8711,12 +8715,12 @@
for (int row = 0; row < table->rows(); ++row)
table->resizeRow(row, rowHeight / unitRatio());
}
-
delete dialog;
-
table->adjustTable();
table->update();
-
+ if (activeTransaction)
+ activeTransaction.commit();
+ m_updateManager.setUpdatesEnabled();
changed();
}
@@ -8736,6 +8740,11 @@
const qreal columnWidth = dialog->columnWidth();
QScopedValueRollback<bool> dontResizeRb(dontResize, true);
+
+ UndoTransaction activeTransaction;
+ m_updateManager.setUpdatesDisabled();
+ if (UndoManager::undoEnabled())
+ activeTransaction = m_undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::TableColumnWidth, item->itemName(), Um::ITable);
if (appMode == modeEditTable)
{
@@ -8766,6 +8775,9 @@
table->adjustTable();
table->update();
+ if (activeTransaction)
+ activeTransaction.commit();
+ m_updateManager.setUpdatesEnabled();
changed();
}
More information about the scribus-commit
mailing list