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"