akregator/src

propertiesdialog.cpp

00001 /*
00002     This file is part of Akregator.
00003 
00004     Copyright (C) 2004 Stanislav Karchebny <Stanislav.Karchebny@kdemail.net>
00005 
00006     This program is free software; you can redistribute it and/or modify
00007     it under the terms of the GNU General Public License as published by
00008     the Free Software Foundation; either version 2 of the License, or
00009     (at your option) any later version.
00010 
00011     This program is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00014     GNU General Public License for more details.
00015 
00016     You should have received a copy of the GNU General Public License
00017     along with this program; if not, write to the Free Software
00018     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00019 
00020     As a special exception, permission is given to link this program
00021     with any edition of Qt, and distribute the resulting executable,
00022     without including the source code for Qt in the source distribution.
00023 */
00024 
00025 #include "akregatorconfig.h"
00026 #include "feed.h"
00027 #include "propertiesdialog.h"
00028 
00029 #include <kcombobox.h>
00030 #include <klineedit.h>
00031 #include <kpassdlg.h>
00032 #include <klocale.h>
00033 #include <knuminput.h>
00034 
00035 #include <qcheckbox.h>
00036 #include <qbuttongroup.h>
00037 #include <qradiobutton.h>
00038 
00039 namespace Akregator {
00040 
00041 FeedPropertiesWidget::FeedPropertiesWidget(QWidget *parent, const char *name)
00042         : FeedPropertiesWidgetBase(parent, name)
00043 {
00044 }
00045 
00046 FeedPropertiesWidget::~FeedPropertiesWidget()
00047 {}
00048 
00049 
00050 void FeedPropertiesWidget::slotUpdateComboBoxActivated( int index )
00051 {
00052     if ( index == 3 ) // "never"
00053         updateSpinBox->setEnabled(false);
00054     else
00055         updateSpinBox->setEnabled(true);
00056 }
00057 
00058 
00059 void FeedPropertiesWidget::slotUpdateCheckBoxToggled( bool enabled )
00060 {
00061     if (enabled && updateComboBox->currentItem() != 3 ) // "never"
00062         updateSpinBox->setEnabled(true);
00063     else
00064         updateSpinBox->setEnabled(false);
00065 }
00066 
00067 
00068 FeedPropertiesDialog::FeedPropertiesDialog(QWidget *parent, const char *name)
00069         : KDialogBase(KDialogBase::Swallow, Qt::WStyle_DialogBorder, parent, name, true, i18n("Feed Properties"), KDialogBase::Ok|KDialogBase::Cancel)
00070 {
00071     widget=new FeedPropertiesWidget(this);
00072     setMainWidget(widget);
00073     widget->feedNameEdit->setFocus();
00074 
00075     connect(widget->feedNameEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotSetCaption(const QString&)));
00076 }
00077 
00078 FeedPropertiesDialog::~FeedPropertiesDialog()
00079 {}
00080 
00081 void FeedPropertiesDialog::slotOk()
00082 {
00083      m_feed->setNotificationMode(false);
00084      m_feed->setTitle( feedName() );
00085      m_feed->setXmlUrl( url() );
00086      m_feed->setCustomFetchIntervalEnabled(autoFetch());
00087      if (autoFetch())
00088         m_feed->setFetchInterval(fetchInterval());
00089      m_feed->setArchiveMode(archiveMode());
00090      m_feed->setMaxArticleAge(maxArticleAge());
00091      m_feed->setMaxArticleNumber(maxArticleNumber());
00092      m_feed->setMarkImmediatelyAsRead(markImmediatelyAsRead());
00093      m_feed->setUseNotification(useNotification());
00094      m_feed->setLoadLinkedWebsite(loadLinkedWebsite());
00095      m_feed->setNotificationMode(true, true);
00096 
00097      KDialogBase::slotOk();
00098 }
00099 
00100 void FeedPropertiesDialog::slotSetCaption(const QString& c)
00101 {
00102     if(c.isEmpty())
00103         setCaption(i18n("Feed Properties"));
00104     else
00105         setCaption(i18n("Properties of %1").arg(c));
00106 
00107 }
00108 
00109 void FeedPropertiesDialog::setFeed(Feed* feed)
00110 {
00111     m_feed = feed;
00112     if (!feed)
00113         return;
00114 
00115     setFeedName( feed->title() );
00116     setUrl( feed->xmlUrl() );
00117     setAutoFetch(feed->useCustomFetchInterval());
00118     if (feed->useCustomFetchInterval())
00119         setFetchInterval(feed->fetchInterval());
00120     else
00121         setFetchInterval(Settings::autoFetchInterval());
00122     setArchiveMode(feed->archiveMode());
00123     setMaxArticleAge(feed->maxArticleAge());
00124     setMaxArticleNumber(feed->maxArticleNumber());
00125     setMarkImmediatelyAsRead(feed->markImmediatelyAsRead());
00126     setUseNotification(feed->useNotification());
00127     setLoadLinkedWebsite(feed->loadLinkedWebsite());
00128     slotSetCaption(feedName());
00129 }
00130 
00131 
00132 const QString FeedPropertiesDialog::feedName() const
00133 {
00134    return widget->feedNameEdit->text();
00135 }
00136 
00137 const QString FeedPropertiesDialog::url() const
00138 {
00139    return widget->urlEdit->text();
00140 }
00141 
00142 bool FeedPropertiesDialog::autoFetch() const
00143 {
00144    return widget->upChkbox->isChecked();
00145 }
00146 
00147 int FeedPropertiesDialog::fetchInterval() const
00148 {
00149     switch (widget->updateComboBox->currentItem() )
00150     {
00151         case 0: // minutes
00152             return widget->updateSpinBox->value();
00153         case 1: // hours
00154             return widget->updateSpinBox->value()*60;
00155         case 2: // days
00156             return widget->updateSpinBox->value()*60*24;
00157         default:
00158             return -1; // never
00159     }
00160 }
00161 
00162 Feed::ArchiveMode FeedPropertiesDialog::archiveMode() const
00163 {
00164     // i could check the button group's int, but order could change...
00165     if ( widget->rb_globalDefault->isChecked() )
00166         return Feed::globalDefault;
00167 
00168    if ( widget->rb_keepAllArticles->isChecked() )
00169         return Feed::keepAllArticles;
00170 
00171    if ( widget->rb_limitArticleAge->isChecked() )
00172         return Feed::limitArticleAge;
00173 
00174    if ( widget->rb_limitArticleNumber->isChecked() )
00175         return Feed::limitArticleNumber;
00176 
00177    if ( widget->rb_disableArchiving->isChecked() )
00178         return Feed::disableArchiving;
00179 
00180     // in a perfect world, this is never reached
00181 
00182     return Feed::globalDefault;
00183 }
00184 
00185 
00186 int FeedPropertiesDialog::maxArticleAge() const
00187 {
00188     return widget->sb_maxArticleAge->value();
00189 }
00190 
00191 int FeedPropertiesDialog::maxArticleNumber() const
00192 {
00193     return widget->sb_maxArticleNumber->value();
00194 }
00195 
00196 void FeedPropertiesDialog::setArchiveMode(Feed::ArchiveMode mode)
00197  {
00198     switch (mode)
00199     {
00200          case Feed::globalDefault:
00201             widget->rb_globalDefault->setChecked(true);
00202             break;
00203          case Feed::keepAllArticles:
00204             widget->rb_keepAllArticles->setChecked(true);
00205             break;
00206          case Feed::disableArchiving:
00207             widget->rb_disableArchiving->setChecked(true);
00208             break;
00209          case Feed::limitArticleAge:
00210             widget->rb_limitArticleAge->setChecked(true);
00211             break;
00212          case Feed::limitArticleNumber:
00213             widget->rb_limitArticleNumber->setChecked(true);
00214     }
00215 }
00216 void FeedPropertiesDialog::setFeedName(const QString& title)
00217 {
00218    widget->feedNameEdit->setText(title);
00219 }
00220 
00221 void FeedPropertiesDialog::setUrl(const QString& url)
00222 {
00223    widget->urlEdit->setText(url);
00224 }
00225 
00226 void FeedPropertiesDialog::setAutoFetch(bool customFetchEnabled)
00227 {
00228     widget->upChkbox->setChecked(customFetchEnabled);
00229     widget->updateComboBox->setEnabled(customFetchEnabled);
00230 
00231     if (widget->updateSpinBox->value() > -1)
00232         widget->updateSpinBox->setEnabled(customFetchEnabled);
00233     else
00234         widget->updateSpinBox->setEnabled(false);
00235 }
00236 
00237 void FeedPropertiesDialog::setFetchInterval(int interval)
00238 {
00239     if (interval == -1) // never update
00240     {
00241         widget->updateSpinBox->setValue(0);
00242         widget->updateSpinBox->setDisabled(true);
00243         widget->updateComboBox->setCurrentItem(3); // never
00244         return;
00245     }
00246 
00247     if (interval == 0)
00248     {
00249         widget->updateSpinBox->setValue(0);
00250         widget->updateSpinBox->setEnabled(widget->upChkbox->isChecked());
00251         widget->updateComboBox->setCurrentItem(0); // minutes
00252         return;
00253     }
00254 
00255    if (interval % (60*24) == 0)
00256    {
00257        widget->updateSpinBox->setValue(interval / (60*24) );
00258        widget->updateSpinBox->setEnabled(widget->upChkbox->isChecked());
00259        widget->updateComboBox->setCurrentItem(2); // days
00260        return;
00261    }
00262 
00263    if (interval % 60 == 0)
00264    {
00265        widget->updateSpinBox->setValue(interval / 60 );
00266        widget->updateSpinBox->setEnabled(widget->upChkbox->isChecked());
00267        widget->updateComboBox->setCurrentItem(1); // hours
00268        return;
00269    }
00270 
00271    widget->updateSpinBox->setValue(interval);
00272    widget->updateSpinBox->setEnabled(widget->upChkbox->isChecked());
00273    widget->updateComboBox->setCurrentItem(0); // minutes
00274 }
00275 
00276 void FeedPropertiesDialog::setMaxArticleAge(int age)
00277  {
00278     widget->sb_maxArticleAge->setValue(age);
00279 }
00280 
00281 void FeedPropertiesDialog::setMaxArticleNumber(int number)
00282 {
00283     widget->sb_maxArticleNumber->setValue(number);
00284 }
00285 
00286 void FeedPropertiesDialog::setMarkImmediatelyAsRead(bool enabled)
00287 {
00288     widget->checkBox_markRead->setChecked(enabled);
00289 }
00290 
00291 bool FeedPropertiesDialog::markImmediatelyAsRead() const
00292 {
00293     return widget->checkBox_markRead->isChecked();
00294 }
00295 
00296 void FeedPropertiesDialog::setUseNotification(bool enabled)
00297 {
00298     widget->checkBox_useNotification->setChecked(enabled);
00299 }
00300 
00301 bool FeedPropertiesDialog::useNotification() const
00302 {
00303     return widget->checkBox_useNotification->isChecked();
00304 }
00305 
00306 bool FeedPropertiesDialog::loadLinkedWebsite() const
00307 {
00308     return widget->checkBox_loadWebsite->isChecked();
00309 }
00310 
00311 void FeedPropertiesDialog::setLoadLinkedWebsite(bool enabled)
00312 {
00313     widget->checkBox_loadWebsite->setChecked(enabled);
00314 }
00315 
00316 void FeedPropertiesDialog::selectFeedName()
00317 {
00318    widget->feedNameEdit->selectAll();
00319 }
00320 
00321 } // namespace Akregator
00322 
00323 #include "propertiesdialog.moc"
00324 // vim: ts=4 sw=4 et
KDE Home | KDE Accessibility Home | Description of Access Keys