void execute() override { TColumnSelection *selection = dynamic_cast<TColumnSelection *>(TSelection::getCurrent()); if (!selection) { DVGui::warning( tr("It is not possible to apply the match lines because no column " "was selected.")); return; } std::set<int> indices = selection->getIndices(); if (indices.size() != 2) { DVGui::warning( tr("It is not possible to apply the match lines because two columns " "have to be selected.")); return; } std::set<int>::iterator it = indices.begin(); int i = *it++, j = *it; doMatchlines(i, j, -1, -1); TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); }
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( tr("It is not possible to execute the merge column command because " "no column was selected.")); return; } if (indices.size() == 1) { DVGui::warning( tr("It is not possible to execute the merge column command because " "only one columns is selected.")); return; } mergeColumns(indices); TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); }
void execute() override { TColumnSelection *selection = dynamic_cast<TColumnSelection *>( TApp::instance()->getCurrentSelection()->getSelection()); TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet(); int cc = TApp::instance()->getCurrentColumn()->getColumnIndex(); bool sound_changed = false; TTool *tool = TApp::instance()->getCurrentTool()->getTool(); TTool::Viewer *viewer = tool ? tool->getViewer() : nullptr; bool viewer_changed = false; for (int i = 0; i < xsh->getColumnCount(); i++) { /*- 空のカラムの場合は飛ばす -*/ if (xsh->isColumnEmpty(i)) continue; /*- カラムが取得できなかったら飛ばす -*/ TXshColumn *column = xsh->getColumn(i); if (!column) continue; /*- ターゲットが選択カラムのモードで、選択されていなかった場合は飛ばす -*/ bool isSelected = selection && selection->isColumnSelected(i); if (m_target == TARGET_SELECTED && !isSelected) continue; /*- * ターゲットが「カレントカラムより右側」のモードで、iがカレントカラムより左の場合は飛ばす * -*/ if (m_target == TARGET_UPPER && i < cc) continue; bool negate = m_target == TARGET_CURRENT && cc != i || m_target == TARGET_OTHER && cc == i || m_target == TARGET_UPPER && cc == i; int cmd = m_cmd; if (cmd & (CMD_LOCK | CMD_UNLOCK | CMD_TOGGLE_LOCK)) { if (cmd & CMD_LOCK) column->lock(!negate); else if (cmd & CMD_UNLOCK) column->lock(negate); else column->lock(!column->isLocked()); viewer_changed = true; } if (cmd & (CMD_ENABLE_PREVIEW | CMD_DISABLE_PREVIEW | CMD_TOGGLE_PREVIEW)) { if (cmd & CMD_ENABLE_PREVIEW) column->setPreviewVisible(!negate); else if (cmd & CMD_DISABLE_PREVIEW) column->setPreviewVisible(negate); else column->setPreviewVisible(!column->isPreviewVisible()); } if (cmd & (CMD_ENABLE_CAMSTAND | CMD_DISABLE_CAMSTAND | CMD_TOGGLE_CAMSTAND)) { if (cmd & CMD_ENABLE_CAMSTAND) column->setCamstandVisible(!negate); else if (cmd & CMD_DISABLE_CAMSTAND) column->setCamstandVisible(negate); else column->setCamstandVisible(!column->isCamstandVisible()); if (column->getSoundColumn()) sound_changed = true; viewer_changed = true; } /*TAB if(cmd & (CMD_ENABLE_PREVIEW|CMD_DISABLE_PREVIEW|CMD_TOGGLE_PREVIEW)) { //In Tab preview e cameraStand vanno settati entrambi if(cmd&CMD_ENABLE_PREVIEW) { column->setPreviewVisible(!negate); column->setCamstandVisible(!negate); } else if(cmd&CMD_DISABLE_PREVIEW) { column->setPreviewVisible(negate); column->setCamstandVisible(negate); } else { column->setPreviewVisible(!column->isPreviewVisible()); column->setCamstandVisible(!column->isCamstandVisible()); } } */ } if (sound_changed) TApp::instance()->getCurrentXsheet()->notifyXsheetSoundChanged(); TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); TApp::instance()->getCurrentScene()->setDirtyFlag(true); if (viewer && viewer_changed) viewer->invalidateToolStatus(); }
void execute() override { TColumnSelection *selection = dynamic_cast<TColumnSelection *>(TSelection::getCurrent()); if (!selection) { DVGui::warning( tr("It is not possible to merge tlv columns because no column was " "selected.")); return; } std::set<int> indices = selection->getIndices(); if (indices.size() < 2) { DVGui::warning( tr("It is not possible to merge tlv columns because at least two " "columns have to be selected.")); return; } std::set<int>::iterator it = indices.begin(); int destColumn = *it; TCellSelection::Range cells; cells.m_c0 = cells.m_c1 = destColumn; TXshColumn *column = TApp::instance()->getCurrentXsheet()->getXsheet()->getColumn( destColumn); column->getRange(cells.m_r0, cells.m_r1); // column->getLevelColumn() TFilePath newLevelPath; TXshCell c = TApp::instance()->getCurrentXsheet()->getXsheet()->getCell( cells.m_r0, destColumn); if (!c.isEmpty() && c.getSimpleLevel()) newLevelPath = c.getSimpleLevel()->getPath(); if (MergeCmappedDialog(newLevelPath).exec() != QDialog::Accepted) return; it = indices.begin(); for (; it != indices.end(); ++it) if (!checkColumnValidity(*it)) return; DVGui::ProgressDialog progress(tr("Merging Tlv Levels..."), QString(), 0, indices.size() - 1, TApp::instance()->getMainWindow()); progress.setWindowModality(Qt::WindowModal); progress.setWindowTitle(tr("Merging Tlv Levels...")); progress.setValue(0); progress.show(); QCoreApplication::instance()->processEvents(); TUndoManager::manager()->beginBlock(); cloneColumn(cells, newLevelPath); it = indices.begin(); ++it; for (int count = 0; it != indices.end();) { int index = *it; it++; mergeCmapped(destColumn, index - count, it == indices.end() ? QString::fromStdWString(newLevelPath.getWideString()) : "", false); ColumnCmd::deleteColumn(index - count); progress.setValue(++count); QCoreApplication::instance()->processEvents(); } TUndoManager::manager()->endBlock(); TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); }
/*! Update popup value. Take current level and act on level type set popup value. */ void LevelSettingsPopup::updateLevelSettings() { TApp *app = TApp::instance(); TXshLevelP selectedLevel; CastSelection *castSelection = dynamic_cast<CastSelection *>(app->getCurrentSelection()->getSelection()); TCellSelection *cellSelection = dynamic_cast<TCellSelection *>( app->getCurrentSelection()->getSelection()); TColumnSelection *columnSelection = dynamic_cast<TColumnSelection *>( app->getCurrentSelection()->getSelection()); FxSelection *fxSelection = dynamic_cast<FxSelection *>(app->getCurrentSelection()->getSelection()); /*--セル選択の場合--*/ if (cellSelection) { TXsheet *currentXsheet = app->getCurrentXsheet()->getXsheet(); if (currentXsheet && !cellSelection->isEmpty()) { selectedLevel = 0; int r0, c0, r1, c1; cellSelection->getSelectedCells(r0, c0, r1, c1); for (int c = c0; c <= c1; c++) { for (int r = r0; r <= r1; r++) { if (currentXsheet->getCell(r, c).m_level) { selectedLevel = currentXsheet->getCell(r, c).m_level; break; } } if (selectedLevel) break; } } else selectedLevel = app->getCurrentLevel()->getLevel(); } /*--カラム選択の場合--*/ else if (columnSelection) { TXsheet *currentXsheet = app->getCurrentXsheet()->getXsheet(); if (currentXsheet && !columnSelection->isEmpty()) { selectedLevel = 0; int sceneLength = currentXsheet->getFrameCount(); std::set<int> columnIndices = columnSelection->getIndices(); std::set<int>::iterator it; /*-- 選択Columnを探索、最初に見つかったLevelの内容を表示 --*/ for (it = columnIndices.begin(); it != columnIndices.end(); ++it) { int columnIndex = *it; for (int r = 0; r < sceneLength; r++) { if (currentXsheet->getCell(r, columnIndex).m_level) { selectedLevel = currentXsheet->getCell(r, columnIndex).m_level; break; } } if (selectedLevel) break; } } else selectedLevel = app->getCurrentLevel()->getLevel(); } else if (castSelection) { std::vector<TXshLevel *> levels; castSelection->getSelectedLevels(levels); int selectedLevelSize = levels.size(); if (selectedLevelSize > 0) selectedLevel = levels[selectedLevelSize - 1]; } /*-- Fx選択(Schematicノード選択)の場合 --*/ else if (fxSelection) { selectedLevel = 0; TXsheet *currentXsheet = app->getCurrentXsheet()->getXsheet(); QList<TFxP> selectedFxs = fxSelection->getFxs(); if (currentXsheet && !selectedFxs.isEmpty()) { for (int f = 0; f < selectedFxs.size(); f++) { TLevelColumnFx *lcfx = dynamic_cast<TLevelColumnFx *>(selectedFxs.at(f).getPointer()); if (lcfx) { int firstRow = lcfx->getXshColumn()->getCellColumn()->getFirstRow(); TXshLevelP levelP = lcfx->getXshColumn()->getCellColumn()->getCell(firstRow).m_level; if (levelP) { selectedLevel = levelP; break; } } } if (!selectedLevel) selectedLevel = app->getCurrentLevel()->getLevel(); } else selectedLevel = app->getCurrentLevel()->getLevel(); // std::cout<<"fxSelection is current!"<<std::endl; } else selectedLevel = app->getCurrentLevel()->getLevel(); m_sl = dynamic_cast<TXshSimpleLevel *>(selectedLevel.getPointer()); m_pl = dynamic_cast<TXshPaletteLevel *>(selectedLevel.getPointer()); m_cl = dynamic_cast<TXshChildLevel *>(selectedLevel.getPointer()); m_sdl = dynamic_cast<TXshSoundLevel *>(selectedLevel.getPointer()); bool isSimpleLevel = m_sl; bool isChildLevel = m_cl; bool isRasterLevel = m_sl && (m_sl->getType() & RASTER_TYPE); bool isTzpLevel = m_sl && (m_sl->getType() == TZP_XSHLEVEL); bool isMeshLevel = m_sl && (m_sl->getType() == MESH_XSHLEVEL); bool hasDpiEditing = (isRasterLevel || isMeshLevel); // name if (selectedLevel) { m_nameFld->setText(::to_string(selectedLevel->getName()).c_str()); m_nameFld->setEnabled(true); } else { m_nameFld->setText(tr("")); m_nameFld->setEnabled(false); } // path if (m_sl) { m_pathFld->setPath(toQString(m_sl->getPath())); if (m_scanPathFld) m_scanPathFld->setPath(toQString(m_sl->getScannedPath())); } else if (m_pl) { m_pathFld->setPath(toQString(m_pl->getPath())); if (m_scanPathFld) m_scanPathFld->setPath(tr("")); } else if (m_sdl) { m_pathFld->setPath(toQString(m_sdl->getPath())); if (m_scanPathFld) m_scanPathFld->setPath(tr("")); } else { m_pathFld->setPath(tr("")); if (m_scanPathFld) m_scanPathFld->setPath(tr("")); } // leveltype QString levelTypeString = QString(tr("")); if (m_sl) { switch (m_sl->getType()) { case TZI_XSHLEVEL: levelTypeString = tr("Scan level"); break; case PLI_XSHLEVEL: levelTypeString = tr("Toonz Vector level"); break; case TZP_XSHLEVEL: levelTypeString = tr("Toonz Raster level"); break; case OVL_XSHLEVEL: levelTypeString = tr("Raster level"); break; case MESH_XSHLEVEL: levelTypeString = tr("Mesh level"); break; default: levelTypeString = "?"; break; } } else if (m_pl) levelTypeString = tr("Palette level"); else if (m_sdl) levelTypeString = tr("Sound Column"); m_typeLabel->setText(levelTypeString); // dpi & res & resampling if (hasDpiEditing) { LevelProperties::DpiPolicy dpiPolicy = m_sl->getProperties()->getDpiPolicy(); assert(dpiPolicy == LevelProperties::DP_ImageDpi || dpiPolicy == LevelProperties::DP_CustomDpi); m_dpiTypeOm->setCurrentIndex( (dpiPolicy == LevelProperties::DP_ImageDpi) ? 0 : 1); // dpi field TPointD dpi = m_sl->getDpi(); m_dpiFld->setText(dpiToString(dpi)); m_dpiFld->setCursorPosition(0); // image dpi m_imageDpiLabel->setText(dpiToString(m_sl->getImageDpi())); if (isRasterLevel) { // size field TDimensionD size(0, 0); TDimension res = m_sl->getResolution(); if (res.lx > 0 && res.ly > 0 && dpi.x > 0 && dpi.y > 0) { size.lx = res.lx / dpi.x; size.ly = res.ly / dpi.y; m_widthFld->setValue(tround(size.lx * 100.0) / 100.0); m_heightFld->setValue(tround(size.ly * 100.0) / 100.0); } else { m_widthFld->setText(tr("")); m_heightFld->setText(tr("")); } // image res TDimension imageRes = m_sl->getResolution(); m_imageResLabel->setText(QString::number(imageRes.lx) + "x" + QString::number(imageRes.ly)); // subsampling m_subsamplingFld->setValue(m_sl->getProperties()->getSubsampling()); // doPremultiply m_doPremultiply->setChecked(m_sl->getProperties()->doPremultiply()); if (m_whiteTransp) m_whiteTransp->setChecked(m_sl->getProperties()->whiteTransp()); m_antialiasSoftness->setValue(m_sl->getProperties()->antialiasSoftness()); m_doAntialias->setChecked(m_sl->getProperties()->antialiasSoftness() > 0); } } else { m_dpiFld->setText(tr("")); m_widthFld->setText(tr("")); m_heightFld->setText(tr("")); m_cameraDpiLabel->setText(tr("")); m_imageDpiLabel->setText(tr("")); m_imageResLabel->setText(tr("")); m_subsamplingFld->setText(tr("")); m_doPremultiply->setChecked(false); m_doAntialias->setChecked(false); if (m_whiteTransp) m_whiteTransp->setChecked(false); } // camera dpi m_cameraDpiLabel->setText(dpiToString(getCurrentCameraDpi())); m_nameFld->setEnabled((isSimpleLevel || isChildLevel || !!m_pl || !!m_sdl)); m_pathFld->setEnabled((isSimpleLevel || !!m_sdl || !!m_pl)); if (m_scanPathLabel) m_scanPathLabel->setEnabled(isTzpLevel); if (m_scanPathFld) m_scanPathFld->setEnabled(isTzpLevel); m_typeLabel->setEnabled(isSimpleLevel || !!m_pl || !!m_sdl); m_dpiTypeOm->setEnabled((isSimpleLevel && m_sl->getImageDpi() != TPointD())); m_squarePixCB->setEnabled(hasDpiEditing); m_dpiLabel->setEnabled(hasDpiEditing); m_dpiFld->setEnabled(hasDpiEditing); m_widthLabel->setEnabled(isRasterLevel); m_widthFld->setEnabled(isRasterLevel); m_heightLabel->setEnabled(isRasterLevel); m_heightFld->setEnabled(isRasterLevel); m_useCameraDpiBtn->setEnabled(hasDpiEditing); m_subsamplingLabel->setEnabled( (isRasterLevel && m_sl && !m_sl->getProperties()->getDirtyFlag())); m_subsamplingFld->setEnabled( (isRasterLevel && m_sl && !m_sl->getProperties()->getDirtyFlag())); m_doPremultiply->setEnabled(m_sl && isRasterLevel && !isTzpLevel); m_doAntialias->setEnabled(m_sl && isRasterLevel); if (m_whiteTransp) m_whiteTransp->setEnabled(m_sl && isRasterLevel && !isTzpLevel); }