OSDN Git Service

Fix a bug in sorting rows
authornogu <nogu@users.sourceforge.jp>
Thu, 11 Feb 2010 02:47:00 +0000 (11:47 +0900)
committernogu <nogu@users.sourceforge.jp>
Thu, 11 Feb 2010 02:58:58 +0000 (11:58 +0900)
kita/src/boardview.cpp
kita/src/threadlistheaderview.cpp
kita/src/threadlistviewitem.cpp
kita/src/threadlistviewitem.h

index 371d63b..69b040d 100644 (file)
@@ -90,6 +90,7 @@ void BoardView::toggleShowOldLogs()
     loadBoard(m_boardUrl, false);
 }
 
+// used to sort rows
 enum {
     Thread_Old,
     Thread_Readed,
@@ -214,7 +215,8 @@ void BoardView::slotUpdateSubject(const KUrl& url)
     for (int i = 0, j = subjectList->rowCount(); i < j; i++) {
         if (subjectList->item(i, ColumnDatUrl)->text() == datUrl.prettyUrl()) {
 
-            switch (subjectList->item(i, ColumnMarkOrder)->text().toInt()) {
+            switch (subjectList->item(i, ColumnMark)->data(Qt::UserRole)
+                    .toInt()) {
             case Thread_Readed:
             case Thread_Read:
                 m_readNum--;
@@ -272,34 +274,29 @@ void BoardView::updateRow(int row, const KUrl& datUrl,
         ->setText(QString(" %1 ").arg(speed, 0, 'f', 2));
 
     /* set mark order */
-
+    QTableWidgetItem *item = subjectList->item(row, ColumnMark);
+    int orderValue;
     if (!id) { /* old thread */
-        subjectList->item(row, ColumnMarkOrder)
-            ->setText(QString::number(Thread_Old));
+        orderValue = Thread_Old;
     } else if (readNum > 0 && (resNum > readNum || resNum > viewPos)) {
         /* There are new responses. */
-        subjectList->item(row, ColumnMark)->setIcon(QIcon(SmallIcon("unread")));
+        item->setIcon(QIcon(SmallIcon("unread")));
         m_unreadNum++;
-        subjectList->item(row, ColumnMarkOrder)
-            ->setText(QString::number(Thread_HasUnread));
+        orderValue = Thread_HasUnread;
     } else if (readNum > 0) { /* Cache exists */
-        subjectList->item(row, ColumnMark)->setIcon(QIcon(SmallIcon("read")));
+        item->setIcon(QIcon(SmallIcon("read")));
         m_readNum++;
-        subjectList->item(row, ColumnMarkOrder)
-            ->setText(QString::number((viewPos > 1000)
-                    ? Thread_Readed : Thread_Read));
+        orderValue = (viewPos > 1000) ? Thread_Readed : Thread_Read;
     } else if (since.secsTo(current) < 3600 * GlobalConfig::markTime()) {
         /* new thread */
-        subjectList->item(row, ColumnMark)
-            ->setIcon(QIcon(SmallIcon("newthread")));
+        item->setIcon(QIcon(SmallIcon("newthread")));
         m_newNum++;
-        subjectList->item(row, ColumnMarkOrder)
-            ->setText(QString::number(Thread_New));
+        orderValue = Thread_New;
     } else { /* normal */
-        subjectList->item(row, ColumnMarkOrder)
-            ->setText(QString::number(Thread_Normal));
-        subjectList->item(row, ColumnMark)->setIcon(QIcon());
+        item->setIcon(QIcon());
+        orderValue = Thread_Normal;
     }
+    item->setData(Qt::UserRole, orderValue);
 
     // no effect: m_unreadNum, m_readNum, m_newNum, markOrder
     if (datManager.isMainThreadOpened() && resNum == readNum) {
index ce1cb07..fcd8134 100644 (file)
@@ -47,8 +47,6 @@ const struct ColumnAttribute ThreadListHeaderView::attribute[] = {
         "ColumnBoard", false },
     { I18N_NOOP2("@title:column", "Dat URL"), I18N_NOOP("DatURL"),
         "ColumnDatUrl", false },
-    { I18N_NOOP2("@title:column", "Mark Order"), I18N_NOOP("MarkOrder"),
-        "ColumnMarkOrder", false },
     { I18N_NOOP2("@title:column", "ID Order"), I18N_NOOP("IDOrder"),
         "ColumnIdOrder", false }
 };
@@ -66,7 +64,7 @@ void ThreadListHeaderView::contextMenuEvent(QContextMenuEvent *event)
 {
     KMenu popup;
     for (int i = ColumnBegin; i <= ColumnEnd; i++) {
-        if (i != ColumnSubject && i != ColumnMarkOrder && i != ColumnIdOrder) {
+        if (i != ColumnSubject && i != ColumnIdOrder) {
             KAction* action = new KAction(i18n(attribute[i].itemName), this);
             action->setCheckable(true);
             action->setChecked(!isSectionHidden(i));
index fdb429f..80a115a 100644 (file)
@@ -29,7 +29,7 @@ bool ThreadListViewItem::operator<(const QTableWidgetItem& other) const
     case ColumnId:
         return thisText.toInt() > otherText.toInt();
     case ColumnMark:
-        return QString::localeAwareCompare(thisText, otherText) > 0;
+        return data(Qt::UserRole).toInt() > other.data(Qt::UserRole).toInt();
     case ColumnSince:
         return QString::localeAwareCompare(thisText, otherText) > 0;
     case ColumnSpeed:
index 6a932b2..d6eeda5 100644 (file)
@@ -26,7 +26,6 @@ enum ThreadListCol {
     ColumnSpeed,
     ColumnBoard,
     ColumnDatUrl,
-    ColumnMarkOrder,
     ColumnIdOrder,
     ColumnEnd = ColumnIdOrder
 };