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

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

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

revision 1461 by schoenebeck, Sun Oct 28 23:30:36 2007 UTC revision 1513 by capela, Fri Nov 23 09:32:06 2007 UTC
# Line 1  Line 1 
1  #include "qsamplerInstrumentForm.h"  // qsamplerInstrumentForm.cpp
2    //
3    /****************************************************************************
4       Copyright (C) 2003-2007, rncbc aka Rui Nuno Capela. All rights reserved.
5       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  #include "qsamplerAbout.h"  #include "qsamplerAbout.h"
24    #include "qsamplerInstrumentForm.h"
25    
26    #include "qsamplerOptions.h"
27    #include "qsamplerChannel.h"
28  #include "qsamplerMainForm.h"  #include "qsamplerMainForm.h"
29    
30    #include <QFileDialog>
31    #include <QMessageBox>
32    
33  // Needed for lroundf()  // Needed for lroundf()
34  #include <math.h>  #include <math.h>
35    
36    
37  namespace QSampler {  namespace QSampler {
38    
39  #ifndef CONFIG_ROUND  #ifndef CONFIG_ROUND
# Line 18  static inline long lroundf ( float x ) Line 46  static inline long lroundf ( float x )
46  }  }
47  #endif  #endif
48    
49  InstrumentForm::InstrumentForm(QWidget* parent) : QDialog(parent) {  InstrumentForm::InstrumentForm ( QWidget* pParent )
50      ui.setupUi(this);          : QDialog(pParent)
51    {
52            m_ui.setupUi(this);
53    
54          // Initialize locals.          // Initialize locals.
55          m_pInstrument = NULL;          m_pInstrument = NULL;
# Line 30  InstrumentForm::InstrumentForm(QWidget* Line 60  InstrumentForm::InstrumentForm(QWidget*
60    
61          // Try to restore normal window positioning.          // Try to restore normal window positioning.
62          adjustSize();          adjustSize();
63    
64    
65            QObject::connect(m_ui.MapComboBox,
66                    SIGNAL(activated(int)),
67                    SLOT(changed()));
68            QObject::connect(m_ui.BankSpinBox,
69                    SIGNAL(valueChanged(int)),
70                    SLOT(changed()));
71            QObject::connect(m_ui.ProgSpinBox,
72                    SIGNAL(valueChanged(int)),
73                    SLOT(changed()));
74            QObject::connect(m_ui.NameLineEdit,
75                    SIGNAL(textChanged(const QString&)),
76                    SLOT(nameChanged(const QString&)));
77            QObject::connect(m_ui.EngineNameComboBox,
78                    SIGNAL(activated(int)),
79                    SLOT(changed()));
80            QObject::connect(m_ui.InstrumentFileComboBox,
81                    SIGNAL(activated(const QString&)),
82                    SLOT(updateInstrumentName()));
83            QObject::connect(m_ui.InstrumentFileToolButton,
84                    SIGNAL(clicked()),
85                    SLOT(openInstrumentFile()));
86            QObject::connect(m_ui.InstrumentNrComboBox,
87                    SIGNAL(activated(int)),
88                    SLOT(instrumentNrChanged()));
89            QObject::connect(m_ui.VolumeSpinBox,
90                    SIGNAL(valueChanged(int)),
91                    SLOT(changed()));
92            QObject::connect(m_ui.LoadModeComboBox,
93                    SIGNAL(activated(int)),
94                    SLOT(changed()));
95            QObject::connect(m_ui.OkPushButton,
96                    SIGNAL(clicked()),
97                    SLOT(accept()));
98            QObject::connect(m_ui.CancelPushButton,
99                    SIGNAL(clicked()),
100                    SLOT(reject()));
101  }  }
102    
103  InstrumentForm::~InstrumentForm() {  
104    InstrumentForm::~InstrumentForm (void)
105    {
106  }  }
107    
108    
109  // Channel dialog setup formal initializer.  // Channel dialog setup formal initializer.
110  void InstrumentForm::setup ( qsamplerInstrument *pInstrument )  void InstrumentForm::setup ( qsamplerInstrument *pInstrument )
111  {  {
# Line 69  void InstrumentForm::setup ( qsamplerIns Line 140  void InstrumentForm::setup ( qsamplerIns
140          m_iDirtySetup++;          m_iDirtySetup++;
141    
142          // Load combo box history...          // Load combo box history...
143          pOptions->loadComboBoxHistory(ui.InstrumentFileComboBox);          pOptions->loadComboBoxHistory(m_ui.InstrumentFileComboBox);
144    
145          // Populate maps list.          // Populate maps list.
146          ui.MapComboBox->clear();          m_ui.MapComboBox->clear();
147          ui.MapComboBox->insertStringList(qsamplerInstrument::getMapNames());          m_ui.MapComboBox->insertItems(0, qsamplerInstrument::getMapNames());
148    
149          // Populate Engines list.          // Populate Engines list.
150          const char **ppszEngines = ::lscp_list_available_engines(pMainForm->client());          const char **ppszEngines
151                    = ::lscp_list_available_engines(pMainForm->client());
152          if (ppszEngines) {          if (ppszEngines) {
153                  ui.EngineNameComboBox->clear();                  m_ui.EngineNameComboBox->clear();
154                  for (int iEngine = 0; ppszEngines[iEngine]; iEngine++)                  for (int iEngine = 0; ppszEngines[iEngine]; iEngine++)
155                          ui.EngineNameComboBox->insertItem(ppszEngines[iEngine]);                          m_ui.EngineNameComboBox->addItem(ppszEngines[iEngine]);
156          }          }
157          else pMainForm->appendMessagesClient("lscp_list_available_engines");          else pMainForm->appendMessagesClient("lscp_list_available_engines");
158    
# Line 92  void InstrumentForm::setup ( qsamplerIns Line 164  void InstrumentForm::setup ( qsamplerIns
164          if (iMap < 0)          if (iMap < 0)
165                  iMap = 0;                  iMap = 0;
166          const QString& sMapName = qsamplerInstrument::getMapName(iMap);          const QString& sMapName = qsamplerInstrument::getMapName(iMap);
167          if (!sMapName.isEmpty())          if (!sMapName.isEmpty()) {
168                  ui.MapComboBox->setCurrentText(sMapName);                  m_ui.MapComboBox->setItemText(
169                            m_ui.MapComboBox->currentIndex(),
170                            sMapName);
171            }
172          // It might be no maps around...          // It might be no maps around...
173          bool bMapEnabled = (ui.MapComboBox->count() > 0);          bool bMapEnabled = (m_ui.MapComboBox->count() > 0);
174          ui.MapTextLabel->setEnabled(bMapEnabled);          m_ui.MapTextLabel->setEnabled(bMapEnabled);
175          ui.MapComboBox->setEnabled(bMapEnabled);          m_ui.MapComboBox->setEnabled(bMapEnabled);
176    
177          // Instrument bank/program...          // Instrument bank/program...
178          int iBank = (bNew ? pOptions->iMidiBank : m_pInstrument->bank());          int iBank = (bNew ? pOptions->iMidiBank : m_pInstrument->bank());
# Line 106  void InstrumentForm::setup ( qsamplerIns Line 181  void InstrumentForm::setup ( qsamplerIns
181                  iProg = 1;                  iProg = 1;
182                  iBank++;                  iBank++;
183          }          }
184          ui.BankSpinBox->setValue(iBank);          m_ui.BankSpinBox->setValue(iBank);
185          ui.ProgSpinBox->setValue(iProg);          m_ui.ProgSpinBox->setValue(iProg);
186    
187          // Instrument name...          // Instrument name...
188          ui.NameLineEdit->setText(m_pInstrument->name());          m_ui.NameLineEdit->setText(m_pInstrument->name());
189    
190          // Engine name...          // Engine name...
191          QString sEngineName = m_pInstrument->engineName();          QString sEngineName = m_pInstrument->engineName();
# Line 118  void InstrumentForm::setup ( qsamplerIns Line 193  void InstrumentForm::setup ( qsamplerIns
193                  sEngineName = pOptions->sEngineName;                  sEngineName = pOptions->sEngineName;
194          if (sEngineName.isEmpty())          if (sEngineName.isEmpty())
195                  sEngineName = qsamplerChannel::noEngineName();                  sEngineName = qsamplerChannel::noEngineName();
196          if (ui.EngineNameComboBox->findText(sEngineName,          if (m_ui.EngineNameComboBox->findText(sEngineName,
197                          Qt::MatchExactly | Qt::MatchCaseSensitive) == 0) {                          Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) {
198                  ui.EngineNameComboBox->insertItem(sEngineName);                  m_ui.EngineNameComboBox->addItem(sEngineName);
199          }          }
200          ui.EngineNameComboBox->setCurrentText(sEngineName);          m_ui.EngineNameComboBox->setCurrentIndex(
201                    m_ui.EngineNameComboBox->findText(sEngineName,
202                            Qt::MatchExactly | Qt::MatchCaseSensitive));
203    
204          // Instrument filename and index...          // Instrument filename and index...
205          QString sInstrumentFile = m_pInstrument->instrumentFile();          QString sInstrumentFile = m_pInstrument->instrumentFile();
206          if (sInstrumentFile.isEmpty())          if (sInstrumentFile.isEmpty())
207                  sInstrumentFile = qsamplerChannel::noInstrumentName();                  sInstrumentFile = qsamplerChannel::noInstrumentName();
208          ui.InstrumentFileComboBox->setCurrentText(sInstrumentFile);          m_ui.InstrumentFileComboBox->setEditText(sInstrumentFile);
209          ui.InstrumentNrComboBox->clear();          m_ui.InstrumentNrComboBox->clear();
210          ui.InstrumentNrComboBox->insertStringList(          m_ui.InstrumentNrComboBox->insertItems(0,
211                  qsamplerChannel::getInstrumentList(sInstrumentFile,                  qsamplerChannel::getInstrumentList(sInstrumentFile,
212                  pOptions->bInstrumentNames));                  pOptions->bInstrumentNames));
213          ui.InstrumentNrComboBox->setCurrentItem(m_pInstrument->instrumentNr());          m_ui.InstrumentNrComboBox->setCurrentIndex(m_pInstrument->instrumentNr());
214    
215          // Instrument volume....          // Instrument volume....
216          int iVolume = (bNew ? pOptions->iVolume :          int iVolume = (bNew ? pOptions->iVolume :
217                  ::lroundf(100.0f * m_pInstrument->volume()));                  ::lroundf(100.0f * m_pInstrument->volume()));
218          ui.VolumeSpinBox->setValue(iVolume);          m_ui.VolumeSpinBox->setValue(iVolume);
219    
220          // Instrument load mode...          // Instrument load mode...
221          int iLoadMode = (bNew ? pOptions->iLoadMode :          int iLoadMode = (bNew ? pOptions->iLoadMode :
222                  m_pInstrument->loadMode());                  m_pInstrument->loadMode());
223          ui.LoadModeComboBox->setCurrentItem(iLoadMode);          m_ui.LoadModeComboBox->setCurrentIndex(iLoadMode);
224    
225          // Done.          // Done.
226          m_iDirtySetup--;          m_iDirtySetup--;
# Line 178  void InstrumentForm::openInstrumentFile Line 256  void InstrumentForm::openInstrumentFile
256    
257          // FIXME: the instrument file filters should be restricted,          // FIXME: the instrument file filters should be restricted,
258          // depending on the current engine.          // depending on the current engine.
259          QString sInstrumentFile = QFileDialog::getOpenFileName(          QString sInstrumentFile = QFileDialog::getOpenFileName(this,
260                  pOptions->sInstrumentDir,                   // Start here.                  QSAMPLER_TITLE ": " + tr("Instrument files"), // Caption.
261                  tr("Instrument files") + " (*.gig *.dls)",  // Filter (GIG and DLS files)                  pOptions->sInstrumentDir,                 // Start here.
262                  this, 0,                                    // Parent and name (none)                  tr("Instrument files") + " (*.gig *.dls)" // Filter (GIG and DLS files)
                 QSAMPLER_TITLE ": " + tr("Instrument files")// Caption.  
263          );          );
264    
265          if (sInstrumentFile.isEmpty())          if (sInstrumentFile.isEmpty())
266                  return;                  return;
267    
268          ui.InstrumentFileComboBox->setCurrentText(sInstrumentFile);          m_ui.InstrumentFileComboBox->setEditText(sInstrumentFile);
269          updateInstrumentName();          updateInstrumentName();
270  }  }
271    
# Line 206  void InstrumentForm::updateInstrumentNam Line 283  void InstrumentForm::updateInstrumentNam
283    
284          // TODO: this better idea would be to use libgig          // TODO: this better idea would be to use libgig
285          // to retrieve the REAL instrument names.          // to retrieve the REAL instrument names.
286          ui.InstrumentNrComboBox->clear();          m_ui.InstrumentNrComboBox->clear();
287          ui.InstrumentNrComboBox->insertStringList(          m_ui.InstrumentNrComboBox->insertItems(0,
288                  qsamplerChannel::getInstrumentList(                  qsamplerChannel::getInstrumentList(
289                          ui.InstrumentFileComboBox->currentText(),                          m_ui.InstrumentFileComboBox->currentText(),
290                          pOptions->bInstrumentNames)                          pOptions->bInstrumentNames)
291          );          );
292    
# Line 223  void InstrumentForm::instrumentNrChanged Line 300  void InstrumentForm::instrumentNrChanged
300          if (m_iDirtySetup > 0)          if (m_iDirtySetup > 0)
301                  return;                  return;
302    
303          if (ui.NameLineEdit->text().isEmpty() || m_iDirtyName == 0) {          if (m_ui.NameLineEdit->text().isEmpty() || m_iDirtyName == 0) {
304                  ui.NameLineEdit->setText(ui.InstrumentNrComboBox->currentText());                  m_ui.NameLineEdit->setText(m_ui.InstrumentNrComboBox->currentText());
305                  m_iDirtyName = 0;                  m_iDirtyName = 0;
306          }          }
307    
# Line 249  void InstrumentForm::accept (void) Line 326  void InstrumentForm::accept (void)
326                  return;                  return;
327    
328          if (m_iDirtyCount > 0) {          if (m_iDirtyCount > 0) {
329                  m_pInstrument->setMap(ui.MapComboBox->currentItem());                  m_pInstrument->setMap(m_ui.MapComboBox->currentIndex());
330                  m_pInstrument->setBank(ui.BankSpinBox->value());                  m_pInstrument->setBank(m_ui.BankSpinBox->value());
331                  m_pInstrument->setProg(ui.ProgSpinBox->value() - 1);                  m_pInstrument->setProg(m_ui.ProgSpinBox->value() - 1);
332                  m_pInstrument->setName(ui.NameLineEdit->text());                  m_pInstrument->setName(m_ui.NameLineEdit->text());
333                  m_pInstrument->setEngineName(ui.EngineNameComboBox->currentText());                  m_pInstrument->setEngineName(m_ui.EngineNameComboBox->currentText());
334                  m_pInstrument->setInstrumentFile(ui.InstrumentFileComboBox->currentText());                  m_pInstrument->setInstrumentFile(m_ui.InstrumentFileComboBox->currentText());
335                  m_pInstrument->setInstrumentNr(ui.InstrumentNrComboBox->currentItem());                  m_pInstrument->setInstrumentNr(m_ui.InstrumentNrComboBox->currentIndex());
336                  m_pInstrument->setVolume(0.01f * float(ui.VolumeSpinBox->value()));                  m_pInstrument->setVolume(0.01f * float(m_ui.VolumeSpinBox->value()));
337                  m_pInstrument->setLoadMode(ui.LoadModeComboBox->currentItem());                  m_pInstrument->setLoadMode(m_ui.LoadModeComboBox->currentIndex());
338          }          }
339    
340          // Save default engine name, instrument directory and history...          // Save default engine name, instrument directory and history...
341          pOptions->sInstrumentDir = QFileInfo(ui.InstrumentFileComboBox->currentText()).dirPath(true);          pOptions->sInstrumentDir = QFileInfo(
342          pOptions->sEngineName = ui.EngineNameComboBox->currentText();                  m_ui.InstrumentFileComboBox->currentText()).dir().absolutePath();
343          pOptions->iMidiMap  = ui.MapComboBox->currentItem();          pOptions->sEngineName = m_ui.EngineNameComboBox->currentText();
344          pOptions->iMidiBank = ui.BankSpinBox->value();          pOptions->iMidiMap  = m_ui.MapComboBox->currentIndex();
345          pOptions->iMidiProg = ui.ProgSpinBox->value();          pOptions->iMidiBank = m_ui.BankSpinBox->value();
346          pOptions->iVolume   = ui.VolumeSpinBox->value();          pOptions->iMidiProg = m_ui.ProgSpinBox->value();
347          pOptions->iLoadMode = ui.LoadModeComboBox->currentItem();          pOptions->iVolume   = m_ui.VolumeSpinBox->value();
348          pOptions->saveComboBoxHistory(ui.InstrumentFileComboBox);          pOptions->iLoadMode = m_ui.LoadModeComboBox->currentIndex();
349            pOptions->saveComboBoxHistory(m_ui.InstrumentFileComboBox);
350    
351          // Just go with dialog acceptance.          // Just go with dialog acceptance.
352          QDialog::accept();          QDialog::accept();
# Line 281  void InstrumentForm::reject (void) Line 359  void InstrumentForm::reject (void)
359          bool bReject = true;          bool bReject = true;
360    
361          // Check if there's any pending changes...          // Check if there's any pending changes...
362          if (m_iDirtyCount > 0 && ui.OkPushButton->isEnabled()) {          if (m_iDirtyCount > 0 && m_ui.OkPushButton->isEnabled()) {
363                  switch (QMessageBox::warning(this,                  switch (QMessageBox::warning(this,
364                          QSAMPLER_TITLE ": " + tr("Warning"),                          QSAMPLER_TITLE ": " + tr("Warning"),
365                          tr("Some channel settings have been changed.\n\n"                          tr("Some channel settings have been changed.\n\n"
# Line 317  void InstrumentForm::changed (void) Line 395  void InstrumentForm::changed (void)
395  // Stabilize current form state.  // Stabilize current form state.
396  void InstrumentForm::stabilizeForm (void)  void InstrumentForm::stabilizeForm (void)
397  {  {
398          bool bValid = !ui.NameLineEdit->text().isEmpty();          bool bValid =
399                    !m_ui.NameLineEdit->text().isEmpty() &&
400                    m_ui.EngineNameComboBox->currentIndex() >= 0 &&
401                    m_ui.EngineNameComboBox->currentText() !=
402                    qsamplerChannel::noEngineName();
403    
404          const QString& sPath = ui.InstrumentFileComboBox->currentText();          const QString& sPath = m_ui.InstrumentFileComboBox->currentText();
405          bValid = bValid && !sPath.isEmpty() && QFileInfo(sPath).exists();          bValid = bValid && !sPath.isEmpty() && QFileInfo(sPath).exists();
406    
407          ui.OkPushButton->setEnabled(m_iDirtyCount > 0 && bValid);          m_ui.OkPushButton->setEnabled(m_iDirtyCount > 0 && bValid);
408  }  }
409    
410  } // namespace QSampler  } // namespace QSampler
411    
412    
413    // end of qsamplerInstrumentForm.cpp

Legend:
Removed from v.1461  
changed lines
  Added in v.1513

  ViewVC Help
Powered by ViewVC