]> Some of my projects - localmylist.git/commitdiff
Enable voting for episodes in localmylist-management.
authorAPTX <marek321@gmail.com>
Tue, 23 Apr 2013 23:49:05 +0000 (01:49 +0200)
committerAPTX <marek321@gmail.com>
Tue, 23 Apr 2013 23:49:05 +0000 (01:49 +0200)
localmylist/mylistnode.cpp
localmylist/mylistnode.h

index 00ebd45f06b1fd18ab9cb940605744ad96169b0e..27993da268614f64b61d790ad5d1bfbc6613e62d 100644 (file)
@@ -594,6 +594,11 @@ MyListEpisodeNode::~MyListEpisodeNode()
        model->episodeSet.erase(model->episodeSet.s_iterator_to(episodeData));
 }
 
+Qt::ItemFlags MyListEpisodeNode::flags(const QModelIndex &index) const
+{
+       return MyListNode::flags(index) | (index.column() == 3 ? Qt::ItemIsEditable : 0);
+}
+
 QVariant MyListEpisodeNode::data(int column, int role) const
 {
        switch (role)
@@ -618,6 +623,7 @@ QVariant MyListEpisodeNode::data(int column, int role) const
                                                return QObject::tr("No");
                                        return QObject::tr("Yes, on %1").arg(episodeData.watchedDate.toString());
                        }
+               break;
                case Qt::ToolTipRole:
                        switch (column)
                        {
@@ -630,12 +636,47 @@ QVariant MyListEpisodeNode::data(int column, int role) const
                                        if (!episodeData.data.titleKanji.isEmpty())
                                                return episodeData.data.titleKanji;
                        }
+               break;
+               case Qt::EditRole:
+                       switch (column)
+                       {
+                               case 3:
+                                       return episodeData.data.myVote;
+                       }
+               break;
        }
 
-
        return QVariant();
 }
 
+bool MyListEpisodeNode::setData(int column, const QVariant &data, int role)
+{
+       if (role != Qt::EditRole)
+               return false;
+
+       switch (column)
+       {
+               case 3:
+               {
+                       double vote = data.toDouble();
+
+                       if (qFuzzyCompare(episodeData.data.myVote, vote))
+                               return false;
+
+                       if (vote < 1.0 || vote > 10.0)
+                               vote = 0;
+
+                       episodeData.data.myVote = vote;
+
+                       MyList::instance()->voteEpisode(episodeData.data.aid, episodeData.data.epno,
+                                                                                       episodeData.data.type, vote);
+
+                       return true;
+               }
+       }
+       return false;
+}
+
 void MyListEpisodeNode::fetchMore()
 {
        qDebug() << "fetching some more for eid" << id();
index 4cca60f7be442f471f327c12b52a97b567b4b2b7..c51f2036f55428b99222732db18fd346db12c60e 100644 (file)
@@ -126,7 +126,10 @@ public:
        MyListEpisodeNode(MyListModel *model, const EpisodeData &data, int totalRowCount, MyListNode *parent);
        ~MyListEpisodeNode();
 
+       Qt::ItemFlags flags(const QModelIndex &index) const;
+
        QVariant data(int column, int role) const;
+       bool setData(int column, const QVariant &data, int role);
        void fetchMore();
        void fetchComplete();
        int id() const;