mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-20 05:13:30 -07:00
- Major rewrite of rss grouping code because I did not like my first approach. It is not complete yet but it is far more clean and stable
This commit is contained in:
parent
725700420c
commit
48b14d1066
6 changed files with 251 additions and 288 deletions
|
@ -6,44 +6,83 @@
|
|||
#include <QDropEvent>
|
||||
#include <QDragMoveEvent>
|
||||
#include <QStringList>
|
||||
#include <QHash>
|
||||
#include <QUrl>
|
||||
#include "rss.h"
|
||||
|
||||
class FeedList : public QTreeWidget {
|
||||
|
||||
private:
|
||||
RssManager *rssmanager;
|
||||
QHash<QTreeWidgetItem*, RssFile*> mapping;
|
||||
QHash<QString, QTreeWidgetItem*> feeds_items;
|
||||
QTreeWidgetItem* current_feed;
|
||||
|
||||
public:
|
||||
FeedList(QWidget *parent, RssManager *rssmanager): QTreeWidget(parent), rssmanager(rssmanager) {
|
||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
setDragDropMode(QAbstractItemView::InternalMove);
|
||||
setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
setColumnCount(3);
|
||||
setColumnCount(1);
|
||||
QTreeWidgetItem *___qtreewidgetitem = headerItem();
|
||||
___qtreewidgetitem->setText(2, QApplication::translate("RSS", "type", 0, QApplication::UnicodeUTF8));
|
||||
___qtreewidgetitem->setText(1, QApplication::translate("RSS", "url", 0, QApplication::UnicodeUTF8));
|
||||
___qtreewidgetitem->setText(0, QApplication::translate("RSS", "RSS feeds", 0, QApplication::UnicodeUTF8));
|
||||
// Hide second column (url) and third column (type)
|
||||
hideColumn(1);
|
||||
hideColumn(2);
|
||||
connect(this, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateCurrentFeed(QTreeWidgetItem*)));
|
||||
}
|
||||
|
||||
QStringList getItemPath(QTreeWidgetItem *item) const {
|
||||
QStringList path;
|
||||
if(item) {
|
||||
if(item->parent()) {
|
||||
path = getItemPath(item->parent());
|
||||
}
|
||||
Q_ASSERT(!item->text(1).isEmpty());
|
||||
path << item->text(1);
|
||||
}
|
||||
return path;
|
||||
void itemAdded(QTreeWidgetItem *item, RssFile* file) {
|
||||
mapping[item] = file;
|
||||
if(file->getType() == RssFile::STREAM)
|
||||
feeds_items[file->getID()] = item;
|
||||
}
|
||||
|
||||
void itemRemoved(QTreeWidgetItem *item) {
|
||||
RssFile* file = mapping.take(item);
|
||||
if(file->getType() == RssFile::STREAM)
|
||||
feeds_items.remove(file->getID());
|
||||
}
|
||||
|
||||
bool hasFeed(QString url) {
|
||||
return feeds_items.contains(QUrl(url).toString());
|
||||
}
|
||||
|
||||
RssFile* getRSSItem(QTreeWidgetItem *item) {
|
||||
return mapping[item];
|
||||
}
|
||||
|
||||
RssFile* getCurrentRSSItem() {
|
||||
return mapping[current_feed];
|
||||
}
|
||||
|
||||
RssFile::FileType getItemType(QTreeWidgetItem *item) {
|
||||
return mapping[item]->getType();
|
||||
}
|
||||
|
||||
QString getItemID(QTreeWidgetItem *item) {
|
||||
return mapping[item]->getID();
|
||||
}
|
||||
|
||||
QTreeWidgetItem* getTreeItemFromUrl(QString url) const{
|
||||
return feeds_items[url];
|
||||
}
|
||||
|
||||
QTreeWidgetItem* currentItem() const {
|
||||
return current_feed;
|
||||
}
|
||||
|
||||
QTreeWidgetItem* currentFeed() const {
|
||||
return current_feed;
|
||||
}
|
||||
|
||||
protected slots:
|
||||
void updateCurrentFeed(QTreeWidgetItem* new_item) {
|
||||
if(getItemType(new_item) == RssFile::STREAM)
|
||||
current_feed = new_item;
|
||||
}
|
||||
|
||||
protected:
|
||||
void dragMoveEvent(QDragMoveEvent * event) {
|
||||
QTreeWidgetItem *item = itemAt(event->pos());
|
||||
if(item && rssmanager->getFile(getItemPath(item))->getType() != RssFile::FOLDER)
|
||||
if(item && getItemType(item) != RssFile::FOLDER)
|
||||
event->ignore();
|
||||
else {
|
||||
QTreeWidget::dragMoveEvent(event);
|
||||
|
@ -52,19 +91,20 @@ protected:
|
|||
|
||||
void dropEvent(QDropEvent *event) {
|
||||
qDebug("dropEvent");
|
||||
QTreeWidgetItem *dest_item = itemAt(event->pos());
|
||||
QStringList dest_folder_path = getItemPath(dest_item);
|
||||
QTreeWidgetItem *dest_folder_item = itemAt(event->pos());
|
||||
RssFolder *dest_folder;
|
||||
if(dest_folder_item)
|
||||
dest_folder = (RssFolder*)getRSSItem(dest_folder_item);
|
||||
else
|
||||
dest_folder = rssmanager;
|
||||
QList<QTreeWidgetItem *> src_items = selectedItems();
|
||||
foreach(QTreeWidgetItem *src_item, src_items) {
|
||||
QStringList src_path = getItemPath(src_item);
|
||||
QStringList dest_path = dest_folder_path;
|
||||
dest_path << src_item->text(1);
|
||||
qDebug("Moving file %s to %s", src_path.join("\\").toLocal8Bit().data(), dest_path.join("\\").toLocal8Bit().data());
|
||||
rssmanager->moveFile(src_path, dest_path);
|
||||
RssFile *file = getRSSItem(src_item);
|
||||
rssmanager->moveFile(file, dest_folder);
|
||||
}
|
||||
QTreeWidget::dropEvent (event);
|
||||
if(dest_item)
|
||||
dest_item->setExpanded(true);
|
||||
QTreeWidget::dropEvent(event);
|
||||
if(dest_folder_item)
|
||||
dest_folder_item->setExpanded(true);
|
||||
}
|
||||
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue