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 TQt, and distribute the resulting executable, 00022 without including the source code for TQt 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 <tqcheckbox.h> 00036 #include <tqbuttongroup.h> 00037 #include <tqradiobutton.h> 00038 00039 namespace Akregator { 00040 00041 FeedPropertiesWidget::FeedPropertiesWidget(TQWidget *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(TQWidget *parent, const char *name) 00069 : KDialogBase(KDialogBase::Swallow, TQt::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, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(slotSetCaption(const TQString&))); 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 TQString& 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 TQString FeedPropertiesDialog::feedName() const 00133 { 00134 return widget->feedNameEdit->text(); 00135 } 00136 00137 const TQString 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 TQString& title) 00217 { 00218 widget->feedNameEdit->setText(title); 00219 } 00220 00221 void FeedPropertiesDialog::setUrl(const TQString& 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