/*************************************************************************** * Copyright (C) 2005 by Markus Brueffer * * * * 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 Steet, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "equalizerpresetmanager.h" #include #include #include #include #include #include #include #include #include #include #include //locate() EqualizerPresetManager::EqualizerPresetManager( TQWidget *parent, const char *name ) : KDialogBase( parent, name, true, i18n("Presets"), Ok | Cancel | Default, Ok, true ) { TQWidget *mainWidget = new TQWidget( this ); setMainWidget( mainWidget ); TQHBoxLayout *mainLayout = new TQHBoxLayout( mainWidget, 0, spacingHint() ); m_presetsView = new TDEListView( mainWidget, "presetListView" ); m_presetsView->addColumn( i18n( "Presets" ) ); m_presetsView->setFullWidth( true ); connect(m_presetsView, TQT_SIGNAL( selectionChanged() ), TQT_SLOT( updateButtonState() )); connect(m_presetsView, TQT_SIGNAL( doubleClicked ( TQListViewItem*, const TQPoint&, int ) ), TQT_SLOT( slotRename() )); mainLayout->addWidget( m_presetsView ); TQVBoxLayout* buttonsLayout = new TQVBoxLayout( mainLayout ); m_renameBtn = new TQPushButton( i18n("&Rename"), mainWidget, "renameBtn" ); m_deleteBtn = new TQPushButton( i18n("&Delete"), mainWidget, "deleteBtn" ); buttonsLayout->addWidget( m_renameBtn ); buttonsLayout->addWidget( m_deleteBtn ); connect(m_renameBtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotRename() )); connect(m_deleteBtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotDelete() )); connect(this, TQT_SIGNAL( defaultClicked() ), TQT_SLOT( slotDefault() )); TQSpacerItem* spacer = new TQSpacerItem( 20, 40, TQSizePolicy::Minimum, TQSizePolicy::Expanding ); buttonsLayout->addItem( spacer ); updateButtonState(); resize( TQSize(300, 250).expandedTo(minimumSizeHint()) ); } EqualizerPresetManager::~EqualizerPresetManager() { } void EqualizerPresetManager::setPresets(TQMap< TQString, TQValueList > presets) { if ( presets.empty() ) return; m_presets = presets; m_presetsView->clear(); TQMap< TQString, TQValueList >::Iterator end = presets.end(); for ( TQMap< TQString, TQValueList >::Iterator it = presets.begin(); it != end; ++it ) if ( it.key() != i18n( "Zero" ) && it.key() != i18n( "Manual" ) ) // Don't add 'Manual' and 'Zero' new TDEListViewItem( m_presetsView, it.key() ); } TQMap< TQString, TQValueList > EqualizerPresetManager::presets() { return m_presets; } void EqualizerPresetManager::slotRename() { bool ok; TQListViewItem* item = m_presetsView->selectedItem(); const TQString title = KInputDialog::getText( i18n("Rename Equalizer Preset"), i18n("Enter new preset name:"), item->text(0), &ok, this); if ( ok && item->text(0) != title ) { // Check if the new preset title exists if ( m_presets.find( title ) != m_presets.end() ) { int button = KMessageBox::warningYesNo( this, i18n( "A preset with the name %1 already exists. Overwrite?" ).arg( title ) ); if ( button != KMessageBox::Yes ) return; } m_presets[ title ] = m_presets[ item->text(0)]; m_presets.remove( item->text(0) ); item->setText(0, title); } } void EqualizerPresetManager::slotDefault() { int button = KMessageBox::warningYesNo( this, i18n( "All presets will be deleted and defaults will be restored. Are you sure?" ) ); if ( button != KMessageBox::Yes ) return; // Preserve the 'Manual' preset TQValueList manualGains = m_presets[ i18n("Manual") ]; // Delete all presets m_presets.clear(); // Create predefined presets 'Zero' and 'Manual' TQValueList zeroGains; zeroGains << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0; m_presets[ i18n("Zero") ] = zeroGains; m_presets[ i18n("Manual") ] = manualGains; // Load the default presets TQFile file( locate( "data", "amarok/data/equalizer_presets.xml" ) ); TQTextStream stream( &file ); stream.setEncoding( TQTextStream::UnicodeUTF8 ); TQDomDocument d; if( !file.open( IO_ReadOnly ) || !d.setContent( stream.read() ) ) return; TQDomNode n = d.namedItem( "equalizerpresets" ).namedItem("preset"); for( ; !n.isNull(); n = n.nextSibling() ) { TQDomElement e = n.toElement(); TQString title = e.attribute( "name" ); TQValueList gains; gains << e.namedItem( "b0" ).toElement().text().toInt(); gains << e.namedItem( "b1" ).toElement().text().toInt(); gains << e.namedItem( "b2" ).toElement().text().toInt(); gains << e.namedItem( "b3" ).toElement().text().toInt(); gains << e.namedItem( "b4" ).toElement().text().toInt(); gains << e.namedItem( "b5" ).toElement().text().toInt(); gains << e.namedItem( "b6" ).toElement().text().toInt(); gains << e.namedItem( "b7" ).toElement().text().toInt(); gains << e.namedItem( "b8" ).toElement().text().toInt(); gains << e.namedItem( "b9" ).toElement().text().toInt(); m_presets[ title ] = gains; } file.close(); // Update listview setPresets( m_presets ); } void EqualizerPresetManager::slotDelete() { TQListViewItem* item = m_presetsView->selectedItem(); m_presets.remove( item->text(0) ); delete item; } void EqualizerPresetManager::updateButtonState() { bool selected = ( m_presetsView->selectedItem() != 0 ); m_deleteBtn->setEnabled( selected ); m_renameBtn->setEnabled( selected ); } #include "equalizerpresetmanager.moc"