Browse Source

Fix selection behavior

adaptive-webui-19844
Christophe Dumez 14 years ago
parent
commit
adffd7df74
  1. 82
      src/rss/automatedrssdownloader.cpp
  2. 7
      src/rss/automatedrssdownloader.h
  3. 70
      src/rss/automatedrssdownloader.ui

82
src/rss/automatedrssdownloader.cpp

@ -54,9 +54,12 @@ AutomatedRssDownloader::AutomatedRssDownloader(QWidget *parent) :
initLabelCombobox(); initLabelCombobox();
loadFeedList(); loadFeedList();
loadSettings(); loadSettings();
connect(ui->listRules, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(updateRuleDefinitionBox(QListWidgetItem*,QListWidgetItem*))); connect(ui->listRules, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(handleCurrentItemChange(QListWidgetItem*,QListWidgetItem*)));
connect(ui->listRules, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(updateFeedList(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(); updateRuleDefinitionBox();
updateFeedList();
} }
AutomatedRssDownloader::~AutomatedRssDownloader() AutomatedRssDownloader::~AutomatedRssDownloader()
@ -101,6 +104,8 @@ void AutomatedRssDownloader::loadRulesList()
else else
item->setCheckState(Qt::Unchecked); item->setCheckState(Qt::Unchecked);
} }
if(ui->listRules->count() > 0 && !ui->listRules->currentItem())
ui->listRules->setCurrentRow(0);
} }
void AutomatedRssDownloader::loadFeedList() void AutomatedRssDownloader::loadFeedList()
@ -112,8 +117,6 @@ void AutomatedRssDownloader::loadFeedList()
item->setData(Qt::UserRole, feed_urls.at(i)); item->setData(Qt::UserRole, feed_urls.at(i));
item->setFlags(item->flags()|Qt::ItemIsUserCheckable); item->setFlags(item->flags()|Qt::ItemIsUserCheckable);
} }
if(ui->listRules->count() > 0 && !ui->listRules->currentItem())
ui->listRules->setCurrentRow(0);
} }
QStringList AutomatedRssDownloader::getSelectedFeeds() const QStringList AutomatedRssDownloader::getSelectedFeeds() const
@ -127,20 +130,28 @@ QStringList AutomatedRssDownloader::getSelectedFeeds() const
return feeds; 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; i<ui->listFeeds->count(); ++i) { for(int i=0; i<ui->listFeeds->count(); ++i) {
QListWidgetItem *item = ui->listFeeds->item(i); QListWidgetItem *item = ui->listFeeds->item(i);
const QString feed_url = item->data(Qt::UserRole).toString(); 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); item->setCheckState(Qt::Checked);
else else
item->setCheckState(Qt::Unchecked); item->setCheckState(Qt::Unchecked);
} }
ui->listFeeds->setEnabled(current != 0); ui->listFeeds->setEnabled(!ui->listRules->selectedItems().isEmpty());
} }
bool AutomatedRssDownloader::isRssDownloaderEnabled() const bool AutomatedRssDownloader::isRssDownloaderEnabled() const
@ -148,15 +159,14 @@ bool AutomatedRssDownloader::isRssDownloaderEnabled() const
return ui->checkEnableDownloader->isChecked(); return ui->checkEnableDownloader->isChecked();
} }
void AutomatedRssDownloader::updateRuleDefinitionBox(QListWidgetItem* current, QListWidgetItem* previous) void AutomatedRssDownloader::updateRuleDefinitionBox()
{ {
qDebug() << Q_FUNC_INFO << current << previous; qDebug() << Q_FUNC_INFO;
// Save previous item
saveCurrentRule(previous);
// Update rule definition box // Update rule definition box
const QList<QListWidgetItem*> selection = ui->listRules->selectedItems(); const QList<QListWidgetItem*> selection = ui->listRules->selectedItems();
if(selection.count() == 1) {
RssDownloadRule rule = getCurrentRule(); RssDownloadRule rule = getCurrentRule();
if(selection.count() == 1 && rule.isValid()) { if(rule.isValid()) {
ui->lineContains->setText(rule.mustContain()); ui->lineContains->setText(rule.mustContain());
ui->lineNotContains->setText(rule.mustNotContain()); ui->lineNotContains->setText(rule.mustNotContain());
ui->saveDiffDir_check->setChecked(!rule.savePath().isEmpty()); ui->saveDiffDir_check->setChecked(!rule.savePath().isEmpty());
@ -167,23 +177,27 @@ void AutomatedRssDownloader::updateRuleDefinitionBox(QListWidgetItem* current, Q
} else { } else {
ui->comboLabel->setCurrentIndex(ui->comboLabel->findText(rule.label())); ui->comboLabel->setCurrentIndex(ui->comboLabel->findText(rule.label()));
} }
} else {
// New rule
clearRuleDefinitionBox();
ui->lineContains->setText(selection.first()->text());
}
// Enable // Enable
ui->ruleDefBox->setEnabled(true); ui->ruleDefBox->setEnabled(true);
} else { } else {
// Clear // Clear
clearRuleDefinitionBox();
ui->ruleDefBox->setEnabled(false);
}
}
void AutomatedRssDownloader::clearRuleDefinitionBox()
{
ui->lineContains->clear();
ui->lineNotContains->clear(); ui->lineNotContains->clear();
ui->saveDiffDir_check->setChecked(false); ui->saveDiffDir_check->setChecked(false);
ui->lineSavePath->clear(); ui->lineSavePath->clear();
ui->comboLabel->clearEditText(); 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);
}
}
} }
RssDownloadRule AutomatedRssDownloader::getCurrentRule() const RssDownloadRule AutomatedRssDownloader::getCurrentRule() const
@ -203,6 +217,12 @@ void AutomatedRssDownloader::initLabelCombobox()
} }
} }
void AutomatedRssDownloader::handleCurrentItemChange(QListWidgetItem *current, QListWidgetItem *previous)
{
Q_UNUSED(current);
saveCurrentRule(previous);
}
void AutomatedRssDownloader::saveCurrentRule(QListWidgetItem * item) void AutomatedRssDownloader::saveCurrentRule(QListWidgetItem * item)
{ {
qDebug() << Q_FUNC_INFO << 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
}
}

7
src/rss/automatedrssdownloader.h

@ -54,10 +54,13 @@ protected slots:
void loadSettings(); void loadSettings();
void saveSettings(); void saveSettings();
void loadRulesList(); 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 saveCurrentRule(QListWidgetItem * item);
void loadFeedList(); void loadFeedList();
void updateFeedList(QListWidgetItem* current, QListWidgetItem* previous); void updateFeedList();
private slots: private slots:
void displayRulesListMenu(const QPoint& pos); void displayRulesListMenu(const QPoint& pos);

70
src/rss/automatedrssdownloader.ui

@ -13,7 +13,7 @@
<property name="windowTitle"> <property name="windowTitle">
<string>Automated RSS Downloader</string> <string>Automated RSS Downloader</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_4"> <layout class="QVBoxLayout" name="verticalLayout_5">
<item> <item>
<widget class="QCheckBox" name="checkEnableDownloader"> <widget class="QCheckBox" name="checkEnableDownloader">
<property name="font"> <property name="font">
@ -121,12 +121,7 @@
</layout> </layout>
</item> </item>
<item> <item>
<widget class="Line" name="line"> <layout class="QVBoxLayout" name="verticalLayout_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item> <item>
<widget class="QGroupBox" name="ruleDefBox"> <widget class="QGroupBox" name="ruleDefBox">
<property name="title"> <property name="title">
@ -165,6 +160,30 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QLineEdit" name="lineNotContains"/> <widget class="QLineEdit" name="lineNotContains"/>
</item> </item>
<item row="2" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Assign label:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboLabel">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="saveDiffDir_check">
<property name="text">
<string>Save to a different directory</string>
</property>
</widget>
</item>
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_6"> <widget class="QLabel" name="label_6">
<property name="enabled"> <property name="enabled">
@ -199,7 +218,10 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="6" column="0" colspan="2"> </layout>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
@ -219,32 +241,7 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="saveDiffDir_check">
<property name="text">
<string>Save to a different directory</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Assign label:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboLabel">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
</layout> </layout>
</widget>
</item> </item>
<item> <item>
<widget class="Line" name="line_2"> <widget class="Line" name="line_2">
@ -279,6 +276,13 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>

Loading…
Cancel
Save