summaryrefslogtreecommitdiffstats
path: root/akregator/src/propertiesdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'akregator/src/propertiesdialog.cpp')
-rw-r--r--akregator/src/propertiesdialog.cpp324
1 files changed, 324 insertions, 0 deletions
diff --git a/akregator/src/propertiesdialog.cpp b/akregator/src/propertiesdialog.cpp
new file mode 100644
index 000000000..cd63c2045
--- /dev/null
+++ b/akregator/src/propertiesdialog.cpp
@@ -0,0 +1,324 @@
+/*
+ This file is part of Akregator.
+
+ Copyright (C) 2004 Stanislav Karchebny <Stanislav.Karchebny@kdemail.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.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include "akregatorconfig.h"
+#include "feed.h"
+#include "propertiesdialog.h"
+
+#include <kcombobox.h>
+#include <klineedit.h>
+#include <kpassdlg.h>
+#include <klocale.h>
+#include <knuminput.h>
+
+#include <qcheckbox.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+
+namespace Akregator {
+
+FeedPropertiesWidget::FeedPropertiesWidget(QWidget *parent, const char *name)
+ : FeedPropertiesWidgetBase(parent, name)
+{
+}
+
+FeedPropertiesWidget::~FeedPropertiesWidget()
+{}
+
+
+void FeedPropertiesWidget::slotUpdateComboBoxActivated( int index )
+{
+ if ( index == 3 ) // "never"
+ updateSpinBox->setEnabled(false);
+ else
+ updateSpinBox->setEnabled(true);
+}
+
+
+void FeedPropertiesWidget::slotUpdateCheckBoxToggled( bool enabled )
+{
+ if (enabled && updateComboBox->currentItem() != 3 ) // "never"
+ updateSpinBox->setEnabled(true);
+ else
+ updateSpinBox->setEnabled(false);
+}
+
+
+FeedPropertiesDialog::FeedPropertiesDialog(QWidget *parent, const char *name)
+ : KDialogBase(KDialogBase::Swallow, Qt::WStyle_DialogBorder, parent, name, true, i18n("Feed Properties"), KDialogBase::Ok|KDialogBase::Cancel)
+{
+ widget=new FeedPropertiesWidget(this);
+ setMainWidget(widget);
+ widget->feedNameEdit->setFocus();
+
+ connect(widget->feedNameEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotSetCaption(const QString&)));
+}
+
+FeedPropertiesDialog::~FeedPropertiesDialog()
+{}
+
+void FeedPropertiesDialog::slotOk()
+{
+ m_feed->setNotificationMode(false);
+ m_feed->setTitle( feedName() );
+ m_feed->setXmlUrl( url() );
+ m_feed->setCustomFetchIntervalEnabled(autoFetch());
+ if (autoFetch())
+ m_feed->setFetchInterval(fetchInterval());
+ m_feed->setArchiveMode(archiveMode());
+ m_feed->setMaxArticleAge(maxArticleAge());
+ m_feed->setMaxArticleNumber(maxArticleNumber());
+ m_feed->setMarkImmediatelyAsRead(markImmediatelyAsRead());
+ m_feed->setUseNotification(useNotification());
+ m_feed->setLoadLinkedWebsite(loadLinkedWebsite());
+ m_feed->setNotificationMode(true, true);
+
+ KDialogBase::slotOk();
+}
+
+void FeedPropertiesDialog::slotSetCaption(const QString& c)
+{
+ if(c.isEmpty())
+ setCaption(i18n("Feed Properties"));
+ else
+ setCaption(i18n("Properties of %1").arg(c));
+
+}
+
+void FeedPropertiesDialog::setFeed(Feed* feed)
+{
+ m_feed = feed;
+ if (!feed)
+ return;
+
+ setFeedName( feed->title() );
+ setUrl( feed->xmlUrl() );
+ setAutoFetch(feed->useCustomFetchInterval());
+ if (feed->useCustomFetchInterval())
+ setFetchInterval(feed->fetchInterval());
+ else
+ setFetchInterval(Settings::autoFetchInterval());
+ setArchiveMode(feed->archiveMode());
+ setMaxArticleAge(feed->maxArticleAge());
+ setMaxArticleNumber(feed->maxArticleNumber());
+ setMarkImmediatelyAsRead(feed->markImmediatelyAsRead());
+ setUseNotification(feed->useNotification());
+ setLoadLinkedWebsite(feed->loadLinkedWebsite());
+ slotSetCaption(feedName());
+}
+
+
+const QString FeedPropertiesDialog::feedName() const
+{
+ return widget->feedNameEdit->text();
+}
+
+const QString FeedPropertiesDialog::url() const
+{
+ return widget->urlEdit->text();
+}
+
+bool FeedPropertiesDialog::autoFetch() const
+{
+ return widget->upChkbox->isChecked();
+}
+
+int FeedPropertiesDialog::fetchInterval() const
+{
+ switch (widget->updateComboBox->currentItem() )
+ {
+ case 0: // minutes
+ return widget->updateSpinBox->value();
+ case 1: // hours
+ return widget->updateSpinBox->value()*60;
+ case 2: // days
+ return widget->updateSpinBox->value()*60*24;
+ default:
+ return -1; // never
+ }
+}
+
+Feed::ArchiveMode FeedPropertiesDialog::archiveMode() const
+{
+ // i could check the button group's int, but order could change...
+ if ( widget->rb_globalDefault->isChecked() )
+ return Feed::globalDefault;
+
+ if ( widget->rb_keepAllArticles->isChecked() )
+ return Feed::keepAllArticles;
+
+ if ( widget->rb_limitArticleAge->isChecked() )
+ return Feed::limitArticleAge;
+
+ if ( widget->rb_limitArticleNumber->isChecked() )
+ return Feed::limitArticleNumber;
+
+ if ( widget->rb_disableArchiving->isChecked() )
+ return Feed::disableArchiving;
+
+ // in a perfect world, this is never reached
+
+ return Feed::globalDefault;
+}
+
+
+int FeedPropertiesDialog::maxArticleAge() const
+{
+ return widget->sb_maxArticleAge->value();
+}
+
+int FeedPropertiesDialog::maxArticleNumber() const
+{
+ return widget->sb_maxArticleNumber->value();
+}
+
+void FeedPropertiesDialog::setArchiveMode(Feed::ArchiveMode mode)
+ {
+ switch (mode)
+ {
+ case Feed::globalDefault:
+ widget->rb_globalDefault->setChecked(true);
+ break;
+ case Feed::keepAllArticles:
+ widget->rb_keepAllArticles->setChecked(true);
+ break;
+ case Feed::disableArchiving:
+ widget->rb_disableArchiving->setChecked(true);
+ break;
+ case Feed::limitArticleAge:
+ widget->rb_limitArticleAge->setChecked(true);
+ break;
+ case Feed::limitArticleNumber:
+ widget->rb_limitArticleNumber->setChecked(true);
+ }
+}
+void FeedPropertiesDialog::setFeedName(const QString& title)
+{
+ widget->feedNameEdit->setText(title);
+}
+
+void FeedPropertiesDialog::setUrl(const QString& url)
+{
+ widget->urlEdit->setText(url);
+}
+
+void FeedPropertiesDialog::setAutoFetch(bool customFetchEnabled)
+{
+ widget->upChkbox->setChecked(customFetchEnabled);
+ widget->updateComboBox->setEnabled(customFetchEnabled);
+
+ if (widget->updateSpinBox->value() > -1)
+ widget->updateSpinBox->setEnabled(customFetchEnabled);
+ else
+ widget->updateSpinBox->setEnabled(false);
+}
+
+void FeedPropertiesDialog::setFetchInterval(int interval)
+{
+ if (interval == -1) // never update
+ {
+ widget->updateSpinBox->setValue(0);
+ widget->updateSpinBox->setDisabled(true);
+ widget->updateComboBox->setCurrentItem(3); // never
+ return;
+ }
+
+ if (interval == 0)
+ {
+ widget->updateSpinBox->setValue(0);
+ widget->updateSpinBox->setEnabled(widget->upChkbox->isChecked());
+ widget->updateComboBox->setCurrentItem(0); // minutes
+ return;
+ }
+
+ if (interval % (60*24) == 0)
+ {
+ widget->updateSpinBox->setValue(interval / (60*24) );
+ widget->updateSpinBox->setEnabled(widget->upChkbox->isChecked());
+ widget->updateComboBox->setCurrentItem(2); // days
+ return;
+ }
+
+ if (interval % 60 == 0)
+ {
+ widget->updateSpinBox->setValue(interval / 60 );
+ widget->updateSpinBox->setEnabled(widget->upChkbox->isChecked());
+ widget->updateComboBox->setCurrentItem(1); // hours
+ return;
+ }
+
+ widget->updateSpinBox->setValue(interval);
+ widget->updateSpinBox->setEnabled(widget->upChkbox->isChecked());
+ widget->updateComboBox->setCurrentItem(0); // minutes
+}
+
+void FeedPropertiesDialog::setMaxArticleAge(int age)
+ {
+ widget->sb_maxArticleAge->setValue(age);
+}
+
+void FeedPropertiesDialog::setMaxArticleNumber(int number)
+{
+ widget->sb_maxArticleNumber->setValue(number);
+}
+
+void FeedPropertiesDialog::setMarkImmediatelyAsRead(bool enabled)
+{
+ widget->checkBox_markRead->setChecked(enabled);
+}
+
+bool FeedPropertiesDialog::markImmediatelyAsRead() const
+{
+ return widget->checkBox_markRead->isChecked();
+}
+
+void FeedPropertiesDialog::setUseNotification(bool enabled)
+{
+ widget->checkBox_useNotification->setChecked(enabled);
+}
+
+bool FeedPropertiesDialog::useNotification() const
+{
+ return widget->checkBox_useNotification->isChecked();
+}
+
+bool FeedPropertiesDialog::loadLinkedWebsite() const
+{
+ return widget->checkBox_loadWebsite->isChecked();
+}
+
+void FeedPropertiesDialog::setLoadLinkedWebsite(bool enabled)
+{
+ widget->checkBox_loadWebsite->setChecked(enabled);
+}
+
+void FeedPropertiesDialog::selectFeedName()
+{
+ widget->feedNameEdit->selectAll();
+}
+
+} // namespace Akregator
+
+#include "propertiesdialog.moc"
+// vim: ts=4 sw=4 et