From adffd7df74efd5d9d0d3d24f6020872e4df74249 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Sat, 13 Nov 2010 17:12:13 +0000 Subject: [PATCH] Fix selection behavior --- src/rss/automatedrssdownloader.cpp | 106 +++++++++----- src/rss/automatedrssdownloader.h | 7 +- src/rss/automatedrssdownloader.ui | 220 +++++++++++++++-------------- 3 files changed, 187 insertions(+), 146 deletions(-) diff --git a/src/rss/automatedrssdownloader.cpp b/src/rss/automatedrssdownloader.cpp index bc326bd94..c415ad04c 100644 --- a/src/rss/automatedrssdownloader.cpp +++ b/src/rss/automatedrssdownloader.cpp @@ -54,9 +54,12 @@ AutomatedRssDownloader::AutomatedRssDownloader(QWidget *parent) : initLabelCombobox(); loadFeedList(); loadSettings(); - connect(ui->listRules, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(updateRuleDefinitionBox(QListWidgetItem*,QListWidgetItem*))); - connect(ui->listRules, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(updateFeedList(QListWidgetItem*,QListWidgetItem*))); + connect(ui->listRules, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(handleCurrentItemChange(QListWidgetItem*,QListWidgetItem*))); + connect(ui->listRules, SIGNAL(itemSelectionChanged()), SLOT(updateRuleDefinitionBox())); + connect(ui->listRules, SIGNAL(itemSelectionChanged()), SLOT(updateFeedList())); + connect(ui->listFeeds, SIGNAL(itemChanged(QListWidgetItem*)), SLOT(handleFeedCheckStateChange(QListWidgetItem*))); updateRuleDefinitionBox(); + updateFeedList(); } AutomatedRssDownloader::~AutomatedRssDownloader() @@ -101,6 +104,8 @@ void AutomatedRssDownloader::loadRulesList() else item->setCheckState(Qt::Unchecked); } + if(ui->listRules->count() > 0 && !ui->listRules->currentItem()) + ui->listRules->setCurrentRow(0); } void AutomatedRssDownloader::loadFeedList() @@ -112,8 +117,6 @@ void AutomatedRssDownloader::loadFeedList() item->setData(Qt::UserRole, feed_urls.at(i)); item->setFlags(item->flags()|Qt::ItemIsUserCheckable); } - if(ui->listRules->count() > 0 && !ui->listRules->currentItem()) - ui->listRules->setCurrentRow(0); } QStringList AutomatedRssDownloader::getSelectedFeeds() const @@ -127,20 +130,28 @@ QStringList AutomatedRssDownloader::getSelectedFeeds() const return feeds; } -void AutomatedRssDownloader::updateFeedList(QListWidgetItem* current, QListWidgetItem* previous) +void AutomatedRssDownloader::updateFeedList() { - Q_UNUSED(previous); - RssDownloadRule rule = getCurrentRule(); - const QStringList affected_feeds = rule.rssFeeds(); for(int i=0; ilistFeeds->count(); ++i) { QListWidgetItem *item = ui->listFeeds->item(i); const QString feed_url = item->data(Qt::UserRole).toString(); - if(affected_feeds.contains(feed_url)) + bool all_enabled = false; + foreach(QListWidgetItem *ruleItem, ui->listRules->selectedItems()) { + RssDownloadRule rule = m_ruleList->getRule(ruleItem->text()); + if(!rule.isValid()) continue; + if(rule.rssFeeds().contains(feed_url)) { + all_enabled = true; + } else { + all_enabled = false; + break; + } + } + if(all_enabled) item->setCheckState(Qt::Checked); else item->setCheckState(Qt::Unchecked); } - ui->listFeeds->setEnabled(current != 0); + ui->listFeeds->setEnabled(!ui->listRules->selectedItems().isEmpty()); } bool AutomatedRssDownloader::isRssDownloaderEnabled() const @@ -148,44 +159,47 @@ bool AutomatedRssDownloader::isRssDownloaderEnabled() const return ui->checkEnableDownloader->isChecked(); } -void AutomatedRssDownloader::updateRuleDefinitionBox(QListWidgetItem* current, QListWidgetItem* previous) +void AutomatedRssDownloader::updateRuleDefinitionBox() { - qDebug() << Q_FUNC_INFO << current << previous; - // Save previous item - saveCurrentRule(previous); + qDebug() << Q_FUNC_INFO; // Update rule definition box const QList selection = ui->listRules->selectedItems(); - RssDownloadRule rule = getCurrentRule(); - if(selection.count() == 1 && rule.isValid()) { - ui->lineContains->setText(rule.mustContain()); - ui->lineNotContains->setText(rule.mustNotContain()); - ui->saveDiffDir_check->setChecked(!rule.savePath().isEmpty()); - ui->lineSavePath->setText(rule.savePath()); - if(rule.label().isEmpty()) { - ui->comboLabel->setCurrentIndex(-1); - ui->comboLabel->clearEditText(); + if(selection.count() == 1) { + RssDownloadRule rule = getCurrentRule(); + if(rule.isValid()) { + ui->lineContains->setText(rule.mustContain()); + ui->lineNotContains->setText(rule.mustNotContain()); + ui->saveDiffDir_check->setChecked(!rule.savePath().isEmpty()); + ui->lineSavePath->setText(rule.savePath()); + if(rule.label().isEmpty()) { + ui->comboLabel->setCurrentIndex(-1); + ui->comboLabel->clearEditText(); + } else { + ui->comboLabel->setCurrentIndex(ui->comboLabel->findText(rule.label())); + } } else { - ui->comboLabel->setCurrentIndex(ui->comboLabel->findText(rule.label())); + // New rule + clearRuleDefinitionBox(); + ui->lineContains->setText(selection.first()->text()); } // Enable ui->ruleDefBox->setEnabled(true); } else { // Clear - ui->lineNotContains->clear(); - ui->saveDiffDir_check->setChecked(false); - ui->lineSavePath->clear(); - ui->comboLabel->clearEditText(); - if(current && selection.count() == 1) { - // Use the rule name as a default for the "contains" field - ui->lineContains->setText(current->text()); - ui->ruleDefBox->setEnabled(true); - } else { - ui->lineContains->clear(); - ui->ruleDefBox->setEnabled(false); - } + clearRuleDefinitionBox(); + ui->ruleDefBox->setEnabled(false); } } +void AutomatedRssDownloader::clearRuleDefinitionBox() +{ + ui->lineContains->clear(); + ui->lineNotContains->clear(); + ui->saveDiffDir_check->setChecked(false); + ui->lineSavePath->clear(); + ui->comboLabel->clearEditText(); +} + RssDownloadRule AutomatedRssDownloader::getCurrentRule() const { QListWidgetItem * current_item = ui->listRules->currentItem(); @@ -203,6 +217,12 @@ void AutomatedRssDownloader::initLabelCombobox() } } +void AutomatedRssDownloader::handleCurrentItemChange(QListWidgetItem *current, QListWidgetItem *previous) +{ + Q_UNUSED(current); + saveCurrentRule(previous); +} + void AutomatedRssDownloader::saveCurrentRule(QListWidgetItem * item) { qDebug() << Q_FUNC_INFO << item; @@ -360,3 +380,17 @@ void AutomatedRssDownloader::renameSelectedRule() } } } + +void AutomatedRssDownloader::handleFeedCheckStateChange(QListWidgetItem *feed_item) +{ + if(ui->ruleDefBox->isEnabled()) { + // Make sure the current rule is saved + saveCurrentRule(ui->listRules->currentItem()); + } + foreach (QListWidgetItem* rule_item, ui->listRules->selectedItems()) { + RssDownloadRule rule = m_ruleList->getRule(rule_item->text()); + // TODO + } +} + + diff --git a/src/rss/automatedrssdownloader.h b/src/rss/automatedrssdownloader.h index 82afcaa28..8b325ea13 100644 --- a/src/rss/automatedrssdownloader.h +++ b/src/rss/automatedrssdownloader.h @@ -54,10 +54,13 @@ protected slots: void loadSettings(); void saveSettings(); void loadRulesList(); - void updateRuleDefinitionBox(QListWidgetItem* current = 0, QListWidgetItem* previous = 0); + void handleCurrentItemChange(QListWidgetItem* current, QListWidgetItem* previous); + void handleFeedCheckStateChange(QListWidgetItem* feed_item); + void updateRuleDefinitionBox(); + void clearRuleDefinitionBox(); void saveCurrentRule(QListWidgetItem * item); void loadFeedList(); - void updateFeedList(QListWidgetItem* current, QListWidgetItem* previous); + void updateFeedList(); private slots: void displayRulesListMenu(const QPoint& pos); diff --git a/src/rss/automatedrssdownloader.ui b/src/rss/automatedrssdownloader.ui index ab5b5500e..7bcbecfd0 100644 --- a/src/rss/automatedrssdownloader.ui +++ b/src/rss/automatedrssdownloader.ui @@ -13,7 +13,7 @@ Automated RSS Downloader - + @@ -121,130 +121,127 @@ - - - Qt::Vertical - - - - - - - Rule definition - - - - 0 - - - 0 - - - - - Must contain: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - Must not contain: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - false - - - Save to: + + + + + Rule definition + + + + 0 - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 0 - - - - - - - - false + + + + Must contain: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - false + + + + + + + Must not contain: + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + - ... + Assign label: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - 50 - false - + + + + true + + + + + + + Save to a different directory + + + + + + + false - Apply rule to feeds: + Save to: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - + + + + + + false + + + + + + + false + + + ... + + + + - - - - - Save to a different directory - - - - - - - Assign label: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - true - - - - - + + + + + + + + + 50 + false + + + + Apply rule to feeds: + + + + + + + + + @@ -279,6 +276,13 @@ + + + + Qt::Vertical + + +