Added Merge Levels (Do Not group Vector Levels) and Merge Levels (Group Vector Levels) commands. Did not add them to the default menubar.

Added dialog box when merging vector levels via `Merge Levels` command--asks user "Group strokes by vector levels?".
This commit is contained in:
melieconiek 2019-10-03 10:20:03 -04:00
parent f2aa4bc0a9
commit ba481286ad
6 changed files with 80 additions and 7 deletions

View file

@ -158,7 +158,6 @@
<command>MI_MergeCmapped</command>
<separator/>
<command>MI_MergeColumns</command>
<command>MI_MergeColumnsWOGroups</command>
<command>MI_DeleteMatchLines</command>
<command>MI_DeleteInk</command>
<separator/>

View file

@ -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;
}

View file

@ -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");

View file

@ -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<int> &columns) {
TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet();
std::set<int>::const_iterator column = columns.begin();
int start, end;
xsh->getCellRange(*column, start, end);
if (start > end) return false;
std::vector<TXshCell> 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) {}
@ -124,7 +151,16 @@ public:
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();
}
@ -165,6 +201,40 @@ public:
} MergeColumnsWOGroupsCommand;
//*****************************************************************************
// MergeColumns /w Groups command
//*****************************************************************************
class MergeColumnsCommandWGroups final : public MenuItemHandler {
public:
MergeColumnsCommandWGroups() : MenuItemHandler(MI_MergeColumnsWGroups) {}
void execute() override {
TColumnSelection *selection =
dynamic_cast<TColumnSelection *>(TSelection::getCurrent());
std::set<int> indices =
selection ? selection->getIndices() : std::set<int>();
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
//*****************************************************************************

View file

@ -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);

View file

@ -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"