From 1cf798a57b95f20bf2a23daab7a79d640cf75fb3 Mon Sep 17 00:00:00 2001 From: Jeremy Bullock <jcbullock@gmail.com> Date: Dec 17 2018 08:53:42 +0000 Subject: Allow Increase Step and Decrease Step to work even in selection is lost. (#2343) --- diff --git a/toonz/sources/toonz/cellselectioncommand.cpp b/toonz/sources/toonz/cellselectioncommand.cpp index f971c7d..cc78814 100644 --- a/toonz/sources/toonz/cellselectioncommand.cpp +++ b/toonz/sources/toonz/cellselectioncommand.cpp @@ -28,6 +28,8 @@ #include "toonz/hook.h" #include "toonz/levelproperties.h" #include "toonz/childstack.h" +#include "toonz/tframehandle.h" +#include "toonz/tcolumnhandle.h" // TnzCore includes #include "tsystem.h" @@ -976,7 +978,19 @@ void IncreaseStepUndo::undo() const { //============================================================================= void TCellSelection::increaseStepCells() { - if (isEmpty() || areAllColSelectedLocked()) return; + if (isEmpty()) { + int row = TTool::getApplication()->getCurrentFrame()->getFrame(); + int col = TTool::getApplication()->getCurrentColumn()->getColumnIndex(); + TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet(); + m_range.m_r0 = row; + m_range.m_r1 = row; + m_range.m_c0 = col; + m_range.m_c1 = col; + TXshCell cell; + cell = xsh->getCell(row, col); + if (cell.isEmpty()) return; + } + if (areAllColSelectedLocked()) return; IncreaseStepUndo *undo = new IncreaseStepUndo(m_range.m_r0, m_range.m_c0, m_range.m_r1, m_range.m_c1); @@ -1089,6 +1103,31 @@ void DecreaseStepUndo::undo() const { //============================================================================= void TCellSelection::decreaseStepCells() { + if (isEmpty()) { + int row = TTool::getApplication()->getCurrentFrame()->getFrame(); + int col = TTool::getApplication()->getCurrentColumn()->getColumnIndex(); + int r1 = row; + TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet(); + TXshCell cell; + TXshCell nextCell; + bool sameCells = true; + cell = xsh->getCell(row, col); + if (cell.isEmpty()) return; + + for (int i = 1; sameCells; i++) { + nextCell = xsh->getCell(row + i, col); + if (nextCell.m_frameId == cell.m_frameId && + nextCell.m_level == cell.m_level) { + r1 = row + i; + } else + sameCells = false; + } + m_range.m_r0 = row; + m_range.m_r1 = r1; + m_range.m_c0 = col; + m_range.m_c1 = col; + TApp::instance()->getCurrentSelection()->notifySelectionChanged(); + } DecreaseStepUndo *undo = new DecreaseStepUndo(m_range.m_r0, m_range.m_c0, m_range.m_r1, m_range.m_c1); TUndoManager::manager()->add(undo);