/*************************************************************************** recording-configuration.cpp - description ------------------- begin : So Aug 31 2003 copyright : (C) 2003 by Martin Witte email : witte@kawo1.rwth-aachen.de ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "recording-configuration.h" //#include "recording-context.h" #include #include #include #include #include #include RecordingConfiguration::RecordingConfiguration (TQWidget *tqparent) : RecordingConfigurationUI(tqparent), m_dirty(true), m_ignore_gui_updates(false) { editDirectory->setMode(KFile::Directory | KFile::ExistingOnly); TQObject::connect(editFileFormat, TQT_SIGNAL(activated(int)), this, TQT_SLOT(slotFormatSelectionChanged())); TQObject::connect(editBits, TQT_SIGNAL(activated(int)), this, TQT_SLOT(slotFormatSelectionChanged())); connect(editRate, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetDirty())); connect(editBits, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetDirty())); connect(editSign, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetDirty())); connect(editEndianess, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetDirty())); connect(editChannels, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetDirty())); connect(editFileFormat, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetDirty())); connect(editMP3Quality, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotSetDirty())); connect(editOggQuality, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotSetDirty())); connect(editDirectory, TQT_SIGNAL(textChanged(const TQString &)), TQT_SLOT(slotSetDirty())); connect(editBufferSize, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotSetDirty())); connect(editBufferCount, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotSetDirty())); connect(m_spinboxPreRecordingSeconds, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotSetDirty())); connect(m_checkboxPreRecordingEnable, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotSetDirty())); // attention: remove items with higher index first ;-) otherwise indexes are not valid #ifndef HAVE_OGG editFileFormat->removeItem(FORMAT_OGG_IDX_ORG); delete editOggQuality; editOggQuality = NULL; delete labelOggQuality; labelOggQuality = NULL; #endif #ifndef HAVE_LAME editFileFormat->removeItem(FORMAT_MP3_IDX_ORG); delete editMP3Quality; editMP3Quality = NULL; delete labelMP3Quality; labelMP3Quality = NULL; #endif } RecordingConfiguration::~RecordingConfiguration () { } void RecordingConfiguration::setGUIBuffers(const RecordingConfig &c) { editBufferSize->setValue(c.m_EncodeBufferSize / 1024); editBufferCount->setValue(c.m_EncodeBufferCount); } void RecordingConfiguration::setGUIDirectories(const RecordingConfig &c) { editDirectory->setURL(c.m_Directory); } void RecordingConfiguration::setGUISoundFormat(const RecordingConfig &c) { switch (c.m_SoundFormat.m_SampleBits) { case 8 : editBits->setCurrentItem(BITS_8_IDX ); break; case 16: editBits->setCurrentItem(BITS_16_IDX); break; default: editBits->setCurrentItem(BITS_16_IDX); } switch (c.m_SoundFormat.m_Channels) { case 1 : editChannels->setCurrentItem(CHANNELS_MONO_IDX); break; case 2 : editChannels->setCurrentItem(CHANNELS_STEREO_IDX); break; default: editChannels->setCurrentItem(CHANNELS_STEREO_IDX); break; } switch (c.m_SoundFormat.m_IsSigned) { case 0 : editSign->setCurrentItem(SIGN_UNSIGNED_IDX); break; case 1 : editSign->setCurrentItem(SIGN_SIGNED_IDX); break; default: editSign->setCurrentItem(SIGN_SIGNED_IDX); break; } switch (c.m_SoundFormat.m_SampleRate) { case 48000: editRate->setCurrentItem(RATE_48000_IDX); break; case 44100: editRate->setCurrentItem(RATE_44100_IDX); break; case 22050: editRate->setCurrentItem(RATE_22050_IDX); break; case 11025: editRate->setCurrentItem(RATE_11025_IDX); break; default: editRate->setCurrentItem(RATE_44100_IDX); break; } switch (c.m_SoundFormat.m_Endianess) { case BIG_ENDIAN : editEndianess->setCurrentItem(ENDIAN_BIG_IDX); break; case LITTLE_ENDIAN : editEndianess->setCurrentItem(ENDIAN_LITTLE_IDX); break; default: editEndianess->setCurrentItem(ENDIAN_LITTLE_IDX); break; } } void RecordingConfiguration::setGUIOutputFormat(const RecordingConfig &c) { switch (c.m_OutputFormat) { case RecordingConfig::outputWAV: editFileFormat->setCurrentItem(FORMAT_WAV_IDX); break; case RecordingConfig::outputAIFF: editFileFormat->setCurrentItem(FORMAT_AIFF_IDX); break; case RecordingConfig::outputAU: editFileFormat->setCurrentItem(FORMAT_AU_IDX); break; case RecordingConfig::outputRAW: editFileFormat->setCurrentItem(FORMAT_RAW_IDX); break; #ifdef HAVE_LAME case RecordingConfig::outputMP3: editFileFormat->setCurrentItem(FORMAT_MP3_IDX); break; #endif #ifdef HAVE_OGG case RecordingConfig::outputOGG: editFileFormat->setCurrentItem(FORMAT_OGG_IDX); break; #endif default: editFileFormat->setCurrentItem(FORMAT_WAV_IDX); break; } } void RecordingConfiguration::setGUIEncoderQuality(const RecordingConfig &c) { #ifdef HAVE_LAME editMP3Quality->setValue(c.m_mp3Quality); #endif #ifdef HAVE_OGG editOggQuality->setValue((int)(c.m_oggQuality * 9)); #endif } void RecordingConfiguration::setGUIPreRecording(const RecordingConfig &c) { m_spinboxPreRecordingSeconds->setValue(c.m_PreRecordingSeconds); m_checkboxPreRecordingEnable->setChecked(c.m_PreRecordingEnable); } void RecordingConfiguration::slotOK() { if (m_dirty) { storeConfig(); sendRecordingConfig(m_RecordingConfig); m_dirty = false; } } void RecordingConfiguration::storeConfig() { RecordingConfig &c = m_RecordingConfig; c.m_EncodeBufferSize = editBufferSize->value() * 1024; c.m_EncodeBufferCount = editBufferCount->value(); c.m_Directory = editDirectory->url(); switch(editRate->currentItem()) { case RATE_48000_IDX: c.m_SoundFormat.m_SampleRate = 48000; break; case RATE_44100_IDX: c.m_SoundFormat.m_SampleRate = 44100; break; case RATE_22050_IDX: c.m_SoundFormat.m_SampleRate = 22050; break; case RATE_11025_IDX: c.m_SoundFormat.m_SampleRate = 11025; break; default: c.m_SoundFormat.m_SampleRate = 44100; break; } switch(editChannels->currentItem()) { case CHANNELS_MONO_IDX: c.m_SoundFormat.m_Channels = 1; break; case CHANNELS_STEREO_IDX: c.m_SoundFormat.m_Channels = 2; break; default: c.m_SoundFormat.m_Channels = 2; break; } switch(editSign->currentItem()) { case SIGN_UNSIGNED_IDX: c.m_SoundFormat.m_IsSigned = false; break; case SIGN_SIGNED_IDX: c.m_SoundFormat.m_IsSigned = true; break; default: c.m_SoundFormat.m_IsSigned = true; break; } switch(editEndianess->currentItem()) { case ENDIAN_LITTLE_IDX: c.m_SoundFormat.m_Endianess = LITTLE_ENDIAN; break; case ENDIAN_BIG_IDX: c.m_SoundFormat.m_Endianess = BIG_ENDIAN; break; default: c.m_SoundFormat.m_Endianess = LITTLE_ENDIAN; break; } switch(editBits->currentItem()) { case BITS_8_IDX: c.m_SoundFormat.m_SampleBits = 8; break; case BITS_16_IDX: c.m_SoundFormat.m_SampleBits = 16; break; default: c.m_SoundFormat.m_SampleBits = 16; break; } switch(editFileFormat->currentItem()) { case FORMAT_WAV_IDX: c.m_OutputFormat = RecordingConfig::outputWAV; break; case FORMAT_AIFF_IDX: c.m_OutputFormat = RecordingConfig::outputAIFF; break; case FORMAT_AU_IDX: c.m_OutputFormat = RecordingConfig::outputAU; break; case FORMAT_RAW_IDX: c.m_OutputFormat = RecordingConfig::outputRAW; break; #ifdef HAVE_LAME case FORMAT_MP3_IDX: c.m_OutputFormat = RecordingConfig::outputMP3; break; #endif #ifdef HAVE_OGG case FORMAT_OGG_IDX: c.m_OutputFormat = RecordingConfig::outputOGG; break; #endif default: c.m_OutputFormat = RecordingConfig::outputWAV; break; } #ifdef HAVE_LAME c.m_mp3Quality = editMP3Quality->value(); #endif #ifdef HAVE_OGG c.m_oggQuality = ((float)editOggQuality->value()) / 9.0f; #endif c.m_PreRecordingEnable = m_checkboxPreRecordingEnable->isChecked(); c.m_PreRecordingSeconds = m_spinboxPreRecordingSeconds->value(); c.checkFormatSettings(); } void RecordingConfiguration::slotCancel() { if (m_dirty) { noticeRecordingConfigChanged(m_RecordingConfig); m_dirty = false; } } void RecordingConfiguration::slotFormatSelectionChanged() { int bitsIDX = editBits->currentItem(); int formatIDX = editFileFormat->currentItem(); int endianTest = 0x04030201; bool littleEndian = ((char*)&endianTest)[0] == 0x01; #ifdef HAVE_LAME editMP3Quality ->setEnabled(false); labelMP3Quality->setEnabled(false); #endif #ifdef HAVE_OGG editOggQuality ->setEnabled(false); labelOggQuality->setEnabled(false); #endif editBits->setEnabled(true); if (formatIDX == FORMAT_MP3_IDX) { editBits->setDisabled(true); editBits->setCurrentItem(BITS_16_IDX); editSign->setDisabled(true); editSign->setCurrentItem(SIGN_SIGNED_IDX); #ifdef HAVE_LAME editMP3Quality ->setEnabled(true); labelMP3Quality->setEnabled(true); #endif } else if (formatIDX == FORMAT_OGG_IDX) { editBits->setDisabled(true); editBits->setCurrentItem(BITS_16_IDX); editSign->setDisabled(true); editSign->setCurrentItem(SIGN_SIGNED_IDX); #ifdef HAVE_OGG editOggQuality ->setEnabled(true); labelOggQuality->setEnabled(true); #endif } else { if (bitsIDX == BITS_8_IDX) { if (formatIDX == FORMAT_RAW_IDX || formatIDX == FORMAT_AIFF_IDX) { editSign->setDisabled(false); } else { editSign->setDisabled(true); editSign->setCurrentItem(formatIDX == FORMAT_WAV_IDX ? SIGN_UNSIGNED_IDX : SIGN_SIGNED_IDX); } } else { editSign->setDisabled(true); editSign->setCurrentItem(SIGN_SIGNED_IDX); } } switch (formatIDX) { case FORMAT_RAW_IDX : editEndianess->setDisabled(false); break; #ifdef HAVE_LAME case FORMAT_MP3_IDX : editEndianess->setCurrentItem(littleEndian ? ENDIAN_LITTLE_IDX : ENDIAN_BIG_IDX); editEndianess->setDisabled(true); break; #endif #ifdef HAVE_OGG case FORMAT_OGG_IDX : editEndianess->setCurrentItem(littleEndian ? ENDIAN_LITTLE_IDX : ENDIAN_BIG_IDX); editEndianess->setDisabled(true); break; #endif default: editEndianess->setDisabled(true); if (formatIDX == FORMAT_AIFF_IDX || formatIDX == FORMAT_AU_IDX) { editEndianess->setCurrentItem(ENDIAN_BIG_IDX); } else { editEndianess->setCurrentItem(ENDIAN_LITTLE_IDX); } break; } } bool RecordingConfiguration::noticeEncoderBufferChanged (size_t BufferSize, size_t BufferCount) { m_ignore_gui_updates = true; m_RecordingConfig.m_EncodeBufferSize = BufferSize; m_RecordingConfig.m_EncodeBufferCount = BufferCount; setGUIBuffers(m_RecordingConfig); slotFormatSelectionChanged(); m_ignore_gui_updates = false; return true; } bool RecordingConfiguration::noticeSoundFormatChanged (const SoundFormat &sf) { m_ignore_gui_updates = true; m_RecordingConfig.m_SoundFormat = sf; setGUISoundFormat(m_RecordingConfig); slotFormatSelectionChanged(); m_ignore_gui_updates = false; return true; } bool RecordingConfiguration::noticeMP3QualityChanged (int q) { m_ignore_gui_updates = true; m_RecordingConfig.m_mp3Quality = q; setGUIEncoderQuality(m_RecordingConfig); slotFormatSelectionChanged(); m_ignore_gui_updates = false; return true; } bool RecordingConfiguration::noticeOggQualityChanged (float q) { m_ignore_gui_updates = true; m_RecordingConfig.m_oggQuality = q; setGUIEncoderQuality(m_RecordingConfig); slotFormatSelectionChanged(); m_ignore_gui_updates = false; return true; } bool RecordingConfiguration::noticeRecordingDirectoryChanged(const TQString &dir) { m_ignore_gui_updates = true; m_RecordingConfig.m_Directory = dir; setGUIDirectories(m_RecordingConfig); slotFormatSelectionChanged(); m_ignore_gui_updates = false; return true; } bool RecordingConfiguration::noticeOutputFormatChanged (RecordingConfig::OutputFormat of) { m_ignore_gui_updates = true; m_RecordingConfig.m_OutputFormat = of; setGUIOutputFormat(m_RecordingConfig); slotFormatSelectionChanged(); m_ignore_gui_updates = false; return true; } bool RecordingConfiguration::noticePreRecordingChanged (bool enable, int seconds) { m_ignore_gui_updates = true; m_RecordingConfig.m_PreRecordingEnable = enable; m_RecordingConfig.m_PreRecordingSeconds = seconds; setGUIPreRecording(m_RecordingConfig); m_ignore_gui_updates = false; return true; } bool RecordingConfiguration::noticeRecordingConfigChanged(const RecordingConfig &c) { m_ignore_gui_updates = true; m_RecordingConfig = c; setGUIBuffers(c); setGUIDirectories(c); setGUISoundFormat(c); setGUIOutputFormat(c); setGUIEncoderQuality(c); setGUIPreRecording(c); slotFormatSelectionChanged(); m_ignore_gui_updates = false; return true; } void RecordingConfiguration::slotSetDirty() { if (!m_ignore_gui_updates) { m_dirty = true; } } #include "recording-configuration.moc"