/* (c) 2006 Roel Meeuws *************************************************************************** * * * 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. * * * ***************************************************************************/ /**************************************************************************** ** ui.h extension file, included from the uic-generated form implementation. ** ** If you wish to add, delete or rename functions or slots use ** TQt Designer which will update this file, preserving your code. Create an ** init() function in place of a constructor, and a destroy() function in ** place of a destructor. *****************************************************************************/ /// Configuration Dialog Extension slots void GenericMediaDeviceConfigDialog::addSupportedButtonClicked( int id ) { TQPopupMenu *unsupported = m_addSupportedButton->popup(); TQComboBox *convert = m_convertComboBox; TQListBox *supported = m_supportedListBox; TQString text = unsupported->text( id ); if( text.startsWith( "&" ) ) supported->insertItem( text.right( text.length() - 1 ) ); else supported->insertItem( text ); TQString temp = convert->currentText(); convert->insertItem( unsupported->text( id ) ); unsupported->removeItem( id ); supported->sort(); convert->listBox()->sort(); convert->setCurrentText( temp ); } void GenericMediaDeviceConfigDialog::removeSupportedButtonClicked() { TQStringList unsupported; TQComboBox *convert = m_convertComboBox; TQListBox *supported = m_supportedListBox; for( uint i = 0; i < m_addSupportedButton->popup()->count(); i++ ) { int id = m_addSupportedButton->popup()->idAt( i ); unsupported.append( m_addSupportedButton->popup()->text( id ) ); } for( uint i = 0; i < supported->count() ; /* nothing */) { TQListBoxItem *item = supported->item( i ); if( item->isSelected() ) { TQString temp; unsupported.append( item->text() ); temp = convert->currentText(); convert->setCurrentText( item->text() ); convert->removeItem( convert->currentItem() ); if( temp == item->text() ) convert->setCurrentItem( 0 ); else convert->setCurrentText( temp ); item = 0; supported->removeItem( i ); continue; } i++; } // at least support mp3 format. if( supported->count() <= 0 ) { supported->insertItem( "mp3" ); convert->insertItem( "mp3" ); convert->setCurrentItem( 0 ); unsupported.remove( "mp3" ); } unsupported.sort(); m_addSupportedButton->popup()->clear(); for( TQStringList::Iterator it = unsupported.begin(); it != unsupported.end(); it++ ) { m_addSupportedButton->popup()->insertItem( *it ); } } void GenericMediaDeviceConfigDialog::supportedListBoxDoubleClicked( TQListBoxItem* item ) { m_convertComboBox->setCurrentText( item->text() ); } void GenericMediaDeviceConfigDialog::updateConfigDialogLists( const TQStringList & supportedFileTypes ) { TQStringList allTypes; allTypes << "mp3" << "ogg" << "wma" << "mp4" << "aac" << "m4a" << "ac3"; allTypes << "wav" << "flac" << "asf" << "asx" << "mpg" << "mp4v" << "mpeg"; allTypes << "aa" << "3gp" << "mp2" << "ape" << "mpc"; TQStringList unsupported; TQComboBox *convert = m_convertComboBox; TQListBox *supported = m_supportedListBox; for( TQStringList::Iterator it = allTypes.begin(); it != allTypes.end(); it++ ) { if( supportedFileTypes.contains( *it ) ) { supported->insertItem( *it ); convert->insertItem( *it ); } else { unsupported.append( *it ); } } supported->sort(); unsupported.sort(); m_addSupportedButton->popup()->clear(); for( TQStringList::Iterator it = unsupported.begin(); it != unsupported.end(); it++ ) { m_addSupportedButton->popup()->insertItem( *it ); } convert->listBox()->sort(); convert->setCurrentText( supportedFileTypes.first() ); } TQString GenericMediaDeviceConfigDialog::buildDestination( const TQString &format, const MetaBundle &mb ) { bool isCompilation = mb.compilation() > 0; TQMap args; TQString artist = mb.artist(); TQString albumartist = artist; if( isCompilation ) albumartist = i18n( "Various Artists" ); args["theartist"] = cleanPath( artist ); args["thealbumartist"] = cleanPath( albumartist ); if( m_ignoreTheCheck->isChecked() && artist.startsWith( "The " ) ) CollectionView::instance()->manipulateThe( artist, true ); artist = cleanPath( artist ); if( m_ignoreTheCheck->isChecked() && albumartist.startsWith( "The " ) ) CollectionView::instance()->manipulateThe( albumartist, true ); albumartist = cleanPath( albumartist ); for( int i = 0; i < MetaBundle::NUM_COLUMNS; i++ ) { if( i == MetaBundle::Score || i == MetaBundle::PlayCount || i == MetaBundle::LastPlayed ) continue; args[mb.exactColumnName( i ).lower()] = cleanPath( mb.prettyText( i ) ); } args["artist"] = artist; args["albumartist"] = albumartist; args["initial"] = albumartist.mid( 0, 1 ).upper(); args["filetype"] = mb.url().path().section( ".", -1 ).lower(); TQString track; if ( mb.track() ) track.sprintf( "%02d", mb.track() ); args["track"] = track; Amarok::QStringx formatx( format ); TQString result = m_device->mountPoint().append( formatx.namedOptArgs( args ) ); TQString tail = result.mid( m_device->mountPoint().length() ); if( !tail.startsWith( "/" ) ) tail.prepend( "/" ); return m_device->mountPoint() + tail.replace( TQRegExp( "/\\.*" ), "/" ); } TQString GenericMediaDeviceConfigDialog::cleanPath( const TQString &component ) { TQString result = Amarok::cleanPath( component ); if( m_asciiCheck->isChecked() ) result = Amarok::asciiPath( result ); result.simplifyWhiteSpace(); if( m_spaceCheck->isChecked() ) result.replace( TQRegExp( "\\s" ), "_" ); if( m_device->m_actuallyVfat || m_vfatCheck->isChecked() ) result = Amarok::vfatPath( result ); result.replace( "/", "-" ); return result; } void GenericMediaDeviceConfigDialog::updatePreviewLabel() { m_previewLabel->setText( buildDestination( m_songLocationBox->text(), *m_previewBundle ) ); } void GenericMediaDeviceConfigDialog::updatePreviewLabel( const TQString& format) { m_previewLabel->setText( buildDestination( format , *m_previewBundle ) ); } void GenericMediaDeviceConfigDialog::setDevice( GenericMediaDevice* device ) { m_device = device; m_songLocationBox->setText( m_device->m_songLocation ); m_podcastLocationBox->setText( m_device->m_podcastLocation ); updatePreviewLabel( m_device->m_songLocation ); updateConfigDialogLists( m_device->m_supportedFileTypes ); m_asciiCheck->setChecked( m_device->m_asciiTextOnly ); m_vfatCheck->setChecked( m_device->m_vfatTextOnly ); m_spaceCheck->setChecked( m_device->m_spacesToUnderscores ); m_ignoreTheCheck->setChecked( m_device->m_ignoreThePrefix ); } TQString GenericMediaDeviceConfigDialog::buildFormatTip() { TQMap args; for( int i = 0; i < MetaBundle::NUM_COLUMNS; i++ ) { if( i == MetaBundle::Score || i == MetaBundle::PlayCount || i == MetaBundle::LastPlayed ) continue; args[MetaBundle::exactColumnName( i ).lower()] = MetaBundle::prettyColumnName( i ); } args["albumartist"] = i18n( "%1 or %2" ).arg( "Album Artist, The" , "The Album Artist" ); args["thealbumartist"] = "The Album Artist"; args["theartist"] = "The Artist"; args["artist"] = i18n( "%1 or %2" ).arg( "Artist, The" , "The Artist" ); args["initial"] = i18n( "Artist's Initial" ); args["filetype"] = i18n( "File Extension of Source" ); args["track"] = i18n( "Track Number" ); TQString tooltip = i18n( "

Custom Format String

" ); tooltip += i18n( "You can use the following tokens:" ); tooltip += "
    "; for( TQMap::iterator it = args.begin(); it != args.end(); ++it ) { tooltip += TQString( "
  • %1 - %2" ).arg( it.data(), "%" + it.key() ); } tooltip += "
"; tooltip += i18n( "If you surround sections of text that contain a token with curly-braces, " "that section will be hidden if the token is empty." ); return tooltip; } void GenericMediaDeviceConfigDialog::init() { m_previewBundle = new MetaBundle(); m_previewBundle->setAlbum( AtomicString( "Some Album" ) ); m_previewBundle->setArtist( AtomicString( "The One Artist" ) ); m_previewBundle->setBitrate( 128 ); m_previewBundle->setComment( AtomicString( "Some Comment" ) ); m_previewBundle->setCompilation( 0 ); m_previewBundle->setComposer( AtomicString( "The One Composer" ) ); m_previewBundle->setDiscNumber( 1 ); m_previewBundle->setFileType( 2 ); m_previewBundle->setFilesize( 1003264 ); m_previewBundle->setGenre( AtomicString( "Some Genre" ) ); m_previewBundle->setLength( 193 ); m_previewBundle->setPlayCount( 2 ); m_previewBundle->setRating( 3 ); m_previewBundle->setSampleRate( 44100 ); m_previewBundle->setScore( 3.f ); m_previewBundle->setTitle( AtomicString( "Some Title" ) ); m_previewBundle->setTrack( 7 ); m_previewBundle->setUrl( "/some%20directory/some%20file.mp3" ); m_previewBundle->setYear( 2006 ); m_formatHelp->setText( TQString( "%2" ). arg( Amarok::escapeHTMLAttr( buildFormatTip() ), i18n( "(Help)" ) ) ); m_unsupportedMenu = new TQPopupMenu( m_addSupportedButton, "unsupported" ); m_addSupportedButton->setPopup( m_unsupportedMenu ); connect( m_unsupportedMenu, TQT_SIGNAL( activated( int ) ), this, TQT_SLOT( addSupportedButtonClicked( int ) ) ); } void GenericMediaDeviceConfigDialog::destroy() { if( m_unsupportedMenu != NULL ) delete m_unsupportedMenu; m_unsupportedMenu = NULL; }