/[svn]/qsampler/trunk/src/qsamplerMainForm.ui.h
ViewVC logotype

Diff of /qsampler/trunk/src/qsamplerMainForm.ui.h

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

revision 477 by capela, Fri Mar 18 22:38:44 2005 UTC revision 957 by capela, Wed Nov 29 11:48:26 2006 UTC
# Line 2  Line 2 
2  //  //
3  // ui.h extension file, included from the uic-generated form implementation.  // ui.h extension file, included from the uic-generated form implementation.
4  /****************************************************************************  /****************************************************************************
5     Copyright (C) 2004-2005, rncbc aka Rui Nuno Capela. All rights reserved.     Copyright (C) 2004-2006, rncbc aka Rui Nuno Capela. All rights reserved.
6    
7     This program is free software; you can redistribute it and/or     This program is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License     modify it under the terms of the GNU General Public License
# Line 14  Line 14 
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.     GNU General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License     You should have received a copy of the GNU General Public License along
18     along with this program; if not, write to the Free Software     with this program; if not, write to the Free Software Foundation, Inc.,
19     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20    
21  *****************************************************************************/  *****************************************************************************/
22    
# Line 45  Line 45 
45  #include "qsamplerDeviceForm.h"  #include "qsamplerDeviceForm.h"
46  #include "qsamplerOptionsForm.h"  #include "qsamplerOptionsForm.h"
47    
 #include "config.h"  
   
