1 #pragma once
2 
3 #ifndef CASTSELECTION_H
4 #define CASTSELECTION_H
5 
6 #include "dvitemview.h"
7 #include <QMimeData>
8 
9 class CastBrowser;
10 class TXshPaletteLevel;
11 class TXshSoundLevel;
12 class TXshLevel;
13 
14 //=============================================================================
15 //
16 // CastSelection
17 //
18 //-----------------------------------------------------------------------------
19 
20 class CastSelection final : public DvItemSelection {
21   CastBrowser *m_browser;
22 
23 public:
24   CastSelection();
25   ~CastSelection();
26 
setBrowser(CastBrowser * browser)27   void setBrowser(CastBrowser *browser) { m_browser = browser; }
28 
29   void getSelectedLevels(std::vector<TXshLevel *> &levels);
30 
31   // commands
32   void enableCommands() override;
33 };
34 
35 //=============================================================================
36 //
37 // CastItems
38 //
39 //-----------------------------------------------------------------------------
40 // TODO: spostare in un altro file
41 
42 class TXshLevel;
43 class TXshSimpleLevel;
44 
45 class CastItem {
46 public:
CastItem()47   CastItem() {}
~CastItem()48   virtual ~CastItem() {}
49   virtual QString getName() const    = 0;
50   virtual QString getToolTip() const = 0;
getFrameCount()51   virtual int getFrameCount() const { return 0; }
52   virtual QPixmap getPixmap(bool isSelected) const = 0;
getSimpleLevel()53   virtual TXshSimpleLevel *getSimpleLevel() const { return 0; }
getSoundLevel()54   virtual TXshSoundLevel *getSoundLevel() const { return 0; }
getPaletteLevel()55   virtual TXshPaletteLevel *getPaletteLevel() const { return 0; }
56   virtual CastItem *clone() const = 0;
57   virtual bool exists() const     = 0;
58 };
59 //-----------------------------------------------------------------------------
60 
61 class LevelCastItem final : public CastItem {
62   TXshLevel *m_level;
63   QSize m_itemPixmapSize;
64 
65 public:
LevelCastItem(TXshLevel * level,QSize itemPixmapSize)66   LevelCastItem(TXshLevel *level, QSize itemPixmapSize)
67       : m_level(level), m_itemPixmapSize(itemPixmapSize) {}
getLevel()68   TXshLevel *getLevel() const { return m_level; }
69   QString getName() const override;
70   QString getToolTip() const override;
71   int getFrameCount() const override;
72   QPixmap getPixmap(bool isSelected = false) const override;
73   TXshSimpleLevel *getSimpleLevel() const override;
clone()74   CastItem *clone() const override {
75     return new LevelCastItem(m_level, m_itemPixmapSize);
76   }
77   bool exists() const override;
78 };
79 //-----------------------------------------------------------------------------
80 
81 class SoundCastItem final : public CastItem {
82   TXshSoundLevel *m_soundLevel;
83   QSize m_itemPixmapSize;
84 
85 public:
SoundCastItem(TXshSoundLevel * soundLevel,QSize itemPixmapSize)86   SoundCastItem(TXshSoundLevel *soundLevel, QSize itemPixmapSize)
87       : m_soundLevel(soundLevel), m_itemPixmapSize(itemPixmapSize) {}
getSoundLevel()88   TXshSoundLevel *getSoundLevel() const override { return m_soundLevel; }
89   QString getName() const override;
90   QString getToolTip() const override;
91   int getFrameCount() const override;
92   QPixmap getPixmap(bool isSelected = false) const override;
clone()93   CastItem *clone() const override {
94     return new SoundCastItem(m_soundLevel, m_itemPixmapSize);
95   }
96   bool exists() const override;
97 };
98 
99 //-----------------------------------------------------------------------------
100 
101 class PaletteCastItem final : public CastItem {
102   TXshPaletteLevel *m_paletteLevel;
103   QSize m_itemPixmapSize;
104 
105 public:
PaletteCastItem(TXshPaletteLevel * paletteLevel,QSize itemPixmapSize)106   PaletteCastItem(TXshPaletteLevel *paletteLevel, QSize itemPixmapSize)
107       : m_paletteLevel(paletteLevel), m_itemPixmapSize(itemPixmapSize) {}
getPaletteLevel()108   TXshPaletteLevel *getPaletteLevel() const override { return m_paletteLevel; }
109   QString getName() const override;
110   QString getToolTip() const override;
111   int getFrameCount() const override;
112   QPixmap getPixmap(bool isSelected = false) const override;
clone()113   CastItem *clone() const override {
114     return new PaletteCastItem(m_paletteLevel, m_itemPixmapSize);
115   }
116   bool exists() const override;
117 };
118 //-----------------------------------------------------------------------------
119 
120 class CastItems final : public QMimeData {
121   std::vector<CastItem *> m_items;
122 
123 public:
124   CastItems();
125   ~CastItems();
126 
127   void clear();
128   void addItem(CastItem *item);
129 
getItemCount()130   int getItemCount() const { return m_items.size(); }
131   CastItem *getItem(int index) const;
132 
swapItem(int index1,int index2)133   void swapItem(int index1, int index2) {
134     std::swap(m_items[index1], m_items[index2]);
135   }
136 
137   QStringList formats() const override;
138   bool hasFormat(const QString &mimeType) const override;
139   static QString getMimeFormat();
140 
141   CastItems *getSelectedItems(const std::set<int> &indices) const;
142 };
143 
144 #endif  // FILESELECTION_H
145