|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "outputsettingspopup.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Tnz6 includes
|
|
Toshihiro Shimizu |
890ddd |
#include "menubarcommandids.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "formatsettingspopups.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tapp.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "camerasettingspopup.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "pane.h"
|
|
shun-iwasawa |
cd4694 |
#include "boardsettingspopup.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzQt includes
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/menubarcommand.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/gutil.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/filefield.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/doublefield.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/checkbox.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/toonzscene.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txsheet.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjecttree.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/preferences.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toutputproperties.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tcamera.h"
|
|
shun-iwasawa |
cd4694 |
#include "toonz/boardsettings.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzBase includes
|
|
Toshihiro Shimizu |
890ddd |
#include "trasterfx.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzCore includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tiio.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tlevel_io.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tenv.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tsystem.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tstream.h"
|
|
shun-iwasawa |
694080 |
#include "tfiletype.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Qt includes
|
|
Toshihiro Shimizu |
890ddd |
#include <qlabel></qlabel>
|
|
Toshihiro Shimizu |
890ddd |
#include <qpushbutton></qpushbutton>
|
|
Toshihiro Shimizu |
890ddd |
#include <qcombobox></qcombobox>
|
|
Toshihiro Shimizu |
890ddd |
#include <qmainwindow></qmainwindow>
|
|
Toshihiro Shimizu |
890ddd |
#include <qframe></qframe>
|
|
Toshihiro Shimizu |
890ddd |
#include <qmessagebox></qmessagebox>
|
|
shun-iwasawa |
59726b |
#include <qmap></qmap>
|
|
shun-iwasawa |
f36064 |
#include <qlistwidget></qlistwidget>
|
|
shun-iwasawa |
f36064 |
#include <qscrollarea></qscrollarea>
|
|
shun-iwasawa |
f36064 |
#include <qpropertyanimation></qpropertyanimation>
|
|
shun-iwasawa |
f36064 |
#include <qspaceritem></qspaceritem>
|
|
shun-iwasawa |
c7ddce |
#include <qevent></qevent>
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enum ResampleOption {
|
|
shun-iwasawa |
59726b |
c_standard = 0,
|
|
Shinya Kitaoka |
120a6e |
c_improved,
|
|
Shinya Kitaoka |
120a6e |
c_high,
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
c_triangle,
|
|
Shinya Kitaoka |
120a6e |
c_mitchell,
|
|
Shinya Kitaoka |
120a6e |
c_cubic5,
|
|
Shinya Kitaoka |
120a6e |
c_cubic75,
|
|
Shinya Kitaoka |
120a6e |
c_cubic1,
|
|
Shinya Kitaoka |
120a6e |
c_hann2,
|
|
Shinya Kitaoka |
120a6e |
c_hann3,
|
|
Shinya Kitaoka |
120a6e |
c_hamming2,
|
|
Shinya Kitaoka |
120a6e |
c_hamming3,
|
|
Shinya Kitaoka |
120a6e |
c_lanczos2,
|
|
Shinya Kitaoka |
120a6e |
c_lanczos3,
|
|
Shinya Kitaoka |
120a6e |
c_gauss,
|
|
Shinya Kitaoka |
120a6e |
c_closestPixel,
|
|
shun-iwasawa |
59726b |
c_bilinear,
|
|
shun-iwasawa |
59726b |
ResampleOptionCount
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
59726b |
struct resampleInfo {
|
|
shun-iwasawa |
59726b |
QString idString;
|
|
shun-iwasawa |
59726b |
TRenderSettings::ResampleQuality quality;
|
|
shun-iwasawa |
59726b |
QString uiString = "";
|
|
shun-iwasawa |
59726b |
resampleInfo(QString _idStr = "",
|
|
shun-iwasawa |
59726b |
TRenderSettings::ResampleQuality _quality =
|
|
shun-iwasawa |
59726b |
TRenderSettings::StandardResampleQuality)
|
|
shun-iwasawa |
59726b |
: idString(_idStr), quality(_quality), uiString("") {}
|
|
shun-iwasawa |
59726b |
};
|
|
shun-iwasawa |
59726b |
|
|
shun-iwasawa |
59726b |
QMap<resampleoption, resampleinfo=""> resampleInfoMap = {</resampleoption,>
|
|
shun-iwasawa |
59726b |
{c_standard,
|
|
shun-iwasawa |
59726b |
resampleInfo("Standard", TRenderSettings::StandardResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_improved,
|
|
shun-iwasawa |
59726b |
resampleInfo("Improved", TRenderSettings::ImprovedResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_high, resampleInfo("High", TRenderSettings::HighResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_triangle, resampleInfo("Triangle filter",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Triangle_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_mitchell, resampleInfo("Mitchell-Netravali filter",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Mitchell_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_cubic5, resampleInfo("Cubic convolution, a = .5",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Cubic5_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_cubic75, resampleInfo("Cubic convolution, a = .75",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Cubic75_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_cubic1, resampleInfo("Cubic convolution, a = 1",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Cubic1_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_hann2, resampleInfo("Hann window, rad = 2",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Hann2_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_hann3, resampleInfo("Hann window, rad = 3",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Hann3_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_hamming2, resampleInfo("Hamming window, rad = 2",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Hamming2_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_hamming3, resampleInfo("Hamming window, rad = 3",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Hamming3_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_lanczos2, resampleInfo("Lanczos window, rad = 2",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Lanczos2_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_lanczos3, resampleInfo("Lanczos window, rad = 3",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Lanczos3_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_gauss, resampleInfo("Gaussian convolution",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Gauss_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_closestPixel,
|
|
shun-iwasawa |
59726b |
resampleInfo("Closest Pixel (Nearest Neighbor)",
|
|
shun-iwasawa |
59726b |
TRenderSettings::ClosestPixel_FilterResampleQuality)},
|
|
shun-iwasawa |
59726b |
{c_bilinear,
|
|
shun-iwasawa |
59726b |
resampleInfo("Bilinear",
|
|
shun-iwasawa |
59726b |
TRenderSettings::Bilinear_FilterResampleQuality)}};
|
|
shun-iwasawa |
59726b |
|
|
shun-iwasawa |
59726b |
ResampleOption quality2index(TRenderSettings::ResampleQuality quality) {
|
|
shun-iwasawa |
59726b |
QMapIterator<resampleoption, resampleinfo=""> i(resampleInfoMap);</resampleoption,>
|
|
shun-iwasawa |
59726b |
while (i.hasNext()) {
|
|
shun-iwasawa |
59726b |
i.next();
|
|
shun-iwasawa |
59726b |
if (i.value().quality == quality) return i.key();
|
|
shun-iwasawa |
59726b |
}
|
|
shun-iwasawa |
59726b |
return c_standard;
|
|
shun-iwasawa |
59726b |
}
|
|
shun-iwasawa |
59726b |
|
|
shun-iwasawa |
481b59 |
enum ChannelWidth { c_8bit, c_16bit, c_32bit }; // 32bit: compute in float
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
enum DominantField { c_odd, c_even, c_none };
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enum ThreadsOption {
|
|
Shinya Kitaoka |
120a6e |
c_single,
|
|
Shinya Kitaoka |
120a6e |
c_half,
|
|
Shinya Kitaoka |
120a6e |
c_all,
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
enum GranularityOption { c_off, c_large, c_medium, c_small };
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
694080 |
bool checkForSeqNum(QString type) {
|
|
shun-iwasawa |
694080 |
TFileType::Type typeInfo = TFileType::getInfoFromExtension(type);
|
|
shun-iwasawa |
694080 |
if ((typeInfo & TFileType::IMAGE) && !(typeInfo & TFileType::LEVEL))
|
|
shun-iwasawa |
694080 |
return true;
|
|
shun-iwasawa |
694080 |
else
|
|
shun-iwasawa |
694080 |
return false;
|
|
shun-iwasawa |
694080 |
}
|
|
Shinya Kitaoka |
120a6e |
} // anonymous namespace
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
/*! \class OutputSettingsPopup
|
|
Shinya Kitaoka |
120a6e |
\brief The OutputSettingsPopup class provides a output settings
|
|
Shinya Kitaoka |
120a6e |
dialog.
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
Inherits \b Dialog.
|
|
Shinya Kitaoka |
120a6e |
This class allows to set output properties of current scene.
|
|
Shinya Kitaoka |
120a6e |
It's composed of a list of field to set this preperties:
|
|
Shinya Kitaoka |
120a6e |
a \b DVGui::FileField to set output directory, a LineEdit for
|
|
Shinya Kitaoka |
120a6e |
output name,
|
|
Shinya Kitaoka |
120a6e |
a \b QComboBox to choose format, a button near QComboBox that
|
|
Shinya Kitaoka |
120a6e |
open a popup
|
|
Shinya Kitaoka |
120a6e |
to change format chosen settings, other QComboBox to choose
|
|
Shinya Kitaoka |
120a6e |
camera,
|
|
Shinya Kitaoka |
120a6e |
resample balance, channel width and dominant field and other
|
|
Shinya Kitaoka |
120a6e |
number field
|
|
Shinya Kitaoka |
120a6e |
to set values for frame and time stretch.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
OutputSettingsPopup::OutputSettingsPopup(bool isPreview)
|
|
shun-iwasawa |
f36064 |
: Dialog(TApp::instance()->getMainWindow(), false, isPreview,
|
|
Shinya Kitaoka |
120a6e |
isPreview ? "PreviewSettings" : "OutputSettings")
|
|
shun-iwasawa |
f36064 |
, m_subcameraChk(nullptr)
|
|
shun-iwasawa |
f36064 |
, m_applyShrinkChk(nullptr)
|
|
shun-iwasawa |
f36064 |
, m_outputCameraOm(nullptr)
|
|
Shinya Kitaoka |
120a6e |
, m_isPreviewSettings(isPreview)
|
|
justburner |
69bbaf |
, m_allowMT(Preferences::instance()->getFfmpegMultiThread())
|
|
shun-iwasawa |
481b59 |
, m_presetCombo(nullptr)
|
|
shun-iwasawa |
481b59 |
, m_syncColorSettingsButton(nullptr) {
|
|
Shinya Kitaoka |
120a6e |
setWindowTitle(isPreview ? tr("Preview Settings") : tr("Output Settings"));
|
|
shun-iwasawa |
f36064 |
if (!isPreview) setObjectName("OutputSettingsPopup");
|
|
shun-iwasawa |
f36064 |
// create panel
|
|
shun-iwasawa |
f36064 |
QFrame *panel = createPanel(isPreview);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
// preview settings
|
|
shun-iwasawa |
f36064 |
if (isPreview) {
|
|
shun-iwasawa |
f36064 |
m_topLayout->setMargin(5);
|
|
shun-iwasawa |
f36064 |
m_topLayout->addWidget(panel, 0);
|
|
shun-iwasawa |
f36064 |
return;
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
// outputsettings with category list & scrollable panel
|
|
shun-iwasawa |
f36064 |
QPushButton *addPresetButton = new QPushButton(tr("Add"), this);
|
|
shun-iwasawa |
f36064 |
QPushButton *removePresetButton = new QPushButton(tr("Remove"), this);
|
|
shun-iwasawa |
f36064 |
m_presetCombo = new QComboBox(this);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
addPresetButton->setObjectName("PushButton_NoPadding");
|
|
shun-iwasawa |
f36064 |
removePresetButton->setObjectName("PushButton_NoPadding");
|
|
shun-iwasawa |
f36064 |
QString tooltip =
|
|
shun-iwasawa |
f36064 |
tr("Save current output settings.\nThe parameters to be saved are:\n- "
|
|
shun-iwasawa |
f36064 |
"Camera settings\n- Project folder to be saved in\n- File format\n- "
|
|
shun-iwasawa |
481b59 |
"File options\n- Resample Balance\n- Channel width\n- Linear Color "
|
|
shun-iwasawa |
481b59 |
"Space\n- Color Space Gamma");
|
|
shun-iwasawa |
f36064 |
addPresetButton->setToolTip(tooltip);
|
|
shun-iwasawa |
f36064 |
/*-- プリセットフォルダを調べ、コンボボックスにアイテムを格納する --*/
|
|
shun-iwasawa |
f36064 |
updatePresetComboItems();
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
QListWidget *categoryList = new QListWidget(this);
|
|
shun-iwasawa |
f36064 |
QStringList categories;
|
|
shun-iwasawa |
481b59 |
categories << tr("Camera") << tr("Color") << tr("File") << tr("More");
|
|
shun-iwasawa |
f36064 |
categoryList->addItems(categories);
|
|
shun-iwasawa |
f36064 |
categoryList->setFixedWidth(100);
|
|
shun-iwasawa |
f36064 |
categoryList->setCurrentRow(0);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
m_scrollArea = new QScrollArea(this);
|
|
shun-iwasawa |
f36064 |
m_scrollArea->setWidgetResizable(true);
|
|
shun-iwasawa |
f36064 |
m_scrollArea->setWidget(panel);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
QPushButton *renderButton = new QPushButton(tr("Render"), this);
|
|
shun-iwasawa |
f36064 |
renderButton->setIcon(createQIcon("render"));
|
|
shun-iwasawa |
f36064 |
renderButton->setIconSize(QSize(20, 20));
|
|
shun-iwasawa |
f36064 |
renderButton->setFixedWidth(200);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
m_topLayout->setMargin(5);
|
|
shun-iwasawa |
f36064 |
{
|
|
shun-iwasawa |
f36064 |
QHBoxLayout *presetLay = new QHBoxLayout();
|
|
shun-iwasawa |
f36064 |
presetLay->setMargin(0);
|
|
shun-iwasawa |
f36064 |
presetLay->setSpacing(5);
|
|
shun-iwasawa |
f36064 |
{
|
|
shun-iwasawa |
f36064 |
presetLay->addStretch(1);
|
|
shun-iwasawa |
f36064 |
presetLay->addWidget(new QLabel(tr("Presets:"), this), 1,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
presetLay->addWidget(m_presetCombo, 1);
|
|
shun-iwasawa |
f36064 |
presetLay->addWidget(addPresetButton, 0);
|
|
shun-iwasawa |
f36064 |
presetLay->addWidget(removePresetButton, 0);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
m_topLayout->addLayout(presetLay, 0);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
QHBoxLayout *middleLay = new QHBoxLayout();
|
|
shun-iwasawa |
f36064 |
middleLay->setMargin(0);
|
|
shun-iwasawa |
f36064 |
middleLay->setSpacing(5);
|
|
shun-iwasawa |
f36064 |
{
|
|
shun-iwasawa |
f36064 |
middleLay->addWidget(categoryList, 0);
|
|
shun-iwasawa |
f36064 |
middleLay->addWidget(m_scrollArea, 1);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
m_topLayout->addLayout(middleLay, 1);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
m_topLayout->addSpacing(5);
|
|
shun-iwasawa |
f36064 |
m_topLayout->addWidget(renderButton, 0, Qt::AlignCenter);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
bool ret = true;
|
|
shun-iwasawa |
f36064 |
ret = ret &&
|
|
shun-iwasawa |
f36064 |
connect(renderButton, SIGNAL(pressed()), this, SLOT(onRenderClicked()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(addPresetButton, SIGNAL(pressed()), this,
|
|
shun-iwasawa |
f36064 |
SLOT(onAddPresetButtonPressed()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(removePresetButton, SIGNAL(pressed()), this,
|
|
shun-iwasawa |
f36064 |
SLOT(onRemovePresetButtonPressed()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_presetCombo, SIGNAL(activated(const QString &)), this,
|
|
shun-iwasawa |
f36064 |
SLOT(onPresetSelected(const QString &)));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(categoryList, SIGNAL(itemClicked(QListWidgetItem *)),
|
|
shun-iwasawa |
f36064 |
this, SLOT(onCategoryActivated(QListWidgetItem *)));
|
|
shun-iwasawa |
f36064 |
assert(ret);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
void OutputSettingsPopup::onCategoryActivated(QListWidgetItem *item) {
|
|
shun-iwasawa |
f36064 |
AnimatedLabel *label;
|
|
shun-iwasawa |
f36064 |
QFrame *frame;
|
|
shun-iwasawa |
f36064 |
if (item->text() == tr("Camera")) {
|
|
shun-iwasawa |
f36064 |
label = m_cameraLabel;
|
|
shun-iwasawa |
f36064 |
frame = m_cameraBox;
|
|
shun-iwasawa |
481b59 |
} else if (item->text() == tr("Color")) {
|
|
shun-iwasawa |
481b59 |
label = m_colorLabel;
|
|
shun-iwasawa |
481b59 |
frame = m_colorBox;
|
|
shun-iwasawa |
f36064 |
} else if (item->text() == tr("File")) {
|
|
shun-iwasawa |
f36064 |
label = m_fileLabel;
|
|
shun-iwasawa |
f36064 |
frame = m_fileBox;
|
|
shun-iwasawa |
eb8f34 |
} else if (item->text() == tr("More")) {
|
|
shun-iwasawa |
eb8f34 |
label = m_moreLabel;
|
|
shun-iwasawa |
eb8f34 |
frame = m_moreBox;
|
|
shun-iwasawa |
f36064 |
} else
|
|
shun-iwasawa |
f36064 |
return;
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
m_scrollArea->ensureWidgetVisible(frame);
|
|
shun-iwasawa |
f36064 |
QPropertyAnimation *a = new QPropertyAnimation(label, "color");
|
|
shun-iwasawa |
f36064 |
a->setDuration(1000);
|
|
shun-iwasawa |
f36064 |
a->setStartValue(QColor(255, 255, 0, 128));
|
|
shun-iwasawa |
f36064 |
a->setEndValue(QColor(255, 255, 0, 0));
|
|
shun-iwasawa |
f36064 |
a->setEasingCurve(QEasingCurve::OutBack);
|
|
shun-iwasawa |
f36064 |
a->start(QPropertyAnimation::DeleteWhenStopped);
|
|
shun-iwasawa |
f36064 |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
QFrame *OutputSettingsPopup::createPanel(bool isPreview) {
|
|
shun-iwasawa |
f36064 |
QFrame *panel = new QFrame(this);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
m_cameraLabel = new AnimatedLabel(tr("Camera Settings"), this);
|
|
shun-iwasawa |
481b59 |
m_colorLabel = new AnimatedLabel(tr("Color Settings"), this);
|
|
shun-iwasawa |
481b59 |
if (isPreview)
|
|
shun-iwasawa |
481b59 |
m_syncColorSettingsButton =
|
|
shun-iwasawa |
481b59 |
new DVGui::CheckBox(tr("Sync with Output Settings"));
|
|
shun-iwasawa |
481b59 |
m_fileLabel = new AnimatedLabel(tr("File Settings"), this);
|
|
shun-iwasawa |
481b59 |
m_cameraBox = createCameraSettingsBox(isPreview);
|
|
shun-iwasawa |
481b59 |
m_colorBox = createColorSettingsBox(isPreview);
|
|
shun-iwasawa |
481b59 |
m_fileBox = createFileSettingsBox(isPreview);
|
|
Shinya Kitaoka |
120a6e |
if (!isPreview) {
|
|
shun-iwasawa |
eb8f34 |
m_moreLabel = new AnimatedLabel(tr("More Settings"), this);
|
|
shun-iwasawa |
eb8f34 |
m_moreBox = createMoreSettingsBox();
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
QVBoxLayout *lay = new QVBoxLayout();
|
|
shun-iwasawa |
f36064 |
lay->setMargin(5);
|
|
shun-iwasawa |
f36064 |
lay->setSpacing(3);
|
|
shun-iwasawa |
f36064 |
{
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_cameraLabel, 0);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_cameraBox, 0);
|
|
shun-iwasawa |
f36064 |
lay->addSpacing(10);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
481b59 |
QHBoxLayout *colorLabelLay = new QHBoxLayout();
|
|
shun-iwasawa |
481b59 |
colorLabelLay->setMargin(0);
|
|
shun-iwasawa |
481b59 |
colorLabelLay->setSpacing(0);
|
|
shun-iwasawa |
481b59 |
{
|
|
shun-iwasawa |
481b59 |
colorLabelLay->addWidget(m_colorLabel, 0);
|
|
shun-iwasawa |
481b59 |
colorLabelLay->addStretch(1);
|
|
shun-iwasawa |
481b59 |
if (isPreview && m_syncColorSettingsButton)
|
|
shun-iwasawa |
481b59 |
colorLabelLay->addWidget(m_syncColorSettingsButton, 0);
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
lay->addLayout(colorLabelLay, 0);
|
|
shun-iwasawa |
481b59 |
lay->addWidget(m_colorBox, 0);
|
|
shun-iwasawa |
481b59 |
lay->addSpacing(10);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_fileLabel, 0);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_fileBox, 0);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
if (!isPreview) {
|
|
shun-iwasawa |
f36064 |
lay->addSpacing(10);
|
|
shun-iwasawa |
eb8f34 |
lay->addWidget(m_moreLabel, 0);
|
|
shun-iwasawa |
eb8f34 |
lay->addWidget(m_moreBox, 0);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
lay->addStretch(1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
shun-iwasawa |
f36064 |
panel->setLayout(lay);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
if (isPreview && m_syncColorSettingsButton) {
|
|
shun-iwasawa |
481b59 |
bool ret = connect(m_syncColorSettingsButton, SIGNAL(stateChanged(int)),
|
|
shun-iwasawa |
481b59 |
SLOT(onSyncColorSettingsChecked(int)));
|
|
shun-iwasawa |
481b59 |
assert(ret);
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
f36064 |
return panel;
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
QFrame *OutputSettingsPopup::createCameraSettingsBox(bool isPreview) {
|
|
shun-iwasawa |
f36064 |
QFrame *cameraSettingsBox = new QFrame(this);
|
|
shun-iwasawa |
f36064 |
cameraSettingsBox->setObjectName("OutputSettingsBox");
|
|
shun-iwasawa |
f36064 |
|
|
Shinya Kitaoka |
120a6e |
// Output Camera
|
|
Shinya Kitaoka |
120a6e |
m_outputCameraOm = new QComboBox();
|
|
Shinya Kitaoka |
120a6e |
// Frame Start-End
|
|
Shinya Kitaoka |
120a6e |
m_startFld = new DVGui::IntLineEdit(this);
|
|
Shinya Kitaoka |
120a6e |
m_endFld = new DVGui::IntLineEdit(this);
|
|
Shinya Kitaoka |
120a6e |
// Step-Shrink
|
|
Shinya Kitaoka |
120a6e |
m_stepFld = new DVGui::IntLineEdit(this);
|
|
Shinya Kitaoka |
120a6e |
m_shrinkFld = new DVGui::IntLineEdit(this);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
QFrame *cameraParametersBox = nullptr;
|
|
shun-iwasawa |
f36064 |
if (!isPreview) {
|
|
shun-iwasawa |
f36064 |
m_cameraSettings = new CameraSettingsPopup();
|
|
shun-iwasawa |
f36064 |
cameraParametersBox = new QFrame(this);
|
|
shun-iwasawa |
f36064 |
cameraParametersBox->setObjectName("OutputSettingsCameraBox");
|
|
shun-iwasawa |
c7ddce |
m_outputCameraOm->setFocusPolicy(Qt::StrongFocus);
|
|
shun-iwasawa |
c7ddce |
m_outputCameraOm->installEventFilter(this);
|
|
shun-iwasawa |
f36064 |
} else {
|
|
shun-iwasawa |
f36064 |
// Subcamera checkbox
|
|
shun-iwasawa |
f36064 |
m_subcameraChk = new DVGui::CheckBox(tr("Use Sub-Camera"));
|
|
Shinya Kitaoka |
120a6e |
m_applyShrinkChk =
|
|
Shinya Kitaoka |
120a6e |
new DVGui::CheckBox(tr("Apply Shrink to Main Viewer"), this);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
m_outputCameraOm->setSizeAdjustPolicy(QComboBox::AdjustToContents);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
//-----
|
|
shun-iwasawa |
cd4694 |
|
|
shun-iwasawa |
f36064 |
QVBoxLayout *lay = new QVBoxLayout();
|
|
shun-iwasawa |
f36064 |
lay->setMargin(10);
|
|
shun-iwasawa |
f36064 |
lay->setSpacing(10);
|
|
shun-iwasawa |
f36064 |
{
|
|
shun-iwasawa |
f36064 |
// Output Camera
|
|
shun-iwasawa |
f36064 |
QHBoxLayout *outCamLay = new QHBoxLayout();
|
|
shun-iwasawa |
f36064 |
outCamLay->setMargin(0);
|
|
shun-iwasawa |
f36064 |
outCamLay->setSpacing(5);
|
|
shun-iwasawa |
f36064 |
{
|
|
shun-iwasawa |
f36064 |
outCamLay->addWidget(new QLabel(tr("Output Camera:"), this), 0);
|
|
shun-iwasawa |
f36064 |
outCamLay->addWidget(m_outputCameraOm, 0);
|
|
shun-iwasawa |
f36064 |
outCamLay->addStretch(1);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
lay->addLayout(outCamLay);
|
|
shun-iwasawa |
cd4694 |
|
|
shun-iwasawa |
f36064 |
if (!isPreview) {
|
|
shun-iwasawa |
f36064 |
QVBoxLayout *camParamLay = new QVBoxLayout();
|
|
shun-iwasawa |
f36064 |
camParamLay->setMargin(5);
|
|
shun-iwasawa |
f36064 |
camParamLay->setSpacing(0);
|
|
shun-iwasawa |
f36064 |
{ camParamLay->addWidget(m_cameraSettings); }
|
|
shun-iwasawa |
f36064 |
cameraParametersBox->setLayout(camParamLay);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
lay->addWidget(cameraParametersBox);
|
|
shun-iwasawa |
f36064 |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
// Frame start/end
|
|
shun-iwasawa |
f36064 |
QGridLayout *frameShrinkLay = new QGridLayout();
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->setMargin(0);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->setHorizontalSpacing(5);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->setVerticalSpacing(10);
|
|
shun-iwasawa |
f36064 |
{
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addWidget(new QLabel(tr("Frame Start:"), this), 0, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addWidget(m_startFld, 0, 1);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addItem(
|
|
shun-iwasawa |
f36064 |
new QSpacerItem(3, 1, QSizePolicy::Fixed, QSizePolicy::Fixed), 0, 2);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addWidget(new QLabel(tr("End:"), this), 0, 3,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addWidget(m_endFld, 0, 4);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addItem(
|
|
shun-iwasawa |
f36064 |
new QSpacerItem(10, 1, QSizePolicy::Fixed, QSizePolicy::Fixed), 0, 5);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addWidget(new QLabel(tr("Step:"), this), 0, 6,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addWidget(m_stepFld, 0, 7);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addWidget(new QLabel(tr("Shrink:"), this), 1, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addWidget(m_shrinkFld, 1, 1);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
if (isPreview)
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->addWidget(m_applyShrinkChk, 1, 4, 1, 5,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
frameShrinkLay->setColumnStretch(8, 1);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
lay->addLayout(frameShrinkLay);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
cameraSettingsBox->setLayout(lay);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
//-----
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
bool ret = true;
|
|
shun-iwasawa |
f36064 |
ret = ret &&
|
|
shun-iwasawa |
f36064 |
connect(m_outputCameraOm, SIGNAL(currentIndexChanged(const QString &)),
|
|
shun-iwasawa |
f36064 |
SLOT(onCameraChanged(const QString &)));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_startFld, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
f36064 |
SLOT(onFrameFldEditFinished()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_endFld, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
f36064 |
SLOT(onFrameFldEditFinished()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_stepFld, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
f36064 |
SLOT(onFrameFldEditFinished()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_shrinkFld, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
f36064 |
SLOT(onFrameFldEditFinished()));
|
|
shun-iwasawa |
f36064 |
if (!isPreview) {
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_cameraSettings, SIGNAL(changed()), this,
|
|
shun-iwasawa |
f36064 |
SLOT(onCameraSettingsChanged()));
|
|
shun-iwasawa |
f36064 |
} else {
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_applyShrinkChk, SIGNAL(stateChanged(int)),
|
|
shun-iwasawa |
f36064 |
SLOT(onApplyShrinkChecked(int)));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
assert(ret);
|
|
shun-iwasawa |
f36064 |
return cameraSettingsBox;
|
|
shun-iwasawa |
f36064 |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
481b59 |
QFrame *OutputSettingsPopup::createColorSettingsBox(bool isPreview) {
|
|
shun-iwasawa |
481b59 |
QFrame *colorSettingsBox = new QFrame(this);
|
|
shun-iwasawa |
481b59 |
colorSettingsBox->setObjectName("OutputSettingsBox");
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
// Channel Width
|
|
shun-iwasawa |
481b59 |
m_channelWidthOm = new QComboBox();
|
|
shun-iwasawa |
481b59 |
// Linear Color Space
|
|
shun-iwasawa |
481b59 |
m_linearColorSpaceChk = new DVGui::CheckBox();
|
|
shun-iwasawa |
481b59 |
// color space gamma
|
|
shun-iwasawa |
481b59 |
m_colorSpaceGammaFld = new DVGui::DoubleLineEdit(this, 2.2);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
// Channel Width
|
|
shun-iwasawa |
481b59 |
m_channelWidthOm->addItem(tr("8 bit"), "8 bit");
|
|
shun-iwasawa |
481b59 |
m_channelWidthOm->addItem(tr("16 bit"), "16 bit");
|
|
shun-iwasawa |
481b59 |
m_channelWidthOm->addItem(tr("32 bit Floating point"), "32 bit");
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
m_linearColorSpaceChk->setToolTip(
|
|
shun-iwasawa |
481b59 |
tr("On rendering, color values will be temporarily converted to linear "
|
|
shun-iwasawa |
481b59 |
"light from nonlinear RGB values by using color space gamma."));
|
|
shun-iwasawa |
481b59 |
if (m_isPreviewSettings)
|
|
shun-iwasawa |
481b59 |
m_colorSpaceGammaFld->setRange(-1.0, 5.0);
|
|
shun-iwasawa |
481b59 |
else
|
|
shun-iwasawa |
481b59 |
m_colorSpaceGammaFld->setRange(1.0, 5.0);
|
|
shun-iwasawa |
481b59 |
m_colorSpaceGammaFld->setDecimals(3);
|
|
shun-iwasawa |
481b59 |
QString colorSpaceGammaTooltip =
|
|
shun-iwasawa |
481b59 |
tr("Color Space Gamma value is used for conversion between the linear "
|
|
shun-iwasawa |
481b59 |
"and nonlinear color spaces,\n"
|
|
shun-iwasawa |
481b59 |
"when the \"Linear Color Space\" option is enabled.");
|
|
shun-iwasawa |
481b59 |
if (m_isPreviewSettings)
|
|
shun-iwasawa |
481b59 |
colorSpaceGammaTooltip +=
|
|
shun-iwasawa |
481b59 |
tr("\nInput less than 1.0 to sync the value with the output settings.");
|
|
shun-iwasawa |
481b59 |
m_colorSpaceGammaFld->setToolTip(colorSpaceGammaTooltip);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
if (!isPreview) {
|
|
shun-iwasawa |
481b59 |
m_channelWidthOm->setFocusPolicy(Qt::StrongFocus);
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
QGridLayout *gridLay = new QGridLayout();
|
|
shun-iwasawa |
481b59 |
gridLay->setMargin(5);
|
|
shun-iwasawa |
481b59 |
gridLay->setHorizontalSpacing(5);
|
|
shun-iwasawa |
481b59 |
gridLay->setVerticalSpacing(10);
|
|
shun-iwasawa |
481b59 |
{
|
|
shun-iwasawa |
481b59 |
// Channel Width
|
|
shun-iwasawa |
481b59 |
gridLay->addWidget(new QLabel(tr("Channel Width:"), this), 0, 0,
|
|
shun-iwasawa |
481b59 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
481b59 |
gridLay->addWidget(m_channelWidthOm, 0, 1, 1, 2,
|
|
shun-iwasawa |
481b59 |
Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
// Linear Color Space and Color SpaceGamma
|
|
shun-iwasawa |
481b59 |
gridLay->addWidget(new QLabel(tr("Linear Color Space:"), this), 1, 0,
|
|
shun-iwasawa |
481b59 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
481b59 |
gridLay->addWidget(m_linearColorSpaceChk, 1, 1,
|
|
shun-iwasawa |
481b59 |
Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
481b59 |
gridLay->addWidget(new QLabel(tr("Color Space Gamma:"), this), 1, 2,
|
|
shun-iwasawa |
481b59 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
481b59 |
gridLay->addWidget(m_colorSpaceGammaFld, 1, 3);
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
gridLay->setColumnStretch(2, 1);
|
|
shun-iwasawa |
481b59 |
colorSettingsBox->setLayout(gridLay);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
bool ret = true;
|
|
shun-iwasawa |
481b59 |
ret = ret && connect(m_channelWidthOm, SIGNAL(currentIndexChanged(int)),
|
|
shun-iwasawa |
481b59 |
SLOT(onChannelWidthChanged(int)));
|
|
shun-iwasawa |
481b59 |
ret = ret && connect(m_linearColorSpaceChk, SIGNAL(stateChanged(int)),
|
|
shun-iwasawa |
481b59 |
SLOT(onLinearColorSpaceChecked(int)));
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
ret = ret && connect(m_colorSpaceGammaFld, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
481b59 |
SLOT(onColorSpaceGammaEdited()));
|
|
shun-iwasawa |
481b59 |
assert(ret);
|
|
shun-iwasawa |
481b59 |
return colorSettingsBox;
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
f36064 |
QFrame *OutputSettingsPopup::createFileSettingsBox(bool isPreview) {
|
|
shun-iwasawa |
f36064 |
QFrame *fileSettingsBox = new QFrame(this);
|
|
Shinya Kitaoka |
120a6e |
fileSettingsBox->setObjectName("OutputSettingsBox");
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
// Resample Balance
|
|
shun-iwasawa |
f36064 |
m_resampleBalanceOm = new QComboBox();
|
|
shun-iwasawa |
f36064 |
// Threads
|
|
shun-iwasawa |
f36064 |
m_threadsComboOm = new QComboBox();
|
|
shun-iwasawa |
f36064 |
// Granularity
|
|
shun-iwasawa |
f36064 |
m_rasterGranularityOm = new QComboBox();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Resample Balance
|
|
shun-iwasawa |
59726b |
translateResampleOptions();
|
|
shun-iwasawa |
59726b |
for (int i = 0; i < ResampleOptionCount; i++) {
|
|
shun-iwasawa |
59726b |
m_resampleBalanceOm->addItem(resampleInfoMap[(ResampleOption)i].uiString,
|
|
shun-iwasawa |
59726b |
resampleInfoMap[(ResampleOption)i].idString);
|
|
shun-iwasawa |
59726b |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QStringList threadsChoices;
|
|
Shinya Kitaoka |
120a6e |
threadsChoices << tr("Single") << tr("Half") << tr("All");
|
|
Shinya Kitaoka |
120a6e |
m_threadsComboOm->addItems(threadsChoices);
|
|
Shinya Kitaoka |
120a6e |
QStringList granularityChoices;
|
|
Shinya Kitaoka |
120a6e |
granularityChoices << tr("None") << tr("Large") << tr("Medium")
|
|
Shinya Kitaoka |
120a6e |
<< tr("Small");
|
|
Shinya Kitaoka |
120a6e |
m_rasterGranularityOm->addItems(granularityChoices);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
if (!isPreview) {
|
|
shun-iwasawa |
f36064 |
// Save In
|
|
shun-iwasawa |
f36064 |
m_saveInFileFld = new DVGui::FileField(0, QString(""));
|
|
shun-iwasawa |
f36064 |
// File Name
|
|
shun-iwasawa |
f36064 |
m_fileNameFld = new DVGui::LineEdit(QString(""));
|
|
shun-iwasawa |
f36064 |
// File Format
|
|
shun-iwasawa |
f36064 |
m_fileFormat = new QComboBox();
|
|
shun-iwasawa |
f36064 |
m_fileFormatButton = new QPushButton(tr("Options"));
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
// File Format
|
|
shun-iwasawa |
f36064 |
QStringList formats;
|
|
shun-iwasawa |
f36064 |
TImageWriter::getSupportedFormats(formats, true);
|
|
shun-iwasawa |
f36064 |
TLevelWriter::getSupportedFormats(formats, true);
|
|
shun-iwasawa |
f36064 |
Tiio::Writer::getSupportedFormats(formats, true);
|
|
shun-iwasawa |
f36064 |
formats.sort();
|
|
shun-iwasawa |
f36064 |
m_fileFormat->addItems(formats);
|
|
shun-iwasawa |
c7ddce |
m_fileFormat->setFocusPolicy(Qt::StrongFocus);
|
|
shun-iwasawa |
c7ddce |
m_resampleBalanceOm->setFocusPolicy(Qt::StrongFocus);
|
|
shun-iwasawa |
c7ddce |
m_threadsComboOm->setFocusPolicy(Qt::StrongFocus);
|
|
shun-iwasawa |
c7ddce |
m_rasterGranularityOm->setFocusPolicy(Qt::StrongFocus);
|
|
shun-iwasawa |
c7ddce |
m_fileFormat->installEventFilter(this);
|
|
shun-iwasawa |
c7ddce |
m_resampleBalanceOm->installEventFilter(this);
|
|
shun-iwasawa |
c7ddce |
m_channelWidthOm->installEventFilter(this);
|
|
shun-iwasawa |
c7ddce |
m_threadsComboOm->installEventFilter(this);
|
|
shun-iwasawa |
c7ddce |
m_rasterGranularityOm->installEventFilter(this);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
//-----
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
QVBoxLayout *lay = new QVBoxLayout();
|
|
shun-iwasawa |
f36064 |
lay->setMargin(10);
|
|
shun-iwasawa |
f36064 |
lay->setSpacing(10);
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
if (!isPreview) {
|
|
shun-iwasawa |
f36064 |
QGridLayout *upperGridLay = new QGridLayout();
|
|
shun-iwasawa |
f36064 |
upperGridLay->setMargin(0);
|
|
shun-iwasawa |
f36064 |
upperGridLay->setHorizontalSpacing(5);
|
|
shun-iwasawa |
f36064 |
upperGridLay->setVerticalSpacing(10);
|
|
Shinya Kitaoka |
120a6e |
{
|
|
shun-iwasawa |
f36064 |
// Save In
|
|
shun-iwasawa |
f36064 |
upperGridLay->addWidget(new QLabel(tr("Save in:"), this), 0, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
upperGridLay->addWidget(m_saveInFileFld, 0, 1, 1, 3);
|
|
shun-iwasawa |
f36064 |
// File Name
|
|
shun-iwasawa |
f36064 |
upperGridLay->addWidget(new QLabel(tr("Name:"), this), 1, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
upperGridLay->addWidget(m_fileNameFld, 1, 1);
|
|
shun-iwasawa |
f36064 |
// File Format
|
|
shun-iwasawa |
f36064 |
upperGridLay->addWidget(m_fileFormat, 1, 2);
|
|
shun-iwasawa |
f36064 |
upperGridLay->addWidget(m_fileFormatButton, 1, 3);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
shun-iwasawa |
f36064 |
upperGridLay->setColumnStretch(1, 1);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
lay->addLayout(upperGridLay);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
QGridLayout *bottomGridLay = new QGridLayout();
|
|
shun-iwasawa |
f36064 |
bottomGridLay->setMargin(0);
|
|
shun-iwasawa |
f36064 |
bottomGridLay->setHorizontalSpacing(5);
|
|
shun-iwasawa |
f36064 |
bottomGridLay->setVerticalSpacing(10);
|
|
Shinya Kitaoka |
120a6e |
{
|
|
shun-iwasawa |
f36064 |
// Resample Balance
|
|
shun-iwasawa |
f36064 |
bottomGridLay->addWidget(new QLabel(tr("Resample Balance:"), this), 0, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
bottomGridLay->addWidget(m_resampleBalanceOm, 0, 1, 1, 2,
|
|
shun-iwasawa |
f36064 |
Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
f36064 |
// Threads
|
|
shun-iwasawa |
481b59 |
bottomGridLay->addWidget(new QLabel(tr("Dedicated CPUs:"), this), 1, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
481b59 |
bottomGridLay->addWidget(m_threadsComboOm, 1, 1);
|
|
shun-iwasawa |
f36064 |
// Granularity
|
|
shun-iwasawa |
481b59 |
bottomGridLay->addWidget(new QLabel(tr("Render Tile:"), this), 2, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
481b59 |
bottomGridLay->addWidget(m_rasterGranularityOm, 2, 1);
|
|
shun-iwasawa |
f36064 |
if (m_subcameraChk) {
|
|
shun-iwasawa |
481b59 |
bottomGridLay->addWidget(m_subcameraChk, 3, 1, 1, 2);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
shun-iwasawa |
f36064 |
bottomGridLay->setColumnStretch(2, 1);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
lay->addLayout(bottomGridLay);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
shun-iwasawa |
f36064 |
fileSettingsBox->setLayout(lay);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
//-----
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
bool ret = true;
|
|
Shinya Kitaoka |
120a6e |
if (!isPreview) {
|
|
Shinya Kitaoka |
120a6e |
ret = ret && connect(m_saveInFileFld, SIGNAL(pathChanged()), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(onPathChanged()));
|
|
Shinya Kitaoka |
120a6e |
ret = ret && connect(m_fileNameFld, SIGNAL(editingFinished()),
|
|
Shinya Kitaoka |
120a6e |
SLOT(onNameChanged()));
|
|
Shinya Kitaoka |
120a6e |
ret = ret &&
|
|
Shinya Kitaoka |
120a6e |
connect(m_fileFormat, SIGNAL(currentIndexChanged(const QString &)),
|
|
Shinya Kitaoka |
120a6e |
SLOT(onFormatChanged(const QString &)));
|
|
Shinya Kitaoka |
120a6e |
ret = ret && connect(m_fileFormatButton, SIGNAL(pressed()), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(openSettingsPopup()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
ret = ret && connect(m_resampleBalanceOm, SIGNAL(currentIndexChanged(int)),
|
|
Shinya Kitaoka |
120a6e |
SLOT(onResampleChanged(int)));
|
|
shun-iwasawa |
481b59 |
|
|
Shinya Kitaoka |
120a6e |
ret = ret && connect(m_threadsComboOm, SIGNAL(currentIndexChanged(int)),
|
|
Shinya Kitaoka |
120a6e |
SLOT(onThreadsComboChanged(int)));
|
|
Shinya Kitaoka |
120a6e |
ret = ret && connect(m_rasterGranularityOm, SIGNAL(currentIndexChanged(int)),
|
|
Shinya Kitaoka |
120a6e |
SLOT(onRasterGranularityChanged(int)));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_subcameraChk)
|
|
Shinya Kitaoka |
120a6e |
ret = ret && connect(m_subcameraChk, SIGNAL(stateChanged(int)),
|
|
Shinya Kitaoka |
120a6e |
SLOT(onSubcameraChecked(int)));
|
|
shun-iwasawa |
f36064 |
assert(ret);
|
|
shun-iwasawa |
f36064 |
return fileSettingsBox;
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
eb8f34 |
QFrame *OutputSettingsPopup::createMoreSettingsBox() {
|
|
shun-iwasawa |
eb8f34 |
QFrame *moreSettingsBox = new QFrame(this);
|
|
shun-iwasawa |
eb8f34 |
moreSettingsBox->setObjectName("OutputSettingsBox");
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
// Board
|
|
shun-iwasawa |
f36064 |
m_addBoard = new DVGui::CheckBox(tr("Add Clapperboard"), this);
|
|
shun-iwasawa |
f36064 |
m_boardSettingsBtn = new QPushButton(tr("Edit Clapperboard..."), this);
|
|
shun-iwasawa |
f36064 |
// Gamma
|
|
shun-iwasawa |
f36064 |
m_gammaFld = new DVGui::DoubleLineEdit();
|
|
shun-iwasawa |
f36064 |
// Dominant Field
|
|
shun-iwasawa |
f36064 |
m_dominantFieldOm = new QComboBox();
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
// Stretch
|
|
shun-iwasawa |
f36064 |
TRenderSettings rs = getProperties()->getRenderSettings();
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
// Scene Settings FPS
|
|
shun-iwasawa |
f36064 |
double frameRate = getProperties()->getFrameRate();
|
|
shun-iwasawa |
f36064 |
m_frameRateFld = new DVGui::DoubleLineEdit(this, frameRate);
|
|
shun-iwasawa |
f36064 |
m_stretchFromFld = new DVGui::DoubleLineEdit(this, rs.m_timeStretchFrom);
|
|
shun-iwasawa |
f36064 |
m_stretchToFld = new DVGui::DoubleLineEdit(this, rs.m_timeStretchTo);
|
|
shun-iwasawa |
f36064 |
m_multimediaOm = new QComboBox(this);
|
|
shun-iwasawa |
f36064 |
m_doStereoscopy = new DVGui::CheckBox(tr("Do stereoscopy"), this);
|
|
shun-iwasawa |
f36064 |
m_stereoShift = new DVGui::DoubleLineEdit(this, 0.05);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
// Dominant Field
|
|
shun-iwasawa |
f36064 |
QStringList dominantField;
|
|
shun-iwasawa |
f36064 |
dominantField << tr("Odd (NTSC)") << tr("Even (PAL)") << tr("None");
|
|
shun-iwasawa |
f36064 |
m_dominantFieldOm->addItems(dominantField);
|
|
shun-iwasawa |
c7ddce |
m_dominantFieldOm->setFocusPolicy(Qt::StrongFocus);
|
|
shun-iwasawa |
c7ddce |
m_dominantFieldOm->installEventFilter(this);
|
|
shun-iwasawa |
f36064 |
m_stretchFromFld->setRange(1, 1000);
|
|
shun-iwasawa |
f36064 |
m_stretchToFld->setRange(1, 1000);
|
|
shun-iwasawa |
f36064 |
m_stretchFromFld->setDecimals(2);
|
|
shun-iwasawa |
f36064 |
m_stretchToFld->setDecimals(2);
|
|
shun-iwasawa |
f36064 |
// Multimedia rendering enum
|
|
shun-iwasawa |
f36064 |
QStringList multimediaTypes;
|
|
shun-iwasawa |
f36064 |
multimediaTypes << tr("None") << tr("Fx Schematic Flows")
|
|
shun-iwasawa |
f36064 |
<< tr("Fx Schematic Terminal Nodes");
|
|
shun-iwasawa |
f36064 |
m_multimediaOm->addItems(multimediaTypes);
|
|
shun-iwasawa |
c7ddce |
m_multimediaOm->setFocusPolicy(Qt::StrongFocus);
|
|
shun-iwasawa |
c7ddce |
m_multimediaOm->installEventFilter(this);
|
|
shun-iwasawa |
f36064 |
m_stereoShift->setEnabled(false);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
//-----
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
QGridLayout *lay = new QGridLayout();
|
|
shun-iwasawa |
f36064 |
lay->setMargin(5);
|
|
shun-iwasawa |
f36064 |
lay->setHorizontalSpacing(5);
|
|
shun-iwasawa |
f36064 |
lay->setVerticalSpacing(10);
|
|
shun-iwasawa |
f36064 |
{
|
|
shun-iwasawa |
f36064 |
// clapperboard
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_addBoard, 0, 0);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_boardSettingsBtn, 0, 1, 1, 3,
|
|
shun-iwasawa |
f36064 |
Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
// Gamma
|
|
shun-iwasawa |
f36064 |
lay->addWidget(new QLabel(tr("Gamma:"), this), 1, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_gammaFld, 1, 1, Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
// Dominant Field
|
|
shun-iwasawa |
f36064 |
lay->addWidget(new QLabel(tr("Dominant Field:"), this), 2, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_dominantFieldOm, 2, 1, 1, 2,
|
|
shun-iwasawa |
f36064 |
Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
// Scene Settings' FPS
|
|
shun-iwasawa |
f36064 |
lay->addWidget(new QLabel(tr("Frame Rate:"), this), 3, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_frameRateFld, 3, 1, Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(new QLabel(tr("(linked to Scene Settings)"), this), 3, 2, 1,
|
|
shun-iwasawa |
f36064 |
2, Qt::AlignLeft | Qt::AlignVCenter);
|
|
luz paz |
6454c4 |
// Stretch
|
|
shun-iwasawa |
f36064 |
lay->addWidget(new QLabel(tr("Stretch from FPS:"), this), 4, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_stretchFromFld, 4, 1, Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(new QLabel(tr(" To:"), this), 4, 2,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_stretchToFld, 4, 3, Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
// new in V6.1
|
|
shun-iwasawa |
f36064 |
// Multimedia rendering enum
|
|
shun-iwasawa |
f36064 |
lay->addWidget(new QLabel(tr("Multiple Rendering:"), this), 5, 0,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_multimediaOm, 5, 1, 1, 3,
|
|
shun-iwasawa |
f36064 |
Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_doStereoscopy, 6, 0);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(new QLabel(tr("Camera Shift:")), 6, 1, 1, 2,
|
|
shun-iwasawa |
f36064 |
Qt::AlignRight | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
lay->addWidget(m_stereoShift, 6, 3, Qt::AlignLeft | Qt::AlignVCenter);
|
|
shun-iwasawa |
f36064 |
}
|
|
shun-iwasawa |
f36064 |
lay->setColumnStretch(4, 1);
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
eb8f34 |
moreSettingsBox->setLayout(lay);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
f36064 |
//-----
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
bool ret = true;
|
|
shun-iwasawa |
f36064 |
// clapperboard
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_addBoard, SIGNAL(stateChanged(int)), this,
|
|
shun-iwasawa |
f36064 |
SLOT(onAddBoardChecked(int)));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_boardSettingsBtn, SIGNAL(clicked()), this,
|
|
shun-iwasawa |
f36064 |
SLOT(onBoardSettingsBtnClicked()));
|
|
shun-iwasawa |
f36064 |
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_gammaFld, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
f36064 |
SLOT(onGammaFldEditFinished()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_dominantFieldOm, SIGNAL(currentIndexChanged(int)),
|
|
shun-iwasawa |
f36064 |
SLOT(onDominantFieldChanged(int)));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_frameRateFld, SIGNAL(editingFinished()), this,
|
|
shun-iwasawa |
f36064 |
SLOT(onFrameRateEditingFinished()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_stretchFromFld, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
f36064 |
SLOT(onStretchFldEditFinished()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_stretchToFld, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
f36064 |
SLOT(onStretchFldEditFinished()));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_multimediaOm, SIGNAL(currentIndexChanged(int)), this,
|
|
shun-iwasawa |
f36064 |
SLOT(onMultimediaChanged(int)));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_doStereoscopy, SIGNAL(stateChanged(int)),
|
|
shun-iwasawa |
f36064 |
SLOT(onStereoChecked(int)));
|
|
shun-iwasawa |
f36064 |
ret = ret && connect(m_stereoShift, SIGNAL(editingFinished()),
|
|
shun-iwasawa |
f36064 |
SLOT(onStereoChanged()));
|
|
Shinya Kitaoka |
120a6e |
assert(ret);
|
|
shun-iwasawa |
eb8f34 |
return moreSettingsBox;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Return current \b ToonzScene scene.
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *OutputSettingsPopup::getCurrentScene() const {
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
|
|
Shinya Kitaoka |
120a6e |
return scene;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Return current scene output properties \b TOutputProperties, if
|
|
Shinya Kitaoka |
120a6e |
current scene is not empty.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *OutputSettingsPopup::getProperties() const {
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *scene = getCurrentScene();
|
|
Shinya Kitaoka |
120a6e |
if (!scene) return 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
return m_isPreviewSettings ? scene->getProperties()->getPreviewProperties()
|
|
Shinya Kitaoka |
120a6e |
: scene->getProperties()->getOutputProperties();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::showEvent(QShowEvent *) {
|
|
Shinya Kitaoka |
120a6e |
TSceneHandle *sceneHandle = TApp::instance()->getCurrentScene();
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xsheetHandle = TApp::instance()->getCurrentXsheet();
|
|
Shinya Kitaoka |
120a6e |
bool ret =
|
|
Shinya Kitaoka |
120a6e |
connect(sceneHandle, SIGNAL(sceneChanged()), this, SLOT(updateField()));
|
|
Shinya Kitaoka |
120a6e |
ret = ret && connect(sceneHandle, SIGNAL(sceneSwitched()), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(updateField()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
ret = ret && connect(xsheetHandle, SIGNAL(xsheetChanged()), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(updateField()));
|
|
Shinya Kitaoka |
120a6e |
updateField();
|
|
Shinya Kitaoka |
120a6e |
assert(ret);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::hideEvent(QHideEvent *e) {
|
|
Shinya Kitaoka |
120a6e |
TSceneHandle *sceneHandle = TApp::instance()->getCurrentScene();
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xsheetHandle = TApp::instance()->getCurrentXsheet();
|
|
Shinya Kitaoka |
120a6e |
bool ret = disconnect(sceneHandle, SIGNAL(sceneChanged()), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(updateField()));
|
|
shun-iwasawa |
f36064 |
ret = ret && disconnect(sceneHandle, SIGNAL(sceneSwitched()), this,
|
|
shun-iwasawa |
41f8d2 |
SLOT(updateField()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
ret = ret && disconnect(xsheetHandle, SIGNAL(xsheetChanged()), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(updateField()));
|
|
Shinya Kitaoka |
120a6e |
assert(ret);
|
|
Shinya Kitaoka |
120a6e |
Dialog::hideEvent(e);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
c7ddce |
// ignore wheelevent on comboboxes
|
|
shun-iwasawa |
c7ddce |
bool OutputSettingsPopup::eventFilter(QObject *obj, QEvent *e) {
|
|
shun-iwasawa |
c7ddce |
if (e->type() == QEvent::Wheel) {
|
|
shun-iwasawa |
c7ddce |
QComboBox *combo = qobject_cast<qcombobox *="">(obj);</qcombobox>
|
|
shun-iwasawa |
c7ddce |
if (combo && !combo->hasFocus()) return true;
|
|
shun-iwasawa |
c7ddce |
}
|
|
shun-iwasawa |
c7ddce |
return QObject::eventFilter(obj, e);
|
|
shun-iwasawa |
c7ddce |
}
|
|
shun-iwasawa |
c7ddce |
|
|
shun-iwasawa |
c7ddce |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onApplyShrinkChecked(int state) {
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings rs = getProperties()->getRenderSettings();
|
|
Shinya Kitaoka |
120a6e |
rs.m_applyShrinkToViewer = (state == Qt::Checked);
|
|
Shinya Kitaoka |
120a6e |
getProperties()->setRenderSettings(rs);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onSubcameraChecked(int state) {
|
|
Shinya Kitaoka |
120a6e |
getProperties()->setSubcameraPreview(state == Qt::Checked);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Jeremy Bullock |
4a76fd |
void OutputSettingsPopup::onRenderClicked() {
|
|
Jeremy Bullock |
4a76fd |
CommandManager::instance()->execute("MI_Render");
|
|
Jeremy Bullock |
4a76fd |
}
|
|
Jeremy Bullock |
4a76fd |
|
|
Jeremy Bullock |
4a76fd |
//-----------------------------------------------------------------------------
|
|
Jeremy Bullock |
4a76fd |
|
|
Toshihiro Shimizu |
890ddd |
/*! Update all field value take care current scene output properties.
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::updateField() {
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *scene = getCurrentScene();
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
if (!prop) {
|
|
Shinya Kitaoka |
120a6e |
if (!m_isPreviewSettings) {
|
|
Shinya Kitaoka |
120a6e |
m_saveInFileFld->setPath(QString());
|
|
Shinya Kitaoka |
120a6e |
m_fileNameFld->setText(QString());
|
|
Shinya Kitaoka |
120a6e |
m_fileFormat->setCurrentIndex(0);
|
|
Shinya Kitaoka |
120a6e |
m_gammaFld->setText(QString());
|
|
Shinya Kitaoka |
120a6e |
m_dominantFieldOm->setCurrentIndex(c_none);
|
|
Shinya Kitaoka |
120a6e |
m_frameRateFld->setText(QString());
|
|
Shinya Kitaoka |
120a6e |
m_stretchFromFld->setText(QString());
|
|
Shinya Kitaoka |
120a6e |
m_stretchToFld->setText(QString());
|
|
Shinya Kitaoka |
120a6e |
m_multimediaOm->setCurrentIndex(0);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (m_outputCameraOm) m_outputCameraOm->setCurrentIndex(0);
|
|
Shinya Kitaoka |
120a6e |
m_startFld->setText(QString());
|
|
Shinya Kitaoka |
120a6e |
m_endFld->setText(QString());
|
|
Shinya Kitaoka |
120a6e |
m_stepFld->setText(QString());
|
|
Shinya Kitaoka |
120a6e |
m_shrinkFld->setText(QString());
|
|
Shinya Kitaoka |
120a6e |
if (m_applyShrinkChk) m_applyShrinkChk->setCheckState(Qt::Unchecked);
|
|
Shinya Kitaoka |
120a6e |
m_resampleBalanceOm->setCurrentIndex(c_standard);
|
|
Shinya Kitaoka |
120a6e |
m_channelWidthOm->setCurrentIndex(c_8bit);
|
|
Shinya Kitaoka |
120a6e |
m_threadsComboOm->setCurrentIndex(0);
|
|
Shinya Kitaoka |
120a6e |
m_rasterGranularityOm->setCurrentIndex(0);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_subcameraChk) m_subcameraChk->setCheckState(Qt::Unchecked);
|
|
shun-iwasawa |
481b59 |
m_linearColorSpaceChk->setCheckState(Qt::Unchecked);
|
|
shun-iwasawa |
481b59 |
m_colorSpaceGammaFld->setText(QString());
|
|
shun-iwasawa |
481b59 |
if (m_syncColorSettingsButton)
|
|
shun-iwasawa |
481b59 |
m_syncColorSettingsButton->setCheckState(Qt::Unchecked);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings renderSettings = prop->getRenderSettings();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!m_isPreviewSettings) {
|
|
Shinya Kitaoka |
120a6e |
TFilePath path = prop->getPath();
|
|
Shinya Kitaoka |
120a6e |
QString name = QString::fromStdWString(path.getWideName());
|
|
Shinya Kitaoka |
120a6e |
if (name.isEmpty())
|
|
Shinya Kitaoka |
120a6e |
name = QString::fromStdString(scene->getScenePath().getName());
|
|
Shinya Kitaoka |
120a6e |
m_saveInFileFld->setPath(toQString(path.getParentDir()));
|
|
Shinya Kitaoka |
120a6e |
m_fileNameFld->setText(name);
|
|
Shinya Kitaoka |
120a6e |
// RenderController::instance()->setMovieExt(path.getType());
|
|
Shinya Kitaoka |
120a6e |
m_fileFormat->setCurrentIndex(
|
|
Shinya Kitaoka |
120a6e |
m_fileFormat->findText(QString::fromStdString(path.getType())));
|
|
Shinya Kitaoka |
120a6e |
m_multimediaOm->setCurrentIndex(prop->getMultimediaRendering());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
justburner |
69bbaf |
// Refresh format if allow-multithread was toggled
|
|
justburner |
69bbaf |
if (m_allowMT != Preferences::instance()->getFfmpegMultiThread()) {
|
|
justburner |
69bbaf |
onFormatChanged(m_fileFormat->currentText());
|
|
justburner |
69bbaf |
}
|
|
justburner |
69bbaf |
|
|
Shinya Kitaoka |
120a6e |
// camera
|
|
Shinya Kitaoka |
120a6e |
if (m_outputCameraOm) {
|
|
Shinya Kitaoka |
120a6e |
m_outputCameraOm->blockSignals(true);
|
|
Shinya Kitaoka |
120a6e |
m_outputCameraOm->clear();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *tree = scene->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
int cameraCount = tree->getCameraCount();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId cameraId = m_isPreviewSettings
|
|
Shinya Kitaoka |
120a6e |
? tree->getCurrentPreviewCameraId()
|
|
Shinya Kitaoka |
120a6e |
: tree->getCurrentCameraId();
|
|
Shinya Kitaoka |
120a6e |
QStringList cameras;
|
|
Shinya Kitaoka |
120a6e |
int tmpCameraId = 0;
|
|
Shinya Kitaoka |
120a6e |
int index = 0;
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < cameraCount;) {
|
|
Shinya Kitaoka |
120a6e |
/*-- Deleteされたカメラの場合tmpCameraIdだけIncrementする --*/
|
|
Shinya Kitaoka |
120a6e |
if (!tree->getStageObject(TStageObjectId::CameraId(tmpCameraId), false)) {
|
|
Shinya Kitaoka |
120a6e |
tmpCameraId++;
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::string name =
|
|
Shinya Kitaoka |
120a6e |
tree->getStageObject(TStageObjectId::CameraId(tmpCameraId))->getName();
|
|
Shinya Kitaoka |
120a6e |
cameras.append(QString::fromStdString(name));
|
|
Shinya Kitaoka |
120a6e |
if (name == tree->getStageObject(cameraId)->getName()) index = i;
|
|
Shinya Kitaoka |
120a6e |
i++;
|
|
Shinya Kitaoka |
120a6e |
tmpCameraId++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (m_outputCameraOm) {
|
|
Shinya Kitaoka |
120a6e |
m_outputCameraOm->addItems(cameras);
|
|
Shinya Kitaoka |
120a6e |
m_outputCameraOm->blockSignals(false);
|
|
Shinya Kitaoka |
120a6e |
m_outputCameraOm->setCurrentIndex(index);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (m_subcameraChk)
|
|
Shinya Kitaoka |
120a6e |
m_subcameraChk->setCheckState(prop->isSubcameraPreview() ? Qt::Checked
|
|
Shinya Kitaoka |
120a6e |
: Qt::Unchecked);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// start,end,step
|
|
Shinya Kitaoka |
120a6e |
int r0 = 0, r1 = -1, step;
|
|
Shinya Kitaoka |
120a6e |
prop->getRange(r0, r1, step);
|
|
Shinya Kitaoka |
120a6e |
if (r0 > r1) {
|
|
shun-iwasawa |
f36064 |
r0 = 0;
|
|
shun-iwasawa |
f36064 |
r1 = scene->getFrameCount() - 1;
|
|
Shinya Kitaoka |
120a6e |
if (r1 < 0) r1 = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_startFld->setValue(r0 + 1);
|
|
Shinya Kitaoka |
120a6e |
m_endFld->setValue(r1 + 1);
|
|
Shinya Kitaoka |
120a6e |
m_stepFld->setValue(step);
|
|
Shinya Kitaoka |
120a6e |
m_shrinkFld->setValue(renderSettings.m_shrinkX);
|
|
Shinya Kitaoka |
120a6e |
if (m_applyShrinkChk)
|
|
Shinya Kitaoka |
120a6e |
m_applyShrinkChk->setCheckState(
|
|
Shinya Kitaoka |
120a6e |
renderSettings.m_applyShrinkToViewer ? Qt::Checked : Qt::Unchecked);
|
|
Shinya Kitaoka |
120a6e |
// resample
|
|
shun-iwasawa |
59726b |
m_resampleBalanceOm->setCurrentIndex(
|
|
shun-iwasawa |
59726b |
(int)quality2index(renderSettings.m_quality));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// channel width
|
|
Shinya Kitaoka |
120a6e |
switch (renderSettings.m_bpp) {
|
|
Shinya Kitaoka |
120a6e |
case 64:
|
|
Shinya Kitaoka |
120a6e |
m_channelWidthOm->setCurrentIndex(c_16bit);
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
shun-iwasawa |
481b59 |
case 128:
|
|
shun-iwasawa |
481b59 |
m_channelWidthOm->setCurrentIndex(c_32bit);
|
|
shun-iwasawa |
481b59 |
break;
|
|
Shinya Kitaoka |
120a6e |
default:
|
|
Shinya Kitaoka |
120a6e |
m_channelWidthOm->setCurrentIndex(c_8bit);
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
481b59 |
m_linearColorSpaceChk->setCheckState(
|
|
shun-iwasawa |
481b59 |
renderSettings.m_linearColorSpace ? Qt::Checked : Qt::Unchecked);
|
|
shun-iwasawa |
481b59 |
// currently bpp should be 128 when the linearColorSpace is ON
|
|
shun-iwasawa |
481b59 |
m_channelWidthOm->setDisabled(renderSettings.m_linearColorSpace &&
|
|
shun-iwasawa |
481b59 |
renderSettings.m_bpp == 128);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
m_colorSpaceGammaFld->setValue(renderSettings.m_colorSpaceGamma);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
if (m_isPreviewSettings && m_syncColorSettingsButton) {
|
|
shun-iwasawa |
481b59 |
m_syncColorSettingsButton->setChecked(
|
|
shun-iwasawa |
481b59 |
getProperties()->isColorSettingsSynced());
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
|
|
Shinya Kitaoka |
120a6e |
// Threads
|
|
Shinya Kitaoka |
120a6e |
m_threadsComboOm->setCurrentIndex(prop->getThreadIndex());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Raster granularity
|
|
Shinya Kitaoka |
120a6e |
m_rasterGranularityOm->setCurrentIndex(prop->getMaxTileSizeIndex());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_isPreviewSettings) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_doStereoscopy->setChecked(renderSettings.m_stereoscopic);
|
|
Shinya Kitaoka |
120a6e |
m_stereoShift->setValue(renderSettings.m_stereoscopicShift);
|
|
Shinya Kitaoka |
120a6e |
m_stereoShift->setEnabled(renderSettings.m_stereoscopic);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// gamma
|
|
Shinya Kitaoka |
120a6e |
m_gammaFld->setValue(renderSettings.m_gamma);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// dominant field
|
|
Shinya Kitaoka |
120a6e |
switch (renderSettings.m_fieldPrevalence) {
|
|
Shinya Kitaoka |
120a6e |
case TRenderSettings::OddField:
|
|
Shinya Kitaoka |
120a6e |
m_dominantFieldOm->setCurrentIndex(c_odd);
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TRenderSettings::EvenField:
|
|
Shinya Kitaoka |
120a6e |
m_dominantFieldOm->setCurrentIndex(c_even);
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TRenderSettings::NoField:
|
|
Shinya Kitaoka |
120a6e |
default:
|
|
Shinya Kitaoka |
120a6e |
m_dominantFieldOm->setCurrentIndex(c_none);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_dominantFieldOm->setEnabled(!renderSettings.m_stereoscopic);
|
|
Shinya Kitaoka |
120a6e |
// time stretch
|
|
Shinya Kitaoka |
120a6e |
m_stretchFromFld->setValue(renderSettings.m_timeStretchFrom);
|
|
Shinya Kitaoka |
120a6e |
m_stretchToFld->setValue(renderSettings.m_timeStretchTo);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_frameRateFld->setValue(prop->getFrameRate());
|
|
shun-iwasawa |
cd4694 |
|
|
shun-iwasawa |
cd4694 |
// clapperboard
|
|
shun-iwasawa |
cd4694 |
BoardSettings *boardSettings = prop->getBoardSettings();
|
|
shun-iwasawa |
cd4694 |
m_addBoard->setChecked(boardSettings->isActive());
|
|
shun-iwasawa |
cd4694 |
// clapperboard is only available with movie formats
|
|
shun-iwasawa |
cd4694 |
if (isMovieType(m_fileFormat->currentText().toStdString())) {
|
|
shun-iwasawa |
cd4694 |
m_addBoard->setEnabled(true);
|
|
shun-iwasawa |
cd4694 |
m_boardSettingsBtn->setEnabled(m_addBoard->isChecked());
|
|
shun-iwasawa |
cd4694 |
} else {
|
|
shun-iwasawa |
cd4694 |
m_addBoard->setEnabled(false);
|
|
shun-iwasawa |
cd4694 |
m_boardSettingsBtn->setEnabled(false);
|
|
shun-iwasawa |
cd4694 |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current scene output path to new path modified in popup field.
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onPathChanged() {
|
|
Shinya Kitaoka |
120a6e |
if (!getCurrentScene()) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString text = m_saveInFileFld->getPath();
|
|
Shinya Kitaoka |
120a6e |
TFilePath newFp(text.toStdWString());
|
|
Shinya Kitaoka |
120a6e |
newFp = TApp::instance()->getCurrentScene()->getScene()->codeFilePath(newFp);
|
|
Shinya Kitaoka |
120a6e |
m_saveInFileFld->setPath(QString::fromStdWString(newFp.getWideString()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = prop->getPath();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (fp == newFp) return;
|
|
Shinya Kitaoka |
120a6e |
fp = fp.withParentDir(newFp);
|
|
Shinya Kitaoka |
120a6e |
prop->setPath(fp);
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current scene output name to new name modified in popup field.
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onNameChanged() {
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *scene = getCurrentScene();
|
|
Shinya Kitaoka |
120a6e |
if (!scene) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString name = m_fileNameFld->text();
|
|
Shinya Kitaoka |
120a6e |
if (!isValidFileName(name)) {
|
|
Shinya Kitaoka |
120a6e |
DVGui::error(
|
|
Shinya Kitaoka |
120a6e |
"A filename cannot be empty or contain any of the following "
|
|
Shinya Kitaoka |
120a6e |
"characters:\n \\ / : * ? \" < > |");
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = prop->getPath();
|
|
Shinya Kitaoka |
120a6e |
QString name = QString::fromStdString(fp.getName());
|
|
Shinya Kitaoka |
120a6e |
if (name.isEmpty())
|
|
Shinya Kitaoka |
120a6e |
name = QString::fromStdString(scene->getScenePath().getName());
|
|
Shinya Kitaoka |
120a6e |
m_fileNameFld->setText(name);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
manongjohn |
7f3150 |
if (isReservedFileName_message(name)) {
|
|
manongjohn |
7f3150 |
TOutputProperties *prop = getProperties();
|
|
Kite |
521c84 |
TFilePath fp = prop->getPath();
|
|
Kite |
521c84 |
QString name = QString::fromStdString(fp.getName());
|
|
manongjohn |
7f3150 |
if (name.isEmpty())
|
|
manongjohn |
7f3150 |
name = QString::fromStdString(scene->getScenePath().getName());
|
|
manongjohn |
7f3150 |
m_fileNameFld->setText(name);
|
|
manongjohn |
7f3150 |
|
|
manongjohn |
7f3150 |
return;
|
|
manongjohn |
7f3150 |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::wstring wname = name.toStdWString();
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
// It could be possible that users add an extension to the level name.
|
|
Shinya Kitaoka |
120a6e |
// This is not supported, and the extension must be removed.
|
|
Shinya Kitaoka |
120a6e |
// Observe that leaving wname as is WOULD be a bug (see Bugzilla #6578).
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
const std::wstring &actualWName = TFilePath(wname).getWideName();
|
|
Shinya Kitaoka |
120a6e |
if (wname != actualWName) {
|
|
Shinya Kitaoka |
120a6e |
wname = actualWName;
|
|
Shinya Kitaoka |
120a6e |
m_fileNameFld->setText(QString::fromStdWString(wname));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// In case the output level name is reverted back to the scene name, we assume
|
|
Shinya Kitaoka |
120a6e |
// that
|
|
Shinya Kitaoka |
120a6e |
// a "Save Scene As..." command should move the value to the *new* scene name
|
|
Shinya Kitaoka |
120a6e |
if (wname == scene->getScenePath().getWideName())
|
|
Shinya Kitaoka |
120a6e |
wname = std::wstring(); // An empty name is redirected to the scene name
|
|
Shinya Kitaoka |
120a6e |
// directly by the render procedure, let's use this!
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = prop->getPath();
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
694080 |
TFilePath newFp = fp.withName(wname);
|
|
shun-iwasawa |
694080 |
if (newFp == fp) return; // Already had the right name
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
694080 |
prop->setPath(newFp);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current scene output format to new format set in popup field.
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onFormatChanged(const QString &str) {
|
|
justburner |
69bbaf |
auto isMultiRenderInvalid = [](std::string ext, bool allowMT) -> bool {
|
|
justburner |
69bbaf |
return (!allowMT && (ext == "mp4" || ext == "gif" || ext == "webm")) ||
|
|
shun-iwasawa |
24c6ea |
ext == "spritesheet";
|
|
shun-iwasawa |
24c6ea |
};
|
|
shun-iwasawa |
24c6ea |
|
|
shun-iwasawa |
fc0d80 |
TOutputProperties *prop = getProperties();
|
|
justburner |
69bbaf |
bool wasMultiRenderInvalid =
|
|
justburner |
69bbaf |
isMultiRenderInvalid(prop->getPath().getType(), m_allowMT);
|
|
shun-iwasawa |
694080 |
// remove sepchar, ..
|
|
shun-iwasawa |
694080 |
TFilePath fp = prop->getPath().withNoFrame().withType(str.toStdString());
|
|
shun-iwasawa |
694080 |
// .. then add sepchar for sequencial image formats
|
|
shun-iwasawa |
694080 |
if (checkForSeqNum(str)) fp = fp.withFrame(prop->formatTemplateFId());
|
|
shun-iwasawa |
694080 |
|
|
shun-iwasawa |
41f8d2 |
if (prop->getPath() != fp) {
|
|
shun-iwasawa |
41f8d2 |
prop->setPath(fp);
|
|
shun-iwasawa |
41f8d2 |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
shun-iwasawa |
41f8d2 |
}
|
|
justburner |
69bbaf |
m_allowMT = Preferences::instance()->getFfmpegMultiThread();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
justburner |
69bbaf |
if (isMultiRenderInvalid(str.toStdString(), m_allowMT)) {
|
|
turtletooth |
04d8fd |
m_threadsComboOm->setDisabled(true);
|
|
turtletooth |
04d8fd |
m_threadsComboOm->setCurrentIndex(0);
|
|
turtletooth |
04d8fd |
} else {
|
|
turtletooth |
04d8fd |
m_threadsComboOm->setDisabled(false);
|
|
shun-iwasawa |
24c6ea |
if (wasMultiRenderInvalid) m_threadsComboOm->setCurrentIndex(2);
|
|
turtletooth |
04d8fd |
}
|
|
shun-iwasawa |
cd4694 |
|
|
shun-iwasawa |
cd4694 |
// clapperboard is only available with movie formats
|
|
shun-iwasawa |
cd4694 |
if (isMovieType(str.toStdString())) {
|
|
shun-iwasawa |
cd4694 |
m_addBoard->setEnabled(true);
|
|
shun-iwasawa |
cd4694 |
m_boardSettingsBtn->setEnabled(m_addBoard->isChecked());
|
|
shun-iwasawa |
cd4694 |
} else {
|
|
shun-iwasawa |
cd4694 |
m_addBoard->setEnabled(false);
|
|
shun-iwasawa |
cd4694 |
m_boardSettingsBtn->setEnabled(false);
|
|
shun-iwasawa |
cd4694 |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Open a popup output format settings popup to set current output format
|
|
Shinya Kitaoka |
120a6e |
settings.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::openSettingsPopup() {
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
std::string ext = prop->getPath().getType();
|
|
shun-iwasawa |
fc0d80 |
|
|
shun-iwasawa |
fc0d80 |
TFrameId oldTmplFId = prop->formatTemplateFId();
|
|
shun-iwasawa |
fc0d80 |
|
|
shun-iwasawa |
fc0d80 |
bool ret =
|
|
shun-iwasawa |
fc0d80 |
openFormatSettingsPopup(this, ext, prop->getFileFormatProperties(ext),
|
|
shun-iwasawa |
fc0d80 |
&prop->formatTemplateFId(), false);
|
|
shun-iwasawa |
fc0d80 |
|
|
shun-iwasawa |
fc0d80 |
if (!ret) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
shun-iwasawa |
fc0d80 |
|
|
shun-iwasawa |
fc0d80 |
if (oldTmplFId.getZeroPadding() !=
|
|
shun-iwasawa |
fc0d80 |
prop->formatTemplateFId().getZeroPadding() ||
|
|
shun-iwasawa |
fc0d80 |
oldTmplFId.getStartSeqInd() !=
|
|
shun-iwasawa |
fc0d80 |
prop->formatTemplateFId().getStartSeqInd()) {
|
|
shun-iwasawa |
fc0d80 |
TFilePath fp =
|
|
shun-iwasawa |
fc0d80 |
prop->getPath().withNoFrame().withFrame(prop->formatTemplateFId());
|
|
shun-iwasawa |
fc0d80 |
prop->setPath(fp);
|
|
shun-iwasawa |
fc0d80 |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current scene output camera to camera set in popup field.
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onCameraChanged(const QString &str) {
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *scene = getCurrentScene();
|
|
Shinya Kitaoka |
120a6e |
if (!scene) return;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *tree = scene->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
int cameraCount = tree->getCameraCount();
|
|
Shinya Kitaoka |
120a6e |
/*-- 注:CameraCountはDeleteされたCameraは入らないがIndexは欠番になる。
|
|
Shinya Kitaoka |
120a6e |
ので、CameraCountとIndexの最大値は必ずしも一致しない
|
|
Shinya Kitaoka |
120a6e |
--*/
|
|
Shinya Kitaoka |
120a6e |
int tmpCameraId = 0;
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < cameraCount;) {
|
|
Shinya Kitaoka |
120a6e |
if (!tree->getStageObject(TStageObjectId::CameraId(tmpCameraId), false)) {
|
|
Shinya Kitaoka |
120a6e |
tmpCameraId++;
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
std::string name =
|
|
Shinya Kitaoka |
120a6e |
tree->getStageObject(TStageObjectId::CameraId(tmpCameraId))->getName();
|
|
Shinya Kitaoka |
120a6e |
if (name == str.toStdString()) break;
|
|
Shinya Kitaoka |
120a6e |
tmpCameraId++;
|
|
Shinya Kitaoka |
120a6e |
i++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i >= cameraCount) return;
|
|
Shinya Kitaoka |
120a6e |
TApp *app = TApp::instance();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId cameraId = TStageObjectId::CameraId(i);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId currentCameraId = m_isPreviewSettings
|
|
Shinya Kitaoka |
120a6e |
? tree->getCurrentPreviewCameraId()
|
|
Shinya Kitaoka |
120a6e |
: tree->getCurrentCameraId();
|
|
Shinya Kitaoka |
120a6e |
if (currentCameraId != cameraId) {
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xsheetHandle = app->getCurrentXsheet();
|
|
Shinya Kitaoka |
120a6e |
disconnect(xsheetHandle, SIGNAL(xsheetChanged()), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(updateField()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_isPreviewSettings)
|
|
Shinya Kitaoka |
120a6e |
tree->setCurrentPreviewCameraId(cameraId);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
tree->setCurrentCameraId(cameraId);
|
|
Shinya Kitaoka |
120a6e |
app->getCurrentScene()->setDirtyFlag(true);
|
|
Shinya Kitaoka |
120a6e |
xsheetHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
connect(xsheetHandle, SIGNAL(xsheetChanged()), this, SLOT(updateField()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current scene output frame values: start frame, end frame, step and
|
|
Shinya Kitaoka |
120a6e |
shrink, to current field values.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onStereoChecked(int) {
|
|
Shinya Kitaoka |
120a6e |
m_stereoShift->setEnabled(m_doStereoscopy->isChecked());
|
|
Shinya Kitaoka |
120a6e |
if (m_dominantFieldOm)
|
|
Shinya Kitaoka |
120a6e |
m_dominantFieldOm->setEnabled(!m_doStereoscopy->isChecked());
|
|
Shinya Kitaoka |
120a6e |
onStereoChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onStereoChanged() {
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings rs = prop->getRenderSettings();
|
|
Shinya Kitaoka |
120a6e |
rs.m_stereoscopic = m_doStereoscopy->isChecked();
|
|
Shinya Kitaoka |
120a6e |
rs.m_stereoscopicShift = m_stereoShift->getValue();
|
|
Shinya Kitaoka |
120a6e |
prop->setRenderSettings(rs);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
481b59 |
void OutputSettingsPopup::onSyncColorSettingsChecked(int state) {
|
|
shun-iwasawa |
481b59 |
assert(m_isPreviewSettings);
|
|
shun-iwasawa |
481b59 |
bool doSync = (state == Qt::Checked);
|
|
shun-iwasawa |
481b59 |
m_colorBox->setDisabled(doSync);
|
|
shun-iwasawa |
481b59 |
getProperties()->syncColorSettings(doSync);
|
|
shun-iwasawa |
481b59 |
// take values from the output settings
|
|
shun-iwasawa |
481b59 |
if (doSync) {
|
|
shun-iwasawa |
481b59 |
TRenderSettings out_rs = getCurrentScene()
|
|
shun-iwasawa |
481b59 |
->getProperties()
|
|
shun-iwasawa |
481b59 |
->getOutputProperties()
|
|
shun-iwasawa |
481b59 |
->getRenderSettings();
|
|
shun-iwasawa |
481b59 |
TRenderSettings rs = getProperties()->getRenderSettings();
|
|
shun-iwasawa |
481b59 |
rs.m_bpp = out_rs.m_bpp;
|
|
shun-iwasawa |
481b59 |
rs.m_linearColorSpace = out_rs.m_linearColorSpace;
|
|
shun-iwasawa |
481b59 |
rs.m_colorSpaceGamma = out_rs.m_colorSpaceGamma;
|
|
shun-iwasawa |
481b59 |
getProperties()->setRenderSettings(rs);
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
// dirty flag will be set here
|
|
shun-iwasawa |
481b59 |
TApp::instance()->getCurrentScene()->notifySceneChanged();
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
//----------------------------------------------
|
|
shun-iwasawa |
481b59 |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onFrameFldEditFinished() {
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *scene = getCurrentScene();
|
|
Shinya Kitaoka |
120a6e |
if (!scene) return;
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int maxR0 = std::max(0, scene->getFrameCount() - 1);
|
|
Shinya Kitaoka |
120a6e |
int r0 = (int)m_startFld->getValue() - 1;
|
|
Shinya Kitaoka |
120a6e |
int r1 = (int)m_endFld->getValue() - 1;
|
|
Shinya Kitaoka |
120a6e |
int step = (int)m_stepFld->getValue();
|
|
Shinya Kitaoka |
120a6e |
int shrink = (int)m_shrinkFld->getValue();
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
41f8d2 |
bool error = false;
|
|
shun-iwasawa |
41f8d2 |
bool somethingChanged = false;
|
|
shun-iwasawa |
41f8d2 |
|
|
Shinya Kitaoka |
120a6e |
if (r0 < 0) {
|
|
Shinya Kitaoka |
120a6e |
error = true;
|
|
Shinya Kitaoka |
120a6e |
r0 = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (r0 > maxR0) {
|
|
Shinya Kitaoka |
120a6e |
error = true;
|
|
Shinya Kitaoka |
120a6e |
r0 = maxR0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (r1 < r0) {
|
|
Shinya Kitaoka |
120a6e |
error = true;
|
|
Shinya Kitaoka |
120a6e |
r1 = r0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (r1 > maxR0) {
|
|
Shinya Kitaoka |
120a6e |
error = true;
|
|
Shinya Kitaoka |
120a6e |
r1 = maxR0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (error) {
|
|
Shinya Kitaoka |
120a6e |
m_startFld->setValue(r0 + 1);
|
|
Shinya Kitaoka |
120a6e |
m_endFld->setValue(r1 + 1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (step < 1) {
|
|
Shinya Kitaoka |
120a6e |
step = 1;
|
|
Shinya Kitaoka |
120a6e |
m_stepFld->setValue(step);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (shrink < 1) {
|
|
Shinya Kitaoka |
120a6e |
shrink = 1;
|
|
Shinya Kitaoka |
120a6e |
m_shrinkFld->setValue(shrink);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (r0 == 0 && r1 == maxR0) {
|
|
Shinya Kitaoka |
120a6e |
r0 = 0;
|
|
Shinya Kitaoka |
120a6e |
r1 = -1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
shun-iwasawa |
41f8d2 |
int oldR0, oldR1, oldStep;
|
|
shun-iwasawa |
41f8d2 |
prop->getRange(oldR0, oldR1, oldStep);
|
|
shun-iwasawa |
41f8d2 |
if (r0 != oldR0 || r1 != oldR1 || step != oldStep) {
|
|
shun-iwasawa |
41f8d2 |
prop->setRange(r0, r1, step);
|
|
shun-iwasawa |
41f8d2 |
somethingChanged = true;
|
|
shun-iwasawa |
41f8d2 |
}
|
|
shun-iwasawa |
41f8d2 |
TRenderSettings rs = prop->getRenderSettings();
|
|
shun-iwasawa |
41f8d2 |
int oldShrink = rs.m_shrinkX;
|
|
shun-iwasawa |
41f8d2 |
bool old_applyShrink = rs.m_applyShrinkToViewer;
|
|
shun-iwasawa |
41f8d2 |
|
|
Shinya Kitaoka |
120a6e |
rs.m_shrinkX = rs.m_shrinkY = shrink;
|
|
Shinya Kitaoka |
120a6e |
rs.m_applyShrinkToViewer =
|
|
Shinya Kitaoka |
120a6e |
m_applyShrinkChk ? m_applyShrinkChk->checkState() == Qt::Checked : false;
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
41f8d2 |
if (rs.m_shrinkX != oldShrink ||
|
|
shun-iwasawa |
41f8d2 |
rs.m_applyShrinkToViewer != old_applyShrink) {
|
|
shun-iwasawa |
41f8d2 |
prop->setRenderSettings(rs);
|
|
shun-iwasawa |
41f8d2 |
somethingChanged = true;
|
|
shun-iwasawa |
41f8d2 |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
41f8d2 |
if (somethingChanged) TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current scene output resample balance to balance identified by \b type
|
|
Shinya Kitaoka |
120a6e |
index in popup QComboBox.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onResampleChanged(int type) {
|
|
Shinya Kitaoka |
120a6e |
if (!getCurrentScene()) return;
|
|
shun-iwasawa |
41f8d2 |
TOutputProperties *prop = getProperties();
|
|
shun-iwasawa |
41f8d2 |
TRenderSettings rs = prop->getRenderSettings();
|
|
shun-iwasawa |
41f8d2 |
TRenderSettings::ResampleQuality old_quality = rs.m_quality;
|
|
shun-iwasawa |
59726b |
rs.m_quality = resampleInfoMap[(ResampleOption)type].quality;
|
|
shun-iwasawa |
41f8d2 |
if (rs.m_quality == old_quality) return;
|
|
Shinya Kitaoka |
120a6e |
prop->setRenderSettings(rs);
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Shinya Kitaoka |
120a6e |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current scene output channel width to value identified by \b type
|
|
Shinya Kitaoka |
120a6e |
index in popup QComboBox.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onChannelWidthChanged(int type) {
|
|
Shinya Kitaoka |
120a6e |
if (!getCurrentScene()) return;
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings rs = prop->getRenderSettings();
|
|
shun-iwasawa |
41f8d2 |
int old_bpp = rs.m_bpp;
|
|
Shinya Kitaoka |
120a6e |
if (type == c_8bit)
|
|
Shinya Kitaoka |
120a6e |
rs.m_bpp = 32;
|
|
shun-iwasawa |
481b59 |
else if (type == c_16bit)
|
|
Shinya Kitaoka |
120a6e |
rs.m_bpp = 64;
|
|
shun-iwasawa |
481b59 |
else
|
|
shun-iwasawa |
481b59 |
rs.m_bpp = 128;
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
41f8d2 |
if (rs.m_bpp == old_bpp) return;
|
|
shun-iwasawa |
481b59 |
|
|
Shinya Kitaoka |
120a6e |
prop->setRenderSettings(rs);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
// sync output settings value to the preview settings
|
|
shun-iwasawa |
481b59 |
if (!m_isPreviewSettings && getCurrentScene()
|
|
shun-iwasawa |
481b59 |
->getProperties()
|
|
shun-iwasawa |
481b59 |
->getPreviewProperties()
|
|
shun-iwasawa |
481b59 |
->isColorSettingsSynced()) {
|
|
shun-iwasawa |
481b59 |
TRenderSettings prev_rs = getCurrentScene()
|
|
shun-iwasawa |
481b59 |
->getProperties()
|
|
shun-iwasawa |
481b59 |
->getPreviewProperties()
|
|
shun-iwasawa |
481b59 |
->getRenderSettings();
|
|
shun-iwasawa |
481b59 |
prev_rs.m_bpp = rs.m_bpp;
|
|
shun-iwasawa |
481b59 |
getCurrentScene()
|
|
shun-iwasawa |
481b59 |
->getProperties()
|
|
shun-iwasawa |
481b59 |
->getPreviewProperties()
|
|
shun-iwasawa |
481b59 |
->setRenderSettings(prev_rs);
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
|
|
Shinya Kitaoka |
120a6e |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
shun-iwasawa |
481b59 |
// dirty flag will be set here
|
|
shun-iwasawa |
481b59 |
TApp::instance()->getCurrentScene()->notifySceneChanged();
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
void OutputSettingsPopup::onLinearColorSpaceChecked(int state) {
|
|
shun-iwasawa |
481b59 |
if (!getCurrentScene()) return;
|
|
shun-iwasawa |
481b59 |
TOutputProperties *prop = getProperties();
|
|
shun-iwasawa |
481b59 |
TRenderSettings rs = prop->getRenderSettings();
|
|
shun-iwasawa |
481b59 |
rs.m_linearColorSpace = (state == Qt::Checked);
|
|
shun-iwasawa |
481b59 |
// force floating point when compute in linear color space
|
|
shun-iwasawa |
481b59 |
if (rs.m_linearColorSpace) {
|
|
shun-iwasawa |
481b59 |
prop->setNonlinearBpp(rs.m_bpp);
|
|
shun-iwasawa |
481b59 |
rs.m_bpp = 128;
|
|
shun-iwasawa |
481b59 |
} else
|
|
shun-iwasawa |
481b59 |
rs.m_bpp = prop->getNonlinearBpp();
|
|
shun-iwasawa |
481b59 |
prop->setRenderSettings(rs);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
// sync output settings value to the preview settings
|
|
shun-iwasawa |
481b59 |
TOutputProperties *prev_prop =
|
|
shun-iwasawa |
481b59 |
getCurrentScene()->getProperties()->getPreviewProperties();
|
|
shun-iwasawa |
481b59 |
if (!m_isPreviewSettings && prev_prop->isColorSettingsSynced()) {
|
|
shun-iwasawa |
481b59 |
TRenderSettings prev_rs = prev_prop->getRenderSettings();
|
|
shun-iwasawa |
481b59 |
prev_rs.m_linearColorSpace = (state == Qt::Checked);
|
|
shun-iwasawa |
481b59 |
if (prev_rs.m_linearColorSpace) {
|
|
shun-iwasawa |
481b59 |
prev_prop->setNonlinearBpp(prev_rs.m_bpp);
|
|
shun-iwasawa |
481b59 |
prev_rs.m_bpp = 128;
|
|
shun-iwasawa |
481b59 |
} else
|
|
shun-iwasawa |
481b59 |
prev_rs.m_bpp = prev_prop->getNonlinearBpp();
|
|
shun-iwasawa |
481b59 |
getCurrentScene()
|
|
shun-iwasawa |
481b59 |
->getProperties()
|
|
shun-iwasawa |
481b59 |
->getPreviewProperties()
|
|
shun-iwasawa |
481b59 |
->setRenderSettings(prev_rs);
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
shun-iwasawa |
481b59 |
// dirty flag will be set here
|
|
shun-iwasawa |
481b59 |
TApp::instance()->getCurrentScene()->notifySceneChanged();
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
void OutputSettingsPopup::onColorSpaceGammaEdited() {
|
|
shun-iwasawa |
481b59 |
if (!getCurrentScene()) return;
|
|
shun-iwasawa |
481b59 |
TOutputProperties *prop = getProperties();
|
|
shun-iwasawa |
481b59 |
TRenderSettings rs = prop->getRenderSettings();
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
double colorSpaceGamma = m_colorSpaceGammaFld->getValue();
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
rs.m_colorSpaceGamma = colorSpaceGamma;
|
|
shun-iwasawa |
481b59 |
prop->setRenderSettings(rs);
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
// sync output settings value to the preview settings
|
|
shun-iwasawa |
481b59 |
if (!m_isPreviewSettings && getCurrentScene()
|
|
shun-iwasawa |
481b59 |
->getProperties()
|
|
shun-iwasawa |
481b59 |
->getPreviewProperties()
|
|
shun-iwasawa |
481b59 |
->isColorSettingsSynced()) {
|
|
shun-iwasawa |
481b59 |
TRenderSettings prev_rs = getCurrentScene()
|
|
shun-iwasawa |
481b59 |
->getProperties()
|
|
shun-iwasawa |
481b59 |
->getPreviewProperties()
|
|
shun-iwasawa |
481b59 |
->getRenderSettings();
|
|
shun-iwasawa |
481b59 |
prev_rs.m_colorSpaceGamma = colorSpaceGamma;
|
|
shun-iwasawa |
481b59 |
getCurrentScene()
|
|
shun-iwasawa |
481b59 |
->getProperties()
|
|
shun-iwasawa |
481b59 |
->getPreviewProperties()
|
|
shun-iwasawa |
481b59 |
->setRenderSettings(prev_rs);
|
|
shun-iwasawa |
481b59 |
}
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
shun-iwasawa |
481b59 |
// dirty flag will be set here
|
|
shun-iwasawa |
481b59 |
TApp::instance()->getCurrentScene()->notifySceneChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current scene output gamma value to current value in popup gamma field.
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onGammaFldEditFinished() {
|
|
Shinya Kitaoka |
120a6e |
if (!getCurrentScene()) return;
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
double gamma = m_gammaFld->getValue();
|
|
Shinya Kitaoka |
120a6e |
m_gammaFld->setCursorPosition(0);
|
|
Shinya Kitaoka |
120a6e |
if (gamma <= 0) {
|
|
Shinya Kitaoka |
120a6e |
gamma = 0.001;
|
|
Shinya Kitaoka |
120a6e |
m_gammaFld->setValue(gamma);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings rs = prop->getRenderSettings();
|
|
shun-iwasawa |
41f8d2 |
if (rs.m_gamma == gamma) return;
|
|
shun-iwasawa |
41f8d2 |
rs.m_gamma = gamma;
|
|
Shinya Kitaoka |
120a6e |
prop->setRenderSettings(rs);
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Set current scene output dominant field to value identified by \b type
|
|
Shinya Kitaoka |
120a6e |
index in popup QComboBox. If time stretch velue from-to are
|
|
Shinya Kitaoka |
120a6e |
different
|
|
Shinya Kitaoka |
120a6e |
and dominant field is different from none show a message error.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onDominantFieldChanged(int type) {
|
|
Shinya Kitaoka |
120a6e |
if (!getCurrentScene()) return;
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings rs = prop->getRenderSettings();
|
|
shun-iwasawa |
41f8d2 |
TRenderSettings::FieldPrevalence oldFieldPrevalence = rs.m_fieldPrevalence;
|
|
Shinya Kitaoka |
120a6e |
if (type != c_none &&
|
|
Shinya Kitaoka |
120a6e |
m_stretchFromFld->getValue() != m_stretchToFld->getValue()) {
|
|
Shinya Kitaoka |
120a6e |
DVGui::error("Can't apply field rendering in a time stretched scene");
|
|
Shinya Kitaoka |
120a6e |
rs.m_fieldPrevalence = TRenderSettings::NoField;
|
|
Shinya Kitaoka |
120a6e |
m_dominantFieldOm->setCurrentIndex(c_none);
|
|
Shinya Kitaoka |
120a6e |
} else if (type == c_odd)
|
|
Shinya Kitaoka |
120a6e |
rs.m_fieldPrevalence = TRenderSettings::OddField;
|
|
Shinya Kitaoka |
120a6e |
else if (type == c_even)
|
|
Shinya Kitaoka |
120a6e |
rs.m_fieldPrevalence = TRenderSettings::EvenField;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
rs.m_fieldPrevalence = TRenderSettings::NoField;
|
|
Shinya Kitaoka |
120a6e |
m_doStereoscopy->setEnabled(rs.m_fieldPrevalence == TRenderSettings::NoField);
|
|
Shinya Kitaoka |
120a6e |
m_stereoShift->setEnabled(rs.m_fieldPrevalence == TRenderSettings::NoField);
|
|
shun-iwasawa |
41f8d2 |
if (rs.m_fieldPrevalence == oldFieldPrevalence) return;
|
|
Shinya Kitaoka |
120a6e |
prop->setRenderSettings(rs);
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! If dominant field is different from none set time stretch field values to
|
|
Shinya Kitaoka |
120a6e |
current scene output time stretch values; otherwise set current
|
|
Shinya Kitaoka |
120a6e |
scene
|
|
Shinya Kitaoka |
120a6e |
output time stretch values to current field values.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onStretchFldEditFinished() {
|
|
Shinya Kitaoka |
120a6e |
if (!getCurrentScene()) return;
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings rs = prop->getRenderSettings();
|
|
Shinya Kitaoka |
120a6e |
if (m_dominantFieldOm->currentIndex() != c_none) {
|
|
Shinya Kitaoka |
120a6e |
DVGui::error("Can't stretch time in a field rendered scene\n");
|
|
Shinya Kitaoka |
120a6e |
m_stretchFromFld->setValue(rs.m_timeStretchFrom);
|
|
Shinya Kitaoka |
120a6e |
m_stretchToFld->setValue(rs.m_timeStretchTo);
|
|
shun-iwasawa |
41f8d2 |
return;
|
|
shun-iwasawa |
41f8d2 |
} else if (rs.m_timeStretchFrom == m_stretchFromFld->getValue() &&
|
|
shun-iwasawa |
41f8d2 |
rs.m_timeStretchTo == m_stretchToFld->getValue()) {
|
|
shun-iwasawa |
41f8d2 |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
41f8d2 |
rs.m_timeStretchFrom = m_stretchFromFld->getValue();
|
|
shun-iwasawa |
41f8d2 |
rs.m_timeStretchTo = m_stretchToFld->getValue();
|
|
shun-iwasawa |
41f8d2 |
prop->setRenderSettings(rs);
|
|
shun-iwasawa |
41f8d2 |
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onMultimediaChanged(int state) {
|
|
Shinya Kitaoka |
120a6e |
if (!getCurrentScene()) return;
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
shun-iwasawa |
41f8d2 |
if (prop->getMultimediaRendering() == state) return;
|
|
Shinya Kitaoka |
120a6e |
prop->setMultimediaRendering(state);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onThreadsComboChanged(int type) {
|
|
Shinya Kitaoka |
120a6e |
if (!getCurrentScene()) return;
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
shun-iwasawa |
41f8d2 |
if (prop->getThreadIndex() == type) return;
|
|
Shinya Kitaoka |
120a6e |
prop->setThreadIndex(type);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onRasterGranularityChanged(int type) {
|
|
Shinya Kitaoka |
120a6e |
if (!getCurrentScene()) return;
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
shun-iwasawa |
41f8d2 |
if (prop->getMaxTileSizeIndex() == type) return;
|
|
Shinya Kitaoka |
120a6e |
prop->setMaxTileSizeIndex(type);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->setDirtyFlag(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! OutputSettingsのPreset登録
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onAddPresetButtonPressed() {
|
|
Shinya Kitaoka |
120a6e |
//*-- プリセット名を取得 --*/
|
|
Shinya Kitaoka |
120a6e |
bool ok;
|
|
Shinya Kitaoka |
120a6e |
QString qs = DVGui::getText(
|
|
Shinya Kitaoka |
120a6e |
tr("Add preset"), tr("Enter the name for the output settings preset."),
|
|
Shinya Kitaoka |
120a6e |
"", &ok);
|
|
Shinya Kitaoka |
120a6e |
if (!ok || qs.isEmpty()) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!qs.endsWith(".txt")) qs.append(".txt");
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = TEnv::getConfigDir() + "outputpresets";
|
|
Shinya Kitaoka |
120a6e |
if (!TFileStatus(fp).doesExist()) TSystem::mkDir(fp);
|
|
Shinya Kitaoka |
120a6e |
fp = fp + qs.toStdString();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*-- すでに存在する場合、上書きを確認 --*/
|
|
Shinya Kitaoka |
120a6e |
if (TFileStatus(fp).doesExist()) {
|
|
Shinya Kitaoka |
120a6e |
int ret = QMessageBox::question(
|
|
Shinya Kitaoka |
120a6e |
this, tr("Add output settings preset"),
|
|
Shinya Kitaoka |
120a6e |
QString("The file %1 does already exist.\nDo you want to overwrite it?")
|
|
Shinya Kitaoka |
120a6e |
.arg(qs),
|
|
Shinya Kitaoka |
120a6e |
QMessageBox::Save | QMessageBox::Cancel, QMessageBox::Save);
|
|
Shinya Kitaoka |
120a6e |
if (ret == QMessageBox::Cancel) return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchFile(fp);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TOStream os(fp, false);
|
|
Shinya Kitaoka |
120a6e |
if (!os.checkStatus()) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
os.openChild("outputsettingspreset");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*-- カメラ設定 --*/
|
|
Shinya Kitaoka |
120a6e |
os.openChild("camera");
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsheet = TApp::instance()->getCurrentXsheet()->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId cameraId = xsheet->getStageObjectTree()->getCurrentCameraId();
|
|
Shinya Kitaoka |
120a6e |
TCamera *camera = xsheet->getStageObject(cameraId)->getCamera();
|
|
Shinya Kitaoka |
120a6e |
camera->saveData(os);
|
|
Shinya Kitaoka |
120a6e |
os.closeChild();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*-- Saveinのプロジェクトフォルダ部分 --*/
|
|
Shinya Kitaoka |
120a6e |
QString saveInPath = m_saveInFileFld->getPath();
|
|
Shinya Kitaoka |
120a6e |
if (saveInPath.startsWith("+")) {
|
|
Shinya Kitaoka |
120a6e |
QString projectFolderName = (saveInPath.contains("\\"))
|
|
Shinya Kitaoka |
120a6e |
? saveInPath.left(saveInPath.indexOf("\\"))
|
|
Shinya Kitaoka |
120a6e |
: saveInPath;
|
|
Shinya Kitaoka |
120a6e |
os.child("savein_projectfolder") << projectFolderName.toStdString();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*-- ファイル形式 --*/
|
|
Shinya Kitaoka |
120a6e |
QString format = m_fileFormat->currentText();
|
|
Shinya Kitaoka |
120a6e |
os.child("format") << format.toStdString();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*-- ファイルオプション --*/
|
|
Shinya Kitaoka |
120a6e |
os.openChild("formatsProperties");
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::string> fileExtensions;</std::string>
|
|
Shinya Kitaoka |
120a6e |
prop->getFileFormatPropertiesExtensions(fileExtensions);
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < (int)fileExtensions.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
std::string ext = fileExtensions[i];
|
|
Shinya Kitaoka |
120a6e |
TPropertyGroup *pg = prop->getFileFormatProperties(ext);
|
|
Shinya Kitaoka |
120a6e |
assert(pg);
|
|
Shinya Kitaoka |
120a6e |
std::map<std::string, std::string=""> attr;</std::string,>
|
|
Shinya Kitaoka |
120a6e |
attr["ext"] = ext;
|
|
Shinya Kitaoka |
120a6e |
os.openChild("formatProperties", attr);
|
|
Shinya Kitaoka |
120a6e |
pg->saveData(os);
|
|
Shinya Kitaoka |
120a6e |
os.closeChild();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
os.closeChild();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Resample Balance
|
|
shun-iwasawa |
59726b |
QString resq =
|
|
shun-iwasawa |
59726b |
resampleInfoMap[(ResampleOption)m_resampleBalanceOm->currentIndex()]
|
|
shun-iwasawa |
59726b |
.idString;
|
|
Shinya Kitaoka |
120a6e |
os.child("resquality") << resq.toStdString();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Channel Width
|
|
shun-iwasawa |
59726b |
QString chanw = m_channelWidthOm->currentData().toString();
|
|
Shinya Kitaoka |
120a6e |
os.child("bpp") << chanw.toStdString();
|
|
shun-iwasawa |
481b59 |
// Linear Color Space & Color Space Gamma
|
|
shun-iwasawa |
481b59 |
std::string linearStr = (m_linearColorSpaceChk->isChecked()) ? "1" : "0";
|
|
shun-iwasawa |
481b59 |
os.child("linearColorSpace") << linearStr;
|
|
shun-iwasawa |
481b59 |
os.child("colorSpaceGamma") << m_colorSpaceGammaFld->text().toStdString();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// 140503 iwasawa Frame Rate (Scene Settings)
|
|
Shinya Kitaoka |
120a6e |
os.child("frameRate") << m_frameRateFld->text().toStdString();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// 140325 iwasawa stretch FPS
|
|
Shinya Kitaoka |
120a6e |
os.child("stretchFrom") << m_stretchFromFld->text().toStdString();
|
|
Shinya Kitaoka |
120a6e |
os.child("stretchTo") << m_stretchToFld->text().toStdString();
|
|
Shinya Kitaoka |
120a6e |
// 140325 iwasawa gamma
|
|
Shinya Kitaoka |
120a6e |
os.child("gamma") << m_gammaFld->text().toStdString();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
os.closeChild(); // outputsettingspreset
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->blockSignals(true);
|
|
Shinya Kitaoka |
120a6e |
updatePresetComboItems();
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->setCurrentIndex(
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->findText(QString::fromStdString(fp.getName())));
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->blockSignals(false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! プリセットフォルダを調べ、コンボボックスにアイテムを格納する
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::updatePresetComboItems() {
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->clear();
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->addItem(tr("<custom>"));</custom>
|
|
Shinya Kitaoka |
120a6e |
TFilePath folder = TEnv::getConfigDir() + "outputpresets";
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFileStatus fs(folder);
|
|
Shinya Kitaoka |
120a6e |
if (!fs.doesExist()) TSystem::mkDir(folder);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFilePathSet paths = TSystem::readDirectory(folder);
|
|
Shinya Kitaoka |
120a6e |
for (TFilePathSet::iterator it = paths.begin(); it != paths.end(); it++) {
|
|
Shinya Kitaoka |
120a6e |
std::cout << it->getName() << std::endl;
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->addItem(QString::fromStdString(it->getName()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->setCurrentIndex(0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
59726b |
|
|
shun-iwasawa |
59726b |
void OutputSettingsPopup::translateResampleOptions() {
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_standard].uiString = tr("Standard");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_improved].uiString = tr("Improved");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_high].uiString = tr("High");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_triangle].uiString = tr("Triangle filter");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_mitchell].uiString = tr("Mitchell-Netravali filter");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_cubic5].uiString = tr("Cubic convolution, a = .5");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_cubic75].uiString = tr("Cubic convolution, a = .75");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_cubic1].uiString = tr("Cubic convolution, a = 1");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_hann2].uiString = tr("Hann window, rad = 2");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_hann3].uiString = tr("Hann window, rad = 3");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_hamming2].uiString = tr("Hamming window, rad = 2");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_hamming3].uiString = tr("Hamming window, rad = 3");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_lanczos2].uiString = tr("Lanczos window, rad = 2");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_lanczos3].uiString = tr("Lanczos window, rad = 3");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_gauss].uiString = tr("Gaussian convolution");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_closestPixel].uiString =
|
|
shun-iwasawa |
59726b |
tr("Closest Pixel (Nearest Neighbor)");
|
|
shun-iwasawa |
59726b |
resampleInfoMap[c_bilinear].uiString = tr("Bilinear");
|
|
shun-iwasawa |
59726b |
}
|
|
shun-iwasawa |
59726b |
|
|
shun-iwasawa |
59726b |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! OutputSettingsのPreset削除
|
|
shun-iwasawa |
f36064 |
*/
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onRemovePresetButtonPressed() {
|
|
Shinya Kitaoka |
120a6e |
int index = m_presetCombo->currentIndex();
|
|
Shinya Kitaoka |
120a6e |
if (index <= 0) return;
|
|
shun-iwasawa |
f36064 |
int ret = QMessageBox::question(this, tr("Remove preset"),
|
|
shun-iwasawa |
f36064 |
QString("Deleting \"%1\".\nAre you sure?")
|
|
shun-iwasawa |
f36064 |
.arg(m_presetCombo->currentText()),
|
|
shun-iwasawa |
f36064 |
QMessageBox::Ok | QMessageBox::Cancel,
|
|
shun-iwasawa |
f36064 |
QMessageBox::Ok);
|
|
Shinya Kitaoka |
120a6e |
if (ret == QMessageBox::Cancel) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp =
|
|
Shinya Kitaoka |
120a6e |
TEnv::getConfigDir() + "outputpresets" +
|
|
Shinya Kitaoka |
120a6e |
QString("%1.txt").arg(m_presetCombo->currentText()).toStdString();
|
|
Shinya Kitaoka |
120a6e |
if (TFileStatus(fp).doesExist()) TSystem::deleteFile(fp);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->blockSignals(true);
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->removeItem(index);
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->setCurrentIndex(0);
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->blockSignals(false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onPresetSelected(const QString &str) {
|
|
Shinya Kitaoka |
120a6e |
/*-- "<custom>"を選択したら何もせずreturn --*/</custom>
|
|
Shinya Kitaoka |
120a6e |
if (m_presetCombo->currentIndex() == 0) return;
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = TEnv::getConfigDir() + "outputpresets" +
|
|
Shinya Kitaoka |
120a6e |
QString("%1.txt").arg(str).toStdString();
|
|
Shinya Kitaoka |
120a6e |
if (!TFileStatus(fp).doesExist()) {
|
|
Shinya Kitaoka |
120a6e |
QMessageBox::warning(this, tr("Warning"),
|
|
Shinya Kitaoka |
120a6e |
QString("The preset file %1.txt not found").arg(str),
|
|
Shinya Kitaoka |
120a6e |
QMessageBox::Ok, QMessageBox::Ok);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TIStream is(fp);
|
|
Shinya Kitaoka |
120a6e |
if (!is) {
|
|
Shinya Kitaoka |
120a6e |
QMessageBox::warning(
|
|
Shinya Kitaoka |
120a6e |
this, tr("Warning"),
|
|
Shinya Kitaoka |
120a6e |
QString("Failed to open the preset file %1.txt").arg(str),
|
|
Shinya Kitaoka |
120a6e |
QMessageBox::Ok, QMessageBox::Ok);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::string tagName = "";
|
|
Shinya Kitaoka |
120a6e |
if (!is.matchTag(tagName) || tagName != "outputsettingspreset") {
|
|
Shinya Kitaoka |
120a6e |
QMessageBox::warning(this, tr("Warning"),
|
|
Shinya Kitaoka |
120a6e |
QString("Bad file format: %1.txt").arg(str),
|
|
Shinya Kitaoka |
120a6e |
QMessageBox::Ok, QMessageBox::Ok);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TOutputProperties *prop = getProperties();
|
|
Shinya Kitaoka |
120a6e |
TRenderSettings rs = prop->getRenderSettings();
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
// set back the linear settings to default
|
|
shun-iwasawa |
481b59 |
// in order to make old presets properly reproduce the settings before the
|
|
shun-iwasawa |
481b59 |
// implementation of linear rendering
|
|
shun-iwasawa |
481b59 |
rs.m_linearColorSpace = false;
|
|
shun-iwasawa |
481b59 |
rs.m_colorSpaceGamma = 2.2;
|
|
shun-iwasawa |
481b59 |
|
|
Shinya Kitaoka |
120a6e |
while (is.matchTag(tagName)) {
|
|
Shinya Kitaoka |
120a6e |
// Camera
|
|
Shinya Kitaoka |
120a6e |
if (tagName == "camera") {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsheet = TApp::instance()->getCurrentXsheet()->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId cameraId =
|
|
Shinya Kitaoka |
120a6e |
xsheet->getStageObjectTree()->getCurrentCameraId();
|
|
Shinya Kitaoka |
120a6e |
TCamera *camera = xsheet->getStageObject(cameraId)->getCamera();
|
|
Shinya Kitaoka |
120a6e |
camera->loadData(is);
|
|
Shinya Kitaoka |
120a6e |
} // if "camera"
|
|
Shinya Kitaoka |
120a6e |
/*-- Saveinのプロジェクトフォルダ部分 --*/
|
|
Shinya Kitaoka |
120a6e |
else if (tagName == "savein_projectfolder") {
|
|
Shinya Kitaoka |
120a6e |
std::string projectFolderName;
|
|
Shinya Kitaoka |
120a6e |
is >> projectFolderName;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString newProjectFolder = QString::fromStdString(projectFolderName);
|
|
Shinya Kitaoka |
120a6e |
QString fp = QString::fromStdWString(prop->getPath().getWideString());
|
|
Shinya Kitaoka |
120a6e |
/*-- 出力パスがプロジェクトフォルダで始まっている場合は、差し替える --*/
|
|
Shinya Kitaoka |
120a6e |
if (!newProjectFolder.isEmpty() && fp.startsWith("+")) {
|
|
Shinya Kitaoka |
120a6e |
if (fp.indexOf("\\") >= 0)
|
|
Shinya Kitaoka |
120a6e |
fp = QString("%1\\%2")
|
|
Shinya Kitaoka |
120a6e |
.arg(newProjectFolder)
|
|
Shinya Kitaoka |
120a6e |
.arg(fp.right(fp.size() - fp.indexOf("\\") - 1));
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
fp = newProjectFolder;
|
|
Shinya Kitaoka |
120a6e |
prop->setPath(TFilePath(fp.toStdWString()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// File format
|
|
Shinya Kitaoka |
120a6e |
else if (tagName == "format") {
|
|
Shinya Kitaoka |
120a6e |
std::string formatName;
|
|
Shinya Kitaoka |
120a6e |
is >> formatName;
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = prop->getPath().withType(formatName);
|
|
Shinya Kitaoka |
120a6e |
prop->setPath(fp);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// File options
|
|
Shinya Kitaoka |
120a6e |
else if (tagName == "formatsProperties") {
|
|
Shinya Kitaoka |
120a6e |
while (is.matchTag(tagName)) {
|
|
Shinya Kitaoka |
120a6e |
if (tagName == "formatProperties") {
|
|
Shinya Kitaoka |
120a6e |
std::string ext = is.getTagAttribute("ext");
|
|
Shinya Kitaoka |
120a6e |
TPropertyGroup *pg = prop->getFileFormatProperties(ext);
|
|
Shinya Kitaoka |
120a6e |
if (ext == "avi") {
|
|
Shinya Kitaoka |
120a6e |
TPropertyGroup appProperties;
|
|
Shinya Kitaoka |
120a6e |
appProperties.loadData(is);
|
|
Shinya Kitaoka |
120a6e |
if (pg->getPropertyCount() != 1 ||
|
|
Shinya Kitaoka |
120a6e |
appProperties.getPropertyCount() != 1) {
|
|
Shinya Kitaoka |
120a6e |
is.closeChild();
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TEnumProperty *enumProp =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<tenumproperty *="">(pg->getProperty(0));</tenumproperty>
|
|
Shinya Kitaoka |
120a6e |
TEnumProperty *enumAppProp =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<tenumproperty *="">(appProperties.getProperty(0));</tenumproperty>
|
|
Shinya Kitaoka |
120a6e |
assert(enumAppProp && enumProp);
|
|
Shinya Kitaoka |
120a6e |
if (enumAppProp && enumProp) {
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
enumProp->setValue(enumAppProp->getValue());
|
|
Shinya Kitaoka |
120a6e |
} catch (TProperty::RangeError &) {
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
throw TException();
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
pg->loadData(is);
|
|
Shinya Kitaoka |
120a6e |
is.closeChild();
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
throw TException("unexpected tag: " + tagName);
|
|
Shinya Kitaoka |
120a6e |
} // end while
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// Resample Balance
|
|
Shinya Kitaoka |
120a6e |
else if (tagName == "resquality") {
|
|
Shinya Kitaoka |
120a6e |
std::string resq;
|
|
Shinya Kitaoka |
120a6e |
is >> resq;
|
|
shun-iwasawa |
59726b |
// first, search in the combobox item data.
|
|
shun-iwasawa |
59726b |
int index = m_resampleBalanceOm->findData(QString::fromStdString(resq));
|
|
shun-iwasawa |
59726b |
// second, search in the combobox ui text (which may be translated).
|
|
shun-iwasawa |
59726b |
// the second search is kept in order to keep backward compatibility.
|
|
shun-iwasawa |
59726b |
if (index < 0)
|
|
shun-iwasawa |
59726b |
index = m_resampleBalanceOm->findText(QString::fromStdString(resq));
|
|
shun-iwasawa |
59726b |
if (index >= 0) {
|
|
shun-iwasawa |
59726b |
m_resampleBalanceOm->setCurrentIndex(index);
|
|
shun-iwasawa |
59726b |
rs.m_quality = resampleInfoMap[(ResampleOption)index].quality;
|
|
shun-iwasawa |
59726b |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// Channel Width
|
|
Shinya Kitaoka |
120a6e |
else if (tagName == "bpp") {
|
|
Shinya Kitaoka |
120a6e |
std::string chanw;
|
|
Shinya Kitaoka |
120a6e |
is >> chanw;
|
|
shun-iwasawa |
59726b |
// first, search in the combobox item data.
|
|
shun-iwasawa |
59726b |
int index = m_channelWidthOm->findData(QString::fromStdString(chanw));
|
|
shun-iwasawa |
59726b |
// second, search in the combobox ui text (which may be translated).
|
|
shun-iwasawa |
59726b |
// the second search is kept in order to keep backward compatibility.
|
|
shun-iwasawa |
59726b |
if (index < 0)
|
|
shun-iwasawa |
59726b |
index = m_channelWidthOm->findText(QString::fromStdString(chanw));
|
|
shun-iwasawa |
59726b |
if (index >= 0) {
|
|
shun-iwasawa |
59726b |
m_channelWidthOm->setCurrentIndex(index);
|
|
shun-iwasawa |
59726b |
if (index == c_8bit)
|
|
shun-iwasawa |
59726b |
rs.m_bpp = 32;
|
|
shun-iwasawa |
481b59 |
else if (index == c_16bit)
|
|
shun-iwasawa |
59726b |
rs.m_bpp = 64;
|
|
shun-iwasawa |
481b59 |
else
|
|
shun-iwasawa |
481b59 |
rs.m_bpp = 128;
|
|
shun-iwasawa |
59726b |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
shun-iwasawa |
481b59 |
// Linear Color Space & Color Space Gamma
|
|
shun-iwasawa |
481b59 |
else if (tagName == "linearColorSpace") {
|
|
shun-iwasawa |
481b59 |
std::string linearStr;
|
|
shun-iwasawa |
481b59 |
is >> linearStr;
|
|
shun-iwasawa |
481b59 |
rs.m_linearColorSpace = (linearStr != "0");
|
|
shun-iwasawa |
481b59 |
} else if (tagName == "colorSpaceGamma") {
|
|
shun-iwasawa |
481b59 |
std::string gamma;
|
|
shun-iwasawa |
481b59 |
is >> gamma;
|
|
shun-iwasawa |
481b59 |
rs.m_colorSpaceGamma = QString::fromStdString(gamma).toDouble();
|
|
shun-iwasawa |
481b59 |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Frame Rate (Scene Settings)
|
|
Shinya Kitaoka |
120a6e |
else if (tagName == "frameRate") {
|
|
Shinya Kitaoka |
120a6e |
std::string strFps;
|
|
Shinya Kitaoka |
120a6e |
is >> strFps;
|
|
Shinya Kitaoka |
120a6e |
prop->setFrameRate(QString::fromStdString(strFps).toDouble());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// stretch FPS
|
|
Shinya Kitaoka |
120a6e |
else if (tagName == "stretchFrom") {
|
|
Shinya Kitaoka |
120a6e |
std::string strFrm;
|
|
Shinya Kitaoka |
120a6e |
is >> strFrm;
|
|
Shinya Kitaoka |
120a6e |
rs.m_timeStretchFrom = QString::fromStdString(strFrm).toDouble();
|
|
Shinya Kitaoka |
120a6e |
} else if (tagName == "stretchTo") {
|
|
Shinya Kitaoka |
120a6e |
std::string strTo;
|
|
Shinya Kitaoka |
120a6e |
is >> strTo;
|
|
Shinya Kitaoka |
120a6e |
rs.m_timeStretchTo = QString::fromStdString(strTo).toDouble();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// gamma
|
|
Shinya Kitaoka |
120a6e |
else if (tagName == "gamma") {
|
|
Shinya Kitaoka |
120a6e |
std::string gamma;
|
|
Shinya Kitaoka |
120a6e |
is >> gamma;
|
|
Shinya Kitaoka |
120a6e |
rs.m_gamma = QString::fromStdString(gamma).toDouble();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
is.closeChild();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*-- renderSettingsを戻す --*/
|
|
Shinya Kitaoka |
120a6e |
prop->setRenderSettings(rs);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->notifySceneChanged();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->blockSignals(true);
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->setCurrentIndex(m_presetCombo->findText(str));
|
|
Shinya Kitaoka |
120a6e |
m_presetCombo->blockSignals(false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onCameraSettingsChanged() {
|
|
Shinya Kitaoka |
120a6e |
if (m_presetCombo) m_presetCombo->setCurrentIndex(0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void OutputSettingsPopup::onFrameRateEditingFinished() {
|
|
Shinya Kitaoka |
120a6e |
double frameRate = getProperties()->getFrameRate();
|
|
Shinya Kitaoka |
120a6e |
double frameRateFldValue = m_frameRateFld->getValue();
|
|
Shinya Kitaoka |
120a6e |
if (frameRate == frameRateFldValue) return;
|
|
Shinya Kitaoka |
120a6e |
getProperties()->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 |
|
|
shun-iwasawa |
cd4694 |
void OutputSettingsPopup::onAddBoardChecked(int state) {
|
|
shun-iwasawa |
cd4694 |
BoardSettings *boardSettings = getProperties()->getBoardSettings();
|
|
shun-iwasawa |
cd4694 |
boardSettings->setActive(state == Qt::Checked);
|
|
shun-iwasawa |
cd4694 |
|
|
shun-iwasawa |
cd4694 |
m_boardSettingsBtn->setEnabled(state == Qt::Checked);
|
|
shun-iwasawa |
cd4694 |
}
|
|
shun-iwasawa |
cd4694 |
|
|
shun-iwasawa |
cd4694 |
void OutputSettingsPopup::onBoardSettingsBtnClicked() {
|
|
shun-iwasawa |
cd4694 |
std::cout << "board settings button clicked" << std::endl;
|
|
shun-iwasawa |
cd4694 |
BoardSettingsPopup popup(this);
|
|
shun-iwasawa |
cd4694 |
popup.exec();
|
|
shun-iwasawa |
cd4694 |
}
|
|
shun-iwasawa |
cd4694 |
|
|
shun-iwasawa |
cd4694 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
cd4694 |
|
|
Shinya Kitaoka |
120a6e |
OpenPopupCommandHandler<outputsettingspopup> openOutputSettingsPopup(</outputsettingspopup>
|
|
Shinya Kitaoka |
120a6e |
MI_OutputSettings);
|
|
Shinya Kitaoka |
120a6e |
OpenPopupCommandHandler<previewsettingspopup> openPreviewSettingsPopup(</previewsettingspopup>
|
|
Shinya Kitaoka |
120a6e |
MI_PreviewSettings);
|