Jeremy Bullock bfe861
Jeremy Bullock bfe861
Jeremy Bullock bfe861
#include "startuppopup.h"
Jeremy Bullock bfe861
Jeremy Bullock bfe861
// Tnz6 includes
Jeremy Bullock bfe861
#include "mainwindow.h"
Jeremy Bullock bfe861
#include "tapp.h"
Jeremy Bullock bfe861
#include "iocommand.h"
Jeremy Bullock bfe861
#include "toutputproperties.h"
Jeremy Bullock bfe861
#include "toonzqt/flipconsole.h"
Jeremy Bullock bfe861
#include "menubarcommandids.h"
Jeremy Bullock bfe861
#include "tenv.h"
Jeremy Bullock bfe861
#include "toonz/stage.h"
Jeremy Bullock bfe861
Jeremy Bullock bfe861
// TnzQt includes
Jeremy Bullock bfe861
#include "toonzqt/menubarcommand.h"
Jeremy Bullock bfe861
#include "toonzqt/gutil.h"
Jeremy Bullock bfe861
#include "toonzqt/doublefield.h"
justburner be2476
#include "toonzqt/icongenerator.h"
Jeremy Bullock bfe861
Jeremy Bullock bfe861
// TnzLib includes
Jeremy Bullock bfe861
#include "toonz/toonzscene.h"
Jeremy Bullock bfe861
#include "toonz/txsheet.h"
Jeremy Bullock bfe861
#include "toonz/levelproperties.h"
Jeremy Bullock bfe861
#include "toonz/sceneproperties.h"
Jeremy Bullock bfe861
#include "toonz/tcamera.h"
Jeremy Bullock bfe861
#include "toonz/tscenehandle.h"
Jeremy Bullock bfe861
#include "toonz/txsheethandle.h"
Jeremy Bullock bfe861
#include "toonz/preferences.h"
Jeremy Bullock bfe861
#include "toonz/tproject.h"
Jeremy Bullock bfe861
Jeremy Bullock bfe861
// TnzCore includes
Jeremy Bullock bfe861
#include "tsystem.h"
Jeremy Bullock bfe861
#include "filebrowsermodel.h"
Jeremy Bullock bfe861
Jeremy Bullock bfe861
// Qt includes
Jeremy Bullock bfe861
#include <qhboxlayout></qhboxlayout>
Jeremy Bullock bfe861
#include <qcombobox></qcombobox>
Jeremy Bullock bfe861
#include <qpushbutton></qpushbutton>
Jeremy Bullock bfe861
#include <qmainwindow></qmainwindow>
Jeremy Bullock bfe861
#include <qapplication></qapplication>
Jeremy Bullock bfe861
#include <qdesktopwidget></qdesktopwidget>
Jeremy Bullock bfe861
#include <qmessagebox></qmessagebox>
Jeremy Bullock bfe861
#include <qtextstream></qtextstream>
Jeremy Bullock bfe861
#include <qframe></qframe>
Jeremy Bullock bfe861
#include <qgroupbox></qgroupbox>
justburner be2476
#include <qpainter></qpainter>
justburner be2476
#include <qscrollbar></qscrollbar>
justburner be2476
#include <qmouseevent></qmouseevent>
justburner be2476
#include <qdesktopservices></qdesktopservices>
Jeremy Bullock bfe861
Jeremy Bullock bfe861
using namespace std;
Jeremy Bullock bfe861
using namespace DVGui;
Jeremy Bullock bfe861
Jeremy Bullock bfe861
namespace {
Jeremy Bullock bfe861
Jeremy Bullock bfe861
// the first value in the preset list
Jeremy Bullock bfe861
const QString custom = QObject::tr("<custom>");</custom>
Jeremy Bullock bfe861
Jeremy Bullock ce17cf
void removeAll(QLayout *layout) {
Jeremy Bullock ce17cf
  QLayoutItem *child;
Jeremy Bullock ce17cf
  while (layout->count() != 0) {
Jeremy Bullock ce17cf
    child = layout->takeAt(0);
Jeremy Bullock ce17cf
    if (child->layout() != 0) {
Jeremy Bullock ce17cf
      removeAll(child->layout());
Jeremy Bullock ce17cf
    } else if (child->widget() != 0) {
Jeremy Bullock ce17cf
      delete child->widget();
Jeremy Bullock ce17cf
    }
Jeremy Bullock ce17cf
Jeremy Bullock ce17cf
    delete child;
Jeremy Bullock ce17cf
  }
Jeremy Bullock ce17cf
}
Jeremy Bullock ce17cf
Jeremy Bullock bfe861
QString removeZeros(QString srcStr) {
Jeremy Bullock bfe861
  if (!srcStr.contains('.')) return srcStr;
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  for (int i = srcStr.length() - 1; i >= 0; i--) {
Jeremy Bullock bfe861
    if (srcStr.at(i) == '0')
Jeremy Bullock bfe861
      srcStr.chop(1);
Jeremy Bullock bfe861
    else if (srcStr.at(i) == '.') {
Jeremy Bullock bfe861
      srcStr.chop(1);
Jeremy Bullock bfe861
      break;
Jeremy Bullock bfe861
    } else
Jeremy Bullock bfe861
      break;
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
  return srcStr;
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
}  // namespace
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//=============================================================================
Jeremy Bullock bfe861
/*! \class StartupPopup
Jeremy Bullock bfe861
                \brief The StartupPopup class provides a modal dialog to
Jeremy Bullock bfe861
   bring up recent files or create a new scene.
Jeremy Bullock bfe861
Jeremy Bullock bfe861
                Inherits \b Dialog.
Jeremy Bullock bfe861
*/
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
StartupPopup::StartupPopup()
Jeremy Bullock bfe861
    : Dialog(TApp::instance()->getMainWindow(), true, true, "StartupPopup") {
Jeremy Bullock bfe861
  setWindowTitle(tr("OpenToonz Startup"));
Jeremy Bullock bfe861
manongjohn ca8bef
  m_projectBox = new QGroupBox(tr("Current Project"), this);
justburner be2476
  m_scenesTab  = new QTabWidget();
manongjohn ca8bef
  m_recentBox  = new QGroupBox(tr("Recent Scenes [Project]"), this);
Jeremy Bullock bfe861
  m_projectBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
Jeremy Bullock bfe861
  m_nameFld                 = new LineEdit(this);
Jeremy Bullock bfe861
  m_pathFld                 = new FileField(this);
Jeremy Bullock bfe861
  m_sceneNameLabel          = new QLabel(tr("Scene Name:"));
Jeremy Bullock bfe861
  m_widthLabel              = new QLabel(tr("Width:"), this);
Jeremy Bullock bfe861
  m_widthFld                = new MeasuredDoubleLineEdit(this);
Jeremy Bullock bfe861
  m_heightLabel             = new QLabel(tr("Height:"), this);
Jeremy Bullock bfe861
  m_heightFld               = new MeasuredDoubleLineEdit(this);
Jeremy Bullock bfe861
  m_dpiLabel                = new QLabel(tr("DPI:"), this);
Jeremy Bullock bfe861
  m_dpiFld                  = new DoubleLineEdit(this, 120);
Jeremy Bullock bfe861
  m_resXLabel               = new QLabel(tr("X"), this);
Jeremy Bullock bfe861
  m_resXFld                 = new DoubleLineEdit(this);
Jeremy Bullock bfe861
  m_resYFld                 = new DoubleLineEdit(this);
Jeremy Bullock bfe861
  m_resTextLabel            = new QLabel(tr("Resolution:"), this);
Jeremy Bullock bfe861
  m_fpsLabel                = new QLabel(tr("Frame Rate:"), this);
Jeremy Bullock bfe861
  m_fpsFld                  = new DoubleLineEdit(this, 24.0);
Jeremy Bullock bfe861
  m_cameraSettingsWidget    = new CameraSettingsWidget(false);
Jeremy Bullock bfe861
  m_presetCombo             = new QComboBox(this);
Jeremy Bullock bfe861
  m_unitsCB                 = new QComboBox(this);
Jeremy Bullock bfe861
  m_addPresetBtn            = new QPushButton(tr("Add"), this);
Jeremy Bullock bfe861
  m_removePresetBtn         = new QPushButton(tr("Remove"), this);
Jeremy Bullock bfe861
  m_showAtStartCB           = new QCheckBox(tr("Show this at startup"), this);
Jeremy Bullock 4c6224
  m_autoSaveOnCB            = new QCheckBox(tr("Automatically Save Every "));
Jeremy Bullock 4c6224
  m_autoSaveTimeFld         = new IntLineEdit(this, 10);
Jeremy Bullock bfe861
  QPushButton *createButton = new QPushButton(tr("Create Scene"), this);
Jeremy Bullock bfe861
  QPushButton *newProjectButton = new QPushButton(tr("New Project..."), this);
Jeremy Bullock bfe861
  QPushButton *loadOtherSceneButton =
Jeremy Bullock bfe861
      new QPushButton(tr("Open Another Scene..."), this);
justburner be2476
Jeremy Bullock bfe861
  m_projectsCB = new QComboBox(this);
Jeremy Bullock bfe861
  QStringList type;
Jeremy Bullock bfe861
  type << tr("pixel") << tr("cm") << tr("mm") << tr("inch") << tr("field");
Jeremy Bullock bfe861
  m_unitsCB->addItems(type);
Jeremy Bullock bfe861
justburner be2476
  QPushButton *openProjectButton = new QPushButton(tr("Open Project..."), this);
justburner be2476
  QPushButton *exploreProjectButton =
justburner be2476
      new QPushButton(tr("Explore Folder"), this);
justburner be2476
justburner be2476
  m_existingList = new StartupScenesList(this, QSize(96, 54));
justburner be2476
Jeremy Bullock bfe861
  // Exclude all character which cannot fit in a filepath (Win).
Jeremy Bullock bfe861
  // Dots are also prohibited since they are internally managed by Toonz.
Jeremy Bullock bfe861
  QRegExp rx("[^\\\\/:?*.\"<>|]+");
Jeremy Bullock bfe861
  m_nameFld->setValidator(new QRegExpValidator(rx, this));
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  m_widthFld->setMeasure("camera.lx");
Jeremy Bullock bfe861
  m_heightFld->setMeasure("camera.ly");
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  m_widthFld->setRange(0.1, (std::numeric_limits<double>::max)());</double>
Jeremy Bullock bfe861
  m_heightFld->setRange(0.1, (std::numeric_limits<double>::max)());</double>
Jeremy Bullock bfe861
  m_fpsFld->setRange(1.0, (std::numeric_limits<double>::max)());</double>
Jeremy Bullock bfe861
  m_dpiFld->setRange(1.0, (std::numeric_limits<double>::max)());</double>
Jeremy Bullock bfe861
  m_resXFld->setRange(0.1, (std::numeric_limits<double>::max)());</double>
Jeremy Bullock bfe861
  m_resYFld->setRange(0.1, (std::numeric_limits<double>::max)());</double>
Jeremy Bullock 4c6224
  m_autoSaveTimeFld->setRange(1, (std::numeric_limits<int>::max)());</int>
Jeremy Bullock 4c6224
  m_autoSaveOnCB->setChecked(Preferences::instance()->isAutosaveEnabled());
Jeremy Bullock 4c6224
  m_autoSaveOnCB->setStyleSheet("QCheckBox{ background-color: none; }");
Jeremy Bullock 4c6224
  m_autoSaveTimeFld->setEnabled(m_autoSaveOnCB->isChecked());
Jeremy Bullock 4c6224
  m_autoSaveTimeFld->setValue(Preferences::instance()->getAutosavePeriod());
Jeremy Bullock bfe861
  m_showAtStartCB->setChecked(Preferences::instance()->isStartupPopupEnabled());
Jeremy Bullock bfe861
  m_showAtStartCB->setStyleSheet("QCheckBox{ background-color: none; }");
Jeremy Bullock bfe861
  m_addPresetBtn->setStyleSheet(
Jeremy Bullock bfe861
      "QPushButton { padding-left: 4px; padding-right: 4px;}");
Jeremy Bullock bfe861
  m_removePresetBtn->setStyleSheet(
Jeremy Bullock bfe861
      "QPushButton { padding-left: 4px; padding-right: 4px;}");
Jeremy Bullock bfe861
  QLabel *label = new QLabel();
konero 7bed16
  label->setPixmap(QPixmap(generateIconPixmap("opentoonz_logo")));
Jeremy Bullock bfe861
  m_projectBox->setObjectName("SolidLineFrame");
justburner be2476
  m_scenesTab->setObjectName("SolidLineFrame");
Jeremy Bullock bfe861
  m_recentBox->setObjectName("SolidLineFrame");
Jeremy Bullock bfe861
  m_projectBox->setContentsMargins(10, 10, 10, 10);
justburner be2476
  m_scenesTab->setContentsMargins(10, 10, 10, 10);
Jeremy Bullock bfe861
  m_recentBox->setContentsMargins(10, 10, 10, 10);
Jeremy Bullock bfe861
  m_recentBox->setFixedWidth(200);
justburner be2476
  m_scenesTab->setMinimumWidth(480);
Jeremy Bullock bfe861
  m_projectBox->setMinimumWidth(480);
Jeremy Bullock 89f1cf
  m_buttonFrame->setFixedHeight(34);
manongjohn ca8bef
Jeremy Bullock bfe861
  //--- layout
Jeremy Bullock bfe861
  m_topLayout->setMargin(0);
Jeremy Bullock bfe861
  m_topLayout->setSpacing(0);
Jeremy Bullock bfe861
  {
Jeremy Bullock bfe861
    QGridLayout *guiLay      = new QGridLayout();
justburner be2476
    QGridLayout *projectLay  = new QGridLayout();
Jeremy Bullock bfe861
    QGridLayout *newSceneLay = new QGridLayout();
justburner be2476
    QWidget *newSceneWidget  = new QWidget();
Jeremy Bullock bfe861
    m_recentSceneLay         = new QVBoxLayout();
Jeremy Bullock bfe861
    guiLay->setMargin(10);
Jeremy Bullock bfe861
    guiLay->setVerticalSpacing(10);
Jeremy Bullock bfe861
    guiLay->setHorizontalSpacing(10);
Jeremy Bullock bfe861
konero 7bed16
    guiLay->addWidget(label, 0, 0, 1, 2, Qt::AlignCenter);
Jeremy Bullock bfe861
justburner be2476
    //--- Project
Jeremy Bullock bfe861
    projectLay->setSpacing(8);
Jeremy Bullock bfe861
    projectLay->setMargin(8);
Jeremy Bullock bfe861
    {
justburner be2476
      projectLay->addWidget(m_projectsCB, 0, 0, 1, 3);
justburner be2476
      projectLay->addWidget(newProjectButton, 1, 0);
justburner be2476
      projectLay->addWidget(openProjectButton, 1, 1);
justburner be2476
      projectLay->addWidget(exploreProjectButton, 1, 2);
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
    m_projectBox->setLayout(projectLay);
Jeremy Bullock bfe861
    guiLay->addWidget(m_projectBox, 1, 0, 1, 1, Qt::AlignCenter);
Jeremy Bullock bfe861
justburner be2476
    //--- Existing scenes
justburner be2476
    m_scenesTab->addTab(m_existingList, tr("Open Existing Scene"));
justburner be2476
justburner be2476
    //--- New scene
Jeremy Bullock bfe861
    newSceneLay->setMargin(8);
Jeremy Bullock bfe861
    newSceneLay->setVerticalSpacing(8);
Jeremy Bullock bfe861
    newSceneLay->setHorizontalSpacing(8);
Jeremy Bullock bfe861
    {
Jeremy Bullock bfe861
      // Scene Name
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_sceneNameLabel, 0, 0,
Jeremy Bullock bfe861
                             Qt::AlignRight | Qt::AlignVCenter);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_nameFld, 0, 1, 1, 3);
Jeremy Bullock bfe861
Jeremy Bullock bfe861
      // Save In
Jeremy Bullock bfe861
      newSceneLay->addWidget(new QLabel(tr("Save In:")), 1, 0,
Jeremy Bullock bfe861
                             Qt::AlignRight | Qt::AlignVCenter);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_pathFld, 1, 1, 1, 3);
Jeremy Bullock bfe861
      newSceneLay->addWidget(new QLabel(tr("Camera Size:")), 2, 0,
Jeremy Bullock bfe861
                             Qt::AlignRight | Qt::AlignVCenter);
Jeremy Bullock bfe861
      QHBoxLayout *resListLay = new QHBoxLayout();
Jeremy Bullock bfe861
      resListLay->setSpacing(3);
Jeremy Bullock bfe861
      resListLay->setMargin(1);
Jeremy Bullock bfe861
      {
Jeremy Bullock bfe861
        resListLay->addWidget(m_presetCombo, 1);
Jeremy Bullock bfe861
        resListLay->addWidget(m_addPresetBtn, 0);
Jeremy Bullock bfe861
        resListLay->addWidget(m_removePresetBtn, 0);
Jeremy Bullock bfe861
      }
Jeremy Bullock bfe861
      newSceneLay->addLayout(resListLay, 2, 1, 1, 3, Qt::AlignLeft);
Jeremy Bullock bfe861
Jeremy Bullock bfe861
      // Width - Height
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_widthLabel, 3, 0,
Jeremy Bullock bfe861
                             Qt::AlignRight | Qt::AlignVCenter);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_widthFld, 3, 1);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_heightLabel, 3, 2,
Jeremy Bullock bfe861
                             Qt::AlignRight | Qt::AlignVCenter);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_heightFld, 3, 3);
