Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "scenesettingspopup.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Tnz6 includes
Toshihiro Shimizu 890ddd
#include "menubarcommandids.h"
Toshihiro Shimizu 890ddd
#include "previewer.h"
Toshihiro Shimizu 890ddd
#include "tapp.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzQt includes
Toshihiro Shimizu 890ddd
#include "toonzqt/menubarcommand.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzLib includes
Toshihiro Shimizu 890ddd
#include "toonz/txsheet.h"
Toshihiro Shimizu 890ddd
#include "toonz/tscenehandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/txsheethandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/sceneproperties.h"
Toshihiro Shimizu 890ddd
#include "toonz/toonzscene.h"
Toshihiro Shimizu 890ddd
#include "toonz/preferences.h"
Toshihiro Shimizu 890ddd
#include "toutputproperties.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzBase includes
Toshihiro Shimizu 890ddd
#include "tunit.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "trop.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qlayout></qlayout>
Toshihiro Shimizu 890ddd
#include <qcombobox></qcombobox>
Toshihiro Shimizu 890ddd
#include <qlabel></qlabel>
Toshihiro Shimizu 890ddd
#include <qapplication></qapplication>
Campbell Barton d0e335
#include <qmainwindow></qmainwindow>
Toshihiro Shimizu 890ddd
#include <qpainter></qpainter>
shun-iwasawa f84c65
#include <qpushbutton></qpushbutton>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
using namespace DVGui;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
namespace {
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
const int labelSize = 110;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
shun-iwasawa f84c65
class EditCellMarkUndo final : public TUndo {
shun-iwasawa f84c65
  int m_id;
shun-iwasawa f84c65
  TSceneProperties::CellMark m_markBefore, m_markAfter;
shun-iwasawa f84c65
shun-iwasawa f84c65
  EditCellMarkUndo(int id) : m_id(id) {
shun-iwasawa f84c65
    m_markBefore = TApp::instance()
shun-iwasawa f84c65
                       ->getCurrentScene()
shun-iwasawa f84c65
                       ->getScene()
shun-iwasawa f84c65
                       ->getProperties()
shun-iwasawa f84c65
                       ->getCellMark(id);
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
shun-iwasawa f84c65
public:
shun-iwasawa f84c65
  EditCellMarkUndo(int id, TPixel32 color) : EditCellMarkUndo(id) {
shun-iwasawa f84c65
    m_markAfter = {m_markBefore.name, color};
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
  EditCellMarkUndo(int id, QString name) : EditCellMarkUndo(id) {
shun-iwasawa f84c65
    m_markAfter = {name, m_markBefore.color};
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
shun-iwasawa f84c65
  void set(const TSceneProperties::CellMark &mark) const {
shun-iwasawa f84c65
    TApp::instance()
shun-iwasawa f84c65
        ->getCurrentScene()
shun-iwasawa f84c65
        ->getScene()
shun-iwasawa f84c65
        ->getProperties()
shun-iwasawa f84c65
        ->setCellMark(mark, m_id);
shun-iwasawa f84c65
    TApp::instance()->getCurrentScene()->notifySceneChanged();
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
shun-iwasawa f84c65
  void undo() const override { set(m_markBefore); }
shun-iwasawa f84c65
shun-iwasawa f84c65
  void redo() const override { set(m_markAfter); }
shun-iwasawa f84c65
shun-iwasawa f84c65
  int getSize() const override { return sizeof *this; }
shun-iwasawa f84c65
shun-iwasawa f84c65
  QString getHistoryString() override {
shun-iwasawa f84c65
    return QObject::tr("Edit Cell Mark #%1").arg(QString::number(m_id));
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
};
shun-iwasawa f84c65
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Shinya Kitaoka 120a6e
}  //  namespace
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Shinya Kitaoka d1f6c4
class CheckBoardRect final : public QWidget
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
TRaster32P m_ras;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
public:
Toshihiro Shimizu 890ddd
CheckBoardRect(QWidget *parent, int sizeX, int sizeY)
Shinya Kitaoka 120a6e
        : m_ras(sizeX,sizeY)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  setFixedSize(sizeX,sizeY);
Toshihiro Shimizu 890ddd
  setColors(TPixel32(0, 0, 0), TPixel32(255, 255, 255));
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
void setColors(const TPixel32 &color1, const TPixel32 &color2)
Toshihiro Shimizu 890ddd
  {
Shinya Kitaoka 120a6e
  TRop::checkBoard(m_ras, color1, color2, TDimensionD(m_ras->getLx()/8,
Shinya Kitaoka 120a6e
m_ras->getLy()/8),TPointD(0, 0));
Toshihiro Shimizu 890ddd
  update();
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
void paintEvent(QPaintEvent *event)
Toshihiro Shimizu 890ddd
  {
Shinya Kitaoka 120a6e
        QPainter painter(this);
Shinya Kitaoka 120a6e
        QImage img(m_ras->getRawData(), m_ras->getLx(), m_ras->getLy(),
Shinya Kitaoka 120a6e
QImage::Format_ARGB32);
Toshihiro Shimizu 890ddd
  painter.drawImage(0,0,img);
Toshihiro Shimizu 890ddd
  }
Shinya Kitaoka 120a6e
};
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
shun-iwasawa f84c65
// CellMarksPopup
shun-iwasawa f84c65
//-----------------------------------------------------------------------------
shun-iwasawa f84c65
shun-iwasawa f84c65
CellMarksPopup::CellMarksPopup(QWidget *parent) : QDialog(parent) {
shun-iwasawa f84c65
  setWindowTitle(tr("Cell Marks Settings"));
shun-iwasawa f84c65
shun-iwasawa f84c65
  QList<tsceneproperties::cellmark> marks = TApp::instance()</tsceneproperties::cellmark>
shun-iwasawa f84c65
                                                ->getCurrentScene()
shun-iwasawa f84c65
                                                ->getScene()
shun-iwasawa f84c65
                                                ->getProperties()
shun-iwasawa f84c65
                                                ->getCellMarks();
shun-iwasawa f84c65
shun-iwasawa f84c65
  QGridLayout *layout = new QGridLayout();
shun-iwasawa f84c65
  layout->setMargin(10);
shun-iwasawa f84c65
  layout->setHorizontalSpacing(5);
shun-iwasawa f84c65
  layout->setVerticalSpacing(10);
shun-iwasawa f84c65
  {
shun-iwasawa f84c65
    int id = 0;
shun-iwasawa f84c65
    for (auto mark : marks) {
shun-iwasawa f84c65
      ColorField *colorF = new ColorField(this, false, mark.color, 20);
shun-iwasawa f84c65
      colorF->hideChannelsFields(true);
shun-iwasawa f84c65
      QLineEdit *nameF = new QLineEdit(mark.name, this);
shun-iwasawa f84c65
      m_fields.append({id, colorF, nameF});
shun-iwasawa f84c65
shun-iwasawa f84c65
      int row = layout->rowCount();
shun-iwasawa f84c65
shun-iwasawa f84c65
      layout->addWidget(new QLabel(QString("%1:").arg(id), this), row, 0,
shun-iwasawa f84c65
                        Qt::AlignRight | Qt::AlignVCenter);
shun-iwasawa f84c65
shun-iwasawa f84c65
      layout->addWidget(colorF, row, 1);
shun-iwasawa f84c65
      layout->addWidget(nameF, row, 2);
shun-iwasawa f84c65
shun-iwasawa f84c65
      connect(colorF, SIGNAL(colorChanged(const TPixel32 &, bool)), this,
shun-iwasawa f84c65
              SLOT(onColorChanged(const TPixel32 &, bool)));
shun-iwasawa f84c65
      connect(nameF, SIGNAL(editingFinished()), this, SLOT(onNameChanged()));
shun-iwasawa f84c65
      id++;
shun-iwasawa f84c65
    }
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
  layout->setColumnStretch(2, 1);
shun-iwasawa f84c65
  setLayout(layout);
shun-iwasawa f84c65
}
shun-iwasawa f84c65
shun-iwasawa f84c65
void CellMarksPopup::update() {
shun-iwasawa f84c65
  QList<tsceneproperties::cellmark> marks = TApp::instance()</tsceneproperties::cellmark>
shun-iwasawa f84c65
                                                ->getCurrentScene()
shun-iwasawa f84c65
                                                ->getScene()
shun-iwasawa f84c65
                                                ->getProperties()
shun-iwasawa f84c65
                                                ->getCellMarks();
shun-iwasawa f84c65
  assert(marks.count() == m_fields.count());
shun-iwasawa f84c65
  int id = 0;
shun-iwasawa f84c65
  for (auto mark : marks) {
shun-iwasawa f84c65
    assert(m_fields[id].id == id);
shun-iwasawa f84c65
    m_fields[id].colorField->setColor(mark.color);
shun-iwasawa f84c65
    m_fields[id].nameField->setText(mark.name);
shun-iwasawa f84c65
    id++;
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
}
shun-iwasawa f84c65
shun-iwasawa f84c65
void CellMarksPopup::onColorChanged(const TPixel32 &color, bool isDragging) {
shun-iwasawa f84c65
  if (isDragging) return;
shun-iwasawa f84c65
  // obtain id
shun-iwasawa f84c65
  int id             = -1;
shun-iwasawa f84c65
  ColorField *colorF = qobject_cast<colorfield *="">(sender());</colorfield>
shun-iwasawa f84c65
  for (auto field : m_fields) {
shun-iwasawa f84c65
    if (field.colorField == colorF) {
shun-iwasawa f84c65
      id = field.id;
shun-iwasawa f84c65
      break;
shun-iwasawa f84c65
    }
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
  if (id < 0) return;
shun-iwasawa f84c65
shun-iwasawa f84c65
  // return if the value is unchanged
shun-iwasawa f84c65
  TPixel32 oldColor = TApp::instance()
shun-iwasawa f84c65
                          ->getCurrentScene()
shun-iwasawa f84c65
                          ->getScene()
shun-iwasawa f84c65
                          ->getProperties()
shun-iwasawa f84c65
                          ->getCellMark(id)
shun-iwasawa f84c65
                          .color;
shun-iwasawa f84c65
  if (color == oldColor) return;
shun-iwasawa f84c65
shun-iwasawa f84c65
  EditCellMarkUndo *undo = new EditCellMarkUndo(id, color);
shun-iwasawa f84c65
  undo->redo();
shun-iwasawa f84c65
  TUndoManager::manager()->add(undo);
shun-iwasawa f84c65
}
shun-iwasawa f84c65
shun-iwasawa f84c65
void CellMarksPopup::onNameChanged() {
shun-iwasawa f84c65
  // obtain id
shun-iwasawa f84c65
  int id           = -1;
shun-iwasawa f84c65
  QLineEdit *nameF = qobject_cast<qlineedit *="">(sender());</qlineedit>
shun-iwasawa f84c65
  for (auto field : m_fields) {
shun-iwasawa f84c65
    if (field.nameField == nameF) {
shun-iwasawa f84c65
      id = field.id;
shun-iwasawa f84c65
      break;
shun-iwasawa f84c65
    }
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
  if (id < 0) return;
shun-iwasawa f84c65
shun-iwasawa f84c65
  // return if the value is unchanged
shun-iwasawa f84c65
  QString oldName = TApp::instance()
shun-iwasawa f84c65
                        ->getCurrentScene()
shun-iwasawa f84c65
                        ->getScene()
shun-iwasawa f84c65
                        ->getProperties()
shun-iwasawa f84c65
                        ->getCellMark(id)
shun-iwasawa f84c65
                        .name;
shun-iwasawa f84c65
  if (nameF->text() == oldName) return;
shun-iwasawa f84c65
  // reject empty string
shun-iwasawa f84c65
  if (nameF->text().isEmpty()) {
shun-iwasawa f84c65
    nameF->setText(oldName);
shun-iwasawa f84c65
    return;
shun-iwasawa f84c65
  }
shun-iwasawa f84c65
shun-iwasawa f84c65
  EditCellMarkUndo *undo = new EditCellMarkUndo(id, nameF->text());
shun-iwasawa f84c65
  undo->redo();
shun-iwasawa f84c65
  TUndoManager::manager()->add(undo);
shun-iwasawa f84c65
}
shun-iwasawa f84c65
shun-iwasawa f84c65
//=============================================================================
Toshihiro Shimizu 890ddd
// SceneSettingsPopup
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
SceneSettingsPopup::SceneSettingsPopup()
shun-iwasawa f84c65
    : QDialog(TApp::instance()->getMainWindow()), m_cellMarksPopup(nullptr) {
Shinya Kitaoka 120a6e
  setWindowTitle(tr("Scene Settings"));
Shinya Kitaoka 120a6e
  setObjectName("SceneSettings");
Shinya Kitaoka 120a6e
  TSceneProperties *sprop = getProperties();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // Frame Rate
Shinya Kitaoka 120a6e
  double frameRate = sprop->getOutputProperties()->getFrameRate();
Shinya Kitaoka 120a6e
  m_frameRateFld   = new DoubleLineEdit(this, frameRate);
Shinya Kitaoka 120a6e
  m_frameRateFld->setRange(1, 100);
Shinya Kitaoka 120a6e
  m_frameRateFld->setDecimals(2);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // Camera BG color
Shinya Kitaoka 120a6e
  m_bgColorFld = new ColorField(this, true, sprop->getBgColor());
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // Field Guide Size - A/R
Shinya Kitaoka 120a6e
  int fieldGuideSize = sprop->getFieldGuideSize();
Shinya Kitaoka 120a6e
  m_fieldGuideFld    = new DVGui::IntLineEdit(this, fieldGuideSize, 0, 50);
Shinya Kitaoka 120a6e
  m_aspectRatioFld   = new DoubleLineEdit(this, 1.38);
Shinya Kitaoka 120a6e
  m_aspectRatioFld->setRange(-10000.0, 10000.0);
Shinya Kitaoka 120a6e
  m_aspectRatioFld->setDecimals(5);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // Image Subsampling  - Tlv Subsampling
Shinya Kitaoka 120a6e
  int fullcolorSubsampling = sprop->getFullcolorSubsampling();
Shinya Kitaoka 120a6e
  m_fullcolorSubsamplingFld =
Shinya Kitaoka 120a6e
      new DVGui::IntLineEdit(this, fullcolorSubsampling, 1);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int tlvSubsampling  = sprop->getTlvSubsampling();
Shinya Kitaoka 120a6e
  m_tlvSubsamplingFld = new DVGui::IntLineEdit(this, tlvSubsampling, 1);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // Marker Interval - Start Frame
shun-iwasawa fe3506
  int distance, offset, secDistance;
shun-iwasawa fe3506
  sprop->getMarkers(distance, offset, secDistance);
Shinya Kitaoka 120a6e
  m_markerIntervalFld = new DVGui::IntLineEdit(this, distance, 0);
Shinya Kitaoka 120a6e
  m_startFrameFld     = new DVGui::IntLineEdit(this, offset);
Shinya Kitaoka 120a6e
shun_iwasawa 2c0f50
  // Whether the column color filter and transparency is available also in
shun_iwasawa 2c0f50
  // render
shun_iwasawa 2c0f50
  m_colorFilterOnRenderCB = new DVGui::CheckBox(
shun_iwasawa 2c0f50
      tr("Enable Column Color Filter and Transparency for Rendering"), this);
shun_iwasawa 2c0f50
  m_colorFilterOnRenderCB->setChecked(
shun_iwasawa 2c0f50
      sprop->isColumnColorFilterOnRenderEnabled());
shun_iwasawa 2c0f50
shun-iwasawa f84c65
  QPushButton *editCellMarksButton =
shun-iwasawa f84c65
      new QPushButton(tr("Edit Cell Marks"), this);
shun-iwasawa f84c65
Shinya Kitaoka 120a6e
  // layout
Shinya Kitaoka 120a6e
  QGridLayout *mainLayout = new QGridLayout();
Shinya Kitaoka 120a6e
  mainLayout->setMargin(10);
Shinya Kitaoka 120a6e
  mainLayout->setHorizontalSpacing(5);
Shinya Kitaoka 120a6e
  mainLayout->setVerticalSpacing(15);
Shinya Kitaoka 120a6e
  {
Shinya Kitaoka 120a6e
    // Frame Rate
Shinya Kitaoka 120a6e
    mainLayout->addWidget(new QLabel(tr("Frame Rate:"), this), 0, 0,
Shinya Kitaoka 120a6e
                          Qt::AlignRight | Qt::AlignVCenter);
shun-iwasawa fe3506
    mainLayout->addWidget(m_frameRateFld, 0, 1, 1, 4,
shun-iwasawa fe3506
                          Qt::AlignLeft | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
    // Camera BG color
Shinya Kitaoka 120a6e
    mainLayout->addWidget(new QLabel(tr("Camera BG Color:"), this), 1, 0,
Shinya Kitaoka 120a6e
                          Qt::AlignRight | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
    mainLayout->addWidget(m_bgColorFld, 1, 1, 1, 4);
Shinya Kitaoka 120a6e
    // Field Guide Size - A/R
Shinya Kitaoka 120a6e
    mainLayout->addWidget(new QLabel(tr("Field Guide Size:"), this), 2, 0,
Shinya Kitaoka 120a6e
                          Qt::AlignRight | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
    mainLayout->addWidget(m_fieldGuideFld, 2, 1);
Shinya Kitaoka 120a6e
    mainLayout->addWidget(new QLabel(tr("A/R:"), this), 2, 2,
Shinya Kitaoka 120a6e
                          Qt::AlignRight | Qt::AlignVCenter);
shun-iwasawa fe3506
    mainLayout->addWidget(m_aspectRatioFld, 2, 3, 1, 2,
shun-iwasawa fe3506
                          Qt::AlignLeft | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
    // Image Subsampling  - Tlv Subsampling
Shinya Kitaoka 120a6e
    mainLayout->addWidget(new QLabel(tr("Image Subsampling:"), this), 3, 0,
Shinya Kitaoka 120a6e
                          Qt::AlignRight | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
    mainLayout->addWidget(m_fullcolorSubsamplingFld, 3, 1);
Shinya Kitaoka 120a6e
    if (m_tlvSubsamplingFld) {
Shinya Kitaoka 120a6e
      mainLayout->addWidget(new QLabel(tr("TLV Subsampling:"), this), 4, 0,
Shinya Kitaoka 120a6e
                            Qt::AlignRight | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
      mainLayout->addWidget(m_tlvSubsamplingFld, 4, 1);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    // Marker Interval - Start Frame
Shinya Kitaoka 120a6e
    mainLayout->addWidget(new QLabel(tr("Marker Interval:"), this), 5, 0,
Shinya Kitaoka 120a6e
                          Qt::AlignRight | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
    mainLayout->addWidget(m_markerIntervalFld, 5, 1);
Shinya Kitaoka 120a6e
    mainLayout->addWidget(new QLabel(tr("  Start Frame:"), this), 5, 2,
Shinya Kitaoka 120a6e
                          Qt::AlignRight | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
    mainLayout->addWidget(m_startFrameFld, 5, 3);
shun_iwasawa 2c0f50
shun_iwasawa 2c0f50
    // Use Color Filter and Transparency for Rendering
shun_iwasawa 2c0f50
    mainLayout->addWidget(m_colorFilterOnRenderCB, 6, 0, 1, 4);
shun-iwasawa f84c65
shun-iwasawa f84c65
    // cell marks
shun-iwasawa f84c65
    mainLayout->addWidget(new QLabel(tr("Cell Marks:"), this), 7, 0,
shun-iwasawa f84c65
                          Qt::AlignRight | Qt::AlignVCenter);
shun-iwasawa f84c65
    mainLayout->addWidget(editCellMarksButton, 7, 1, 1, 4,
shun-iwasawa f84c65
                          Qt::AlignLeft | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  mainLayout->setColumnStretch(0, 0);
Shinya Kitaoka 120a6e
  mainLayout->setColumnStretch(1, 0);
Shinya Kitaoka 120a6e
  mainLayout->setColumnStretch(2, 0);
Shinya Kitaoka 120a6e
  mainLayout->setColumnStretch(3, 0);
Shinya Kitaoka 120a6e
  mainLayout->setColumnStretch(4, 1);
shun-iwasawa 481b59
  mainLayout->setRowStretch(9, 1);
Shinya Kitaoka 120a6e
  setLayout(mainLayout);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // signal-slot connections
Shinya Kitaoka 120a6e
  bool ret = true;
Shinya Kitaoka 120a6e
  // Frame Rate
Shinya Kitaoka 120a6e
  ret = ret && connect(m_frameRateFld, SIGNAL(editingFinished()), this,
Shinya Kitaoka 120a6e
                       SLOT(onFrameRateEditingFinished()));
Shinya Kitaoka 120a6e
  // Camera BG color
Shinya Kitaoka 120a6e
  ret =
Shinya Kitaoka 120a6e
      ret && connect(m_bgColorFld, SIGNAL(colorChanged(const TPixel32 &, bool)),
Shinya Kitaoka 120a6e
                     this, SLOT(setBgColor(const TPixel32 &, bool)));
Shinya Kitaoka 120a6e
  // Field Guide Size - A/R
Shinya Kitaoka 120a6e
  ret = ret && connect(m_fieldGuideFld, SIGNAL(editingFinished()), this,
Shinya Kitaoka 120a6e
                       SLOT(onFieldGuideSizeEditingFinished()));
Shinya Kitaoka 120a6e
  ret = ret && connect(m_aspectRatioFld, SIGNAL(editingFinished()), this,
Shinya Kitaoka 120a6e
                       SLOT(onFieldGuideAspectRatioEditingFinished()));
Shinya Kitaoka 120a6e
  // Image Subsampling  - Tlv Subsampling
Shinya Kitaoka 120a6e
  ret = ret && connect(m_fullcolorSubsamplingFld, SIGNAL(editingFinished()),
Shinya Kitaoka 120a6e
                       this, SLOT(onFullColorSubsampEditingFinished()));
Shinya Kitaoka 120a6e
  if (m_tlvSubsamplingFld)
Shinya Kitaoka 120a6e
    ret = ret && connect(m_tlvSubsamplingFld, SIGNAL(editingFinished()), this,
Shinya Kitaoka 120a6e
                         SLOT(onTlvSubsampEditingFinished()));
Shinya Kitaoka 120a6e
  // Marker Interval - Start Frame
Shinya Kitaoka 120a6e
  ret = ret && connect(m_markerIntervalFld, SIGNAL(editingFinished()), this,
shun-iwasawa fe3506
                       SLOT(onMakerInformationChanged()));
Shinya Kitaoka 120a6e
  ret = ret && connect(m_startFrameFld, SIGNAL(editingFinished()), this,
shun-iwasawa fe3506
                       SLOT(onMakerInformationChanged()));
shun-iwasawa fe3506
shun_iwasawa 2c0f50
  // Use Color Filter and Transparency for Rendering
shun_iwasawa 2c0f50
  ret = ret && connect(m_colorFilterOnRenderCB, SIGNAL(stateChanged(int)), this,
shun_iwasawa 2c0f50
                       SLOT(onColorFilterOnRenderChanged()));
shun-iwasawa f84c65
  // Cell Marks
shun-iwasawa f84c65
  ret = ret && connect(editCellMarksButton, SIGNAL(clicked()), this,
shun-iwasawa f84c65
                       SLOT(onEditCellMarksButtonClicked()));
Shinya Kitaoka 120a6e
  assert(ret);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneSettingsPopup::showEvent(QShowEvent *e) {
Shinya Kitaoka 120a6e
  TSceneHandle *sceneHandle = TApp::instance()->getCurrentScene();
Shinya Kitaoka 120a6e
  connect(sceneHandle, SIGNAL(sceneChanged()), SLOT(update()));
Shinya Kitaoka 120a6e
  connect(sceneHandle, SIGNAL(sceneSwitched()), SLOT(update()));
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneSettingsPopup::hideEvent(QHideEvent *e) {
Shinya Kitaoka 120a6e
  TSceneHandle *sceneHandle = TApp::instance()->getCurrentScene();
Shinya Kitaoka 120a6e
  disconnect(sceneHandle, SIGNAL(sceneChanged()), this, SLOT(update()));
Shinya Kitaoka 120a6e
  disconnect(sceneHandle, SIGNAL(sceneSwitched()), this, SLOT(update()));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TSceneProperties *SceneSettingsPopup::getProperties() const {
Shinya Kitaoka 120a6e
  return TApp::instance()->getCurrentScene()->getScene()->getProperties();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneSettingsPopup::update() {
Shinya Kitaoka 120a6e
  TSceneProperties *sprop = getProperties();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QString str;
Shinya Kitaoka 120a6e
  m_frameRateFld->setValue(sprop->getOutputProperties()->getFrameRate());
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TPixel32 col1, col2;
Shinya Kitaoka 120a6e
  Preferences::instance()->getChessboardColors(col1, col2);
Shinya Kitaoka 120a6e
  m_bgColorFld->setChessboardColors(col1, col2);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TPixel bgColor = sprop->getBgColor();
Shinya Kitaoka 120a6e
  m_bgColorFld->setColor(bgColor);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  m_fieldGuideFld->setValue(sprop->getFieldGuideSize());
Shinya Kitaoka 120a6e
  m_aspectRatioFld->setValue(sprop->getFieldGuideAspectRatio());
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  UnitParameters::setFieldGuideAspectRatio(sprop->getFieldGuideAspectRatio());
Shinya Kitaoka 120a6e
  m_fullcolorSubsamplingFld->setValue(sprop->getFullcolorSubsampling());
Shinya Kitaoka 120a6e
  if (m_tlvSubsamplingFld)
Shinya Kitaoka 120a6e
    m_tlvSubsamplingFld->setValue(sprop->getTlvSubsampling());
shun-iwasawa fe3506
  int markerDistance = 0, markerOffset = 0, secDistance;
shun-iwasawa fe3506
  sprop->getMarkers(markerDistance, markerOffset, secDistance);
Shinya Kitaoka 120a6e
  m_markerIntervalFld->setValue(markerDistance);
Shinya Kitaoka 120a6e
  m_startFrameFld->setValue(markerOffset + 1);
shun-iwasawa 2e274c
  m_colorFilterOnRenderCB->setChecked(
shun-iwasawa 2e274c
      sprop->isColumnColorFilterOnRenderEnabled());
shun-iwasawa f84c65
shun-iwasawa f84c65
  if (m_cellMarksPopup) m_cellMarksPopup->update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneSettingsPopup::onFrameRateEditingFinished() {
Shinya Kitaoka 120a6e
  TSceneProperties *sprop  = getProperties();
Shinya Kitaoka 120a6e
  double frameRate         = sprop->getOutputProperties()->getFrameRate();
Shinya Kitaoka 120a6e
  double frameRateFldValue = m_frameRateFld->getValue();
Shinya Kitaoka 120a6e
  if (frameRate == frameRateFldValue) return;
Shinya Kitaoka 120a6e
  sprop->getOutputProperties()->setFrameRate(frameRateFldValue);
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentScene()->getScene()->updateSoundColumnFrameRate();
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentScene()->notifySceneChanged();
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentXsheet()->getXsheet()->updateFrameCount();
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneSettingsPopup::onFieldGuideSizeEditingFinished() {
Shinya Kitaoka 120a6e
  TSceneProperties *sprop = getProperties();
Shinya Kitaoka 120a6e
  int fieldGuideSize      = sprop->getFieldGuideSize();
Shinya Kitaoka 120a6e
  int fieldGuideSizefld   = m_fieldGuideFld->text().toInt();
Shinya Kitaoka 120a6e
  if (fieldGuideSize == fieldGuideSizefld) return;
Shinya Kitaoka 120a6e
  sprop->setFieldGuideSize(fieldGuideSizefld);
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentScene()->notifySceneChanged();
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneSettingsPopup::onFieldGuideAspectRatioEditingFinished() {
Shinya Kitaoka 120a6e
  TSceneProperties *sprop      = getProperties();
Shinya Kitaoka 120a6e
  double fieldGuideAspectRatio = sprop->getFieldGuideAspectRatio();
Shinya Kitaoka 120a6e
  double aspectRatioFld        = m_aspectRatioFld->text().toDouble();
Shinya Kitaoka 120a6e
  if (fieldGuideAspectRatio == aspectRatioFld) return;
Shinya Kitaoka 120a6e
  sprop->setFieldGuideAspectRatio(aspectRatioFld);
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentScene()->notifySceneChanged();
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
Shinya Kitaoka 120a6e
  UnitParameters::setFieldGuideAspectRatio(m_aspectRatioFld->text().toDouble());
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneSettingsPopup::onFullColorSubsampEditingFinished() {
Shinya Kitaoka 120a6e
  TSceneProperties *sprop     = getProperties();
Shinya Kitaoka 120a6e
  int fullcolorSubsampling    = sprop->getFullcolorSubsampling();
Shinya Kitaoka 120a6e
  int fullcolorSubsamplingFld = m_fullcolorSubsamplingFld->getValue();
Shinya Kitaoka 120a6e
  if (fullcolorSubsampling == fullcolorSubsamplingFld) return;
Shinya Kitaoka 120a6e
  sprop->setFullcolorSubsampling(fullcolorSubsamplingFld);
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentScene()->notifySceneChanged();
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneSettingsPopup::onTlvSubsampEditingFinished() {
Shinya Kitaoka 120a6e
  if (!m_tlvSubsamplingFld) return;
Shinya Kitaoka 120a6e
  TSceneProperties *sprop = getProperties();
Shinya Kitaoka 120a6e
  int tlvSubsampling      = sprop->getTlvSubsampling();
Shinya Kitaoka 120a6e
  int tlvSubsamplingFld   = m_tlvSubsamplingFld->getValue();
Shinya Kitaoka 120a6e
  if (tlvSubsamplingFld == tlvSubsampling) return;
Shinya Kitaoka 120a6e
  sprop->setTlvSubsampling(tlvSubsamplingFld);
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentScene()->notifySceneChanged();
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
shun-iwasawa fe3506
void SceneSettingsPopup::onMakerInformationChanged() {
Shinya Kitaoka 120a6e
  TSceneProperties *sprop = getProperties();
shun-iwasawa fe3506
  int distance, offset, secDistance;
shun-iwasawa fe3506
  sprop->getMarkers(distance, offset, secDistance);
Shinya Kitaoka 120a6e
  int markerDistance = m_markerIntervalFld->text().toInt();
Shinya Kitaoka 120a6e
  int markerOffset   = m_startFrameFld->text().toInt() - 1;
Toshihiro Shimizu 890ddd
shun-iwasawa fe3506
  if (distance == markerDistance && offset == markerOffset) return;
Shinya Kitaoka 120a6e
  sprop->setMarkers(markerDistance, markerOffset);
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentScene()->notifySceneChanged();
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SceneSettingsPopup::setBgColor(const TPixel32 &bgColor, bool isDragging) {
Shinya Kitaoka 120a6e
  TSceneProperties *sprop = getProperties();
Shinya Kitaoka 120a6e
  sprop->setBgColor(bgColor);
Shinya Kitaoka 120a6e
  // TODO: forse sarebbe meglio usare una notifica piu' specifica
Shinya Kitaoka 120a6e
  if (!isDragging) Previewer::clearAll();
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentScene()->notifySceneChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
shun_iwasawa 2c0f50
//-----------------------------------------------------------------------------
shun_iwasawa 2c0f50
shun_iwasawa 2c0f50
void SceneSettingsPopup::onColorFilterOnRenderChanged() {
shun_iwasawa 2c0f50
  TSceneProperties *sprop = getProperties();
shun_iwasawa 2c0f50
  sprop->enableColumnColorFilterOnRender(m_colorFilterOnRenderCB->isChecked());
shun_iwasawa 2c0f50
  TApp::instance()->getCurrentScene()->notifySceneChanged();
shun_iwasawa 2c0f50
}
shun_iwasawa 2c0f50
shun-iwasawa f84c65
//-----------------------------------------------------------------------------
shun-iwasawa f84c65
shun-iwasawa f84c65
void SceneSettingsPopup::onEditCellMarksButtonClicked() {
shun-iwasawa f84c65
  if (!m_cellMarksPopup) m_cellMarksPopup = new CellMarksPopup(this);
shun-iwasawa f84c65
  m_cellMarksPopup->show();
shun-iwasawa f84c65
  m_cellMarksPopup->raise();
shun-iwasawa f84c65
}
shun-iwasawa f84c65
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
OpenPopupCommandHandler<scenesettingspopup> openSceneSettingsPopup(</scenesettingspopup>
Shinya Kitaoka 120a6e
    MI_SceneSettings);