From: nogu Date: Thu, 11 Feb 2010 02:47:00 +0000 (+0900) Subject: Fix a bug in sorting rows X-Git-Url: http://git.osdn.net/view?p=kita%2Fkita.git;a=commitdiff_plain;h=787d10e70fb60709ca2c3c51a6d0037ae5210702 Fix a bug in sorting rows --- diff --git a/kita/src/boardview.cpp b/kita/src/boardview.cpp index 371d63b..69b040d 100644 --- a/kita/src/boardview.cpp +++ b/kita/src/boardview.cpp @@ -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) { diff --git a/kita/src/threadlistheaderview.cpp b/kita/src/threadlistheaderview.cpp index ce1cb07..fcd8134 100644 --- a/kita/src/threadlistheaderview.cpp +++ b/kita/src/threadlistheaderview.cpp @@ -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)); diff --git a/kita/src/threadlistviewitem.cpp b/kita/src/threadlistviewitem.cpp index fdb429f..80a115a 100644 --- a/kita/src/threadlistviewitem.cpp +++ b/kita/src/threadlistviewitem.cpp @@ -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: diff --git a/kita/src/threadlistviewitem.h b/kita/src/threadlistviewitem.h index 6a932b2..d6eeda5 100644 --- a/kita/src/threadlistviewitem.h +++ b/kita/src/threadlistviewitem.h @@ -26,7 +26,6 @@ enum ThreadListCol { ColumnSpeed, ColumnBoard, ColumnDatUrl, - ColumnMarkOrder, ColumnIdOrder, ColumnEnd = ColumnIdOrder };