return rootItem->hasChildren();
}
-MyListModel::NodeType MyListModel::type(const QModelIndex &idx) const
-{
- if (!idx.isValid())
- return None;
- return NodeType(static_cast<MyListNode *>(idx.internalPointer())->type());
-}
-
-int MyListModel::id(const QModelIndex &idx) const
+MyListNode *MyListModel::node(const QModelIndex &idx) const
{
if (!idx.isValid())
return 0;
- return static_cast<MyListNode *>(idx.internalPointer())->id();
+ return static_cast<MyListNode *>(idx.internalPointer());
}
void MyListModel::reload()
signals:
public slots:
- NodeType type(const QModelIndex &idx) const;
- int id(const QModelIndex &idx) const;
+ MyListNode *node(const QModelIndex &idx) const;
void reload();
private:
#include "database.h"
#include "settings.h"
#include "mylistmodel.h"
+#include "mylistnode.h"
#include "mylistfiltermodel.h"
#include "unknownfilelookuptask.h"
#include "addrelatedepisodestask.h"
void MainWindow::on_myListView_openFileRequested(const QModelIndex &index)
{
- MyListModel::NodeType type = myListModel->type(index);
- int id = myListModel->id(index);
+ MyListNode *node = myListFilterModel->node(index);
- if (!id)
+ if (!node->id())
return;
OpenFileData data;
- if (type == MyListModel::Anime)
+ if (node->type() == MyListNode::Anime)
{
- data = MyList::instance()->database()->firstUnwatchedByAid(id);
+ data = MyList::instance()->database()->firstUnwatchedByAid(node->id());
}
- else if (type == MyListModel::Episode)
+ else if (node->type() == MyListNode::Episode)
{
- data = MyList::instance()->database()->openFileByEid(id);
+ data = MyList::instance()->database()->openFileByEid(node->id());
}
- else if (type == MyListModel::File)
+ else if (node->type() == MyListNode::File)
{
- data = MyList::instance()->database()->openFile(id);
+ data = MyList::instance()->database()->openFile(node->id());
}
else
{
void MainWindow::on_myListView_renameFilesRequested(const QModelIndex &index)
{
- MyListModel::NodeType type = myListModel->type(index);
- int id = myListModel->id(index);
+ MyListNode *node = myListFilterModel->node(index);
- if (!id)
+ if (!node->id())
return;
QString path;
QSqlQuery q(MyList::instance()->database()->connection());
QChar typeLetter;
- if (type == MyListModel::Anime)
+ if (node->type() == MyListNode::Anime)
{
q.prepare(
"UPDATE file_location fl SET renamed = NULL, failed_rename = false "
" FROM file f "
" WHERE f.fid = fl.fid AND f.aid = :aid");
- q.bindValue(":aid", id);
+ q.bindValue(":aid", node->id());
typeLetter = 'a';
}
- else if (type == MyListModel::Episode)
+ else if (node->type() == MyListNode::Episode)
{
q.prepare(
"UPDATE file_location fl SET renamed = NULL, failed_rename = false "
" FROM file f "
" WHERE f.fid = fl.fid AND f.eid = :eid");
- q.bindValue(":eid", id);
+ q.bindValue(":eid", node->id());
typeLetter = 'e';
}
- else if (type == MyListModel::File)
+ else if (node->type() == MyListNode::File)
{
q.prepare(
"UPDATE file_location fl SET renamed = NULL, failed_rename = false "
" WHERE fl.fid = :fid");
- q.bindValue(":fid", id);
+ q.bindValue(":fid", node->id());
typeLetter = 'f';
}
return;
}
- ui->statusBar->showMessage(tr("Files for %1%2 scheduled for rename").arg(typeLetter).arg(id));
+ ui->statusBar->showMessage(tr("Files for %1%2 scheduled for rename").arg(typeLetter).arg(node->id()));
}
void MainWindow::on_myListView_dataRequested(const QModelIndex &index)
{
- MyListModel::NodeType type = myListModel->type(index);
- int id = myListModel->id(index);
+ MyListNode *node = myListFilterModel->node(index);
+
+ if (!node->id())
+ return;
PendingRequest r;
- switch (type)
+ switch (node->type())
{
- case MyListModel::Anime:
- r.aid = id;
+ case MyListNode::Anime:
+ r.aid = node->id();
break;
- case MyListModel::Episode:
- r.eid = id;
+ case MyListNode::Episode:
+ r.eid = node->id();
break;
- case MyListModel::File:
- r.fid = id;
+ case MyListNode::File:
+ r.fid = node->id();
break;
default:
return;
#include "mylistfiltermodel.h"
+#include "mylistmodel.h"
+#include "mylistnode.h"
+
#include <QDebug>
MyListFilterModel::MyListFilterModel(QObject *parent) :
setFilterCaseSensitivity(Qt::CaseInsensitive);
}
+LocalMyList::MyListModel *MyListFilterModel::myListModel() const
+{
+ return qobject_cast<LocalMyList::MyListModel *>(sourceModel());
+}
+
+LocalMyList::MyListNode *MyListFilterModel::node(const QModelIndex &idx) const
+{
+ if (!idx.isValid())
+ return 0;
+
+ return myListModel()->node(mapToSource(idx));
+}
+
bool MyListFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
if (source_parent.isValid())
#include <QSortFilterProxyModel>
+namespace LocalMyList {
+ class MyListModel;
+ class MyListNode;
+}
+
class MyListFilterModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
explicit MyListFilterModel(QObject *parent = 0);
+public slots:
+ LocalMyList::MyListModel *myListModel() const;
+ LocalMyList::MyListNode *node(const QModelIndex &idx) const;
+
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
};
#include "mylist.h"
#include "mylistmodel.h"
+#include "mylistnode.h"
+#include "mylistfiltermodel.h"
#include <QHeaderView>
#include <QMenu>
connect(requestDataAction, SIGNAL(triggered()), this, SLOT(requestData()));
}
-LocalMyList::MyListModel *MyListView::myListModel() const
+MyListFilterModel *MyListView::myListFilterModel() const
{
- return qobject_cast<LocalMyList::MyListModel *>(model());
+ return qobject_cast<MyListFilterModel *>(model());
}
void MyListView::showCustomContextMenu(const QPoint &pos)
if (!idx.isValid())
return;
- MyListModel::NodeType type = myListModel()->type(idx);
- int id = myListModel()->id(idx);
+ MyListNode *node = myListFilterModel()->node(idx);
QList<QAction *> actions;
- switch (type)
+ switch (node->type())
{
- case MyListModel::Anime:
- aniDBLinkAction->setText(tr("Open AniDB Page (%1%2)").arg('a').arg(id));
+ case MyListNode::Anime:
+ aniDBLinkAction->setText(tr("Open AniDB Page (%1%2)").arg('a').arg(node->id()));
actions << aniDBLinkAction
<< openNextAction
<< renameFilesAction
<< requestDataAction;
break;
- case MyListModel::Episode:
- aniDBLinkAction->setText(tr("Open AniDB Page (%1%2)").arg('e').arg(id));
+ case MyListNode::Episode:
+ aniDBLinkAction->setText(tr("Open AniDB Page (%1%2)").arg('e').arg(node->id()));
actions << aniDBLinkAction
<< openAction
<< renameFilesAction
<< requestDataAction;
break;
- case MyListModel::File:
- aniDBLinkAction->setText(tr("Open AniDB Page (%1%2)").arg('f').arg(id));
+ case MyListNode::File:
+ aniDBLinkAction->setText(tr("Open AniDB Page (%1%2)").arg('f').arg(node->id()));
actions << aniDBLinkAction
<< openAction
<< markWatchedAction
<< renameFilesAction
<< requestDataAction;
break;
- case MyListModel::FileLocation:
- aniDBLinkAction->setText(tr("Open AniDB Page (%1%2)").arg('f').arg(id));
+ case MyListNode::FileLocation:
+ aniDBLinkAction->setText(tr("Open AniDB Page (%1%2)").arg('f').arg(node->id()));
actions << aniDBLinkAction
<< markWatchedAction
<< renameTestAction
<< renameFilesAction;
break;
+ default:
+ break;
}
if(actions.isEmpty())
void MyListView::markWatched()
{
- int id = myListModel()->id(customContextMenuIndex);
+ using namespace LocalMyList;
+
+ MyListNode *node = myListFilterModel()->node(customContextMenuIndex);
- LocalMyList::instance()->markWatched(id);
+ MyList::instance()->markWatched(node->id());
}
void MyListView::openAnidbPage()
using namespace LocalMyList;
QString aniDBUrlBase = "http://anidb.net/%1%2";
- int id = myListModel()->id(customContextMenuIndex);
- MyListModel::NodeType type = myListModel()->type(customContextMenuIndex);
+ MyListNode *node = myListFilterModel()->node(customContextMenuIndex);
- switch (type)
+ switch (node->type())
{
- case MyListModel::Anime:
- QDesktopServices::openUrl(QUrl(aniDBUrlBase.arg('a').arg(id)));
+ case MyListNode::Anime:
+ QDesktopServices::openUrl(QUrl(aniDBUrlBase.arg('a').arg(node->id())));
break;
- case MyListModel::Episode:
- QDesktopServices::openUrl(QUrl(aniDBUrlBase.arg('e').arg(id)));
+ case MyListNode::Episode:
+ QDesktopServices::openUrl(QUrl(aniDBUrlBase.arg('e').arg(node->id())));
break;
- case MyListModel::File:
- case MyListModel::FileLocation:
- QDesktopServices::openUrl(QUrl(aniDBUrlBase.arg('f').arg(id)));
+ case MyListNode::File:
+ case MyListNode::FileLocation:
+ QDesktopServices::openUrl(QUrl(aniDBUrlBase.arg('f').arg(node->id())));
break;
}
}
void MyListView::renameTest()
{
- int id = myListModel()->id(customContextMenuIndex);
+ int id = myListFilterModel()->node(customContextMenuIndex)->id();
if (id)
emit renameTest(id);
}
#include <QTreeView>
#include <QModelIndex>
-namespace LocalMyList {
- class MyListModel;
-}
+class MyListFilterModel;
class MyListView : public QTreeView
{
void renameTest(int fid);
private slots:
- LocalMyList::MyListModel *myListModel() const;
+ MyListFilterModel *myListFilterModel() const;
void showCustomContextMenu(const QPoint &pos);
void requestOpenFile();
void markWatched();