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) : @@ -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() @@ -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() @@ -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 @@ -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; i<ui->listFeeds->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,15 +159,14 @@ bool AutomatedRssDownloader::isRssDownloaderEnabled() const @@ -148,15 +159,14 @@ 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<QListWidgetItem*> selection = ui->listRules->selectedItems();
if(selection.count() == 1) {
RssDownloadRule rule = getCurrentRule();
if(selection.count() == 1 && rule.isValid()) {
if(rule.isValid()) {
ui->lineContains->setText(rule.mustContain());
ui->lineNotContains->setText(rule.mustNotContain());
ui->saveDiffDir_check->setChecked(!rule.savePath().isEmpty());
@ -167,23 +177,27 @@ void AutomatedRssDownloader::updateRuleDefinitionBox(QListWidgetItem* current, Q @@ -167,23 +177,27 @@ void AutomatedRssDownloader::updateRuleDefinitionBox(QListWidgetItem* current, Q
} else {
ui->comboLabel->setCurrentIndex(ui->comboLabel->findText(rule.label()));
}
} else {
// New rule
clearRuleDefinitionBox();
ui->lineContains->setText(selection.first()->text());
}
// Enable
ui->ruleDefBox->setEnabled(true);
} else {
// Clear
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();
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
@ -203,6 +217,12 @@ void AutomatedRssDownloader::initLabelCombobox() @@ -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() @@ -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: @@ -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);

70
src/rss/automatedrssdownloader.ui

@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
<property name="windowTitle">
<string>Automated RSS Downloader</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QCheckBox" name="checkEnableDownloader">
<property name="font">
@ -121,12 +121,7 @@ @@ -121,12 +121,7 @@
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QGroupBox" name="ruleDefBox">
<property name="title">
@ -165,6 +160,30 @@ @@ -165,6 +160,30 @@
<item row="1" column="1">
<widget class="QLineEdit" name="lineNotContains"/>
</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">
<widget class="QLabel" name="label_6">
<property name="enabled">
@ -199,7 +218,10 @@ @@ -199,7 +218,10 @@
</item>
</layout>
</item>
<item row="6" column="0" colspan="2">
</layout>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_2">
@ -219,32 +241,7 @@ @@ -219,32 +241,7 @@
</item>
</layout>
</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>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
@ -279,6 +276,13 @@ @@ -279,6 +276,13 @@
</item>
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>

Loading…
Cancel
Save