/[svn]/qsampler/trunk/src/qsamplerInstrumentListForm.cpp
ViewVC logotype

Diff of /qsampler/trunk/src/qsamplerInstrumentListForm.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1492 by schoenebeck, Mon Nov 19 21:08:18 2007 UTC revision 1523 by capela, Sun Nov 25 11:40:47 2007 UTC
# Line 20  Line 20 
20    
21  *****************************************************************************/  *****************************************************************************/
22    
23    #include "qsamplerAbout.h"
24  #include "qsamplerInstrumentListForm.h"  #include "qsamplerInstrumentListForm.h"
25    
26  #include "qsamplerInstrumentForm.h"  #include "qsamplerInstrumentForm.h"
27  #include "qsamplerMainForm.h"  
28  #include "qsamplerOptions.h"  #include "qsamplerOptions.h"
29  #include "qsamplerInstrument.h"  #include "qsamplerInstrument.h"
30    #include "qsamplerMainForm.h"
31    
32    #include <QHeaderView>
33    
 #include <QToolTip>  
34    
35  namespace QSampler {  namespace QSampler {
36    
37  InstrumentListForm::InstrumentListForm ( QWidget* parent, Qt::WindowFlags flags )  InstrumentListForm::InstrumentListForm (
38          : QMainWindow(parent, flags)          QWidget* pParent, Qt::WindowFlags wflags )
39            : QMainWindow(pParent, wflags)
40  {  {
41      ui.setupUi(this);          m_ui.setupUi(this);
   
     ui.newInstrumentAction->setText(tr("New &Instrument..."));  
     ui.newInstrumentAction->setShortcut(Qt::Key_Insert);  
     ui.editInstrumentAction->setText(tr("&Edit..."));  
     ui.editInstrumentAction->setShortcut(Qt::Key_Enter);  
     ui.deleteInstrumentAction->setText(tr("&Delete"));  
     ui.deleteInstrumentAction->setShortcut(Qt::Key_Delete);  
     ui.refreshInstrumentsAction->setText(tr("&Refresh"));  
     ui.refreshInstrumentsAction->setShortcut(Qt::Key_F5);  
   
     // Setup toolbar widgets.  
     m_pMapComboBox = new QComboBox(ui.InstrumentToolbar);  
     m_pMapComboBox->setMinimumWidth(120);  
     m_pMapComboBox->setEnabled(false);  
     QToolTip::add(m_pMapComboBox, tr("Instrument Map"));  
     ui.InstrumentToolbar->addWidget(m_pMapComboBox);  
   
     ui.InstrumentToolbar->addSeparator();  
     ui.newInstrumentAction->addTo(ui.InstrumentToolbar);  
     ui.editInstrumentAction->addTo(ui.InstrumentToolbar);  
     ui.deleteInstrumentAction->addTo(ui.InstrumentToolbar);  
     ui.InstrumentToolbar->addSeparator();  
     ui.refreshInstrumentsAction->addTo(ui.InstrumentToolbar);  
42    
43      ui.InstrumentTable->setModel(&model);          // Setup toolbar widgets.
44      ui.InstrumentTable->setItemDelegate(&delegate);          m_pMapComboBox = new QComboBox(m_ui.InstrumentToolbar);
45            m_pMapComboBox->setMinimumWidth(120);
46            m_pMapComboBox->setEnabled(false);
47            m_pMapComboBox->setToolTip(tr("Instrument Map"));
48            m_ui.InstrumentToolbar->addWidget(m_pMapComboBox);
49    
50            m_ui.InstrumentToolbar->addSeparator();
51            m_ui.InstrumentToolbar->addAction(m_ui.newInstrumentAction);
52            m_ui.InstrumentToolbar->addAction(m_ui.editInstrumentAction);
53            m_ui.InstrumentToolbar->addAction(m_ui.deleteInstrumentAction);
54            m_ui.InstrumentToolbar->addSeparator();
55            m_ui.InstrumentToolbar->addAction(m_ui.refreshInstrumentsAction);
56    
57            int iRowHeight = m_ui.InstrumentTable->fontMetrics().height() + 4;
58            m_ui.InstrumentTable->verticalHeader()->setDefaultSectionSize(iRowHeight);
59            m_ui.InstrumentTable->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
60    
61            m_ui.InstrumentTable->setModel(&m_model);
62            m_ui.InstrumentTable->setItemDelegate(&m_delegate);
63            m_ui.InstrumentTable->verticalHeader()->hide();
64    
65          QObject::connect(m_pMapComboBox,          QObject::connect(m_pMapComboBox,
66                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
67                  SLOT(activateMap(int)));                  SLOT(activateMap(int)));
   
68          QObject::connect(          QObject::connect(
69                  ui.refreshInstrumentsAction,                  m_ui.refreshInstrumentsAction,
70                  SIGNAL(triggered()),                  SIGNAL(triggered()),
71                  SLOT(refreshInstruments(void))                  SLOT(refreshInstruments(void)));
72      );          QObject::connect(
73                    m_ui.InstrumentTable,
         connect(  
                 ui.InstrumentTable,  
74                  SIGNAL(activated(const QModelIndex&)),                  SIGNAL(activated(const QModelIndex&)),
75                  SLOT(editInstrument(const QModelIndex&))                  SLOT(editInstrument(const QModelIndex&)));
76          );          QObject::connect(
77          connect(                  m_ui.newInstrumentAction,
                 ui.newInstrumentAction,  
78                  SIGNAL(triggered()),                  SIGNAL(triggered()),
79                  SLOT(newInstrument())                  SLOT(newInstrument()));
80          );          QObject::connect(
81          connect(                  m_ui.deleteInstrumentAction,
                 ui.deleteInstrumentAction,  
82                  SIGNAL(triggered()),                  SIGNAL(triggered()),
83                  SLOT(deleteInstrument())                  SLOT(deleteInstrument()));
84          );          QObject::connect(
85          connect(                  m_ui.editInstrumentAction,
                 ui.editInstrumentAction,  
86                  SIGNAL(triggered()),                  SIGNAL(triggered()),
87                  SLOT(editInstrument())                  SLOT(editInstrument()));
88          );  
89            MainForm *pMainForm = MainForm::getInstance();
90            if (pMainForm) {
91                    QObject::connect(&m_model,
92                            SIGNAL(instrumentsChanged()),
93                            pMainForm, SLOT(sessionDirty()));
94            }
95  }  }
96    
97  InstrumentListForm::~InstrumentListForm() {  
98    InstrumentListForm::~InstrumentListForm (void)
99    {
100          delete m_pMapComboBox;          delete m_pMapComboBox;
101  }  }
102    
# Line 102  InstrumentListForm::~InstrumentListForm( Line 104  InstrumentListForm::~InstrumentListForm(
104  // Notify our parent that we're emerging.  // Notify our parent that we're emerging.
105  void InstrumentListForm::showEvent ( QShowEvent *pShowEvent )  void InstrumentListForm::showEvent ( QShowEvent *pShowEvent )
106  {  {
107          //MainForm* pMainForm = MainForm::getInstance();          MainForm* pMainForm = MainForm::getInstance();
108          //if (pMainForm)          if (pMainForm)
109          //      pMainForm->stabilizeForm();                  pMainForm->stabilizeForm();
110    
111          QWidget::showEvent(pShowEvent);          QWidget::showEvent(pShowEvent);
112  }  }
# Line 115  void InstrumentListForm::hideEvent ( QHi Line 117  void InstrumentListForm::hideEvent ( QHi
117  {  {
118          QWidget::hideEvent(pHideEvent);          QWidget::hideEvent(pHideEvent);
119    
120          //MainForm* pMainForm = MainForm::getInstance();          MainForm* pMainForm = MainForm::getInstance();
121          //if (pMainForm)          if (pMainForm)
122          //      pMainForm->stabilizeForm();                  pMainForm->stabilizeForm();
123    }
124    
125    
126    // Just about to notify main-window that we're closing.
127    void InstrumentListForm::closeEvent ( QCloseEvent * /*pCloseEvent*/ )
128    {
129            QWidget::hide();
130    
131            MainForm *pMainForm = MainForm::getInstance();
132            if (pMainForm)
133                    pMainForm->stabilizeForm();
134  }  }
135    
136    
# Line 133  void InstrumentListForm::refreshInstrume Line 146  void InstrumentListForm::refreshInstrume
146                  return;                  return;
147    
148          // Get/save current map selection...          // Get/save current map selection...
149          int iMap = m_pMapComboBox->currentItem();          int iMap = m_pMapComboBox->currentIndex();
150          if (iMap < 0 || m_pMapComboBox->count() < 2)          if (iMap < 0 || m_pMapComboBox->count() < 2)
151                  iMap = pOptions->iMidiMap + 1;                  iMap = pOptions->iMidiMap + 1;
152    
153          // Populate maps list.          // Populate maps list.
154          m_pMapComboBox->clear();          m_pMapComboBox->clear();
155          m_pMapComboBox->insertItem(tr("(All)"));          m_pMapComboBox->addItem(tr("(All)"));
156          m_pMapComboBox->insertStringList(qsamplerInstrument::getMapNames());          m_pMapComboBox->insertItems(1, qsamplerInstrument::getMapNames());
157    
158          // Adjust to saved selection...          // Adjust to saved selection...
159          if (iMap < 0 || iMap >= m_pMapComboBox->count())          if (iMap < 0 || iMap >= m_pMapComboBox->count())
160                  iMap = 0;                  iMap = 0;
161          m_pMapComboBox->setCurrentItem(iMap);          m_pMapComboBox->setCurrentIndex(iMap);
162          m_pMapComboBox->setEnabled(m_pMapComboBox->count() > 1);          m_pMapComboBox->setEnabled(m_pMapComboBox->count() > 1);
163    
164          activateMap(iMap);          activateMap(iMap);
# Line 167  void InstrumentListForm::activateMap ( i Line 180  void InstrumentListForm::activateMap ( i
180          if (iMidiMap >= 0)          if (iMidiMap >= 0)
181                  pOptions->iMidiMap = iMidiMap;                  pOptions->iMidiMap = iMidiMap;
182    
183          model.setMidiMap(iMidiMap);          m_model.setMidiMap(iMidiMap);
184          model.refresh();          m_model.refresh();
185  }  }
186    
187  void InstrumentListForm::editInstrument() {  
188          const QModelIndex index = ui.InstrumentTable->currentIndex();  void InstrumentListForm::editInstrument (void)
189          editInstrument(index);  {
190            editInstrument(m_ui.InstrumentTable->currentIndex());
191  }  }
192    
193  void InstrumentListForm::editInstrument(const QModelIndex& index) {  
194    void InstrumentListForm::editInstrument ( const QModelIndex& index )
195    {
196          if (!index.isValid() || !index.data(Qt::UserRole).isValid())          if (!index.isValid() || !index.data(Qt::UserRole).isValid())
197                  return;                  return;
198    
199          qsamplerInstrument* pInstrument =          qsamplerInstrument* pInstrument
200                  (qsamplerInstrument*) index.data(Qt::UserRole).value<void*>();                  = static_cast<qsamplerInstrument *> (
201                            index.data(Qt::UserRole).value<void *> ());
202    
203          if (!pInstrument) return;          if (pInstrument == NULL)
204                    return;
205    
206          // Save current key values...          // Save current key values...
207          qsamplerInstrument oldInstrument(*pInstrument);          qsamplerInstrument oldInstrument(*pInstrument);
# Line 197  void InstrumentListForm::editInstrument( Line 215  void InstrumentListForm::editInstrument(
215                  if (oldInstrument.map()  == pInstrument->map()  &&                  if (oldInstrument.map()  == pInstrument->map()  &&
216                          oldInstrument.bank() == pInstrument->bank() &&                          oldInstrument.bank() == pInstrument->bank() &&
217                          oldInstrument.prog() == pInstrument->prog()) {                          oldInstrument.prog() == pInstrument->prog()) {
218                          // just update tree item...                          // Just update tree item...
219                          //pItem->update();                          //pItem->update();
220                  } else {                  } else {
221                          // Unmap old instance...                          // Unmap old instance...
222                          oldInstrument.unmapInstrument();                          oldInstrument.unmapInstrument();
223                          // correct the position of the instrument in the model                          // correct the position of the instrument in the model
224                          model.resort(*pInstrument);                          m_model.resort(*pInstrument);
225                  }                  }
226                  // Notify we've changes...                  // Notify we've changes...
227                  emit model.reset();                  emit m_model.reset();
228          }          }
229  }  }
230    
231  void InstrumentListForm::newInstrument() {  
232    void InstrumentListForm::newInstrument (void)
233    {
234          qsamplerInstrument instrument;          qsamplerInstrument instrument;
235    
236          InstrumentForm form(this);          InstrumentForm form(this);
237          form.setup(&instrument);          form.setup(&instrument);
238          if (!form.exec()) return;          if (!form.exec())
239                    return;
240    
241          // Commit...          // Commit...
242          instrument.mapInstrument();          instrument.mapInstrument();
243          // add new item to the table model          // add new item to the table model
244          model.resort(instrument);          m_model.resort(instrument);
245          // Notify we've changes...          // Notify we've changes...
246          //emit model.reset();          //emit model.reset();
247          //FIXME: call above didnt really refresh, so we use this for now ...          //FIXME: call above didnt really refresh, so we use this for now ...
248          refreshInstruments();          refreshInstruments();
249  }  }
250    
251  void InstrumentListForm::deleteInstrument() {  
252          const QModelIndex index = ui.InstrumentTable->currentIndex();  void InstrumentListForm::deleteInstrument (void)
253          if (!index.isValid() || !index.data(Qt::UserRole).isValid()) return;  {
254            const QModelIndex& index = m_ui.InstrumentTable->currentIndex();
255            if (!index.isValid() || !index.data(Qt::UserRole).isValid())
256                    return;
257    
258          qsamplerInstrument* pInstrument =          qsamplerInstrument* pInstrument =
259                  (qsamplerInstrument*) index.data(Qt::UserRole).value<void*>();                  static_cast<qsamplerInstrument*> (
260                            index.data(Qt::UserRole).value<void *> ());
261    
262          if (!pInstrument) return;          if (pInstrument == NULL)
263                    return;
264    
265          pInstrument->unmapInstrument();          pInstrument->unmapInstrument();
266          // let the instrument vanish from the table model          // let the instrument vanish from the table model
267          model.removeInstrument(*pInstrument);          m_model.removeInstrument(*pInstrument);
268          // Notify we've changes...          // Notify we've changes...
269          emit model.reset();          emit m_model.reset();
270  }  }
271    
272  } // namespace QSampler  } // namespace QSampler

Legend:
Removed from v.1492  
changed lines
  Added in v.1523

  ViewVC Help
Powered by ViewVC