48  #ifdef HAVE_SIGNAL_H  #ifdef HAVE_SIGNAL_H
49  #include <signal.h>  #include <signal.h>
50  #endif  #endif
51    
52    #ifdef CONFIG_LIBGIG
53    #include <gig.h>
54    #endif
55    
56  // Timer constant stuff.  // Timer constant stuff.
57  #define QSAMPLER_TIMER_MSECS    200  #define QSAMPLER_TIMER_MSECS    200
58    
# Line 218  void qsamplerMainForm::setup ( qsamplerO Line 220  void qsamplerMainForm::setup ( qsamplerO
220      // Some child forms are to be created right now.      // Some child forms are to be created right now.
221      m_pMessages = new qsamplerMessages(this);      m_pMessages = new qsamplerMessages(this);
222      m_pDeviceForm = new qsamplerDeviceForm(this, 0, wflags);      m_pDeviceForm = new qsamplerDeviceForm(this, 0, wflags);
223        m_pDeviceForm->setMainForm(this); // An important life immutable!
224      // Set message defaults...      // Set message defaults...
225      updateMessagesFont();      updateMessagesFont();
226      updateMessagesLimit();      updateMessagesLimit();
# Line 287  bool qsamplerMainForm::queryClose (void) Line 290  bool qsamplerMainForm::queryClose (void)
290              ostr << *this;              ostr << *this;
291              m_pOptions->settings().writeEntry("/Layout/DockWindows", sDockables);              m_pOptions->settings().writeEntry("/Layout/DockWindows", sDockables);
292              // And the children, and the main windows state,.              // And the children, and the main windows state,.
293                  m_pOptions->saveWidgetGeometry(m_pDeviceForm);                          m_pOptions->saveWidgetGeometry(m_pDeviceForm);
294              m_pOptions->saveWidgetGeometry(this);                          m_pOptions->saveWidgetGeometry(this);
295                  // Close popup widgets.                          // Close popup widgets.
296                  if (m_pDeviceForm)                          if (m_pDeviceForm)
297                      m_pDeviceForm->close();                                  m_pDeviceForm->close();
298              // Stop client and/or server, gracefully.              // Stop client and/or server, gracefully.
299              stopServer();              stopServer();
300          }          }
# Line 344  void qsamplerMainForm::dropEvent ( QDrop Line 347  void qsamplerMainForm::dropEvent ( QDrop
347      if (!decodeDragFiles(pDropEvent, files))      if (!decodeDragFiles(pDropEvent, files))
348          return;          return;
349    
350      for (QStringList::Iterator iter = files.begin(); iter != files.end(); iter++) {          for (QStringList::Iterator iter = files.begin(); iter != files.end(); iter++) {
351                  const QString& sPath = *iter;                  const QString& sPath = *iter;
352                  if (qsamplerChannel::isInstrumentFile(sPath)) {                  if (qsamplerChannel::isInstrumentFile(sPath)) {
353                          // Try to create a new channel from instrument file...                          // Try to create a new channel from instrument file...
354                      qsamplerChannel *pChannel = new qsamplerChannel(this);                          qsamplerChannel *pChannel = new qsamplerChannel(this);
355                      if (pChannel == NULL)                          if (pChannel == NULL)
356                          return;                                  return;
357                          // Start setting the instrument filename...                          // Start setting the instrument filename...
358                          pChannel->setInstrument(sPath, 0);                          pChannel->setInstrument(sPath, 0);
359                      // Before we show it up, may be we'll                          // Before we show it up, may be we'll
360                      // better ask for some initial values?                          // better ask for some initial values?
361                      if (!pChannel->channelSetup(this)) {                          if (!pChannel->channelSetup(this)) {
362                          delete pChannel;                                  delete pChannel;
363                          return;                                  return;
364                      }                          }
365                      // Finally, give it to a new channel strip...                          // Finally, give it to a new channel strip...
366                          if (!createChannelStrip(pChannel)) {                          if (!createChannelStrip(pChannel)) {
367                          delete pChannel;                                  delete pChannel;
368                          return;                                  return;
369                          }                          }
370                      // Make that an overall update.                          // Make that an overall update.
371                      m_iDirtyCount++;                          m_iDirtyCount++;
372                      stabilizeForm();                          stabilizeForm();
373                  }   // Otherwise, load an usual session file (LSCP script)...                  }   // Otherwise, load an usual session file (LSCP script)...
374                  else if (closeSession(true))                  else if (closeSession(true))
375                          loadSessionFile(sPath);                          loadSessionFile(sPath);
# Line 382  void qsamplerMainForm::customEvent ( QCu Line 385  void qsamplerMainForm::customEvent ( QCu
385      // For the time being, just pump it to messages.      // For the time being, just pump it to messages.
386      if (pCustomEvent->type() == QSAMPLER_CUSTOM_EVENT) {      if (pCustomEvent->type() == QSAMPLER_CUSTOM_EVENT) {
387          qsamplerCustomEvent *pEvent = (qsamplerCustomEvent *) pCustomEvent;          qsamplerCustomEvent *pEvent = (qsamplerCustomEvent *) pCustomEvent;
388          appendMessagesColor(tr("Notify event: %1 data: %2")                  if (pEvent->event() == LSCP_EVENT_CHANNEL_INFO) {
389              .arg(::lscp_event_to_text(pEvent->event()))                          int iChannelID = pEvent->data().toInt();
390              .arg(pEvent->data()), "#996699");                          qsamplerChannelStrip *pChannelStrip = channelStrip(iChannelID);
391                            if (pChannelStrip)
392                                    channelStripChanged(pChannelStrip);
393                    } else {
394                            appendMessagesColor(tr("Notify event: %1 data: %2")
395                                    .arg(::lscp_event_to_text(pEvent->event()))
396                                    .arg(pEvent->data()), "#996699");
397                    }
398      }      }
399  }  }
400    
# Line 393  void qsamplerMainForm::customEvent ( QCu Line 403  void qsamplerMainForm::customEvent ( QCu
403  void qsamplerMainForm::contextMenuEvent( QContextMenuEvent *pEvent )  void qsamplerMainForm::contextMenuEvent( QContextMenuEvent *pEvent )
404  {  {
405      stabilizeForm();      stabilizeForm();
406        
407      editMenu->exec(pEvent->globalPos());      editMenu->exec(pEvent->globalPos());
408  }  }
409    
# Line 461  bool qsamplerMainForm::openSession (void Line 471  bool qsamplerMainForm::openSession (void
471    
472      // Ask for the filename to open...      // Ask for the filename to open...
473      QString sFilename = QFileDialog::getOpenFileName(      QString sFilename = QFileDialog::getOpenFileName(
474              m_pOptions->sSessionDir,                // Start here.                  m_pOptions->sSessionDir,                // Start here.
475              tr("LSCP Session files") + " (*.lscp)", // Filter (LSCP files)                  tr("LSCP Session files") + " (*.lscp)", // Filter (LSCP files)
476              this, 0,                                // Parent and name (none)                  this, 0,                                // Parent and name (none)
477              tr("Open Session")                      // Caption.                  QSAMPLER_TITLE ": " + tr("Open Session")        // Caption.
478      );      );
479    
480      // Have we cancelled?      // Have we cancelled?
# Line 495  bool qsamplerMainForm::saveSession ( boo Line 505  bool qsamplerMainForm::saveSession ( boo
505              sFilename = m_pOptions->sSessionDir;              sFilename = m_pOptions->sSessionDir;
506          // Prompt the guy...          // Prompt the guy...
507          sFilename = QFileDialog::getSaveFileName(          sFilename = QFileDialog::getSaveFileName(
508                  sFilename,                              // Start here.                          sFilename,                              // Start here.
509                  tr("LSCP Session files") + " (*.lscp)", // Filter (LSCP files)                          tr("LSCP Session files") + " (*.lscp)", // Filter (LSCP files)
510                  this, 0,                                // Parent and name (none)                          this, 0,                                // Parent and name (none)
511                  tr("Save Session")                      // Caption.                          QSAMPLER_TITLE ": " + tr("Save Session")        // Caption.
512          );          );
513          // Have we cancelled it?          // Have we cancelled it?
514          if (sFilename.isEmpty())          if (sFilename.isEmpty())
# Line 508  bool qsamplerMainForm::saveSession ( boo Line 518  bool qsamplerMainForm::saveSession ( boo
518              sFilename += ".lscp";              sFilename += ".lscp";
519          // Check if already exists...          // Check if already exists...
520          if (sFilename != m_sFilename && QFileInfo(sFilename).exists()) {          if (sFilename != m_sFilename && QFileInfo(sFilename).exists()) {
521              if (QMessageBox::warning(this, tr("Warning"),              if (QMessageBox::warning(this,
522                                    QSAMPLER_TITLE ": " + tr("Warning"),
523                  tr("The file already exists:\n\n"                  tr("The file already exists:\n\n"
524                     "\"%1\"\n\n"                     "\"%1\"\n\n"
525                     "Do you want to replace it?")                     "Do you want to replace it?")
# Line 530  bool qsamplerMainForm::closeSession ( bo Line 541  bool qsamplerMainForm::closeSession ( bo
541    
542      // Are we dirty enough to prompt it?      // Are we dirty enough to prompt it?
543      if (m_iDirtyCount > 0) {      if (m_iDirtyCount > 0) {
544          switch (QMessageBox::warning(this, tr("Warning"),          switch (QMessageBox::warning(this,
545                            QSAMPLER_TITLE ": " + tr("Warning"),
546              tr("The current session has been changed:\n\n"              tr("The current session has been changed:\n\n"
547              "\"%1\"\n\n"              "\"%1\"\n\n"
548              "Do you want to save the changes?")              "Do you want to save the changes?")
# Line 588  bool qsamplerMainForm::loadSessionFile ( Line 600  bool qsamplerMainForm::loadSessionFile (
600      QTextStream ts(&file);      QTextStream ts(&file);
601      while (!ts.atEnd()) {      while (!ts.atEnd()) {
602          // Read the line.          // Read the line.
603          QString sCommand = ts.readLine().simplifyWhiteSpace();          QString sCommand = ts.readLine().stripWhiteSpace();
604          // If not empty, nor a comment, call the server...          // If not empty, nor a comment, call the server...
605          if (!sCommand.isEmpty() && sCommand[0] != '#') {          if (!sCommand.isEmpty() && sCommand[0] != '#') {
606              appendMessagesColor(sCommand, "#996633");              appendMessagesColor(sCommand, "#996633");
# Line 623  bool qsamplerMainForm::loadSessionFile ( Line 635  bool qsamplerMainForm::loadSessionFile (
635      m_sFilename = sFilename;      m_sFilename = sFilename;
636      updateRecentFiles(sFilename);      updateRecentFiles(sFilename);
637      appendMessages(tr("Open session: \"%1\".").arg(sessionName(m_sFilename)));      appendMessages(tr("Open session: \"%1\".").arg(sessionName(m_sFilename)));
638        
639      // Make that an overall update.      // Make that an overall update.
640      stabilizeForm();      stabilizeForm();
641      return true;      return true;
# Line 666  bool qsamplerMainForm::saveSessionFile ( Line 678  bool qsamplerMainForm::saveSessionFile (
678          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);
679          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {
680                  ts << endl;                  ts << endl;
681                  qsamplerDevice device(m_pClient, qsamplerDevice::Audio, piDeviceIDs[iDevice]);                  qsamplerDevice device(this, qsamplerDevice::Audio, piDeviceIDs[iDevice]);
682                  // Audio device specification...                  // Audio device specification...
683                  ts << "# " << device.deviceTypeName() << " " << device.driverName()                  ts << "# " << device.deviceTypeName() << " " << device.driverName()
684                     << " " << tr("Device") << " " << iDevice << endl;                          << " " << tr("Device") << " " << iDevice << endl;
685                  ts << "CREATE AUDIO_OUTPUT_DEVICE " << device.driverName();                  ts << "CREATE AUDIO_OUTPUT_DEVICE " << device.driverName();
686                  qsamplerDeviceParamMap::ConstIterator deviceParam;                  qsamplerDeviceParamMap::ConstIterator deviceParam;
687                  for (deviceParam = device.params().begin();                  for (deviceParam = device.params().begin();
688                                  deviceParam != device.params().end();                                  deviceParam != device.params().end();
689                                          ++deviceParam) {                                          ++deviceParam) {
690                          const qsamplerDeviceParam& param = deviceParam.data();                          const qsamplerDeviceParam& param = deviceParam.data();
691                          if (!param.value.isEmpty())                          if (param.value.isEmpty()) ts << "# ";
692                                  ts << " " << deviceParam.key() << "='" << param.value << "'";                          ts << " " << deviceParam.key() << "='" << param.value << "'";
693                  }                  }
694                  ts << endl;                  ts << endl;
695                  // Audio channel parameters...                  // Audio channel parameters...
# Line 690  bool qsamplerMainForm::saveSessionFile ( Line 702  bool qsamplerMainForm::saveSessionFile (
702                                          portParam != pPort->params().end();                                          portParam != pPort->params().end();
703                                                  ++portParam) {                                                  ++portParam) {
704                                  const qsamplerDeviceParam& param = portParam.data();                                  const qsamplerDeviceParam& param = portParam.data();
705                                  if (!param.fix && !param.value.isEmpty()) {                                  if (param.fix || param.value.isEmpty()) ts << "# ";
706                                          ts << "SET AUDIO_OUTPUT_CHANNEL_PARAMETER " << iDevice                                  ts << "SET AUDIO_OUTPUT_CHANNEL_PARAMETER " << iDevice
707                                             << " " << iPort << " " << portParam.key()                                          << " " << iPort << " " << portParam.key()
708                                             << "='" << param.value << "'" << endl;                                          << "='" << param.value << "'" << endl;
                                 }  
709                          }                          }
710                  }                  }
711                  // Audio device index/id mapping.                  // Audio device index/id mapping.
# Line 707  bool qsamplerMainForm::saveSessionFile ( Line 718  bool qsamplerMainForm::saveSessionFile (
718          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);
719          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {
720                  ts << endl;                  ts << endl;
721                  qsamplerDevice device(m_pClient, qsamplerDevice::Midi, piDeviceIDs[iDevice]);                  qsamplerDevice device(this, qsamplerDevice::Midi, piDeviceIDs[iDevice]);
722                  // MIDI device specification...                  // MIDI device specification...
723          ts << "# " << device.deviceTypeName() << " " << device.driverName()                  ts << "# " << device.deviceTypeName() << " " << device.driverName()
724                     << " " << tr("Device") << " " << iDevice << endl;                          << " " << tr("Device") << " " << iDevice << endl;
725                  ts << "CREATE MIDI_INPUT_DEVICE " << device.driverName();                  ts << "CREATE MIDI_INPUT_DEVICE " << device.driverName();
726                  qsamplerDeviceParamMap::ConstIterator deviceParam;                  qsamplerDeviceParamMap::ConstIterator deviceParam;
727                  for (deviceParam = device.params().begin();                  for (deviceParam = device.params().begin();
728                                  deviceParam != device.params().end();                                  deviceParam != device.params().end();
729                                          ++deviceParam) {                                          ++deviceParam) {
730                          const qsamplerDeviceParam& param = deviceParam.data();                          const qsamplerDeviceParam& param = deviceParam.data();
731                          if (!param.value.isEmpty())                          if (param.value.isEmpty()) ts << "# ";
732                                  ts << " " << deviceParam.key() << "='" << param.value << "'";                          ts << " " << deviceParam.key() << "='" << param.value << "'";
733                  }                  }
734                  ts << endl;                  ts << endl;
735                  // MIDI port parameters...                  // MIDI port parameters...
# Line 731  bool qsamplerMainForm::saveSessionFile ( Line 742  bool qsamplerMainForm::saveSessionFile (
742                                          portParam != pPort->params().end();                                          portParam != pPort->params().end();
743                                                  ++portParam) {                                                  ++portParam) {
744                                  const qsamplerDeviceParam& param = portParam.data();                                  const qsamplerDeviceParam& param = portParam.data();
745                                  if (!param.fix && !param.value.isEmpty()) {                                  if (param.fix || param.value.isEmpty()) ts << "# ";
746                                          ts << "SET MIDI_INPUT_PORT_PARAMETER " << iDevice                                  ts << "SET MIDI_INPUT_PORT_PARAMETER " << iDevice
747                                             << " " << iPort << " " << portParam.key()                                     << " " << iPort << " " << portParam.key()
748                                             << "='" << param.value << "'" << endl;                                     << "='" << param.value << "'" << endl;
                                 }  
749                          }                          }
750                  }                  }
751                  // MIDI device index/id mapping.                  // MIDI device index/id mapping.
# Line 753  bool qsamplerMainForm::saveSessionFile ( Line 763  bool qsamplerMainForm::saveSessionFile (
763              if (pChannel) {              if (pChannel) {
764                  ts << "# " << tr("Channel") << " " << iChannel << endl;                  ts << "# " << tr("Channel") << " " << iChannel << endl;
765                  ts << "ADD CHANNEL" << endl;                  ts << "ADD CHANNEL" << endl;
766                  if (audioDeviceMap.isEmpty()) {                                  if (audioDeviceMap.isEmpty()) {
767                          ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannel                                          ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannel
768                                              << " " << pChannel->audioDriver() << endl;                                                  << " " << pChannel->audioDriver() << endl;
769                              } else {                                  } else {
770                          ts << "SET CHANNEL AUDIO_OUTPUT_DEVICE " << iChannel                                          ts << "SET CHANNEL AUDIO_OUTPUT_DEVICE " << iChannel
771                                             << " " << audioDeviceMap[pChannel->audioDevice()] << endl;                                                  << " " << audioDeviceMap[pChannel->audioDevice()] << endl;
772                                    }
773                                    if (midiDeviceMap.isEmpty()) {
774                                            ts << "SET CHANNEL MIDI_INPUT_TYPE " << iChannel
775                                                    << " " << pChannel->midiDriver() << endl;
776                                    } else {
777                                            ts << "SET CHANNEL MIDI_INPUT_DEVICE " << iChannel
778                                                    << " " << midiDeviceMap[pChannel->midiDevice()] << endl;
779                                  }                                  }
780                  if (midiDeviceMap.isEmpty()) {                                  ts << "SET CHANNEL MIDI_INPUT_PORT " << iChannel
781                          ts << "SET CHANNEL MIDI_INPUT_TYPE " << iChannel                                          << " " << pChannel->midiPort() << endl;
                                        << " " << pChannel->midiDriver() << endl;  
                             } else {  
                         ts << "SET CHANNEL MIDI_INPUT_DEVICE " << iChannel  
                                            << " " << midiDeviceMap[pChannel->midiDevice()] << endl;  
                             }  
                 ts << "SET CHANNEL MIDI_INPUT_PORT " << iChannel  
                                << " " << pChannel->midiPort() << endl;  
782                  ts << "SET CHANNEL MIDI_INPUT_CHANNEL " << iChannel << " ";                  ts << "SET CHANNEL MIDI_INPUT_CHANNEL " << iChannel << " ";
783                  if (pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL)                  if (pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL)
784                      ts << "ALL";                      ts << "ALL";
# Line 777  bool qsamplerMainForm::saveSessionFile ( Line 787  bool qsamplerMainForm::saveSessionFile (
787                  ts << endl;                  ts << endl;
788                  ts << "LOAD ENGINE " << pChannel->engineName() << " " << iChannel << endl;                  ts << "LOAD ENGINE " << pChannel->engineName() << " " << iChannel << endl;
789                  ts << "LOAD INSTRUMENT NON_MODAL '" << pChannel->instrumentFile() << "' " << pChannel->instrumentNr() << " " << iChannel << endl;                  ts << "LOAD INSTRUMENT NON_MODAL '" << pChannel->instrumentFile() << "' " << pChannel->instrumentNr() << " " << iChannel << endl;
790                                    qsamplerChannelRoutingMap::ConstIterator audioRoute;
791                                    for (audioRoute = pChannel->audioRouting().begin();
792                                                    audioRoute != pChannel->audioRouting().end();
793                                                            ++audioRoute) {
794                                            ts << "SET CHANNEL AUDIO_OUTPUT_CHANNEL " << iChannel
795                                                    << " " << audioRoute.key()
796                                                    << " " << audioRoute.data() << endl;
797                                    }
798                  ts << "SET CHANNEL VOLUME " << iChannel << " " << pChannel->volume() << endl;                  ts << "SET CHANNEL VOLUME " << iChannel << " " << pChannel->volume() << endl;
799                                    if (pChannel->channelMute())
800                                            ts << "SET CHANNEL MUTE " << iChannel << " 1" << endl;
801                                    if (pChannel->channelSolo())
802                                            ts << "SET CHANNEL SOLO " << iChannel << " 1" << endl;
803                  ts << endl;                  ts << endl;
804              }              }
805          }          }
# Line 785  bool qsamplerMainForm::saveSessionFile ( Line 807  bool qsamplerMainForm::saveSessionFile (
807          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
808      }      }
809    
810    #ifdef CONFIG_MIDI_INSTRUMENT
811            // MIDI instrument mapping...
812            lscp_midi_instrument_t *pInstrs = ::lscp_list_midi_instruments(m_pClient);
813            if (pInstrs)
814            ts << "# " << tr("MIDI instrument mapping") << endl;
815            for (int iInstr = 0; pInstrs && pInstrs[iInstr].program >= 0; iInstr++) {
816                    lscp_midi_instrument_info_t *pInstrInfo
817                            = ::lscp_get_midi_instrument_info(m_pClient, &pInstrs[iInstr]);
818                    if (pInstrInfo) {
819                            ts << "MAP MIDI_INSTRUMENT "
820                                    << pInstrs[iInstr].bank_msb    << " "
821                                    << pInstrs[iInstr].bank_lsb    << " "
822                                    << pInstrs[iInstr].program     << " "
823                                    << pInstrInfo->engine_name     << " '"
824                                    << pInstrInfo->instrument_file << "' "
825                                    << pInstrInfo->instrument_nr   << " "
826                                    << pInstrInfo->volume          << " ";
827                            switch (pInstrInfo->load_mode) {
828                                    case LSCP_LOAD_PERSISTENT:
829                                            ts << "PERSISTENT";
830                                            break;
831                                    case LSCP_LOAD_ON_DEMAND_HOLD:
832                                            ts << "ON_DEMAND_HOLD";
833                                            break;
834                                    case LSCP_LOAD_ON_DEMAND:
835                                    case LSCP_LOAD_DEFAULT:
836                                    default:
837                                            ts << "ON_DEMAND";
838                                            break;
839                            }
840                            if (pInstrInfo->name)
841                                    ts << " '" << pInstrInfo->name << "'";
842                            ts << endl;
843                    }
844                    ts << endl;
845            // Try to keep it snappy :)
846            QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
847            }
848    #endif //  CONFIG_MIDI_INSTRUMENT
849    
850      // Ok. we've wrote it.      // Ok. we've wrote it.
851      file.close();      file.close();
852    
# Line 869  void qsamplerMainForm::fileReset (void) Line 931  void qsamplerMainForm::fileReset (void)
931          return;          return;
932    
933      // Ask user whether he/she want's an internal sampler reset...      // Ask user whether he/she want's an internal sampler reset...
934      if (QMessageBox::warning(this, tr("Warning"),      if (QMessageBox::warning(this,
935                    QSAMPLER_TITLE ": " + tr("Warning"),
936          tr("Resetting the sampler instance will close\n"          tr("Resetting the sampler instance will close\n"
937             "all device and channel configurations.\n\n"             "all device and channel configurations.\n\n"
938             "Please note that this operation may cause\n"             "Please note that this operation may cause\n"
939             "temporary MIDI and Audio disruption\n\n"             "temporary MIDI and Audio disruption.\n\n"
940             "Do you want to reset the sampler engine now?"),             "Do you want to reset the sampler engine now?"),
941          tr("Reset"), tr("Cancel")) > 0)          tr("Reset"), tr("Cancel")) > 0)
942          return;          return;
# Line 898  void qsamplerMainForm::fileRestart (void Line 961  void qsamplerMainForm::fileRestart (void
961  {  {
962      if (m_pOptions == NULL)      if (m_pOptions == NULL)
963          return;          return;
964            
965      bool bRestart = true;      bool bRestart = true;
966        
967      // Ask user whether he/she want's a complete restart...      // Ask user whether he/she want's a complete restart...
968      // (if we're currently up and running)      // (if we're currently up and running)
969      if (bRestart && m_pClient) {      if (bRestart && m_pClient) {
970          bRestart = (QMessageBox::warning(this, tr("Warning"),          bRestart = (QMessageBox::warning(this,
971                            QSAMPLER_TITLE ": " + tr("Warning"),
972              tr("New settings will be effective after\n"              tr("New settings will be effective after\n"
973                 "restarting the client/server connection.\n\n"                 "restarting the client/server connection.\n\n"
974                 "Please note that this operation may cause\n"                 "Please note that this operation may cause\n"
975                 "temporary MIDI and Audio disruption\n\n"                 "temporary MIDI and Audio disruption.\n\n"
976                 "Do you want to restart the connection now?"),                 "Do you want to restart the connection now?"),
977              tr("Restart"), tr("Cancel")) == 0);              tr("Restart"), tr("Cancel")) == 0);
978      }      }
# Line 951  void qsamplerMainForm::editAddChannel (v Line 1015  void qsamplerMainForm::editAddChannel (v
1015          delete pChannel;          delete pChannel;
1016          return;          return;
1017      }      }
1018        
1019      // And give it to the strip (will own the channel instance, if successful).      // And give it to the strip (will own the channel instance, if successful).
1020      if (!createChannelStrip(pChannel)) {      if (!createChannelStrip(pChannel)) {
1021          delete pChannel;          delete pChannel;
# Line 973  void qsamplerMainForm::editRemoveChannel Line 1037  void qsamplerMainForm::editRemoveChannel
1037      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();
1038      if (pChannelStrip == NULL)      if (pChannelStrip == NULL)
1039          return;          return;
1040            
1041      qsamplerChannel *pChannel = pChannelStrip->channel();      qsamplerChannel *pChannel = pChannelStrip->channel();
1042      if (pChannel == NULL)      if (pChannel == NULL)
1043          return;          return;
1044    
1045      // Prompt user if he/she's sure about this...      // Prompt user if he/she's sure about this...
1046      if (m_pOptions && m_pOptions->bConfirmRemove) {      if (m_pOptions && m_pOptions->bConfirmRemove) {
1047          if (QMessageBox::warning(this, tr("Warning"),          if (QMessageBox::warning(this,
1048                            QSAMPLER_TITLE ": " + tr("Warning"),
1049              tr("About to remove channel:\n\n"              tr("About to remove channel:\n\n"
1050                 "%1\n\n"                 "%1\n\n"
1051                 "Are you sure?")                 "Are you sure?")
# Line 995  void qsamplerMainForm::editRemoveChannel Line 1060  void qsamplerMainForm::editRemoveChannel
1060    
1061      // Just delete the channel strip.      // Just delete the channel strip.
1062      delete pChannelStrip;      delete pChannelStrip;
1063        
1064      // Do we auto-arrange?      // Do we auto-arrange?
1065      if (m_pOptions && m_pOptions->bAutoArrange)      if (m_pOptions && m_pOptions->bAutoArrange)
1066          channelsArrange();          channelsArrange();
# Line 1039  void qsamplerMainForm::editResetChannel Line 1104  void qsamplerMainForm::editResetChannel
1104  // Reset all sampler channels.  // Reset all sampler channels.
1105  void qsamplerMainForm::editResetAllChannels (void)  void qsamplerMainForm::editResetAllChannels (void)
1106  {  {
1107      if (m_pClient == NULL)          if (m_pClient == NULL)
1108          return;                  return;
1109    
1110      // Invoque the channel strip procedure,          // Invoque the channel strip procedure,
1111          // for all channels out there...          // for all channels out there...
1112      m_pWorkspace->setUpdatesEnabled(false);          m_pWorkspace->setUpdatesEnabled(false);
1113      QWidgetList wlist = m_pWorkspace->windowList();          QWidgetList wlist = m_pWorkspace->windowList();
1114      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1115          qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1116          if (pChannelStrip)                  if (pChannelStrip)
1117                  pChannelStrip->channelReset();                          pChannelStrip->channelReset();
1118      }          }
1119      m_pWorkspace->setUpdatesEnabled(true);          m_pWorkspace->setUpdatesEnabled(true);
1120  }  }
1121    
1122    
# Line 1106  void qsamplerMainForm::viewMessages ( bo Line 1171  void qsamplerMainForm::viewMessages ( bo
1171  // Show/hide the device configurator form.  // Show/hide the device configurator form.
1172  void qsamplerMainForm::viewDevices (void)  void qsamplerMainForm::viewDevices (void)
1173  {  {
1174      if (m_pOptions == NULL)          if (m_pOptions == NULL)
1175          return;                  return;
1176    
1177      if (m_pDeviceForm) {          if (m_pDeviceForm) {
1178          m_pOptions->saveWidgetGeometry(m_pDeviceForm);                  m_pOptions->saveWidgetGeometry(m_pDeviceForm);
1179                  m_pDeviceForm->setClient(m_pClient);                  m_pDeviceForm->setClient(m_pClient);
1180          if (m_pDeviceForm->isVisible()) {                  if (m_pDeviceForm->isVisible()) {
1181              m_pDeviceForm->hide();                          m_pDeviceForm->hide();
1182          } else {                  } else {
1183              m_pDeviceForm->show();                          m_pDeviceForm->show();
1184              m_pDeviceForm->raise();                          m_pDeviceForm->raise();
1185              m_pDeviceForm->setActiveWindow();                          m_pDeviceForm->setActiveWindow();
1186          }                  }
1187      }          }
1188  }  }
1189    
1190    
# Line 1163  void qsamplerMainForm::viewOptions (void Line 1228  void qsamplerMainForm::viewOptions (void
1228                  (!bOldStdoutCapture &&  m_pOptions->bStdoutCapture) ||                  (!bOldStdoutCapture &&  m_pOptions->bStdoutCapture) ||
1229                  ( bOldKeepOnTop     && !m_pOptions->bKeepOnTop)     ||                  ( bOldKeepOnTop     && !m_pOptions->bKeepOnTop)     ||
1230                  (!bOldKeepOnTop     &&  m_pOptions->bKeepOnTop)) {                  (!bOldKeepOnTop     &&  m_pOptions->bKeepOnTop)) {
1231                  QMessageBox::information(this, tr("Information"),                  QMessageBox::information(this,
1232                                            QSAMPLER_TITLE ": " + tr("Information"),
1233                      tr("Some settings may be only effective\n"                      tr("Some settings may be only effective\n"
1234                         "next time you start this program."), tr("OK"));                         "next time you start this program."), tr("OK"));
1235                  updateMessagesCapture();                  updateMessagesCapture();
# Line 1237  void qsamplerMainForm::channelsArrange ( Line 1303  void qsamplerMainForm::channelsArrange (
1303          y += iHeight;          y += iHeight;
1304      }      }
1305      m_pWorkspace->setUpdatesEnabled(true);      m_pWorkspace->setUpdatesEnabled(true);
1306        
1307      stabilizeForm();      stabilizeForm();
1308  }  }
1309    
# Line 1291  void qsamplerMainForm::helpAbout (void) Line 1357  void qsamplerMainForm::helpAbout (void)
1357      sText += tr("LSCP (liblscp) instrument_name support disabled.");      sText += tr("LSCP (liblscp) instrument_name support disabled.");
1358      sText += "</font></small><br />";      sText += "</font></small><br />";
1359  #endif  #endif
1360    #ifndef CONFIG_MUTE_SOLO
1361        sText += "<small><font color=\"red\">";
1362        sText += tr("Sampler channel Mute/Solo support disabled.");
1363        sText += "</font></small><br />";
1364    #endif
1365      sText += "<br />\n";      sText += "<br />\n";
1366      sText += tr("Using") + ": ";      sText += tr("Using") + ": ";
1367      sText += ::lscp_client_package();      sText += ::lscp_client_package();
1368      sText += " ";      sText += " ";
1369      sText += ::lscp_client_version();      sText += ::lscp_client_version();
1370    #ifdef CONFIG_LIBGIG
1371        sText += ", ";
1372        sText += gig::libraryName().c_str();
1373        sText += " ";
1374        sText += gig::libraryVersion().c_str();
1375    #endif
1376      sText += "<br />\n";      sText += "<br />\n";
1377      sText += "<br />\n";      sText += "<br />\n";
1378      sText += tr("Website") + ": <a href=\"" QSAMPLER_WEBSITE "\">" QSAMPLER_WEBSITE "</a><br />\n";      sText += tr("Website") + ": <a href=\"" QSAMPLER_WEBSITE "\">" QSAMPLER_WEBSITE "</a><br />\n";
# Line 1320  void qsamplerMainForm::stabilizeForm (vo Line 1397  void qsamplerMainForm::stabilizeForm (vo
1397      // Update the main application caption...      // Update the main application caption...
1398      QString sSessionName = sessionName(m_sFilename);      QString sSessionName = sessionName(m_sFilename);
1399      if (m_iDirtyCount > 0)      if (m_iDirtyCount > 0)
1400          sSessionName += '*';          sSessionName += " *";
1401      setCaption(tr(QSAMPLER_TITLE " - [%1]").arg(sSessionName));      setCaption(tr(QSAMPLER_TITLE " - [%1]").arg(sSessionName));
1402    
1403      // Update the main menu state...      // Update the main menu state...
# Line 1375  void qsamplerMainForm::stabilizeForm (vo Line 1452  void qsamplerMainForm::stabilizeForm (vo
1452  void qsamplerMainForm::channelStripChanged( qsamplerChannelStrip *pChannelStrip )  void qsamplerMainForm::channelStripChanged( qsamplerChannelStrip *pChannelStrip )
1453  {  {
1454          // Add this strip to the changed list...          // Add this strip to the changed list...
1455          if (m_changedStrips.containsRef(pChannelStrip) == 0)          if (m_changedStrips.containsRef(pChannelStrip) == 0) {
1456                  m_changedStrips.append(pChannelStrip);                  m_changedStrips.append(pChannelStrip);
1457                    pChannelStrip->resetErrorCount();
1458            }
1459    
1460      // Just mark the dirty form.      // Just mark the dirty form.
1461      m_iDirtyCount++;      m_iDirtyCount++;
# Line 1582  void qsamplerMainForm::appendMessagesErr Line 1661  void qsamplerMainForm::appendMessagesErr
1661    
1662      appendMessagesColor(s.simplifyWhiteSpace(), "#ff0000");      appendMessagesColor(s.simplifyWhiteSpace(), "#ff0000");
1663    
1664      QMessageBox::critical(this, tr("Error"), s, tr("Cancel"));      QMessageBox::critical(this,
1665                    QSAMPLER_TITLE ": " + tr("Error"), s, tr("Cancel"));
1666  }  }
1667    
1668    
# Line 1622  void qsamplerMainForm::updateMessagesLim Line 1702  void qsamplerMainForm::updateMessagesLim
1702          if (m_pOptions->bMessagesLimit)          if (m_pOptions->bMessagesLimit)
1703              m_pMessages->setMessagesLimit(m_pOptions->iMessagesLimitLines);              m_pMessages->setMessagesLimit(m_pOptions->iMessagesLimitLines);
1704          else          else
1705              m_pMessages->setMessagesLimit(0);              m_pMessages->setMessagesLimit(-1);
1706      }      }
1707  }  }
1708    
# Line 1666  qsamplerChannelStrip *qsamplerMainForm:: Line 1746  qsamplerChannelStrip *qsamplerMainForm::
1746      pChannelStrip = new qsamplerChannelStrip(m_pWorkspace, 0, wflags);      pChannelStrip = new qsamplerChannelStrip(m_pWorkspace, 0, wflags);
1747      if (pChannelStrip == NULL)      if (pChannelStrip == NULL)
1748          return NULL;          return NULL;
1749            
1750      // Actual channel strip setup...      // Actual channel strip setup...
1751      pChannelStrip->setup(pChannel);      pChannelStrip->setup(pChannel);
1752      QObject::connect(pChannelStrip, SIGNAL(channelChanged(qsamplerChannelStrip *)), this, SLOT(channelStripChanged(qsamplerChannelStrip *)));      QObject::connect(pChannelStrip, SIGNAL(channelChanged(qsamplerChannelStrip *)), this, SLOT(channelStripChanged(qsamplerChannelStrip *)));
# Line 1724  qsamplerChannelStrip *qsamplerMainForm:: Line 1804  qsamplerChannelStrip *qsamplerMainForm::
1804          QWidgetList wlist = m_pWorkspace->windowList();          QWidgetList wlist = m_pWorkspace->windowList();
1805          if (wlist.isEmpty())          if (wlist.isEmpty())
1806                  return NULL;                  return NULL;
1807            
1808          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1809                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1810                  if (pChannelStrip) {                  if (pChannelStrip) {
# Line 1805  void qsamplerMainForm::timerSlot (void) Line 1885  void qsamplerMainForm::timerSlot (void)
1885              }              }
1886          }          }
1887      }      }
1888        
1889          // Refresh each channel usage, on each period...          if (m_pClient) {
1890      if (m_pClient && (m_changedStrips.count() > 0 || m_pOptions->bAutoRefresh)) {                  // Update the channel information for each pending strip...
1891          m_iTimerSlot += QSAMPLER_TIMER_MSECS;                  if (m_changedStrips.count() > 0) {
1892          if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime && m_pWorkspace->isUpdatesEnabled())  {                          for (qsamplerChannelStrip *pChannelStrip = m_changedStrips.first();
1893              m_iTimerSlot = 0;                                          pChannelStrip; pChannelStrip = m_changedStrips.next()) {
             // Update the channel information for each pending strip...  
             for (qsamplerChannelStrip *pChannelStrip = m_changedStrips.first();  
                     pChannelStrip;  
                                                 pChannelStrip = m_changedStrips.next()) {  
1894                                  // If successfull, remove from pending list...                                  // If successfull, remove from pending list...
1895                                  if (pChannelStrip->updateChannelInfo())                                  if (pChannelStrip->updateChannelInfo())
1896                      m_changedStrips.remove(pChannelStrip);                                          m_changedStrips.remove(pChannelStrip);
1897                          }                          }
1898              // Update the channel stream usage for each strip...                  }
1899              QWidgetList wlist = m_pWorkspace->windowList();                  // Refresh each channel usage, on each period...
1900              for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {                  if (m_pOptions->bAutoRefresh) {
1901                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);                          m_iTimerSlot += QSAMPLER_TIMER_MSECS;
1902                  if (pChannelStrip && pChannelStrip->isVisible())                          if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime)  {
1903                      pChannelStrip->updateChannelUsage();                                  m_iTimerSlot = 0;
1904              }                                  // Update the channel stream usage for each strip...
1905          }                                  QWidgetList wlist = m_pWorkspace->windowList();
1906      }                                  for (int iChannel = 0;
1907                                                    iChannel < (int) wlist.count(); iChannel++) {
1908                                            qsamplerChannelStrip *pChannelStrip
1909                                                    = (qsamplerChannelStrip *) wlist.at(iChannel);
1910                                            if (pChannelStrip && pChannelStrip->isVisible())
1911                                                    pChannelStrip->updateChannelUsage();
1912                                    }
1913                            }
1914                    }
1915            }
1916    
1917      // Register the next timer slot.      // Register the next timer slot.
1918      QTimer::singleShot(QSAMPLER_TIMER_MSECS, this, SLOT(timerSlot()));      QTimer::singleShot(QSAMPLER_TIMER_MSECS, this, SLOT(timerSlot()));
# Line 1849  void qsamplerMainForm::startServer (void Line 1934  void qsamplerMainForm::startServer (void
1934    
1935      // Is the server process instance still here?      // Is the server process instance still here?
1936      if (m_pServer) {      if (m_pServer) {
1937          switch (QMessageBox::warning(this, tr("Warning"),          switch (QMessageBox::warning(this,
1938                            QSAMPLER_TITLE ": " + tr("Warning"),
1939              tr("Could not start the LinuxSampler server.\n\n"              tr("Could not start the LinuxSampler server.\n\n"
1940                 "Maybe it ss already started."),                 "Maybe it ss already started."),
1941              tr("Stop"), tr("Kill"), tr("Cancel"))) {              tr("Stop"), tr("Kill"), tr("Cancel"))) {
# Line 2008  bool qsamplerMainForm::startClient (void Line 2094  bool qsamplerMainForm::startClient (void
2094      ::lscp_client_set_timeout(m_pClient, m_pOptions->iServerTimeout);      ::lscp_client_set_timeout(m_pClient, m_pOptions->iServerTimeout);
2095      appendMessages(tr("Client receive timeout is set to %1 msec.").arg(::lscp_client_get_timeout(m_pClient)));      appendMessages(tr("Client receive timeout is set to %1 msec.").arg(::lscp_client_get_timeout(m_pClient)));
2096    
2097            // Subscribe to channel info change notifications...
2098            if (::lscp_client_subscribe(m_pClient, LSCP_EVENT_CHANNEL_INFO) != LSCP_OK)
2099                    appendMessagesClient("lscp_client_subscribe");
2100    
2101      // We may stop scheduling around.      // We may stop scheduling around.
2102      stopSchedule();      stopSchedule();
2103    
# Line 2021  bool qsamplerMainForm::startClient (void Line 2111  bool qsamplerMainForm::startClient (void
2111          // if visible, that we're ready...          // if visible, that we're ready...
2112          if (m_pDeviceForm && m_pDeviceForm->isVisible())          if (m_pDeviceForm && m_pDeviceForm->isVisible())
2113              m_pDeviceForm->setClient(m_pClient);              m_pDeviceForm->setClient(m_pClient);
2114                
2115      // Is any session pending to be loaded?      // Is any session pending to be loaded?
2116      if (!m_pOptions->sSessionFile.isEmpty()) {      if (!m_pOptions->sSessionFile.isEmpty()) {
2117          // Just load the prabably startup session...          // Just load the prabably startup session...
# Line 2061  void qsamplerMainForm::stopClient (void) Line 2151  void qsamplerMainForm::stopClient (void)
2151      // channels from the back-end server.      // channels from the back-end server.
2152      m_iDirtyCount = 0;      m_iDirtyCount = 0;
2153      closeSession(false);      closeSession(false);
2154        
2155      // Close us as a client...      // Close us as a client...
2156      lscp_client_destroy(m_pClient);          ::lscp_client_unsubscribe(m_pClient, LSCP_EVENT_CHANNEL_INFO);
2157        ::lscp_client_destroy(m_pClient);
2158      m_pClient = NULL;      m_pClient = NULL;
2159    
2160      // Log final here.      // Log final here.

Legend:
Removed from v.477  
changed lines
  Added in v.957

  ViewVC Help
Powered by ViewVC