//============================================================================= // // File : OptionsWidget_sound.cpp // Creation date : Fri Sep 6 02:18:23 2002 GMT by Szymon Stefanek // // This file is part of the KVsound sound client distribution // Copyright (C) 2002-2010 Szymon Stefanek (pragma at kvsound dot net) // // 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. // // This program is distributed in the HOPE that it will be USEFUL, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, write to the Free Software Foundation, // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // //============================================================================= #include "OptionsWidget_sound.h" #include "kvi_settings.h" #include "KviLocale.h" #include "KviOptions.h" #include "KviModuleManager.h" #include "KviPointerList.h" #include "KviCString.h" #include "KviTalHBox.h" #include "KviTalToolTip.h" #include "KviApplication.h" #include #include // FIXME: This module doesn't ???? properly when auto-detection is performed! OptionsWidget_sound::OptionsWidget_sound(QWidget * pParent) : KviOptionsWidget(pParent) { } OptionsWidget_sound::~OptionsWidget_sound() = default; OptionsWidget_soundGeneral::OptionsWidget_soundGeneral(QWidget * parent) : KviOptionsWidget(parent) { m_bFirstShow = true; setObjectName("sound_system_options_widget"); createLayout(); KviTalGroupBox * g = addGroupBox(0, 0, 0, 0, Qt::Horizontal, __tr2qs_ctx("Sound System", "options"), true); KviTalToolTip::add(g, __tr2qs_ctx("This allows you to select the sound system to be used with KVIrc.", "options")); KviTalHBox * h = new KviTalHBox(g); m_pSoundSystemBox = new QComboBox(h); m_pSoundAutoDetectButton = new QPushButton(__tr2qs_ctx("Auto-detect", "options"), h); connect(m_pSoundAutoDetectButton, SIGNAL(clicked()), this, SLOT(soundAutoDetect())); m_pSoundTestButton = new QPushButton(__tr2qs_ctx("Test", "options"), h); connect(m_pSoundTestButton, SIGNAL(clicked()), this, SLOT(soundTest())); g = addGroupBox(0, 1, 0, 1, Qt::Horizontal, __tr2qs_ctx("Media Player", "options"), true); KviTalToolTip::add(g, __tr2qs_ctx("This allows you to select the preferred media player to be used with " "the mediaplayer.* module commands and functions.", "options")); h = new KviTalHBox(g); m_pMediaPlayerBox = new QComboBox(h); m_pMediaAutoDetectButton = new QPushButton(__tr2qs_ctx("Auto-detect", "options"), h); connect(m_pMediaAutoDetectButton, SIGNAL(clicked()), this, SLOT(mediaAutoDetect())); m_pMediaTestButton = new QPushButton(__tr2qs_ctx("Test", "options"), h); connect(m_pMediaTestButton, SIGNAL(clicked()), this, SLOT(mediaTest())); m_pMediaTestButton->setEnabled(false); g = addGroupBox(0, 2, 0, 2, Qt::Horizontal, __tr2qs_ctx("ID3 Tags Encoding", "options"), true); KviTalToolTip::add(g, __tr2qs_ctx("This allows you to select encoding of mp3 tags.", "options")); h = new KviTalHBox(g); m_pTagsEncodingCombo = new QComboBox(h); m_pTagsEncodingCombo->addItem(__tr2qs_ctx("Use Language Encoding", "options")); int i = 0; int iMatch = 0; KviLocale::EncodingDescription * d = KviLocale::instance()->encodingDescription(i); while(d->pcName) { if(KviQString::equalCI(d->pcName, KVI_OPTION_STRING(KviOption_stringMp3TagsEncoding))) iMatch = i + 1; m_pTagsEncodingCombo->insertItem(m_pTagsEncodingCombo->count(), d->pcName); i++; d = KviLocale::instance()->encodingDescription(i); } m_pTagsEncodingCombo->setCurrentIndex(iMatch); #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) g = addGroupBox(0, 3, 0, 3, Qt::Horizontal, __tr2qs_ctx("Winamp messages encoding", "options"), true); KviTalToolTip::add(g, __tr2qs_ctx("This allows you to select encoding of winamp messages.", "options")); h = new KviTalHBox(g); m_pWinampEncodingCombo = new QComboBox(h); m_pWinampEncodingCombo->addItem(__tr2qs_ctx("Use Language Encoding", "options")); i = 0; iMatch = 0; d = KviLocale::instance()->encodingDescription(i); while(d->pcName) { if(KviQString::equalCI(d->pcName, KVI_OPTION_STRING(KviOption_stringWinampTextEncoding))) iMatch = i + 1; m_pWinampEncodingCombo->insertItem(m_pWinampEncodingCombo->count(), d->pcName); i++; d = KviLocale::instance()->encodingDescription(i); } m_pWinampEncodingCombo->setCurrentIndex(iMatch); addRowSpacer(0, 4, 0, 4); #else addRowSpacer(0, 3, 0, 3); #endif } OptionsWidget_soundGeneral::~OptionsWidget_soundGeneral() = default; void OptionsWidget_soundGeneral::showEvent(QShowEvent *) { if(!m_bFirstShow) return; // We fill these boxes only before the first show since the soundFillBox() // is likely to trigger sound system-detection which may take time... g_pApp->setOverrideCursor(Qt::WaitCursor); soundFillBox(); mediaFillBox(); g_pApp->restoreOverrideCursor(); m_bFirstShow = false; } void OptionsWidget_soundGeneral::soundTest() { QString szSavedSoundSystem = KVI_OPTION_STRING(KviOption_stringSoundSystem); KVI_OPTION_STRING(KviOption_stringSoundSystem) = m_pSoundSystemBox->currentText(); KviModule * m = g_pModuleManager->getModule("snd"); if(!m) return; // doh QString szFileName; if(!g_pApp->findAudioFile(szFileName, QString::fromUtf8("jingle.wav"))) { qDebug("Can't find the jingle.wav file: was it shipped with your KVIrc installation?"); return; } m->ctrl("play", &szFileName); KVI_OPTION_STRING(KviOption_stringSoundSystem) = szSavedSoundSystem; } void OptionsWidget_soundGeneral::mediaTest() { } void OptionsWidget_soundGeneral::soundAutoDetect() { KviModule * m = g_pModuleManager->getModule("snd"); if(!m) return; g_pApp->setOverrideCursor(Qt::WaitCursor); m->ctrl("detectSoundSystem", nullptr); soundFillBox(); g_pApp->restoreOverrideCursor(); } void OptionsWidget_soundGeneral::mediaAutoDetect() { KviModule * m = g_pModuleManager->getModule("mediaplayer"); if(!m) return; g_pApp->setOverrideCursor(Qt::WaitCursor); m->ctrl("detectMediaPlayer", nullptr); mediaFillBox(); g_pApp->restoreOverrideCursor(); } void OptionsWidget_soundGeneral::soundFillBox() { QStringList l; unsigned int cnt, i; KviModule * m = g_pModuleManager->getModule("snd"); if(!m || !m->ctrl("getAvailableSoundSystems", &l)) goto disable; m_pSoundSystemBox->clear(); for(const auto& it : l) m_pSoundSystemBox->addItem(it); cnt = m_pSoundSystemBox->count(); for(i = 0; i < cnt; i++) { QString t = m_pSoundSystemBox->itemText(i); if(KviQString::equalCI(t, KVI_OPTION_STRING(KviOption_stringSoundSystem))) { m_pSoundSystemBox->setCurrentIndex(i); break; } } return; disable: m_pSoundSystemBox->clear(); m_pSoundSystemBox->setEnabled(false); m_pSoundTestButton->setEnabled(false); m_pSoundAutoDetectButton->setEnabled(false); } void OptionsWidget_soundGeneral::mediaFillBox() { QStringList l; unsigned int cnt, i; KviModule * m = g_pModuleManager->getModule("mediaplayer"); if(!m || !m->ctrl("getAvailableMediaPlayers", &l)) goto disable; m_pMediaPlayerBox->clear(); for(const auto& it : l) m_pMediaPlayerBox->addItem(it); cnt = m_pMediaPlayerBox->count(); for(i = 0; i < cnt; i++) { QString t = m_pMediaPlayerBox->itemText(i); if(KviQString::equalCI(t, KVI_OPTION_STRING(KviOption_stringPreferredMediaPlayer))) { m_pMediaPlayerBox->setCurrentIndex(i); break; } } return; disable: m_pMediaPlayerBox->clear(); m_pMediaPlayerBox->setEnabled(false); m_pMediaTestButton->setEnabled(false); m_pMediaAutoDetectButton->setEnabled(false); } void OptionsWidget_soundGeneral::commit() { // avoid to commit if we've never been shown (and initialized) if(m_bFirstShow) return; KviOptionsWidget::commit(); KVI_OPTION_STRING(KviOption_stringSoundSystem) = m_pSoundSystemBox->currentText(); KVI_OPTION_STRING(KviOption_stringPreferredMediaPlayer) = m_pMediaPlayerBox->currentText(); int idx = m_pTagsEncodingCombo->currentIndex(); if(idx <= 0) { // guess from locale KVI_OPTION_STRING(KviOption_stringMp3TagsEncoding) = ""; } else { KVI_OPTION_STRING(KviOption_stringMp3TagsEncoding) = m_pTagsEncodingCombo->itemText(idx); } #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) idx = m_pWinampEncodingCombo->currentIndex(); if(idx <= 0) { // guess from locale KVI_OPTION_STRING(KviOption_stringWinampTextEncoding) = ""; } else { KVI_OPTION_STRING(KviOption_stringWinampTextEncoding) = m_pWinampEncodingCombo->itemText(idx); } #endif } OptionsWidget_sounds::OptionsWidget_sounds(QWidget * parent) : KviOptionsWidget(parent) { setObjectName("sound_options_widget"); createLayout(); addLabel(0, 0, 0, 0, __tr2qs_ctx("New query opened:", "options")); addSoundSelector(1, 0, 1, 0, "", KviOption_stringOnNewQueryOpenedSound); addLabel(0, 1, 0, 1, __tr2qs_ctx("New message in inactive query:", "options")); addSoundSelector(1, 1, 1, 1, "", KviOption_stringOnQueryMessageSound); addLabel(0, 2, 0, 2, __tr2qs_ctx("Highlighted message in inactive window:", "options")); addSoundSelector(1, 2, 1, 2, "", KviOption_stringOnHighlightedMessageSound); addLabel(0, 3, 0, 3, __tr2qs_ctx("When I am kicked:", "options")); addSoundSelector(1, 3, 1, 3, "", KviOption_stringOnMeKickedSound); addRowSpacer(0, 4, 1, 4); } OptionsWidget_sounds::~OptionsWidget_sounds() = default;