--- qsampler/trunk/src/qsamplerInstrumentList.h 2007/11/01 17:14:21 1464 +++ qsampler/trunk/src/qsamplerInstrumentList.h 2007/12/06 09:35:33 1558 @@ -24,131 +24,48 @@ #define __qsamplerInstrumentList_h #include -#include -//#include -#include #include #include -#include - #include "qsamplerInstrument.h" -// Forward declarations. -//class qsamplerInstrument; -//class qsamplerInstrumentList; - -class QAction; - +namespace QSampler { -//---------------------------------------------------------------------- -// class qsamplerInstrumentGroup -- custom group list view item. -// +//------------------------------------------------------------------------- +// QSampler::MidiInstrumentsModel - data model for MIDI prog mappings +// (used for QTableView) -class qsamplerInstrumentGroup : public QListWidgetItem +class MidiInstrumentsModel : public QAbstractTableModel { -public: - - // Constructors. - qsamplerInstrumentGroup(QListWidget *pListView, - const QString& sName, QListWidgetItem *pItemAfter = NULL); - qsamplerInstrumentGroup(qsamplerInstrumentGroup *pGroupItem, - const QString& sName); - // Default destructor. - virtual ~qsamplerInstrumentGroup(); - - // Instance accessors. - void setName(const QString& sName); - QString name() const; - - QListWidget *listView() const; - qsamplerInstrumentGroup *groupItem() const; - - // To show up whether its open or not. - virtual void setOpen(bool bOpen); - - // To virtually distinguish between list view items. - virtual int rtti() const; -}; - - -//---------------------------------------------------------------------- -// class qsamplerInstrumentItem -- custom file list view item. -// + Q_OBJECT -class qsamplerInstrumentItem : public qsamplerInstrumentGroup -{ public: - // Constructors. - qsamplerInstrumentItem(QListWidget *pListView, - qsamplerInstrument *pInstrument, - QListWidgetItem *pItemAfter = NULL); - qsamplerInstrumentItem(qsamplerInstrumentGroup *pGroupItem, - qsamplerInstrument *pInstrument); - // Default destructor. - virtual ~qsamplerInstrumentItem(); - - // To virtually distinguish between list view items. - virtual int rtti() const; - - // Payload accessor. - qsamplerInstrument *instrument() const; - - // View refreshment. - void update(); + MidiInstrumentsModel(QObject* pParent = NULL); -private: + // Overridden methods from subclass(es) + int rowCount(const QModelIndex& parent) const; + int columnCount(const QModelIndex& parent) const; - // File item full path. - qsamplerInstrument *m_pInstrument; -}; + QVariant data(const QModelIndex& index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + // Make the following method public + QAbstractTableModel::reset; -//---------------------------------------------------------------------------- -// qsamplerInstrumentList -- MIDI instrument list view. -// + // Own methods + Instrument* addInstrument(int iMap = 0, + int iBank = -1, int iProg = -1); + void removeInstrument(const Instrument& instrument); -#if 0 -class qsamplerInstrumentList : public QListView -{ - Q_OBJECT - -public: - - // Constructor. - qsamplerInstrumentList(QWidget *pParent, const char *pszName = NULL); - // Default destructor. - ~qsamplerInstrumentList(); - - // QListViewItem::rtti() return values. - enum ItemType { Group = 1001, Item = 1002 }; - - // Add a new group/file item, optionally under a given group. - qsamplerInstrumentGroup *addGroup(const QString& sName, - qsamplerInstrumentGroup *pParentGroup = NULL); - qsamplerInstrumentItem *addItem( - qsamplerInstrument *pInstrument, - qsamplerInstrumentGroup *pParentGroup = NULL); - - // Find a group/file item, given its name. - qsamplerInstrumentGroup *findGroup(const QString& sName) const; - qsamplerInstrumentItem *findItem( - qsamplerInstrument *pInstrument) const; + void resort(const Instrument& instrument); // Map selector. void setMidiMap(int iMidiMap); int midiMap() const; - // List actions accessors. - QAction *newGroupAction() const; - QAction *newItemAction() const; - QAction *editItemAction() const; - QAction *renameAction() const; - QAction *deleteAction() const; - QAction *refreshAction() const; - signals: // Instrument map/session change signal. @@ -159,101 +76,42 @@ // General reloader. void refresh(); -protected slots: - - // Add a new group item below the current one. - void newGroupSlot(); - // Add a instrument item below the current one. - void newItemSlot(); - // Change current instrument item. - void editItemSlot(); - // Rename current group/item. - void renameSlot(); - // Remove current group/item. - void deleteSlot(); - - // In-place selection slot. - void selectionChangedSlot(); - - // In-place activation slot. - void activatedSlot(QListWidgetItem *pListItem); - - // In-place aliasing slot. - void renamedSlot(QListWidgetItem *pItem); - -protected: - - // Find and return the nearest group item... - qsamplerInstrumentGroup *groupItem(QListWidgetItem *pListItem) const; - - // Context menu request event handler. - void contextMenuEvent(QContextMenuEvent *pContextMenuEvent); - private: - // List view actions. - QAction *m_pNewGroupAction; - QAction *m_pNewItemAction; - QAction *m_pEditItemAction; - QAction *m_pRenameAction; - QAction *m_pDeleteAction; - QAction *m_pRefreshAction; + typedef QMap > InstrumentsMap; + + InstrumentsMap m_instruments; // Current map selection. int m_iMidiMap; }; -#endif - -class MidiInstrumentsModel : public QAbstractTableModel { -Q_OBJECT -public: - MidiInstrumentsModel(QObject* parent = 0); - - // overridden methods from subclass(es) - int rowCount(const QModelIndex &parent) const; - int columnCount(const QModelIndex &parent) const; - QVariant data(const QModelIndex &index, int role) const; - QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - - qsamplerInstrument* addInstrument(int iMap = 0, int iBank = -1, int iProg = -1); - - // Map selector. - void setMidiMap(int iMidiMap); - int midiMap() const; - -signals: - // Instrument map/session change signal. - void instrumentsChanged(); - -public slots: - // General reloader. - void refresh(); -private: - typedef QMap > InstrumentsMap; - // Current map selection. - int m_iMidiMap; +//------------------------------------------------------------------------- +// QSampler::MidiInstrumentsDelegate - table cell renderer for MIDI prog +// mappings (doesn't actually do anything ATM, but is already there for +// a future cell editor widget implementation) - InstrumentsMap instruments; -}; +class MidiInstrumentsDelegate : public QItemDelegate +{ + Q_OBJECT -class MidiInstrumentsDelegate : public QItemDelegate { -Q_OBJECT public: - MidiInstrumentsDelegate(QObject* parent = 0); + MidiInstrumentsDelegate(QObject *pParent = NULL); - QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, - const QModelIndex& index) const; + QWidget* createEditor(QWidget *pParent, + const QStyleOptionViewItem& option, const QModelIndex& index) const; - void setEditorData(QWidget* editor, const QModelIndex& index) const; - void setModelData(QWidget* editor, QAbstractItemModel* model, - const QModelIndex& index) const; + void setEditorData(QWidget *pEditor, + const QModelIndex& index) const; + void setModelData(QWidget *pEditor, + QAbstractItemModel* model, const QModelIndex& index) const; - void updateEditorGeometry(QWidget* editor, - const QStyleOptionViewItem& option, const QModelIndex& index) const; + void updateEditorGeometry(QWidget* pEditor, + const QStyleOptionViewItem& option, const QModelIndex& index) const; }; +} // namespace QSampler #endif // __qsamplerInstrumentList_h