diff --git a/toonz/sources/toonz/matchlinecommand.cpp b/toonz/sources/toonz/matchlinecommand.cpp index f77ded0..d1156b3 100644 --- a/toonz/sources/toonz/matchlinecommand.cpp +++ b/toonz/sources/toonz/matchlinecommand.cpp @@ -106,24 +106,11 @@ bool isVectorColumn(const std::set &columns) { std::set::const_iterator column = columns.begin(); int start, end; xsh->getCellRange(*column, start, end); - - if (start > end) return false; - - std::vector cell(end - start + 1); - xsh->getCells(start, *column, cell.size(), &(cell[0])); - - TXshSimpleLevel *level = 0; - for (int i = 0; i < (int)cell.size(); i++) { - if (cell[i].isEmpty()) continue; - - level = cell[i].getSimpleLevel(); - if (level->getType() == PLI_XSHLEVEL) { - return true; - } else { - return false; - } - } + if (start > end) return false; + // a cell at "start" must be occupied + TXshCell cell = xsh->getCell(start, *column); + return cell.m_level->getType() == PLI_XSHLEVEL; } class MergeColumnsCommand final : public MenuItemHandler { @@ -150,16 +137,19 @@ public: "only one columns is selected.")); return; } - + bool groupLevels = true; if (isVectorColumn(indices)) { - int opt = DVGui::MsgBox("Group strokes by vector levels?", QObject::tr("Yes"), QObject::tr("No"), QObject::tr("Cancel")); - if (opt == 3) return; + int opt = DVGui::MsgBox(QObject::tr("Group strokes by vector levels?"), + QObject::tr("Yes"), QObject::tr("No"), + QObject::tr("Cancel")); + if (opt == 0 || opt == 3) + return; else { groupLevels = (opt == 1); }; } - + mergeColumns(indices, groupLevels); TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); } @@ -345,10 +335,10 @@ void doCloneLevelNoSave(const TCellSelection::Range &range, fid = cell.getFrameId(); if (cell.getSimpleLevel() == 0 || - cell.getSimpleLevel()->getPath().getType() == "psd" || - cell.getSimpleLevel()->getPath().getType() == "gif" || - cell.getSimpleLevel()->getPath().getType() == "mp4" || - cell.getSimpleLevel()->getPath().getType() == "webm") + cell.getSimpleLevel()->getPath().getType() == "psd" || + cell.getSimpleLevel()->getPath().getType() == "gif" || + cell.getSimpleLevel()->getPath().getType() == "mp4" || + cell.getSimpleLevel()->getPath().getType() == "webm") continue; std::map::iterator it = diff --git a/toonz/sources/toonz/mergecolumns.cpp b/toonz/sources/toonz/mergecolumns.cpp index e280ce6..47399eb 100644 --- a/toonz/sources/toonz/mergecolumns.cpp +++ b/toonz/sources/toonz/mergecolumns.cpp @@ -144,7 +144,8 @@ bool needTobeGrouped(const TVectorImageP &vimg) { //--------------------------------------------------------------------------------------- -void mergeVectorColumns(const std::vector &matchingLevels, bool groupLevels) { +void mergeVectorColumns(const std::vector &matchingLevels, + bool groupLevels) { if (matchingLevels.empty()) return; int i = 0; @@ -157,7 +158,8 @@ void mergeVectorColumns(const std::vector &matchingLevels, bool g throw TRopException("Cannot merge columns of different image types!"); // img->lock(); - if (needTobeGrouped(vimg) && groupLevels) vimg->group(0, vimg->getStrokeCount()); + if (needTobeGrouped(vimg) && groupLevels) + vimg->group(0, vimg->getStrokeCount()); bool ungroup = false; if (needTobeGrouped(vmatch) && groupLevels) { ungroup = true; @@ -199,7 +201,7 @@ public: , m_mColumn(mColumn) , m_images(images) , m_palette(palette->clone()) - , m_groupLevels(groupLevels) {} + , m_groupLevels(groupLevels) {} void undo() const override { QApplication::setOverrideCursor(Qt::WaitCursor); @@ -245,7 +247,10 @@ public: } QString getHistoryString() override { - return QObject::tr("Merge Raster Levels"); + if (m_level->getType() == PLI_XSHLEVEL) + return QObject::tr("Merge Vector Levels"); + else + return QObject::tr("Merge Raster Levels"); } int getHistoryType() override { return HistoryType::FilmStrip; } }; @@ -262,7 +267,8 @@ void mergeColumns(const std::set &columns, bool groupLevels) { TUndoManager::manager()->beginBlock(); - for (; it != columns.end(); ++it) mergeColumns(dstColumn, *it, false, groupLevels); + for (; it != columns.end(); ++it) + mergeColumns(dstColumn, *it, false, groupLevels); TUndoManager::manager()->endBlock(); @@ -381,10 +387,6 @@ void mergeColumns(int column, int mColumn, bool isRedo, bool groupLevels) { return; } - ToonzScene *sc = TApp::instance()->getCurrentScene()->getScene(); - TXshSimpleLevel *simpleLevel = - sc->getLevelSet()->getLevel(column)->getSimpleLevel(); - if (!isRedo) TUndoManager::manager()->add( new MergeColumnsUndo(xl, MergeColumnsSessionId, column, level, images, @@ -403,13 +405,8 @@ void mergeColumns(int column, int mColumn, bool isRedo, bool groupLevels) { } else mergeVectorColumns(matchingLevels, groupLevels); - TXshLevel *sl = - TApp::instance()->getCurrentScene()->getScene()->getLevelSet()->getLevel( - column); - std::vector fidsss; - sl->getFids(fidsss); - invalidateIcons(sl, fidsss); - sl->setDirtyFlag(true); + std::vector fids(alreadyDoneSet.begin(), alreadyDoneSet.end()); + invalidateIcons(level, fids); level->setDirtyFlag(true); TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); }