Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "studiopalettecmd.h"
Toshihiro Shimizu 890ddd
#include "tapp.h"
Toshihiro Shimizu 890ddd
#include "toonz/tpalettehandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshlevelhandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/tscenehandle.h"
Toshihiro Shimizu 890ddd
#include "tundo.h"
Toshihiro Shimizu 890ddd
#include "tcolorstyles.h"
Toshihiro Shimizu 890ddd
#include "tsystem.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/icongenerator.h"
Toshihiro Shimizu 890ddd
#include "toonzutil.h"
Toshihiro Shimizu 890ddd
#include "tconvert.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonz/studiopalette.h"
Toshihiro Shimizu 890ddd
#include "toonz/toonzscene.h"
Toshihiro Shimizu 890ddd
#include "toonz/levelset.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshsimplelevel.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshleveltypes.h"
Toshihiro Shimizu 890ddd
#include "toonz/sceneproperties.h"
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
// DA FARE
Shinya Kitaoka 120a6e
// Mi serve per effettuare il cambiamento della StudioPalette corrente
Toshihiro Shimizu 890ddd
#include "studiopaletteviewer.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*! \namespace StudioPaletteCmd
Shinya Kitaoka 120a6e
                \brief Provides a collection of methods to manage \b
Shinya Kitaoka 120a6e
   StudioPalette.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Shinya Kitaoka 120a6e
