diff --git a/toonz/sources/toonz/comboviewerpane.cpp b/toonz/sources/toonz/comboviewerpane.cpp index 53c6e49..037e288 100644 --- a/toonz/sources/toonz/comboviewerpane.cpp +++ b/toonz/sources/toonz/comboviewerpane.cpp @@ -1,78 +1,30 @@ - -// TnzCore includes -#include "tconvert.h" -#include "tgeometry.h" -#include "tgl.h" -#include "trop.h" -#include "tstopwatch.h" -#include "tsystem.h" - -// TnzLib includes -#include "toonz/tscenehandle.h" -#include "toonz/txsheethandle.h" -#include "toonz/tframehandle.h" -#include "toonz/tcolumnhandle.h" -#include "toonz/txshlevelhandle.h" -#include "toonz/toonzscene.h" -#include "toonz/sceneproperties.h" -#include "toonz/txsheet.h" -#include "toonz/stage.h" -#include "toonz/stage2.h" -#include "toonz/txshlevel.h" -#include "toonz/txshcell.h" -#include "toonz/tcamera.h" -#include "toonz/tstageobjecttree.h" -#include "toonz/tobjecthandle.h" -#include "toonz/tpalettehandle.h" -#include "toonz/tonionskinmaskhandle.h" -#include "toutputproperties.h" -#include "toonz/palettecontroller.h" -#include "toonz/toonzfolders.h" -#include "toonz/preferences.h" -#include "toonz/tproject.h" - // TnzQt includes -#include "toonzqt/menubarcommand.h" -#include "toonzqt/dvdialog.h" -#include "toonzqt/gutil.h" #include "toonzqt/imageutils.h" -#include "toonzqt/flipconsole.h" - // TnzTools includes -#include "tools/toolhandle.h" #include "tools/tooloptions.h" - // Tnz6 includes #include "tapp.h" -#include "mainwindow.h" -#include "sceneviewer.h" -#include "xsheetdragtool.h" +#include "toolbar.h" #include "ruler.h" #include "menubarcommandids.h" -#include "toolbar.h" - // Qt includes -#include #include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include #include "comboviewerpane.h" -using namespace DVGui; - +// this enum is to keep comaptibility with older versions +enum CV_Parts { + CVPARTS_None = 0, + CVPARTS_TOOLBAR = 0x1, + CVPARTS_TOOLOPTIONS = 0x2, + CVPARTS_FLIPCONSOLE = 0x4, + CVPARTS_End = 0x8, + CVPARTS_ALL = CVPARTS_TOOLBAR | CVPARTS_TOOLOPTIONS | CVPARTS_FLIPCONSOLE +}; //============================================================================= // // ComboViewerPanel @@ -81,60 +33,26 @@ using namespace DVGui; //----------------------------------------------------------------------------- -#if QT_VERSION >= 0x050500 ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WindowFlags flags) -#else -ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WFlags flags) -#endif - : QFrame(parent) { - TApp *app = TApp::instance(); - - setFrameStyle(QFrame::StyledPanel); + : BaseViewerPanel(parent, flags) { setObjectName("ComboViewerPanel"); + TApp *app = TApp::instance(); + // 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)); - m_sceneViewer->setIsStyleShortcutSwitchable(); - -#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 position is not changed. - ::SetWindowPos(reinterpret_cast(m_sceneViewer->winId()), HWND_TOP, 0, 0, - 0, 0, SWP_NOMOVE | SWP_NOSIZE); -#endif - + // Rulers 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 - std::vector buttonMask = {FlipConsole::eFilledRaster, - FlipConsole::eDefineLoadBox, - FlipConsole::eUseLoadBox}; - /* --- layout --- */ - QVBoxLayout *mainLayout = new QVBoxLayout(); - mainLayout->setMargin(0); - mainLayout->setSpacing(0); { - mainLayout->addWidget(m_toolbar, 0); - mainLayout->addWidget(m_toolOptions, 0); + m_mainLayout->insertWidget(0, m_toolbar, 0); + m_mainLayout->insertWidget(1, m_toolOptions, 0); QGridLayout *viewerL = new QGridLayout(); viewerL->setMargin(0); @@ -142,68 +60,23 @@ ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WFlags flags) { viewerL->addWidget(m_vRuler, 1, 0); viewerL->addWidget(m_hRuler, 0, 1); - viewerL->addWidget(fsWidget, 1, 1); + viewerL->addWidget(m_fsWidget, 1, 1); } - mainLayout->addLayout(viewerL, 1); - m_flipConsole = - new FlipConsole(mainLayout, buttonMask, false, m_keyFrameButton, - "SceneViewerConsole", this, true); + viewerL->setRowStretch(1, 1); + viewerL->setColumnStretch(1, 1); + m_mainLayout->insertLayout(2, viewerL, 1); } - setLayout(mainLayout); - - 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, false); - - m_flipConsole->setFrameRate(app->getCurrentScene() - ->getScene() - ->getProperties() - ->getOutputProperties() - ->getFrameRate()); - m_flipConsole->setFrameHandle(TApp::instance()->getCurrentFrame()); + setLayout(m_mainLayout); bool ret = true; - // When zoom changed, only if the viewer is active, change window title. - ret = - ret && connect(m_flipConsole, SIGNAL(buttonPressed(FlipConsole::EGadget)), - this, SLOT(onButtonPressed(FlipConsole::EGadget))); - 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(playStateChanged(bool)), this, - SLOT(onPlayingStatusChanged(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(m_sceneViewer, SIGNAL(onFlipHChanged(bool)), this, - SLOT(setFlipHButtonChecked(bool))); - ret = ret && connect(m_sceneViewer, SIGNAL(onFlipVChanged(bool)), this, - SLOT(setFlipVButtonChecked(bool))); - ret = ret && connect(app->getCurrentScene(), SIGNAL(sceneSwitched()), this, - SLOT(onSceneSwitched())); - assert(ret); - m_flipConsole->setChecked(FlipConsole::eSound, true); - m_playSound = m_flipConsole->isChecked(FlipConsole::eSound); - // initial state of the parts - m_visiblePartsFlag = CVPARTS_ALL; + m_visiblePartsFlag = VPPARTS_COMBO_ALL; updateShowHide(); - - setFocusProxy(m_sceneViewer); } //----------------------------------------------------------------------------- @@ -212,22 +85,11 @@ ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WFlags flags) void ComboViewerPanel::updateShowHide() { // toolbar - m_toolbar->setVisible(m_visiblePartsFlag & CVPARTS_TOOLBAR); + m_toolbar->setVisible(m_visiblePartsFlag & VPPARTS_TOOLBAR); // tool options bar - m_toolOptions->setVisible(m_visiblePartsFlag & CVPARTS_TOOLOPTIONS); + m_toolOptions->setVisible(m_visiblePartsFlag & VPPARTS_TOOLOPTIONS); // flip console - m_flipConsole->showHideAllParts(m_visiblePartsFlag & CVPARTS_FLIPCONSOLE); - update(); -} - -//----------------------------------------------------------------------------- -/*! showing the show/hide commands - */ - -void ComboViewerPanel::contextMenuEvent(QContextMenuEvent *event) { - QMenu *menu = new QMenu(this); - addShowHideContextMenu(menu); - menu->exec(event->globalPos()); + BaseViewerPanel::updateShowHide(); } //----------------------------------------------------------------------------- @@ -237,25 +99,31 @@ void ComboViewerPanel::addShowHideContextMenu(QMenu *menu) { // actions QAction *toolbarSHAct = showHideMenu->addAction(tr("Toolbar")); QAction *toolOptionsSHAct = showHideMenu->addAction(tr("Tool Options Bar")); - QAction *flipConsoleSHAct = showHideMenu->addAction(tr("Console")); + QAction *playbarSHAct = showHideMenu->addAction(tr("Playback Toolbar")); + QAction *frameSliderSHAct = showHideMenu->addAction(tr("Frame Slider")); toolbarSHAct->setCheckable(true); - toolbarSHAct->setChecked(m_visiblePartsFlag & CVPARTS_TOOLBAR); - toolbarSHAct->setData((UINT)CVPARTS_TOOLBAR); + toolbarSHAct->setChecked(m_visiblePartsFlag & VPPARTS_TOOLBAR); + toolbarSHAct->setData((UINT)VPPARTS_TOOLBAR); toolOptionsSHAct->setCheckable(true); - toolOptionsSHAct->setChecked(m_visiblePartsFlag & CVPARTS_TOOLOPTIONS); - toolOptionsSHAct->setData((UINT)CVPARTS_TOOLOPTIONS); + toolOptionsSHAct->setChecked(m_visiblePartsFlag & VPPARTS_TOOLOPTIONS); + toolOptionsSHAct->setData((UINT)VPPARTS_TOOLOPTIONS); - flipConsoleSHAct->setCheckable(true); - flipConsoleSHAct->setChecked(m_visiblePartsFlag & CVPARTS_FLIPCONSOLE); - flipConsoleSHAct->setData((UINT)CVPARTS_FLIPCONSOLE); + playbarSHAct->setCheckable(true); + playbarSHAct->setChecked(m_visiblePartsFlag & VPPARTS_PLAYBAR); + playbarSHAct->setData((UINT)VPPARTS_PLAYBAR); + + frameSliderSHAct->setCheckable(true); + frameSliderSHAct->setChecked(m_visiblePartsFlag & VPPARTS_FRAMESLIDER); + frameSliderSHAct->setData((UINT)VPPARTS_FRAMESLIDER); QActionGroup *showHideActGroup = new QActionGroup(this); showHideActGroup->setExclusive(false); showHideActGroup->addAction(toolbarSHAct); showHideActGroup->addAction(toolOptionsSHAct); - showHideActGroup->addAction(flipConsoleSHAct); + showHideActGroup->addAction(playbarSHAct); + showHideActGroup->addAction(frameSliderSHAct); connect(showHideActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onShowHideActionTriggered(QAction *))); @@ -272,610 +140,18 @@ void ComboViewerPanel::addShowHideContextMenu(QMenu *menu) { } //----------------------------------------------------------------------------- -/*! slot function for show/hide the parts - */ - -void ComboViewerPanel::onShowHideActionTriggered(QAction *act) { - CV_Parts part = (CV_Parts)act->data().toUInt(); - assert(part < CVPARTS_End); - - m_visiblePartsFlag ^= part; - - updateShowHide(); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::onDrawFrame(int frame, - const ImagePainter::VisualSettings &settings, - QElapsedTimer *, qint64) { - 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) { - int oldFrame = frameHandle->getFrame(); - frameHandle->setCurrentFrame(frame); - if (!frameHandle->isPlaying() && !frameHandle->isEditingLevel() && - oldFrame != frameHandle->getFrame()) - frameHandle->scrubXsheet( - frame - 1, frame - 1, - TApp::instance()->getCurrentXsheet()->getXsheet()); - } - - else if (settings.m_blankColor != TPixel::Transparent) - m_sceneViewer->update(); -} -//----------------------------------------------------------------------------- - -ComboViewerPanel::~ComboViewerPanel() {} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::showEvent(QShowEvent *event) { - 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(sceneHandle, SIGNAL(preferenceChanged(const QString &)), - m_flipConsole, SLOT(onPreferenceChanged(const QString &))); - - 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 *))); - ret = ret && connect(levelHandle, SIGNAL(xshLevelTitleChanged()), this, - SLOT(changeWindowTitle())); - // 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())); - - assert(ret); - - m_flipConsole->setActive(true); - m_flipConsole->onPreferenceChanged(""); - - // refresh - onSceneChanged(); - changeWindowTitle(); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::hideEvent(QHideEvent *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())); - disconnect(app->getCurrentScene(), SIGNAL(preferenceChanged(const QString &)), - m_flipConsole, SLOT(onPreferenceChanged(const QString &))); - - m_flipConsole->setActive(false); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::initializeTitleBar(TPanelTitleBar *titleBar) { - bool ret = true; - - TPanelTitleBarButtonSet *viewModeButtonSet; - m_referenceModeBs = viewModeButtonSet = new TPanelTitleBarButtonSet(); - int x = -232; - int iconWidth = 20; - TPanelTitleBarButton *button; - - // buttons for show / hide toggle for the field guide and the safe area - TPanelTitleBarButtonForSafeArea *safeAreaButton = - new TPanelTitleBarButtonForSafeArea( - titleBar, getIconThemePath("actions/20/pane_safe.svg")); - safeAreaButton->setToolTip(tr("Safe Area (Right Click to Select)")); - titleBar->add(QPoint(x, 0), safeAreaButton); - ret = ret && connect(safeAreaButton, SIGNAL(toggled(bool)), - CommandManager::instance()->getAction(MI_SafeArea), - SLOT(trigger())); - ret = ret && connect(CommandManager::instance()->getAction(MI_SafeArea), - SIGNAL(triggered(bool)), safeAreaButton, - SLOT(setPressed(bool))); - // initialize state - safeAreaButton->setPressed( - CommandManager::instance()->getAction(MI_SafeArea)->isChecked()); - - button = new TPanelTitleBarButton( - titleBar, getIconThemePath("actions/20/pane_grid.svg")); - button->setToolTip(tr("Field Guide")); - x += 1 + iconWidth; - titleBar->add(QPoint(x, 0), button); - ret = ret && connect(button, SIGNAL(toggled(bool)), - CommandManager::instance()->getAction(MI_FieldGuide), - SLOT(trigger())); - ret = ret && connect(CommandManager::instance()->getAction(MI_FieldGuide), - SIGNAL(triggered(bool)), button, SLOT(setPressed(bool))); - // initialize state - button->setPressed( - CommandManager::instance()->getAction(MI_FieldGuide)->isChecked()); - - // view mode toggles - button = new TPanelTitleBarButton( - titleBar, getIconThemePath("actions/20/pane_table.svg")); - button->setToolTip(tr("Camera Stand View")); - x += 10 + 1 + iconWidth; - titleBar->add(QPoint(x, 0), button); - button->setButtonSet(viewModeButtonSet, SceneViewer::NORMAL_REFERENCE); - button->setPressed(true); - - button = new TPanelTitleBarButton(titleBar, - getIconThemePath("actions/20/pane_3d.svg")); - button->setToolTip(tr("3D View")); - x += +1 + iconWidth; - titleBar->add(QPoint(x, 0), button); - button->setButtonSet(viewModeButtonSet, SceneViewer::CAMERA3D_REFERENCE); - - button = new TPanelTitleBarButton( - titleBar, getIconThemePath("actions/20/pane_cam.svg")); - button->setToolTip(tr("Camera View")); - x += +1 + iconWidth; - titleBar->add(QPoint(x, 0), button); - button->setButtonSet(viewModeButtonSet, SceneViewer::CAMERA_REFERENCE); - ret = ret && connect(viewModeButtonSet, SIGNAL(selected(int)), m_sceneViewer, - SLOT(setReferenceMode(int))); - - // freeze button - button = new TPanelTitleBarButton( - titleBar, getIconThemePath("actions/20/pane_freeze.svg")); - x += 10 + iconWidth; - - button->setToolTip(tr("Freeze")); - titleBar->add(QPoint(x, 0), button); - ret = ret && connect(button, SIGNAL(toggled(bool)), m_sceneViewer, - SLOT(freeze(bool))); - - // preview toggles - m_previewButton = new TPanelTitleBarButton( - titleBar, getIconThemePath("actions/20/pane_preview.svg")); - x += 10 + iconWidth; - titleBar->add(QPoint(x, 0), m_previewButton); - m_previewButton->setToolTip(tr("Preview")); - ret = ret && connect(m_previewButton, SIGNAL(toggled(bool)), - SLOT(enableFullPreview(bool))); - - m_subcameraPreviewButton = new TPanelTitleBarButton( - titleBar, getIconThemePath("actions/20/pane_subpreview.svg")); - x += +1 + 24; // width of pane_preview_off.svg = 22px - - titleBar->add(QPoint(x, 0), m_subcameraPreviewButton); - m_subcameraPreviewButton->setToolTip(tr("Sub-camera Preview")); - ret = ret && connect(m_subcameraPreviewButton, SIGNAL(toggled(bool)), - SLOT(enableSubCameraPreview(bool))); - - assert(ret); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::enableFullPreview(bool enabled) { - m_subcameraPreviewButton->setPressed(false); - m_sceneViewer->enablePreview(enabled ? SceneViewer::FULL_PREVIEW - : SceneViewer::NO_PREVIEW); - m_flipConsole->setProgressBarStatus( - &Previewer::instance(false)->getProgressBarStatus()); - enableFlipConsoleForCamerastand(enabled); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::enableSubCameraPreview(bool enabled) { - m_previewButton->setPressed(false); - m_sceneViewer->enablePreview(enabled ? SceneViewer::SUBCAMERA_PREVIEW - : SceneViewer::NO_PREVIEW); - m_flipConsole->setProgressBarStatus( - &Previewer::instance(true)->getProgressBarStatus()); - enableFlipConsoleForCamerastand(enabled); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::enableFlipConsoleForCamerastand(bool on) { - m_flipConsole->enableButton(FlipConsole::eMatte, on, false); - m_flipConsole->enableButton(FlipConsole::eSave, on, false); - m_flipConsole->enableButton(FlipConsole::eCompare, on, false); - m_flipConsole->enableButton(FlipConsole::eSaveImg, on, false); - m_flipConsole->enableButton(FlipConsole::eGRed, on, false); - m_flipConsole->enableButton(FlipConsole::eGGreen, on, false); - m_flipConsole->enableButton(FlipConsole::eGBlue, on, false); - m_flipConsole->enableButton(FlipConsole::eBlackBg, on, false); - m_flipConsole->enableButton(FlipConsole::eWhiteBg, on, false); - m_flipConsole->enableButton(FlipConsole::eCheckBg, on, false); - - m_flipConsole->enableProgressBar(on); - update(); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::onXshLevelSwitched(TXshLevel *) { - changeWindowTitle(); - m_sceneViewer->update(); - // If the level is switched by using the combobox in the film strip, the - // current level switches without change in the frame type (level or scene). - // For such case, update the frame range of the console here. - if (TApp::instance()->getCurrentFrame()->isEditingLevel()) updateFrameRange(); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::onPlayingStatusChanged(bool playing) { - if (playing) { - m_playing = true; - } else { - m_playing = false; - m_first = true; - } - if (Preferences::instance()->getOnionSkinDuringPlayback()) return; - OnionSkinMask osm = - TApp::instance()->getCurrentOnionSkin()->getOnionSkinMask(); - if (playing) { - m_onionSkinActive = osm.isEnabled(); - if (m_onionSkinActive) { - osm.enable(false); - TApp::instance()->getCurrentOnionSkin()->setOnionSkinMask(osm); - TApp::instance()->getCurrentOnionSkin()->notifyOnionSkinMaskChanged(); - } - } else { - if (m_onionSkinActive) { - osm.enable(true); - TApp::instance()->getCurrentOnionSkin()->setOnionSkinMask(osm); - TApp::instance()->getCurrentOnionSkin()->notifyOnionSkinMaskChanged(); - } - } - m_sceneViewer->invalidateToolStatus(); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::changeWindowTitle() { - TApp *app = TApp::instance(); - ToonzScene *scene = app->getCurrentScene()->getScene(); - if (!scene) return; - if (!parentWidget()) 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()) { - TProject *project = scene->getProject(); - 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) { - if ((m_sceneViewer->getIsFlippedX() || m_sceneViewer->getIsFlippedY()) && - !m_sceneViewer->is3DView()) { - name = name + tr(" (Flipped)"); - } - parentWidget()->setWindowTitle(name); - return; - } - TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); - TXshCell cell = xsh->getCell(frame, col); - if (cell.isEmpty()) { - if ((m_sceneViewer->getIsFlippedX() || m_sceneViewer->getIsFlippedY()) && - !m_sceneViewer->is3DView()) { - name = name + tr(" (Flipped)"); - } - parentWidget()->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->is3DView()) { - TAffine aff = m_sceneViewer->getViewMatrix() * - m_sceneViewer->getNormalZoomScale().inv(); - if (m_sceneViewer->getIsFlippedX()) aff = aff * TScale(-1, 1); - if (m_sceneViewer->getIsFlippedY()) aff = aff * TScale(1, -1); - name = name + " :: Zoom : " + - QString::number(tround(100.0 * sqrt(aff.det()))) + "%"; - } - - // 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() // camera test mode must be OFF - // neither - ->isEnabled() && - !m_sceneViewer->is3DView()) { - TAffine aff = m_sceneViewer->getViewMatrix() * - m_sceneViewer->getNormalZoomScale().inv(); - if (m_sceneViewer->getIsFlippedX()) aff = aff * TScale(-1, 1); - if (m_sceneViewer->getIsFlippedY()) aff = aff * TScale(1, -1); - name = name + " :: Zoom : " + - QString::number(tround(100.0 * sqrt(aff.det()))) + "%"; - } - - } - // 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; - if (!m_sceneViewer->is3DView()) { - TAffine aff = m_sceneViewer->getViewMatrix() * - m_sceneViewer->getNormalZoomScale().inv(); - if (m_sceneViewer->getIsFlippedX()) aff = aff * TScale(-1, 1); - if (m_sceneViewer->getIsFlippedY()) aff = aff * TScale(1, -1); - name = name + " :: Zoom : " + - QString::number(tround(100.0 * sqrt(aff.det()))) + "%"; - } - } - } - if ((m_sceneViewer->getIsFlippedX() || m_sceneViewer->getIsFlippedY()) && - !m_sceneViewer->is3DView()) { - name = name + tr(" (Flipped)"); - } - parentWidget()->setWindowTitle(name); -} - -//----------------------------------------------------------------------------- -/*! update the frame range according to the current frame type - */ -void ComboViewerPanel::updateFrameRange() { - TFrameHandle *fh = TApp::instance()->getCurrentFrame(); - int frameIndex = fh->getFrameIndex(); - int maxFrameIndex = fh->getMaxFrameIndex(); - if (frameIndex > maxFrameIndex) frameIndex = maxFrameIndex; - m_flipConsole->setFrameRange(1, maxFrameIndex + 1, 1, frameIndex + 1); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::onSceneChanged() { - TFrameHandle *fh = TApp::instance()->getCurrentFrame(); - int frameIndex = fh->getFrameIndex(); - int maxFrameIndex = fh->getMaxFrameIndex(); - if (frameIndex > maxFrameIndex) maxFrameIndex = frameIndex; - // update fps only when the scene settings is changed - m_flipConsole->setFrameRate(TApp::instance() - ->getCurrentScene() - ->getScene() - ->getProperties() - ->getOutputProperties() - ->getFrameRate(), - false); - // update the frame slider's range with new frameHandle - m_flipConsole->setFrameRange(1, maxFrameIndex + 1, 1, frameIndex + 1); - - // set the markers - int fromIndex, toIndex, dummy; - XsheetGUI::getPlayRange(fromIndex, toIndex, dummy); - m_flipConsole->setMarkers(fromIndex, toIndex); - - // update the key frames - if (m_keyFrameButton && (m_keyFrameButton->getCurrentFrame() != frameIndex)) - m_keyFrameButton->setCurrentFrame(frameIndex); - hasSoundtrack(); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::onSceneSwitched() { - m_previewButton->setPressed(false); - m_subcameraPreviewButton->setPressed(false); - enableFlipConsoleForCamerastand(false); - m_sceneViewer->enablePreview(SceneViewer::NO_PREVIEW); - m_flipConsole->setChecked(FlipConsole::eDefineSubCamera, false); - m_flipConsole->setFrameRate(TApp::instance() - ->getCurrentScene() - ->getScene() - ->getProperties() - ->getOutputProperties() - ->getFrameRate()); - m_sceneViewer->setEditPreviewSubcamera(false); - onSceneChanged(); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::onFrameChanged() { - int frameIndex = TApp::instance()->getCurrentFrame()->getFrameIndex(); - m_flipConsole->setCurrentFrame(frameIndex + 1); - if (m_keyFrameButton && (m_keyFrameButton->getCurrentFrame() != frameIndex)) - m_keyFrameButton->setCurrentFrame(frameIndex); - - if (m_playing && m_playSound) { - if (m_first == true && hasSoundtrack()) { - playAudioFrame(frameIndex); - } else if (m_hasSoundtrack) { - playAudioFrame(frameIndex); - } - } -} - -//----------------------------------------------------------------------------- -/*! reset the marker positions in the flip console - */ -void ComboViewerPanel::onFrameTypeChanged() { - if (TApp::instance()->getCurrentFrame()->getFrameType() == - TFrameHandle::LevelFrame && - m_sceneViewer->isPreviewEnabled()) { - m_previewButton->setPressed(false); - m_subcameraPreviewButton->setPressed(false); - enableFlipConsoleForCamerastand(false); - m_sceneViewer->enablePreview(SceneViewer::NO_PREVIEW); - } - m_flipConsole->setChecked(FlipConsole::eDefineSubCamera, false); - m_sceneViewer->setEditPreviewSubcamera(false); - - updateFrameRange(); - - // if in the scene editing mode, get the preview marker positions - if (TApp::instance()->getCurrentFrame()->isEditingScene()) { - // set the markers - int fromIndex, toIndex, dummy; - XsheetGUI::getPlayRange(fromIndex, toIndex, dummy); - m_flipConsole->setMarkers(fromIndex, toIndex); - } - // if in the level editing mode, ignore the preview marker - else - m_flipConsole->setMarkers(0, -1); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::playAudioFrame(int frame) { - if (m_first) { - m_first = false; - m_fps = TApp::instance() - ->getCurrentScene() - ->getScene() - ->getProperties() - ->getOutputProperties() - ->getFrameRate(); - m_samplesPerFrame = m_sound->getSampleRate() / std::abs(m_fps); - } - if (!m_sound) return; - m_viewerFps = m_flipConsole->getCurrentFps(); - double s0 = frame * m_samplesPerFrame, s1 = s0 + m_samplesPerFrame; - // make the sound stop if the viewerfps is higher so the next sound can play - // on time. - if (m_fps < m_viewerFps) - TApp::instance()->getCurrentXsheet()->getXsheet()->stopScrub(); - TApp::instance()->getCurrentXsheet()->getXsheet()->play(m_sound, s0, s1, - false); -} - -//----------------------------------------------------------------------------- - -bool ComboViewerPanel::hasSoundtrack() { - if (m_sound != NULL) { - m_sound = NULL; - m_hasSoundtrack = false; - m_first = true; - } - TXsheetHandle *xsheetHandle = TApp::instance()->getCurrentXsheet(); - TXsheet::SoundProperties *prop = new TXsheet::SoundProperties(); - if (!m_sceneViewer->isPreviewEnabled()) prop->m_isPreview = true; - m_sound = xsheetHandle->getXsheet()->makeSound(prop); - if (m_sound == NULL) { - m_hasSoundtrack = false; - return false; - } else { - m_hasSoundtrack = true; - return true; - } -} - -void ComboViewerPanel::onButtonPressed(FlipConsole::EGadget button) { - if (button == FlipConsole::eSound) { - m_playSound = !m_playSound; - } -} - -void ComboViewerPanel::setFlipHButtonChecked(bool checked) { - m_flipConsole->setChecked(FlipConsole::eFlipHorizontal, checked); -} - -void ComboViewerPanel::setFlipVButtonChecked(bool checked) { - m_flipConsole->setChecked(FlipConsole::eFlipVertical, checked); -} - -//----------------------------------------------------------------------------- - -void ComboViewerPanel::setVisiblePartsFlag(UINT flag) { - m_visiblePartsFlag = flag; - updateShowHide(); -} - -// SaveLoadQSettings -void ComboViewerPanel::save(QSettings &settings) const { - settings.setValue("visibleParts", m_visiblePartsFlag); -} - -void ComboViewerPanel::load(QSettings &settings) { - m_visiblePartsFlag = settings.value("visibleParts", CVPARTS_ALL).toUInt(); - updateShowHide(); +void ComboViewerPanel::checkOldVersionVisblePartsFlags(QSettings &settings) { + if (!settings.contains("visibleParts")) return; + UINT oldVisiblePartsFlag = + settings.value("visibleParts", CVPARTS_ALL).toUInt(); + m_visiblePartsFlag = VPPARTS_None; + if (oldVisiblePartsFlag & CVPARTS_TOOLBAR) + m_visiblePartsFlag |= VPPARTS_TOOLBAR; + if (oldVisiblePartsFlag & CVPARTS_TOOLOPTIONS) + m_visiblePartsFlag |= VPPARTS_TOOLOPTIONS; + if (oldVisiblePartsFlag & CVPARTS_FLIPCONSOLE) + m_visiblePartsFlag |= VPPARTS_PLAYBAR | VPPARTS_FRAMESLIDER; + settings.remove("visibleParts"); + settings.setValue("viewerVisibleParts", m_visiblePartsFlag); } \ No newline at end of file diff --git a/toonz/sources/toonz/comboviewerpane.h b/toonz/sources/toonz/comboviewerpane.h index cb6c4f8..963cbc4 100644 --- a/toonz/sources/toonz/comboviewerpane.h +++ b/toonz/sources/toonz/comboviewerpane.h @@ -3,137 +3,34 @@ #ifndef COMBOVIEWER_PANE_INCLUDED #define COMBOVIEWER_PANE_INCLUDED -#include "sceneviewer.h" -#include "toonzqt/intfield.h" -#include "toonzqt/keyframenavigator.h" - -#include "toonzqt/flipconsoleowner.h" -#include "saveloadqsettings.h" - -#include - -class QPoint; -class QToolBar; -class QLabel; -class QSlider; -class QActionGroup; -class QButtonGroup; -class QToolBar; -class Ruler; +#include "viewerpane.h" class Toolbar; -class TPanel; -class Ruler; -class FlipConsole; -class TXshLevel; class ToolOptions; //============================================================================= // ComboViewerPanel //----------------------------------------------------------------------------- -enum CV_Parts { - CVPARTS_None = 0, - CVPARTS_TOOLBAR = 0x1, - CVPARTS_TOOLOPTIONS = 0x2, - CVPARTS_FLIPCONSOLE = 0x4, - CVPARTS_End = 0x8, - CVPARTS_ALL = CVPARTS_TOOLBAR | CVPARTS_TOOLOPTIONS | CVPARTS_FLIPCONSOLE -}; -//----------------------------------------------------------------------------- - -class ComboViewerPanel final : public QFrame, - public FlipConsoleOwner, - public SaveLoadQSettings { +class ComboViewerPanel final : public BaseViewerPanel { Q_OBJECT - SceneViewer *m_sceneViewer; - FlipConsole *m_flipConsole; - ViewerKeyframeNavigator *m_keyFrameButton; - TPanelTitleBarButtonSet *m_referenceModeBs; - Toolbar *m_toolbar; ToolOptions *m_toolOptions; Ruler *m_vRuler; Ruler *m_hRuler; - UINT m_visiblePartsFlag; - bool m_onionSkinActive = false; - bool m_playSound = true; - bool m_hasSoundtrack = false; - bool m_playing = false; - double m_fps; - int m_viewerFps; - double m_samplesPerFrame; - bool m_first = true; - TSoundTrack *m_sound = NULL; - - TPanelTitleBarButton *m_previewButton; - TPanelTitleBarButton *m_subcameraPreviewButton; public: -#if QT_VERSION >= 0x050500 ComboViewerPanel(QWidget *parent = 0, Qt::WindowFlags flags = 0); -#else - ComboViewerPanel(QWidget *parent = 0, Qt::WFlags flags = 0); -#endif - ~ComboViewerPanel(); + ~ComboViewerPanel() {} - SceneViewer *getSceneViewer() { return m_sceneViewer; } ToolOptions *getToolOptions() { return m_toolOptions; } - // toggle show/hide of the widgets according to m_visiblePartsFlag - void setVisiblePartsFlag(UINT flag); - void updateShowHide(); - void addShowHideContextMenu(QMenu *); - - void onDrawFrame(int frame, const ImagePainter::VisualSettings &settings, - QElapsedTimer *timer, qint64 targetInstant) override; - - void onEnterPanel() { - m_sceneViewer->setFocus(Qt::OtherFocusReason); - // activate shortcut key for this flipconsole - m_flipConsole->makeCurrent(); - } - void onLeavePanel() { m_sceneViewer->clearFocus(); } - - // SaveLoadQSettings - virtual void save(QSettings &settings) const override; - virtual void load(QSettings &settings) override; - - void initializeTitleBar(TPanelTitleBar *titleBar); + void updateShowHide() override; + void addShowHideContextMenu(QMenu *) override; protected: - void showEvent(QShowEvent *) override; - void hideEvent(QHideEvent *) override; - void createFrameToolBar(); - void createPlayToolBar(); - void addColorMaskButton(QWidget *parent, const char *iconSVGName, int id); - void contextMenuEvent(QContextMenuEvent *event) override; - void playAudioFrame(int frame); - bool hasSoundtrack(); - -public slots: - void onSceneChanged(); - void changeWindowTitle(); - void updateFrameRange(); - void onXshLevelSwitched(TXshLevel *); - void onPlayingStatusChanged(bool playing); - // for showing/hiding the parts - void onShowHideActionTriggered(QAction *); - void enableFlipConsoleForCamerastand(bool on); - void onButtonPressed(FlipConsole::EGadget button); - void setFlipHButtonChecked(bool checked); - void setFlipVButtonChecked(bool checked); - -protected slots: - void onFrameChanged(); - - // need to update the preview marker as well as the frame range in flipconsole - void onFrameTypeChanged(); - - void onSceneSwitched(); - void enableFullPreview(bool enabled); - void enableSubCameraPreview(bool enabled); + void checkOldVersionVisblePartsFlags(QSettings &settings) override; }; #endif diff --git a/toonz/sources/toonz/mainwindow.cpp b/toonz/sources/toonz/mainwindow.cpp index 354ad65..05a3653 100644 --- a/toonz/sources/toonz/mainwindow.cpp +++ b/toonz/sources/toonz/mainwindow.cpp @@ -727,7 +727,7 @@ Room *MainWindow::createCleanupRoom() { ComboViewerPanel *cvp = qobject_cast(viewer); if (cvp) // hide all parts - cvp->setVisiblePartsFlag(CVPARTS_None); + cvp->setVisiblePartsFlag(VPPARTS_None); } // CleanupSettings @@ -766,7 +766,7 @@ Room *MainWindow::createPltEditRoom() { layout->dockItem(viewer); ComboViewerPanel *cvp = qobject_cast(viewer); - if (cvp) cvp->setVisiblePartsFlag(CVPARTS_TOOLBAR | CVPARTS_TOOLOPTIONS); + if (cvp) cvp->setVisiblePartsFlag(VPPARTS_TOOLBAR | VPPARTS_TOOLOPTIONS); } // Palette @@ -1686,7 +1686,8 @@ void MainWindow::defineActions() { createMenuFileAction(MI_ImportMagpieFile, QT_TR_NOOP("&Import Toonz Lip Sync File..."), "", "dialogue_import"); - createMenuFileAction(MI_NewProject, QT_TR_NOOP("&New Project..."), "", "new_project"); + createMenuFileAction(MI_NewProject, QT_TR_NOOP("&New Project..."), "", + "new_project"); createMenuFileAction(MI_ProjectSettings, QT_TR_NOOP("&Project Settings..."), "", "project_settings"); createMenuFileAction(MI_SaveDefaultSettings, @@ -2113,7 +2114,8 @@ void MainWindow::defineActions() { createMenuWindowsAction(MI_OpenFileBrowser, QT_TR_NOOP("&File Browser"), "", "filebrowser"); - createMenuWindowsAction(MI_OpenPreproductionBoard, QT_TR_NOOP("&Preproduction Board"), "", + createMenuWindowsAction(MI_OpenPreproductionBoard, + QT_TR_NOOP("&Preproduction Board"), "", "scenebrowser"); createMenuWindowsAction(MI_OpenFileViewer, QT_TR_NOOP("&Flipbook"), "", "flipbook"); diff --git a/toonz/sources/toonz/sceneviewerevents.cpp b/toonz/sources/toonz/sceneviewerevents.cpp index 83ccc0d..b11a42a 100644 --- a/toonz/sources/toonz/sceneviewerevents.cpp +++ b/toonz/sources/toonz/sceneviewerevents.cpp @@ -13,7 +13,7 @@ #include "menubarcommandids.h" #include "onionskinmaskgui.h" #include "ruler.h" -#include "comboviewerpane.h" +#include "viewerpane.h" #include "locatorpopup.h" #include "cellselection.h" #include "styleshortcutswitchablepanel.h" @@ -1681,18 +1681,11 @@ void SceneViewer::onContextMenu(const QPoint &pos, const QPoint &globalPos) { menu->addLevelCommands(columnIndices); - ComboViewerPanel *cvp = - qobject_cast(parentWidget()->parentWidget()); - if (cvp) { - menu->addSeparator(); - cvp->addShowHideContextMenu(menu); - } - - SceneViewerPanel *svp = qobject_cast( - parentWidget()->parentWidget()->parentWidget()); - if (svp) { + BaseViewerPanel *bvp = + qobject_cast(parentWidget()->parentWidget()); + if (bvp) { menu->addSeparator(); - svp->addShowHideContextMenu(menu); + bvp->addShowHideContextMenu(menu); } menu->exec(globalPos); diff --git a/toonz/sources/toonz/viewerpane.cpp b/toonz/sources/toonz/viewerpane.cpp index b2f8424..b2ef1f5 100644 --- a/toonz/sources/toonz/viewerpane.cpp +++ b/toonz/sources/toonz/viewerpane.cpp @@ -65,64 +65,29 @@ #include "viewerpane.h" -enum CV_Parts { - CVPARTS_None = 0, - CVPARTS_PLAYBAR = 0x1, - CVPARTS_FRAMESLIDER = 0x4, - CVPARTS_End = 0x8, - CVPARTS_ALL = CVPARTS_PLAYBAR | CVPARTS_FRAMESLIDER -}; - using namespace DVGui; //============================================================================= // -// SceneViewerPanel +// BaseViewerPanel // //----------------------------------------------------------------------------- -#if QT_VERSION >= 0x050500 -SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WindowFlags flags) -#else -SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags) -#endif +BaseViewerPanel::BaseViewerPanel(QWidget *parent, Qt::WindowFlags flags) : QFrame(parent) { + TApp *app = TApp::instance(); + setFrameStyle(QFrame::StyledPanel); - setObjectName("ViewerPanel"); - QVBoxLayout *mainLayout = new QVBoxLayout(this); - mainLayout->setMargin(0); - mainLayout->setSpacing(0); + m_mainLayout = new QVBoxLayout(); + m_mainLayout->setMargin(0); + m_mainLayout->setSpacing(0); // Viewer - QWidget *viewer = new QWidget(this); - QGridLayout *viewerL = new QGridLayout(viewer); - - ImageUtils::FullScreenWidget *fsWidget = - new ImageUtils::FullScreenWidget(viewer); - - fsWidget->setWidget(m_sceneViewer = new SceneViewer(fsWidget)); + m_fsWidget = new ImageUtils::FullScreenWidget(this); + m_fsWidget->setWidget(m_sceneViewer = new SceneViewer(m_fsWidget)); m_sceneViewer->setIsStyleShortcutSwitchable(); - bool ret = true; - ret = ret && connect(m_sceneViewer, SIGNAL(onZoomChanged()), - SLOT(changeWindowTitle())); - - Ruler *vRuler = new Ruler(viewer, m_sceneViewer, true); - Ruler *hRuler = new Ruler(viewer, m_sceneViewer, false); - m_sceneViewer->setRulers(vRuler, hRuler); - - viewerL->setMargin(0); - viewerL->setSpacing(0); - viewerL->addWidget(vRuler, 1, 0); - viewerL->addWidget(hRuler, 0, 1); - viewerL->addWidget(fsWidget, 1, 1, 19, 13); - viewer->setMinimumHeight(200); - viewer->setLayout(viewerL); - - mainLayout->addWidget(viewer, Qt::AlignCenter); - - TApp *app = TApp::instance(); m_keyFrameButton = new ViewerKeyframeNavigator(0, app->getCurrentFrame()); m_keyFrameButton->setObjectHandle(app->getCurrentObject()); m_keyFrameButton->setXsheetHandle(app->getCurrentXsheet()); @@ -132,7 +97,7 @@ SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags) FlipConsole::eUseLoadBox}; m_flipConsole = - new FlipConsole(mainLayout, buttonMask, false, m_keyFrameButton, + new FlipConsole(m_mainLayout, buttonMask, false, m_keyFrameButton, "SceneViewerConsole", this, true); m_flipConsole->enableButton(FlipConsole::eMatte, false, false); @@ -145,9 +110,20 @@ SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags) m_flipConsole->enableButton(FlipConsole::eBlackBg, false, false); m_flipConsole->enableButton(FlipConsole::eWhiteBg, false, false); m_flipConsole->enableButton(FlipConsole::eCheckBg, false, false); + m_flipConsole->setChecked(FlipConsole::eSound, true); + m_playSound = m_flipConsole->isChecked(FlipConsole::eSound); + 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 titl + ret = ret && connect(m_sceneViewer, SIGNAL(onZoomChanged()), + SLOT(changeWindowTitle())); ret = ret && connect(m_flipConsole, SIGNAL(playStateChanged(bool)), TApp::instance()->getCurrentFrame(), SLOT(setPlaying(bool))); @@ -156,7 +132,6 @@ SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags) ret = ret && connect(m_flipConsole, SIGNAL(buttonPressed(FlipConsole::EGadget)), m_sceneViewer, SLOT(onButtonPressed(FlipConsole::EGadget))); - ret = ret && connect(m_flipConsole, SIGNAL(buttonPressed(FlipConsole::EGadget)), this, SLOT(onButtonPressed(FlipConsole::EGadget))); @@ -172,19 +147,6 @@ SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags) SLOT(onSceneSwitched())); assert(ret); - m_flipConsole->setChecked(FlipConsole::eSound, true); - m_playSound = m_flipConsole->isChecked(FlipConsole::eSound); - m_flipConsole->setFrameRate(app->getCurrentScene() - ->getScene() - ->getProperties() - ->getOutputProperties() - ->getFrameRate()); - updateFrameRange(), updateFrameMarkers(); - - setLayout(mainLayout); - - m_visiblePartsFlag = CVPARTS_ALL; - updateShowHide(); setFocusProxy(m_sceneViewer); } @@ -195,10 +157,10 @@ SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags) /*! toggle show/hide of the widgets according to m_visibleFlag */ -void SceneViewerPanel::updateShowHide() { +void BaseViewerPanel::updateShowHide() { // flip console - m_flipConsole->showHidePlaybar(m_visiblePartsFlag & CVPARTS_PLAYBAR); - m_flipConsole->showHideFrameSlider(m_visiblePartsFlag & CVPARTS_FRAMESLIDER); + m_flipConsole->showHidePlaybar(m_visiblePartsFlag & VPPARTS_PLAYBAR); + m_flipConsole->showHideFrameSlider(m_visiblePartsFlag & VPPARTS_FRAMESLIDER); update(); } @@ -206,7 +168,7 @@ void SceneViewerPanel::updateShowHide() { /*! showing the show/hide commands */ -void SceneViewerPanel::contextMenuEvent(QContextMenuEvent *event) { +void BaseViewerPanel::contextMenuEvent(QContextMenuEvent *event) { QMenu *menu = new QMenu(this); addShowHideContextMenu(menu); menu->exec(event->globalPos()); @@ -214,7 +176,7 @@ void SceneViewerPanel::contextMenuEvent(QContextMenuEvent *event) { //----------------------------------------------------------------------------- -void SceneViewerPanel::addShowHideContextMenu(QMenu *menu) { +void BaseViewerPanel::addShowHideContextMenu(QMenu *menu) { QMenu *showHideMenu = menu->addMenu(tr("GUI Show / Hide")); // actions @@ -222,12 +184,12 @@ void SceneViewerPanel::addShowHideContextMenu(QMenu *menu) { QAction *frameSliderSHAct = showHideMenu->addAction(tr("Frame Slider")); playbarSHAct->setCheckable(true); - playbarSHAct->setChecked(m_visiblePartsFlag & CVPARTS_PLAYBAR); - playbarSHAct->setData((UINT)CVPARTS_PLAYBAR); + playbarSHAct->setChecked(m_visiblePartsFlag & VPPARTS_PLAYBAR); + playbarSHAct->setData((UINT)VPPARTS_PLAYBAR); frameSliderSHAct->setCheckable(true); - frameSliderSHAct->setChecked(m_visiblePartsFlag & CVPARTS_FRAMESLIDER); - frameSliderSHAct->setData((UINT)CVPARTS_FRAMESLIDER); + frameSliderSHAct->setChecked(m_visiblePartsFlag & VPPARTS_FRAMESLIDER); + frameSliderSHAct->setData((UINT)VPPARTS_FRAMESLIDER); QActionGroup *showHideActGroup = new QActionGroup(this); showHideActGroup->setExclusive(false); @@ -252,18 +214,20 @@ void SceneViewerPanel::addShowHideContextMenu(QMenu *menu) { /*! slot function for show/hide the parts */ -void SceneViewerPanel::onShowHideActionTriggered(QAction *act) { - CV_Parts part = (CV_Parts)act->data().toUInt(); - assert(part < CVPARTS_End); +void BaseViewerPanel::onShowHideActionTriggered(QAction *act) { + VP_Parts part = (VP_Parts)act->data().toUInt(); + assert(part < VPPARTS_End); m_visiblePartsFlag ^= part; updateShowHide(); } -void SceneViewerPanel::onDrawFrame(int frame, - const ImagePainter::VisualSettings &settings, - QElapsedTimer *, qint64) { +//----------------------------------------------------------------------------- + +void BaseViewerPanel::onDrawFrame(int frame, + const ImagePainter::VisualSettings &settings, + QElapsedTimer *, qint64) { TApp *app = TApp::instance(); m_sceneViewer->setVisual(settings); @@ -282,7 +246,10 @@ void SceneViewerPanel::onDrawFrame(int frame, !pr->isFrameReady( frame - 1)) // stops on last rendered frame until current is ready! { - while (frame > 1 && !pr->isFrameReady(frame - 1)) frame--; + 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); } } @@ -304,22 +271,22 @@ void SceneViewerPanel::onDrawFrame(int frame, //----------------------------------------------------------------------------- -SceneViewerPanel::~SceneViewerPanel() {} - -//----------------------------------------------------------------------------- - -void SceneViewerPanel::showEvent(QShowEvent *event) { +void BaseViewerPanel::showEvent(QShowEvent *event) { TApp *app = TApp::instance(); TFrameHandle *frameHandle = app->getCurrentFrame(); TSceneHandle *sceneHandle = app->getCurrentScene(); TXshLevelHandle *levelHandle = app->getCurrentLevel(); - TObjectHandle *objectHandle = app->getCurrentObject(); TXsheetHandle *xshHandle = app->getCurrentXsheet(); - onSceneChanged(); - 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 = ret && connect(xshHandle, SIGNAL(xsheetChanged()), this, SLOT(onSceneChanged())); ret = ret && connect(sceneHandle, SIGNAL(sceneSwitched()), this, @@ -327,90 +294,66 @@ void SceneViewerPanel::showEvent(QShowEvent *event) { 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(sceneHandle, SIGNAL(preferenceChanged(const QString &)), - m_flipConsole, SLOT(onPreferenceChanged(const QString &))); - ret = ret && connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this, - SLOT(onXshLevelSwitched(TXshLevel *))); ret = ret && connect(levelHandle, SIGNAL(xshLevelChanged()), this, SLOT(changeWindowTitle())); ret = ret && connect(levelHandle, SIGNAL(xshLevelTitleChanged()), this, SLOT(changeWindowTitle())); + ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this, + SLOT(changeWindowTitle())); + + // updateFrameRange(): update the frame slider's range ret = ret && connect(levelHandle, SIGNAL(xshLevelChanged()), this, SLOT(updateFrameRange())); - ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this, - SLOT(changeWindowTitle())); - ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this, - SLOT(onFrameSwitched())); + // onFrameTypeChanged(): reset the marker positions in the flip console ret = ret && connect(frameHandle, SIGNAL(frameTypeChanged()), this, SLOT(onFrameTypeChanged())); + // onXshLevelSwitched(TXshLevel*)�F changeWindowTitle() + updateFrameRange() + ret = ret && connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this, + SLOT(onXshLevelSwitched(TXshLevel *))); + + // onFrameSwitched(): update the flipconsole according to the current frame + ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this, + SLOT(onFrameSwitched())); + ret = ret && connect(app->getCurrentTool(), SIGNAL(toolSwitched()), m_sceneViewer, SLOT(onToolSwitched())); + ret = + ret && connect(sceneHandle, SIGNAL(preferenceChanged(const QString &)), + m_flipConsole, SLOT(onPreferenceChanged(const QString &))); assert(ret); - // Aggiorno FPS al valore definito nel viewer corrente. - // frameHandle->setPreviewFrameRate(m_fpsSlider->value()); m_flipConsole->setActive(true); m_flipConsole->onPreferenceChanged(""); + + // refresh + onSceneChanged(); + changeWindowTitle(); } //----------------------------------------------------------------------------- -void SceneViewerPanel::hideEvent(QHideEvent *event) { - TApp *app = TApp::instance(); - TFrameHandle *frameHandle = app->getCurrentFrame(); - TSceneHandle *sceneHandle = app->getCurrentScene(); - TXshLevelHandle *levelHandle = app->getCurrentLevel(); - TObjectHandle *objectHandle = app->getCurrentObject(); - TXsheetHandle *xshHandle = app->getCurrentXsheet(); - - disconnect(xshHandle, SIGNAL(xsheetChanged()), this, SLOT(onSceneChanged())); - - disconnect(sceneHandle, SIGNAL(sceneChanged()), this, SLOT(onSceneChanged())); - disconnect(sceneHandle, SIGNAL(nameSceneChanged()), this, - SLOT(changeWindowTitle())); - disconnect(sceneHandle, SIGNAL(sceneSwitched()), this, - SLOT(onSceneChanged())); - disconnect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this, - SLOT(onXshLevelSwitched(TXshLevel *))); - disconnect(levelHandle, SIGNAL(xshLevelChanged()), this, - SLOT(changeWindowTitle())); - disconnect(levelHandle, SIGNAL(xshLevelTitleChanged()), this, - SLOT(changeWindowTitle())); - disconnect(levelHandle, SIGNAL(xshLevelChanged()), this, - SLOT(updateFrameRange())); - - disconnect(frameHandle, SIGNAL(frameSwitched()), this, - SLOT(changeWindowTitle())); - disconnect(frameHandle, SIGNAL(frameSwitched()), this, - SLOT(onFrameSwitched())); - disconnect(frameHandle, SIGNAL(frameTypeChanged()), this, - SLOT(onFrameTypeChanged())); - - disconnect(app->getCurrentTool(), SIGNAL(toolSwitched()), m_sceneViewer, - SLOT(onToolSwitched())); - disconnect(app->getCurrentScene(), SIGNAL(preferenceChanged(const QString &)), - m_flipConsole, SLOT(onPreferenceChanged(const QString &))); +void BaseViewerPanel::hideEvent(QHideEvent *event) { + TApp *app = TApp::instance(); + disconnect(app->getCurrentFrame(), nullptr, this, nullptr); + disconnect(app->getCurrentScene(), nullptr, this, nullptr); + disconnect(app->getCurrentLevel(), nullptr, this, nullptr); + disconnect(app->getCurrentXsheet(), nullptr, this, nullptr); m_flipConsole->setActive(false); } //----------------------------------------------------------------------------- -void SceneViewerPanel::resizeEvent(QResizeEvent *e) { - QWidget::resizeEvent(e); - repaint(); - m_sceneViewer->update(); -} - -//----------------------------------------------------------------------------- - -void SceneViewerPanel::initializeTitleBar(TPanelTitleBar *titleBar) { +void BaseViewerPanel::initializeTitleBar(TPanelTitleBar *titleBar) { bool ret = true; TPanelTitleBarButtonSet *viewModeButtonSet; @@ -461,14 +404,14 @@ void SceneViewerPanel::initializeTitleBar(TPanelTitleBar *titleBar) { button = new TPanelTitleBarButton(titleBar, getIconThemePath("actions/20/pane_3d.svg")); button->setToolTip(tr("3D View")); - x += +1 + iconWidth; + x += 1 + iconWidth; titleBar->add(QPoint(x, 0), button); button->setButtonSet(viewModeButtonSet, SceneViewer::CAMERA3D_REFERENCE); button = new TPanelTitleBarButton( titleBar, getIconThemePath("actions/20/pane_cam.svg")); button->setToolTip(tr("Camera View")); - x += +1 + iconWidth; + x += 1 + iconWidth; titleBar->add(QPoint(x, 0), button); button->setButtonSet(viewModeButtonSet, SceneViewer::CAMERA_REFERENCE); ret = ret && connect(viewModeButtonSet, SIGNAL(selected(int)), m_sceneViewer, @@ -479,7 +422,7 @@ void SceneViewerPanel::initializeTitleBar(TPanelTitleBar *titleBar) { titleBar, getIconThemePath("actions/20/pane_freeze.svg")); x += 10 + iconWidth; - button->setToolTip(tr("Freeze")); // RC1 + button->setToolTip(tr("Freeze")); titleBar->add(QPoint(x, 0), button); ret = ret && connect(button, SIGNAL(toggled(bool)), m_sceneViewer, SLOT(freeze(bool))); @@ -495,7 +438,7 @@ void SceneViewerPanel::initializeTitleBar(TPanelTitleBar *titleBar) { m_subcameraPreviewButton = new TPanelTitleBarButton( titleBar, getIconThemePath("actions/20/pane_subpreview.svg")); - x += +1 + 24; // width of pane_preview.svg = 24px + x += 1 + 24; // width of pane_preview.svg = 24px titleBar->add(QPoint(x, 0), m_subcameraPreviewButton); m_subcameraPreviewButton->setToolTip(tr("Sub-camera Preview")); @@ -507,7 +450,7 @@ void SceneViewerPanel::initializeTitleBar(TPanelTitleBar *titleBar) { //----------------------------------------------------------------------------- -void SceneViewerPanel::enableFullPreview(bool enabled) { +void BaseViewerPanel::enableFullPreview(bool enabled) { m_subcameraPreviewButton->setPressed(false); m_sceneViewer->enablePreview(enabled ? SceneViewer::FULL_PREVIEW : SceneViewer::NO_PREVIEW); @@ -518,7 +461,7 @@ void SceneViewerPanel::enableFullPreview(bool enabled) { //----------------------------------------------------------------------------- -void SceneViewerPanel::enableSubCameraPreview(bool enabled) { +void BaseViewerPanel::enableSubCameraPreview(bool enabled) { m_previewButton->setPressed(false); m_sceneViewer->enablePreview(enabled ? SceneViewer::SUBCAMERA_PREVIEW : SceneViewer::NO_PREVIEW); @@ -529,7 +472,7 @@ void SceneViewerPanel::enableSubCameraPreview(bool enabled) { //----------------------------------------------------------------------------- -void SceneViewerPanel::enableFlipConsoleForCamerastand(bool on) { +void BaseViewerPanel::enableFlipConsoleForCamerastand(bool on) { m_flipConsole->enableButton(FlipConsole::eMatte, on, false); m_flipConsole->enableButton(FlipConsole::eSave, on, false); m_flipConsole->enableButton(FlipConsole::eCompare, on, false); @@ -542,27 +485,23 @@ void SceneViewerPanel::enableFlipConsoleForCamerastand(bool on) { m_flipConsole->enableButton(FlipConsole::eCheckBg, on, false); m_flipConsole->enableProgressBar(on); - // m_flipConsole->enableBlanks(on); // blank frames are now always enabled - // m_flipConsole->update(); update(); } //----------------------------------------------------------------------------- -void SceneViewerPanel::onXshLevelSwitched(TXshLevel *) { +void BaseViewerPanel::onXshLevelSwitched(TXshLevel *) { changeWindowTitle(); m_sceneViewer->update(); - // If the level switched by using the level choose combo box in the film - // strip, - // the current level switches without change in the frame type (level or - // scene). + // If the level is switched by using the combobox in the film strip, the + // current level switches without change in the frame type (level or scene). // For such case, update the frame range of the console here. if (TApp::instance()->getCurrentFrame()->isEditingLevel()) updateFrameRange(); } //----------------------------------------------------------------------------- -void SceneViewerPanel::onPlayingStatusChanged(bool playing) { +void BaseViewerPanel::onPlayingStatusChanged(bool playing) { if (playing) { m_playing = true; } else { @@ -591,14 +530,17 @@ void SceneViewerPanel::onPlayingStatusChanged(bool playing) { //----------------------------------------------------------------------------- -void SceneViewerPanel::changeWindowTitle() { - TApp *app = TApp::instance(); - // zoom = sqrt(m_sceneViewer->getViewMatrix().det()); +void BaseViewerPanel::changeWindowTitle() { // �v�m�F + TApp *app = TApp::instance(); ToonzScene *scene = app->getCurrentScene()->getScene(); if (!scene) return; if (!parentWidget()) 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()) { TProject *project = scene->getProject(); QString sceneName = QString::fromStdWString(scene->getSceneName()); @@ -638,7 +580,9 @@ void SceneViewerPanel::changeWindowTitle() { QString imageName = QString::fromStdWString(fp.withFrame(cell.m_frameId).getWideString()); name = name + tr(" :: Level: ") + imageName; - } else { + } + // if the frame type is "level editing" + else { TXshLevel *level = app->getCurrentLevel()->getLevel(); if (level) { TFilePath fp(level->getName()); @@ -663,8 +607,9 @@ void SceneViewerPanel::changeWindowTitle() { } //----------------------------------------------------------------------------- - -void SceneViewerPanel::updateFrameRange() { +/*! update the frame range according to the current frame type + */ +void BaseViewerPanel::updateFrameRange() { TFrameHandle *fh = TApp::instance()->getCurrentFrame(); int frameIndex = fh->getFrameIndex(); int maxFrameIndex = fh->getMaxFrameIndex(); @@ -674,7 +619,7 @@ void SceneViewerPanel::updateFrameRange() { //----------------------------------------------------------------------------- -void SceneViewerPanel::updateFrameMarkers() { +void BaseViewerPanel::updateFrameMarkers() { int fromIndex, toIndex, dummy; XsheetGUI::getPlayRange(fromIndex, toIndex, dummy); TFrameHandle *fh = TApp::instance()->getCurrentFrame(); @@ -687,7 +632,7 @@ void SceneViewerPanel::updateFrameMarkers() { //----------------------------------------------------------------------------- -void SceneViewerPanel::onSceneChanged() { +void BaseViewerPanel::onSceneChanged() { updateFrameRange(); updateFrameMarkers(); changeWindowTitle(); @@ -702,8 +647,6 @@ void SceneViewerPanel::onSceneChanged() { ->getOutputProperties() ->getFrameRate(), false); - // vinz: perche veniva fatto? - // m_flipConsole->updateCurrentFPS(scene->getProperties()->getOutputProperties()->getFrameRate()); int frameIndex = TApp::instance()->getCurrentFrame()->getFrameIndex(); if (m_keyFrameButton->getCurrentFrame() != frameIndex) @@ -713,7 +656,7 @@ void SceneViewerPanel::onSceneChanged() { //----------------------------------------------------------------------------- -void SceneViewerPanel::onSceneSwitched() { +void BaseViewerPanel::onSceneSwitched() { m_previewButton->setPressed(false); m_subcameraPreviewButton->setPressed(false); enableFlipConsoleForCamerastand(false); @@ -731,7 +674,7 @@ void SceneViewerPanel::onSceneSwitched() { //----------------------------------------------------------------------------- -void SceneViewerPanel::onFrameSwitched() { +void BaseViewerPanel::onFrameSwitched() { int frameIndex = TApp::instance()->getCurrentFrame()->getFrameIndex(); m_flipConsole->setCurrentFrame(frameIndex + 1); if (m_keyFrameButton->getCurrentFrame() != frameIndex) @@ -747,8 +690,9 @@ void SceneViewerPanel::onFrameSwitched() { } //----------------------------------------------------------------------------- - -void SceneViewerPanel::onFrameTypeChanged() { +/*! reset the marker positions in the flip console + */ +void BaseViewerPanel::onFrameTypeChanged() { if (TApp::instance()->getCurrentFrame()->getFrameType() == TFrameHandle::LevelFrame) { if (m_sceneViewer->isPreviewEnabled()) { @@ -770,7 +714,7 @@ void SceneViewerPanel::onFrameTypeChanged() { //----------------------------------------------------------------------------- -void SceneViewerPanel::playAudioFrame(int frame) { +void BaseViewerPanel::playAudioFrame(int frame) { if (m_first) { m_first = false; m_fps = TApp::instance() @@ -795,7 +739,7 @@ void SceneViewerPanel::playAudioFrame(int frame) { //----------------------------------------------------------------------------- -bool SceneViewerPanel::hasSoundtrack() { +bool BaseViewerPanel::hasSoundtrack() { if (m_sound != NULL) { m_sound = NULL; m_hasSoundtrack = false; @@ -822,33 +766,79 @@ bool SceneViewerPanel::hasSoundtrack() { } } -void SceneViewerPanel::onButtonPressed(FlipConsole::EGadget button) { +void BaseViewerPanel::onButtonPressed(FlipConsole::EGadget button) { if (button == FlipConsole::eSound) { m_playSound = !m_playSound; } } -void SceneViewerPanel::setFlipHButtonChecked(bool checked) { +void BaseViewerPanel::setFlipHButtonChecked(bool checked) { m_flipConsole->setChecked(FlipConsole::eFlipHorizontal, checked); } -void SceneViewerPanel::setFlipVButtonChecked(bool checked) { +void BaseViewerPanel::setFlipVButtonChecked(bool checked) { m_flipConsole->setChecked(FlipConsole::eFlipVertical, checked); } //----------------------------------------------------------------------------- -void SceneViewerPanel::setVisiblePartsFlag(UINT flag) { +void BaseViewerPanel::setVisiblePartsFlag(UINT flag) { m_visiblePartsFlag = flag; updateShowHide(); } // SaveLoadQSettings -void SceneViewerPanel::save(QSettings &settings) const { - settings.setValue("visibleParts", m_visiblePartsFlag); +void BaseViewerPanel::save(QSettings &settings) const { + settings.setValue("viewerVisibleParts", m_visiblePartsFlag); } -void SceneViewerPanel::load(QSettings &settings) { - m_visiblePartsFlag = settings.value("visibleParts", CVPARTS_ALL).toUInt(); +void BaseViewerPanel::load(QSettings &settings) { + checkOldVersionVisblePartsFlags(settings); + m_visiblePartsFlag = + settings.value("viewerVisibleParts", m_visiblePartsFlag).toUInt(); updateShowHide(); } + +//============================================================================= +// +// SceneViewerPanel +// +//----------------------------------------------------------------------------- + +SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WindowFlags flags) + : BaseViewerPanel(parent, flags) { + setObjectName("ViewerPanel"); + setMinimumHeight(200); + + Ruler *vRuler = new Ruler(this, m_sceneViewer, true); + Ruler *hRuler = new Ruler(this, m_sceneViewer, false); + m_sceneViewer->setRulers(vRuler, hRuler); + + { + QGridLayout *viewerL = new QGridLayout(); + viewerL->setMargin(0); + viewerL->setSpacing(0); + { + viewerL->addWidget(vRuler, 1, 0); + viewerL->addWidget(hRuler, 0, 1); + viewerL->addWidget(m_fsWidget, 1, 1); + } + viewerL->setRowStretch(1, 1); + viewerL->setColumnStretch(1, 1); + m_mainLayout->insertLayout(0, viewerL, 1); + } + setLayout(m_mainLayout); + // initial state of the parts + m_visiblePartsFlag = VPPARTS_ALL; + updateShowHide(); +} + +//----------------------------------------------------------------------------- + +void SceneViewerPanel::checkOldVersionVisblePartsFlags(QSettings &settings) { + if (!settings.contains("visibleParts")) return; + m_visiblePartsFlag = + settings.value("visibleParts", m_visiblePartsFlag).toUInt(); + settings.remove("visibleParts"); + settings.setValue("viewerVisibleParts", m_visiblePartsFlag); +} \ No newline at end of file diff --git a/toonz/sources/toonz/viewerpane.h b/toonz/sources/toonz/viewerpane.h index c6a47d5..6ec8889 100644 --- a/toonz/sources/toonz/viewerpane.h +++ b/toonz/sources/toonz/viewerpane.h @@ -27,16 +27,30 @@ class Ruler; class FlipConsole; class TXshLevel; -class SceneViewerPanel final : public QFrame, - public FlipConsoleOwner, - public SaveLoadQSettings { - Q_OBJECT +enum VP_Parts { + VPPARTS_None = 0, + VPPARTS_PLAYBAR = 0x1, + VPPARTS_FRAMESLIDER = 0x2, + VPPARTS_TOOLBAR = 0x4, + VPPARTS_TOOLOPTIONS = 0x8, + VPPARTS_End = 0x10, + + VPPARTS_ALL = VPPARTS_PLAYBAR | VPPARTS_FRAMESLIDER, + VPPARTS_COMBO_ALL = VPPARTS_ALL | VPPARTS_TOOLBAR | VPPARTS_TOOLOPTIONS +}; + +class BaseViewerPanel : public QFrame, + public FlipConsoleOwner, + public SaveLoadQSettings { + Q_OBJECT +protected: friend class SceneViewer; + QVBoxLayout *m_mainLayout; SceneViewer *m_sceneViewer; + ImageUtils::FullScreenWidget *m_fsWidget; FlipConsole *m_flipConsole; ViewerKeyframeNavigator *m_keyFrameButton; - TPanelTitleBarButtonSet *m_referenceModeBs; TPanelTitleBarButton *m_previewButton; TPanelTitleBarButton *m_subcameraPreviewButton; @@ -52,17 +66,14 @@ class SceneViewerPanel final : public QFrame, TSoundTrack *m_sound = NULL; public: -#if QT_VERSION >= 0x050500 - SceneViewerPanel(QWidget *parent = 0, Qt::WindowFlags flags = 0); -#else - SceneViewerPanel(QWidget *parent = 0, Qt::WFlags flags = 0); -#endif - ~SceneViewerPanel(); + BaseViewerPanel(QWidget *parent = 0, Qt::WindowFlags flags = 0); + ~BaseViewerPanel() {} + + virtual void updateShowHide(); + virtual void addShowHideContextMenu(QMenu *); // toggle show/hide of the widgets according to m_visiblePartsFlag void setVisiblePartsFlag(UINT flag); - void updateShowHide(); - void addShowHideContextMenu(QMenu *); void onDrawFrame(int frame, const ImagePainter::VisualSettings &settings, QElapsedTimer *timer, qint64 targetInstant) override; @@ -81,25 +92,21 @@ public: void initializeTitleBar(TPanelTitleBar *titleBar); protected: + void contextMenuEvent(QContextMenuEvent *event) override; void showEvent(QShowEvent *) override; void hideEvent(QHideEvent *) override; - void resizeEvent(QResizeEvent *) override; - void createFrameToolBar(); - void createPlayToolBar(); - void addColorMaskButton(QWidget *parent, const char *iconSVGName, int id); - // reimplementation of TPanel::widgetFocusOnEnter - void enableFlipConsoleForCamerastand(bool on); void playAudioFrame(int frame); bool hasSoundtrack(); - void contextMenuEvent(QContextMenuEvent *event) override; + + virtual void checkOldVersionVisblePartsFlags(QSettings &settings) = 0; public slots: void changeWindowTitle(); + void updateFrameRange(); void onSceneChanged(); void onXshLevelSwitched(TXshLevel *); - void updateFrameRange(); void updateFrameMarkers(); void onButtonPressed(FlipConsole::EGadget button); void setFlipHButtonChecked(bool checked); @@ -117,4 +124,14 @@ protected slots: void enableSubCameraPreview(bool enabled); }; +class SceneViewerPanel final : public BaseViewerPanel { + Q_OBJECT +public: + SceneViewerPanel(QWidget *parent = 0, Qt::WindowFlags flags = 0); + ~SceneViewerPanel() {} + +protected: + void checkOldVersionVisblePartsFlags(QSettings &settings) override; +}; + #endif