/[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 1509 by capela, Thu Nov 22 11:10:44 2007 UTC revision 2068 by capela, Sun Mar 14 16:35:48 2010 UTC
# Line 1  Line 1 
1  // qsamplerInstrumentListForm.cpp  // qsamplerInstrumentListForm.cpp
2  //  //
3  /****************************************************************************  /****************************************************************************
4     Copyright (C) 2003-2007, rncbc aka Rui Nuno Capela. All rights reserved.     Copyright (C) 2003-2010, rncbc aka Rui Nuno Capela. All rights reserved.
5     Copyright (C) 2007, Christian Schoenebeck     Copyright (C) 2007, Christian Schoenebeck
6    
7     This program is free software; you can redistribute it and/or     This program is free software; you can redistribute it and/or
# Line 20  Line 20 
20    
21  *****************************************************************************/  *****************************************************************************/
22    
23    #include "qsamplerAbout.h"
24  #include "qsamplerInstrumentListForm.h"  #include "qsamplerInstrumentListForm.h"
25    
26    #include "qsamplerInstrumentList.h"
27    
28  #include "qsamplerInstrumentForm.h"  #include "qsamplerInstrumentForm.h"
29  #include "qsamplerMainForm.h"  
30  #include "qsamplerOptions.h"  #include "qsamplerOptions.h"
31  #include "qsamplerInstrument.h"  #include "qsamplerInstrument.h"
32    #include "qsamplerMainForm.h"
33    
34    #include <QHeaderView>
35    #include <QMessageBox>
36    #include <QContextMenuEvent>
37    
38    
39  namespace QSampler {  namespace QSampler {
40    
41    //-------------------------------------------------------------------------
42    // QSampler::InstrumentListForm -- Instrument map list form implementation.
43    //
44    
45  InstrumentListForm::InstrumentListForm (  InstrumentListForm::InstrumentListForm (
46          QWidget* pParent, Qt::WindowFlags wflags )          QWidget* pParent, Qt::WindowFlags wflags )
47          : QMainWindow(pParent, wflags)          : QMainWindow(pParent, wflags)
48  {  {
49          m_ui.setupUi(this);          m_ui.setupUi(this);
50    
51            m_pInstrumentListView = new InstrumentListView(this);
52            QMainWindow::setCentralWidget(m_pInstrumentListView);
53    
54          // Setup toolbar widgets.          // Setup toolbar widgets.
55          m_pMapComboBox = new QComboBox(m_ui.InstrumentToolbar);          m_pMapComboBox = new QComboBox(m_ui.instrumentToolbar);
56          m_pMapComboBox->setMinimumWidth(120);          m_pMapComboBox->setMinimumWidth(120);
57          m_pMapComboBox->setEnabled(false);          m_pMapComboBox->setEnabled(false);
58          m_pMapComboBox->setToolTip(tr("Instrument Map"));          m_pMapComboBox->setToolTip(tr("Instrument Map"));
59          m_ui.InstrumentToolbar->addWidget(m_pMapComboBox);          
60            m_ui.instrumentToolbar->addWidget(m_pMapComboBox);
61          m_ui.InstrumentToolbar->addSeparator();          m_ui.instrumentToolbar->addSeparator();
62          m_ui.InstrumentToolbar->addAction(m_ui.newInstrumentAction);          m_ui.instrumentToolbar->addAction(m_ui.newInstrumentAction);
63          m_ui.InstrumentToolbar->addAction(m_ui.editInstrumentAction);          m_ui.instrumentToolbar->addAction(m_ui.editInstrumentAction);
64          m_ui.InstrumentToolbar->addAction(m_ui.deleteInstrumentAction);          m_ui.instrumentToolbar->addAction(m_ui.deleteInstrumentAction);
65          m_ui.InstrumentToolbar->addSeparator();          m_ui.instrumentToolbar->addSeparator();
66          m_ui.InstrumentToolbar->addAction(m_ui.refreshInstrumentsAction);          m_ui.instrumentToolbar->addAction(m_ui.refreshInstrumentsAction);
   
         m_ui.InstrumentTable->setModel(&m_model);  
         m_ui.InstrumentTable->setItemDelegate(&m_delegate);  
67    
68          QObject::connect(m_pMapComboBox,          QObject::connect(m_pMapComboBox,
69                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
70                  SLOT(activateMap(int)));                  SLOT(activateMap(int)));
71            QObject::connect(m_pInstrumentListView->selectionModel(),
72                    SIGNAL(currentRowChanged(const QModelIndex&,const QModelIndex&)),
73                    SLOT(stabilizeForm()));
74          QObject::connect(          QObject::connect(
75                  m_ui.refreshInstrumentsAction,                  m_pInstrumentListView,
                 SIGNAL(triggered()),  
                 SLOT(refreshInstruments(void)));  
         QObject::connect(  
                 m_ui.InstrumentTable,  
76                  SIGNAL(activated(const QModelIndex&)),                  SIGNAL(activated(const QModelIndex&)),
77                  SLOT(editInstrument(const QModelIndex&)));                  SLOT(editInstrument(const QModelIndex&)));
78          QObject::connect(          QObject::connect(
# Line 76  InstrumentListForm::InstrumentListForm ( Line 87  InstrumentListForm::InstrumentListForm (
87                  m_ui.editInstrumentAction,                  m_ui.editInstrumentAction,
88                  SIGNAL(triggered()),                  SIGNAL(triggered()),
89                  SLOT(editInstrument()));                  SLOT(editInstrument()));
90            QObject::connect(
91                    m_ui.refreshInstrumentsAction,
92                    SIGNAL(triggered()),
93                    SLOT(refreshInstruments()));
94    
95          MainForm *pMainForm = MainForm::getInstance();          // Things must be stable from the start.
96          if (pMainForm) {          stabilizeForm();
                 QObject::connect(&m_model,  
                         SIGNAL(instrumentsChanged()),  
                         pMainForm, SLOT(sessionDirty()));  
         }  
97  }  }
98    
99    
100  InstrumentListForm::~InstrumentListForm (void)  InstrumentListForm::~InstrumentListForm (void)
101  {  {
102          delete m_pMapComboBox;          delete m_pMapComboBox;
103            delete m_pInstrumentListView;
104  }  }
105    
106    
# Line 132  void InstrumentListForm::refreshInstrume Line 144  void InstrumentListForm::refreshInstrume
144          if (pMainForm == NULL)          if (pMainForm == NULL)
145                  return;                  return;
146    
147          qsamplerOptions *pOptions = pMainForm->options();          Options *pOptions = pMainForm->options();
148          if (pOptions == NULL)          if (pOptions == NULL)
149                  return;                  return;
150    
# Line 144  void InstrumentListForm::refreshInstrume Line 156  void InstrumentListForm::refreshInstrume
156          // Populate maps list.          // Populate maps list.
157          m_pMapComboBox->clear();          m_pMapComboBox->clear();
158          m_pMapComboBox->addItem(tr("(All)"));          m_pMapComboBox->addItem(tr("(All)"));
159          m_pMapComboBox->insertItems(1, qsamplerInstrument::getMapNames());          m_pMapComboBox->insertItems(1, Instrument::getMapNames());
160    
161          // Adjust to saved selection...          // Adjust to saved selection...
162          if (iMap < 0 || iMap >= m_pMapComboBox->count())          if (iMap < 0 || iMap >= m_pMapComboBox->count())
# Line 163  void InstrumentListForm::activateMap ( i Line 175  void InstrumentListForm::activateMap ( i
175          if (pMainForm == NULL)          if (pMainForm == NULL)
176                  return;                  return;
177    
178          qsamplerOptions *pOptions = pMainForm->options();          Options *pOptions = pMainForm->options();
179          if (pOptions == NULL)          if (pOptions == NULL)
180                  return;                  return;
181    
# Line 171  void InstrumentListForm::activateMap ( i Line 183  void InstrumentListForm::activateMap ( i
183          if (iMidiMap >= 0)          if (iMidiMap >= 0)
184                  pOptions->iMidiMap = iMidiMap;                  pOptions->iMidiMap = iMidiMap;
185    
186          m_model.setMidiMap(iMidiMap);          m_pInstrumentListView->setMidiMap(iMidiMap);
187          m_model.refresh();          m_pInstrumentListView->refresh();
188    
189            stabilizeForm();
190    }
191    
192    
193    void InstrumentListForm::newInstrument (void)
194    {
195            Instrument instrument;
196    
197            InstrumentForm form(this);
198            form.setup(&instrument);
199            if (!form.exec())
200                    return;
201    
202            // Commit...
203            instrument.mapInstrument();
204    
205            // add new item to the table model
206            m_pInstrumentListView->addInstrument(
207                    instrument.map(),
208                    instrument.bank(),
209                    instrument.prog());
210    
211            stabilizeForm();
212  }  }
213    
214    
215  void InstrumentListForm::editInstrument (void)  void InstrumentListForm::editInstrument (void)
216  {  {
217          editInstrument(m_ui.InstrumentTable->currentIndex());          editInstrument(m_pInstrumentListView->currentIndex());
218  }  }
219    
220    
221  void InstrumentListForm::editInstrument ( const QModelIndex& index )  void InstrumentListForm::editInstrument ( const QModelIndex& index )
222  {  {
223          if (!index.isValid() || !index.data(Qt::UserRole).isValid())          if (!index.isValid())
224                  return;                  return;
225    
226          qsamplerInstrument* pInstrument          Instrument *pInstrument
227                  = static_cast<qsamplerInstrument *> (                  = static_cast<Instrument *> (index.internalPointer());
                         index.data(Qt::UserRole).value<void *> ());  
   
228          if (pInstrument == NULL)          if (pInstrument == NULL)
229                  return;                  return;
230    
231          // Save current key values...          // Save current key values...
232          qsamplerInstrument oldInstrument(*pInstrument);          int iMap  = pInstrument->map();
233          // Do the edit dance...          int iBank = pInstrument->bank();
234          InstrumentForm form(this);          int iProg = pInstrument->prog();
         form.setup(pInstrument);  
         if (form.exec()) {  
                 // Commit...  
                 pInstrument->mapInstrument();  
                 // Check whether we changed instrument key...  
                 if (oldInstrument.map()  == pInstrument->map()  &&  
                         oldInstrument.bank() == pInstrument->bank() &&  
                         oldInstrument.prog() == pInstrument->prog()) {  
                         // just update tree item...  
                         //pItem->update();  
                 } else {  
                         // Unmap old instance...  
                         oldInstrument.unmapInstrument();  
                         // correct the position of the instrument in the model  
                         m_model.resort(*pInstrument);  
                 }  
                 // Notify we've changes...  
                 emit m_model.reset();  
         }  
 }  
235    
236            Instrument instrument(iMap, iBank, iProg);
237    
238  void InstrumentListForm::newInstrument (void)          // Do the edit dance...
 {  
         qsamplerInstrument instrument;  
   
239          InstrumentForm form(this);          InstrumentForm form(this);
240          form.setup(&instrument);          form.setup(&instrument);
241          if (!form.exec())          if (!form.exec())
242                  return;                  return;
243            
244          // Commit...          // Commit...
245          instrument.mapInstrument();          instrument.mapInstrument();
246          // add new item to the table model  
247          m_model.resort(instrument);          // Check whether we changed instrument key...
248          // Notify we've changes...          if (instrument.map()  == iMap  &&
249          //emit model.reset();                  instrument.bank() == iBank &&
250          //FIXME: call above didnt really refresh, so we use this for now ...                  instrument.prog() == iProg) {
251          refreshInstruments();                  // Just update tree item...
252                    //pItem->update();
253            } else {
254                    // Unmap old instance...
255                    Instrument(iMap, iBank, iProg).unmapInstrument();
256                    // Correct the position of the instrument in the model
257                    m_pInstrumentListView->updateInstrument(pInstrument);
258            }
259    
260            stabilizeForm();
261  }  }
262    
263    
264  void InstrumentListForm::deleteInstrument (void)  void InstrumentListForm::deleteInstrument (void)
265  {  {
266          const QModelIndex& index = m_ui.InstrumentTable->currentIndex();          const QModelIndex& index = m_pInstrumentListView->currentIndex();
267          if (!index.isValid() || !index.data(Qt::UserRole).isValid())          if (!index.isValid())
268                  return;                  return;
269    
270          qsamplerInstrument* pInstrument =          Instrument *pInstrument
271                  static_cast<qsamplerInstrument*> (                  = static_cast<Instrument *> (index.internalPointer());
                         index.data(Qt::UserRole).value<void *> ());  
   
272          if (pInstrument == NULL)          if (pInstrument == NULL)
273                  return;                  return;
274    
275            MainForm *pMainForm = MainForm::getInstance();
276            if (pMainForm == NULL)
277                    return;
278    
279            // Prompt user if this is for real...
280            Options *pOptions = pMainForm->options();
281            if (pOptions && pOptions->bConfirmRemove) {
282                    if (QMessageBox::warning(this,
283                            QSAMPLER_TITLE ": " + tr("Warning"),
284                            tr("About to delete instrument map entry:\n\n"
285                            "%1\n\n"
286                            "Are you sure?")
287                            .arg(pInstrument->name()),
288                            QMessageBox::Ok | QMessageBox::Cancel)
289                            == QMessageBox::Cancel)
290                            return;
291            }
292    
293          pInstrument->unmapInstrument();          pInstrument->unmapInstrument();
294    
295          // let the instrument vanish from the table model          // let the instrument vanish from the table model
296          m_model.removeInstrument(*pInstrument);          m_pInstrumentListView->removeInstrument(pInstrument);
297          // Notify we've changes...  
298          emit m_model.reset();          stabilizeForm();
299  }  }
300    
301    
302    // Update form actions enablement...
303    void InstrumentListForm::stabilizeForm (void)
304    {
305            MainForm *pMainForm = MainForm::getInstance();
306    
307            bool bEnabled = (pMainForm && pMainForm->client());
308            m_ui.newInstrumentAction->setEnabled(bEnabled);
309            const QModelIndex& index = m_pInstrumentListView->currentIndex();
310            bEnabled = (bEnabled && index.isValid());
311            m_ui.editInstrumentAction->setEnabled(bEnabled);
312            m_ui.deleteInstrumentAction->setEnabled(bEnabled);
313    }
314    
315    
316    // Context menu request.
317    void InstrumentListForm::contextMenuEvent (
318            QContextMenuEvent *pContextMenuEvent )
319    {
320            QMenu menu(this);
321    
322            menu.addAction(m_ui.newInstrumentAction);
323            menu.addSeparator();
324            menu.addAction(m_ui.editInstrumentAction);
325            menu.addAction(m_ui.deleteInstrumentAction);
326            menu.addSeparator();
327            menu.addAction(m_ui.refreshInstrumentsAction);
328    
329            menu.exec(pContextMenuEvent->globalPos());
330    }
331    
332    
333  } // namespace QSampler  } // namespace QSampler
334    
335    

Legend:
Removed from v.1509  
changed lines
  Added in v.2068

  ViewVC Help
Powered by ViewVC