namespace {
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Shinya Kitaoka 120a6e
// PaletteAssignUndo
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class PaletteAssignUndo : public TUndo {
Shinya Kitaoka 120a6e
  TPaletteP m_targetPalette, m_oldPalette, m_newPalette;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  PaletteAssignUndo(const TPaletteP &targetPalette, const TPaletteP &oldPalette,
Shinya Kitaoka 120a6e
                    const TPaletteP &newPalette)
Shinya Kitaoka 120a6e
      : m_targetPalette(targetPalette)
Shinya Kitaoka 120a6e
      , m_oldPalette(oldPalette)
Shinya Kitaoka 120a6e
      , m_newPalette(newPalette) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    m_targetPalette->assign(m_oldPalette.getPointer());
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentPalette()->notifyPaletteChanged();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    m_targetPalette->assign(m_newPalette.getPointer());
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentPalette()->notifyPaletteChanged();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int getSize() const {
Shinya Kitaoka 120a6e
    return sizeof(*this) +
Shinya Kitaoka 120a6e
           (m_targetPalette->getStyleCount() + m_oldPalette->getStyleCount() +
Shinya Kitaoka 120a6e
            m_newPalette->getStyleCount()) *
Shinya Kitaoka 120a6e
               100;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Shinya Kitaoka 120a6e
// StudioPaletteAssignUndo
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class StudioPaletteAssignUndo : public TUndo {
Shinya Kitaoka 120a6e
  TPaletteP m_oldPalette, m_newPalette;
Shinya Kitaoka 120a6e
  TFilePath m_fp;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  StudioPaletteAssignUndo(const TFilePath &targetPath,
Shinya Kitaoka 120a6e
                          const TPaletteP &oldPalette,
Shinya Kitaoka 120a6e
                          const TPaletteP &newPalette)
Shinya Kitaoka 120a6e
      : m_fp(targetPath), m_oldPalette(oldPalette), m_newPalette(newPalette) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    StudioPalette *sp = StudioPalette::instance();
Shinya Kitaoka 120a6e
    sp->setPalette(m_fp, m_oldPalette.getPointer());
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentPalette()->notifyPaletteChanged();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    StudioPalette *sp = StudioPalette::instance();
Shinya Kitaoka 120a6e
    sp->setPalette(m_fp, m_newPalette.getPointer());
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentPalette()->notifyPaletteChanged();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int getSize() const {
Shinya Kitaoka 120a6e
    return sizeof(*this) +
Shinya Kitaoka 120a6e
           (m_oldPalette->getStyleCount() + m_newPalette->getStyleCount()) *
Shinya Kitaoka 120a6e
               100;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Shinya Kitaoka 120a6e
// DeletePaletteUndo
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class DeletePaletteUndo : public TUndo {
Shinya Kitaoka 120a6e
  TFilePath m_palettePath;
Shinya Kitaoka 120a6e
  TPaletteP m_palette;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  DeletePaletteUndo(const TFilePath &palettePath) : m_palettePath(palettePath) {
Shinya Kitaoka 120a6e
    m_palette = StudioPalette::instance()->getPalette(m_palettePath);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    StudioPalette::instance()->setPalette(m_palettePath, m_palette->clone());
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  void redo() const { StudioPalette::instance()->deletePalette(m_palettePath); }
Shinya Kitaoka 120a6e
  int getSize() const { return sizeof(*this) + sizeof(TPalette); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Shinya Kitaoka 120a6e
// CreatePaletteUndo
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class CreatePaletteUndo : public TUndo {
Shinya Kitaoka 120a6e
  TFilePath m_palettePath;
Shinya Kitaoka 120a6e
  TPaletteP m_palette;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  CreatePaletteUndo(const TFilePath &palettePath) : m_palettePath(palettePath) {
Shinya Kitaoka 120a6e
    m_palette = StudioPalette::instance()->getPalette(m_palettePath);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const { StudioPalette::instance()->deletePalette(m_palettePath); }
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    StudioPalette::instance()->setPalette(m_palettePath, m_palette->clone());
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  int getSize() const { return sizeof(*this) + sizeof(TPalette); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Shinya Kitaoka 120a6e
// DeleteFolderUndo
Shinya Kitaoka 120a6e
// Oss.: l'undo non ricorda eventuali sottoFolder o palette, si limita a
Shinya Kitaoka 120a6e
// ricreare
Toshihiro Shimizu 890ddd
//			il folder!!!
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class DeleteFolderUndo : public TUndo {
Shinya Kitaoka 120a6e
  TFilePath m_folderPath;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  DeleteFolderUndo(const TFilePath &folderPath) : m_folderPath(folderPath) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    StudioPalette::instance()->createFolder(m_folderPath.getParentDir(),
Shinya Kitaoka 120a6e
                                            m_folderPath.getWideName());
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  void redo() const { StudioPalette::instance()->deleteFolder(m_folderPath); }
Shinya Kitaoka 120a6e
  int getSize() const { return sizeof(*this) + sizeof(TPalette); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Shinya Kitaoka 120a6e
// CreateFolderUndo
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class CreateFolderUndo : public TUndo {
Shinya Kitaoka 120a6e
  TFilePath m_folderPath;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  CreateFolderUndo(const TFilePath &folderPath) : m_folderPath(folderPath) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const { StudioPalette::instance()->deleteFolder(m_folderPath); }
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    StudioPalette::instance()->createFolder(m_folderPath.getParentDir(),
Shinya Kitaoka 120a6e
                                            m_folderPath.getWideName());
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  int getSize() const { return sizeof(*this) + sizeof(TPalette); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Shinya Kitaoka 120a6e
// MovePaletteUndo
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class MovePaletteUndo : public TUndo {
Shinya Kitaoka 120a6e
  TFilePath m_dstPath, m_srcPath;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  MovePaletteUndo(const TFilePath &dstPath, const TFilePath &srcPath)
Shinya Kitaoka 120a6e
      : m_dstPath(dstPath), m_srcPath(srcPath) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    StudioPalette::instance()->movePalette(m_srcPath, m_dstPath);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    StudioPalette::instance()->movePalette(m_dstPath, m_srcPath);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  int getSize() const { return sizeof(*this); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Shinya Kitaoka 120a6e
}  // namespace
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StudioPaletteCmd::loadIntoCurrentPalette() {
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  //  ColorController *cc = ColorController::instance();
Shinya Kitaoka 120a6e
  //  TPalette *palette = cc->getStudioPalette();
Shinya Kitaoka 120a6e
  TPalette *palette = TApp::instance()->getCurrentPalette()->getPalette();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  wstring gname = palette->getGlobalName();
Shinya Kitaoka 120a6e
  TFilePath fp  = StudioPalette::instance()->getPalettePath(gname);
Shinya Kitaoka 120a6e
  if (fp != TFilePath()) loadIntoCurrentPalette(fp);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  if (!palette->isCleanupPalette())
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentLevel()->getLevel()->setPaletteDirtyFlag(true);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentScene()->setDirtyFlag(true);
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentPalette()->notifyPaletteChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StudioPaletteCmd::loadIntoCurrentPalette(const TFilePath &fp) {
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  //  ColorController *cc = ColorController::instance();
Shinya Kitaoka 120a6e
  //  int styleId = cc->getCurrentStyleIndex();
Shinya Kitaoka 120a6e
  TApp *app   = TApp::instance();
Shinya Kitaoka 120a6e
  int styleId = app->getCurrentPalette()->getStyleIndex();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TPalette *palette = StudioPalette::instance()->getPalette(fp, true);
Shinya Kitaoka 120a6e
  if (!palette) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  TPalette *current = !palette->isCleanupPalette()
Shinya Kitaoka 120a6e
                          ? app->getCurrentPalette()->getPalette()
Shinya Kitaoka 120a6e
                          : app->getCurrentScene()
Shinya Kitaoka 120a6e
                                ->getScene()
Shinya Kitaoka 120a6e
                                ->getProperties()
Shinya Kitaoka 120a6e
                                ->getCleanupPalette();
Shinya Kitaoka 120a6e
  //    ? cc->getCleanupPalette()
Shinya Kitaoka 120a6e
  //    : cc->getLevelPalette();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (!current) return;
Shinya Kitaoka 120a6e
  TPalette *old = current->clone();
Shinya Kitaoka 120a6e
  while (palette->getStyleCount() < current->getStyleCount()) {
Shinya Kitaoka 120a6e
    int index = palette->getStyleCount();
Shinya Kitaoka 120a6e
    assert(index < current->getStyleCount());
Shinya Kitaoka 120a6e
    TColorStyle *style = current->getStyle(index)->clone();
Shinya Kitaoka 120a6e
    palette->addStyle(style);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  current->assign(palette);
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  //  if(cc->getCurrentStylePalette() == current &&
Shinya Kitaoka 120a6e
  //  styleId>=current->getStyleCount())
Shinya Kitaoka 120a6e
  //    cc->setCurrentStyle(1);
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(
Shinya Kitaoka 120a6e
      new PaletteAssignUndo(current, old, current->clone()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  if (  // current == cc->getCurrentStylePalette() &&
Shinya Kitaoka 120a6e
      app->getCurrentLevel()->getLevel()) {
Shinya Kitaoka 120a6e
    TXshSimpleLevel *sl = app->getCurrentLevel()->getSimpleLevel();
Shinya Kitaoka 120a6e
    if (sl) {
Shinya Kitaoka 120a6e
      sl->invalidateIcons();
Shinya Kitaoka 120a6e
      sl->setDirtyFlag(true);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    app->instance()->getCurrentLevel()->notifyLevelChange();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  app->getCurrentPalette()->notifyPaletteChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StudioPaletteCmd::mergeIntoCurrentPalette(const TFilePath &fp) {
Shinya Kitaoka 120a6e
  //  ColorController *cc = ColorController::instance();
Shinya Kitaoka 120a6e
  TPalette *palette = StudioPalette::instance()->getPalette(fp);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TApp *app = TApp::instance();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  TPalette *current = !palette->isCleanupPalette()
Shinya Kitaoka 120a6e
                          ? app->getCurrentPalette()->getPalette()
Shinya Kitaoka 120a6e
                          : app->getCurrentScene()
Shinya Kitaoka 120a6e
                                ->getScene()
Shinya Kitaoka 120a6e
                                ->getProperties()
Shinya Kitaoka 120a6e
                                ->getCleanupPalette();
Shinya Kitaoka 120a6e
  //    ? cc->getCleanupPalette()
Shinya Kitaoka 120a6e
  //    : cc->getLevelPalette();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (!current) return;
Shinya Kitaoka 120a6e
  TPalette *old = current->clone();
Shinya Kitaoka 120a6e
  current->merge(palette);
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(
Shinya Kitaoka 120a6e
      new PaletteAssignUndo(current, old, current->clone()));
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  app->getCurrentPalette()->notifyPaletteChanged();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  if (  // current == cc->getCurrentStylePalette() &&
Shinya Kitaoka 120a6e
      app->getCurrentLevel()->getLevel())
Shinya Kitaoka 120a6e
    app->getCurrentLevel()->getLevel()->setDirtyFlag(true);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StudioPaletteCmd::replaceWithCurrentPalette(const TFilePath &fp) {
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  // ColorController *cc = ColorController::instance();
Shinya Kitaoka 120a6e
  StudioPalette *sp = StudioPalette::instance();
Shinya Kitaoka 120a6e
  TPalette *palette = sp->getPalette(fp);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  TPalette *current = !palette->isCleanupPalette()
Shinya Kitaoka 120a6e
                          ? TApp::instance()->getCurrentPalette()->getPalette()
Shinya Kitaoka 120a6e
                          : TApp::instance()
Shinya Kitaoka 120a6e
                                ->getCurrentScene()
Shinya Kitaoka 120a6e
                                ->getScene()
Shinya Kitaoka 120a6e
                                ->getProperties()
Shinya Kitaoka 120a6e
                                ->getCleanupPalette();
Shinya Kitaoka 120a6e
  //    ? cc->getCleanupPalette()
Shinya Kitaoka 120a6e
  //    : cc->getLevelPalette();
Shinya Kitaoka 120a6e
  if (!current) return;
Shinya Kitaoka 120a6e
  TPalette *old = palette->clone();
Shinya Kitaoka 120a6e
  palette->assign(current);
Shinya Kitaoka 120a6e
  sp->setPalette(fp, current);
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(
Shinya Kitaoka 120a6e
      new StudioPaletteAssignUndo(fp, old, current->clone()));
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  // Cambio la studioPalette corrente
Shinya Kitaoka 120a6e
  //  ColorController::instance()->setStudioPalette(palette);
Shinya Kitaoka 120a6e
  DAFARE::setCurrentStudioPalette(current);
Shinya Kitaoka 120a6e
  DAFARE::setDirtyFlag(true);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentPalette()->notifyPaletteSwitched();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StudioPaletteCmd::loadIntoCleanupPalette(const TFilePath &fp) {
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  //  ColorController *cc = ColorController::instance();
Shinya Kitaoka 120a6e
  //  int styleId = cc->getCurrentStyleIndex();
Shinya Kitaoka 120a6e
  TPalette *palette = StudioPalette::instance()->getPalette(fp, true);
Shinya Kitaoka 120a6e
  if (!palette) return;
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  //  TPalette *current = cc->getCleanupPalette();
Shinya Kitaoka 120a6e
  TPalette *current = TApp::instance()
Shinya Kitaoka 120a6e
                          ->getCurrentScene()
Shinya Kitaoka 120a6e
                          ->getScene()
Shinya Kitaoka 120a6e
                          ->getProperties()
Shinya Kitaoka 120a6e
                          ->getCleanupPalette();
Shinya Kitaoka 120a6e
  assert(current);
Shinya Kitaoka 120a6e
  TPalette *old = current->clone();
Shinya Kitaoka 120a6e
  current->assign(palette);
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  //  if(cc->getCurrentStylePalette() == current &&
Shinya Kitaoka 120a6e
  //  styleId>=current->getStyleCount())
Shinya Kitaoka 120a6e
  //    cc->setCurrentStyle(1);
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(
Shinya Kitaoka 120a6e
      new PaletteAssignUndo(current, old, current->clone()));
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentPalette()->notifyPaletteChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StudioPaletteCmd::replaceWithCleanupPalette(const TFilePath &fp) {
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  // ColorController *cc = ColorController::instance();
Shinya Kitaoka 120a6e
  StudioPalette *sp = StudioPalette::instance();
Shinya Kitaoka 120a6e
  TPalette *palette = sp->getPalette(fp);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // DA FARE
Shinya Kitaoka 120a6e
  // TPalette *current = cc->getCleanupPalette();
Shinya Kitaoka 120a6e
  TPalette *current = TApp::instance()
Shinya Kitaoka 120a6e
                          ->getCurrentScene()
Shinya Kitaoka 120a6e
                          ->getScene()
Shinya Kitaoka 120a6e
                          ->getProperties()
Shinya Kitaoka 120a6e
                          ->getCleanupPalette();
Shinya Kitaoka 120a6e
  if (!current) return;
Shinya Kitaoka 120a6e
  TPalette *old = palette->clone();
Shinya Kitaoka 120a6e
  palette->assign(current);
Shinya Kitaoka 120a6e
  sp->setPalette(fp, current);
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(
Shinya Kitaoka 120a6e
      new StudioPaletteAssignUndo(fp, old, current->clone()));
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentPalette()->notifyPaletteSwitched();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StudioPaletteCmd::updateAllLinkedStyles() {
Shinya Kitaoka 120a6e
  StudioPalette *sp   = StudioPalette::instance();
Shinya Kitaoka 120a6e
  TApp *app           = TApp::instance();
Shinya Kitaoka 120a6e
  ToonzScene *scene   = app->getCurrentScene()->getScene();
Shinya Kitaoka 120a6e
  TLevelSet *levelSet = scene->getLevelSet();
Shinya Kitaoka 120a6e
  for (int i = 0; i < levelSet->getLevelCount(); i++) {
Shinya Kitaoka 120a6e
    TXshLevel *xl       = levelSet->getLevel(i);
Shinya Kitaoka 120a6e
    TXshSimpleLevel *sl = xl ? xl->getSimpleLevel() : 0;
Shinya Kitaoka 120a6e
    if (!sl) continue;
Shinya Kitaoka 120a6e
    TPalette *palette = sl->getPalette();
Shinya Kitaoka 120a6e
    if (palette) {
Shinya Kitaoka 120a6e
      sp->updateLinkedColors(palette);
Shinya Kitaoka 120a6e
      if (sl->getType() == TZP_XSHLEVEL) {
Shinya Kitaoka 120a6e
        std::vector<tframeid> fids;</tframeid>
Shinya Kitaoka 120a6e
        sl->getFids(fids);
Shinya Kitaoka 120a6e
        std::vector<tframeid>::iterator it;</tframeid>
Shinya Kitaoka 120a6e
        for (it = fids.begin(); it != fids.end(); ++it) {
Shinya Kitaoka 120a6e
          TFrameId fid = *it;
Shinya Kitaoka 120a6e
          string id    = sl->getImageId(fid);
Shinya Kitaoka 120a6e
          IconGenerator::instance()->invalidate(sl, fid);
Shinya Kitaoka 120a6e
          // ImageManager::instance()->invalidate(id);
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentPalette()->notifyPaletteChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Delete palette identified by \b fp in \b StudioPalette. If there are any
Shinya Kitaoka 120a6e
                problems in loading send an error message.
Toshihiro Shimizu 890ddd
*/
Shinya Kitaoka 120a6e
void StudioPaletteCmd::deletePalette(const TFilePath &fp) {
Shinya Kitaoka 120a6e
  TUndo *undo = new DeletePaletteUndo(fp);
Shinya Kitaoka 120a6e
  try {
Shinya Kitaoka 120a6e
    StudioPalette::instance()->deletePalette(fp);
Shinya Kitaoka 120a6e
    TUndoManager::manager()->add(undo);
Shinya Kitaoka 120a6e
  } catch (TException &e) {
Shinya Kitaoka 120a6e
    delete undo;
Shinya Kitaoka 120a6e
    error("Can't delete palette: " + QString(toString(e.getMessage()).c_str()));
Shinya Kitaoka 120a6e
  } catch (...) {
Shinya Kitaoka 120a6e
    delete undo;
Shinya Kitaoka 120a6e
    error("Can't delete palette");
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Move palette from TFilePath \b srcPath to \b TFilePath \b dstPath. If there
Shinya Kitaoka 120a6e
                are any problems in moving send an error message.
Toshihiro Shimizu 890ddd
*/
Shinya Kitaoka 120a6e
void StudioPaletteCmd::movePalette(const TFilePath &dstPath,
Shinya Kitaoka 120a6e
                                   const TFilePath &srcPath) {
Shinya Kitaoka 120a6e
  try {
Shinya Kitaoka 120a6e
    TSystem::touchParentDir(dstPath);
Shinya Kitaoka 120a6e
    StudioPalette::instance()->movePalette(dstPath, srcPath);
Shinya Kitaoka 120a6e
    TUndoManager::manager()->add(new MovePaletteUndo(dstPath, srcPath));
Shinya Kitaoka 120a6e
  } catch (TException &e) {
Shinya Kitaoka 120a6e
    error("Can't rename palette: " + QString(toString(e.getMessage()).c_str()));
Shinya Kitaoka 120a6e
  } catch (...) {
Shinya Kitaoka 120a6e
    error("Can't rename palette");
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Create palette \b palette in folder \b folderName with name \b paletteName.
Shinya Kitaoka 120a6e
                If there are any problems send an error message.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
TFilePath StudioPaletteCmd::createPalette(const TFilePath &folderName,
Shinya Kitaoka 120a6e
                                          string paletteName,
Shinya Kitaoka 120a6e
                                          const TPalette *palette) {
Shinya Kitaoka 120a6e
  TFilePath palettePath;
Shinya Kitaoka 120a6e
  try {
Shinya Kitaoka 120a6e
    if (!TFileStatus(folderName).doesExist()) TSystem::mkDir(folderName);
Shinya Kitaoka 120a6e
    palettePath =
Shinya Kitaoka 120a6e
        StudioPalette::instance()->createPalette(folderName, paletteName);
Shinya Kitaoka 120a6e
    if (palette) StudioPalette::instance()->setPalette(palettePath, palette);
Shinya Kitaoka 120a6e
    TUndoManager::manager()->add(new CreatePaletteUndo(palettePath));
Shinya Kitaoka 120a6e
  } catch (TException &e) {
Shinya Kitaoka 120a6e
    error("Can't create palette: " + QString(toString(e.getMessage()).c_str()));
Shinya Kitaoka 120a6e
  } catch (...) {
Shinya Kitaoka 120a6e
    error("Can't create palette");
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  return palettePath;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Add a folder in StudioPalette TFilePath \b parentFolderPath. If there
Shinya Kitaoka 120a6e
                are any problems send an error message.
Toshihiro Shimizu 890ddd
*/
Shinya Kitaoka 120a6e
TFilePath StudioPaletteCmd::addFolder(const TFilePath &parentFolderPath) {
Shinya Kitaoka 120a6e
  TFilePath folderPath;
Shinya Kitaoka 120a6e
  try {
Shinya Kitaoka 120a6e
    folderPath = StudioPalette::instance()->createFolder(parentFolderPath);
Shinya Kitaoka 120a6e
    TUndoManager::manager()->add(new CreateFolderUndo(folderPath));
Shinya Kitaoka 120a6e
  } catch (TException &e) {
Shinya Kitaoka 120a6e
    error("Can't create palette folder: " +
Shinya Kitaoka 120a6e
          QString(toString(e.getMessage()).c_str()));
Shinya Kitaoka 120a6e
  } catch (...) {
Shinya Kitaoka 120a6e
    error("Can't create palette folder");
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  return folderPath;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Delete folder \b folderPath. If there are any problems in deleting send an
Shinya Kitaoka 120a6e
                error message.
Toshihiro Shimizu 890ddd
*/
Shinya Kitaoka 120a6e
void StudioPaletteCmd::deleteFolder(const TFilePath &folderPath) {
Shinya Kitaoka 120a6e
  TUndo *undo = new DeleteFolderUndo(folderPath);
Shinya Kitaoka 120a6e
  try {
Shinya Kitaoka 120a6e
    StudioPalette::instance()->deleteFolder(folderPath);
Shinya Kitaoka 120a6e
    TUndoManager::manager()->add(undo);
Shinya Kitaoka 120a6e
  } catch (TException &e) {
Shinya Kitaoka 120a6e
    delete undo;
Shinya Kitaoka 120a6e
    error("Can't delete palette: " + QString(toString(e.getMessage()).c_str()));
Shinya Kitaoka 120a6e
  } catch (...) {
Shinya Kitaoka 120a6e
    delete undo;
Shinya Kitaoka 120a6e
    error("Can't delete palette");
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void StudioPaletteCmd::scanPalettes(const TFilePath &folder,
Shinya Kitaoka 120a6e
                                    const TFilePath &sourcePath) {
Shinya Kitaoka 120a6e
  error("uh oh");
Toshihiro Shimizu 890ddd
}