/[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 456 by capela, Mon Mar 14 14:02:30 2005 UTC revision 753 by capela, Wed Aug 24 17:44:59 2005 UTC
# 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 598  bool qsamplerMainForm::loadSessionFile ( Line 608  bool qsamplerMainForm::loadSessionFile (
608              if (::lscp_client_query(m_pClient, sCommand.latin1()) != LSCP_OK) {              if (::lscp_client_query(m_pClient, sCommand.latin1()) != LSCP_OK) {
609                  appendMessagesClient("lscp_client_query");                  appendMessagesClient("lscp_client_query");
610                  iErrors++;                  iErrors++;
                 break;  
611              }              }
612          }          }
613          // Try to make it snappy :)          // Try to make it snappy :)
# Line 608  bool qsamplerMainForm::loadSessionFile ( Line 617  bool qsamplerMainForm::loadSessionFile (
617      // Ok. we've read it.      // Ok. we've read it.
618      file.close();      file.close();
619    
     // Have we any errors?  
     if (iErrors > 0)  
         appendMessagesError(tr("Session could not be loaded\nfrom \"%1\".\n\nSorry.").arg(sFilename));  
   
620          // Now we'll try to create (update) the whole GUI session.          // Now we'll try to create (update) the whole GUI session.
621          updateSession();          updateSession();
622    
623            // Have we any errors?
624            if (iErrors > 0)
625                    appendMessagesError(tr("Session loaded with errors\nfrom \"%1\".\n\nSorry.").arg(sFilename));
626    
627      // Save as default session directory.      // Save as default session directory.
628      if (m_pOptions)      if (m_pOptions)
629          m_pOptions->sSessionDir = QFileInfo(sFilename).dirPath(true);          m_pOptions->sSessionDir = QFileInfo(sFilename).dirPath(true);
630      // We're not dirty anymore.          // We're not dirty anymore, if loaded without errors,
631      m_iDirtyCount = 0;          m_iDirtyCount = iErrors;
632      // Stabilize form...      // Stabilize form...
633      m_sFilename = sFilename;      m_sFilename = sFilename;
634      updateRecentFiles(sFilename);      updateRecentFiles(sFilename);
635      appendMessages(tr("Open session: \"%1\".").arg(sessionName(m_sFilename)));      appendMessages(tr("Open session: \"%1\".").arg(sessionName(m_sFilename)));
636        
637      // Make that an overall update.      // Make that an overall update.
638      stabilizeForm();      stabilizeForm();
639      return true;      return true;
# Line 666  bool qsamplerMainForm::saveSessionFile ( Line 675  bool qsamplerMainForm::saveSessionFile (
675          QMap<int, int> audioDeviceMap;          QMap<int, int> audioDeviceMap;
676          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);
677          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {
                 qsamplerDevice device(m_pClient, qsamplerDevice::Audio, piDeviceIDs[iDevice]);  
678                  ts << endl;                  ts << endl;
679          ts << "# " << device.deviceTypeName() << " " << device.driverName()                  qsamplerDevice device(this, qsamplerDevice::Audio, piDeviceIDs[iDevice]);
680                     << " " << tr("Device") << " " << iDevice << endl;                  // Audio device specification...
681                    ts << "# " << device.deviceTypeName() << " " << device.driverName()
682                            << " " << tr("Device") << " " << iDevice << endl;
683                  ts << "CREATE AUDIO_OUTPUT_DEVICE " << device.driverName();                  ts << "CREATE AUDIO_OUTPUT_DEVICE " << device.driverName();
684                  qsamplerDeviceParamMap& params = device.params();                  qsamplerDeviceParamMap::ConstIterator deviceParam;
685                  qsamplerDeviceParamMap::ConstIterator iter;                  for (deviceParam = device.params().begin();
686                  for (iter = params.begin(); iter != params.end(); ++iter)                                  deviceParam != device.params().end();
687                          ts << " " << iter.key() << "='" << iter.data().value << "'";                                          ++deviceParam) {
688                            const qsamplerDeviceParam& param = deviceParam.data();
689                            if (param.value.isEmpty()) ts << "# ";
690                            ts << " " << deviceParam.key() << "='" << param.value << "'";
691                    }
692                  ts << endl;                  ts << endl;
693                    // Audio channel parameters...
694                    int iPort = 0;
695                    for (qsamplerDevicePort *pPort = device.ports().first();
696                                    pPort;
697                                            pPort = device.ports().next(), ++iPort) {
698                            qsamplerDeviceParamMap::ConstIterator portParam;
699                            for (portParam = pPort->params().begin();
700                                            portParam != pPort->params().end();
701                                                    ++portParam) {
702                                    const qsamplerDeviceParam& param = portParam.data();
703                                    if (param.fix || param.value.isEmpty()) ts << "# ";
704                                    ts << "SET AUDIO_OUTPUT_CHANNEL_PARAMETER " << iDevice
705                                            << " " << iPort << " " << portParam.key()
706                                            << "='" << param.value << "'" << endl;
707                            }
708                    }
709                    // Audio device index/id mapping.
710                  audioDeviceMap[device.deviceID()] = iDevice;                  audioDeviceMap[device.deviceID()] = iDevice;
711          // Try to keep it snappy :)          // Try to keep it snappy :)
712          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
# Line 684  bool qsamplerMainForm::saveSessionFile ( Line 715  bool qsamplerMainForm::saveSessionFile (
715          QMap<int, int> midiDeviceMap;          QMap<int, int> midiDeviceMap;
716          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);
717          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {
                 qsamplerDevice device(m_pClient, qsamplerDevice::Midi, piDeviceIDs[iDevice]);  
718                  ts << endl;                  ts << endl;
719          ts << "# " << device.deviceTypeName() << " " << device.driverName()                  qsamplerDevice device(this, qsamplerDevice::Midi, piDeviceIDs[iDevice]);
720                     << " " << tr("Device") << " " << iDevice << endl;                  // MIDI device specification...
721                    ts << "# " << device.deviceTypeName() << " " << device.driverName()
722                            << " " << tr("Device") << " " << iDevice << endl;
723                  ts << "CREATE MIDI_INPUT_DEVICE " << device.driverName();                  ts << "CREATE MIDI_INPUT_DEVICE " << device.driverName();
724                  qsamplerDeviceParamMap& params = device.params();                  qsamplerDeviceParamMap::ConstIterator deviceParam;
725                  qsamplerDeviceParamMap::ConstIterator iter;                  for (deviceParam = device.params().begin();
726                  for (iter = params.begin(); iter != params.end(); ++iter)                                  deviceParam != device.params().end();
727                          ts << " " << iter.key() << "='" << iter.data().value << "'";                                          ++deviceParam) {
728                            const qsamplerDeviceParam& param = deviceParam.data();
729                            if (param.value.isEmpty()) ts << "# ";
730                            ts << " " << deviceParam.key() << "='" << param.value << "'";
731                    }
732                  ts << endl;                  ts << endl;
733                    // MIDI port parameters...
734                    int iPort = 0;
735                    for (qsamplerDevicePort *pPort = device.ports().first();
736                                    pPort;
737                                            pPort = device.ports().next(), ++iPort) {
738                            qsamplerDeviceParamMap::ConstIterator portParam;
739                            for (portParam = pPort->params().begin();
740                                            portParam != pPort->params().end();
741                                                    ++portParam) {
742                                    const qsamplerDeviceParam& param = portParam.data();
743                                    if (param.fix || param.value.isEmpty()) ts << "# ";
744                                    ts << "SET MIDI_INPUT_PORT_PARAMETER " << iDevice
745                                       << " " << iPort << " " << portParam.key()
746                                       << "='" << param.value << "'" << endl;
747                            }
748                    }
749                    // MIDI device index/id mapping.
750                  midiDeviceMap[device.deviceID()] = iDevice;                  midiDeviceMap[device.deviceID()] = iDevice;
751          // Try to keep it snappy :)          // Try to keep it snappy :)
752          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
# Line 708  bool qsamplerMainForm::saveSessionFile ( Line 761  bool qsamplerMainForm::saveSessionFile (
761              if (pChannel) {              if (pChannel) {
762                  ts << "# " << tr("Channel") << " " << iChannel << endl;                  ts << "# " << tr("Channel") << " " << iChannel << endl;
763                  ts << "ADD CHANNEL" << endl;                  ts << "ADD CHANNEL" << endl;
764                  if (audioDeviceMap.isEmpty()) {                                  if (audioDeviceMap.isEmpty()) {
765                          ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannel                                          ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannel
766                                              << " " << pChannel->audioDriver() << endl;                                                  << " " << pChannel->audioDriver() << endl;
767                              } else {                                  } else {
768                          ts << "SET CHANNEL AUDIO_OUTPUT_DEVICE " << iChannel                                          ts << "SET CHANNEL AUDIO_OUTPUT_DEVICE " << iChannel
769                                             << " " << audioDeviceMap[pChannel->audioDevice()] << endl;                                                  << " " << audioDeviceMap[pChannel->audioDevice()] << endl;
770                                    }
771                                    if (midiDeviceMap.isEmpty()) {
772                                            ts << "SET CHANNEL MIDI_INPUT_TYPE " << iChannel
773                                                    << " " << pChannel->midiDriver() << endl;
774                                    } else {
775                                            ts << "SET CHANNEL MIDI_INPUT_DEVICE " << iChannel
776                                                    << " " << midiDeviceMap[pChannel->midiDevice()] << endl;
777                                  }                                  }
778                  if (midiDeviceMap.isEmpty()) {                                  ts << "SET CHANNEL MIDI_INPUT_PORT " << iChannel
779                          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;  
780                  ts << "SET CHANNEL MIDI_INPUT_CHANNEL " << iChannel << " ";                  ts << "SET CHANNEL MIDI_INPUT_CHANNEL " << iChannel << " ";
781                  if (pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL)                  if (pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL)
782                      ts << "ALL";                      ts << "ALL";
# Line 733  bool qsamplerMainForm::saveSessionFile ( Line 786  bool qsamplerMainForm::saveSessionFile (
786                  ts << "LOAD ENGINE " << pChannel->engineName() << " " << iChannel << endl;                  ts << "LOAD ENGINE " << pChannel->engineName() << " " << iChannel << endl;
787                  ts << "LOAD INSTRUMENT NON_MODAL '" << pChannel->instrumentFile() << "' " << pChannel->instrumentNr() << " " << iChannel << endl;                  ts << "LOAD INSTRUMENT NON_MODAL '" << pChannel->instrumentFile() << "' " << pChannel->instrumentNr() << " " << iChannel << endl;
788                  ts << "SET CHANNEL VOLUME " << iChannel << " " << pChannel->volume() << endl;                  ts << "SET CHANNEL VOLUME " << iChannel << " " << pChannel->volume() << endl;
789                    if (pChannel->channelMute())
790                            ts << "SET CHANNEL MUTE " << iChannel << " 1" << endl;
791                    if (pChannel->channelSolo())
792                            ts << "SET CHANNEL SOLO " << iChannel << " 1" << endl;
793                  ts << endl;                  ts << endl;
794              }              }
795          }          }
# Line 828  void qsamplerMainForm::fileReset (void) Line 885  void qsamplerMainForm::fileReset (void)
885          tr("Resetting the sampler instance will close\n"          tr("Resetting the sampler instance will close\n"
886             "all device and channel configurations.\n\n"             "all device and channel configurations.\n\n"
887             "Please note that this operation may cause\n"             "Please note that this operation may cause\n"
888             "temporary MIDI and Audio disruption\n\n"             "temporary MIDI and Audio disruption.\n\n"
889             "Do you want to reset the sampler engine now?"),             "Do you want to reset the sampler engine now?"),
890          tr("Reset"), tr("Cancel")) > 0)          tr("Reset"), tr("Cancel")) > 0)
891          return;          return;
# Line 853  void qsamplerMainForm::fileRestart (void Line 910  void qsamplerMainForm::fileRestart (void
910  {  {
911      if (m_pOptions == NULL)      if (m_pOptions == NULL)
912          return;          return;
913            
914      bool bRestart = true;      bool bRestart = true;
915        
916      // Ask user whether he/she want's a complete restart...      // Ask user whether he/she want's a complete restart...
917      // (if we're currently up and running)      // (if we're currently up and running)
918      if (bRestart && m_pClient) {      if (bRestart && m_pClient) {
# Line 863  void qsamplerMainForm::fileRestart (void Line 920  void qsamplerMainForm::fileRestart (void
920              tr("New settings will be effective after\n"              tr("New settings will be effective after\n"
921                 "restarting the client/server connection.\n\n"                 "restarting the client/server connection.\n\n"
922                 "Please note that this operation may cause\n"                 "Please note that this operation may cause\n"
923                 "temporary MIDI and Audio disruption\n\n"                 "temporary MIDI and Audio disruption.\n\n"
924                 "Do you want to restart the connection now?"),                 "Do you want to restart the connection now?"),
925              tr("Restart"), tr("Cancel")) == 0);              tr("Restart"), tr("Cancel")) == 0);
926      }      }
# Line 906  void qsamplerMainForm::editAddChannel (v Line 963  void qsamplerMainForm::editAddChannel (v
963          delete pChannel;          delete pChannel;
964          return;          return;
965      }      }
966        
967      // 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).
968      if (!createChannelStrip(pChannel)) {      if (!createChannelStrip(pChannel)) {
969          delete pChannel;          delete pChannel;
# Line 928  void qsamplerMainForm::editRemoveChannel Line 985  void qsamplerMainForm::editRemoveChannel
985      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();
986      if (pChannelStrip == NULL)      if (pChannelStrip == NULL)
987          return;          return;
988            
989      qsamplerChannel *pChannel = pChannelStrip->channel();      qsamplerChannel *pChannel = pChannelStrip->channel();
990      if (pChannel == NULL)      if (pChannel == NULL)
991          return;          return;
# Line 950  void qsamplerMainForm::editRemoveChannel Line 1007  void qsamplerMainForm::editRemoveChannel
1007    
1008      // Just delete the channel strip.      // Just delete the channel strip.
1009      delete pChannelStrip;      delete pChannelStrip;
1010        
1011      // Do we auto-arrange?      // Do we auto-arrange?
1012      if (m_pOptions && m_pOptions->bAutoArrange)      if (m_pOptions && m_pOptions->bAutoArrange)
1013          channelsArrange();          channelsArrange();
# Line 994  void qsamplerMainForm::editResetChannel Line 1051  void qsamplerMainForm::editResetChannel
1051  // Reset all sampler channels.  // Reset all sampler channels.
1052  void qsamplerMainForm::editResetAllChannels (void)  void qsamplerMainForm::editResetAllChannels (void)
1053  {  {
1054      if (m_pClient == NULL)          if (m_pClient == NULL)
1055          return;                  return;
1056    
1057      // Invoque the channel strip procedure,          // Invoque the channel strip procedure,
1058          // for all channels out there...          // for all channels out there...
1059      m_pWorkspace->setUpdatesEnabled(false);          m_pWorkspace->setUpdatesEnabled(false);
1060      QWidgetList wlist = m_pWorkspace->windowList();          QWidgetList wlist = m_pWorkspace->windowList();
1061      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1062          qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1063          if (pChannelStrip)                  if (pChannelStrip)
1064                  pChannelStrip->channelReset();                          pChannelStrip->channelReset();
1065      }          }
1066      m_pWorkspace->setUpdatesEnabled(true);          m_pWorkspace->setUpdatesEnabled(true);
1067  }  }
1068    
1069    
# Line 1061  void qsamplerMainForm::viewMessages ( bo Line 1118  void qsamplerMainForm::viewMessages ( bo
1118  // Show/hide the device configurator form.  // Show/hide the device configurator form.
1119  void qsamplerMainForm::viewDevices (void)  void qsamplerMainForm::viewDevices (void)
1120  {  {
1121      if (m_pOptions == NULL)          if (m_pOptions == NULL)
1122          return;                  return;
1123    
1124      if (m_pDeviceForm) {          if (m_pDeviceForm) {
1125          m_pOptions->saveWidgetGeometry(m_pDeviceForm);                  m_pOptions->saveWidgetGeometry(m_pDeviceForm);
1126                  m_pDeviceForm->setClient(m_pClient);                  m_pDeviceForm->setClient(m_pClient);
1127          if (m_pDeviceForm->isVisible()) {                  if (m_pDeviceForm->isVisible()) {
1128              m_pDeviceForm->hide();                          m_pDeviceForm->hide();
1129          } else {                  } else {
1130              m_pDeviceForm->show();                          m_pDeviceForm->show();
1131              m_pDeviceForm->raise();                          m_pDeviceForm->raise();
1132              m_pDeviceForm->setActiveWindow();                          m_pDeviceForm->setActiveWindow();
1133          }                  }
1134      }          }
1135  }  }
1136    
1137    
# Line 1192  void qsamplerMainForm::channelsArrange ( Line 1249  void qsamplerMainForm::channelsArrange (
1249          y += iHeight;          y += iHeight;
1250      }      }
1251      m_pWorkspace->setUpdatesEnabled(true);      m_pWorkspace->setUpdatesEnabled(true);
1252        
1253      stabilizeForm();      stabilizeForm();
1254  }  }
1255    
# Line 1246  void qsamplerMainForm::helpAbout (void) Line 1303  void qsamplerMainForm::helpAbout (void)
1303      sText += tr("LSCP (liblscp) instrument_name support disabled.");      sText += tr("LSCP (liblscp) instrument_name support disabled.");
1304      sText += "</font></small><br />";      sText += "</font></small><br />";
1305  #endif  #endif
1306    #ifndef CONFIG_MUTE_SOLO
1307        sText += "<small><font color=\"red\">";
1308        sText += tr("Sampler channel Mute/Solo support disabled.");
1309        sText += "</font></small><br />";
1310    #endif
1311      sText += "<br />\n";      sText += "<br />\n";
1312      sText += tr("Using") + ": ";      sText += tr("Using") + ": ";
1313      sText += ::lscp_client_package();      sText += ::lscp_client_package();
1314      sText += " ";      sText += " ";
1315      sText += ::lscp_client_version();      sText += ::lscp_client_version();
1316    #ifdef CONFIG_LIBGIG
1317        sText += ", ";
1318        sText += gig::libraryName().c_str();
1319        sText += " ";
1320        sText += gig::libraryVersion().c_str();
1321    #endif
1322      sText += "<br />\n";      sText += "<br />\n";
1323      sText += "<br />\n";      sText += "<br />\n";
1324      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 1330  void qsamplerMainForm::stabilizeForm (vo Line 1398  void qsamplerMainForm::stabilizeForm (vo
1398  void qsamplerMainForm::channelStripChanged( qsamplerChannelStrip *pChannelStrip )  void qsamplerMainForm::channelStripChanged( qsamplerChannelStrip *pChannelStrip )
1399  {  {
1400          // Add this strip to the changed list...          // Add this strip to the changed list...
1401          if (m_changedStrips.containsRef(pChannelStrip) == 0)          if (m_changedStrips.containsRef(pChannelStrip) == 0) {
1402                  m_changedStrips.append(pChannelStrip);                  m_changedStrips.append(pChannelStrip);
1403                    pChannelStrip->resetErrorCount();
1404            }
1405    
1406      // Just mark the dirty form.      // Just mark the dirty form.
1407      m_iDirtyCount++;      m_iDirtyCount++;
# Line 1363  void qsamplerMainForm::updateSession (vo Line 1433  void qsamplerMainForm::updateSession (vo
1433                  QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);                  QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
1434          }          }
1435          m_pWorkspace->setUpdatesEnabled(true);          m_pWorkspace->setUpdatesEnabled(true);
1436            
1437            // Remember to refresh devices
1438            if (m_pDeviceForm)
1439                m_pDeviceForm->refreshDevices();
1440  }  }
1441    
1442    
# Line 1573  void qsamplerMainForm::updateMessagesLim Line 1647  void qsamplerMainForm::updateMessagesLim
1647          if (m_pOptions->bMessagesLimit)          if (m_pOptions->bMessagesLimit)
1648              m_pMessages->setMessagesLimit(m_pOptions->iMessagesLimitLines);              m_pMessages->setMessagesLimit(m_pOptions->iMessagesLimitLines);
1649          else          else
1650              m_pMessages->setMessagesLimit(0);              m_pMessages->setMessagesLimit(-1);
1651      }      }
1652  }  }
1653    
# Line 1617  qsamplerChannelStrip *qsamplerMainForm:: Line 1691  qsamplerChannelStrip *qsamplerMainForm::
1691      pChannelStrip = new qsamplerChannelStrip(m_pWorkspace, 0, wflags);      pChannelStrip = new qsamplerChannelStrip(m_pWorkspace, 0, wflags);
1692      if (pChannelStrip == NULL)      if (pChannelStrip == NULL)
1693          return NULL;          return NULL;
1694            
1695      // Actual channel strip setup...      // Actual channel strip setup...
1696      pChannelStrip->setup(pChannel);      pChannelStrip->setup(pChannel);
1697      QObject::connect(pChannelStrip, SIGNAL(channelChanged(qsamplerChannelStrip *)), this, SLOT(channelStripChanged(qsamplerChannelStrip *)));      QObject::connect(pChannelStrip, SIGNAL(channelChanged(qsamplerChannelStrip *)), this, SLOT(channelStripChanged(qsamplerChannelStrip *)));
# Line 1675  qsamplerChannelStrip *qsamplerMainForm:: Line 1749  qsamplerChannelStrip *qsamplerMainForm::
1749          QWidgetList wlist = m_pWorkspace->windowList();          QWidgetList wlist = m_pWorkspace->windowList();
1750          if (wlist.isEmpty())          if (wlist.isEmpty())
1751                  return NULL;                  return NULL;
1752            
1753          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1754                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1755                  if (pChannelStrip) {                  if (pChannelStrip) {
# Line 1756  void qsamplerMainForm::timerSlot (void) Line 1830  void qsamplerMainForm::timerSlot (void)
1830              }              }
1831          }          }
1832      }      }
1833        
1834          // Refresh each channel usage, on each period...          if (m_pClient) {
1835      if (m_pClient && (m_changedStrips.count() > 0 || m_pOptions->bAutoRefresh)) {                  // Update the channel information for each pending strip...
1836          m_iTimerSlot += QSAMPLER_TIMER_MSECS;                  if (m_changedStrips.count() > 0) {
1837          if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime && m_pWorkspace->isUpdatesEnabled())  {                          for (qsamplerChannelStrip *pChannelStrip = m_changedStrips.first();
1838              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()) {  
1839                                  // If successfull, remove from pending list...                                  // If successfull, remove from pending list...
1840                                  if (pChannelStrip->updateChannelInfo())                                  if (pChannelStrip->updateChannelInfo())
1841                      m_changedStrips.remove(pChannelStrip);                                          m_changedStrips.remove(pChannelStrip);
1842                          }                          }
1843              // Update the channel stream usage for each strip...                  }
1844              QWidgetList wlist = m_pWorkspace->windowList();                  // Refresh each channel usage, on each period...
1845              for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {                  if (m_pOptions->bAutoRefresh) {
1846                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);                          m_iTimerSlot += QSAMPLER_TIMER_MSECS;
1847                  if (pChannelStrip && pChannelStrip->isVisible())                          if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime)  {
1848                      pChannelStrip->updateChannelUsage();                                  m_iTimerSlot = 0;
1849              }                                  // Update the channel stream usage for each strip...
1850          }                                  QWidgetList wlist = m_pWorkspace->windowList();
1851      }                                  for (int iChannel = 0;
1852                                                    iChannel < (int) wlist.count(); iChannel++) {
1853                                            qsamplerChannelStrip *pChannelStrip
1854                                                    = (qsamplerChannelStrip *) wlist.at(iChannel);
1855                                            if (pChannelStrip && pChannelStrip->isVisible())
1856                                                    pChannelStrip->updateChannelUsage();
1857                                    }
1858                            }
1859                    }
1860            }
1861    
1862      // Register the next timer slot.      // Register the next timer slot.
1863      QTimer::singleShot(QSAMPLER_TIMER_MSECS, this, SLOT(timerSlot()));      QTimer::singleShot(QSAMPLER_TIMER_MSECS, this, SLOT(timerSlot()));
# Line 1959  bool qsamplerMainForm::startClient (void Line 2038  bool qsamplerMainForm::startClient (void
2038      ::lscp_client_set_timeout(m_pClient, m_pOptions->iServerTimeout);      ::lscp_client_set_timeout(m_pClient, m_pOptions->iServerTimeout);
2039      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)));
2040    
2041            // Subscribe to channel info change notifications...
2042            if (::lscp_client_subscribe(m_pClient, LSCP_EVENT_CHANNEL_INFO) != LSCP_OK)
2043                    appendMessagesClient("lscp_client_subscribe");
2044    
2045      // We may stop scheduling around.      // We may stop scheduling around.
2046      stopSchedule();      stopSchedule();
2047    
# Line 1972  bool qsamplerMainForm::startClient (void Line 2055  bool qsamplerMainForm::startClient (void
2055          // if visible, that we're ready...          // if visible, that we're ready...
2056          if (m_pDeviceForm && m_pDeviceForm->isVisible())          if (m_pDeviceForm && m_pDeviceForm->isVisible())
2057              m_pDeviceForm->setClient(m_pClient);              m_pDeviceForm->setClient(m_pClient);
2058                
2059      // Is any session pending to be loaded?      // Is any session pending to be loaded?
2060      if (!m_pOptions->sSessionFile.isEmpty()) {      if (!m_pOptions->sSessionFile.isEmpty()) {
2061          // Just load the prabably startup session...          // Just load the prabably startup session...
# Line 2012  void qsamplerMainForm::stopClient (void) Line 2095  void qsamplerMainForm::stopClient (void)
2095      // channels from the back-end server.      // channels from the back-end server.
2096      m_iDirtyCount = 0;      m_iDirtyCount = 0;
2097      closeSession(false);      closeSession(false);
2098        
2099      // Close us as a client...      // Close us as a client...
2100      lscp_client_destroy(m_pClient);          ::lscp_client_unsubscribe(m_pClient, LSCP_EVENT_CHANNEL_INFO);
2101        ::lscp_client_destroy(m_pClient);
2102      m_pClient = NULL;      m_pClient = NULL;
2103    
2104      // Log final here.      // Log final here.

Legend:
Removed from v.456  
changed lines
  Added in v.753

  ViewVC Help
Powered by ViewVC