void FilmstripFrames::hideEvent(QHideEvent *) { TApp *app = TApp::instance(); // cambiamenti al livello disconnect(app->getCurrentLevel()); // al frame corrente disconnect(app->getCurrentFrame(), SIGNAL(frameSwitched()), this, SLOT(onFrameSwitched())); disconnect(app->getCurrentFrame(), SIGNAL(frameTypeChanged()), this, SLOT(update())); // iconcine disconnect(IconGenerator::instance(), SIGNAL(iconGenerated()), this, SLOT(update())); // onion skin disconnect(app->getCurrentOnionSkin(), SIGNAL(onionSkinMaskChanged()), this, SLOT(update())); ComboViewerPanel *inknPaintViewerPanel = app->getInknPaintViewerPanel(); if (inknPaintViewerPanel) { SceneViewer *viewer = inknPaintViewerPanel->getSceneViewer(); if (viewer) { disconnect(viewer, SIGNAL(onZoomChanged()), this, SLOT(update())); disconnect(viewer, SIGNAL(refreshNavi()), this, SLOT(update())); } } }
void FilmstripFrames::showEvent(QShowEvent *) { TApp *app = TApp::instance(); // cambiamenti al livello TXshLevelHandle *levelHandle = app->getCurrentLevel(); connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this, SLOT(onLevelSwitched(TXshLevel *))); connect(levelHandle, SIGNAL(xshLevelChanged()), this, SLOT(onLevelChanged())); connect(levelHandle, SIGNAL(xshLevelViewChanged()), this, SLOT(onLevelChanged())); // al frame corrente connect(app->getCurrentFrame(), SIGNAL(frameSwitched()), this, SLOT(onFrameSwitched())); connect(app->getCurrentFrame(), SIGNAL(frameTypeChanged()), this, SLOT(update())); // iconcine connect(IconGenerator::instance(), SIGNAL(iconGenerated()), this, SLOT(update())); // onion skin connect(app->getCurrentOnionSkin(), SIGNAL(onionSkinMaskChanged()), this, SLOT(update())); // enable navigator link with the Viewer in the InknPaint page ComboViewerPanel *inknPaintViewerPanel = app->getInknPaintViewerPanel(); if (inknPaintViewerPanel) { SceneViewer *viewer = inknPaintViewerPanel->getSceneViewer(); if (viewer) { connect(viewer, SIGNAL(onZoomChanged()), this, SLOT(update())); connect(viewer, SIGNAL(refreshNavi()), this, SLOT(update())); } } }
void PaletteViewerPanel::onCurrentButtonToggled(bool isCurrent) { if (isActive() == isCurrent) return; TApp *app = TApp::instance(); TPaletteHandle *ph = app->getPaletteController()->getCurrentLevelPalette(); // Se sono sulla palette del livello corrente e le palette e' vuota non // consento di bloccare il pannello. if (isActive() && !ph->getPalette()) { m_isCurrentButton->setPressed(true); return; } setActive(isCurrent); m_paletteViewer->enableSaveAction(isCurrent); // Cambio il livello corrente if (isCurrent) { std::set<TXshSimpleLevel *> levels; TXsheet *xsheet = app->getCurrentXsheet()->getXsheet(); int row, column; findPaletteLevels(levels, row, column, m_paletteHandle->getPalette(), xsheet); // Se non trovo livelli riferiti alla palette setto il palette viewer alla // palette del livello corrente. if (levels.empty()) { m_paletteViewer->setPaletteHandle(ph); update(); return; } TXshSimpleLevel *level = *levels.begin(); // Se sto editando l'xsheet devo settare come corrente anche la colonna e il // frame. if (app->getCurrentFrame()->isEditingScene()) { int currentColumn = app->getCurrentColumn()->getColumnIndex(); if (currentColumn != column) app->getCurrentColumn()->setColumnIndex(column); int currentRow = app->getCurrentFrame()->getFrameIndex(); TXshCell cell = xsheet->getCell(currentRow, column); if (cell.isEmpty() || cell.getSimpleLevel() != level) app->getCurrentFrame()->setFrameIndex(row); TCellSelection *selection = dynamic_cast<TCellSelection *>( app->getCurrentSelection()->getSelection()); if (selection) selection->selectNone(); } app->getCurrentLevel()->setLevel(level); m_paletteViewer->setPaletteHandle(ph); } else { m_paletteHandle->setPalette(ph->getPalette()); m_paletteViewer->setPaletteHandle(m_paletteHandle); } update(); }
PaletteViewerPanel::PaletteViewerPanel(QWidget *parent) : TPanel(parent) { m_paletteHandle = new TPaletteHandle(); connect(m_paletteHandle, SIGNAL(colorStyleSwitched()), SLOT(onColorStyleSwitched())); connect(m_paletteHandle, SIGNAL(paletteSwitched()), SLOT(onPaletteSwitched())); TApp *app = TApp::instance(); m_paletteViewer = new PaletteViewer(this, PaletteViewerGUI::LEVEL_PALETTE); m_paletteViewer->setPaletteHandle( app->getPaletteController()->getCurrentLevelPalette()); m_paletteViewer->setFrameHandle(app->getCurrentFrame()); m_paletteViewer->setXsheetHandle(app->getCurrentXsheet()); // for clearing cache when paste style command called from the StyleSelection m_paletteViewer->setLevelHandle(app->getCurrentLevel()); TSceneHandle *sceneHandle = app->getCurrentScene(); connect(sceneHandle, SIGNAL(sceneSwitched()), SLOT(onSceneSwitched())); CurrentStyleChangeCommand *currentStyleChangeCommand = new CurrentStyleChangeCommand(); m_paletteViewer->setChangeStyleCommand(currentStyleChangeCommand); setWidget(m_paletteViewer); initializeTitleBar(); }
void FilmstripFrames::onFrameSwitched() { // no. interferische con lo shift-click per la selezione. // m_selection->selectNone(); TApp *app = TApp::instance(); TFrameHandle *fh = app->getCurrentFrame(); TFrameId fid; if (fh->isEditingLevel()) fid = fh->getFid(); else { TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); int col = app->getCurrentColumn()->getColumnIndex(); int row = fh->getFrame(); if (row < 0 || col < 0) return; TXshCell cell = xsh->getCell(row, col); if (cell.isEmpty()) return; fid = cell.getFrameId(); } int index = fid2index(fid); if (index >= 0) { exponeFrame(index); // clear selection and select only the destination frame select(index, ONLY_SELECT); } update(); }
bool changeFrameSkippingHolds(QKeyEvent *e) { if ((e->modifiers() & Qt::ShiftModifier) == 0 || e->key() != Qt::Key_Down && e->key() != Qt::Key_Up) return false; TApp *app = TApp::instance(); TFrameHandle *fh = app->getCurrentFrame(); if (!fh->isEditingScene()) return false; int row = fh->getFrame(); int col = app->getCurrentColumn()->getColumnIndex(); TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); TXshCell cell = xsh->getCell(row, col); if (e->key() == Qt::Key_Down) { if (cell.isEmpty()) { int r0, r1; if (xsh->getCellRange(col, r0, r1)) { while (row <= r1 && xsh->getCell(row, col).isEmpty()) row++; if (xsh->getCell(row, col).isEmpty()) return false; } else return false; } else { while (xsh->getCell(row, col) == cell) row++; } } else { // Key_Up while (row >= 0 && xsh->getCell(row, col) == cell) row--; if (row < 0) return false; cell = xsh->getCell(row, col); while (row > 0 && xsh->getCell(row - 1, col) == cell) row--; } fh->setFrame(row); return true; }
FxParamEditorPopup::FxParamEditorPopup() : QDialog(TApp::instance()->getMainWindow()) { setWindowTitle(tr("Fx Settings")); setMinimumSize(20, 20); TApp *app = TApp::instance(); TSceneHandle *hScene = app->getCurrentScene(); TPixel32 col1, col2; Preferences::instance()->getChessboardColors(col1, col2); FxSettings *fxSettings = new FxSettings(this, col1, col2); fxSettings->setSceneHandle(hScene); fxSettings->setFxHandle(app->getCurrentFx()); fxSettings->setFrameHandle(app->getCurrentFrame()); fxSettings->setXsheetHandle(app->getCurrentXsheet()); fxSettings->setLevelHandle(app->getCurrentLevel()); fxSettings->setObjectHandle(app->getCurrentObject()); fxSettings->setCurrentFx(); QVBoxLayout *mainLayout = new QVBoxLayout(); mainLayout->setMargin(0); mainLayout->setSpacing(10); { mainLayout->addWidget(fxSettings); } setLayout(mainLayout); move(parentWidget()->geometry().center() - rect().bottomRight() / 2.0); }
void BinarizePopup::hideEvent(QHideEvent *e) { TApp *app = TApp::instance(); bool ret = true; ret = ret && disconnect(app->getCurrentFrame(), 0, this, 0); ret = ret && disconnect(app->getCurrentColumn(), 0, this, 0); ret = ret && disconnect(app->getCurrentLevel(), 0, this, 0); assert(ret); }
void FunctionViewerPanel::attachHandles() { TApp *app = TApp::instance(); m_functionViewer->setXsheetHandle(app->getCurrentXsheet()); m_functionViewer->setFrameHandle(app->getCurrentFrame()); m_functionViewer->setObjectHandle(app->getCurrentObject()); m_functionViewer->setFxHandle(app->getCurrentFx()); m_functionViewer->setColumnHandle(app->getCurrentColumn()); m_functionViewer->setSceneHandle(app->getCurrentScene()); }
void AntialiasPopup::showEvent(QShowEvent *se) { TApp *app = TApp::instance(); bool ret = true; ret = ret && connect(app->getCurrentFrame(), SIGNAL(frameTypeChanged()), this, SLOT(setCurrentSampleRaster())); ret = ret && connect(app->getCurrentFrame(), SIGNAL(frameSwitched()), this, SLOT(setCurrentSampleRaster())); ret = ret && connect(app->getCurrentColumn(), SIGNAL(columnIndexSwitched()), this, SLOT(setCurrentSampleRaster())); assert(ret); setCurrentSampleRaster(); }
void ComboViewerPanel::onDrawFrame( int frame, const ImagePainter::VisualSettings &settings) { TApp *app = TApp::instance(); m_sceneViewer->setVisual(settings); TFrameHandle *frameHandle = app->getCurrentFrame(); if (m_sceneViewer->isPreviewEnabled()) { class Previewer *pr = Previewer::instance(m_sceneViewer->getPreviewMode() == SceneViewer::SUBCAMERA_PREVIEW); pr->getRaster(frame - 1); // the 'getRaster' starts the render of the frame // is not already started int curFrame = frame; if (frameHandle->isPlaying() && !pr->isFrameReady( frame - 1)) // stops on last rendered frame until current is ready! { while (frame > 0 && !pr->isFrameReady(frame - 1)) frame--; if (frame == 0) frame = curFrame; // if no frame is ready, I stay on current...no use // to rewind m_flipConsole->setCurrentFrame(frame); } } assert(frame >= 0); if (frame != frameHandle->getFrameIndex() + 1) { if (frameHandle->isEditingScene()) { TXshColumn *column = app->getCurrentXsheet()->getXsheet()->getColumn( app->getCurrentColumn()->getColumnIndex()); if (column) { TXshSoundColumn *soundColumn = column->getSoundColumn(); if (soundColumn && !soundColumn->isPlaying()) app->getCurrentFrame()->scrubColumn(frame, frame, soundColumn); } } frameHandle->setCurrentFrame(frame); } else if (settings.m_blankColor != TPixel::Transparent) m_sceneViewer->update(); }
void LinesFadePopup::hideEvent(QHideEvent *he) { TApp *app = TApp::instance(); disconnect(app->getCurrentFrame(), SIGNAL(frameTypeChanged()), this, SLOT(setCurrentSampleRaster())); disconnect(app->getCurrentFrame(), SIGNAL(frameSwitched()), this, SLOT(setCurrentSampleRaster())); disconnect(app->getCurrentColumn(), SIGNAL(columnIndexSwitched()), this, SLOT(setCurrentSampleRaster())); Dialog::hideEvent(he); m_viewer->raster() = TRasterP(); m_startRas = TRaster32P(); }
void ComboViewerPanel::hideEvent(QHideEvent *) { TApp *app = TApp::instance(); disconnect(app->getCurrentScene()); disconnect(app->getCurrentLevel()); disconnect(app->getCurrentFrame()); disconnect(app->getCurrentObject()); disconnect(app->getCurrentXsheet()); disconnect(app->getCurrentTool()); m_flipConsole->setActive(false); }
void SceneViewer::onButtonPressed(FlipConsole::EGadget button) { if (m_freezedStatus != NO_FREEZED) return; switch (button) { case FlipConsole::eSaveImg: { if (m_previewMode == NO_PREVIEW) { DVGui::warning(QObject::tr( "It is not possible to save images in camera stand view.")); return; } TApp *app = TApp::instance(); int row = app->getCurrentFrame()->getFrame(); Previewer *previewer = Previewer::instance(m_previewMode == SUBCAMERA_PREVIEW); if (!previewer->isFrameReady(row)) { DVGui::warning(QObject::tr("The preview images are not ready yet.")); return; } TRasterP ras = previewer->getRaster(row, m_visualSettings.m_recomputeIfNeeded); TImageCache::instance()->add(QString("TnzCompareImg"), TRasterImageP(ras->clone())); break; } case FlipConsole::eSave: Previewer::instance(m_previewMode == SUBCAMERA_PREVIEW) ->saveRenderedFrames(); break; case FlipConsole::eHisto: { QAction *action = CommandManager::instance()->getAction(MI_Histogram); action->trigger(); break; } case FlipConsole::eDefineSubCamera: m_editPreviewSubCamera = !m_editPreviewSubCamera; update(); break; // open locator. Create one for the first time case FlipConsole::eLocator: if (!m_locator) m_locator = new LocatorPopup(this); m_locator->show(); m_locator->raise(); m_locator->activateWindow(); break; } }
void AntialiasPopup::setCurrentSampleRaster() { TRasterP sampleRas; m_startRas = TRasterP(); TSelection *selection = TApp::instance()->getCurrentSelection()->getSelection(); TCellSelection *cellSelection = dynamic_cast<TCellSelection *>(selection); TFilmstripSelection *filmstripSelection = dynamic_cast<TFilmstripSelection *>(selection); TImageP image; if (cellSelection) { TApp *app = TApp::instance(); TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); TXshCell cell = xsh->getCell(app->getCurrentFrame()->getFrameIndex(), app->getCurrentColumn()->getColumnIndex()); TImageP aux = cell.getImage(true); if (aux) image = aux->cloneImage(); } else if (filmstripSelection) { TApp *app = TApp::instance(); TXshSimpleLevel *simpleLevel = app->getCurrentLevel()->getSimpleLevel(); if (simpleLevel) { TImageP imageAux = simpleLevel->getFrame(app->getCurrentFrame()->getFid(), true); if (imageAux) image = imageAux->cloneImage(); } } if (!image || !(sampleRas = image->raster())) { m_viewer->setImage(TImageP()); m_viewer->update(); m_okBtn->setEnabled(false); return; } m_okBtn->setEnabled(true); m_startRas = sampleRas->clone(); onChange(m_startRas, sampleRas, m_thresholdField->getValue(), m_softnessField->getValue()); m_viewer->setImage(image); m_viewer->update(); }
void BinarizePopup::fetchSample() { TApp *app = TApp::instance(); TImageP img; if (app->getCurrentFrame()->isEditingLevel()) { TXshLevel *xshLevel = app->getCurrentLevel()->getLevel(); if (xshLevel && xshLevel->getSimpleLevel()) { TXshSimpleLevel *sl = xshLevel->getSimpleLevel(); img = sl->getFrame(app->getCurrentFrame()->getFid(), false); } } else { TXsheet *xsh = app->getCurrentScene()->getScene()->getXsheet(); TXshCell cell = xsh->getCell(app->getCurrentFrame()->getFrame(), app->getCurrentColumn()->getColumnIndex()); img = cell.getImage(false); } TRasterImageP ri = img; if (ri) { setSample(ri->getRaster()); } else { setSample(TRasterP()); } }
void AdjustLevelsPopup::acquireRaster() { //Retrieve current selection TApp *app = TApp::instance(); TSelection *selection = app->getCurrentSelection()->getSelection(); TCellSelection *cellSelection = dynamic_cast<TCellSelection *>(selection); TFilmstripSelection *filmstripSelection = dynamic_cast<TFilmstripSelection *>(selection); //Retrieve the input raster m_inputRas = TRasterP(); if (cellSelection) { TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); TXshCell cell = xsh->getCell(app->getCurrentFrame()->getFrameIndex(), app->getCurrentColumn()->getColumnIndex()); TRasterImageP rasImage = cell.getImage(true); if (rasImage && rasImage->getRaster()) m_inputRas = rasImage->getRaster(); } else if (filmstripSelection) { TXshSimpleLevel *simpleLevel = app->getCurrentLevel()->getSimpleLevel(); if (simpleLevel) { TRasterImageP rasImage = (TRasterImageP)simpleLevel->getFrame(app->getCurrentFrame()->getFid(), true); if (rasImage && rasImage->getRaster()) m_inputRas = rasImage->getRaster(); } } if (m_inputRas) { m_threshold = m_inputRas->getLx() * m_inputRas->getLy() * m_thresholdD; m_okBtn->setEnabled(true); } else { m_inputRas = TRasterP(); m_okBtn->setEnabled(false); } //Build histograms m_histogram->setRaster(m_inputRas); //Update the corresponding processed image in the viewer updateProcessedImage(); }
void BrightnessAndContrastPopup::setCurrentSampleRaster() { TRasterP sampleRas; m_startRas = TRasterP(); TSelection *selection = TApp::instance()->getCurrentSelection()->getSelection(); TCellSelection *cellSelection = dynamic_cast<TCellSelection *>(selection); TFilmstripSelection *filmstripSelection = dynamic_cast<TFilmstripSelection *>(selection); if (cellSelection) { TApp *app = TApp::instance(); TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); TXshCell cell = xsh->getCell(app->getCurrentFrame()->getFrameIndex(), app->getCurrentColumn()->getColumnIndex()); TRasterImageP rasImage = cell.getImage(true); if (rasImage && rasImage->getRaster()) sampleRas = rasImage->getRaster()->clone(); } else if (filmstripSelection) { TApp *app = TApp::instance(); TXshSimpleLevel *simpleLevel = app->getCurrentLevel()->getSimpleLevel(); if (simpleLevel) { TRasterImageP rasImage = (TRasterImageP)simpleLevel->getFrame(app->getCurrentFrame()->getFid(), true); if (rasImage && rasImage->getRaster()) sampleRas = rasImage->getRaster()->clone(); } } if (!sampleRas) { m_viewer->raster() = TRasterP(); m_viewer->update(); m_okBtn->setEnabled(false); return; } m_okBtn->setEnabled(true); m_startRas = sampleRas->clone(); onChange(m_startRas, sampleRas, m_contrastField->getValue(), m_brightnessField->getValue()); m_viewer->raster() = sampleRas; m_viewer->update(); }
/*! switch the current level when the current index of m_chooseLevelCombo is * changed */ void Filmstrip::onChooseLevelComboChanged(int index) { TApp *tapp = TApp::instance(); // empty level if (index == m_chooseLevelCombo->findText(tr("- No Current Level -"))) tapp->getCurrentLevel()->setLevel(0); else { std::vector<TFrameId> fids; m_levels[index]->getFids(fids); tapp->getCurrentFrame()->setFrameIds(fids); // retrieve to the current working frame of the level TFrameId WF; std::map<TXshSimpleLevel *, TFrameId>::iterator WFit; WFit = m_workingFrames.find(m_levels[index]); if (WFit != m_workingFrames.end()) WF = WFit->second; else WF = fids[0]; // this function emits xshLevelSwitched() signal and eventually calls // FlipConsole::UpdateRange // it may move the current frame so we need to keep the current frameId // before calling setLevel. tapp->getCurrentLevel()->setLevel(m_levels[index]); if (tapp->getCurrentSelection()->getSelection()) tapp->getCurrentSelection()->getSelection()->selectNone(); // move to the current working frame tapp->getCurrentFrame()->setFid(WF); QApplication::setOverrideCursor(Qt::WaitCursor); invalidateIcons(m_levels[index], fids); QApplication::restoreOverrideCursor(); } }
void ComboViewerPanel::hideEvent(QHideEvent *event) { StyleShortcutSwitchablePanel::hideEvent(event); TApp *app = TApp::instance(); disconnect(app->getCurrentFrame(), 0, this, 0); disconnect(app->getCurrentScene(), 0, this, 0); disconnect(app->getCurrentLevel(), 0, this, 0); disconnect(app->getCurrentObject(), 0, this, 0); disconnect(app->getCurrentXsheet(), 0, this, 0); disconnect(app->getCurrentTool(), SIGNAL(toolSwitched()), m_sceneViewer, SLOT(onToolSwitched())); m_flipConsole->setActive(false); }
bool MovieGenerator::addScene(ToonzScene &scene, int r0, int r1) { TApp *app = TApp::instance(); RasterMovieGenerator *imp = dynamic_cast<RasterMovieGenerator *>(m_imp.get()); if (imp) imp->m_alphaEnabled = true; m_imp->m_renderRange = std::make_pair(r0, r1); m_imp->startScene(scene, r0); for (int r = r0; r <= r1; r++) { TColorStyle::m_currentFrame = r; if (!m_imp->addFrame(scene, r, r == r1)) { TColorStyle::m_currentFrame = app->getCurrentFrame()->getFrame(); return false; } if (m_imp->m_listener) { bool ret = m_imp->m_listener->onFrameCompleted(r); if (!ret) { throw TException("Execution canceled by user"); TColorStyle::m_currentFrame = app->getCurrentFrame()->getFrame(); return false; } } } TColorStyle::m_currentFrame = app->getCurrentFrame()->getFrame(); return true; }
void InsertFxPopup::onAdd() { TFx *fx = createFx(); if (fx) { TApp *app = TApp::instance(); TXsheetHandle *xshHandle = app->getCurrentXsheet(); QList<TFxP> fxs; FxSelection *selection = dynamic_cast<FxSelection *>(app->getCurrentSelection()->getSelection()); if (selection) fxs = selection->getFxs(); TFxCommand::addFx(fx, fxs, app, app->getCurrentColumn()->getColumnIndex(), app->getCurrentFrame()->getFrameIndex()); xshHandle->notifyXsheetChanged(); } }
void BinarizePopup::showEvent(QShowEvent *e) { TApp *app = TApp::instance(); TPixel32 col1, col2; Preferences::instance()->getChessboardColors(col1, col2); m_viewer->setBgColor(col1, col2); bool ret = true; ret = ret && connect(app->getCurrentFrame(), SIGNAL(frameTypeChanged()), this, SLOT(fetchSample())); ret = ret && connect(app->getCurrentFrame(), SIGNAL(frameSwitched()), this, SLOT(fetchSample())); ret = ret && connect(app->getCurrentColumn(), SIGNAL(columnIndexSwitched()), this, SLOT(fetchSample())); ret = ret && connect(app->getCurrentLevel(), SIGNAL(xshLevelSwitched(TXshLevel *)), this, SLOT(onLevelSwitched(TXshLevel *))); ret = ret && connect(app->getCurrentLevel(), SIGNAL(xshLevelChanged()), this, SLOT(fetchSample())); assert(ret); m_previewChk->setChecked(false); fetchSample(); }
StudioPaletteViewerPanel::StudioPaletteViewerPanel(QWidget *parent) : TPanel(parent) { m_studioPaletteHandle = new TPaletteHandle(); connect(m_studioPaletteHandle, SIGNAL(colorStyleSwitched()), SLOT(onColorStyleSwitched())); connect(m_studioPaletteHandle, SIGNAL(paletteSwitched()), SLOT(onPaletteSwitched())); connect(m_studioPaletteHandle, SIGNAL(paletteLockChanged()), SLOT(onPaletteSwitched())); TApp *app = TApp::instance(); m_studioPaletteViewer = new StudioPaletteViewer( this, m_studioPaletteHandle, app->getPaletteController()->getCurrentLevelPalette(), app->getCurrentFrame(), app->getCurrentXsheet(), app->getCurrentLevel()); setWidget(m_studioPaletteViewer); }
void Filmstrip::showEvent(QShowEvent *) { TApp *app = TApp::instance(); TXshLevelHandle *levelHandle = app->getCurrentLevel(); bool ret = connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), SLOT(onLevelSwitched(TXshLevel *))); ret = ret && connect(levelHandle, SIGNAL(xshLevelChanged()), SLOT(onLevelChanged())); // updateWindowTitle is called in the onLevelChanged ret = ret && connect(app->getPaletteController()->getCurrentLevelPalette(), SIGNAL(colorStyleChangedOnMouseRelease()), SLOT(onLevelChanged())); ret = ret && connect(levelHandle, SIGNAL(xshLevelTitleChanged()), SLOT(onLevelChanged())); ret = ret && connect(m_frameArea->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(onSliderMoved(int))); TSceneHandle *sceneHandle = TApp::instance()->getCurrentScene(); ret = ret && connect(sceneHandle, SIGNAL(sceneSwitched()), this, SLOT(updateChooseLevelComboItems())); ret = ret && connect(sceneHandle, SIGNAL(castChanged()), this, SLOT(updateChooseLevelComboItems())); ret = ret && connect(TApp::instance()->getCurrentXsheet(), SIGNAL(xsheetChanged()), this, SLOT(updateChooseLevelComboItems())); ret = ret && connect(app->getCurrentFrame(), SIGNAL(frameSwitched()), this, SLOT(onFrameSwitched())); assert(ret); updateChooseLevelComboItems(); onFrameSwitched(); onLevelSwitched(0); }
bool LevelCreatePopup::apply() { TApp *app = TApp::instance(); int row = app->getCurrentFrame()->getFrame(); int col = app->getCurrentColumn()->getColumnIndex(); int i, j; ToonzScene *scene = app->getCurrentScene()->getScene(); TXsheet *xsh = scene->getXsheet(); bool validColumn = true; if (xsh->getColumn(col)) validColumn = xsh->getColumn(col)->getColumnType() == TXshColumn::eLevelType; int from = (int)m_fromFld->getValue(); int to = (int)m_toFld->getValue(); int inc = (int)m_incFld->getValue(); int step = (int)m_stepFld->getValue(); double w = m_widthFld->getValue(); double h = m_heightFld->getValue(); double dpi = m_dpiFld->getValue(); int xres = std::max(tround(w * dpi), 1); int yres = std::max(tround(h * dpi), 1); int lType = getLevelType(); std::wstring levelName = m_nameFld->text().toStdWString(); // tolgo i blanks prima e dopo i = levelName.find_first_not_of(L' '); if (i == (int)std::wstring::npos) levelName = L""; else { int j = levelName.find_last_not_of(L' '); assert(j != (int)std::wstring::npos); levelName = levelName.substr(i, j - i + 1); } if (levelName.empty()) { error(tr("No level name specified: please choose a valid level name")); return false; } if (from > to) { error(tr("Invalid frame range")); return false; } if (inc <= 0) { error(tr("Invalid increment value")); return false; } if (step <= 0) { error(tr("Invalid step value")); return false; } int numFrames = step * (((to - from) / inc) + 1); if (scene->getLevelSet()->getLevel(levelName)) { error( tr("The level name specified is already used: please choose a " "different level name")); m_nameFld->selectAll(); return false; } TFilePath parentDir(m_pathFld->getPath().toStdWString()); TFilePath fp = scene->getDefaultLevelPath(lType, levelName).withParentDir(parentDir); TFilePath actualFp = scene->decodeFilePath(fp); if (TSystem::doesExistFileOrLevel(actualFp)) { error( tr("The level name specified is already used: please choose a " "different level name")); m_nameFld->selectAll(); return false; } parentDir = scene->decodeFilePath(parentDir); if (!TFileStatus(parentDir).doesExist()) { QString question; /*question = "Folder " +toQString(parentDir) + " doesn't exist.\nDo you want to create it?";*/ question = tr("Folder %1 doesn't exist.\nDo you want to create it?") .arg(toQString(parentDir)); int ret = DVGui::MsgBox(question, QObject::tr("Yes"), QObject::tr("No")); if (ret == 0 || ret == 2) return false; try { TSystem::mkDir(parentDir); DvDirModel::instance()->refreshFolder(parentDir.getParentDir()); } catch (...) { error(tr("Unable to create") + toQString(parentDir)); return false; } } TXshLevel *level = scene->createNewLevel(lType, levelName, TDimension(), 0, fp); TXshSimpleLevel *sl = dynamic_cast<TXshSimpleLevel *>(level); assert(sl); sl->setPath(fp, true); if (lType == TZP_XSHLEVEL || lType == OVL_XSHLEVEL) { sl->getProperties()->setDpiPolicy(LevelProperties::DP_ImageDpi); sl->getProperties()->setDpi(dpi); sl->getProperties()->setImageDpi(TPointD(dpi, dpi)); sl->getProperties()->setImageRes(TDimension(xres, yres)); } /*-- これからLevelを配置しようとしているセルが空いているかどうかのチェック * --*/ bool areColumnsShifted = false; TXshCell cell = xsh->getCell(row, col); bool isInRange = true; for (i = row; i < row + numFrames; i++) { if (!cell.isEmpty()) { isInRange = false; break; } cell = xsh->getCell(i, col); } if (!validColumn) { isInRange = false; } /*-- 別のLevelに占有されていた場合、Columnを1つ右に移動 --*/ if (!isInRange) { col += 1; TApp::instance()->getCurrentColumn()->setColumnIndex(col); areColumnsShifted = true; xsh->insertColumn(col); } CreateLevelUndo *undo = new CreateLevelUndo(row, col, numFrames, step, areColumnsShifted); TUndoManager::manager()->add(undo); for (i = from; i <= to; i += inc) { TFrameId fid(i); TXshCell cell(sl, fid); if (lType == PLI_XSHLEVEL) sl->setFrame(fid, new TVectorImage()); else if (lType == TZP_XSHLEVEL) { TRasterCM32P raster(xres, yres); raster->fill(TPixelCM32()); TToonzImageP ti(raster, TRect()); ti->setDpi(dpi, dpi); sl->setFrame(fid, ti); ti->setSavebox(TRect(0, 0, xres - 1, yres - 1)); } else if (lType == OVL_XSHLEVEL) { TRaster32P raster(xres, yres); raster->clear(); TRasterImageP ri(raster); ri->setDpi(dpi, dpi); sl->setFrame(fid, ri); } for (j = 0; j < step; j++) xsh->setCell(row++, col, cell); } if (lType == TZP_XSHLEVEL || lType == OVL_XSHLEVEL) { sl->save(fp); DvDirModel::instance()->refreshFolder(fp.getParentDir()); } undo->onAdd(sl); app->getCurrentScene()->notifySceneChanged(); app->getCurrentScene()->notifyCastChange(); app->getCurrentXsheet()->notifyXsheetChanged(); // Cambia l'immagine corrente ma non cambiano ne' il frame ne' la colonna // corrente // (entrambi notificano il cambiamento dell'immagine al tool). // devo verfificare che sia settato il tool giusto. app->getCurrentTool()->onImageChanged( (TImage::Type)app->getCurrentImageType()); return true; }
ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WFlags flags) #endif : TPanel(parent) { TApp *app = TApp::instance(); QFrame *hbox = new QFrame(this); hbox->setFrameStyle(QFrame::StyledPanel); hbox->setObjectName("ComboViewerPanel"); // ToolBar m_toolbar = new Toolbar(this, false); // Tool Options m_toolOptions = new ToolOptions(); m_toolOptions->setObjectName("ComboViewerToolOptions"); // Viewer ImageUtils::FullScreenWidget *fsWidget = new ImageUtils::FullScreenWidget(this); fsWidget->setWidget(m_sceneViewer = new SceneViewer(fsWidget)); #if defined(Q_OS_WIN) && (QT_VERSION >= 0x050500) && (QT_VERSION < 0x050600) // Workaround for QTBUG-48288 // This code should be removed after updating Qt. // Qt may crash in handling WM_SIZE of m_sceneViewer in splash.finish(&w) // in main.cpp. To suppress sending WM_SIZE, set window position here. // WM_SIZE will not be sent if window poistion is not changed. ::SetWindowPos(reinterpret_cast<HWND>(m_sceneViewer->winId()), HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); #endif m_vRuler = new Ruler(this, m_sceneViewer, true); m_hRuler = new Ruler(this, m_sceneViewer, false); m_sceneViewer->setRulers(m_vRuler, m_hRuler); m_keyFrameButton = new ViewerKeyframeNavigator(this, app->getCurrentFrame()); m_keyFrameButton->setObjectHandle(app->getCurrentObject()); m_keyFrameButton->setXsheetHandle(app->getCurrentXsheet()); // FlipConsole int buttons = FlipConsole::cFullConsole; buttons &= (~FlipConsole::eSound); buttons &= (~FlipConsole::eFilledRaster); buttons &= (~FlipConsole::eDefineLoadBox); buttons &= (~FlipConsole::eUseLoadBox); /* --- layout --- */ QVBoxLayout *mainLayout = new QVBoxLayout(); mainLayout->setMargin(0); mainLayout->setSpacing(0); { mainLayout->addWidget(m_toolbar, 0); mainLayout->addWidget(m_toolOptions, 0); QGridLayout *viewerL = new QGridLayout(); viewerL->setMargin(0); viewerL->setSpacing(0); { viewerL->addWidget(m_vRuler, 1, 0); viewerL->addWidget(m_hRuler, 0, 1); viewerL->addWidget(fsWidget, 1, 1); } mainLayout->addLayout(viewerL, 1); m_flipConsole = new FlipConsole(mainLayout, buttons, false, m_keyFrameButton, "SceneViewerConsole", this, true); } hbox->setLayout(mainLayout); setWidget(hbox); m_flipConsole->enableButton(FlipConsole::eMatte, false, false); m_flipConsole->enableButton(FlipConsole::eSave, false, false); m_flipConsole->enableButton(FlipConsole::eCompare, false, false); m_flipConsole->enableButton(FlipConsole::eSaveImg, false, false); m_flipConsole->enableButton(FlipConsole::eGRed, false, false); m_flipConsole->enableButton(FlipConsole::eGGreen, false, false); m_flipConsole->enableButton(FlipConsole::eGBlue, false, false); m_flipConsole->enableButton(FlipConsole::eSound, false, true); m_flipConsole->setFrameRate(app->getCurrentScene() ->getScene() ->getProperties() ->getOutputProperties() ->getFrameRate()); m_flipConsole->setFrameHandle(TApp::instance()->getCurrentFrame()); bool ret = true; // When zoom changed, only if the viewer is active, change window title. ret = connect(m_sceneViewer, SIGNAL(onZoomChanged()), SLOT(changeWindowTitle())); ret = ret && connect(m_sceneViewer, SIGNAL(previewToggled()), SLOT(changeWindowTitle())); ret = ret && connect(m_flipConsole, SIGNAL(playStateChanged(bool)), TApp::instance()->getCurrentFrame(), SLOT(setPlaying(bool))); ret = ret && connect(m_flipConsole, SIGNAL(buttonPressed(FlipConsole::EGadget)), m_sceneViewer, SLOT(onButtonPressed(FlipConsole::EGadget))); ret = ret && connect(m_sceneViewer, SIGNAL(previewStatusChanged()), this, SLOT(update())); ret = ret && connect(app->getCurrentScene(), SIGNAL(sceneSwitched()), this, SLOT(onSceneSwitched())); assert(ret); // note: initializeTitleBar() refers to m_sceneViewer initializeTitleBar(getTitleBar()); // initial state of the parts m_visibleFlag[CVPARTS_TOOLBAR] = true; m_visibleFlag[CVPARTS_TOOLOPTIONS] = true; m_visibleFlag[CVPARTS_FLIPCONSOLE] = true; updateShowHide(); }
void ComboViewerPanel::changeWindowTitle() { TApp *app = TApp::instance(); ToonzScene *scene = app->getCurrentScene()->getScene(); if (!scene) return; int frame = app->getCurrentFrame()->getFrame(); // put the titlebar texts in this string QString name; // if the frame type is "scene editing" if (app->getCurrentFrame()->isEditingScene()) { QString sceneName = QString::fromStdWString(scene->getSceneName()); if (sceneName.isEmpty()) sceneName = tr("Untitled"); if (app->getCurrentScene()->getDirtyFlag()) sceneName += QString(" *"); name = tr("Scene: ") + sceneName; if (frame >= 0) name = name + tr(" :: Frame: ") + tr(std::to_string(frame + 1).c_str()); int col = app->getCurrentColumn()->getColumnIndex(); if (col < 0) { setWindowTitle(name); return; } TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); TXshCell cell = xsh->getCell(frame, col); if (cell.isEmpty()) { setWindowTitle(name); return; } assert(cell.m_level.getPointer()); TFilePath fp(cell.m_level->getName()); QString imageName = QString::fromStdWString(fp.withFrame(cell.m_frameId).getWideString()); name = name + tr(" :: Level: ") + imageName; if (m_sceneViewer->isPreviewEnabled()) { name = name + " :: Zoom : " + QString::number((int)(100.0 * sqrt(m_sceneViewer->getViewMatrix().det()) * m_sceneViewer->getDpiFactor())) + "%"; } // If the current level exists and some option is set in the preference, // set the zoom value to the current level's dpi else if (Preferences::instance() ->isActualPixelViewOnSceneEditingModeEnabled() && TApp::instance()->getCurrentLevel()->getSimpleLevel() && !CleanupPreviewCheck::instance() ->isEnabled() // cleanup preview must be OFF && !CameraTestCheck::instance() ->isEnabled()) // camera test mode must be OFF neither { name = name + " :: Zoom : " + QString::number((int)(100.0 * sqrt(m_sceneViewer->getViewMatrix().det()) * m_sceneViewer->getDpiFactor())) + "%"; } } // if the frame type is "level editing" else { TXshLevel *level = app->getCurrentLevel()->getLevel(); if (level) { TFilePath fp(level->getName()); QString imageName = QString::fromStdWString( fp.withFrame(app->getCurrentFrame()->getFid()).getWideString()); name = name + tr("Level: ") + imageName; name = name + " :: Zoom : " + QString::number((int)(100.0 * sqrt(m_sceneViewer->getViewMatrix().det()) * m_sceneViewer->getDpiFactor())) + "%"; } } setWindowTitle(name); }
void ComboViewerPanel::showEvent(QShowEvent *) { TApp *app = TApp::instance(); TFrameHandle *frameHandle = app->getCurrentFrame(); TSceneHandle *sceneHandle = app->getCurrentScene(); TXshLevelHandle *levelHandle = app->getCurrentLevel(); TObjectHandle *objectHandle = app->getCurrentObject(); TXsheetHandle *xshHandle = app->getCurrentXsheet(); bool ret = true; /*! onSceneChanged(): called when the scene changed - set new scene's FPS - update the range of frame slider with a new framehandle - set the marker - update key frames */ ret = connect(xshHandle, SIGNAL(xsheetChanged()), this, SLOT(onSceneChanged())); ret = ret && connect(sceneHandle, SIGNAL(sceneSwitched()), this, SLOT(onSceneChanged())); ret = ret && connect(sceneHandle, SIGNAL(sceneChanged()), this, SLOT(onSceneChanged())); /*! changeWindowTitle(): called when the scene / level / frame is changed - chenge the title text */ ret = ret && connect(sceneHandle, SIGNAL(nameSceneChanged()), this, SLOT(changeWindowTitle())); ret = ret && connect(levelHandle, SIGNAL(xshLevelChanged()), this, SLOT(changeWindowTitle())); ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this, SLOT(changeWindowTitle())); // onXshLevelSwitched(TXshLevel*): changeWindowTitle() + updateFrameRange() ret = ret && connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this, SLOT(onXshLevelSwitched(TXshLevel *))); // updateFrameRange(): update the frame slider's range ret = ret && connect(levelHandle, SIGNAL(xshLevelChanged()), this, SLOT(updateFrameRange())); // onFrameTypeChanged(): reset the marker positions in the flip console ret = ret && connect(frameHandle, SIGNAL(frameTypeChanged()), this, SLOT(onFrameTypeChanged())); // onFrameChanged(): update the flipconsole according to the current frame ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this, SLOT(onFrameChanged())); ret = ret && connect(app->getCurrentTool(), SIGNAL(toolSwitched()), m_sceneViewer, SLOT(onToolSwitched())); ret = ret && connect(sceneHandle, SIGNAL(preferenceChanged()), m_flipConsole, SLOT(onPreferenceChanged())); m_flipConsole->onPreferenceChanged(); assert(ret); m_flipConsole->setActive(true); // refresh onSceneChanged(); changeWindowTitle(); }
void FilmstripFrames::mousePressEvent(QMouseEvent *event) { m_selecting = false; int index = y2index(event->pos().y()); TFrameId fid = index2fid(index); TXshSimpleLevel *sl = getLevel(); int i0 = y2index(0); int frameHeight = m_iconSize.height() + fs_frameSpacing + fs_iconMarginTop + fs_iconMarginBottom; QPoint clickedPos = event->pos() - QPoint(0, (index - i0) * frameHeight); if (event->button() == Qt::LeftButton) { if (fid == TFrameId()) return; ComboViewerPanel *inknPaintViewerPanel = TApp::instance()->getInknPaintViewerPanel(); // navigator pan if (fid == TApp::instance()->getCurrentFrame()->getFid() && sl->getType() == TZP_XSHLEVEL && inknPaintViewerPanel && inknPaintViewerPanel->isVisible() && QRect(QPoint(fs_leftMargin + fs_iconMarginLR, fs_frameSpacing / 2 + fs_iconMarginTop) //<- top-left position of the icon , m_iconSize) .contains(clickedPos)) { m_isNavigatorPanning = true; execNavigatorPan(event->pos()); QApplication::setOverrideCursor(Qt::ClosedHandCursor); } else m_isNavigatorPanning = false; if (event->modifiers() & Qt::ShiftModifier) { select(index, SHIFT_SELECT); if (m_selection->isSelected(fid)) { // click su di un frame gia' selezionato. Puo' essere l'inizio di un // drag'n'drop m_dragDropArmed = true; m_pos = event->pos(); } } else if (event->modifiers() & Qt::ControlModifier) select(index, CTRL_SELECT); // inbetween else if (sl->getType() == PLI_XSHLEVEL && m_selection->isInInbetweenRange(fid) && event->pos().x() > width() - 20 - fs_rightMargin) { inbetween(); } else { // move current frame when clicked without modifier TApp *tapp = TApp::instance(); std::vector<TFrameId> fids; TXshLevel *level = tapp->getCurrentLevel()->getLevel(); level->getFids(fids); tapp->getCurrentFrame()->setFrameIds(fids); tapp->getCurrentFrame()->setFid(fid); if (!m_selection->isSelected(fid)) // selezione semplice { // click su un frame non selezionato m_selecting = true; // posso estendere la selezione con il drag select(index, START_DRAG_SELECT); } else if (m_selection->isSelected(fid)) { // click su di un frame gia' selezionato. Puo' essere l'inizio di un // drag'n'drop m_dragDropArmed = true; m_pos = event->pos(); } } update(); } else if (event->button() == Qt::MidButton) { m_pos = event->globalPos(); return; } else if (event->button() == Qt::RightButton) { select(index); } }