Jeremy Bullock bfe861
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_resTextLabel, 4, 0, 1, 1, Qt::AlignRight);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_resXFld, 4, 1);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_resXLabel, 4, 2, 1, 1, Qt::AlignCenter);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_resYFld, 4, 3);
Jeremy Bullock bfe861
      newSceneLay->addWidget(new QLabel(tr("Units:")), 5, 0,
Jeremy Bullock bfe861
                             Qt::AlignRight | Qt::AlignVCenter);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_unitsCB, 5, 1, 1, 1);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_dpiLabel, 5, 2,
Jeremy Bullock bfe861
                             Qt::AlignRight | Qt::AlignVCenter);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_dpiFld, 5, 3, 1, 1);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_fpsLabel, 6, 0,
Jeremy Bullock bfe861
                             Qt::AlignRight | Qt::AlignVCenter);
Jeremy Bullock bfe861
      newSceneLay->addWidget(m_fpsFld, 6, 1, 1, 1);
Jeremy Bullock bfe861
      newSceneLay->addWidget(createButton, 7, 1, 1, 3, Qt::AlignLeft);
Jeremy Bullock bfe861
    }
justburner be2476
    newSceneWidget->setLayout(newSceneLay);
justburner be2476
    m_scenesTab->addTab(newSceneWidget, tr("Create a New Scene"));
justburner be2476
justburner be2476
    guiLay->addWidget(m_scenesTab, 2, 0, 4, 1, Qt::AlignTop);
Jeremy Bullock bfe861
justburner be2476
    //--- Recent scenes
shun_iwasawa b81709
    m_recentSceneLay->setMargin(5);
shun_iwasawa b81709
    m_recentSceneLay->setSpacing(2);
