Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tconvert.h"
Toshihiro Shimizu 890ddd
#include "tgeometry.h"
Toshihiro Shimizu 890ddd
#include "tgl.h"
Toshihiro Shimizu 890ddd
#include "trop.h"
Toshihiro Shimizu 890ddd
#include "tstopwatch.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzLib includes
Toshihiro Shimizu 890ddd
#include "toonz/tscenehandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/txsheethandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/tframehandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/tcolumnhandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshlevelhandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/txsheethandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/toonzscene.h"
Toshihiro Shimizu 890ddd
#include "toonz/sceneproperties.h"
Toshihiro Shimizu 890ddd
#include "toonz/txsheet.h"
Toshihiro Shimizu 890ddd
#include "toonz/stage.h"
Toshihiro Shimizu 890ddd
#include "toonz/stage2.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshlevel.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshcell.h"
Toshihiro Shimizu 890ddd
#include "toonz/tcamera.h"
Toshihiro Shimizu 890ddd
#include "toonz/tstageobjecttree.h"
Toshihiro Shimizu 890ddd
#include "toonz/tobjecthandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/tpalettehandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/tonionskinmaskhandle.h"
Toshihiro Shimizu 890ddd
#include "toutputproperties.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzQt includes
Toshihiro Shimizu 890ddd
#include "toonzqt/menubarcommand.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/dvdialog.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/gutil.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/imageutils.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzTools includes
Toshihiro Shimizu 890ddd
#include "tools/toolhandle.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Tnz6 includes
Toshihiro Shimizu 890ddd
#include "tapp.h"
Toshihiro Shimizu 890ddd
#include "mainwindow.h"
Toshihiro Shimizu 890ddd
#include "sceneviewer.h"
Toshihiro Shimizu 890ddd
#include "xsheetdragtool.h"
Toshihiro Shimizu 890ddd
#include "ruler.h"
Toshihiro Shimizu 890ddd
#include "menubarcommandids.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qpainter></qpainter>
Toshihiro Shimizu 890ddd
#include <qvboxlayout></qvboxlayout>
Toshihiro Shimizu 890ddd
#include <qaction></qaction>
Toshihiro Shimizu 890ddd
#include <qdialogbuttonbox></qdialogbuttonbox>
Toshihiro Shimizu 890ddd
#include <qabstractbutton></qabstractbutton>
Toshihiro Shimizu 890ddd
#include <qmouseevent></qmouseevent>
Toshihiro Shimizu 890ddd
#include <qwheelevent></qwheelevent>
Toshihiro Shimizu 890ddd
#include <qlabel></qlabel>
Toshihiro Shimizu 890ddd
#include <qradiobutton></qradiobutton>
Toshihiro Shimizu 890ddd
#include <qslider></qslider>
Toshihiro Shimizu 890ddd
#include <qbuttongroup></qbuttongroup>
Toshihiro Shimizu 890ddd
#include <qmenu></qmenu>
Toshihiro Shimizu 890ddd
#include <qtoolbar></qtoolbar>
Toshihiro Shimizu 890ddd
#include <qmainwindow></qmainwindow>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "viewerpane.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
using namespace DVGui;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
// SceneViewerPanel
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#if QT_VERSION >= 0x050500
Toshihiro Shimizu 890ddd
SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WindowFlags flags)
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags)
Toshihiro Shimizu 890ddd
#endif
Shinya Kitaoka 120a6e
    : TPanel(parent) {
Shinya Kitaoka 120a6e
  QFrame *hbox = new QFrame(this);
Shinya Kitaoka 120a6e
  hbox->setFrameStyle(QFrame::StyledPanel);
Shinya Kitaoka 120a6e
  hbox->setObjectName("ViewerPanel");
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QVBoxLayout *mainLayout = new QVBoxLayout(hbox);
Shinya Kitaoka 120a6e
  mainLayout->setMargin(0);
Shinya Kitaoka 120a6e
  mainLayout->setSpacing(0);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // Viewer
Shinya Kitaoka 120a6e
  QWidget *viewer      = new QWidget(hbox);
Shinya Kitaoka 120a6e
  QGridLayout *viewerL = new QGridLayout(viewer);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ImageUtils::FullScreenWidget *fsWidget =
Shinya Kitaoka 120a6e
      new ImageUtils::FullScreenWidget(viewer);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  fsWidget->setWidget(m_sceneViewer = new SceneViewer(fsWidget));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool ret = true;
Shinya Kitaoka 120a6e
  ret      = ret && connect(m_sceneViewer, SIGNAL(onZoomChanged()),
Shinya Kitaoka 120a6e
                       SLOT(changeWindowTitle()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  Ruler *vRuler = new Ruler(viewer, m_sceneViewer, true);
Shinya Kitaoka 120a6e
  Ruler *hRuler = new Ruler(viewer, m_sceneViewer, false);
Shinya Kitaoka 120a6e
  m_sceneViewer->setRulers(vRuler, hRuler);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  viewerL->setMargin(0);
Shinya Kitaoka 120a6e
  viewerL->setSpacing(0);
Shinya Kitaoka 120a6e
  viewerL->addWidget(vRuler, 1, 0);
Shinya Kitaoka 120a6e
  viewerL->addWidget(hRuler, 0, 1);
Shinya Kitaoka 120a6e
  viewerL->addWidget(fsWidget, 1, 1, 19, 13);
Shinya Kitaoka 120a6e
  viewer->setMinimumHeight(200);
Shinya Kitaoka 120a6e
  viewer->setLayout(viewerL);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  mainLayout->addWidget(viewer, Qt::AlignCenter);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TApp *app        = TApp::instance();
Shinya Kitaoka 120a6e
  m_keyFrameButton = new ViewerKeyframeNavigator(0, app->getCurrentFrame());
Shinya Kitaoka 120a6e
  m_keyFrameButton->setObjectHandle(app->getCurrentObject());
Shinya Kitaoka 120a6e
  m_keyFrameButton->setXsheetHandle(app->getCurrentXsheet());
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int buttons = FlipConsole::cFullConsole;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  buttons &= (~FlipConsole::eSound);
Shinya Kitaoka 120a6e
  buttons &= (~FlipConsole::eFilledRaster);
Shinya Kitaoka 120a6e
  buttons &= (~FlipConsole::eDefineLoadBox);
Shinya Kitaoka 120a6e
  buttons &= (~FlipConsole::eUseLoadBox);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_flipConsole = new FlipConsole(mainLayout, buttons, false, m_keyFrameButton,
Shinya Kitaoka 120a6e
                                  "SceneViewerConsole", this, true);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eMatte, false, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eSave, false, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eCompare, false, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eSaveImg, false, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eGRed, false, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eGGreen, false, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eGBlue, false, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eBlackBg, false, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eWhiteBg, false, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eCheckBg, false, false);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_flipConsole->setFrameHandle(TApp::instance()->getCurrentFrame());
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret &&
Shinya Kitaoka 120a6e
        connect(m_flipConsole, SIGNAL(playStateChanged(bool)),
Shinya Kitaoka 120a6e
                TApp::instance()->getCurrentFrame(), SLOT(setPlaying(bool)));
Shinya Kitaoka 120a6e
  ret = ret &&
Shinya Kitaoka 120a6e
        connect(m_flipConsole, SIGNAL(buttonPressed(FlipConsole::EGadget)),
Shinya Kitaoka 120a6e
                m_sceneViewer, SLOT(onButtonPressed(FlipConsole::EGadget)));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret && connect(m_sceneViewer, SIGNAL(previewStatusChanged()), this,
Shinya Kitaoka 120a6e
                       SLOT(update()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret && connect(app->getCurrentScene(), SIGNAL(sceneSwitched()), this,
Shinya Kitaoka 120a6e
                       SLOT(onSceneSwitched()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  assert(ret);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_flipConsole->setFrameRate(app->getCurrentScene()
Shinya Kitaoka 120a6e
                                  ->getScene()
Shinya Kitaoka 120a6e
                                  ->getProperties()
Shinya Kitaoka 120a6e
                                  ->getOutputProperties()
Shinya Kitaoka 120a6e
                                  ->getFrameRate());
Shinya Kitaoka 120a6e
  updateFrameRange(), updateFrameMarkers();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  hbox->setLayout(mainLayout);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  setWidget(hbox);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  initializeTitleBar(
Shinya Kitaoka 120a6e
      getTitleBar());  // note: initializeTitleBar() refers to m_sceneViewer
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::onDrawFrame(
Shinya Kitaoka 120a6e
    int frame, const ImagePainter::VisualSettings &settings) {
Shinya Kitaoka 120a6e
  TApp *app = TApp::instance();
Shinya Kitaoka 120a6e
  m_sceneViewer->setVisual(settings);
Shinya Kitaoka 120a6e
  TFrameHandle *frameHandle = app->getCurrentFrame();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (m_sceneViewer->isPreviewEnabled()) {
Shinya Kitaoka 120a6e
    class Previewer *pr = Previewer::instance(m_sceneViewer->getPreviewMode() ==
Shinya Kitaoka 120a6e
                                              SceneViewer::SUBCAMERA_PREVIEW);
Shinya Kitaoka 120a6e
    pr->getRaster(frame - 1, settings.m_recomputeIfNeeded);  // the 'getRaster'
Shinya Kitaoka 120a6e
                                                             // starts the
Shinya Kitaoka 120a6e
                                                             // render of the
Shinya Kitaoka 120a6e
                                                             // frame is not
Shinya Kitaoka 120a6e
                                                             // already started
Shinya Kitaoka 120a6e
    int curFrame = frame;
Shinya Kitaoka 120a6e
    if (frameHandle->isPlaying() &&
Shinya Kitaoka 120a6e
        !pr->isFrameReady(
Shinya Kitaoka 120a6e
            frame - 1))  // stops on last rendered frame until current is ready!
Shinya Kitaoka 120a6e
    {
Shinya Kitaoka 120a6e
      while (frame > 1 && !pr->isFrameReady(frame - 1)) frame--;
Shinya Kitaoka 120a6e
      m_flipConsole->setCurrentFrame(frame);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  assert(frame >= 0);
Shinya Kitaoka 120a6e
  if (frame != frameHandle->getFrameIndex() + 1) {
Shinya Kitaoka 120a6e
    int oldFrame = frameHandle->getFrame();
Shinya Kitaoka 120a6e
    frameHandle->setCurrentFrame(frame);
Shinya Kitaoka 120a6e
    if (!frameHandle->isPlaying() && !frameHandle->isEditingLevel() &&
Shinya Kitaoka 120a6e
        oldFrame != frameHandle->getFrame())
Shinya Kitaoka 120a6e
      frameHandle->scrubXsheet(
Shinya Kitaoka 120a6e
          frame - 1, frame - 1,
Shinya Kitaoka 120a6e
          TApp::instance()->getCurrentXsheet()->getXsheet());
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  else if (settings.m_blankColor != TPixel::Transparent)
Shinya Kitaoka 120a6e
    m_sceneViewer->update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
SceneViewerPanel::~SceneViewerPanel() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::showEvent(QShowEvent *) {
Shinya Kitaoka 120a6e
  TApp *app                    = TApp::instance();
Shinya Kitaoka 120a6e
  TFrameHandle *frameHandle    = app->getCurrentFrame();
Shinya Kitaoka 120a6e
  TSceneHandle *sceneHandle    = app->getCurrentScene();
Shinya Kitaoka 120a6e
  TXshLevelHandle *levelHandle = app->getCurrentLevel();
Shinya Kitaoka 120a6e
  TObjectHandle *objectHandle  = app->getCurrentObject();
Shinya Kitaoka 120a6e
  TXsheetHandle *xshHandle     = app->getCurrentXsheet();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  updateFrameRange();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool ret = true;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret && connect(xshHandle, SIGNAL(xsheetChanged()), this,
Shinya Kitaoka 120a6e
                       SLOT(onSceneChanged()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret && connect(sceneHandle, SIGNAL(sceneChanged()), this,
Shinya Kitaoka 120a6e
                       SLOT(onSceneChanged()));
Shinya Kitaoka 120a6e
  ret = ret && connect(sceneHandle, SIGNAL(nameSceneChanged()), this,
Shinya Kitaoka 120a6e
                       SLOT(changeWindowTitle()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret && connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this,
Shinya Kitaoka 120a6e
                       SLOT(onXshLevelSwitched(TXshLevel *)));
Shinya Kitaoka 120a6e
  ret = ret && connect(levelHandle, SIGNAL(xshLevelChanged()), this,
Shinya Kitaoka 120a6e
                       SLOT(changeWindowTitle()));
Shinya Kitaoka 120a6e
  ret = ret && connect(levelHandle, SIGNAL(xshLevelTitleChanged()), this,
Shinya Kitaoka 120a6e
                       SLOT(changeWindowTitle()));
Shinya Kitaoka 120a6e
  ret = ret && connect(levelHandle, SIGNAL(xshLevelChanged()), this,
Shinya Kitaoka 120a6e
                       SLOT(updateFrameRange()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this,
Shinya Kitaoka 120a6e
                       SLOT(changeWindowTitle()));
Shinya Kitaoka 120a6e
  ret = ret && connect(frameHandle, SIGNAL(frameSwitched()), this,
Shinya Kitaoka 120a6e
                       SLOT(onFrameSwitched()));
Shinya Kitaoka 120a6e
  ret = ret && connect(frameHandle, SIGNAL(frameTypeChanged()), this,
Shinya Kitaoka 120a6e
                       SLOT(onFrameTypeChanged()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret && connect(app->getCurrentTool(), SIGNAL(toolSwitched()),
Shinya Kitaoka 120a6e
                       m_sceneViewer, SLOT(onToolSwitched()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret && connect(sceneHandle, SIGNAL(preferenceChanged()), m_flipConsole,
Shinya Kitaoka 120a6e
                       SLOT(onPreferenceChanged()));
Shinya Kitaoka 120a6e
  m_flipConsole->onPreferenceChanged();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  assert(ret);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // Aggiorno FPS al valore definito nel viewer corrente.
Shinya Kitaoka 120a6e
  // frameHandle->setPreviewFrameRate(m_fpsSlider->value());
Shinya Kitaoka 120a6e
  m_flipConsole->setActive(true);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::hideEvent(QHideEvent *) {
Shinya Kitaoka 120a6e
  TApp *app                    = TApp::instance();
Shinya Kitaoka 120a6e
  TFrameHandle *frameHandle    = app->getCurrentFrame();
Shinya Kitaoka 120a6e
  TSceneHandle *sceneHandle    = app->getCurrentScene();
Shinya Kitaoka 120a6e
  TXshLevelHandle *levelHandle = app->getCurrentLevel();
Shinya Kitaoka 120a6e
  TObjectHandle *objectHandle  = app->getCurrentObject();
Shinya Kitaoka 120a6e
  TXsheetHandle *xshHandle     = app->getCurrentXsheet();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  disconnect(xshHandle, SIGNAL(xsheetChanged()), this, SLOT(onSceneChanged()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  disconnect(sceneHandle, SIGNAL(sceneChanged()), this, SLOT(onSceneChanged()));
Shinya Kitaoka 120a6e
  disconnect(sceneHandle, SIGNAL(nameSceneChanged()), this,
Shinya Kitaoka 120a6e
             SLOT(changeWindowTitle()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  disconnect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this,
Shinya Kitaoka 120a6e
             SLOT(onXshLevelSwitched(TXshLevel *)));
Shinya Kitaoka 120a6e
  disconnect(levelHandle, SIGNAL(xshLevelChanged()), this,
Shinya Kitaoka 120a6e
             SLOT(changeWindowTitle()));
Shinya Kitaoka 120a6e
  disconnect(levelHandle, SIGNAL(xshLevelTitleChanged()), this,
Shinya Kitaoka 120a6e
             SLOT(changeWindowTitle()));
Shinya Kitaoka 120a6e
  disconnect(levelHandle, SIGNAL(xshLevelChanged()), this,
Shinya Kitaoka 120a6e
             SLOT(updateFrameRange()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  disconnect(frameHandle, SIGNAL(frameSwitched()), this,
Shinya Kitaoka 120a6e
             SLOT(changeWindowTitle()));
Shinya Kitaoka 120a6e
  disconnect(frameHandle, SIGNAL(frameSwitched()), this,
Shinya Kitaoka 120a6e
             SLOT(onFrameSwitched()));
Shinya Kitaoka 120a6e
  disconnect(frameHandle, SIGNAL(frameTypeChanged()), this,
Shinya Kitaoka 120a6e
             SLOT(onFrameTypeChanged()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  disconnect(app->getCurrentTool(), SIGNAL(toolSwitched()), m_sceneViewer,
Shinya Kitaoka 120a6e
             SLOT(onToolSwitched()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  disconnect(sceneHandle, SIGNAL(preferenceChanged()), m_flipConsole,
Shinya Kitaoka 120a6e
             SLOT(onPreferenceChanged()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_flipConsole->setActive(false);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::resizeEvent(QResizeEvent *e) {
Shinya Kitaoka 120a6e
  QWidget::resizeEvent(e);
Shinya Kitaoka 120a6e
  repaint();
Shinya Kitaoka 120a6e
  m_sceneViewer->updateGL();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::initializeTitleBar(TPanelTitleBar *titleBar) {
Shinya Kitaoka 120a6e
  bool ret = true;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TPanelTitleBarButtonSet *viewModeButtonSet;
Shinya Kitaoka 120a6e
  m_referenceModeBs = viewModeButtonSet = new TPanelTitleBarButtonSet();
Shinya Kitaoka 120a6e
  int x                                 = -188;
Shinya Kitaoka 120a6e
  int iconWidth                         = 17;
Shinya Kitaoka 120a6e
  TPanelTitleBarButton *button;
Shinya Kitaoka 120a6e
  button = new TPanelTitleBarButton(titleBar, ":Resources/freeze.png",
Shinya Kitaoka 120a6e
                                    ":Resources/freeze_over.png",
Shinya Kitaoka 120a6e
                                    ":Resources/freeze_on.png");
Shinya Kitaoka 120a6e
  button->setToolTip(tr("Freeze"));
Shinya Kitaoka 120a6e
  titleBar->add(QPoint(x, 2), button);
Shinya Kitaoka 120a6e
  ret = ret && connect(button, SIGNAL(toggled(bool)), m_sceneViewer,
Shinya Kitaoka 120a6e
                       SLOT(freeze(bool)));
Shinya Kitaoka 120a6e
  ret = ret && connect(m_sceneViewer, SIGNAL(freezeStateChanged(bool)), button,
Shinya Kitaoka 120a6e
                       SLOT(setPressed(bool)));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  button = new TPanelTitleBarButton(titleBar, ":Resources/standard.png",
Shinya Kitaoka 120a6e
                                    ":Resources/standard_over.png",
Shinya Kitaoka 120a6e
                                    ":Resources/standard_on.png");
Shinya Kitaoka 120a6e
  button->setToolTip(tr("Camera Stand View"));
Shinya Kitaoka 120a6e
  x += 18 + iconWidth;
Shinya Kitaoka 120a6e
  titleBar->add(QPoint(x, 2), button);
Shinya Kitaoka 120a6e
  button->setButtonSet(viewModeButtonSet, SceneViewer::NORMAL_REFERENCE);
Shinya Kitaoka 120a6e
  button->setPressed(true);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  button = new TPanelTitleBarButton(titleBar, ":Resources/3D.png",
Shinya Kitaoka 120a6e
                                    ":Resources/3D_over.png",
Shinya Kitaoka 120a6e
                                    ":Resources/3D_on.png");
Shinya Kitaoka 120a6e
  button->setToolTip(tr("3D View"));
Shinya Kitaoka 120a6e
  x += 5 + iconWidth;
Shinya Kitaoka 120a6e
  titleBar->add(QPoint(x, 2), button);
Shinya Kitaoka 120a6e
  button->setButtonSet(viewModeButtonSet, SceneViewer::CAMERA3D_REFERENCE);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  button = new TPanelTitleBarButton(titleBar, ":Resources/view_camera.png",
Shinya Kitaoka 120a6e
                                    ":Resources/view_camera_over.png",
Shinya Kitaoka 120a6e
                                    ":Resources/view_camera_on.png");
Shinya Kitaoka 120a6e
  button->setToolTip(tr("Camera View"));
Shinya Kitaoka 120a6e
  x += 5 + iconWidth;
Shinya Kitaoka 120a6e
  titleBar->add(QPoint(x, 2), button);
Shinya Kitaoka 120a6e
  button->setButtonSet(viewModeButtonSet, SceneViewer::CAMERA_REFERENCE);
Shinya Kitaoka 120a6e
  ret = ret && connect(viewModeButtonSet, SIGNAL(selected(int)), m_sceneViewer,
Shinya Kitaoka 120a6e
                       SLOT(setReferenceMode(int)));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_previewButton = new TPanelTitleBarButton(
Shinya Kitaoka 120a6e
      titleBar, ":Resources/viewpreview.png", ":Resources/viewpreview_over.png",
Shinya Kitaoka 120a6e
      ":Resources/viewpreview_on.png");
Shinya Kitaoka 120a6e
  x += 18 + iconWidth;
Shinya Kitaoka 120a6e
  titleBar->add(QPoint(x, 2), m_previewButton);
Shinya Kitaoka 120a6e
  m_previewButton->setToolTip(tr("Preview"));
Shinya Kitaoka 120a6e
  ret = ret && connect(m_previewButton, SIGNAL(toggled(bool)),
Shinya Kitaoka 120a6e
                       SLOT(enableFullPreview(bool)));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_subcameraPreviewButton =
Shinya Kitaoka 120a6e
      new TPanelTitleBarButton(titleBar, ":Resources/subcamera_preview.png",
Shinya Kitaoka 120a6e
                               ":Resources/subcamera_preview_over.png",
Shinya Kitaoka 120a6e
                               ":Resources/subcamera_preview_on.png");
Shinya Kitaoka 120a6e
  x += 5 + iconWidth;
Shinya Kitaoka 120a6e
  titleBar->add(QPoint(x, 2), m_subcameraPreviewButton);
Shinya Kitaoka 120a6e
  m_subcameraPreviewButton->setToolTip(tr("Sub-camera Preview"));
Shinya Kitaoka 120a6e
  ret = ret && connect(m_subcameraPreviewButton, SIGNAL(toggled(bool)),
Shinya Kitaoka 120a6e
                       SLOT(enableSubCameraPreview(bool)));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  assert(ret);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::enableFullPreview(bool enabled) {
Shinya Kitaoka 120a6e
  m_subcameraPreviewButton->setPressed(false);
Shinya Kitaoka 120a6e
  m_sceneViewer->enablePreview(enabled ? SceneViewer::FULL_PREVIEW
Shinya Kitaoka 120a6e
                                       : SceneViewer::NO_PREVIEW);
Shinya Kitaoka 120a6e
  m_flipConsole->setProgressBarStatus(
Shinya Kitaoka 120a6e
      &Previewer::instance(false)->getProgressBarStatus());
Shinya Kitaoka 120a6e
  enableFlipConsoleForCamerastand(enabled);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::enableSubCameraPreview(bool enabled) {
Shinya Kitaoka 120a6e
  m_previewButton->setPressed(false);
Shinya Kitaoka 120a6e
  m_sceneViewer->enablePreview(enabled ? SceneViewer::SUBCAMERA_PREVIEW
Shinya Kitaoka 120a6e
                                       : SceneViewer::NO_PREVIEW);
Shinya Kitaoka 120a6e
  m_flipConsole->setProgressBarStatus(
Shinya Kitaoka 120a6e
      &Previewer::instance(true)->getProgressBarStatus());
Shinya Kitaoka 120a6e
  enableFlipConsoleForCamerastand(enabled);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::enableFlipConsoleForCamerastand(bool on) {
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eMatte, on, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eSave, on, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eCompare, on, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eSaveImg, on, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eGRed, on, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eGGreen, on, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eGBlue, on, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eBlackBg, on, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eWhiteBg, on, false);
Shinya Kitaoka 120a6e
  m_flipConsole->enableButton(FlipConsole::eCheckBg, on, false);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_flipConsole->enableProgressBar(on);
Shinya Kitaoka 120a6e
  m_flipConsole->enableBlanks(on);
Shinya Kitaoka 120a6e
  // m_flipConsole->update();
Shinya Kitaoka 120a6e
  update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::onXshLevelSwitched(TXshLevel *) { changeWindowTitle(); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::changeWindowTitle() {
Shinya Kitaoka 120a6e
  TApp *app = TApp::instance();
Shinya Kitaoka 120a6e
  // zoom = sqrt(m_sceneViewer->getViewMatrix().det());
Shinya Kitaoka 120a6e
  ToonzScene *scene = app->getCurrentScene()->getScene();
Shinya Kitaoka 120a6e
  if (!scene) return;
Shinya Kitaoka 120a6e
  int frame = app->getCurrentFrame()->getFrame();
Shinya Kitaoka 120a6e
  QString name;
Shinya Kitaoka 120a6e
  if (app->getCurrentFrame()->isEditingScene()) {
Shinya Kitaoka 120a6e
    QString sceneName = QString::fromStdWString(scene->getSceneName());
Shinya Kitaoka 120a6e
    if (sceneName.isEmpty()) sceneName = tr("Untitled");
Shinya Kitaoka 120a6e
    if (app->getCurrentScene()->getDirtyFlag()) sceneName += QString("*");
Shinya Kitaoka 120a6e
    name = tr("Scene: ") + sceneName;
Shinya Kitaoka 120a6e
    if (frame >= 0)
Shinya Kitaoka 120a6e
      name =
Shinya Kitaoka 120a6e
          name + tr("   ::   Frame: ") + tr(std::to_string(frame + 1).c_str());
Shinya Kitaoka 120a6e
    int col = app->getCurrentColumn()->getColumnIndex();
Shinya Kitaoka 120a6e
    if (col < 0) {
Shinya Kitaoka 120a6e
      setWindowTitle(name);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    TXsheet *xsh  = app->getCurrentXsheet()->getXsheet();
Shinya Kitaoka 120a6e
    TXshCell cell = xsh->getCell(frame, col);
Shinya Kitaoka 120a6e
    if (cell.isEmpty()) {
Shinya Kitaoka 120a6e
      TAffine aff = m_sceneViewer->getViewMatrix() *
Shinya Kitaoka 120a6e
                    m_sceneViewer->getNormalZoomScale().inv();
Shinya Kitaoka 120a6e
      name = name + tr("  ::  Zoom : ") +
Shinya Kitaoka 120a6e
             QString::number(tround(100.0 * sqrt(aff.det()))) + "%";
Shinya Kitaoka 120a6e
      setWindowTitle(name);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    assert(cell.m_level.getPointer());
Shinya Kitaoka 120a6e
    TFilePath fp(cell.m_level->getName());
Shinya Kitaoka 120a6e
    QString imageName =
Shinya Kitaoka 120a6e
        QString::fromStdWString(fp.withFrame(cell.m_frameId).getWideString());
Shinya Kitaoka 120a6e
    name = name + tr("   ::   Level: ") + imageName;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    TXshLevel *level = app->getCurrentLevel()->getLevel();
Shinya Kitaoka 120a6e
    if (level) {
Shinya Kitaoka 120a6e
      TFilePath fp(level->getName());
Shinya Kitaoka 120a6e
      QString imageName = QString::fromStdWString(
Shinya Kitaoka 120a6e
          fp.withFrame(app->getCurrentFrame()->getFid()).getWideString());
Shinya Kitaoka 120a6e
      name = name + tr("Level: ") + imageName;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (!m_sceneViewer->is3DView()) {
Shinya Kitaoka 120a6e
    TAffine aff = m_sceneViewer->getSceneMatrix() *
Shinya Kitaoka 120a6e
                  m_sceneViewer->getNormalZoomScale().inv();
Shinya Kitaoka 120a6e
    name = name + tr("  ::  Zoom : ") +
Shinya Kitaoka 120a6e
           QString::number(tround(100.0 * sqrt(aff.det()))) + "%";
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  setWindowTitle(name);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::updateFrameRange() {
Shinya Kitaoka 120a6e
  TFrameHandle *fh  = TApp::instance()->getCurrentFrame();
Shinya Kitaoka 120a6e
  int frameIndex    = fh->getFrameIndex();
Shinya Kitaoka 120a6e
  int maxFrameIndex = fh->getMaxFrameIndex();
Shinya Kitaoka 120a6e
  if (frameIndex > maxFrameIndex) maxFrameIndex = frameIndex;
Shinya Kitaoka 120a6e
  m_flipConsole->setFrameRange(1, maxFrameIndex + 1, 1, frameIndex + 1);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::updateFrameMarkers() {
Shinya Kitaoka 120a6e
  int fromIndex, toIndex, dummy;
Shinya Kitaoka 120a6e
  XsheetGUI::getPlayRange(fromIndex, toIndex, dummy);
Shinya Kitaoka 120a6e
  TFrameHandle *fh = TApp::instance()->getCurrentFrame();
Shinya Kitaoka 120a6e
  if (fh->isEditingLevel()) {
Shinya Kitaoka 120a6e
    fromIndex = 0;
Shinya Kitaoka 120a6e
    toIndex   = -1;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  m_flipConsole->setMarkers(fromIndex, toIndex);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::onSceneChanged() {
Shinya Kitaoka 120a6e
  updateFrameRange();
Shinya Kitaoka 120a6e
  updateFrameMarkers();
Shinya Kitaoka 120a6e
  changeWindowTitle();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TApp *app         = TApp::instance();
Shinya Kitaoka 120a6e
  ToonzScene *scene = app->getCurrentScene()->getScene();
Shinya Kitaoka 120a6e
  assert(scene);
Shinya Kitaoka 120a6e
  // vinz: perche veniva fatto?
Shinya Kitaoka 120a6e
  // m_flipConsole->updateCurrentFPS(scene->getProperties()->getOutputProperties()->getFrameRate());
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int frameIndex = TApp::instance()->getCurrentFrame()->getFrameIndex();
Shinya Kitaoka 120a6e
  if (m_keyFrameButton->getCurrentFrame() != frameIndex)
Shinya Kitaoka 120a6e
    m_keyFrameButton->setCurrentFrame(frameIndex);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::onSceneSwitched() {
Shinya Kitaoka 120a6e
  m_previewButton->setPressed(false);
Shinya Kitaoka 120a6e
  m_subcameraPreviewButton->setPressed(false);
Shinya Kitaoka 120a6e
  enableFlipConsoleForCamerastand(false);
Shinya Kitaoka 120a6e
  m_sceneViewer->enablePreview(SceneViewer::NO_PREVIEW);
Shinya Kitaoka 120a6e
  m_flipConsole->setChecked(FlipConsole::eDefineSubCamera, false);
Shinya Kitaoka 120a6e
  m_flipConsole->setFrameRate(TApp::instance()
Shinya Kitaoka 120a6e
                                  ->getCurrentScene()
Shinya Kitaoka 120a6e
                                  ->getScene()
Shinya Kitaoka 120a6e
                                  ->getProperties()
Shinya Kitaoka 120a6e
                                  ->getOutputProperties()
Shinya Kitaoka 120a6e
                                  ->getFrameRate());
Shinya Kitaoka 120a6e
  m_sceneViewer->setEditPreviewSubcamera(false);
Shinya Kitaoka 120a6e
  onSceneChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::onFrameSwitched() {
Shinya Kitaoka 120a6e
  int frameIndex = TApp::instance()->getCurrentFrame()->getFrameIndex();
Shinya Kitaoka 120a6e
  m_flipConsole->setCurrentFrame(frameIndex + 1);
Shinya Kitaoka 120a6e
  if (m_keyFrameButton->getCurrentFrame() != frameIndex)
Shinya Kitaoka 120a6e
    m_keyFrameButton->setCurrentFrame(frameIndex);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneViewerPanel::onFrameTypeChanged() {
Shinya Kitaoka 120a6e
  if (TApp::instance()->getCurrentFrame()->getFrameType() ==
Shinya Kitaoka 120a6e
      TFrameHandle::LevelFrame) {
Shinya Kitaoka 120a6e
    if (m_sceneViewer->isPreviewEnabled()) {
Shinya Kitaoka 120a6e
      m_previewButton->setPressed(false);
Shinya Kitaoka 120a6e
      m_subcameraPreviewButton->setPressed(false);
Shinya Kitaoka 120a6e
      enableFlipConsoleForCamerastand(false);
Shinya Kitaoka 120a6e
      m_sceneViewer->enablePreview(SceneViewer::NO_PREVIEW);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    CameraTestCheck::instance()->setIsEnabled(false);
Shinya Kitaoka 120a6e
    CleanupPreviewCheck::instance()->setIsEnabled(false);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_flipConsole->setChecked(FlipConsole::eDefineSubCamera, false);
Shinya Kitaoka 120a6e
  m_sceneViewer->setEditPreviewSubcamera(false);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  updateFrameRange();
Shinya Kitaoka 120a6e
  updateFrameMarkers();
Toshihiro Shimizu 890ddd
}