/[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 463 by capela, Tue Mar 15 15:32:29 2005 UTC revision 662 by capela, Sat Jun 18 10:46:57 2005 UTC
# Line 51  Line 51 
51  #include <signal.h>  #include <signal.h>
52  #endif  #endif
53    
54    #ifdef CONFIG_LIBGIG
55    #include <gig.h>
56    #endif
57    
58  // Timer constant stuff.  // Timer constant stuff.
59  #define QSAMPLER_TIMER_MSECS    200  #define QSAMPLER_TIMER_MSECS    200
60    
# Line 218  void qsamplerMainForm::setup ( qsamplerO Line 222  void qsamplerMainForm::setup ( qsamplerO
222      // Some child forms are to be created right now.      // Some child forms are to be created right now.
223      m_pMessages = new qsamplerMessages(this);      m_pMessages = new qsamplerMessages(this);
224      m_pDeviceForm = new qsamplerDeviceForm(this, 0, wflags);      m_pDeviceForm = new qsamplerDeviceForm(this, 0, wflags);
225        m_pDeviceForm->setMainForm(this); // An important life immutable!
226      // Set message defaults...      // Set message defaults...
227      updateMessagesFont();      updateMessagesFont();
228      updateMessagesLimit();      updateMessagesLimit();
# Line 287  bool qsamplerMainForm::queryClose (void) Line 292  bool qsamplerMainForm::queryClose (void)
292              ostr << *this;              ostr << *this;
293              m_pOptions->settings().writeEntry("/Layout/DockWindows", sDockables);              m_pOptions->settings().writeEntry("/Layout/DockWindows", sDockables);
294              // And the children, and the main windows state,.              // And the children, and the main windows state,.
295                  m_pOptions->saveWidgetGeometry(m_pDeviceForm);                          m_pOptions->saveWidgetGeometry(m_pDeviceForm);
296              m_pOptions->saveWidgetGeometry(this);                          m_pOptions->saveWidgetGeometry(this);
297                  // Close popup widgets.                          // Close popup widgets.
298                  if (m_pDeviceForm)                          if (m_pDeviceForm)
299                      m_pDeviceForm->close();                                  m_pDeviceForm->close();
300              // Stop client and/or server, gracefully.              // Stop client and/or server, gracefully.
301              stopServer();              stopServer();
302          }          }
# Line 344  void qsamplerMainForm::dropEvent ( QDrop Line 349  void qsamplerMainForm::dropEvent ( QDrop
349      if (!decodeDragFiles(pDropEvent, files))      if (!decodeDragFiles(pDropEvent, files))
350          return;          return;
351    
352      for (QStringList::Iterator iter = files.begin(); iter != files.end(); iter++) {          for (QStringList::Iterator iter = files.begin(); iter != files.end(); iter++) {
353                  const QString& sPath = *iter;                  const QString& sPath = *iter;
354                  if (qsamplerChannel::isInstrumentFile(sPath)) {                  if (qsamplerChannel::isInstrumentFile(sPath)) {
355                          // Try to create a new channel from instrument file...                          // Try to create a new channel from instrument file...
356                      qsamplerChannel *pChannel = new qsamplerChannel(this);                          qsamplerChannel *pChannel = new qsamplerChannel(this);
357                      if (pChannel == NULL)                          if (pChannel == NULL)
358                          return;                                  return;
359                          // Start setting the instrument filename...                          // Start setting the instrument filename...
360                          pChannel->setInstrument(sPath, 0);                          pChannel->setInstrument(sPath, 0);
361                      // Before we show it up, may be we'll                          // Before we show it up, may be we'll
362                      // better ask for some initial values?                          // better ask for some initial values?
363                      if (!pChannel->channelSetup(this)) {                          if (!pChannel->channelSetup(this)) {
364                          delete pChannel;                                  delete pChannel;
365                          return;                                  return;
366                      }                          }
367                      // Finally, give it to a new channel strip...                          // Finally, give it to a new channel strip...
368                          if (!createChannelStrip(pChannel)) {                          if (!createChannelStrip(pChannel)) {
369                          delete pChannel;                                  delete pChannel;
370                          return;                                  return;
371                          }                          }
372                      // Make that an overall update.                          // Make that an overall update.
373                      m_iDirtyCount++;                          m_iDirtyCount++;
374                      stabilizeForm();                          stabilizeForm();
375                  }   // Otherwise, load an usual session file (LSCP script)...                  }   // Otherwise, load an usual session file (LSCP script)...
376                  else if (closeSession(true))                  else if (closeSession(true))
377                          loadSessionFile(sPath);                          loadSessionFile(sPath);
# Line 385  void qsamplerMainForm::customEvent ( QCu Line 390  void qsamplerMainForm::customEvent ( QCu
390          appendMessagesColor(tr("Notify event: %1 data: %2")          appendMessagesColor(tr("Notify event: %1 data: %2")
391              .arg(::lscp_event_to_text(pEvent->event()))              .arg(::lscp_event_to_text(pEvent->event()))
392              .arg(pEvent->data()), "#996699");              .arg(pEvent->data()), "#996699");
393                    if (pEvent->event() == LSCP_EVENT_CHANNEL_INFO) {
394                            int iChannelID = pEvent->data().toInt();
395                            qsamplerChannelStrip *pChannelStrip = channelStrip(iChannelID);
396                            if (pChannelStrip)
397                                    channelStripChanged(pChannelStrip);
398                    }
399      }      }
400  }  }
401    
# Line 393  void qsamplerMainForm::customEvent ( QCu Line 404  void qsamplerMainForm::customEvent ( QCu
404  void qsamplerMainForm::contextMenuEvent( QContextMenuEvent *pEvent )  void qsamplerMainForm::contextMenuEvent( QContextMenuEvent *pEvent )
405  {  {
406      stabilizeForm();      stabilizeForm();
407        
408      editMenu->exec(pEvent->globalPos());      editMenu->exec(pEvent->globalPos());
409  }  }
410    
# Line 598  bool qsamplerMainForm::loadSessionFile ( Line 609  bool qsamplerMainForm::loadSessionFile (
609              if (::lscp_client_query(m_pClient, sCommand.latin1()) != LSCP_OK) {              if (::lscp_client_query(m_pClient, sCommand.latin1()) != LSCP_OK) {
610                  appendMessagesClient("lscp_client_query");                  appendMessagesClient("lscp_client_query");
611                  iErrors++;                  iErrors++;
                 break;  
612              }              }
613          }          }
614          // Try to make it snappy :)          // Try to make it snappy :)
# Line 608  bool qsamplerMainForm::loadSessionFile ( Line 618  bool qsamplerMainForm::loadSessionFile (
618      // Ok. we've read it.      // Ok. we've read it.
619      file.close();      file.close();
620    
     // Have we any errors?  
     if (iErrors > 0)  
         appendMessagesError(tr("Session could not be loaded\nfrom \"%1\".\n\nSorry.").arg(sFilename));  
   
621          // Now we'll try to create (update) the whole GUI session.          // Now we'll try to create (update) the whole GUI session.
622          updateSession();          updateSession();
623    
624            // Have we any errors?
625            if (iErrors > 0)
626                    appendMessagesError(tr("Session loaded with errors\nfrom \"%1\".\n\nSorry.").arg(sFilename));
627    
628      // Save as default session directory.      // Save as default session directory.
629      if (m_pOptions)      if (m_pOptions)
630          m_pOptions->sSessionDir = QFileInfo(sFilename).dirPath(true);          m_pOptions->sSessionDir = QFileInfo(sFilename).dirPath(true);
631      // We're not dirty anymore.          // We're not dirty anymore, if loaded without errors,
632      m_iDirtyCount = 0;          m_iDirtyCount = iErrors;
633      // Stabilize form...      // Stabilize form...
634      m_sFilename = sFilename;      m_sFilename = sFilename;
635      updateRecentFiles(sFilename);      updateRecentFiles(sFilename);
636      appendMessages(tr("Open session: \"%1\".").arg(sessionName(m_sFilename)));      appendMessages(tr("Open session: \"%1\".").arg(sessionName(m_sFilename)));
637        
638      // Make that an overall update.      // Make that an overall update.
639      stabilizeForm();      stabilizeForm();
640      return true;      return true;
# Line 667  bool qsamplerMainForm::saveSessionFile ( Line 677  bool qsamplerMainForm::saveSessionFile (
677          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);
678          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {
679                  ts << endl;                  ts << endl;
680                  qsamplerDevice device(m_pClient, qsamplerDevice::Audio, piDeviceIDs[iDevice]);                  qsamplerDevice device(this, qsamplerDevice::Audio, piDeviceIDs[iDevice]);
681                  // Audio device specification...                  // Audio device specification...
682          ts << "# " << device.deviceTypeName() << " " << device.driverName()                  ts << "# " << device.deviceTypeName() << " " << device.driverName()
683                     << " " << tr("Device") << " " << iDevice << endl;                          << " " << tr("Device") << " " << iDevice << endl;
684                  ts << "CREATE AUDIO_OUTPUT_DEVICE " << device.driverName();                  ts << "CREATE AUDIO_OUTPUT_DEVICE " << device.driverName();
685                  qsamplerDeviceParamMap::ConstIterator deviceParam;                  qsamplerDeviceParamMap::ConstIterator deviceParam;
686                  for (deviceParam = device.params().begin();                  for (deviceParam = device.params().begin();
687                                  deviceParam != device.params().end();                                  deviceParam != device.params().end();
688                                          ++deviceParam) {                                          ++deviceParam) {
689                          ts << " " << deviceParam.key()                          const qsamplerDeviceParam& param = deviceParam.data();
690                             << "='" << deviceParam.data().value << "'";                          if (param.value.isEmpty()) ts << "# ";
691                            ts << " " << deviceParam.key() << "='" << param.value << "'";
692                  }                  }
693                  ts << endl;                  ts << endl;
694                  // Audio channel parameters...                  // Audio channel parameters...
# Line 689  bool qsamplerMainForm::saveSessionFile ( Line 700  bool qsamplerMainForm::saveSessionFile (
700                          for (portParam = pPort->params().begin();                          for (portParam = pPort->params().begin();
701                                          portParam != pPort->params().end();                                          portParam != pPort->params().end();
702                                                  ++portParam) {                                                  ++portParam) {
703                                    const qsamplerDeviceParam& param = portParam.data();
704                                    if (param.fix || param.value.isEmpty()) ts << "# ";
705                                  ts << "SET AUDIO_OUTPUT_CHANNEL_PARAMETER " << iDevice                                  ts << "SET AUDIO_OUTPUT_CHANNEL_PARAMETER " << iDevice
706                                     << " " << iPort << " " << portParam.key()                                          << " " << iPort << " " << portParam.key()
707                                     << "='" << portParam.data().value << "'" << endl;                                          << "='" << param.value << "'" << endl;
708                          }                          }
709                  }                  }
710                  // Set device index/id mapping.                  // Audio device index/id mapping.
711                  audioDeviceMap[device.deviceID()] = iDevice;                  audioDeviceMap[device.deviceID()] = iDevice;
712          // Try to keep it snappy :)          // Try to keep it snappy :)
713          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);          QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
# Line 704  bool qsamplerMainForm::saveSessionFile ( Line 717  bool qsamplerMainForm::saveSessionFile (
717          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);
718          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {          for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) {
719                  ts << endl;                  ts << endl;
720                  qsamplerDevice device(m_pClient, qsamplerDevice::Midi, piDeviceIDs[iDevice]);                  qsamplerDevice device(this, qsamplerDevice::Midi, piDeviceIDs[iDevice]);
721                  // MIDI device specification...                  // MIDI device specification...
722          ts << "# " << device.deviceTypeName() << " " << device.driverName()                  ts << "# " << device.deviceTypeName() << " " << device.driverName()
723                     << " " << tr("Device") << " " << iDevice << endl;                          << " " << tr("Device") << " " << iDevice << endl;
724                  ts << "CREATE MIDI_INPUT_DEVICE " << device.driverName();                  ts << "CREATE MIDI_INPUT_DEVICE " << device.driverName();
725                  qsamplerDeviceParamMap::ConstIterator deviceParam;                  qsamplerDeviceParamMap::ConstIterator deviceParam;
726                  for (deviceParam = device.params().begin();                  for (deviceParam = device.params().begin();
727                                  deviceParam != device.params().end();                                  deviceParam != device.params().end();
728                                          ++deviceParam) {                                          ++deviceParam) {
729                          ts << " " << deviceParam.key()                          const qsamplerDeviceParam& param = deviceParam.data();
730                             << "='" << deviceParam.data().value << "'";                          if (param.value.isEmpty()) ts << "# ";
731                            ts << " " << deviceParam.key() << "='" << param.value << "'";
732                  }                  }
733                  ts << endl;                  ts << endl;
734                  // MIDI port parameters...                  // MIDI port parameters...
# Line 726  bool qsamplerMainForm::saveSessionFile ( Line 740  bool qsamplerMainForm::saveSessionFile (
740                          for (portParam = pPort->params().begin();                          for (portParam = pPort->params().begin();
741                                          portParam != pPort->params().end();                                          portParam != pPort->params().end();
742                                                  ++portParam) {                                                  ++portParam) {
743                                    const qsamplerDeviceParam& param = portParam.data();
744                                    if (param.fix || param.value.isEmpty()) ts << "# ";
745                                  ts << "SET MIDI_INPUT_PORT_PARAMETER " << iDevice                                  ts << "SET MIDI_INPUT_PORT_PARAMETER " << iDevice
746                                     << " " << iPort << " " << portParam.key()                                     << " " << iPort << " " << portParam.key()
747                                     << "='" << portParam.data().value << "'" << endl;                                     << "='" << param.value << "'" << endl;
748                          }                          }
749                  }                  }
750                    // MIDI device index/id mapping.
751                    midiDeviceMap[device.deviceID()] = iDevice;
752            // Try to keep it snappy :)
753            QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
754          }          }
755          ts << endl;          ts << endl;
756          // Sampler channel mapping.          // Sampler channel mapping.
# Line 742  bool qsamplerMainForm::saveSessionFile ( Line 762  bool qsamplerMainForm::saveSessionFile (
762              if (pChannel) {              if (pChannel) {
763                  ts << "# " << tr("Channel") << " " << iChannel << endl;                  ts << "# " << tr("Channel") << " " << iChannel << endl;
764                  ts << "ADD CHANNEL" << endl;                  ts << "ADD CHANNEL" << endl;
765                  if (audioDeviceMap.isEmpty()) {                                  if (audioDeviceMap.isEmpty()) {
766                          ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannel                                          ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannel
767                                              << " " << pChannel->audioDriver() << endl;                                                  << " " << pChannel->audioDriver() << endl;
768                              } else {                                  } else {
769                          ts << "SET CHANNEL AUDIO_OUTPUT_DEVICE " << iChannel                                          ts << "SET CHANNEL AUDIO_OUTPUT_DEVICE " << iChannel
770                                             << " " << audioDeviceMap[pChannel->audioDevice()] << endl;                                                  << " " << audioDeviceMap[pChannel->audioDevice()] << endl;
771                                    }
772                                    if (midiDeviceMap.isEmpty()) {
773                                            ts << "SET CHANNEL MIDI_INPUT_TYPE " << iChannel
774                                                    << " " << pChannel->midiDriver() << endl;
775                                    } else {
776                                            ts << "SET CHANNEL MIDI_INPUT_DEVICE " << iChannel
777                                                    << " " << midiDeviceMap[pChannel->midiDevice()] << endl;
778                                  }                                  }
779                  if (midiDeviceMap.isEmpty()) {                                  ts << "SET CHANNEL MIDI_INPUT_PORT " << iChannel
780                          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;  
781                  ts << "SET CHANNEL MIDI_INPUT_CHANNEL " << iChannel << " ";                  ts << "SET CHANNEL MIDI_INPUT_CHANNEL " << iChannel << " ";
782                  if (pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL)                  if (pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL)
783                      ts << "ALL";                      ts << "ALL";
# Line 862  void qsamplerMainForm::fileReset (void) Line 882  void qsamplerMainForm::fileReset (void)
882          tr("Resetting the sampler instance will close\n"          tr("Resetting the sampler instance will close\n"
883             "all device and channel configurations.\n\n"             "all device and channel configurations.\n\n"
884             "Please note that this operation may cause\n"             "Please note that this operation may cause\n"
885             "temporary MIDI and Audio disruption\n\n"             "temporary MIDI and Audio disruption.\n\n"
886             "Do you want to reset the sampler engine now?"),             "Do you want to reset the sampler engine now?"),
887          tr("Reset"), tr("Cancel")) > 0)          tr("Reset"), tr("Cancel")) > 0)
888          return;          return;
# Line 887  void qsamplerMainForm::fileRestart (void Line 907  void qsamplerMainForm::fileRestart (void
907  {  {
908      if (m_pOptions == NULL)      if (m_pOptions == NULL)
909          return;          return;
910            
911      bool bRestart = true;      bool bRestart = true;
912        
913      // Ask user whether he/she want's a complete restart...      // Ask user whether he/she want's a complete restart...
914      // (if we're currently up and running)      // (if we're currently up and running)
915      if (bRestart && m_pClient) {      if (bRestart && m_pClient) {
# Line 897  void qsamplerMainForm::fileRestart (void Line 917  void qsamplerMainForm::fileRestart (void
917              tr("New settings will be effective after\n"              tr("New settings will be effective after\n"
918                 "restarting the client/server connection.\n\n"                 "restarting the client/server connection.\n\n"
919                 "Please note that this operation may cause\n"                 "Please note that this operation may cause\n"
920                 "temporary MIDI and Audio disruption\n\n"                 "temporary MIDI and Audio disruption.\n\n"
921                 "Do you want to restart the connection now?"),                 "Do you want to restart the connection now?"),
922              tr("Restart"), tr("Cancel")) == 0);              tr("Restart"), tr("Cancel")) == 0);
923      }      }
# Line 940  void qsamplerMainForm::editAddChannel (v Line 960  void qsamplerMainForm::editAddChannel (v
960          delete pChannel;          delete pChannel;
961          return;          return;
962      }      }
963        
964      // 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).
965      if (!createChannelStrip(pChannel)) {      if (!createChannelStrip(pChannel)) {
966          delete pChannel;          delete pChannel;
# Line 962  void qsamplerMainForm::editRemoveChannel Line 982  void qsamplerMainForm::editRemoveChannel
982      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();      qsamplerChannelStrip *pChannelStrip = activeChannelStrip();
983      if (pChannelStrip == NULL)      if (pChannelStrip == NULL)
984          return;          return;
985            
986      qsamplerChannel *pChannel = pChannelStrip->channel();      qsamplerChannel *pChannel = pChannelStrip->channel();
987      if (pChannel == NULL)      if (pChannel == NULL)
988          return;          return;
# Line 984  void qsamplerMainForm::editRemoveChannel Line 1004  void qsamplerMainForm::editRemoveChannel
1004    
1005      // Just delete the channel strip.      // Just delete the channel strip.
1006      delete pChannelStrip;      delete pChannelStrip;
1007        
1008      // Do we auto-arrange?      // Do we auto-arrange?
1009      if (m_pOptions && m_pOptions->bAutoArrange)      if (m_pOptions && m_pOptions->bAutoArrange)
1010          channelsArrange();          channelsArrange();
# Line 1028  void qsamplerMainForm::editResetChannel Line 1048  void qsamplerMainForm::editResetChannel
1048  // Reset all sampler channels.  // Reset all sampler channels.
1049  void qsamplerMainForm::editResetAllChannels (void)  void qsamplerMainForm::editResetAllChannels (void)
1050  {  {
1051      if (m_pClient == NULL)          if (m_pClient == NULL)
1052          return;                  return;
1053    
1054      // Invoque the channel strip procedure,          // Invoque the channel strip procedure,
1055          // for all channels out there...          // for all channels out there...
1056      m_pWorkspace->setUpdatesEnabled(false);          m_pWorkspace->setUpdatesEnabled(false);
1057      QWidgetList wlist = m_pWorkspace->windowList();          QWidgetList wlist = m_pWorkspace->windowList();
1058      for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1059          qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1060          if (pChannelStrip)                  if (pChannelStrip)
1061                  pChannelStrip->channelReset();                          pChannelStrip->channelReset();
1062      }          }
1063      m_pWorkspace->setUpdatesEnabled(true);          m_pWorkspace->setUpdatesEnabled(true);
1064  }  }
1065    
1066    
# Line 1095  void qsamplerMainForm::viewMessages ( bo Line 1115  void qsamplerMainForm::viewMessages ( bo
1115  // Show/hide the device configurator form.  // Show/hide the device configurator form.
1116  void qsamplerMainForm::viewDevices (void)  void qsamplerMainForm::viewDevices (void)
1117  {  {
1118      if (m_pOptions == NULL)          if (m_pOptions == NULL)
1119          return;                  return;
1120    
1121      if (m_pDeviceForm) {          if (m_pDeviceForm) {
1122          m_pOptions->saveWidgetGeometry(m_pDeviceForm);                  m_pOptions->saveWidgetGeometry(m_pDeviceForm);
1123                  m_pDeviceForm->setClient(m_pClient);                  m_pDeviceForm->setClient(m_pClient);
1124          if (m_pDeviceForm->isVisible()) {                  if (m_pDeviceForm->isVisible()) {
1125              m_pDeviceForm->hide();                          m_pDeviceForm->hide();
1126          } else {                  } else {
1127              m_pDeviceForm->show();                          m_pDeviceForm->show();
1128              m_pDeviceForm->raise();                          m_pDeviceForm->raise();
1129              m_pDeviceForm->setActiveWindow();                          m_pDeviceForm->setActiveWindow();
1130          }                  }
1131      }          }
1132  }  }
1133    
1134    
# Line 1226  void qsamplerMainForm::channelsArrange ( Line 1246  void qsamplerMainForm::channelsArrange (
1246          y += iHeight;          y += iHeight;
1247      }      }
1248      m_pWorkspace->setUpdatesEnabled(true);      m_pWorkspace->setUpdatesEnabled(true);
1249        
1250      stabilizeForm();      stabilizeForm();
1251  }  }
1252    
# Line 1285  void qsamplerMainForm::helpAbout (void) Line 1305  void qsamplerMainForm::helpAbout (void)
1305      sText += ::lscp_client_package();      sText += ::lscp_client_package();
1306      sText += " ";      sText += " ";
1307      sText += ::lscp_client_version();      sText += ::lscp_client_version();
1308    #ifdef CONFIG_LIBGIG
1309        sText += ", ";
1310        sText += gig::libraryName();
1311        sText += " ";
1312        sText += gig::libraryVersion();
1313    #endif
1314      sText += "<br />\n";      sText += "<br />\n";
1315      sText += "<br />\n";      sText += "<br />\n";
1316      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 1364  void qsamplerMainForm::stabilizeForm (vo Line 1390  void qsamplerMainForm::stabilizeForm (vo
1390  void qsamplerMainForm::channelStripChanged( qsamplerChannelStrip *pChannelStrip )  void qsamplerMainForm::channelStripChanged( qsamplerChannelStrip *pChannelStrip )
1391  {  {
1392          // Add this strip to the changed list...          // Add this strip to the changed list...
1393          if (m_changedStrips.containsRef(pChannelStrip) == 0)          if (m_changedStrips.containsRef(pChannelStrip) == 0) {
1394                  m_changedStrips.append(pChannelStrip);                  m_changedStrips.append(pChannelStrip);
1395                    pChannelStrip->resetErrorCount();
1396            }
1397    
1398      // Just mark the dirty form.      // Just mark the dirty form.
1399      m_iDirtyCount++;      m_iDirtyCount++;
# Line 1397  void qsamplerMainForm::updateSession (vo Line 1425  void qsamplerMainForm::updateSession (vo
1425                  QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);                  QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput);
1426          }          }
1427          m_pWorkspace->setUpdatesEnabled(true);          m_pWorkspace->setUpdatesEnabled(true);
1428            
1429            // Remember to refresh devices
1430            if (m_pDeviceForm)
1431                m_pDeviceForm->refreshDevices();
1432  }  }
1433    
1434    
# Line 1607  void qsamplerMainForm::updateMessagesLim Line 1639  void qsamplerMainForm::updateMessagesLim
1639          if (m_pOptions->bMessagesLimit)          if (m_pOptions->bMessagesLimit)
1640              m_pMessages->setMessagesLimit(m_pOptions->iMessagesLimitLines);              m_pMessages->setMessagesLimit(m_pOptions->iMessagesLimitLines);
1641          else          else
1642              m_pMessages->setMessagesLimit(0);              m_pMessages->setMessagesLimit(-1);
1643      }      }
1644  }  }
1645    
# Line 1651  qsamplerChannelStrip *qsamplerMainForm:: Line 1683  qsamplerChannelStrip *qsamplerMainForm::
1683      pChannelStrip = new qsamplerChannelStrip(m_pWorkspace, 0, wflags);      pChannelStrip = new qsamplerChannelStrip(m_pWorkspace, 0, wflags);
1684      if (pChannelStrip == NULL)      if (pChannelStrip == NULL)
1685          return NULL;          return NULL;
1686            
1687      // Actual channel strip setup...      // Actual channel strip setup...
1688      pChannelStrip->setup(pChannel);      pChannelStrip->setup(pChannel);
1689      QObject::connect(pChannelStrip, SIGNAL(channelChanged(qsamplerChannelStrip *)), this, SLOT(channelStripChanged(qsamplerChannelStrip *)));      QObject::connect(pChannelStrip, SIGNAL(channelChanged(qsamplerChannelStrip *)), this, SLOT(channelStripChanged(qsamplerChannelStrip *)));
# Line 1709  qsamplerChannelStrip *qsamplerMainForm:: Line 1741  qsamplerChannelStrip *qsamplerMainForm::
1741          QWidgetList wlist = m_pWorkspace->windowList();          QWidgetList wlist = m_pWorkspace->windowList();
1742          if (wlist.isEmpty())          if (wlist.isEmpty())
1743                  return NULL;                  return NULL;
1744            
1745          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1746                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1747                  if (pChannelStrip) {                  if (pChannelStrip) {
# Line 1790  void qsamplerMainForm::timerSlot (void) Line 1822  void qsamplerMainForm::timerSlot (void)
1822              }              }
1823          }          }
1824      }      }
1825        
1826          // Refresh each channel usage, on each period...          // Refresh each channel usage, on each period...
1827      if (m_pClient && (m_changedStrips.count() > 0 || m_pOptions->bAutoRefresh)) {          if (m_pClient && (m_changedStrips.count() > 0 || m_pOptions->bAutoRefresh)) {
1828          m_iTimerSlot += QSAMPLER_TIMER_MSECS;                  m_iTimerSlot += QSAMPLER_TIMER_MSECS;
1829          if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime && m_pWorkspace->isUpdatesEnabled())  {                  if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime && m_pWorkspace->isUpdatesEnabled())  {
1830              m_iTimerSlot = 0;                          m_iTimerSlot = 0;
1831              // Update the channel information for each pending strip...                          // Update the channel information for each pending strip...
1832              for (qsamplerChannelStrip *pChannelStrip = m_changedStrips.first();                          for (qsamplerChannelStrip *pChannelStrip = m_changedStrips.first();
1833                      pChannelStrip;                                          pChannelStrip;
1834                                                  pChannelStrip = m_changedStrips.next()) {                                                  pChannelStrip = m_changedStrips.next()) {
1835                                  // If successfull, remove from pending list...                                  // If successfull, remove from pending list...
1836                                  if (pChannelStrip->updateChannelInfo())                                  if (pChannelStrip->updateChannelInfo())
1837                      m_changedStrips.remove(pChannelStrip);                                          m_changedStrips.remove(pChannelStrip);
1838                          }                          }
1839              // Update the channel stream usage for each strip...                          // Update the channel stream usage for each strip...
1840              QWidgetList wlist = m_pWorkspace->windowList();                          QWidgetList wlist = m_pWorkspace->windowList();
1841              for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {                          for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) {
1842                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);                                  qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel);
1843                  if (pChannelStrip && pChannelStrip->isVisible())                                  if (pChannelStrip && pChannelStrip->isVisible())
1844                      pChannelStrip->updateChannelUsage();                                          pChannelStrip->updateChannelUsage();
1845              }                          }
1846          }                  }
1847      }          }
1848    
1849      // Register the next timer slot.      // Register the next timer slot.
1850      QTimer::singleShot(QSAMPLER_TIMER_MSECS, this, SLOT(timerSlot()));      QTimer::singleShot(QSAMPLER_TIMER_MSECS, this, SLOT(timerSlot()));
# Line 1993  bool qsamplerMainForm::startClient (void Line 2025  bool qsamplerMainForm::startClient (void
2025      ::lscp_client_set_timeout(m_pClient, m_pOptions->iServerTimeout);      ::lscp_client_set_timeout(m_pClient, m_pOptions->iServerTimeout);
2026      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)));
2027    
2028            // Subscribe to channel info change notifications...
2029            if (::lscp_client_subscribe(m_pClient, LSCP_EVENT_CHANNEL_INFO) != LSCP_OK)
2030                    appendMessagesClient("lscp_client_subscribe");
2031    
2032      // We may stop scheduling around.      // We may stop scheduling around.
2033      stopSchedule();      stopSchedule();
2034    
# Line 2006  bool qsamplerMainForm::startClient (void Line 2042  bool qsamplerMainForm::startClient (void
2042          // if visible, that we're ready...          // if visible, that we're ready...
2043          if (m_pDeviceForm && m_pDeviceForm->isVisible())          if (m_pDeviceForm && m_pDeviceForm->isVisible())
2044              m_pDeviceForm->setClient(m_pClient);              m_pDeviceForm->setClient(m_pClient);
2045                
2046      // Is any session pending to be loaded?      // Is any session pending to be loaded?
2047      if (!m_pOptions->sSessionFile.isEmpty()) {      if (!m_pOptions->sSessionFile.isEmpty()) {
2048          // Just load the prabably startup session...          // Just load the prabably startup session...
# Line 2046  void qsamplerMainForm::stopClient (void) Line 2082  void qsamplerMainForm::stopClient (void)
2082      // channels from the back-end server.      // channels from the back-end server.
2083      m_iDirtyCount = 0;      m_iDirtyCount = 0;
2084      closeSession(false);      closeSession(false);
2085        
2086      // Close us as a client...      // Close us as a client...
2087      lscp_client_destroy(m_pClient);          ::lscp_client_unsubscribe(m_pClient, LSCP_EVENT_CHANNEL_INFO);
2088        ::lscp_client_destroy(m_pClient);
2089      m_pClient = NULL;      m_pClient = NULL;
2090    
2091      // Log final here.      // Log final here.

Legend:
Removed from v.463  
changed lines
  Added in v.662

  ViewVC Help
Powered by ViewVC