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:
parent
f2aa4bc0a9
commit
ba481286ad
6 changed files with 80 additions and 7 deletions
|
@ -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/>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
//*****************************************************************************
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue