1 // (c) 2005-2006 Seb Ruiz <ruiz@kde.org>
2 // (c) 2006 Bart Cerneels <shanachie@yucom.be>
3 // See COPYING file for licensing information.
5 #include "podcastsettings.h"
7 #include "mediabrowser.h"
8 #include "podcastsettingsbase.h"
12 #include <KMessageBox> //global changes confirmation
15 #include <KUrlRequester>
16 #include <KWindowSystem>
20 #include <QPushButton>
21 #include <QRadioButton>
24 PodcastSettings::PodcastSettings( const QDomNode
&channelSettings
, const QString
&title
)
27 m_saveLocation
= channelSettings
.namedItem( "savelocation").toElement().text();
28 m_autoScan
= channelSettings
.namedItem( "autoscan").toElement().text() == "true";
29 m_fetch
= channelSettings
.namedItem("fetch").toElement().text() == "automatic"?AUTOMATIC
:STREAM
;
30 m_addToMediaDevice
= channelSettings
.namedItem( "autotransfer").toElement().text() == "true";
31 m_purge
= channelSettings
.namedItem( "purge").toElement().text() == "true";
32 m_purgeCount
= channelSettings
.namedItem( "purgecount").toElement().text().toInt();
36 PodcastSettings::PodcastSettings( const QString
&title
)
39 m_saveLocation
= Amarok::saveLocation( "podcasts/" );
40 m_saveLocation
+= Amarok::vfatPath( m_title
);
43 m_addToMediaDevice
= false;
48 PodcastSettings::PodcastSettings( const QString
&title
, const QString
&save
, const bool autoScan
,
49 const int fetchType
, const bool autotransfer
, const bool purge
, const int purgecount
)
54 m_saveLocation
= Amarok::saveLocation( "podcasts/" );
55 m_saveLocation
+= Amarok::vfatPath( m_title
);
58 m_saveLocation
= save
;
60 m_autoScan
= autoScan
;
62 m_addToMediaDevice
= autotransfer
;
64 m_purgeCount
= purgecount
;
67 PodcastSettingsDialog::PodcastSettingsDialog( PodcastSettings
*settings
, QWidget
* parent
)
69 , m_settings( settings
)
71 setCaption( i18nc("change options", "Configure %1", settings
->m_title
) );
73 setButtons( Ok
| Cancel
| User1
);
74 setButtonGuiItem( User1
, KGuiItem( i18n("Reset") ) );
75 setDefaultButton( Ok
);
76 showButtonSeparator( true );
78 setSettings( settings
);
81 PodcastSettingsDialog::PodcastSettingsDialog( const Q3PtrList
<PodcastSettings
> &list
, const QString
&caption
, QWidget
* parent
)
83 , m_settingsList( list
)
85 setCaption( i18nc("change options", "Configure %1", caption
) );
87 setButtons( Ok
| Cancel
| User1
);
88 setButtonGuiItem( User1
, KGuiItem( i18n("Reset") ) );
89 setDefaultButton( Ok
);
90 showButtonSeparator( true );
93 m_settings
= m_settingsList
.first();
94 if( !m_settings
->m_saveLocation
.endsWith( '/' ) )
95 m_settings
->m_saveLocation
= m_settings
->m_saveLocation
.section( "/", 0, -2 );
96 setSettings( m_settings
);
100 PodcastSettingsDialog::init()
102 m_ps
= new PodcastSettingsDialogBase(this);
105 KWindowSystem::setState( winId(), NET::SkipTaskbar
);
109 m_ps
->m_saveLocation
->setMode( KFile::Directory
| KFile::ExistingOnly
);
111 m_ps
->m_addToMediaDeviceCheck
->setEnabled( MediaBrowser::isAvailable() );
113 enableButtonOk( false );
115 // Connects for modification check
116 connect( m_ps
->m_purgeCountSpinBox
->findChild
<QTextEdit
*>( "qt_spinbox_edit" ), SIGNAL(textChanged( const QString
& )), SLOT(checkModified()) );
117 connect( m_ps
->m_saveLocation
, SIGNAL(textChanged( const QString
& )), SLOT(checkModified()) );
118 connect( m_ps
->m_autoFetchCheck
, SIGNAL(clicked()), SLOT(checkModified()) );
119 connect( m_ps
->m_streamRadio
, SIGNAL(clicked()), SLOT(checkModified()) );
120 connect( m_ps
->m_addToMediaDeviceCheck
, SIGNAL(clicked()), SLOT(checkModified()) );
121 connect( m_ps
->m_downloadRadio
, SIGNAL(clicked()), SLOT(checkModified()) );
122 connect( m_ps
->m_purgeCheck
, SIGNAL(clicked()), SLOT(checkModified()) );
123 connect(this,SIGNAL(okClicked()),this,SLOT(slotOk()));
124 connect(this,SIGNAL(user1Clicked()), this,SLOT(slotUser1()));
128 PodcastSettingsDialog::hasChanged()
130 bool fetchTypeChanged
= true;
132 if( m_ps
->m_streamRadio
->isChecked() && m_settings
->m_fetch
== STREAM
||
133 m_ps
->m_downloadRadio
->isChecked() && m_settings
->m_fetch
== AUTOMATIC
)
135 fetchTypeChanged
= false;
137 return( m_settings
->m_saveLocation
!= requesterSaveLocation() ||
138 m_settings
->m_autoScan
!= m_ps
->m_autoFetchCheck
->isChecked() ||
139 m_settings
->m_addToMediaDevice
!= m_ps
->m_addToMediaDeviceCheck
->isChecked() ||
140 m_settings
->m_purge
!= m_ps
->m_purgeCheck
->isChecked() ||
141 m_settings
->m_purgeCount
!= m_ps
->m_purgeCountSpinBox
->value() ||
146 PodcastSettingsDialog::checkModified() //slot
148 enableButtonOk( hasChanged() );
151 void PodcastSettingsDialog::slotOk() //slot
153 enableButtonOk( false ); //visual feedback
155 if ( !m_settingsList
.isEmpty() )
157 oldForeachType( Q3PtrList
<PodcastSettings
>, m_settingsList
)
159 (*it
)->m_saveLocation
= requesterSaveLocation().append( Amarok::vfatPath( (*it
)->title() ) );
160 (*it
)->m_autoScan
= m_ps
->m_autoFetchCheck
->isChecked();
161 (*it
)->m_addToMediaDevice
= m_ps
->m_addToMediaDeviceCheck
->isChecked();
162 (*it
)->m_purge
= m_ps
->m_purgeCheck
->isChecked();
163 (*it
)->m_purgeCount
= m_ps
->m_purgeCountSpinBox
->value();
164 if( m_ps
->m_streamRadio
->isChecked() )
165 (*it
)->m_fetch
= STREAM
;
167 (*it
)->m_fetch
= AUTOMATIC
;
172 m_settings
->m_saveLocation
= requesterSaveLocation();
173 m_settings
->m_autoScan
= m_ps
->m_autoFetchCheck
->isChecked();
174 m_settings
->m_addToMediaDevice
= m_ps
->m_addToMediaDeviceCheck
->isChecked();
175 m_settings
->m_purge
= m_ps
->m_purgeCheck
->isChecked();
176 m_settings
->m_purgeCount
= m_ps
->m_purgeCountSpinBox
->value();
178 if( m_ps
->m_streamRadio
->isChecked() )
179 m_settings
->m_fetch
= STREAM
;
181 m_settings
->m_fetch
= AUTOMATIC
;
185 // KUrlRequester doesn't provide us with convenient functions for adding trailing slashes
186 QString
PodcastSettingsDialog::requesterSaveLocation()
188 return m_ps
->m_saveLocation
->url().path( KUrl::AddTrailingSlash
);
191 void PodcastSettingsDialog::setSettings( PodcastSettings
*settings
)
193 QString saveLocation
= settings
->m_saveLocation
;
195 m_ps
->m_saveLocation
->setUrl( saveLocation
);
196 m_ps
->m_autoFetchCheck
->setChecked( settings
->m_autoScan
);
198 if( settings
->m_fetch
== STREAM
)
200 m_ps
->m_streamRadio
->setChecked( true );
201 m_ps
->m_downloadRadio
->setChecked( false );
203 else if( settings
->m_fetch
== AUTOMATIC
)
205 m_ps
->m_streamRadio
->setChecked( false );
206 m_ps
->m_downloadRadio
->setChecked( true );
209 m_ps
->m_addToMediaDeviceCheck
->setChecked( settings
->m_addToMediaDevice
);
210 m_ps
->m_purgeCheck
->setChecked( settings
->m_purge
);
211 m_ps
->m_purgeCountSpinBox
->setValue( settings
->m_purgeCount
);
213 if( !settings
->m_purge
)
215 m_ps
->m_purgeCountSpinBox
->setEnabled( false );
216 m_ps
->m_purgeCountLabel
->setEnabled( false );
220 //reset to default settings button
221 void PodcastSettingsDialog::slotUser1() //slot
223 PodcastSettings
settings( m_settings
->m_title
);
224 setSettings( &settings
);
228 bool PodcastSettingsDialog::configure()
230 return exec() == QDialog::Accepted
;
233 #include "podcastsettings.moc"