Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "savepresetpopup.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Tnz6 includes
Toshihiro Shimizu 890ddd
#include "menubarcommandids.h"
Toshihiro Shimizu 890ddd
#include "filebrowsermodel.h"
Toshihiro Shimizu 890ddd
#include "tapp.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzQt includes
Toshihiro Shimizu 890ddd
#include "toonzqt/menubarcommand.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzLib includes
Toshihiro Shimizu 890ddd
#include "toonz/tfxhandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/tcolumnfx.h"
Toshihiro Shimizu 890ddd
#include "toonz/toonzfolders.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzBase includes
Toshihiro Shimizu 890ddd
#include "tfx.h"
Toshihiro Shimizu 890ddd
#include "tmacrofx.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tsystem.h"
Toshihiro Shimizu 890ddd
#include "tstream.h"
Toshihiro Shimizu 890ddd
#include "tfxattributes.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qpushbutton></qpushbutton>
Toshihiro Shimizu 890ddd
#include <qmainwindow></qmainwindow>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// SavePresetPopup
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
SavePresetPopup::SavePresetPopup()
Shinya Kitaoka 120a6e
    : Dialog(TApp::instance()->getMainWindow(), true, true, "SavePreset") {
Shinya Kitaoka 120a6e
  setWindowTitle(tr("Save Preset"));
Shinya Kitaoka 120a6e
  addWidget(tr("Preset Name:"), m_nameFld = new DVGui::LineEdit(this));
Shinya Kitaoka 120a6e
  m_nameFld->setMinimumWidth(170);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QPushButton *okBtn = new QPushButton(tr("Save"), this);
Shinya Kitaoka 120a6e
  okBtn->setDefault(true);
Shinya Kitaoka 120a6e
  QPushButton *cancelBtn = new QPushButton(tr("Cancel"), this);
Shinya Kitaoka 120a6e
  connect(okBtn, SIGNAL(clicked()), this, SLOT(onOkBtn()));
Shinya Kitaoka 120a6e
  connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  addButtonBarWidget(okBtn, cancelBtn);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
SavePresetPopup::~SavePresetPopup() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
bool SavePresetPopup::apply() {
Shinya Kitaoka 120a6e
  TFxHandle *fxHandle = TApp::instance()->getCurrentFx();
Shinya Kitaoka 120a6e
  TFx *fx             = fxHandle->getFx();
Shinya Kitaoka 120a6e
  if (TZeraryColumnFx *zfx = dynamic_cast<tzerarycolumnfx *="">(fx))</tzerarycolumnfx>
Shinya Kitaoka 120a6e
    fx = zfx->getZeraryFx();
Shinya Kitaoka 120a6e
  if (!fx) return 0;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TMacroFx *macroFx = dynamic_cast<tmacrofx *="">(fx);</tmacrofx>
Shinya Kitaoka 120a6e
  bool isMacro      = macroFx != 0;
Shinya Kitaoka 120a6e
  std::wstring name = m_nameFld->text().toStdWString();
Shinya Kitaoka 120a6e
  if (name.empty()) return 0;
Shinya Kitaoka 120a6e
  TFilePath fp = ToonzFolder::getFxPresetFolder() + "presets" +
Shinya Kitaoka 120a6e
                 fx->getFxType() + (name + (isMacro ? L".macrofx" : L".fx"));
Shinya Kitaoka 120a6e
  if (!TFileStatus(fp.getParentDir()).doesExist()) {
Shinya Kitaoka 120a6e
    try {
Shinya Kitaoka 120a6e
      TFilePath parent = fp.getParentDir();
Shinya Kitaoka 120a6e
      TSystem::mkDir(parent);
Shinya Kitaoka 120a6e
      DvDirModel::instance()->refreshFolder(parent.getParentDir());
Shinya Kitaoka 120a6e
    } catch (...) {
Shinya Kitaoka 120a6e
      DVGui::error(
Shinya Kitaoka 120a6e
          tr("It is not possible to create the preset folder %1.")
Shinya Kitaoka 120a6e
              .arg(QString::fromStdString(fp.getParentDir().getName())));
Shinya Kitaoka 120a6e
      return 0;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (TFileStatus(fp).doesExist()) {
Shinya Kitaoka 120a6e
    if (DVGui::MsgBox(tr("Do you want to overwrite?"), tr("Yes"), tr("No")) ==
Shinya Kitaoka 120a6e
        2)
Shinya Kitaoka 120a6e
      return 0;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (isMacro) {
Shinya Kitaoka 120a6e
    TOStream os(fp);
Shinya Kitaoka 120a6e
    TFx *fx2                                    = fx->clone(false);
Shinya Kitaoka 120a6e
    fx2->getAttributes()->passiveCacheDataIdx() = -1;
Shinya Kitaoka 120a6e
    os << fx2;
Shinya Kitaoka 120a6e
    delete fx2;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    TOStream os(fp);
Shinya Kitaoka 120a6e
    fx->savePreset(os);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  fxHandle->notifyFxPresetSaved();
Shinya Kitaoka 120a6e
  return true;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void SavePresetPopup::onOkBtn() {
Shinya Kitaoka 120a6e
  if (apply()) accept();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
OpenPopupCommandHandler<savepresetpopup> openSavePresetPopup(MI_SavePreset);</savepresetpopup>