Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef STUDIOPALETTE_INCLUDED
Toshihiro Shimizu 890ddd
#define STUDIOPALETTE_INCLUDED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tpalette.h"
shun-iwasawa 73c7bb
#include "toonz/tproject.h"
shun-iwasawa 73c7bb
// #include "tfilepath.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TOONZLIB_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TPalette;
Toshihiro Shimizu 890ddd
class TImage;
Toshihiro Shimizu 890ddd
class TColorStyle;
Toshihiro Shimizu 890ddd
shun-iwasawa 73c7bb
class DVAPI StudioPalette
shun-iwasawa 73c7bb
    : public TProjectManager::Listener {  // singleton; methods can throw
shun-iwasawa 73c7bb
                                          // exceptions
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  class Listener {
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    virtual void onStudioPaletteTreeChange() {}
Shinya Kitaoka 120a6e
    virtual void onStudioPaletteMove(const TFilePath &dstPath,
Shinya Kitaoka 120a6e
                                     const TFilePath &srcPath) {}
Shinya Kitaoka 120a6e
    virtual void onStudioPaletteChange(const TFilePath &palette) {}
Shinya Kitaoka 120a6e
    virtual ~Listener() {}
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  class Palette {  // serve per il drag&drop
Shinya Kitaoka 120a6e
    TFilePath m_palettePath;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    Palette(const TFilePath &path) : m_palettePath(path) {}
Shinya Kitaoka 120a6e
    const TFilePath &getPath() const { return m_palettePath; }
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  static StudioPalette *instance();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  ~StudioPalette();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TPalette *getPalette(const TFilePath &path, bool loadRefImg = false);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getChildren(std::vector<tfilepath> &fps, const TFilePath &folderPath);</tfilepath>
Shinya Kitaoka 120a6e
  int getChildCount(const TFilePath &folderPath);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool isFolder(const TFilePath &path);
Shinya Kitaoka 120a6e
  bool isPalette(const TFilePath &path);
Shinya Kitaoka 120a6e
  bool isReadOnly(const TFilePath &path);
Shinya Kitaoka 120a6e
  bool isLevelPalette(const TFilePath &path);
Shinya Kitaoka 120a6e
  bool hasGlobalName(const TFilePath &path);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // ritorna il nome del folder creato
Shinya Kitaoka 120a6e
  TFilePath createFolder(const TFilePath &parentFolderPath);
Shinya Kitaoka 120a6e
  void createFolder(const TFilePath &parentFolderPath, std::wstring name);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // ritorna il nome della palette creata;
Shinya Kitaoka 120a6e
  // se paletteName != "" prova ad assegnare quel nome. Se esiste gia'
Shinya Kitaoka 120a6e
  // aggiunge un suffisso
Shinya Kitaoka 120a6e
  TFilePath createPalette(const TFilePath &folderPath,
Shinya Kitaoka 120a6e
                          std::string paletteName = "");
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // DOESN'T get ownership
Shinya Kitaoka 120a6e
  void setPalette(const TFilePath &palettePath, const TPalette *palette,
Shinya Kitaoka 120a6e
                  bool notifyPaletteChanged);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void deletePalette(const TFilePath &palettePath);
Shinya Kitaoka 120a6e
  void deleteFolder(const TFilePath &folderPath);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TFilePath importPalette(const TFilePath &dstFolder, const TFilePath &srcPath);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void movePalette(const TFilePath &dstPath, const TFilePath &srcPath);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TFilePath getLevelPalettesRoot();
Shinya Kitaoka 120a6e
  TFilePath getProjectPalettesRoot();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // TFilePath getRefImage(const TFilePath palettePath);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool updateLinkedColors(TPalette *palette);
Shinya Kitaoka 120a6e
  void setStylesGlobalNames(TPalette *palette);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TFilePath getPalettePath(std::wstring paletteId);
Shinya Kitaoka 120a6e
  TPalette *getPalette(std::wstring paletteId);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TColorStyle *getStyle(std::wstring styleId);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // se lo stile ha un nome globale restituisce il nome della studio palette e
Shinya Kitaoka 120a6e
  // l'indice
Shinya Kitaoka 120a6e
  // dello stile linkato
Shinya Kitaoka 120a6e
  // (altrimenti restituisce (TFilePath(),-1))
Shinya Kitaoka 120a6e
  std::pair<tfilepath, int=""> getSourceStyle(TColorStyle *cs);</tfilepath,>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void addListener(Listener *listener);
Shinya Kitaoka 120a6e
  void removeListener(Listener *listener);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void notifyTreeChange();
Shinya Kitaoka 120a6e
  void notifyMove(const TFilePath &dstPath, const TFilePath &srcPath);
Shinya Kitaoka 120a6e
  void notifyPaletteChange(const TFilePath &name);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // bruttacchietto.
Shinya Kitaoka 120a6e
  static bool isEnabled() { return m_enabled; };
Shinya Kitaoka 120a6e
  static void enable(bool enabled);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void save(const TFilePath &path, TPalette *palette);
Toshihiro Shimizu 890ddd
shun-iwasawa 3bb469
  void removeEntry(const std::wstring paletteId);
shun-iwasawa 3bb469
  void addEntry(const std::wstring paletteId, const TFilePath &path);
shun-iwasawa 3bb469
shun-iwasawa 73c7bb
  // TProjectManager::Listener
shun-iwasawa 73c7bb
  void onProjectSwitched() override;
shun-iwasawa 73c7bb
  void onProjectChanged() override;
shun-iwasawa 73c7bb
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  StudioPalette();
Shinya Kitaoka 120a6e
  TFilePath m_root;
Shinya Kitaoka 120a6e
  std::map<std::wstring, tfilepath=""> m_table;</std::wstring,>
Shinya Kitaoka 120a6e
  std::vector<listener *=""> m_listeners;</listener>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TPalette *load(const TFilePath &path);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  static bool m_enabled;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif