--- qsampler/trunk/src/qsamplerMainForm.ui.h 2005/06/17 22:43:56 661 +++ qsampler/trunk/src/qsamplerMainForm.ui.h 2006/06/01 09:32:01 871 @@ -45,8 +45,6 @@ #include "qsamplerDeviceForm.h" #include "qsamplerOptionsForm.h" -#include "config.h" - #ifdef HAVE_SIGNAL_H #include #endif @@ -387,9 +385,16 @@ // For the time being, just pump it to messages. if (pCustomEvent->type() == QSAMPLER_CUSTOM_EVENT) { qsamplerCustomEvent *pEvent = (qsamplerCustomEvent *) pCustomEvent; - appendMessagesColor(tr("Notify event: %1 data: %2") - .arg(::lscp_event_to_text(pEvent->event())) - .arg(pEvent->data()), "#996699"); + if (pEvent->event() == LSCP_EVENT_CHANNEL_INFO) { + int iChannelID = pEvent->data().toInt(); + qsamplerChannelStrip *pChannelStrip = channelStrip(iChannelID); + if (pChannelStrip) + channelStripChanged(pChannelStrip); + } else { + appendMessagesColor(tr("Notify event: %1 data: %2") + .arg(::lscp_event_to_text(pEvent->event())) + .arg(pEvent->data()), "#996699"); + } } } @@ -466,10 +471,10 @@ // Ask for the filename to open... QString sFilename = QFileDialog::getOpenFileName( - m_pOptions->sSessionDir, // Start here. - tr("LSCP Session files") + " (*.lscp)", // Filter (LSCP files) - this, 0, // Parent and name (none) - tr("Open Session") // Caption. + m_pOptions->sSessionDir, // Start here. + tr("LSCP Session files") + " (*.lscp)", // Filter (LSCP files) + this, 0, // Parent and name (none) + QSAMPLER_TITLE ": " + tr("Open Session") // Caption. ); // Have we cancelled? @@ -500,10 +505,10 @@ sFilename = m_pOptions->sSessionDir; // Prompt the guy... sFilename = QFileDialog::getSaveFileName( - sFilename, // Start here. - tr("LSCP Session files") + " (*.lscp)", // Filter (LSCP files) - this, 0, // Parent and name (none) - tr("Save Session") // Caption. + sFilename, // Start here. + tr("LSCP Session files") + " (*.lscp)", // Filter (LSCP files) + this, 0, // Parent and name (none) + QSAMPLER_TITLE ": " + tr("Save Session") // Caption. ); // Have we cancelled it? if (sFilename.isEmpty()) @@ -513,7 +518,8 @@ sFilename += ".lscp"; // Check if already exists... if (sFilename != m_sFilename && QFileInfo(sFilename).exists()) { - if (QMessageBox::warning(this, tr("Warning"), + if (QMessageBox::warning(this, + QSAMPLER_TITLE ": " + tr("Warning"), tr("The file already exists:\n\n" "\"%1\"\n\n" "Do you want to replace it?") @@ -535,7 +541,8 @@ // Are we dirty enough to prompt it? if (m_iDirtyCount > 0) { - switch (QMessageBox::warning(this, tr("Warning"), + switch (QMessageBox::warning(this, + QSAMPLER_TITLE ": " + tr("Warning"), tr("The current session has been changed:\n\n" "\"%1\"\n\n" "Do you want to save the changes?") @@ -593,7 +600,7 @@ QTextStream ts(&file); while (!ts.atEnd()) { // Read the line. - QString sCommand = ts.readLine().simplifyWhiteSpace(); + QString sCommand = ts.readLine().stripWhiteSpace(); // If not empty, nor a comment, call the server... if (!sCommand.isEmpty() && sCommand[0] != '#') { appendMessagesColor(sCommand, "#996633"); @@ -780,7 +787,19 @@ ts << endl; ts << "LOAD ENGINE " << pChannel->engineName() << " " << iChannel << endl; ts << "LOAD INSTRUMENT NON_MODAL '" << pChannel->instrumentFile() << "' " << pChannel->instrumentNr() << " " << iChannel << endl; + qsamplerChannelRoutingMap::ConstIterator audioRoute; + for (audioRoute = pChannel->audioRouting().begin(); + audioRoute != pChannel->audioRouting().end(); + ++audioRoute) { + ts << "SET CHANNEL AUDIO_OUTPUT_CHANNEL " << iChannel + << " " << audioRoute.key() + << " " << audioRoute.data() << endl; + } ts << "SET CHANNEL VOLUME " << iChannel << " " << pChannel->volume() << endl; + if (pChannel->channelMute()) + ts << "SET CHANNEL MUTE " << iChannel << " 1" << endl; + if (pChannel->channelSolo()) + ts << "SET CHANNEL SOLO " << iChannel << " 1" << endl; ts << endl; } } @@ -872,7 +891,8 @@ return; // Ask user whether he/she want's an internal sampler reset... - if (QMessageBox::warning(this, tr("Warning"), + if (QMessageBox::warning(this, + QSAMPLER_TITLE ": " + tr("Warning"), tr("Resetting the sampler instance will close\n" "all device and channel configurations.\n\n" "Please note that this operation may cause\n" @@ -907,7 +927,8 @@ // Ask user whether he/she want's a complete restart... // (if we're currently up and running) if (bRestart && m_pClient) { - bRestart = (QMessageBox::warning(this, tr("Warning"), + bRestart = (QMessageBox::warning(this, + QSAMPLER_TITLE ": " + tr("Warning"), tr("New settings will be effective after\n" "restarting the client/server connection.\n\n" "Please note that this operation may cause\n" @@ -983,7 +1004,8 @@ // Prompt user if he/she's sure about this... if (m_pOptions && m_pOptions->bConfirmRemove) { - if (QMessageBox::warning(this, tr("Warning"), + if (QMessageBox::warning(this, + QSAMPLER_TITLE ": " + tr("Warning"), tr("About to remove channel:\n\n" "%1\n\n" "Are you sure?") @@ -1166,7 +1188,8 @@ (!bOldStdoutCapture && m_pOptions->bStdoutCapture) || ( bOldKeepOnTop && !m_pOptions->bKeepOnTop) || (!bOldKeepOnTop && m_pOptions->bKeepOnTop)) { - QMessageBox::information(this, tr("Information"), + QMessageBox::information(this, + QSAMPLER_TITLE ": " + tr("Information"), tr("Some settings may be only effective\n" "next time you start this program."), tr("OK")); updateMessagesCapture(); @@ -1294,6 +1317,11 @@ sText += tr("LSCP (liblscp) instrument_name support disabled."); sText += "
"; #endif +#ifndef CONFIG_MUTE_SOLO + sText += ""; + sText += tr("Sampler channel Mute/Solo support disabled."); + sText += "
"; +#endif sText += "
\n"; sText += tr("Using") + ": "; sText += ::lscp_client_package(); @@ -1301,9 +1329,9 @@ sText += ::lscp_client_version(); #ifdef CONFIG_LIBGIG sText += ", "; - sText += gig::libraryName(); + sText += gig::libraryName().c_str(); sText += " "; - sText += gig::libraryVersion(); + sText += gig::libraryVersion().c_str(); #endif sText += "
\n"; sText += "
\n"; @@ -1329,7 +1357,7 @@ // Update the main application caption... QString sSessionName = sessionName(m_sFilename); if (m_iDirtyCount > 0) - sSessionName += '*'; + sSessionName += " *"; setCaption(tr(QSAMPLER_TITLE " - [%1]").arg(sSessionName)); // Update the main menu state... @@ -1593,7 +1621,8 @@ appendMessagesColor(s.simplifyWhiteSpace(), "#ff0000"); - QMessageBox::critical(this, tr("Error"), s, tr("Cancel")); + QMessageBox::critical(this, + QSAMPLER_TITLE ": " + tr("Error"), s, tr("Cancel")); } @@ -1817,25 +1846,30 @@ } } - // Refresh each channel usage, on each period... - if (m_pClient && (m_changedStrips.count() > 0 || m_pOptions->bAutoRefresh)) { - m_iTimerSlot += QSAMPLER_TIMER_MSECS; - if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime && m_pWorkspace->isUpdatesEnabled()) { - m_iTimerSlot = 0; - // Update the channel information for each pending strip... + if (m_pClient) { + // Update the channel information for each pending strip... + if (m_changedStrips.count() > 0) { for (qsamplerChannelStrip *pChannelStrip = m_changedStrips.first(); - pChannelStrip; - pChannelStrip = m_changedStrips.next()) { + pChannelStrip; pChannelStrip = m_changedStrips.next()) { // If successfull, remove from pending list... if (pChannelStrip->updateChannelInfo()) m_changedStrips.remove(pChannelStrip); } - // Update the channel stream usage for each strip... - QWidgetList wlist = m_pWorkspace->windowList(); - for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) { - qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel); - if (pChannelStrip && pChannelStrip->isVisible()) - pChannelStrip->updateChannelUsage(); + } + // Refresh each channel usage, on each period... + if (m_pOptions->bAutoRefresh) { + m_iTimerSlot += QSAMPLER_TIMER_MSECS; + if (m_iTimerSlot >= m_pOptions->iAutoRefreshTime) { + m_iTimerSlot = 0; + // Update the channel stream usage for each strip... + QWidgetList wlist = m_pWorkspace->windowList(); + for (int iChannel = 0; + iChannel < (int) wlist.count(); iChannel++) { + qsamplerChannelStrip *pChannelStrip + = (qsamplerChannelStrip *) wlist.at(iChannel); + if (pChannelStrip && pChannelStrip->isVisible()) + pChannelStrip->updateChannelUsage(); + } } } } @@ -1860,7 +1894,8 @@ // Is the server process instance still here? if (m_pServer) { - switch (QMessageBox::warning(this, tr("Warning"), + switch (QMessageBox::warning(this, + QSAMPLER_TITLE ": " + tr("Warning"), tr("Could not start the LinuxSampler server.\n\n" "Maybe it ss already started."), tr("Stop"), tr("Kill"), tr("Cancel"))) { @@ -2019,6 +2054,10 @@ ::lscp_client_set_timeout(m_pClient, m_pOptions->iServerTimeout); appendMessages(tr("Client receive timeout is set to %1 msec.").arg(::lscp_client_get_timeout(m_pClient))); + // Subscribe to channel info change notifications... + if (::lscp_client_subscribe(m_pClient, LSCP_EVENT_CHANNEL_INFO) != LSCP_OK) + appendMessagesClient("lscp_client_subscribe"); + // We may stop scheduling around. stopSchedule(); @@ -2032,7 +2071,7 @@ // if visible, that we're ready... if (m_pDeviceForm && m_pDeviceForm->isVisible()) m_pDeviceForm->setClient(m_pClient); - + // Is any session pending to be loaded? if (!m_pOptions->sSessionFile.isEmpty()) { // Just load the prabably startup session... @@ -2074,7 +2113,8 @@ closeSession(false); // Close us as a client... - lscp_client_destroy(m_pClient); + ::lscp_client_unsubscribe(m_pClient, LSCP_EVENT_CHANNEL_INFO); + ::lscp_client_destroy(m_pClient); m_pClient = NULL; // Log final here.