Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "psdsettingspopup.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Tnz6 includes
Toshihiro Shimizu 890ddd
#include "tapp.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzQt includes
Toshihiro Shimizu 890ddd
#include "toonzqt/checkbox.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzLib includes
Toshihiro Shimizu 890ddd
#include "toonz/toonzscene.h"
Toshihiro Shimizu 890ddd
#include "toonz/tscenehandle.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tconvert.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qpushbutton></qpushbutton>
Toshihiro Shimizu 890ddd
#include <qlabel></qlabel>
Toshihiro Shimizu 890ddd
#include <qcombobox></qcombobox>
Toshihiro Shimizu 890ddd
#include <qradiobutton></qradiobutton>
Toshihiro Shimizu 890ddd
#include <qsize></qsize>
Toshihiro Shimizu 890ddd
#include <qstringlist></qstringlist>
Toshihiro Shimizu 890ddd
#include <qtreewidgetitem></qtreewidgetitem>
Toshihiro Shimizu 890ddd
#include <qmainwindow></qmainwindow>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
using namespace DVGui;
Toshihiro Shimizu 890ddd
#define REF_LAYER_BY_NAME
Toshihiro Shimizu 890ddd
shun-iwasawa 199e29
QStringList modesDescription;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Per adesso non appare
Shinya Kitaoka 120a6e
// Costruisce la stringa delle info della psd da caricare che comparirà nel
Shinya Kitaoka 120a6e
// popup:
Toshihiro Shimizu 890ddd
// Path, Dimensioni, numero di livelli, ecc..
Campbell Barton ccd505
static void doPSDInfo(TFilePath psdpath, QTreeWidget *psdTree) {
Shinya Kitaoka 120a6e
  psdTree->clear();
Shinya Kitaoka 120a6e
  try {
Shinya Kitaoka 120a6e
    TPSDReader *psdreader = new TPSDReader(psdpath);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    TPSDHeaderInfo header = psdreader->getPSDHeaderInfo();
Shinya Kitaoka 120a6e
    int width             = header.cols;
Shinya Kitaoka 120a6e
    int height            = header.rows;
Shinya Kitaoka 120a6e
    int depth             = header.depth;
Shinya Kitaoka 120a6e
    int channels          = header.channels;
Shinya Kitaoka 120a6e
    int layersCount       = header.layersCount;
Shinya Kitaoka 120a6e
    QString filename =
Shinya Kitaoka 120a6e
        QString::fromStdString(psdpath.getName() + psdpath.getDottedType());
Shinya Kitaoka 120a6e
    QString parentDir =
Shinya Kitaoka 120a6e
        QString::fromStdWString(psdpath.getParentDir().getWideString());
Shinya Kitaoka 120a6e
    QString dimension = QString::number(width) + "x" + QString::number(height);
Shinya Kitaoka 120a6e
    QList<qtreewidgetitem *=""> items;</qtreewidgetitem>
Shinya Kitaoka 120a6e
    items.append(new QTreeWidgetItem(
Shinya Kitaoka 120a6e
        (QTreeWidget *)0, QStringList(QString("Filename: %1").arg(filename))));
Shinya Kitaoka 120a6e
    items.append(new QTreeWidgetItem(
Shinya Kitaoka 120a6e
        (QTreeWidget *)0,
Shinya Kitaoka 120a6e
        QStringList(QString("Parent dir: %1").arg(parentDir))));
Shinya Kitaoka 120a6e
    items.append(new QTreeWidgetItem(
Shinya Kitaoka 120a6e
        (QTreeWidget *)0,
Shinya Kitaoka 120a6e
        QStringList(QString("Dimension: %1").arg(dimension))));
Shinya Kitaoka 120a6e
    items.append(new QTreeWidgetItem(
Shinya Kitaoka 120a6e
        (QTreeWidget *)0,
Shinya Kitaoka 120a6e
        QStringList(QString("Depth: %1").arg(QString::number(depth)))));
Shinya Kitaoka 120a6e
    items.append(new QTreeWidgetItem(
Shinya Kitaoka 120a6e
        (QTreeWidget *)0,
Shinya Kitaoka 120a6e
        QStringList(QString("Channels: %1").arg(QString::number(channels)))));
Shinya Kitaoka 120a6e
    QTreeWidgetItem *layersItem = new QTreeWidgetItem((QTreeWidget *)0);
Shinya Kitaoka 120a6e
    int count                   = 0;
Shinya Kitaoka 120a6e
    QList<qtreewidgetitem *=""> layersItemChildren;</qtreewidgetitem>
Shinya Kitaoka 120a6e
    layersItemChildren.append(layersItem);
Shinya Kitaoka 120a6e
    int scavenge = 0;
Shinya Kitaoka 120a6e
    for (int i = layersCount - 1; i >= 0; i--) {
Shinya Kitaoka 120a6e
      TPSDLayerInfo *li = psdreader->getLayerInfo(i);
Shinya Kitaoka 120a6e
      int width         = li->right - li->left;
Shinya Kitaoka 120a6e
      int height        = li->bottom - li->top;
Shinya Kitaoka 120a6e
      QString layerName = li->name;
Shinya Kitaoka 120a6e
      if (strcmp(li->name, "") == 0 ||
Shinya Kitaoka 120a6e
          strcmp(li->name, "") == 0) {
Shinya Kitaoka 120a6e
        scavenge--;
Shinya Kitaoka 120a6e
      } else if (li->section > 0 && li->section <= 3) {
Shinya Kitaoka 120a6e
        QTreeWidgetItem *child = new QTreeWidgetItem((QTreeWidget *)0);
Shinya Kitaoka 120a6e
        child->setText(0, layerName);
Shinya Kitaoka 120a6e
        layersItemChildren[scavenge]->addChild(child);
Shinya Kitaoka 120a6e
        layersItemChildren.append(child);
Shinya Kitaoka 120a6e
        scavenge++;
Shinya Kitaoka 120a6e
      } else if (width > 0 && height > 0) {
Shinya Kitaoka 120a6e
        if (scavenge >= 0) {
Shinya Kitaoka 120a6e
          layersItemChildren[scavenge]->addChild(new QTreeWidgetItem(
Shinya Kitaoka 120a6e
              (QTreeWidget *)0, QStringList(QString("%1").arg(layerName))));
Shinya Kitaoka 120a6e
          count++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    QString layerItemText =
Shinya Kitaoka 120a6e
        "Layers: " +
Shinya Kitaoka 120a6e
        QString::number(count);  //+" ("+QString::number(layersCount)+")";
Shinya Kitaoka 120a6e
    layersItem->setText(0, layerItemText);
Shinya Kitaoka 120a6e
    items.append(layersItem);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    psdTree->insertTopLevelItems(0, items);
Shinya Kitaoka 120a6e
  } catch (TImageException &e) {
Shinya Kitaoka 120a6e
    error(QString::fromStdString(::to_string(e.getMessage())));
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// PsdSettingsPopup
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
PsdSettingsPopup::PsdSettingsPopup()
Shinya Kitaoka 120a6e
    : Dialog(TApp::instance()->getMainWindow(), true, true, "PsdSettings")
Shinya Kitaoka 120a6e
    , m_mode(FLAT) {
Shinya Kitaoka 120a6e
  bool ret = true;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  setWindowTitle(tr("Load PSD File"));
Shinya Kitaoka 120a6e
shun-iwasawa 199e29
  if (modesDescription.isEmpty()) {
shun-iwasawa 199e29
    modesDescription
shun-iwasawa 199e29
        << tr("Flatten visible document layers into a single image. Layer "
shun-iwasawa 199e29
              "styles are maintained.")
shun-iwasawa 199e29
        << tr("Load document layers as frames into a single xsheet column.")
shun-iwasawa 199e29
        << tr("Load document layers as xhseet columns.");
shun-iwasawa 199e29
  }
shun-iwasawa 199e29
Shinya Kitaoka 120a6e
  m_filename = new QLabel(tr(""));
Shinya Kitaoka 120a6e
  m_filename->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
  m_filename->setFixedHeight(WidgetHeight);
Shinya Kitaoka 120a6e
  m_parentDir = new QLabel(tr(""));
Shinya Kitaoka 120a6e
  m_parentDir->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
Shinya Kitaoka 120a6e
  m_parentDir->setFixedHeight(WidgetHeight);
Shinya Kitaoka fd19c4
  QLabel *nmLbl = new QLabel(tr("Name:"));
shun_iwasawa b102ca
  nmLbl->setObjectName("TitleTxtLabel");
Shinya Kitaoka fd19c4
  QLabel *ptLbl = new QLabel(tr("Path:"));
shun_iwasawa b102ca
  ptLbl->setObjectName("TitleTxtLabel");
Shinya Kitaoka 120a6e
  QGridLayout *grid = new QGridLayout();
Shinya Kitaoka 120a6e
  grid->setColumnMinimumWidth(0, 65);
Shinya Kitaoka 120a6e
  grid->addWidget(nmLbl, 0, 0, Qt::AlignRight);
Shinya Kitaoka 120a6e
  grid->addWidget(m_filename, 0, 1, Qt::AlignLeft);
Shinya Kitaoka 120a6e
  grid->addWidget(ptLbl, 1, 0, Qt::AlignRight);
Shinya Kitaoka 120a6e
  grid->addWidget(m_parentDir, 1, 1, Qt::AlignLeft);
Shinya Kitaoka 120a6e
  QHBoxLayout *layinfo = new QHBoxLayout;
Shinya Kitaoka 120a6e
  layinfo->addLayout(grid);
Shinya Kitaoka 120a6e
  layinfo->addStretch();
Shinya Kitaoka 120a6e
  addLayout(layinfo, false);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  /*
Shinya Kitaoka 120a6e
          m_psdTree = new QTreeWidget();
Shinya Kitaoka 120a6e
          m_psdTree->setIconSize(QSize(21,17));
Shinya Kitaoka 120a6e
          m_psdTree->setColumnCount(1);
Shinya Kitaoka 120a6e
          m_psdTree->setMaximumHeight(7*WidgetHeight);
Shinya Kitaoka 120a6e
          m_psdTree->setHeaderLabel("PSD Info");
Shinya Kitaoka 120a6e
          addWidget(m_psdTree);			 */
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  addSeparator();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_loadMode = new QComboBox();
shun-iwasawa 199e29
  m_loadMode->addItem(tr("Single Image"), QString("Single Image"));
shun-iwasawa 199e29
  m_loadMode->addItem(tr("Frames"), QString("Frames"));
shun-iwasawa 199e29
  m_loadMode->addItem(tr("Columns"), QString("Columns"));
Shinya Kitaoka 120a6e
  m_loadMode->setFixedHeight(WidgetHeight);
Shinya Kitaoka 120a6e
  m_loadMode->setFixedWidth(120);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_modeDescription = new QTextEdit(modesDescription[0]);
Shinya Kitaoka 120a6e
  m_modeDescription->setFixedHeight(40);
Shinya Kitaoka 120a6e
  m_modeDescription->setMinimumWidth(250);
Shinya Kitaoka 120a6e
  m_modeDescription->setReadOnly(true);
Shinya Kitaoka 120a6e
  m_createSubXSheet = new CheckBox(tr("Expose in a Sub-xsheet"));
Shinya Kitaoka 120a6e
  m_createSubXSheet->setMaximumHeight(WidgetHeight);
Shinya Kitaoka 120a6e
  m_createSubXSheet->setEnabled(false);
Shinya Kitaoka 120a6e
shun_iwasawa a4bcc9
  m_levelNameType = new QComboBox();
shun_iwasawa a4bcc9
  QStringList types;
shun_iwasawa a4bcc9
  types << tr("FileName#LayerName") << tr("LayerName");
shun_iwasawa a4bcc9
  m_levelNameType->addItems(types);
shun_iwasawa a4bcc9
  m_levelNameType->setFixedHeight(WidgetHeight);
shun_iwasawa a4bcc9
  m_levelNameType->setEnabled(false);
shun_iwasawa a4bcc9
Shinya Kitaoka 120a6e
  QLabel *modeLbl = new QLabel(tr("Load As:"));
shun_iwasawa b102ca
  modeLbl->setObjectName("TitleTxtLabel");
Shinya Kitaoka 120a6e
shun_iwasawa a4bcc9
  QLabel *levelNameLbl = new QLabel(tr("Level Name:"));
shun_iwasawa a4bcc9
  levelNameLbl->setObjectName("TitleTxtLabel");
shun_iwasawa a4bcc9
Shinya Kitaoka 120a6e
  QGridLayout *gridMode = new QGridLayout();
Shinya Kitaoka 120a6e
  gridMode->setColumnMinimumWidth(0, 65);
Shinya Kitaoka 120a6e
  gridMode->setMargin(0);
Shinya Kitaoka 120a6e
  gridMode->addWidget(modeLbl, 0, 0, Qt::AlignRight);
Shinya Kitaoka 120a6e
  gridMode->addWidget(m_loadMode, 0, 1, Qt::AlignLeft);
Shinya Kitaoka 120a6e
  gridMode->addWidget(m_modeDescription, 1, 1, Qt::AlignLeft);
Shinya Kitaoka 120a6e
  gridMode->addWidget(m_createSubXSheet, 2, 1, Qt::AlignLeft);
shun_iwasawa a4bcc9
  gridMode->addWidget(levelNameLbl, 3, 0, Qt::AlignRight);
shun_iwasawa a4bcc9
  gridMode->addWidget(m_levelNameType, 3, 1, Qt::AlignLeft);
Shinya Kitaoka 120a6e
  QHBoxLayout *modeLayout = new QHBoxLayout;
Shinya Kitaoka 120a6e
  modeLayout->addLayout(gridMode);
Shinya Kitaoka 120a6e
  modeLayout->addStretch();
Shinya Kitaoka 120a6e
  addLayout(modeLayout, false);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  addSeparator(tr("Group Option"));
Shinya Kitaoka 120a6e
  m_psdFolderOptions = new QButtonGroup(this);
Shinya Kitaoka 120a6e
  QList<qstring> folderOptionsList;</qstring>
Shinya Kitaoka 120a6e
  folderOptionsList << tr("Ignore groups");
Shinya Kitaoka 120a6e
  folderOptionsList << tr(
Shinya Kitaoka 120a6e
      "Expose layers in a group as columns in a sub-xsheet");
Shinya Kitaoka 120a6e
  folderOptionsList << tr("Expose layers in a group as frames in a column");
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QGridLayout *gridButton = new QGridLayout();
Shinya Kitaoka 120a6e
  gridButton->setColumnMinimumWidth(0, 70);
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < folderOptionsList.count(); i++) {
Shinya Kitaoka 120a6e
    QRadioButton *radioButton = new QRadioButton(folderOptionsList.at(i));
Shinya Kitaoka 120a6e
    if (i == 0) radioButton->setChecked(true);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    radioButton->setMaximumHeight(WidgetHeight);
Shinya Kitaoka 120a6e
    if (m_mode != COLUMNS) {
Shinya Kitaoka 120a6e
      radioButton->setEnabled(false);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    m_psdFolderOptions->addButton(radioButton);
Shinya Kitaoka 120a6e
    m_psdFolderOptions->setId(radioButton, i);
Shinya Kitaoka 120a6e
    gridButton->addWidget(radioButton, i, 1);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  QHBoxLayout *folderOptLayout = new QHBoxLayout;
Shinya Kitaoka 120a6e
  folderOptLayout->addLayout(gridButton);
Shinya Kitaoka 120a6e
  folderOptLayout->addStretch();
Shinya Kitaoka 120a6e
  addLayout(folderOptLayout, false);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ret = ret && connect(m_loadMode, SIGNAL(currentIndexChanged(const QString &)),
shun-iwasawa 199e29
                       SLOT(onModeChanged()));
Shinya Kitaoka 120a6e
  assert(ret);
Shinya Kitaoka 120a6e
  ret = ret && connect(m_psdFolderOptions, SIGNAL(buttonClicked(int)), this,
Shinya Kitaoka 120a6e
                       SLOT(onFolderOptionChange(int)));
Shinya Kitaoka 120a6e
  assert(ret);
shun-iwasawa 199e29
  m_okBtn     = new QPushButton(tr("OK"), this);
shun-iwasawa 199e29
  m_cancelBtn = new QPushButton(tr("Cancel"), this);
Shinya Kitaoka 120a6e
  connect(m_okBtn, SIGNAL(clicked()), this, SLOT(onOk()));
Shinya Kitaoka 120a6e
  connect(m_cancelBtn, SIGNAL(clicked()), this, SLOT(close()));
Shinya Kitaoka 120a6e
  addButtonBarWidget(m_okBtn, m_cancelBtn);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void PsdSettingsPopup::setPath(const TFilePath &path) {
Shinya Kitaoka 120a6e
  m_path = path;
Shinya Kitaoka 120a6e
  // doPSDInfo(path,m_psdTree);
Shinya Kitaoka 120a6e
  QString filename =
Shinya Kitaoka 120a6e
      QString::fromStdString(path.getName());  //+psdpath.getDottedType());
Shinya Kitaoka 120a6e
  QString pathLbl =
Shinya Kitaoka 120a6e
      QString::fromStdWString(path.getParentDir().getWideString());
Shinya Kitaoka 120a6e
  m_filename->setText(filename);
Shinya Kitaoka 120a6e
  m_parentDir->setText(pathLbl);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void PsdSettingsPopup::onOk() {
Shinya Kitaoka 120a6e
  doPsdParser();
Shinya Kitaoka 120a6e
  accept();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
bool PsdSettingsPopup::subxsheet() {
Shinya Kitaoka 120a6e
  return (m_createSubXSheet->isEnabled() && m_createSubXSheet->isChecked());
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
shun_iwasawa a4bcc9
int PsdSettingsPopup::levelNameType() {
shun_iwasawa a4bcc9
  return m_levelNameType->currentIndex();
shun_iwasawa a4bcc9
}
shun_iwasawa a4bcc9
shun-iwasawa 199e29
void PsdSettingsPopup::onModeChanged() {
shun-iwasawa 199e29
  QString mode = m_loadMode->currentData().toString();
Shinya Kitaoka 120a6e
  if (mode == "Single Image") {
Shinya Kitaoka 120a6e
    m_mode = FLAT;
Shinya Kitaoka 120a6e
    m_modeDescription->setText(modesDescription[0]);
Shinya Kitaoka 120a6e
    m_createSubXSheet->setEnabled(false);
shun_iwasawa a4bcc9
    m_levelNameType->setEnabled(false);
Shinya Kitaoka 120a6e
    QList<qabstractbutton *=""> buttons = m_psdFolderOptions->buttons();</qabstractbutton>
Shinya Kitaoka 120a6e
    while (!buttons.isEmpty()) {
Shinya Kitaoka 120a6e
      QAbstractButton *btn = buttons.takeFirst();
Shinya Kitaoka 120a6e
      btn->setEnabled(false);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  } else if (mode == "Frames") {
Shinya Kitaoka 120a6e
    m_mode = FRAMES;
Shinya Kitaoka 120a6e
    m_modeDescription->setText(modesDescription[1]);
Shinya Kitaoka 120a6e
    m_createSubXSheet->setEnabled(false);
shun_iwasawa a4bcc9
    m_levelNameType->setEnabled(false);
Shinya Kitaoka 120a6e
    QList<qabstractbutton *=""> buttons = m_psdFolderOptions->buttons();</qabstractbutton>
Shinya Kitaoka 120a6e
    while (!buttons.isEmpty()) {
Shinya Kitaoka 120a6e
      QAbstractButton *btn = buttons.takeFirst();
Shinya Kitaoka 120a6e
      btn->setEnabled(false);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  } else if (mode == "Columns") {
Shinya Kitaoka 120a6e
    if (m_psdFolderOptions->checkedId() == 2 ||
Shinya Kitaoka 120a6e
        m_psdFolderOptions->checkedId() == 1)
Shinya Kitaoka 120a6e
      m_mode = FOLDER;
Shinya Kitaoka 120a6e
    else
Shinya Kitaoka 120a6e
      m_mode = COLUMNS;
Shinya Kitaoka 120a6e
    m_modeDescription->setText(modesDescription[2]);
Shinya Kitaoka 120a6e
    m_createSubXSheet->setEnabled(true);
shun_iwasawa a4bcc9
    m_levelNameType->setEnabled(true);
Shinya Kitaoka 120a6e
    QList<qabstractbutton *=""> buttons = m_psdFolderOptions->buttons();</qabstractbutton>
Shinya Kitaoka 120a6e
    while (!buttons.isEmpty()) {
Shinya Kitaoka 120a6e
      QAbstractButton *btn = buttons.takeFirst();
Shinya Kitaoka 120a6e
      btn->setEnabled(true);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    assert(false);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void PsdSettingsPopup::onFolderOptionChange(int id) {
Shinya Kitaoka 120a6e
  switch (id) {
Shinya Kitaoka 120a6e
  case 0:  // Ignore Folder
Shinya Kitaoka 120a6e
    m_mode = COLUMNS;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 1:  // Fodler as SUBXSHEET
Shinya Kitaoka 120a6e
    m_mode = FOLDER;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 2:  // Frames
Shinya Kitaoka 120a6e
    m_mode = FOLDER;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  default:
Shinya Kitaoka 120a6e
    assert(0);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Shinya Kitaoka 120a6e
int PsdSettingsPopup::getFolderOption() {
Shinya Kitaoka 120a6e
  return m_psdFolderOptions->checkedId();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void PsdSettingsPopup::doPsdParser() {
Shinya Kitaoka 120a6e
  TFilePath psdpath =
Shinya Kitaoka 120a6e
      TApp::instance()->getCurrentScene()->getScene()->decodeFilePath(m_path);
Shinya Kitaoka 120a6e
  std::string mode = "";
Shinya Kitaoka 120a6e
  switch (m_mode) {
Shinya Kitaoka 120a6e
  case FLAT: {
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  case FRAMES: {
Shinya Kitaoka 120a6e
    mode = "#frames";
Shinya Kitaoka 120a6e
    std::string name =
Shinya Kitaoka 120a6e
        psdpath.getName() + "#1" + mode + psdpath.getDottedType();
Shinya Kitaoka 120a6e
    psdpath = psdpath.getParentDir() + TFilePath(name);
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  case COLUMNS: {
Shinya Kitaoka 120a6e
    std::string name = psdpath.getName() + "#1" + psdpath.getDottedType();
Shinya Kitaoka 120a6e
    psdpath          = psdpath.getParentDir() + TFilePath(name);
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  case FOLDER: {
Shinya Kitaoka 120a6e
    mode = "#group";
Shinya Kitaoka 120a6e
    std::string name =
Shinya Kitaoka 120a6e
        psdpath.getName() + "#1" + mode + psdpath.getDottedType();
Shinya Kitaoka 120a6e
    psdpath = psdpath.getParentDir() + TFilePath(name);
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  default: {
Shinya Kitaoka 120a6e
    assert(false);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  try {
Shinya Kitaoka 120a6e
    m_psdparser = new TPSDParser(psdpath);
Shinya Kitaoka 120a6e
    m_psdLevelPaths.clear();
Shinya Kitaoka 120a6e
    for (int i = 0; i < m_psdparser->getLevelsCount(); i++) {
Shinya Kitaoka 120a6e
      int layerId      = m_psdparser->getLevelId(i);
Shinya Kitaoka 120a6e
      std::string name = m_path.getName();
Shinya Kitaoka 120a6e
      if (layerId > 0 && m_mode != FRAMES) {
shun_iwasawa a4bcc9
        if (m_levelNameType->currentIndex() == 0)  // FileName#LevelName
shun_iwasawa a4bcc9
          name += "#" + std::to_string(layerId);
shun_iwasawa a4bcc9
        else  // LevelName
shun_iwasawa a4bcc9
          name += "##" + std::to_string(layerId);
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      if (mode != "") name += mode;
Shinya Kitaoka 120a6e
      name += m_path.getDottedType();
Shinya Kitaoka 120a6e
      TFilePath psdpath = m_path.getParentDir() + TFilePath(name);
Shinya Kitaoka 120a6e
      m_psdLevelPaths.push_back(psdpath);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  } catch (TImageException &e) {
Shinya Kitaoka 120a6e
    error(QString::fromStdString(::to_string(e.getMessage())));
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Shinya Kitaoka 120a6e
TFilePath PsdSettingsPopup::getPsdPath(int levelIndex) {
Shinya Kitaoka 120a6e
  assert(levelIndex >= 0 && levelIndex < m_psdLevelPaths.size());
Shinya Kitaoka 120a6e
  return m_psdLevelPaths[levelIndex];
Toshihiro Shimizu 890ddd
}
Shinya Kitaoka 120a6e
TFilePath PsdSettingsPopup::getPsdFramePath(int levelIndex, int frameIndex) {
Shinya Kitaoka 120a6e
  int layerId      = m_psdparser->getLevelId(levelIndex);
Shinya Kitaoka 120a6e
  int frameId      = m_psdparser->getFrameId(layerId, frameIndex);
Shinya Kitaoka 120a6e
  std::string name = m_path.getName();
Shinya Kitaoka 120a6e
  if (frameId > 0) name += "#" + std::to_string(frameId);
Shinya Kitaoka 120a6e
  name += m_path.getDottedType();
Shinya Kitaoka 120a6e
  TFilePath psdpath = TApp::instance()
Shinya Kitaoka 120a6e
                          ->getCurrentScene()
Shinya Kitaoka 120a6e
                          ->getScene()
Shinya Kitaoka 120a6e
                          ->decodeFilePath(m_path)
Shinya Kitaoka 120a6e
                          .getParentDir() +
Shinya Kitaoka 120a6e
                      TFilePath(name);
Shinya Kitaoka 120a6e
  return psdpath;
Toshihiro Shimizu 890ddd
}
Shinya Kitaoka 120a6e
int PsdSettingsPopup::getFramesCount(int levelIndex) {
Shinya Kitaoka 120a6e
  // assert(levelIndex>=0 && levelIndex
Shinya Kitaoka 120a6e
  // return m_levels[levelIndex].framesCount;
Shinya Kitaoka 120a6e
  int levelId = m_psdparser->getLevelId(levelIndex);
Shinya Kitaoka 120a6e
  return m_psdparser->getFramesCount(levelId);
Toshihiro Shimizu 890ddd
}
Shinya Kitaoka 120a6e
bool PsdSettingsPopup::isFolder(int levelIndex) {
Shinya Kitaoka 120a6e
  // assert(levelIndex>=0 && levelIndex
Shinya Kitaoka 120a6e
  // return m_levels[levelIndex].isFolder;
Shinya Kitaoka 120a6e
  return m_psdparser->isFolder(levelIndex);
Toshihiro Shimizu 890ddd
}
Shinya Kitaoka 120a6e
bool PsdSettingsPopup::isSubFolder(int levelIndex, int frameIndex) {
Shinya Kitaoka 120a6e
  return m_psdparser->isSubFolder(levelIndex, frameIndex);
Toshihiro Shimizu 890ddd
}
Shinya Kitaoka 120a6e
int PsdSettingsPopup::getSubfolderLevelIndex(int psdLevelIndex,
Shinya Kitaoka 120a6e
                                             int frameIndex) {
Shinya Kitaoka 120a6e
  int levelId        = m_psdparser->getLevelId(psdLevelIndex);
Shinya Kitaoka 120a6e
  int frameId        = m_psdparser->getFrameId(levelId, frameIndex);
Shinya Kitaoka 120a6e
  int subFolderIndex = m_psdparser->getLevelIndexById(frameId);
Shinya Kitaoka 120a6e
  return subFolderIndex;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
// OpenPopupCommandHandler<psdsettingspopup></psdsettingspopup>
Shinya Kitaoka 120a6e
// openPsdSettingsPopup(MI_SceneSettings);