text: 
  
  #include "castselection.h"
  #include "castviewer.h"
  #include "menubarcommandids.h"
  #include "toonzqt/icongenerator.h"
  #include "toonzqt/gutil.h"
  
  #include "toonz/toonzscene.h"
  #include "toonz/txshlevel.h"
  #include "toonz/txshsimplelevel.h"
  #include "toonz/txshpalettelevel.h"
  #include "toonz/txshlevelhandle.h"
  #include "toonz/tscenehandle.h"
  #include "toonz/sceneproperties.h"
  #include "tapp.h"
  #include "toonz/stage2.h"
  #include "tsystem.h"
  #include "toonz/txshsoundlevel.h"
  #include "toonz/preferences.h"
  
  //=============================================================================
  //
  // CastSelection
  //
  //-----------------------------------------------------------------------------
  
  CastSelection::CastSelection()
  	: m_browser(0)
  {
  }
  
  //-----------------------------------------------------------------------------
  
  CastSelection::~CastSelection()
  {
  }
  
  //-----------------------------------------------------------------------------
  
  void CastSelection::getSelectedLevels(std::vector<TXshLevel *> &levels)
  {
  	assert(m_browser);
  	CastItems const& castItems = m_browser->getCastItems();
  	for (int i = 0; i < castItems.getItemCount(); i++) {
  		if (!isSelected(i))
  			continue;
  		TXshLevel *level = castItems.getItem(i)->getSimpleLevel();
  		if (!level)
  			level = castItems.getItem(i)->getPaletteLevel();
  		if (!level)
  			level = castItems.getItem(i)->getSoundLevel();
  		if (level)
  			levels.push_back(level);
  	}
  }
  
  //-----------------------------------------------------------------------------
  
  void CastSelection::enableCommands()
  {
  	DvItemSelection::enableCommands();
  	assert(m_browser);
  	if (m_browser) {
  		enableCommand(m_browser, MI_ExposeResource, &CastBrowser::expose);
  		enableCommand(m_browser, MI_EditLevel, &CastBrowser::edit);
  		// enableCommand(m_browser, MI_ConvertToVectors,     &CastBrowser::vectorize);
  		enableCommand(m_browser, MI_ShowFolderContents, &CastBrowser::showFolderContents);
  	}
  }
  
  // TODO: da qui in avanti: spostare in un altro file
  
  //=============================================================================
  //
  // CastBrowser::LevelItem
  //
  //-----------------------------------------------------------------------------
  
  QString LevelCastItem::getName() const
  {
  	return QString::fromStdWString(m_level->getName());
  }
  
  //-----------------------------------------------------------------------------
  
  QString LevelCastItem::getToolTip() const
  {
  	TFilePath path = m_level->getPath();
  	return QString::fromStdWString(path.withoutParentDir().getWideString());
  }
  
  //-----------------------------------------------------------------------------
  
  int LevelCastItem::getFrameCount() const
  {
  	return m_level->getFrameCount();
  }
  
  //-----------------------------------------------------------------------------
  
  QPixmap LevelCastItem::getPixmap(bool isSelected) const
  {
  	TXshSimpleLevel *sl = m_level->getSimpleLevel();
  	if (!sl)
  		return QPixmap();
  	ToonzScene *scene = sl->getScene();
  	assert(scene);
  	if (!scene)
  		return QPixmap();
  	bool onDemand = false;
  	if (Preferences::instance()->getColumnIconLoadingPolicy() == Preferences::LoadOnDemand)
  		onDemand = !isSelected;
  	QPixmap icon = IconGenerator::instance()->getIcon(sl, sl->getFirstFid(), false, onDemand);
  	return scalePixmapKeepingAspectRatio(icon, m_itemPixmapSize, Qt::transparent);
  }
  
  //-----------------------------------------------------------------------------
  
  bool LevelCastItem::exists() const
  {
  	ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
  	return TSystem::doesExistFileOrLevel(scene->decodeFilePath(m_level->getPath())) || !getPixmap(false).isNull();
  }
  
  //-------------------------------------------------------
  
  TXshSimpleLevel *LevelCastItem::getSimpleLevel() const
  {
  	return m_level ? m_level->getSimpleLevel() : 0;
  }
  
  //=============================================================================
  //
  // CastBrowser::SoundItem
  //
  //-----------------------------------------------------------------------------
  
  QString SoundCastItem::getName() const
  {
  	return QString::fromStdWString(m_soundLevel->getName());
  }
  
  //-----------------------------------------------------------------------------
  
  QString SoundCastItem::getToolTip() const
  {
  	TFilePath path = m_soundLevel->getPath();
  	return QString::fromStdWString(path.withoutParentDir().getWideString());
  }
  //-----------------------------------------------------------------------------
  
  int SoundCastItem::getFrameCount() const
  {
  	return m_soundLevel->getFrameCount();
  }
  //-----------------------------------------------------------------------------
  
  QPixmap SoundCastItem::getPixmap(bool isSelected) const
  {
  	static QPixmap loudspeaker(":Resources/audio.png");
  	return scalePixmapKeepingAspectRatio(loudspeaker, m_itemPixmapSize, Qt::transparent);
  }
  
  //-----------------------------------------------------------------------------
  
  bool SoundCastItem::exists() const
  {
  	ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
  	return TSystem::doesExistFileOrLevel(scene->decodeFilePath(m_soundLevel->getPath()));
  }
  
  //=============================================================================
  //
  // CastBrowser::PaletteCastItem
  //
  //-----------------------------------------------------------------------------
  
  QString PaletteCastItem::getName() const
  {
  	return QString::fromStdWString(m_paletteLevel->getName());
  }
  //-----------------------------------------------------------------------------
  
  QString PaletteCastItem::getToolTip() const
  {
  	TFilePath path = m_paletteLevel->getPath();
  	return QString::fromStdWString(path.withoutParentDir().getWideString());
  }
  //-----------------------------------------------------------------------------
  
  int PaletteCastItem::getFrameCount() const
  {
  	return m_paletteLevel->getFrameCount();
  }
  //-----------------------------------------------------------------------------
  
  QPixmap PaletteCastItem::getPixmap(bool isSelected) const
  {
  	static QPixmap palette(":Resources/paletteicon.png");
  	return scalePixmapKeepingAspectRatio(palette, m_itemPixmapSize, Qt::transparent);
  }
  
  bool PaletteCastItem::exists() const
  {
  	ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
  	return TSystem::doesExistFileOrLevel(scene->decodeFilePath(m_paletteLevel->getPath()));
  }
  
  //=============================================================================
  //
  // CastItems
  //
  //-----------------------------------------------------------------------------
  
  CastItems::CastItems()
  	: QMimeData()
  {
  }
  
  //-----------------------------------------------------------------------------
  
  CastItems::~CastItems()
  {
  	clear();
  }
  
  //-----------------------------------------------------------------------------
  
  void CastItems::clear()
  {
  	clearPointerContainer(m_items);
  }
  
  //-----------------------------------------------------------------------------
  
  void CastItems::addItem(CastItem *item)
  {
  	m_items.push_back(item);
  }
  
  //-----------------------------------------------------------------------------
  
  CastItem *CastItems::getItem(int index) const
  {
  	assert(0 <= index && index < (int)m_items.size());
  	return m_items[index];
  }
  
  //-----------------------------------------------------------------------------
  
  bool CastItems::hasFormat(const QString &mimeType) const
  {
  	return mimeType == getMimeFormat();
  }
  
  //-----------------------------------------------------------------------------
  
  QString CastItems::getMimeFormat()
  {
  	return "application/vnd.toonz.levels";
  }
  
  //-----------------------------------------------------------------------------
  
  QStringList CastItems::formats() const
  {
  	return QStringList(QString("application/vnd.toonz.levels"));
  }
  
  //-----------------------------------------------------------------------------
  
  CastItems *CastItems::getSelectedItems(const std::set<int> &indices) const
  {
  	CastItems *c = new CastItems();
  	std::set<int>::const_iterator it;
  	for (it = indices.begin(); it != indices.end(); ++it) {
  		int index = *it;
  		if (0 <= index && index < getItemCount())
  			c->addItem(getItem(index)->clone());
  	}
  	return c;
  }
  