Jeremy Bullock bfe861
    {
Jeremy Bullock bfe861
      // Recent Scene List
Jeremy Bullock bfe861
      m_recentBox->setLayout(m_recentSceneLay);
manongjohn ca8bef
      guiLay->addWidget(m_recentBox, 1, 1, 4, 1,
manongjohn ca8bef
                        Qt::AlignTop | Qt::AlignHCenter);
Jeremy Bullock bfe861
      guiLay->addWidget(loadOtherSceneButton, 5, 1, 1, 1, Qt::AlignRight);
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
    m_topLayout->addLayout(guiLay, 0);
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  m_buttonLayout->setMargin(0);
Jeremy Bullock bfe861
  m_buttonLayout->setSpacing(10);
Jeremy Bullock 4c6224
  {
Jeremy Bullock 4c6224
    m_buttonLayout->addWidget(m_showAtStartCB, Qt::AlignLeft);
Jeremy Bullock 4c6224
    m_buttonLayout->addStretch();
Jeremy Bullock 4c6224
    m_buttonLayout->addWidget(m_autoSaveOnCB);
Jeremy Bullock 4c6224
    m_buttonLayout->addWidget(m_autoSaveTimeFld);
Jeremy Bullock 4c6224
    QLabel *minutesLabel = new QLabel(tr("Minutes"), this);
Jeremy Bullock 4c6224
    minutesLabel->setStyleSheet("QLabel{ background-color: none; }");
Jeremy Bullock 4c6224
    m_buttonLayout->addWidget(minutesLabel);
Jeremy Bullock 4c6224
  }
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  TApp *app                 = TApp::instance();
Jeremy Bullock bfe861
  TSceneHandle *sceneHandle = app->getCurrentScene();
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  //---- signal-slot connections
Jeremy Bullock bfe861
  bool ret = true;
Jeremy Bullock bfe861
  ret      = ret && connect(sceneHandle, SIGNAL(sceneChanged()), this,
konero 7bed16
                            SLOT(onSceneChanged()));
shun-iwasawa 62d519
  ret      = ret && connect(sceneHandle, SIGNAL(sceneSwitched()), this,
konero 7bed16
                            SLOT(onSceneChanged()));
shun-iwasawa 62d519
  ret      = ret && connect(newProjectButton, SIGNAL(clicked()), this,
konero 7bed16
                            SLOT(onNewProjectButtonPressed()));
justburner be2476
  ret      = ret && connect(openProjectButton, SIGNAL(clicked()), this,
konero 7bed16
                            SLOT(onOpenProjectButtonPressed()));
justburner be2476
  ret      = ret && connect(exploreProjectButton, SIGNAL(clicked()), this,
konero 7bed16
                            SLOT(onExploreProjectButtonPressed()));
shun-iwasawa 62d519
  ret      = ret && connect(loadOtherSceneButton, SIGNAL(clicked()), this,
konero 7bed16
                            SLOT(onLoadSceneButtonPressed()));
shun-iwasawa 62d519
  ret      = ret && connect(m_projectsCB, SIGNAL(currentIndexChanged(int)),
konero 7bed16
                            SLOT(onProjectChanged(int)));
shun-iwasawa 62d519
  ret      = ret &&
Jeremy Bullock bfe861
        connect(createButton, SIGNAL(clicked()), this, SLOT(onCreateButton()));
Jeremy Bullock bfe861
  ret = ret && connect(m_showAtStartCB, SIGNAL(stateChanged(int)), this,
Jeremy Bullock bfe861
                       SLOT(onShowAtStartChanged(int)));
Jeremy Bullock bfe861
  ret = ret && connect(m_widthFld, SIGNAL(valueChanged()), this,
Jeremy Bullock bfe861
                       SLOT(updateResolution()));
Jeremy Bullock bfe861
  ret = ret && connect(m_heightFld, SIGNAL(valueChanged()), this,
Jeremy Bullock bfe861
                       SLOT(updateResolution()));
Jeremy Bullock bfe861
  ret = ret &&
Jeremy Bullock bfe861
        connect(m_resXFld, SIGNAL(valueChanged()), this, SLOT(updateSize()));
Jeremy Bullock bfe861
  ret = ret &&
Jeremy Bullock bfe861
        connect(m_resYFld, SIGNAL(valueChanged()), this, SLOT(updateSize()));
Jeremy Bullock bfe861
  ret = ret && connect(m_dpiFld, SIGNAL(editingFinished()), this,
Jeremy Bullock bfe861
                       SLOT(onDpiChanged()));
Jeremy Bullock bfe861
  ret = ret && connect(m_presetCombo, SIGNAL(activated(const QString &)),
Jeremy Bullock bfe861
                       SLOT(onPresetSelected(const QString &)));
Jeremy Bullock bfe861
  ret = ret && connect(m_addPresetBtn, SIGNAL(clicked()), SLOT(addPreset()));
Jeremy Bullock bfe861
  ret = ret && connect(m_unitsCB, SIGNAL(currentIndexChanged(int)),
Jeremy Bullock bfe861
                       SLOT(onCameraUnitChanged(int)));
Jeremy Bullock bfe861
  ret = ret &&
Jeremy Bullock bfe861
        connect(m_removePresetBtn, SIGNAL(clicked()), SLOT(removePreset()));
Jeremy Bullock bfe861
  ret = ret && connect(m_nameFld, SIGNAL(returnPressedNow()), createButton,
Jeremy Bullock bfe861
                       SLOT(animateClick()));
Jeremy Bullock 4c6224
  ret = ret && connect(m_autoSaveOnCB, SIGNAL(stateChanged(int)), this,
Jeremy Bullock 4c6224
                       SLOT(onAutoSaveOnChanged(int)));
Jeremy Bullock 4c6224
  ret = ret && connect(m_autoSaveTimeFld, SIGNAL(editingFinished()), this,
Jeremy Bullock 4c6224
                       SLOT(onAutoSaveTimeChanged()));
justburner be2476
  ret = ret && connect(m_existingList, SIGNAL(itemClicked(int)), this,
justburner be2476
                       SLOT(onExistingSceneClicked(int)));
Jeremy Bullock bfe861
  assert(ret);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::showEvent(QShowEvent *) {
Jeremy Bullock bfe861
  loadPresetList();
Jeremy Bullock bfe861
  updateProjectCB();
Jeremy Bullock bfe861
  m_nameFld->setFocus();
Jeremy Bullock bfe861
  m_pathFld->setPath(TApp::instance()
Jeremy Bullock bfe861
                         ->getCurrentScene()
Jeremy Bullock bfe861
                         ->getScene()
Jeremy Bullock bfe861
                         ->getProject()
Jeremy Bullock bfe861
                         ->getScenesPath()
Jeremy Bullock bfe861
                         .getQString());
Jeremy Bullock bfe861
  TDimensionD cameraSize = TApp::instance()
Jeremy Bullock bfe861
                               ->getCurrentScene()
Jeremy Bullock bfe861
                               ->getScene()
Jeremy Bullock bfe861
                               ->getCurrentCamera()
Jeremy Bullock bfe861
                               ->getSize();
Jeremy Bullock bfe861
  TDimension cameraRes = TApp::instance()
Jeremy Bullock bfe861
                             ->getCurrentScene()
Jeremy Bullock bfe861
                             ->getScene()
Jeremy Bullock bfe861
                             ->getCurrentCamera()
Jeremy Bullock bfe861
                             ->getRes();
Jeremy Bullock bfe861
  double fps = TApp::instance()
Jeremy Bullock bfe861
                   ->getCurrentScene()
Jeremy Bullock bfe861
                   ->getScene()
Jeremy Bullock bfe861
                   ->getProperties()
Jeremy Bullock bfe861
                   ->getOutputProperties()
Jeremy Bullock bfe861
                   ->getFrameRate();
Jeremy Bullock bfe861
  m_widthFld->setValue(cameraSize.lx);
Jeremy Bullock bfe861
  m_heightFld->setValue(cameraSize.ly);
Jeremy Bullock bfe861
  if (Preferences::instance()->getCameraUnits() == "pixel") {
Jeremy Bullock bfe861
    m_widthFld->setDecimals(0);
Jeremy Bullock bfe861
    m_heightFld->setDecimals(0);
Jeremy Bullock bfe861
    m_resTextLabel->hide();
Jeremy Bullock bfe861
    m_resXFld->hide();
Jeremy Bullock bfe861
    m_resYFld->hide();
Jeremy Bullock bfe861
    m_resXLabel->hide();
Jeremy Bullock bfe861
    m_dpiFld->hide();
Jeremy Bullock bfe861
    m_dpiLabel->hide();
Jeremy Bullock bfe861
  } else {
Jeremy Bullock bfe861
    m_widthFld->setDecimals(4);
Jeremy Bullock bfe861
    m_heightFld->setDecimals(4);
Jeremy Bullock bfe861
    m_resXFld->show();
Jeremy Bullock bfe861
    m_resYFld->show();
Jeremy Bullock bfe861
    m_resXLabel->show();
Jeremy Bullock bfe861
    m_resTextLabel->show();
Jeremy Bullock bfe861
    m_dpiFld->show();
Jeremy Bullock bfe861
    m_dpiLabel->show();
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  m_fpsFld->setValue(fps);
Jeremy Bullock bfe861
  m_unitsCB->setCurrentText(Preferences::instance()->getCameraUnits());
Jeremy Bullock bfe861
  m_dpi  = cameraRes.lx / cameraSize.lx;
Jeremy Bullock bfe861
  m_xRes = cameraRes.lx;
Jeremy Bullock bfe861
  m_yRes = cameraRes.ly;
Jeremy Bullock bfe861
  m_resXFld->setValue(m_xRes);
Jeremy Bullock bfe861
  m_resYFld->setValue(m_yRes);
Jeremy Bullock bfe861
  m_resXFld->setDecimals(0);
Jeremy Bullock bfe861
  m_resYFld->setDecimals(0);
Jeremy Bullock bfe861
  m_dpiFld->setValue(m_dpi);
Jeremy Bullock bfe861
justburner be2476
  int boxWidth  = m_scenesTab->width();
justburner be2476
  int boxHeight = m_scenesTab->height();
justburner be2476
  m_scenesTab->setFixedWidth(boxWidth);
Jeremy Bullock bfe861
  m_projectBox->setFixedWidth(boxWidth);
Jeremy Bullock bfe861
  m_recentBox->setMinimumHeight(boxHeight);
Jeremy Bullock 4c6224
  m_autoSaveOnCB->setChecked(Preferences::instance()->isAutosaveEnabled());
Jeremy Bullock 4c6224
  m_autoSaveTimeFld->setEnabled(m_autoSaveOnCB->isChecked());
Jeremy Bullock 4c6224
  m_autoSaveTimeFld->setValue(Preferences::instance()->getAutosavePeriod());
Jeremy Bullock bfe861
  // update recent scenes
Jeremy Bullock bfe861
  // clear items if they exist first
Jeremy Bullock ce17cf
  refreshRecentScenes();
justburner be2476
  refreshExistingScenes();
Jeremy Bullock ce17cf
  // center window
Jeremy Bullock 6095dd
  int currentScreen =
Jeremy Bullock 6095dd
      QApplication::desktop()->screenNumber(TApp::instance()->getMainWindow());
Jeremy Bullock 6095dd
  QPoint activeMonitorCenter =
Jeremy Bullock 6095dd
      QApplication::desktop()->availableGeometry(currentScreen).center();
Jeremy Bullock 6095dd
  QPoint thisPopupCenter         = this->rect().center();
Jeremy Bullock 6095dd
  QPoint centeredOnActiveMonitor = activeMonitorCenter - thisPopupCenter;
Jeremy Bullock 6095dd
  this->move(centeredOnActiveMonitor);
Jeremy Bullock ce17cf
}
Jeremy Bullock bfe861
Jeremy Bullock ce17cf
//-----------------------------------------------------------------------------
Jeremy Bullock ce17cf
Jeremy Bullock ce17cf
void StartupPopup::refreshRecentScenes() {
Jeremy Bullock ce17cf
  removeAll(m_recentSceneLay);
Jeremy Bullock bfe861
Jeremy Bullock ce17cf
  m_sceneNames.clear();
Jeremy Bullock bfe861
  m_sceneNames = RecentFiles::instance()->getFilesNameList(RecentFiles::Scene);
Jeremy Bullock ce17cf
  m_recentNamesLabels.clear();
Jeremy Bullock bfe861
  m_recentNamesLabels = QVector<startuplabel *="">(m_sceneNames.count());</startuplabel>
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  if (m_sceneNames.count() <= 0) {
Jeremy Bullock bfe861
    m_recentSceneLay->addWidget(new QLabel(tr("No Recent Scenes"), this), 1,
Jeremy Bullock bfe861
                                Qt::AlignTop);
Jeremy Bullock bfe861
  } else {
Jeremy Bullock bfe861
    int i = 0;
Jeremy Bullock bfe861
    for (QString name : m_sceneNames) {
Jeremy Bullock bfe861
      if (i > 9) break;  // box can hold 10 scenes
manongjohn 7ab0b7
      QString fileName =
manongjohn 7ab0b7
          name.remove(0, name.indexOf(" ") + 1);  // remove "#. " prefix
manongjohn 7ab0b7
      QString projectName = RecentFiles::instance()->getFileProject(fileName);
manongjohn 7ab0b7
      QString justName = QString::fromStdString(TFilePath(fileName).getName()) +
manongjohn 7ab0b7
                         (projectName != "-" ? " [" + projectName + "]" : "");
Jeremy Bullock bfe861
      m_recentNamesLabels[i] = new StartupLabel(justName, this, i);
manongjohn 7ab0b7
      m_recentNamesLabels[i]->setToolTip(fileName);
Jeremy Bullock ce17cf
      m_recentSceneLay->addWidget(m_recentNamesLabels[i], 0, Qt::AlignTop);
Jeremy Bullock bfe861
      i++;
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
  bool ret = true;
Jeremy Bullock ce17cf
  for (int i = 0;
Jeremy Bullock ce17cf
       i < m_recentNamesLabels.count() && i < RECENT_SCENES_MAX_COUNT; i++) {
Jeremy Bullock bfe861
    ret = ret && connect(m_recentNamesLabels[i], SIGNAL(wasClicked(int)), this,
Jeremy Bullock bfe861
                         SLOT(onRecentSceneClicked(int)));
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
  assert(ret);
Jeremy Bullock ce17cf
  m_recentSceneLay->addStretch(1);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
justburner be2476
void StartupPopup::refreshExistingScenes() {
justburner be2476
  m_existingList->clearScenes();
justburner be2476
  TFilePathSet files, allFiles;
justburner be2476
justburner be2476
  TFilePath scenesFolder =
justburner be2476
      TProjectManager::instance()->getCurrentProject()->getScenesPath();
justburner be2476
justburner be2476
  QFileInfo scenesFolderInfo(toQString(scenesFolder));
justburner be2476
  if (scenesFolderInfo.isSymLink()) {
justburner be2476
    scenesFolder = TFilePath(scenesFolderInfo.symLinkTarget());
justburner be2476
  }
justburner be2476
justburner be2476
  TFileStatus scenesFolderStatus(scenesFolder);
justburner be2476
  if (scenesFolderStatus.doesExist() && scenesFolderStatus.isDirectory() &&
justburner be2476
      scenesFolderStatus.isReadable()) {
justburner be2476
    try {
justburner be2476
      TSystem::readDirectory(files, allFiles, scenesFolder);
justburner be2476
    } catch (...) {
justburner be2476
    }
justburner be2476
  }
justburner be2476
justburner be2476
  TFilePathSet::iterator it;
justburner be2476
  for (it = files.begin(); it != files.end(); ++it) {
justburner be2476
    if (it->getType() == "tnz") {
justburner be2476
      QString name = QString::fromStdWString(it->getWideName());
justburner be2476
      QString path = it->getQString();
justburner be2476
      m_existingList->addScene(name, path);
justburner be2476
    }
justburner be2476
  }
justburner be2476
  m_existingList->addScene(tr("New Scene"), ":");
justburner be2476
justburner be2476
  QList<qstring> recentFiles =</qstring>
justburner be2476
      RecentFiles::instance()->getFilesNameList(RecentFiles::Scene);
justburner be2476
  m_existingList->findFirstScenePath(recentFiles);
justburner be2476
}
justburner be2476
justburner be2476
//-----------------------------------------------------------------------------
justburner be2476
justburner be2476
void StartupPopup::onExistingSceneClicked(int index) {
justburner be2476
  QString path = m_existingList->getPath(index);
justburner be2476
  if (path == ":") {
justburner be2476
    m_scenesTab->setCurrentIndex(1);
justburner be2476
    m_nameFld->setFocus();
justburner be2476
  } else {
justburner be2476
    IoCmd::loadScene(TFilePath(path.toStdWString()), true, true);
justburner be2476
    hide();
justburner be2476
  }
justburner be2476
}
justburner be2476
justburner be2476
//-----------------------------------------------------------------------------
justburner be2476
Jeremy Bullock bfe861
void StartupPopup::onCreateButton() {
Jeremy Bullock bfe861
  if (m_nameFld->text().trimmed() == "") {
Jeremy Bullock bfe861
    DVGui::warning(tr("The name cannot be empty."));
Jeremy Bullock bfe861
    m_nameFld->setFocus();
Jeremy Bullock bfe861
    return;
Jeremy Bullock bfe861
  }
Jeremy Bullock 6f3194
  if (m_widthFld->getValue() <= 0) {
Jeremy Bullock 6f3194
    DVGui::warning(tr("The width must be greater than zero."));
Jeremy Bullock bfe861
    m_widthFld->setFocus();
Jeremy Bullock bfe861
    return;
Jeremy Bullock bfe861
  }
Jeremy Bullock 6f3194
  if (m_heightFld->getValue() <= 0) {
Jeremy Bullock 6f3194
    DVGui::warning(tr("The height must be greater than zero."));
Jeremy Bullock bfe861
    m_heightFld->setFocus();
Jeremy Bullock bfe861
    return;
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
  if (m_fpsFld->getValue() < 1) {
Jeremy Bullock bfe861
    DVGui::warning(tr("The frame rate must be 1 or more."));
Jeremy Bullock bfe861
    m_fpsFld->setFocus();
Jeremy Bullock bfe861
    return;
Jeremy Bullock bfe861
  }
shun-iwasawa 62d519
shun-iwasawa 62d519
  TFilePath scenePath =
shun-iwasawa 62d519
      TFilePath(m_pathFld->getPath()) +
shun-iwasawa 62d519
      TFilePath(m_nameFld->text().trimmed().toStdWString() + L".tnz");
shun-iwasawa 62d519
shun-iwasawa 62d519
  if (!TSystem::doesExistFileOrLevel(TFilePath(m_pathFld->getPath()))) {
shun-iwasawa 62d519
    QString question;
shun-iwasawa 62d519
    question = QObject::tr(
shun-iwasawa 62d519
        "The chosen folder path does not exist."
shun-iwasawa 62d519
        "\nDo you want to create it?");
shun-iwasawa 62d519
    int ret = DVGui::MsgBox(question, QObject::tr("Create"),
shun-iwasawa 62d519
                            QObject::tr("Cancel"), 0);
shun-iwasawa 62d519
    if (ret == 0 || ret == 2) {
shun-iwasawa 62d519
      m_pathFld->setFocus();
shun-iwasawa 62d519
      return;
shun-iwasawa 62d519
    }
shun-iwasawa 62d519
    if (!TSystem::touchParentDir(scenePath)) {
shun-iwasawa 62d519
      DVGui::warning(tr("Failed to create the folder."));
shun-iwasawa 62d519
      m_pathFld->setFocus();
shun-iwasawa 62d519
      return;
shun-iwasawa 62d519
    }
shun-iwasawa 62d519
  } else if (TSystem::doesExistFileOrLevel(scenePath)) {
Jeremy Bullock bfe861
    QString question;
Jeremy Bullock bfe861
    question = QObject::tr(
Jeremy Bullock bfe861
        "The file name already exists."
Jeremy Bullock bfe861
        "\nDo you want to overwrite it?");
Jeremy Bullock bfe861
    int ret = DVGui::MsgBox(question, QObject::tr("Yes"), QObject::tr("No"), 0);
Jeremy Bullock bfe861
    if (ret == 0 || ret == 2) {
Jeremy Bullock bfe861
      // no (or closed message box window)
Jeremy Bullock bfe861
      return;
Jeremy Bullock bfe861
      ;
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
  CommandManager::instance()->execute(MI_NewScene);
shun-iwasawa 62d519
  TApp::instance()->getCurrentScene()->getScene()->setScenePath(scenePath);
Jeremy Bullock bfe861
  TDimensionD size =
Jeremy Bullock bfe861
      TDimensionD(m_widthFld->getValue(), m_heightFld->getValue());
Jeremy Bullock bfe861
  TDimension res = TDimension(m_xRes, m_yRes);
Jeremy Bullock bfe861
  double fps     = m_fpsFld->getValue();
Jeremy Bullock bfe861
  TApp::instance()
Jeremy Bullock bfe861
      ->getCurrentScene()
Jeremy Bullock bfe861
      ->getScene()
Jeremy Bullock bfe861
      ->getProperties()
Jeremy Bullock bfe861
      ->getOutputProperties()
Jeremy Bullock bfe861
      ->setFrameRate(fps);
Jeremy Bullock bfe861
  TApp::instance()->getCurrentScene()->getScene()->getCurrentCamera()->setSize(
Jeremy Bullock bfe861
      size);
Jeremy Bullock bfe861
  TApp::instance()->getCurrentScene()->getScene()->getCurrentCamera()->setRes(
Jeremy Bullock bfe861
      res);
shun-iwasawa 4faf2e
  // save the scene right away
shun-iwasawa 4faf2e
  IoCmd::saveScene();
Jeremy Bullock bfe861
  // this makes sure the scene viewers update to the right fps
Jeremy Bullock bfe861
  TApp::instance()->getCurrentScene()->notifySceneSwitched();
shun-iwasawa 4faf2e
  TApp::instance()->getCurrentScene()->notifyNameSceneChange();
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  hide();
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::updateProjectCB() {
Jeremy Bullock bfe861
  m_updating = true;
Jeremy Bullock bfe861
  m_projectPaths.clear();
Jeremy Bullock bfe861
  m_projectsCB->clear();
Jeremy Bullock bfe861
manongjohn 312940
  TProjectManager *pm = TProjectManager::instance();
manongjohn 312940
justburner be2476
  TFilePath sandboxFl = pm->getSandboxProjectFolder();
justburner be2476
  TFilePath sandboxFp = sandboxFl + "sandbox_otprj.xml";
Jeremy Bullock bfe861
  m_projectPaths.push_back(sandboxFp);
Jeremy Bullock bfe861
  m_projectsCB->addItem("sandbox");
Jeremy Bullock bfe861
justburner be2476
  int idx = 0;
justburner be2476
  m_projectsCB->setItemData(idx++, sandboxFl.getQString(), Qt::ToolTipRole);
justburner be2476
Jeremy Bullock bfe861
  std::vector<tfilepath> prjRoots;</tfilepath>
manongjohn 312940
  pm->getProjectRoots(prjRoots);
Jeremy Bullock bfe861
  for (int i = 0; i < prjRoots.size(); i++) {
Jeremy Bullock bfe861
    TFilePathSet fps;
Jeremy Bullock bfe861
    TSystem::readDirectory_Dir_ReadExe(fps, prjRoots[i]);
Jeremy Bullock bfe861
Jeremy Bullock bfe861
    TFilePathSet::iterator it;
Jeremy Bullock bfe861
    for (it = fps.begin(); it != fps.end(); ++it) {
Jeremy Bullock bfe861
      TFilePath fp(*it);
manongjohn 312940
      if (pm->isProject(fp)) {
manongjohn 312940
        m_projectPaths.push_back(pm->projectFolderToProjectPath(fp));
manongjohn 312940
        TFilePath prjFile = pm->getProjectPathByProjectFolder(fp);
manongjohn 312940
        m_projectsCB->addItem(QString::fromStdString(prjFile.getName()));
justburner be2476
        m_projectsCB->setItemData(idx++, fp.getQString(), Qt::ToolTipRole);
Jeremy Bullock bfe861
      }
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
  }
manongjohn 8138f8
  // Add in project of current project if outside known Project root folders
manongjohn 312940
  TProjectP currentProject   = pm->getCurrentProject();
manongjohn 8138f8
  TFilePath currentProjectFP = currentProject->getProjectPath();
manongjohn 8138f8
  if (m_projectPaths.indexOf(currentProjectFP) == -1) {
manongjohn 8138f8
    m_projectPaths.push_back(currentProjectFP);
manongjohn 8138f8
    m_projectsCB->addItem(
manongjohn 8138f8
        QString::fromStdString(currentProject->getName().getName()));
manongjohn 8138f8
  }
Jeremy Bullock bfe861
  int i;
Jeremy Bullock bfe861
  for (i = 0; i < m_projectPaths.size(); i++) {
manongjohn 312940
    if (pm->getCurrentProjectPath() == m_projectPaths[i]) {
Jeremy Bullock bfe861
      m_projectsCB->setCurrentIndex(i);
Jeremy Bullock bfe861
      break;
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
  }
justburner be2476
justburner be2476
  m_projectsCB->setToolTip(currentProject->getProjectFolder().getQString());
Jeremy Bullock bfe861
  m_pathFld->setPath(TApp::instance()
Jeremy Bullock bfe861
                         ->getCurrentScene()
Jeremy Bullock bfe861
                         ->getScene()
Jeremy Bullock bfe861
                         ->getProject()
Jeremy Bullock bfe861
                         ->getScenesPath()
Jeremy Bullock bfe861
                         .getQString());
Jeremy Bullock bfe861
  m_updating = false;
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::onProjectChanged(int index) {
Jeremy Bullock bfe861
  if (m_updating) return;
Jeremy Bullock bfe861
  TFilePath projectFp = m_projectPaths[index];
Jeremy Bullock bfe861
manongjohn da6d38
  TProjectManager *pm = TProjectManager::instance();
manongjohn da6d38
  pm->setCurrentProjectPath(projectFp);
manongjohn da6d38
manongjohn da6d38
  TProjectP currentProject = pm->getCurrentProject();
manongjohn da6d38
manongjohn da6d38
  // In case the project file was upgraded to current version, save it now
manongjohn da6d38
  if (currentProject->getProjectPath() != projectFp) {
manongjohn da6d38
    m_projectPaths[index] = currentProject->getProjectPath();
manongjohn da6d38
    currentProject->save();
manongjohn da6d38
  }
Jeremy Bullock bfe861
justburner be2476
  setupProjectChange();
justburner be2476
}
justburner be2476
justburner be2476
//-----------------------------------------------------------------------------
justburner be2476
justburner be2476
void StartupPopup::setupProjectChange() {
justburner be2476
  TProjectManager *pm      = TProjectManager::instance();
justburner be2476
  TProjectP currentProject = pm->getCurrentProject();
justburner be2476
Jeremy Bullock bfe861
  IoCmd::newScene();
Jeremy Bullock bfe861
  m_pathFld->setPath(TApp::instance()
Jeremy Bullock bfe861
                         ->getCurrentScene()
Jeremy Bullock bfe861
                         ->getScene()
Jeremy Bullock bfe861
                         ->getProject()
Jeremy Bullock bfe861
                         ->getScenesPath()
Jeremy Bullock bfe861
                         .getQString());
Jeremy Bullock bfe861
  m_fpsFld->setValue(TApp::instance()
Jeremy Bullock bfe861
                         ->getCurrentScene()
Jeremy Bullock bfe861
                         ->getScene()
Jeremy Bullock bfe861
                         ->getProperties()
Jeremy Bullock bfe861
                         ->getOutputProperties()
Jeremy Bullock bfe861
                         ->getFrameRate());
Jeremy Bullock bfe861
  TDimension res = TApp::instance()
Jeremy Bullock bfe861
                       ->getCurrentScene()
Jeremy Bullock bfe861
                       ->getScene()
Jeremy Bullock bfe861
                       ->getCurrentCamera()
Jeremy Bullock bfe861
                       ->getRes();
Jeremy Bullock bfe861
  m_xRes = res.lx;
Jeremy Bullock bfe861
  m_yRes = res.ly;
Jeremy Bullock bfe861
  m_resXFld->setValue(m_xRes);
Jeremy Bullock bfe861
  m_resYFld->setValue(m_yRes);
Jeremy Bullock bfe861
  TDimensionD size = TApp::instance()
Jeremy Bullock bfe861
                         ->getCurrentScene()
Jeremy Bullock bfe861
                         ->getScene()
Jeremy Bullock bfe861
                         ->getCurrentCamera()
Jeremy Bullock bfe861
                         ->getSize();
Jeremy Bullock bfe861
  m_widthFld->setValue(size.lx);
Jeremy Bullock bfe861
  m_heightFld->setValue(size.ly);
Jeremy Bullock bfe861
  m_dpi = m_xRes / size.lx;
Jeremy Bullock bfe861
  m_dpiFld->setValue(m_dpi);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::loadPresetList() {
Jeremy Bullock bfe861
  m_presetCombo->clear();
Jeremy Bullock bfe861
  m_presetCombo->addItem("...");
Jeremy Bullock bfe861
  m_presetListFile = ToonzFolder::getReslistPath(false).getQString();
Jeremy Bullock bfe861
  QFile file(m_presetListFile);
Jeremy Bullock bfe861
  if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
Jeremy Bullock bfe861
    QTextStream in(&file);
Jeremy Bullock bfe861
    while (!in.atEnd()) {
Jeremy Bullock bfe861
      QString line = in.readLine().trimmed();
Jeremy Bullock bfe861
      if (line != "") m_presetCombo->addItem(line);
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
  m_presetCombo->setCurrentIndex(0);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::savePresetList() {
Jeremy Bullock bfe861
  QFile file(m_presetListFile);
Jeremy Bullock bfe861
  if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return;
Jeremy Bullock bfe861
  QTextStream out(&file);
Jeremy Bullock bfe861
  int n = m_presetCombo->count();
Jeremy Bullock bfe861
  for (int i = 1; i < n; i++) out << m_presetCombo->itemText(i) << "\n";
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::addPreset() {
Jeremy Bullock bfe861
  int xRes  = (int)(m_widthFld->getValue() * m_dpi);
Jeremy Bullock bfe861
  int yRes  = (int)(m_heightFld->getValue() * m_dpi);
Jeremy Bullock bfe861
  double lx = m_widthFld->getValue();
Jeremy Bullock bfe861
  double ly = m_heightFld->getValue();
Jeremy Bullock bfe861
  double ar = m_widthFld->getValue() / m_heightFld->getValue();
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  QString presetString;
Jeremy Bullock bfe861
  presetString = QString::number(xRes) + "x" + QString::number(yRes) + ", " +
Jeremy Bullock bfe861
                 removeZeros(QString::number(lx)) + "x" +
Jeremy Bullock bfe861
                 removeZeros(QString::number(ly)) + ", " +
Jeremy Bullock bfe861
                 aspectRatioValueToString(ar);
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  bool ok;
Jeremy Bullock bfe861
  QString qs;
Jeremy Bullock bfe861
  while (1) {
Jeremy Bullock bfe861
    qs = DVGui::getText(tr("Preset name"),
Jeremy Bullock bfe861
                        tr("Enter the name for %1").arg(presetString), "", &ok);
Jeremy Bullock bfe861
Jeremy Bullock bfe861
    if (!ok) return;
Jeremy Bullock bfe861
Jeremy Bullock bfe861
    if (qs.indexOf(",") != -1)
Jeremy Bullock bfe861
      QMessageBox::warning(this, tr("Error : Preset Name is Invalid"),
Jeremy Bullock bfe861
                           tr("The preset name must not use ','(comma)."));
Jeremy Bullock bfe861
    else
Jeremy Bullock bfe861
      break;
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  int oldn = m_presetCombo->count();
Jeremy Bullock bfe861
  m_presetCombo->addItem(qs + "," + presetString);
Jeremy Bullock bfe861
  int newn = m_presetCombo->count();
Jeremy Bullock bfe861
  m_presetCombo->blockSignals(true);
Jeremy Bullock bfe861
  m_presetCombo->setCurrentIndex(m_presetCombo->count() - 1);
Jeremy Bullock bfe861
  m_presetCombo->blockSignals(false);
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  savePresetList();
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::removePreset() {
Jeremy Bullock bfe861
  int index = m_presetCombo->currentIndex();
Jeremy Bullock bfe861
  if (index <= 0) return;
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  // confirmation dialog
Jeremy Bullock bfe861
  int ret = DVGui::MsgBox(QObject::tr("Deleting \"%1\".\nAre you sure?")
Jeremy Bullock bfe861
                              .arg(m_presetCombo->currentText()),
Jeremy Bullock bfe861
                          QObject::tr("Delete"), QObject::tr("Cancel"));
Jeremy Bullock bfe861
  if (ret == 0 || ret == 2) return;
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  m_presetCombo->removeItem(index);
Jeremy Bullock bfe861
  m_presetCombo->setCurrentIndex(0);
Jeremy Bullock bfe861
  savePresetList();
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::onPresetSelected(const QString &str) {
Jeremy Bullock bfe861
  if (str == custom || str.isEmpty()) return;
Jeremy Bullock bfe861
  QString name, arStr;
Jeremy Bullock bfe861
  int xres = 0, yres = 0;
Jeremy Bullock bfe861
  double fx = -1.0, fy = -1.0;
Jeremy Bullock bfe861
  QString xoffset = "", yoffset = "";
Jeremy Bullock bfe861
  double ar;
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  if (parsePresetString(str, name, xres, yres, fx, fy, xoffset, yoffset, ar,
Jeremy Bullock bfe861
                        false)) {
Jeremy Bullock bfe861
    m_xRes = xres;
Jeremy Bullock bfe861
    m_yRes = yres;
Jeremy Bullock bfe861
    // The current solution is to preserve the DPI so that scenes are less
Jeremy Bullock bfe861
    // likely to become incompatible with pixels only mode in the future
Jeremy Bullock bfe861
    // Commented below is the default behavior of the camera settings widget
Jeremy Bullock bfe861
    // m_widthFld->setValue(m_heightFld->getValue() * ar);
Jeremy Bullock bfe861
    // m_dpiFld->setValue(m_xRes / m_widthFld->getValue());
Jeremy Bullock bfe861
Jeremy Bullock bfe861
    // here is the system that preserves dpi
Jeremy Bullock bfe861
    m_widthFld->setValue((double)xres / (double)m_dpi);
Jeremy Bullock bfe861
    m_heightFld->setValue((double)yres / (double)m_dpi);
Jeremy Bullock bfe861
    if (Preferences::instance()->getPixelsOnly()) {
Jeremy Bullock bfe861
      m_widthFld->setValue((double)xres / Stage::standardDpi);
Jeremy Bullock bfe861
      m_heightFld->setValue((double)yres / Stage::standardDpi);
Jeremy Bullock bfe861
      m_dpiFld->setValue(Stage::standardDpi);
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
    m_resXFld->setValue(m_xRes);
Jeremy Bullock bfe861
    m_resYFld->setValue(m_yRes);
Jeremy Bullock bfe861
  } else {
Jeremy Bullock bfe861
    QMessageBox::warning(
Jeremy Bullock bfe861
        this, tr("Bad camera preset"),
Jeremy Bullock bfe861
        tr("'%1' doesn't seem to be a well formed camera preset. \n"
Jeremy Bullock bfe861
           "Possibly the preset file has been corrupted")
Jeremy Bullock bfe861
            .arg(str));
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//--------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
bool StartupPopup::parsePresetString(const QString &str, QString &name,
Jeremy Bullock bfe861
                                     int &xres, int &yres, double &fx,
Jeremy Bullock bfe861
                                     double &fy, QString &xoffset,
Jeremy Bullock bfe861
                                     QString &yoffset, double &ar,
Jeremy Bullock bfe861
                                     bool forCleanup) {
Jeremy Bullock bfe861
  /*
Jeremy Bullock bfe861
  parsing preset string with QString::split().
Jeremy Bullock bfe861
  !NOTE! fx/fy (camera size in inch) and xoffset/yoffset (camera offset used in
Jeremy Bullock bfe861
  cleanup camera) are optional,
Jeremy Bullock bfe861
  in order to keep compatibility with default (Harlequin's) reslist.txt
Jeremy Bullock bfe861
  */
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  QStringList tokens = str.split(",", QString::SkipEmptyParts);
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  if (!(tokens.count() == 3 ||
Jeremy Bullock bfe861
        (!forCleanup && tokens.count() == 4) || /*- with "fx x fy" token -*/
Jeremy Bullock bfe861
        (forCleanup &&
Jeremy Bullock bfe861
         tokens.count() ==
Jeremy Bullock bfe861
             6))) /*- with "fx x fy", xoffset and yoffset tokens -*/
Jeremy Bullock bfe861
    return false;
Jeremy Bullock bfe861
  /*- name -*/
Jeremy Bullock bfe861
  name = tokens[0];
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  /*- xres, yres  (like:  1024x768) -*/
Jeremy Bullock bfe861
  QStringList values = tokens[1].split("x");
Jeremy Bullock bfe861
  if (values.count() != 2) return false;
Jeremy Bullock bfe861
  bool ok;
Jeremy Bullock bfe861
  xres = values[0].toInt(&ok);
Jeremy Bullock bfe861
  if (!ok) return false;
Jeremy Bullock bfe861
  yres = values[1].toInt(&ok);
Jeremy Bullock bfe861
  if (!ok) return false;
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  if (tokens.count() >= 4) {
Jeremy Bullock bfe861
    /*- fx, fy -*/
Jeremy Bullock bfe861
    values = tokens[2].split("x");
Jeremy Bullock bfe861
    if (values.count() != 2) return false;
Jeremy Bullock bfe861
    fx = values[0].toDouble(&ok);
Jeremy Bullock bfe861
    if (!ok) return false;
Jeremy Bullock bfe861
    fy = values[1].toDouble(&ok);
Jeremy Bullock bfe861
    if (!ok) return false;
Jeremy Bullock bfe861
Jeremy Bullock bfe861
    /*- xoffset, yoffset -*/
Jeremy Bullock bfe861
    if (forCleanup) {
Jeremy Bullock bfe861
      xoffset = tokens[3];
Jeremy Bullock bfe861
      yoffset = tokens[4];
Jeremy Bullock bfe861
      /*- remove single space -*/
Jeremy Bullock bfe861
      if (xoffset.startsWith(' ')) xoffset.remove(0, 1);
Jeremy Bullock bfe861
      if (yoffset.startsWith(' ')) yoffset.remove(0, 1);
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  /*- AR -*/
Jeremy Bullock bfe861
  ar = aspectRatioStringToValue(tokens.last());
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  return true;
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
double StartupPopup::aspectRatioStringToValue(const QString &s) {
Jeremy Bullock bfe861
  if (s == "") {
Jeremy Bullock bfe861
    return 1;
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
  int i = s.indexOf("/");
Jeremy Bullock bfe861
  if (i <= 0 || i + 1 >= s.length()) return s.toDouble();
shun-iwasawa 62d519
  int num = s.left(i).toInt();
shun-iwasawa 62d519
  int den = s.mid(i + 1).toInt();
Jeremy Bullock bfe861
  if (den <= 0) den = 1;
Jeremy Bullock bfe861
  return (double)num / (double)den;
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
// A/R : value => string (e.g. '4/3' or '1.23')
Jeremy Bullock bfe861
QString StartupPopup::aspectRatioValueToString(double value, int width,
Jeremy Bullock bfe861
                                               int height) {
Jeremy Bullock bfe861
  double v = value;
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  if (width != 0 && height != 0) {
Jeremy Bullock bfe861
    if (areAlmostEqual(value, (double)width / (double)height, 1e-3))
Jeremy Bullock bfe861
      return QString("%1/%2").arg(width).arg(height);
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  double iv = tround(v);
Jeremy Bullock bfe861
  if (fabs(iv - v) > 0.01) {
Jeremy Bullock bfe861
    for (int d = 2; d < 20; d++) {
Jeremy Bullock bfe861
      int n = tround(v * d);
Jeremy Bullock bfe861
      if (fabs(n - v * d) <= 0.01)
Jeremy Bullock bfe861
        return QString::number(n) + "/" + QString::number(d);
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
    return QString::number(value, 'f', 5);
Jeremy Bullock bfe861
  } else {
Jeremy Bullock bfe861
    return QString::number((int)iv);
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::onNewProjectButtonPressed() {
Jeremy Bullock bfe861
  CommandManager::instance()->execute(MI_NewProject);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
justburner be2476
void StartupPopup::onOpenProjectButtonPressed() {
justburner be2476
  TProjectManager *pm = TProjectManager::instance();
justburner be2476
justburner be2476
  FileField::BrowserPopupController *bpc =
justburner be2476
      FileField::getBrowserPopupController();
justburner be2476
  if (!bpc) return;
justburner be2476
justburner be2476
  QString directory;
justburner be2476
  TFilePath cfp = pm->getCurrentProject()->getProjectFolder();
justburner be2476
  bpc->openPopup(QStringList(), true, cfp.getQString(), this);
justburner be2476
  if (bpc->isExecute()) directory = bpc->getPath(false);
justburner be2476
justburner be2476
  if (!directory.isEmpty()) {
justburner be2476
    TFilePath fp(directory);
justburner be2476
    TFilePath pfp = pm->projectFolderToProjectPath(fp);
justburner be2476
justburner be2476
    if (TSystem::doesExistFileOrLevel(pfp))
justburner be2476
      pm->setCurrentProjectPath(pfp);
justburner be2476
    else
justburner be2476
      pm->setCurrentProjectPath(fp);
justburner be2476
justburner be2476
    setupProjectChange();
justburner be2476
    updateProjectCB();
justburner be2476
    refreshExistingScenes();
justburner be2476
  }
justburner be2476
}
justburner be2476
justburner be2476
//-----------------------------------------------------------------------------
justburner be2476
justburner be2476
void StartupPopup::onExploreProjectButtonPressed() {
justburner be2476
  TProjectManager *pm = TProjectManager::instance();
konero 7bed16
  TFilePath cfp       = pm->getCurrentProject()->getProjectFolder();
justburner be2476
justburner be2476
  QDesktopServices::openUrl(QUrl("file:///" + cfp.getQString()));
justburner be2476
}
justburner be2476
justburner be2476
//-----------------------------------------------------------------------------
justburner be2476
Jeremy Bullock bfe861
void StartupPopup::onSceneChanged() {
Jeremy Bullock bfe861
  // close the box if a recent scene has been selected
Jeremy Bullock bfe861
  if (!TApp::instance()->getCurrentScene()->getScene()->isUntitled()) {
Jeremy Bullock bfe861
    hide();
Jeremy Bullock bfe861
  } else {
Jeremy Bullock bfe861
    updateProjectCB();
justburner be2476
    refreshExistingScenes();
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::onDpiChanged() {
Jeremy Bullock bfe861
  if (Preferences::instance()->getPixelsOnly()) {
Jeremy Bullock bfe861
    m_dpi = Stage::standardDpi;
Jeremy Bullock bfe861
    m_dpiFld->setValue(Stage::standardDpi);
Jeremy Bullock bfe861
    updateResolution();
Jeremy Bullock bfe861
  } else {
Jeremy Bullock bfe861
    m_dpi = m_dpiFld->getValue();
Jeremy Bullock bfe861
    updateResolution();
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::onLoadSceneButtonPressed() {
Jeremy Bullock bfe861
  CommandManager::instance()->execute(MI_LoadScene);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::onRecentSceneClicked(int index) {
Jeremy Bullock bfe861
  if (index < 0) return;
Jeremy Bullock bfe861
  QString path =
Jeremy Bullock bfe861
      RecentFiles::instance()->getFilePath(index, RecentFiles::Scene);
Jeremy Bullock ce17cf
  if (!TSystem::doesExistFileOrLevel(TFilePath(path.toStdWString()))) {
Jeremy Bullock ce17cf
    RecentFiles::instance()->removeFilePath(index, RecentFiles::Scene);
Jeremy Bullock ce17cf
    RecentFiles::instance()->refreshRecentFilesMenu(RecentFiles::Scene);
Jeremy Bullock ce17cf
    for (int i = 0;
Jeremy Bullock ce17cf
         i < m_recentNamesLabels.count() && i < RECENT_SCENES_MAX_COUNT; i++) {
Jeremy Bullock ce17cf
      disconnect(m_recentNamesLabels[i]);
Jeremy Bullock ce17cf
    }
Jeremy Bullock ce17cf
    QString msg = QObject::tr("The selected scene could not be found.");
Jeremy Bullock ce17cf
    DVGui::warning(msg);
Jeremy Bullock ce17cf
    refreshRecentScenes();
Jeremy Bullock ce17cf
  } else {
manongjohn ca8bef
    if (RecentFiles::instance()->getFileProject(index) != "-") {
manongjohn ca8bef
      QString projectName = RecentFiles::instance()->getFileProject(index);
manongjohn ca8bef
      int projectIndex    = m_projectsCB->findText(projectName);
manongjohn ca8bef
      if (projectIndex >= 0) {
manongjohn ca8bef
        TFilePath projectFp = m_projectPaths[projectIndex];
manongjohn ca8bef
        TProjectManager::instance()->setCurrentProjectPath(projectFp);
manongjohn ca8bef
      }
manongjohn ca8bef
    }
manongjohn ca8bef
    IoCmd::loadScene(TFilePath(path.toStdWString()), false, true);
manongjohn ad26eb
    QString origProjectName = RecentFiles::instance()->getFileProject(index);
manongjohn ad26eb
    QString projectName     = QString::fromStdString(TApp::instance()
konero 7bed16
                                                         ->getCurrentScene()
konero 7bed16
                                                         ->getScene()
konero 7bed16
                                                         ->getProject()
konero 7bed16
                                                         ->getName()
konero 7bed16
                                                         .getName());
manongjohn ad26eb
    if (origProjectName == "-" || origProjectName != projectName) {
manongjohn 7ab0b7
      QString fileName =
manongjohn 7ab0b7
          RecentFiles::instance()->getFilePath(index, RecentFiles::Scene);
manongjohn 7ab0b7
      RecentFiles::instance()->removeFilePath(index, RecentFiles::Scene);
manongjohn 7ab0b7
      RecentFiles::instance()->addFilePath(fileName, RecentFiles::Scene,
manongjohn 7ab0b7
                                           projectName);
manongjohn 7ab0b7
    } else
manongjohn 7ab0b7
      RecentFiles::instance()->moveFilePath(index, 0, RecentFiles::Scene);
Jeremy Bullock ce17cf
    RecentFiles::instance()->refreshRecentFilesMenu(RecentFiles::Scene);
Jeremy Bullock ce17cf
    hide();
Jeremy Bullock ce17cf
  }
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::onCameraUnitChanged(int index) {
Jeremy Bullock bfe861
  Preferences *pref = Preferences::instance();
Jeremy Bullock bfe861
  QStringList type;
shun-iwasawa 8fb291
  // preference value should not be translated
shun-iwasawa 8fb291
  type << "pixel"
shun-iwasawa 8fb291
       << "cm"
shun-iwasawa 8fb291
       << "mm"
shun-iwasawa 8fb291
       << "inch"
shun-iwasawa 8fb291
       << "field";
Jeremy Bullock bfe861
Jeremy Bullock bfe861
  double width  = m_widthFld->getValue();
Jeremy Bullock bfe861
  double height = m_heightFld->getValue();
Jeremy Bullock bfe861
  if (index != 0) {
shun-iwasawa 8fb291
    pref->setValue(pixelsOnly, false);
shun-iwasawa 8fb291
    pref->setValue(cameraUnits, type[index]);
Jeremy Bullock bfe861
    m_widthFld->setDecimals(4);
Jeremy Bullock bfe861
    m_heightFld->setDecimals(4);
Jeremy Bullock bfe861
    m_resTextLabel->show();
Jeremy Bullock bfe861
    m_resXFld->show();
Jeremy Bullock bfe861
    m_resYFld->show();
Jeremy Bullock bfe861
    m_resXLabel->show();
Jeremy Bullock bfe861
    m_dpiFld->show();
Jeremy Bullock bfe861
    m_dpiLabel->show();
Jeremy Bullock bfe861
    m_widthFld->setMeasure("camera.lx");
Jeremy Bullock bfe861
    m_heightFld->setMeasure("camera.ly");
Jeremy Bullock bfe861
    m_widthFld->setValue(width);
Jeremy Bullock bfe861
    m_heightFld->setValue(height);
Jeremy Bullock bfe861
  } else {
shun-iwasawa 8fb291
    pref->setValue(pixelsOnly, true);
shun-iwasawa 8fb291
    pref->setValue(linearUnits, "pixel");
shun-iwasawa 8fb291
    pref->setValue(cameraUnits, "pixel");
Jeremy Bullock bfe861
    m_widthFld->setDecimals(0);
Jeremy Bullock bfe861
    m_heightFld->setDecimals(0);
Jeremy Bullock bfe861
    m_resTextLabel->hide();
Jeremy Bullock bfe861
    m_resXFld->hide();
Jeremy Bullock bfe861
    m_resYFld->hide();
Jeremy Bullock bfe861
    m_resXLabel->hide();
Jeremy Bullock bfe861
    m_dpiFld->hide();
Jeremy Bullock bfe861
    m_dpiLabel->hide();
Jeremy Bullock bfe861
    m_dpiFld->setValue(Stage::standardDpi);
Jeremy Bullock bfe861
    m_widthFld->setMeasure("camera.lx");
Jeremy Bullock bfe861
    m_heightFld->setMeasure("camera.ly");
Jeremy Bullock bfe861
    m_widthFld->setValue(m_xRes / Stage::standardDpi);
Jeremy Bullock bfe861
    m_heightFld->setValue(m_yRes / Stage::standardDpi);
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::onShowAtStartChanged(int index) {
shun-iwasawa 8fb291
  Preferences::instance()->setValue(startupPopupEnabled, index == Qt::Checked);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock 4c6224
void StartupPopup::onAutoSaveOnChanged(int index) {
shun-iwasawa 8fb291
  Preferences::instance()->setValue(autosaveEnabled, index == Qt::Checked);
Jeremy Bullock 4c6224
  m_autoSaveTimeFld->setEnabled(index);
Jeremy Bullock 4c6224
}
Jeremy Bullock 4c6224
Jeremy Bullock 4c6224
//-----------------------------------------------------------------------------
Jeremy Bullock 4c6224
Jeremy Bullock 4c6224
void StartupPopup::onAutoSaveTimeChanged() {
shun-iwasawa 8fb291
  Preferences::instance()->setValue(autosavePeriod,
shun-iwasawa 8fb291
                                    m_autoSaveTimeFld->getValue());
Jeremy Bullock 4c6224
}
Jeremy Bullock 4c6224
Jeremy Bullock 4c6224
//-----------------------------------------------------------------------------
Jeremy Bullock 4c6224
Jeremy Bullock bfe861
void StartupPopup::updateResolution() {
Jeremy Bullock bfe861
  if (Preferences::instance()->getPixelsOnly()) {
Jeremy Bullock bfe861
    if (m_dpiFld->getValue() != Stage::standardDpi) {
Jeremy Bullock bfe861
      m_dpiFld->setValue(Stage::standardDpi);
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
    m_xRes = m_widthFld->getValue() * Stage::standardDpi;
Jeremy Bullock bfe861
    m_yRes = m_heightFld->getValue() * Stage::standardDpi;
Jeremy Bullock bfe861
    m_resXFld->setValue(m_xRes);
Jeremy Bullock bfe861
    m_resYFld->setValue(m_yRes);
Jeremy Bullock bfe861
  } else {
Jeremy Bullock bfe861
    m_xRes = m_widthFld->getValue() * m_dpi;
Jeremy Bullock bfe861
    m_yRes = m_heightFld->getValue() * m_dpi;
Jeremy Bullock bfe861
    m_resXFld->setValue(m_xRes);
Jeremy Bullock bfe861
    m_resYFld->setValue(m_yRes);
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
  m_presetCombo->setCurrentIndex(0);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupPopup::updateSize() {
Jeremy Bullock bfe861
  m_xRes = m_resXFld->getValue();
Jeremy Bullock bfe861
  m_yRes = m_resYFld->getValue();
Jeremy Bullock bfe861
  if (Preferences::instance()->getPixelsOnly()) {
Jeremy Bullock bfe861
    if (m_dpiFld->getValue() != Stage::standardDpi) {
Jeremy Bullock bfe861
      m_dpiFld->setValue(Stage::standardDpi);
Jeremy Bullock bfe861
    }
Jeremy Bullock bfe861
    m_widthFld->setValue((double)m_xRes / Stage::standardDpi);
Jeremy Bullock bfe861
    m_heightFld->setValue((double)m_yRes / Stage::standardDpi);
Jeremy Bullock bfe861
  } else {
Jeremy Bullock bfe861
    m_widthFld->setValue((double)m_xRes / m_dpi);
Jeremy Bullock bfe861
    m_heightFld->setValue((double)m_yRes / m_dpi);
Jeremy Bullock bfe861
  }
Jeremy Bullock bfe861
  m_presetCombo->setCurrentIndex(0);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
//-----------------------------------------------------------------------------
Jeremy Bullock bfe861
Jeremy Bullock bfe861
StartupLabel::StartupLabel(const QString &text, QWidget *parent, int index)
Jeremy Bullock bfe861
    : QLabel(parent), m_index(index) {
Jeremy Bullock bfe861
  setText(text);
shun_iwasawa b81709
  setObjectName("StartupLabel");
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
StartupLabel::~StartupLabel() {}
Jeremy Bullock bfe861
Jeremy Bullock bfe861
void StartupLabel::mousePressEvent(QMouseEvent *event) {
Jeremy Bullock bfe861
  m_text              = text();
Jeremy Bullock bfe861
  std::string strText = m_text.toStdString();
Jeremy Bullock bfe861
  emit wasClicked(m_index);
Jeremy Bullock bfe861
}
Jeremy Bullock bfe861
justburner be2476
//-----------------------------------------------------------------------------
justburner be2476
justburner be2476
StartupScenesList::StartupScenesList(QWidget *parent, const QSize &iconSize)
justburner be2476
    : QListWidget(parent), m_iconSize(iconSize) {
justburner be2476
  setObjectName("StartupScenesList");
justburner be2476
justburner be2476
  setMovement(QListWidget::Static);
justburner be2476
  setFlow(QListView::Flow::LeftToRight);
justburner be2476
  setViewMode(QListWidget::IconMode);
justburner be2476
  setIconSize(m_iconSize);
justburner be2476
  setUniformItemSizes(true);
justburner be2476
  setMouseTracking(true);
justburner be2476
  horizontalScrollBar()->setCursor(Qt::ArrowCursor);
justburner be2476
  verticalScrollBar()->setCursor(Qt::ArrowCursor);
justburner be2476
justburner be2476
  bool ret = connect(this, SIGNAL(itemClicked(QListWidgetItem *)), this,
justburner be2476
                     SLOT(onItemClicked(QListWidgetItem *)));
justburner be2476
  assert(ret);
justburner be2476
justburner be2476
  clear();
justburner be2476
}
justburner be2476
justburner be2476
StartupScenesList::~StartupScenesList() {}
justburner be2476
justburner be2476
QPixmap StartupScenesList::createScenePreview(const QString &name,
justburner be2476
                                              const TFilePath &fp) {
justburner be2476
  TFilePath iconPath = ToonzScene::getIconPath(fp);
justburner be2476
  if (TFileStatus(iconPath).doesExist()) {
justburner be2476
    QPixmap scenePreview(iconPath.getQString());
justburner be2476
    if (!scenePreview.isNull()) {
justburner be2476
      QPixmap pixmap(m_iconSize);
justburner be2476
      pixmap.fill(Qt::transparent);
justburner be2476
      QPainter painter(&pixmap);
justburner be2476
      QPixmap scaledPixmap =
justburner be2476
          scenePreview.scaled(m_iconSize, Qt::AspectRatioMode::KeepAspectRatio);
justburner be2476
      painter.drawPixmap((m_iconSize.width() - scaledPixmap.width()) / 2,
justburner be2476
                         (m_iconSize.height() - scaledPixmap.height()) / 2,
justburner be2476
                         scaledPixmap);
justburner be2476
      QPen pen(Qt::black);
justburner be2476
      pen.setStyle(Qt::DotLine);
justburner be2476
      painter.setPen(pen);
justburner be2476
      painter.drawRect((m_iconSize.width() - scaledPixmap.width()) / 2,
justburner be2476
                       (m_iconSize.height() - scaledPixmap.height()) / 2,
konero 7bed16
                       scaledPixmap.width() - 1, scaledPixmap.height() - 1);
justburner be2476
      return pixmap;
justburner be2476
    }
justburner be2476
  }
justburner be2476
  QPixmap pixmap(m_iconSize);
justburner be2476
  pixmap.fill(Qt::white);
justburner be2476
  return pixmap;
justburner be2476
}
justburner be2476
konero 7bed16
void StartupScenesList::clearScenes() { clear(); }
justburner be2476
justburner be2476
void StartupScenesList::addScene(const QString &name, const QString &path) {
justburner be2476
  QPixmap pixmap;
justburner be2476
  if (path == ":")
konero 7bed16
    pixmap = generateIconPixmap("new_scene", qreal(1.0), m_iconSize,
konero 7bed16
                                Qt::KeepAspectRatio);
justburner be2476
  else
justburner be2476
    pixmap = createScenePreview(name, TFilePath(path));
justburner be2476
  QIcon icon(pixmap);
justburner be2476
justburner be2476
  QListWidgetItem *lw = new QListWidgetItem(name);
justburner be2476
  lw->setData(Qt::UserRole, path);
justburner be2476
  lw->setToolTip(name);
justburner be2476
justburner be2476
  lw->setIcon(icon);
justburner be2476
  addItem(lw);
justburner be2476
}
justburner be2476
justburner be2476
void StartupScenesList::findFirstScenePath(const QList<qstring> paths) {</qstring>
justburner be2476
  int scenes = count();
justburner be2476
  if (scenes == 0) {
justburner be2476
    clearSelection();
justburner be2476
    return;
justburner be2476
  }
justburner be2476
justburner be2476
  QList<qstring> scenesPaths;</qstring>
justburner be2476
  for (int i = 0; i < scenes; ++i) {
justburner be2476
    scenesPaths.append(item(i)->data(Qt::UserRole).toString());
justburner be2476
  }
justburner be2476
justburner be2476
  int sceneIndex = 0;
justburner be2476
  int pathsCount = paths.count();
justburner be2476
  for (int i = 0; i < pathsCount; ++i) {
justburner be2476
    QString filename =
justburner be2476
        RecentFiles::instance()->getFilePath(i, RecentFiles::Scene);
justburner be2476
    int index = scenesPaths.indexOf(filename);
justburner be2476
    if (index >= 0) {
justburner be2476
      sceneIndex = index;
justburner be2476
      break;
justburner be2476
    }
justburner be2476
  }
justburner be2476
justburner be2476
  setCurrentItem(item(sceneIndex));
justburner be2476
  clearSelection();
justburner be2476
}
justburner be2476
justburner be2476
void StartupScenesList::mouseMoveEvent(QMouseEvent *event) {
justburner be2476
  QListWidgetItem *it = itemAt(event->pos());
justburner be2476
  if (it)
justburner be2476
    setCursor(Qt::PointingHandCursor);
justburner be2476
  else
justburner be2476
    unsetCursor();
justburner be2476
  setCurrentItem(it);
justburner be2476
}
justburner be2476
justburner be2476
void StartupScenesList::leaveEvent(QEvent *event) {
justburner be2476
  unsetCursor();
justburner be2476
  clearSelection();
justburner be2476
}
justburner be2476
justburner be2476
void StartupScenesList::onItemClicked(QListWidgetItem *item) {
justburner be2476
  emit itemClicked(row(item));
justburner be2476
}
justburner be2476
Jeremy Bullock bfe861
OpenPopupCommandHandler<startuppopup> openStartupPopup(MI_StartupPopup);</startuppopup>