diff --git a/stuff/profiles/layouts/rooms/Default/menubar_template.xml b/stuff/profiles/layouts/rooms/Default/menubar_template.xml index 8b8ff9f..b8f53ac 100644 --- a/stuff/profiles/layouts/rooms/Default/menubar_template.xml +++ b/stuff/profiles/layouts/rooms/Default/menubar_template.xml @@ -158,7 +158,6 @@ MI_MergeCmapped MI_MergeColumns - MI_MergeColumnsWOGroups MI_DeleteMatchLines MI_DeleteInk diff --git a/toonz/sources/toonz/columnselection.cpp b/toonz/sources/toonz/columnselection.cpp index 06d39a8..cd39953 100644 --- a/toonz/sources/toonz/columnselection.cpp +++ b/toonz/sources/toonz/columnselection.cpp @@ -201,6 +201,7 @@ void TColumnSelection::selectColumn(int col, bool on) { m_indices.erase(col); CommandManager::instance()->enable(MI_MergeColumns, false); + CommandManager::instance()->enable(MI_MergeColumnsWGroups, false); CommandManager::instance()->enable(MI_MergeColumnsWOGroups, false); CommandManager::instance()->enable(MI_ApplyMatchLines, false); CommandManager::instance()->enable(MI_MergeCmapped, false); @@ -217,7 +218,8 @@ void TColumnSelection::selectColumn(int col, bool on) { if (it == m_indices.end()) { CommandManager::instance()->enable(MI_MergeColumns, true); - CommandManager::instance()->enable(MI_MergeColumnsWOGroups, true); + CommandManager::instance()->enable(MI_MergeColumnsWGroups, true); + CommandManager::instance()->enable(MI_MergeColumnsWOGroups, true); return; } diff --git a/toonz/sources/toonz/mainwindow.cpp b/toonz/sources/toonz/mainwindow.cpp index 1bd442b..53cd490 100644 --- a/toonz/sources/toonz/mainwindow.cpp +++ b/toonz/sources/toonz/mainwindow.cpp @@ -1783,11 +1783,13 @@ void MainWindow::defineActions() { createMenuXsheetAction(MI_DeleteMatchLines, tr("&Delete Match Lines"), ""); createMenuXsheetAction(MI_DeleteInk, tr("&Delete Lines..."), ""); QAction *mergeLevelsAction = - createMenuXsheetAction(MI_MergeColumns, tr("&Merge Levels (Grouped)"), ""); + createMenuXsheetAction(MI_MergeColumns, tr("&Merge Levels"), ""); mergeLevelsAction->setIcon(QIcon(":Resources/merge.svg")); QAction *mergeLevelsWOGroupsAction = - createMenuXsheetAction(MI_MergeColumnsWOGroups, tr("&Merge Levels (No Groups)"), ""); + createMenuXsheetAction(MI_MergeColumnsWOGroups, tr("&Merge Levels (Do Not Group Vector Levels)"), ""); mergeLevelsWOGroupsAction->setIcon(QIcon(":Resources/merge_wogroups.svg")); + QAction *mergeLevelsWGroupsAction = + createMenuXsheetAction(MI_MergeColumnsWGroups, tr("&Merge Levels (Group Vector Levels)"), ""); createMenuXsheetAction(MI_InsertFx, tr("&New FX..."), "Ctrl+F"); QAction *newOutputAction = createMenuXsheetAction(MI_NewOutputFx, tr("&New Output"), "Alt+O"); diff --git a/toonz/sources/toonz/matchlinecommand.cpp b/toonz/sources/toonz/matchlinecommand.cpp index b5fdfcc..a12ee9b 100644 --- a/toonz/sources/toonz/matchlinecommand.cpp +++ b/toonz/sources/toonz/matchlinecommand.cpp @@ -6,6 +6,7 @@ #include "tpalette.h" // TnzLib includes +#include "toonz/txsheet.h" #include "toonz/toonzscene.h" #include "toonz/txshcell.h" #include "toonz/txshsimplelevel.h" @@ -15,6 +16,7 @@ #include "toonz/txshlevelhandle.h" #include "toonz/txsheethandle.h" #include "toonz/tscenehandle.h" +#include "toonz/txshleveltypes.h" // TnzQt includes #include "toonzqt/menubarcommand.h" @@ -99,6 +101,31 @@ MergeCmappedDialog::MergeCmappedDialog(TFilePath &levelPath) // MergeColumns command //***************************************************************************** +bool isVectorColumn(const std::set &columns) { + TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet(); + 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; + } + } + +} + class MergeColumnsCommand final : public MenuItemHandler { public: MergeColumnsCommand() : MenuItemHandler(MI_MergeColumns) {} @@ -123,8 +150,17 @@ public: "only one columns is selected.")); return; } - - mergeColumns(indices, true); + + 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; + else { + groupLevels = (opt == 1); + }; + } + + mergeColumns(indices, groupLevels); TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); } @@ -166,6 +202,40 @@ public: } MergeColumnsWOGroupsCommand; //***************************************************************************** +// MergeColumns /w Groups command +//***************************************************************************** + +class MergeColumnsCommandWGroups final : public MenuItemHandler { +public: + MergeColumnsCommandWGroups() : MenuItemHandler(MI_MergeColumnsWGroups) {} + + void execute() override { + TColumnSelection *selection = + dynamic_cast(TSelection::getCurrent()); + + std::set indices = + selection ? selection->getIndices() : std::set(); + + if (indices.empty()) { + DVGui::warning(QObject::tr( + "It is not possible to execute the merge column command because " + "no column was selected.")); + return; + } + + if (indices.size() == 1) { + DVGui::warning(QObject::tr( + "It is not possible to execute the merge column command because " + "only one columns is selected.")); + return; + } + + mergeColumns(indices, true); + TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); + } +} MergeColumnsWGroupsCommand; + +//***************************************************************************** // ApplyMatchlines command //***************************************************************************** diff --git a/toonz/sources/toonz/menubar.cpp b/toonz/sources/toonz/menubar.cpp index 6f8b03e..ae90d2c 100644 --- a/toonz/sources/toonz/menubar.cpp +++ b/toonz/sources/toonz/menubar.cpp @@ -668,7 +668,6 @@ QMenuBar *StackedMenuBar::createInknPaintMenuBar() { addMenuItem(filesMenu, MI_DeleteInk); addMenuItem(filesMenu, MI_MergeCmapped); addMenuItem(filesMenu, MI_MergeColumns); - addMenuItem(filesMenu, MI_MergeColumnsWOGroups); filesMenu->addSeparator(); addMenuItem(filesMenu, MI_LoadScene); addMenuItem(filesMenu, MI_SaveScene); diff --git a/toonz/sources/toonz/menubarcommandids.h b/toonz/sources/toonz/menubarcommandids.h index 3778d10..7c55b1c 100644 --- a/toonz/sources/toonz/menubarcommandids.h +++ b/toonz/sources/toonz/menubarcommandids.h @@ -131,6 +131,7 @@ #define MI_ApplyMatchLines "MI_ApplyMatchLines" #define MI_MergeCmapped "MI_MergeCmapped" #define MI_MergeColumns "MI_MergeColumns" +#define MI_MergeColumnsWGroups "MI_MergeColumnsWGroups" #define MI_MergeColumnsWOGroups "MI_MergeColumnsWOGroups" #define MI_DeleteMatchLines "MI_DeleteMatchLines" #define MI_DeleteInk "MI_DeleteInk"