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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2067 - (hide annotations) (download)
Sat Mar 13 20:14:38 2010 UTC (14 years ago) by capela
File size: 8545 byte(s)
- Maybe fixed instrument list view/model for Qt >= 4.6.

1 capela 1464 // qsamplerInstrumentListForm.cpp
2     //
3     /****************************************************************************
4 capela 2064 Copyright (C) 2003-2010, rncbc aka Rui Nuno Capela. All rights reserved.
5 capela 1464 Copyright (C) 2007, Christian Schoenebeck
6    
7     This program is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License
9     as published by the Free Software Foundation; either version 2
10     of the License, or (at your option) any later version.
11    
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     GNU General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20    
21     *****************************************************************************/
22    
23 capela 1513 #include "qsamplerAbout.h"
24 schoenebeck 1461 #include "qsamplerInstrumentListForm.h"
25    
26 capela 2064 #include "qsamplerInstrumentList.h"
27    
28 schoenebeck 1492 #include "qsamplerInstrumentForm.h"
29 capela 1513
30 schoenebeck 1461 #include "qsamplerOptions.h"
31     #include "qsamplerInstrument.h"
32 capela 1513 #include "qsamplerMainForm.h"
33 schoenebeck 1461
34 capela 1519 #include <QHeaderView>
35 capela 1528 #include <QMessageBox>
36 capela 2066 #include <QContextMenuEvent>
37 schoenebeck 1461
38 capela 1519
39 schoenebeck 1461 namespace QSampler {
40    
41 capela 1558 //-------------------------------------------------------------------------
42     // QSampler::InstrumentListForm -- Instrument map list form implementation.
43     //
44    
45 capela 1504 InstrumentListForm::InstrumentListForm (
46     QWidget* pParent, Qt::WindowFlags wflags )
47     : QMainWindow(pParent, wflags)
48 capela 1473 {
49 capela 1509 m_ui.setupUi(this);
50 schoenebeck 1461
51 capela 2066 m_pInstrumentListView = new InstrumentListView(this);
52     QMainWindow::setCentralWidget(m_pInstrumentListView);
53    
54 capela 1509 // Setup toolbar widgets.
55 capela 2065 m_pMapComboBox = new QComboBox(m_ui.instrumentToolbar);
56 capela 1509 m_pMapComboBox->setMinimumWidth(120);
57     m_pMapComboBox->setEnabled(false);
58     m_pMapComboBox->setToolTip(tr("Instrument Map"));
59 capela 2066
60 capela 2065 m_ui.instrumentToolbar->addWidget(m_pMapComboBox);
61     m_ui.instrumentToolbar->addSeparator();
62     m_ui.instrumentToolbar->addAction(m_ui.newInstrumentAction);
63     m_ui.instrumentToolbar->addAction(m_ui.editInstrumentAction);
64     m_ui.instrumentToolbar->addAction(m_ui.deleteInstrumentAction);
65     m_ui.instrumentToolbar->addSeparator();
66     m_ui.instrumentToolbar->addAction(m_ui.refreshInstrumentsAction);
67 schoenebeck 1461
68     QObject::connect(m_pMapComboBox,
69     SIGNAL(activated(int)),
70     SLOT(activateMap(int)));
71 capela 2066 QObject::connect(m_pInstrumentListView->selectionModel(),
72     SIGNAL(currentRowChanged(const QModelIndex&,const QModelIndex&)),
73 capela 1528 SLOT(stabilizeForm()));
74     QObject::connect(
75 capela 2064 m_pInstrumentListView,
76 capela 2067 SIGNAL(activated(const QModelIndex&)),
77 capela 1509 SLOT(editInstrument(const QModelIndex&)));
78 capela 1504 QObject::connect(
79 capela 1509 m_ui.newInstrumentAction,
80 schoenebeck 1492 SIGNAL(triggered()),
81 capela 1509 SLOT(newInstrument()));
82 capela 1504 QObject::connect(
83 capela 1509 m_ui.deleteInstrumentAction,
84 schoenebeck 1492 SIGNAL(triggered()),
85 capela 1509 SLOT(deleteInstrument()));
86 capela 1504 QObject::connect(
87 capela 1509 m_ui.editInstrumentAction,
88 schoenebeck 1492 SIGNAL(triggered()),
89 capela 1509 SLOT(editInstrument()));
90 capela 1528 QObject::connect(
91     m_ui.refreshInstrumentsAction,
92     SIGNAL(triggered()),
93     SLOT(refreshInstruments()));
94 capela 1509
95 capela 1528 // Things must be stable from the start.
96     stabilizeForm();
97 schoenebeck 1461 }
98    
99 capela 1504
100     InstrumentListForm::~InstrumentListForm (void)
101     {
102 capela 2066 delete m_pMapComboBox;
103 capela 2064 delete m_pInstrumentListView;
104 schoenebeck 1461 }
105    
106    
107     // Notify our parent that we're emerging.
108     void InstrumentListForm::showEvent ( QShowEvent *pShowEvent )
109     {
110 capela 1504 MainForm* pMainForm = MainForm::getInstance();
111     if (pMainForm)
112     pMainForm->stabilizeForm();
113 schoenebeck 1461
114     QWidget::showEvent(pShowEvent);
115     }
116    
117    
118     // Notify our parent that we're closing.
119     void InstrumentListForm::hideEvent ( QHideEvent *pHideEvent )
120     {
121     QWidget::hideEvent(pHideEvent);
122    
123 capela 1504 MainForm* pMainForm = MainForm::getInstance();
124     if (pMainForm)
125     pMainForm->stabilizeForm();
126 schoenebeck 1461 }
127    
128    
129 capela 1504 // Just about to notify main-window that we're closing.
130     void InstrumentListForm::closeEvent ( QCloseEvent * /*pCloseEvent*/ )
131     {
132     QWidget::hide();
133    
134     MainForm *pMainForm = MainForm::getInstance();
135     if (pMainForm)
136     pMainForm->stabilizeForm();
137     }
138    
139    
140 schoenebeck 1461 // Refresh all instrument list and views.
141     void InstrumentListForm::refreshInstruments (void)
142     {
143     MainForm* pMainForm = MainForm::getInstance();
144     if (pMainForm == NULL)
145     return;
146    
147 capela 1558 Options *pOptions = pMainForm->options();
148 schoenebeck 1461 if (pOptions == NULL)
149     return;
150    
151     // Get/save current map selection...
152 capela 1499 int iMap = m_pMapComboBox->currentIndex();
153 schoenebeck 1461 if (iMap < 0 || m_pMapComboBox->count() < 2)
154     iMap = pOptions->iMidiMap + 1;
155    
156     // Populate maps list.
157     m_pMapComboBox->clear();
158 capela 1499 m_pMapComboBox->addItem(tr("(All)"));
159 capela 1558 m_pMapComboBox->insertItems(1, Instrument::getMapNames());
160 schoenebeck 1461
161     // Adjust to saved selection...
162     if (iMap < 0 || iMap >= m_pMapComboBox->count())
163     iMap = 0;
164 capela 1499 m_pMapComboBox->setCurrentIndex(iMap);
165 schoenebeck 1461 m_pMapComboBox->setEnabled(m_pMapComboBox->count() > 1);
166    
167     activateMap(iMap);
168     }
169    
170    
171     // Refresh instrument maps selector.
172     void InstrumentListForm::activateMap ( int iMap )
173     {
174     MainForm* pMainForm = MainForm::getInstance();
175     if (pMainForm == NULL)
176     return;
177    
178 capela 1558 Options *pOptions = pMainForm->options();
179 schoenebeck 1461 if (pOptions == NULL)
180     return;
181    
182     int iMidiMap = iMap - 1;
183     if (iMidiMap >= 0)
184     pOptions->iMidiMap = iMidiMap;
185    
186 capela 2064 m_pInstrumentListView->setMidiMap(iMidiMap);
187     m_pInstrumentListView->refresh();
188 capela 1528
189     stabilizeForm();
190 schoenebeck 1461 }
191    
192 capela 1504
193 capela 2067 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 capela 1504 void InstrumentListForm::editInstrument (void)
216     {
217 capela 2064 editInstrument(m_pInstrumentListView->currentIndex());
218 schoenebeck 1492 }
219    
220 capela 1504
221     void InstrumentListForm::editInstrument ( const QModelIndex& index )
222     {
223 capela 2064 if (!index.isValid())
224 schoenebeck 1492 return;
225    
226 capela 2064 Instrument *pInstrument
227     = static_cast<Instrument *> (index.internalPointer());
228     if (pInstrument == NULL)
229     return;
230 schoenebeck 1492
231     // Save current key values...
232 capela 2065 int iMap = pInstrument->map();
233     int iBank = pInstrument->bank();
234     int iProg = pInstrument->prog();
235 capela 2064
236 capela 2065 Instrument instrument(iMap, iBank, iProg);
237    
238 schoenebeck 1492 // Do the edit dance...
239     InstrumentForm form(this);
240 capela 2065 form.setup(&instrument);
241 capela 1504 if (!form.exec())
242     return;
243 capela 2067
244 schoenebeck 1492 // Commit...
245     instrument.mapInstrument();
246 capela 2064
247 capela 2067 // Check whether we changed instrument key...
248     if (instrument.map() == iMap &&
249     instrument.bank() == iBank &&
250     instrument.prog() == iProg) {
251     // 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 capela 2065
260     stabilizeForm();
261 schoenebeck 1492 }
262    
263    
264 capela 1504 void InstrumentListForm::deleteInstrument (void)
265     {
266 capela 2064 const QModelIndex& index = m_pInstrumentListView->currentIndex();
267     if (!index.isValid())
268 capela 1504 return;
269    
270 capela 2064 Instrument *pInstrument
271     = static_cast<Instrument *> (index.internalPointer());
272 capela 1504 if (pInstrument == NULL)
273     return;
274 schoenebeck 1492
275 capela 1528 MainForm *pMainForm = MainForm::getInstance();
276     if (pMainForm == NULL)
277     return;
278    
279     // Prompt user if this is for real...
280 capela 1558 Options *pOptions = pMainForm->options();
281 capela 1528 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 capela 1840 QMessageBox::Ok | QMessageBox::Cancel)
289     == QMessageBox::Cancel)
290 capela 1528 return;
291     }
292    
293 schoenebeck 1492 pInstrument->unmapInstrument();
294 capela 2064
295 schoenebeck 1492 // let the instrument vanish from the table model
296 capela 2064 m_pInstrumentListView->removeInstrument(pInstrument);
297 capela 2065
298     stabilizeForm();
299 schoenebeck 1492 }
300    
301 capela 1528
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 capela 2064 const QModelIndex& index = m_pInstrumentListView->currentIndex();
310 capela 1528 bEnabled = (bEnabled && index.isValid());
311     m_ui.editInstrumentAction->setEnabled(bEnabled);
312     m_ui.deleteInstrumentAction->setEnabled(bEnabled);
313     }
314    
315    
316 capela 2066 // Context menu request.
317     void InstrumentListForm::contextMenuEvent (
318     QContextMenuEvent *pContextMenuEvent )
319 capela 1528 {
320 capela 2067 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 capela 1528 }
331    
332    
333 schoenebeck 1461 } // namespace QSampler
334 capela 1464
335    
336     // end of qsamplerInstrumentListForm.cpp

  ViewVC Help
Powered by ViewVC