Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "styleselection.h"
Toshihiro Shimizu 890ddd
#include "menubarcommandids.h"
Toshihiro Shimizu 890ddd
#include "toonz/tpalettehandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/tscenehandle.h"
Toshihiro Shimizu 890ddd
#include "tapp.h"
Toshihiro Shimizu 890ddd
#include "toonzutil.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tcolorstyles.h"
Toshihiro Shimizu 890ddd
#include "tpixelutils.h"
Toshihiro Shimizu 890ddd
#include "styledata.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tundo.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/gutil.h"
Toshihiro Shimizu 890ddd
#include "tconvert.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonzqt/dvdialog.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonz/studiopalette.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <qapplication></qapplication>
Toshihiro Shimizu 890ddd
#include <qclipboard></qclipboard>
Toshihiro Shimizu 890ddd
#include <qbytearray></qbytearray>
Toshihiro Shimizu 890ddd
#include <qbuffer></qbuffer>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
using namespace DVGui;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Shinya Kitaoka 120a6e
namespace {
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void copyStylesWithoutUndo(TPaletteP palette, int pageIndex,
Shinya Kitaoka 120a6e
                           std::set<int> *styleIndicesInPage) {</int>
Shinya Kitaoka 120a6e
  if (!palette || pageIndex < 0) return;
Shinya Kitaoka 120a6e
  int n = styleIndicesInPage->size();
Shinya Kitaoka 120a6e
  if (n == 0) return;
Shinya Kitaoka 120a6e
  TPalette::Page *page = palette->getPage(pageIndex);
Shinya Kitaoka 120a6e
  assert(page);
Shinya Kitaoka 120a6e
  TPaletteHandle *cph = TApp::instance()->getCurrentPalette();
Shinya Kitaoka 120a6e
  StyleData *data     = new StyleData();
Shinya Kitaoka 120a6e
  std::set<int>::iterator it;</int>
Shinya Kitaoka 120a6e
  for (it = styleIndicesInPage->begin(); it != styleIndicesInPage->end();
Shinya Kitaoka 120a6e
       ++it) {
Shinya Kitaoka 120a6e
    int j              = *it;
Shinya Kitaoka 120a6e
    int styleId        = page->getStyleId(j);
Shinya Kitaoka 120a6e
    TColorStyle *style = page->getStyle(j)->clone();
Shinya Kitaoka 120a6e
    data->addStyle(styleId, style);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  QApplication::clipboard()->setMimeData(data);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
bool pasteStylesWithoutUndo(TPaletteP palette, int pageIndex,
Shinya Kitaoka 120a6e
                            std::set<int> *styleIndicesInPage) {</int>
Shinya Kitaoka 120a6e
  // page = pagina corrente
Shinya Kitaoka 120a6e
  TPalette::Page *page = palette->getPage(pageIndex);
Shinya Kitaoka 120a6e
  assert(page);
Shinya Kitaoka 120a6e
  // cerco il punto di inserimento (primo stile selezionato oppure dopo l'ultimo
Shinya Kitaoka 120a6e
  // stile della pagina
Shinya Kitaoka 120a6e
  // se nulla e' selezionato)
Shinya Kitaoka 120a6e
  int indexInPage                               = page->getStyleCount();
Shinya Kitaoka 120a6e
  if (!styleIndicesInPage->empty()) indexInPage = *styleIndicesInPage->begin();
Shinya Kitaoka 120a6e
  // prendo i dati dalla clipboard
Shinya Kitaoka 120a6e
  const StyleData *data =
Shinya Kitaoka 120a6e
      dynamic_cast<const *="" styledata="">(QApplication::clipboard()->mimeData());</const>
Shinya Kitaoka 120a6e
  if (!data) return false;
Shinya Kitaoka 120a6e
  // cancello la selezione
Shinya Kitaoka 120a6e
  styleIndicesInPage->clear();
Shinya Kitaoka 120a6e
  // comincio a fare paste
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 0; i < data->getStyleCount(); i++) {
Shinya Kitaoka 120a6e
    int styleId        = data->getStyleIndex(i);
Shinya Kitaoka 120a6e
    TColorStyle *style = data->getStyle(i)->clone();
Shinya Kitaoka 120a6e
    if (palette->getStylePage(styleId) < 0) {
Shinya Kitaoka 120a6e
      // styleId non e' utilizzato: uso quello
Shinya Kitaoka 120a6e
      // (cut/paste utilizzato per spostare stili)
Shinya Kitaoka 120a6e
      palette->setStyle(styleId, style);
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      // styleId e' gia' utilizzato. ne devo prendere un altro
Shinya Kitaoka 120a6e
      styleId = palette->getFirstUnpagedStyle();
Shinya Kitaoka 120a6e
      if (styleId >= 0)
Shinya Kitaoka 120a6e
        palette->setStyle(styleId, style);
Shinya Kitaoka 120a6e
      else
Shinya Kitaoka 120a6e
        styleId = palette->addStyle(style);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    // inserisco lo stile nella pagina
Shinya Kitaoka 120a6e
    page->insertStyle(indexInPage + i, styleId);
Shinya Kitaoka 120a6e
    // e lo seleziono
Shinya Kitaoka 120a6e
    styleIndicesInPage->insert(indexInPage + i);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentPalette()->notifyColorStyleChanged();
Shinya Kitaoka 120a6e
  return true;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void deleteStylesWithoutUndo(TPaletteP palette, int pageIndex,
Shinya Kitaoka 120a6e
                             std::set<int> *styleIndicesInPage) {</int>
Shinya Kitaoka 120a6e
  int n = styleIndicesInPage->size();
Shinya Kitaoka 120a6e
  if (n == 0) return;
Shinya Kitaoka 120a6e
  TPalette::Page *page = palette->getPage(pageIndex);
Shinya Kitaoka 120a6e
  assert(page);
Shinya Kitaoka 120a6e
  TPaletteHandle *cph         = TApp::instance()->getCurrentPalette();
Shinya Kitaoka 120a6e
  int currentStyleIndexInPage = page->search(cph->getStyleIndex());
Shinya Kitaoka 120a6e
  bool mustChangeCurrentStyle =
Shinya Kitaoka 120a6e
      currentStyleIndexInPage >= 0 &&
Shinya Kitaoka 120a6e
      styleIndicesInPage->count(currentStyleIndexInPage) > 0;
Shinya Kitaoka 120a6e
  std::set<int>::reverse_iterator it;</int>
Shinya Kitaoka 120a6e
  for (it = styleIndicesInPage->rbegin(); it != styleIndicesInPage->rend();
Shinya Kitaoka 120a6e
       ++it) {
Shinya Kitaoka 120a6e
    int j       = *it;
Shinya Kitaoka 120a6e
    int styleId = page->getStyleId(j);
Shinya Kitaoka 120a6e
    if (styleId < 2) {
Shinya Kitaoka 120a6e
      error("Can't delete color #" + QString::number(styleId));
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      if (styleId == cph->getStyleIndex()) cph->setStyleIndex(1);
Shinya Kitaoka 120a6e
      palette->setStyle(styleId, TPixel32::Red);
Shinya Kitaoka 120a6e
      page->removeStyle(j);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  styleIndicesInPage->clear();
Shinya Kitaoka 120a6e
  if (mustChangeCurrentStyle) {
Shinya Kitaoka 120a6e
    // ho cancellato lo stile corrente
Shinya Kitaoka 120a6e
    if (currentStyleIndexInPage < page->getStyleCount()) {
Shinya Kitaoka 120a6e
      // posso fare in modo che lo stile selezionato sia nella stessa posizione
Shinya Kitaoka 120a6e
      cph->setStyleIndex(page->getStyleId(currentStyleIndexInPage));
Shinya Kitaoka 120a6e
    } else if (page->getStyleCount() > 0) {
Shinya Kitaoka 120a6e
      // almeno faccio in modo che sia nella stessa pagina
Shinya Kitaoka 120a6e
      int styleId = page->getStyleId(page->getStyleCount() - 1);
Shinya Kitaoka 120a6e
      cph->setStyleIndex(styleId);
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      // seleziono lo stile #1 (che c'e' sempre). n.b. questo puo' comportare un
Shinya Kitaoka 120a6e
      // cambio pagina
Shinya Kitaoka 120a6e
      cph->setStyleIndex(1);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  cph->notifyColorStyleChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void cutStylesWithoutUndo(TPaletteP palette, int pageIndex,
Shinya Kitaoka 120a6e
                          std::set<int> *styleIndicesInPage) {</int>
Shinya Kitaoka 120a6e
  copyStylesWithoutUndo(palette, pageIndex, styleIndicesInPage);
Shinya Kitaoka 120a6e
  deleteStylesWithoutUndo(palette, pageIndex, styleIndicesInPage);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// CopyStylesUndo
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class CopyStylesUndo : public TUndo {
Shinya Kitaoka 120a6e
  QMimeData *m_oldData;
Shinya Kitaoka 120a6e
  QMimeData *m_newData;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  CopyStylesUndo(QMimeData *oldData, QMimeData *newData)
Shinya Kitaoka 120a6e
      : m_oldData(oldData), m_newData(newData) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    QClipboard *clipboard = QApplication::clipboard();
Shinya Kitaoka 120a6e
    clipboard->setMimeData(cloneData(m_oldData), QClipboard::Clipboard);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    QClipboard *clipboard = QApplication::clipboard();
Shinya Kitaoka 120a6e
    clipboard->setMimeData(cloneData(m_newData), QClipboard::Clipboard);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int getSize() const { return sizeof(*this); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// PasteStylesUndo
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class PasteStylesUndo : public TUndo {
Shinya Kitaoka 120a6e
  TStyleSelection *m_selection;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  PasteStylesUndo(TStyleSelection *selection) : m_selection(selection) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ~PasteStylesUndo() { delete m_selection; }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    std::set<int> styleIndicesInPage = m_selection->getIndicesInPage();</int>
Shinya Kitaoka 120a6e
    cutStylesWithoutUndo(m_selection->getPalette(), m_selection->getPageIndex(),
Shinya Kitaoka 120a6e
                         &styleIndicesInPage);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    std::set<int> styleIndicesInPage = m_selection->getIndicesInPage();</int>
Shinya Kitaoka 120a6e
    pasteStylesWithoutUndo(m_selection->getPalette(),
Shinya Kitaoka 120a6e
                           m_selection->getPageIndex(), &styleIndicesInPage);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int getSize() const { return sizeof(*this); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// DeleteStylesUndo
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class DeleteStylesUndo : public TUndo {
Shinya Kitaoka 120a6e
  TStyleSelection *m_selection;
Shinya Kitaoka 120a6e
  QMimeData *m_data;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  DeleteStylesUndo(TStyleSelection *selection, QMimeData *data)
Shinya Kitaoka 120a6e
      : m_selection(selection), m_data(data) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ~DeleteStylesUndo() { delete m_selection; }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    QClipboard *clipboard = QApplication::clipboard();
Shinya Kitaoka 120a6e
    QMimeData *oldData    = cloneData(clipboard->mimeData());
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    clipboard->setMimeData(cloneData(m_data), QClipboard::Clipboard);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    std::set<int> styleIndicesInPage = m_selection->getIndicesInPage();</int>
Shinya Kitaoka 120a6e
    pasteStylesWithoutUndo(m_selection->getPalette(),
Shinya Kitaoka 120a6e
                           m_selection->getPageIndex(), &styleIndicesInPage);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    clipboard->setMimeData(oldData, QClipboard::Clipboard);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    std::set<int> styleIndicesInPage = m_selection->getIndicesInPage();</int>
Shinya Kitaoka 120a6e
    deleteStylesWithoutUndo(m_selection->getPalette(),
Shinya Kitaoka 120a6e
                            m_selection->getPageIndex(), &styleIndicesInPage);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int getSize() const { return sizeof(*this); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// CutStylesUndo
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class CutStylesUndo : public TUndo {
Shinya Kitaoka 120a6e
  TStyleSelection *m_selection;
Shinya Kitaoka 120a6e
  QMimeData *m_oldData;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  CutStylesUndo(TStyleSelection *selection, QMimeData *data)
Shinya Kitaoka 120a6e
      : m_selection(selection), m_oldData(data) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ~CutStylesUndo() { delete m_selection; }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    std::set<int> styleIndicesInPage = m_selection->getIndicesInPage();</int>
Shinya Kitaoka 120a6e
    pasteStylesWithoutUndo(m_selection->getPalette(),
Shinya Kitaoka 120a6e
                           m_selection->getPageIndex(), &styleIndicesInPage);
Shinya Kitaoka 120a6e
    QClipboard *clipboard = QApplication::clipboard();
Shinya Kitaoka 120a6e
    clipboard->setMimeData(cloneData(m_oldData), QClipboard::Clipboard);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    std::set<int> styleIndicesInPage = m_selection->getIndicesInPage();</int>
Shinya Kitaoka 120a6e
    cutStylesWithoutUndo(m_selection->getPalette(), m_selection->getPageIndex(),
Shinya Kitaoka 120a6e
                         &styleIndicesInPage);
Shinya Kitaoka 120a6e
  }
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
// TStyleSelection
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TStyleSelection::TStyleSelection() : m_palette(0), m_pageIndex(-1) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TStyleSelection::~TStyleSelection() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::enableCommands() {
Shinya Kitaoka 120a6e
  enableCommand(this, MI_Cut, &TStyleSelection::cutStyles);
Shinya Kitaoka 120a6e
  enableCommand(this, MI_Copy, &TStyleSelection::copyStyles);
Shinya Kitaoka 120a6e
  enableCommand(this, MI_Paste, &TStyleSelection::pasteStyles);
Shinya Kitaoka 120a6e
  enableCommand(this, MI_PasteValues, &TStyleSelection::pasteStylesValue);
Shinya Kitaoka 120a6e
  enableCommand(this, MI_Clear, &TStyleSelection::deleteStyles);
Shinya Kitaoka 120a6e
  enableCommand(this, MI_BlendColors, &TStyleSelection::blendStyles);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::select(const TPaletteP &palette, int pageIndex) {
Shinya Kitaoka 120a6e
  m_palette   = palette;
Shinya Kitaoka 120a6e
  m_pageIndex = pageIndex;
Shinya Kitaoka 120a6e
  m_styleIndicesInPage.clear();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::select(const TPaletteP &palette, int pageIndex,
Shinya Kitaoka 120a6e
                             int styleIndexInPage, bool on) {
Shinya Kitaoka 120a6e
  if (on) {
Shinya Kitaoka 120a6e
    if (m_palette.getPointer() != palette.getPointer() ||
Shinya Kitaoka 120a6e
        pageIndex != m_pageIndex)
Shinya Kitaoka 120a6e
      m_styleIndicesInPage.clear();
Shinya Kitaoka 120a6e
    m_palette   = palette;
Shinya Kitaoka 120a6e
    m_pageIndex = pageIndex;
Shinya Kitaoka 120a6e
    m_styleIndicesInPage.insert(styleIndexInPage);
Shinya Kitaoka 120a6e
  } else if (m_palette.getPointer() == palette.getPointer() &&
Shinya Kitaoka 120a6e
             pageIndex == m_pageIndex)
Shinya Kitaoka 120a6e
    m_styleIndicesInPage.erase(styleIndexInPage);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
bool TStyleSelection::isSelected(const TPaletteP &palette, int pageIndex,
Shinya Kitaoka 120a6e
                                 int id) const {
Shinya Kitaoka 120a6e
  return m_palette.getPointer() == palette.getPointer() &&
Shinya Kitaoka 120a6e
         m_pageIndex == pageIndex &&
Shinya Kitaoka 120a6e
         m_styleIndicesInPage.find(id) != m_styleIndicesInPage.end();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
bool TStyleSelection::isPageSelected(const TPaletteP &palette,
Shinya Kitaoka 120a6e
                                     int pageIndex) const {
Shinya Kitaoka 120a6e
  return m_palette.getPointer() == palette.getPointer() &&
Shinya Kitaoka 120a6e
         m_pageIndex == pageIndex;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::selectNone() {
Shinya Kitaoka 120a6e
  m_palette   = 0;
Shinya Kitaoka 120a6e
  m_pageIndex = -1;
Shinya Kitaoka 120a6e
  m_styleIndicesInPage.clear();
Shinya Kitaoka 120a6e
  notifyView();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
bool TStyleSelection::isEmpty() const {
Shinya Kitaoka 120a6e
  return m_pageIndex < 0 && m_styleIndicesInPage.empty();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
int TStyleSelection::getStyleCount() const {
Shinya Kitaoka 120a6e
  return m_styleIndicesInPage.size();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::cutStyles() {
Shinya Kitaoka 120a6e
  if (isEmpty()) return;
Shinya Kitaoka 120a6e
  QClipboard *clipboard      = QApplication::clipboard();
Shinya Kitaoka 120a6e
  QMimeData *oldData         = cloneData(clipboard->mimeData());
Shinya Kitaoka 120a6e
  TStyleSelection *selection = new TStyleSelection(this);
Shinya Kitaoka 120a6e
  if (m_pageIndex == 0 &&
Shinya Kitaoka 120a6e
      (isSelected(m_palette, 0, 0) || isSelected(m_palette, 0, 1))) {
Shinya Kitaoka 120a6e
    MsgBox(CRITICAL, "Can't delete colors #0 and #1");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  cutStylesWithoutUndo(m_palette, m_pageIndex, &m_styleIndicesInPage);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(new CutStylesUndo(selection, oldData));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::copyStyles() {
Shinya Kitaoka 120a6e
  if (isEmpty()) return;
Shinya Kitaoka 120a6e
  QClipboard *clipboard = QApplication::clipboard();
Shinya Kitaoka 120a6e
  QMimeData *oldData    = cloneData(clipboard->mimeData());
Shinya Kitaoka 120a6e
  copyStylesWithoutUndo(m_palette, m_pageIndex, &m_styleIndicesInPage);
Shinya Kitaoka 120a6e
  QMimeData *newData = cloneData(clipboard->mimeData());
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(new CopyStylesUndo(oldData, newData));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::pasteStyles() {
Shinya Kitaoka 120a6e
  // se non c'e' palette o pagina corrente esco
Shinya Kitaoka 120a6e
  if (!m_palette || m_pageIndex < 0) return;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (m_pageIndex == 0 && !m_styleIndicesInPage.empty() &&
Shinya Kitaoka 120a6e
      *m_styleIndicesInPage.begin() < 2) {
Shinya Kitaoka 120a6e
    MsgBox(CRITICAL, "Can't paste styles there");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  pasteStylesWithoutUndo(m_palette, m_pageIndex, &m_styleIndicesInPage);
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(new PasteStylesUndo(new TStyleSelection(this)));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::deleteStyles() {
Shinya Kitaoka 120a6e
  if (!m_palette || m_pageIndex < 0) return;
Shinya Kitaoka 120a6e
  if (m_pageIndex == 0 &&
Shinya Kitaoka 120a6e
      (isSelected(m_palette, 0, 0) || isSelected(m_palette, 0, 1))) {
Shinya Kitaoka 120a6e
    MsgBox(CRITICAL, "Can't delete colors #0 and #1");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  StyleData *data = new StyleData();
Shinya Kitaoka 120a6e
  std::set<int>::iterator it;</int>
Shinya Kitaoka 120a6e
  TPalette::Page *page = m_palette->getPage(m_pageIndex);
Shinya Kitaoka 120a6e
  for (it = m_styleIndicesInPage.begin(); it != m_styleIndicesInPage.end();
Shinya Kitaoka 120a6e
       ++it) {
Shinya Kitaoka 120a6e
    int j       = *it;
Shinya Kitaoka 120a6e
    int styleId = page->getStyleId(j);
Shinya Kitaoka 120a6e
    if (styleId < 0) continue;
Shinya Kitaoka 120a6e
    TColorStyle *style = page->getStyle(j)->clone();
Shinya Kitaoka 120a6e
    data->addStyle(styleId, style);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  TStyleSelection *selection = new TStyleSelection(this);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  deleteStylesWithoutUndo(m_palette, m_pageIndex, &m_styleIndicesInPage);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(new DeleteStylesUndo(selection, data));
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
// UndoPasteValues
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class UndoPasteValues : public TUndo {
Shinya Kitaoka 120a6e
  TPaletteP m_palette;
Shinya Kitaoka 120a6e
  class Item {
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    int m_index;
Shinya Kitaoka 120a6e
    TColorStyle *m_oldStyle;
Shinya Kitaoka 120a6e
    TColorStyle *m_newStyle;
Shinya Kitaoka 120a6e
    Item(int index, const TColorStyle *oldStyle, const TColorStyle *newStyle)
Shinya Kitaoka 120a6e
        : m_index(index)
Shinya Kitaoka 120a6e
        , m_oldStyle(oldStyle->clone())
Shinya Kitaoka 120a6e
        , m_newStyle(newStyle->clone()) {}
Shinya Kitaoka 120a6e
    ~Item() {
Shinya Kitaoka 120a6e
      delete m_oldStyle;
Shinya Kitaoka 120a6e
      delete m_newStyle;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  };
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  std::vector<item *=""> m_items;</item>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  UndoPasteValues(const TPaletteP &palette) : m_palette(palette) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ~UndoPasteValues() { clearPointerContainer(m_items); }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void addItem(int index, const TColorStyle *oldStyle,
Shinya Kitaoka 120a6e
               const TColorStyle *newStyle) {
Shinya Kitaoka 120a6e
    m_items.push_back(new Item(index, oldStyle, newStyle));
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void pasteValue(int styleId, const TColorStyle *newStyle) const {
Shinya Kitaoka 120a6e
    // preserva il vecchio nome
Shinya Kitaoka 120a6e
    wstring str = m_palette->getStyle(styleId)->getName();
Shinya Kitaoka 120a6e
    m_palette->setStyle(styleId, newStyle->clone());
Shinya Kitaoka 120a6e
    m_palette->getStyle(styleId)->setName(str);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    int i;
Shinya Kitaoka 120a6e
    for (i = 0; i < (int)m_items.size(); i++)
Shinya Kitaoka 120a6e
      pasteValue(m_items[i]->m_index, m_items[i]->m_oldStyle);
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentPalette()->notifyColorStyleChanged();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    int i;
Shinya Kitaoka 120a6e
    for (i = 0; i < (int)m_items.size(); i++)
Shinya Kitaoka 120a6e
      pasteValue(m_items[i]->m_index, m_items[i]->m_newStyle);
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentPalette()->notifyColorStyleChanged();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int getSize() const {
Shinya Kitaoka 120a6e
    return sizeof(*this) + (int)m_items.size() * 100;  // forfait
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Shinya Kitaoka 120a6e
}  // namespace
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::pasteStylesValue() {
Shinya Kitaoka 120a6e
  if (!m_palette || m_pageIndex < 0) return;
Shinya Kitaoka 120a6e
  if (m_pageIndex == 0 && isSelected(m_palette, 0, 0)) {
Shinya Kitaoka 120a6e
    MsgBox(CRITICAL, "Can't modify color #0");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TPalette::Page *page = m_palette->getPage(m_pageIndex);
Shinya Kitaoka 120a6e
  assert(page);
Shinya Kitaoka 120a6e
  const StyleData *data =
Shinya Kitaoka 120a6e
      dynamic_cast<const *="" styledata="">(QApplication::clipboard()->mimeData());</const>
Shinya Kitaoka 120a6e
  if (!data) return;
Shinya Kitaoka 120a6e
  int i                 = 0;
Shinya Kitaoka 120a6e
  UndoPasteValues *undo = new UndoPasteValues(m_palette);
Shinya Kitaoka 120a6e
  std::set<int>::iterator it;</int>
Shinya Kitaoka 120a6e
  for (it = m_styleIndicesInPage.begin();
Shinya Kitaoka 120a6e
       it != m_styleIndicesInPage.end() && i < data->getStyleCount();
Shinya Kitaoka 120a6e
       ++it, i++) {
Shinya Kitaoka 120a6e
    int styleId = page->getStyleId(*it);
Shinya Kitaoka 120a6e
    undo->addItem(styleId, m_palette->getStyle(styleId), data->getStyle(i));
Shinya Kitaoka 120a6e
    m_palette->setStyle(styleId, data->getStyle(i)->clone());
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(undo);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TPaletteHandle *ph = TApp::instance()->getCurrentPalette();
Shinya Kitaoka 120a6e
  ph->notifyColorStyleChanged();
Shinya Kitaoka 120a6e
  ph->updateColor();
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
// UndoBlendColor
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class UndoBlendColor : public TUndo {
Shinya Kitaoka 120a6e
  TPaletteP m_palette;
Shinya Kitaoka 120a6e
  int m_pageIndex;
Shinya Kitaoka 120a6e
  std::vector<std::pair<int, *="" tcolorstyle="">> m_colorStyles;</std::pair<int,>
Shinya Kitaoka 120a6e
  TPixel32 m_c0, m_c1;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  UndoBlendColor(TPaletteP palette, int pageIndex,
Shinya Kitaoka 120a6e
                 std::vector<std::pair<int, *="" tcolorstyle="">> colorStyles,</std::pair<int,>
Shinya Kitaoka 120a6e
                 const TPixel32 &c0, const TPixel32 &c1)
Shinya Kitaoka 120a6e
      : m_palette(palette)
Shinya Kitaoka 120a6e
      , m_pageIndex(pageIndex)
Shinya Kitaoka 120a6e
      , m_colorStyles(colorStyles)
Shinya Kitaoka 120a6e
      , m_c0(c0)
Shinya Kitaoka 120a6e
      , m_c1(c1) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ~UndoBlendColor() {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void undo() const {
Shinya Kitaoka 120a6e
    if (!m_palette) return;
Shinya Kitaoka 120a6e
    TPalette::Page *page = m_palette->getPage(m_pageIndex);
Shinya Kitaoka 120a6e
    if (!page) return;
Shinya Kitaoka 120a6e
    int count = 0;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    for (UINT i = 0; i < m_colorStyles.size(); i++) {
Shinya Kitaoka 120a6e
      TColorStyle *st = page->getStyle(m_colorStyles[i].first);
Shinya Kitaoka 120a6e
      QString gname   = QString::fromStdWString(st->getGlobalName());
Shinya Kitaoka 120a6e
      if (!gname.isEmpty() && gname[0] != L'-') continue;
Shinya Kitaoka 120a6e
      m_palette->setStyle(page->getStyleId(m_colorStyles[i].first),
Shinya Kitaoka 120a6e
                          m_colorStyles[i].second->clone());
Shinya Kitaoka 120a6e
      m_colorStyles[i].second->invalidateIcon();
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentPalette()->notifyColorStyleChanged();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void redo() const {
Shinya Kitaoka 120a6e
    if (!m_palette) return;
Shinya Kitaoka 120a6e
    TPalette::Page *page = m_palette->getPage(m_pageIndex);
Shinya Kitaoka 120a6e
    if (!page) return;
Shinya Kitaoka 120a6e
    for (UINT i = 0; i < m_colorStyles.size(); i++) {
Shinya Kitaoka 120a6e
      TColorStyle *cs = page->getStyle(m_colorStyles[i].first);
Shinya Kitaoka 120a6e
      QString gname   = QString::fromStdWString(cs->getGlobalName());
Shinya Kitaoka 120a6e
      if (!gname.isEmpty() && gname[0] != L'-') continue;
Shinya Kitaoka 120a6e
      assert(cs);
Shinya Kitaoka 120a6e
      if (!cs) continue;
Shinya Kitaoka 120a6e
      cs->setMainColor(
Shinya Kitaoka 120a6e
          blend(m_c0, m_c1, (double)i / (double)(m_colorStyles.size() - 1)));
Shinya Kitaoka 120a6e
      cs->invalidateIcon();
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    TApp::instance()->getCurrentPalette()->notifyColorStyleChanged();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int getSize() const {
Shinya Kitaoka 120a6e
    return sizeof(
Shinya Kitaoka 120a6e
        *this);  //+500*m_oldStyles.size(); //dipende da che stile ha salvato
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Shinya Kitaoka 120a6e
}  // namespace
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::blendStyles() {
Shinya Kitaoka 120a6e
  if (!m_palette || m_pageIndex < 0) return;
Shinya Kitaoka 120a6e
  int n = m_styleIndicesInPage.size();
Shinya Kitaoka 120a6e
  if (n < 2) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TPalette::Page *page = m_palette->getPage(m_pageIndex);
Shinya Kitaoka 120a6e
  assert(page);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  std::vector<tcolorstyle *=""> styles;</tcolorstyle>
Shinya Kitaoka 120a6e
  std::vector<std::pair<int, *="" tcolorstyle="">> oldStyles;</std::pair<int,>
Shinya Kitaoka 120a6e
  for (std::set<int>::iterator it = m_styleIndicesInPage.begin();</int>
Shinya Kitaoka 120a6e
       it != m_styleIndicesInPage.end(); ++it) {
Shinya Kitaoka 120a6e
    TColorStyle *cs = page->getStyle(*it);
Shinya Kitaoka 120a6e
    assert(cs);
Shinya Kitaoka 120a6e
    styles.push_back(cs);
Shinya Kitaoka 120a6e
    oldStyles.push_back(std::pair<int, *="" tcolorstyle="">(*it, cs->clone()));</int,>
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  assert(styles.size() >= 2);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TPixel32 c0 = styles.front()->getMainColor();
Shinya Kitaoka 120a6e
  TPixel32 c1 = styles.back()->getMainColor();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool areAllStyleLincked = true;
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e
  for (i = 1; i < n - 1; i++) {
Shinya Kitaoka 120a6e
    QString gname = QString::fromStdWString(styles[i]->getGlobalName());
Shinya Kitaoka 120a6e
    if (!gname.isEmpty() && gname[0] != L'-') continue;
Shinya Kitaoka 120a6e
    areAllStyleLincked = false;
Shinya Kitaoka 120a6e
    styles[i]->setMainColor(blend(c0, c1, (double)i / (double)(n - 1)));
Shinya Kitaoka 120a6e
    styles[i]->invalidateIcon();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (areAllStyleLincked) return;
Shinya Kitaoka 120a6e
  TApp::instance()->getCurrentPalette()->notifyColorStyleChanged();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  UndoBlendColor *undo =
Shinya Kitaoka 120a6e
      new UndoBlendColor(m_palette, m_pageIndex, oldStyles, c0, c1);
Shinya Kitaoka 120a6e
  TUndoManager::manager()->add(undo);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::toggleLink() {
Shinya Kitaoka 120a6e
  if (!m_palette || m_pageIndex < 0) return;
Shinya Kitaoka 120a6e
  int n = m_styleIndicesInPage.size();
Shinya Kitaoka 120a6e
  if (n <= 0) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool somethingHasBeenLinked = false;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool currentStyleIsInSelection = false;
Shinya Kitaoka 120a6e
  TApp *app                      = TApp::instance();
Shinya Kitaoka 120a6e
  TPaletteHandle *ph             = app->getCurrentPalette();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TPalette::Page *page = m_palette->getPage(m_pageIndex);
Shinya Kitaoka 120a6e
  assert(page);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  for (std::set<int>::iterator it = m_styleIndicesInPage.begin();</int>
Shinya Kitaoka 120a6e
       it != m_styleIndicesInPage.end(); ++it) {
Shinya Kitaoka 120a6e
    TColorStyle *cs = page->getStyle(*it);
Shinya Kitaoka 120a6e
    assert(cs);
Shinya Kitaoka 120a6e
    wstring name = cs->getGlobalName();
Shinya Kitaoka 120a6e
    if (name != L"" && (name[0] == L'-' || name[0] == L'+')) {
Shinya Kitaoka 120a6e
      name[0] = name[0] == L'-' ? L'+' : L'-';
Shinya Kitaoka 120a6e
      cs->setGlobalName(name);
Shinya Kitaoka 120a6e
      if (name[0] == L'+') somethingHasBeenLinked = true;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    if (*it == m_palette->getPage(m_pageIndex)->search(ph->getStyleIndex()))
Shinya Kitaoka 120a6e
      currentStyleIsInSelection = true;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (somethingHasBeenLinked)
Shinya Kitaoka 120a6e
    StudioPalette::instance()->updateLinkedColors(m_palette.getPointer());
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ph->notifyPaletteChanged();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  if (currentStyleIsInSelection) ph->notifyColorStyleSwitched();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // DA FARE: e' giusto mettere la nofica del dirty flag a current scene
Shinya Kitaoka 120a6e
  // o e' meglio farlo al livello corrente!?
Shinya Kitaoka 120a6e
  app->getCurrentScene()->setDirtyFlag(true);
Shinya Kitaoka 120a6e
  //  extern void setPaletteDirtyFlag();
Shinya Kitaoka 120a6e
  //  setPaletteDirtyFlag();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
QByteArray TStyleSelection::toByteArray(int pageIndex,
Shinya Kitaoka 120a6e
                                        const std::set<int> &indicesInPage,</int>
Shinya Kitaoka 120a6e
                                        const QString paletteGlobalName) {
Shinya Kitaoka 120a6e
  QByteArray data;
Shinya Kitaoka 120a6e
  QBuffer dataBuffer(&data);
Shinya Kitaoka 120a6e
  dataBuffer.open(QIODevice::WriteOnly);
Shinya Kitaoka 120a6e
  QDataStream out(&dataBuffer);
Shinya Kitaoka 120a6e
  out << (int)pageIndex << (int)indicesInPage.size() << paletteGlobalName;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  std::set<int>::const_iterator it;</int>
Shinya Kitaoka 120a6e
  for (it = indicesInPage.begin(); it != indicesInPage.end(); ++it)
Shinya Kitaoka 120a6e
    out << (int)*it;
Shinya Kitaoka 120a6e
  return data;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void TStyleSelection::fromByteArray(QByteArray &byteArray, int &pageIndex,
Shinya Kitaoka 120a6e
                                    std::set<int> &indicesInPage,</int>
Shinya Kitaoka 120a6e
                                    QString &paletteGlobalName) {
Shinya Kitaoka 120a6e
  QBuffer dataBuffer(&byteArray);
Shinya Kitaoka 120a6e
  dataBuffer.open(QIODevice::ReadOnly);
Shinya Kitaoka 120a6e
  QDataStream in(&dataBuffer);
Shinya Kitaoka 120a6e
  int i, count = 0;
Shinya Kitaoka 120a6e
  in >> pageIndex >> count >> paletteGlobalName;
Shinya Kitaoka 120a6e
  for (i = 0; i < count; i++) {
Shinya Kitaoka 120a6e
    int indexInPage;
Shinya Kitaoka 120a6e
    in >> indexInPage;
Shinya Kitaoka 120a6e
    indicesInPage.insert(indexInPage);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
QByteArray TStyleSelection::toByteArray() const {
Shinya Kitaoka 120a6e
  QString globalName =
Shinya Kitaoka 120a6e
      QString::fromStdWString(m_palette->getGlobalName().c_str());
Shinya Kitaoka 120a6e
  return toByteArray(m_pageIndex, m_styleIndicesInPage, globalName);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
const char *TStyleSelection::getMimeType() {
Shinya Kitaoka 120a6e
  return "application/vnd.toonz.style";
Toshihiro Shimizu 890ddd
}