--- qsampler/trunk/src/qsamplerMainForm.ui.h 2005/03/07 17:05:55 428 +++ qsampler/trunk/src/qsamplerMainForm.ui.h 2005/03/15 11:39:12 462 @@ -211,9 +211,13 @@ // We got options? m_pOptions = pOptions; + // What style do we create these forms? + WFlags wflags = Qt::WType_TopLevel; + if (m_pOptions->bKeepOnTop) + wflags |= Qt::WStyle_Tool; // Some child forms are to be created right now. m_pMessages = new qsamplerMessages(this); - m_pDeviceForm = new qsamplerDeviceForm(this); + m_pDeviceForm = new qsamplerDeviceForm(this, 0, wflags); // Set message defaults... updateMessagesFont(); updateMessagesLimit(); @@ -271,9 +275,6 @@ // Some windows default fonts is here on demand too. if (bQueryClose && m_pMessages) m_pOptions->sMessagesFont = m_pMessages->messagesFont().toString(); - // Other windows just need asking if it can close gracefully... - if (bQueryClose && m_pDeviceForm) - bQueryClose = m_pDeviceForm->queryClose(); // Try to save current positioning. if (bQueryClose) { // Save decorations state. @@ -641,7 +642,7 @@ } // Write the file. - int iErrors = 0; + int iErrors = 0; QTextStream ts(&file); ts << "# " << QSAMPLER_TITLE " - " << tr(QSAMPLER_SUBTITLE) << endl; ts << "# " << tr("Version") @@ -652,21 +653,77 @@ ts << "# " << tr("File") << ": " << QFileInfo(sFilename).fileName() << endl; ts << "# " << tr("Date") - << ": " << QDate::currentDate().toString("MMMM dd yyyy") + << ": " << QDate::currentDate().toString("MMM dd yyyy") << " " << QTime::currentTime().toString("hh:mm:ss") << endl; ts << "#" << endl; ts << endl; + // It is assumed that this new kind of device+session file + // will be loaded from a complete + int *piDeviceIDs; + int iDevice; + ts << "RESET" << endl; + // Audio device mapping. + QMap audioDeviceMap; + piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio); + for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) { + qsamplerDevice device(m_pClient, qsamplerDevice::Audio, piDeviceIDs[iDevice]); + ts << endl; + ts << "# " << device.deviceTypeName() << " " << device.driverName() + << " " << tr("Device") << " " << iDevice << endl; + ts << "CREATE AUDIO_OUTPUT_DEVICE " << device.driverName(); + const qsamplerDeviceParamMap& params = device.params(); + qsamplerDeviceParamMap::ConstIterator iter; + for (iter = params.begin(); iter != params.end(); ++iter) + ts << " " << iter.key() << "='" << iter.data().value << "'"; + ts << endl; + audioDeviceMap[device.deviceID()] = iDevice; + // Try to keep it snappy :) + QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput); + } + // MIDI device mapping. + QMap midiDeviceMap; + piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi); + for (iDevice = 0; piDeviceIDs && piDeviceIDs[iDevice] >= 0; iDevice++) { + qsamplerDevice device(m_pClient, qsamplerDevice::Midi, piDeviceIDs[iDevice]); + ts << endl; + ts << "# " << device.deviceTypeName() << " " << device.driverName() + << " " << tr("Device") << " " << iDevice << endl; + ts << "CREATE MIDI_INPUT_DEVICE " << device.driverName(); + const qsamplerDeviceParamMap& params = device.params(); + qsamplerDeviceParamMap::ConstIterator iter; + for (iter = params.begin(); iter != params.end(); ++iter) + ts << " " << iter.key() << "='" << iter.data().value << "'"; + ts << endl; + midiDeviceMap[device.deviceID()] = iDevice; + // Try to keep it snappy :) + QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput); + } + ts << endl; + // Sampler channel mapping. QWidgetList wlist = m_pWorkspace->windowList(); for (int iChannel = 0; iChannel < (int) wlist.count(); iChannel++) { qsamplerChannelStrip *pChannelStrip = (qsamplerChannelStrip *) wlist.at(iChannel); if (pChannelStrip) { qsamplerChannel *pChannel = pChannelStrip->channel(); if (pChannel) { - ts << "# Channel " << iChannel << endl; + ts << "# " << tr("Channel") << " " << iChannel << endl; ts << "ADD CHANNEL" << endl; - ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannel << " " << pChannel->audioDriver() << endl; - ts << "SET CHANNEL MIDI_INPUT_TYPE " << iChannel << " " << pChannel->midiDriver() << endl; - // ts << "SET CHANNEL MIDI_INPUT_PORT " << iChannel << " " << pChannel->midiPort() << endl; + if (audioDeviceMap.isEmpty()) { + ts << "SET CHANNEL AUDIO_OUTPUT_TYPE " << iChannel + << " " << pChannel->audioDriver() << endl; + } else { + ts << "SET CHANNEL AUDIO_OUTPUT_DEVICE " << iChannel + << " " << audioDeviceMap[pChannel->audioDevice()] << endl; + } + if (midiDeviceMap.isEmpty()) { + ts << "SET CHANNEL MIDI_INPUT_TYPE " << iChannel + << " " << 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; ts << "SET CHANNEL MIDI_INPUT_CHANNEL " << iChannel << " "; if (pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL) ts << "ALL"; @@ -704,6 +761,16 @@ } +// Session change receiver slot. +void qsamplerMainForm::sessionDirty (void) +{ + // Just mark the dirty form. + m_iDirtyCount++; + // and update the form status... + stabilizeForm(); +} + + //------------------------------------------------------------------------- // qsamplerMainForm -- File Action slots. @@ -1035,6 +1102,7 @@ bool bOldDisplayEffect = m_pOptions->bDisplayEffect; int iOldMaxVolume = m_pOptions->iMaxVolume; QString sOldMessagesFont = m_pOptions->sMessagesFont; + bool bOldKeepOnTop = m_pOptions->bKeepOnTop; bool bOldStdoutCapture = m_pOptions->bStdoutCapture; int bOldMessagesLimit = m_pOptions->bMessagesLimit; int iOldMessagesLimitLines = m_pOptions->iMessagesLimitLines; @@ -1047,7 +1115,9 @@ if (pOptionsForm->exec()) { // Warn if something will be only effective on next run. if (( bOldStdoutCapture && !m_pOptions->bStdoutCapture) || - (!bOldStdoutCapture && m_pOptions->bStdoutCapture)) { + (!bOldStdoutCapture && m_pOptions->bStdoutCapture) || + ( bOldKeepOnTop && !m_pOptions->bKeepOnTop) || + (!bOldKeepOnTop && m_pOptions->bKeepOnTop)) { QMessageBox::information(this, tr("Information"), tr("Some settings may be only effective\n" "next time you start this program."), tr("OK"));