fixed next/prev item and next unread selection

This commit is contained in:
csoler 2018-11-26 22:48:47 +01:00
parent 3a76f25152
commit b179cb5796
No known key found for this signature in database
GPG Key ID: 7BCA522266C0804C
3 changed files with 23 additions and 5 deletions

View File

@ -281,6 +281,10 @@ QVariant RsGxsForumModel::data(const QModelIndex &index, int role) const
return QVariant(font);
}
if(role == UnreadChildrenRole)
return bool(fmpe.mPostFlags & ForumModelPostEntry::FLAG_POST_HAS_UNREAD_CHILDREN);
#ifdef DEBUG_FORUMMODEL
std::cerr << " [ok]" << std::endl;
#endif

View File

@ -77,6 +77,7 @@ public:
ThreadPinnedRole = Qt::UserRole+2,
MissingRole = Qt::UserRole+3,
StatusRole = Qt::UserRole+4,
UnreadChildrenRole = Qt::UserRole+5,
};
QModelIndex root() const{ return createIndex(0,0,(void*)NULL) ;}

View File

@ -2001,6 +2001,7 @@ void GxsForumThreadWidget::previousMessage()
if (prevItem.isValid()) {
ui->threadTreeWidget->setCurrentIndex(prevItem);
ui->threadTreeWidget->setFocus();
changedThread(prevItem);
}
}
ui->previousButton->setEnabled(index-1 > 0);
@ -2027,6 +2028,7 @@ void GxsForumThreadWidget::nextMessage()
if (nextItem.isValid()) {
ui->threadTreeWidget->setCurrentIndex(nextItem);
ui->threadTreeWidget->setFocus();
changedThread(nextItem);
}
}
ui->previousButton->setEnabled(true);
@ -2049,10 +2051,20 @@ void GxsForumThreadWidget::downloadAllFiles()
void GxsForumThreadWidget::nextUnreadMessage()
{
QModelIndex index = mThreadModel->getNextIndex(getCurrentIndex(),true);
QModelIndex index = getCurrentIndex();
do
{
if(index.data(RsGxsForumModel::UnreadChildrenRole).toBool())
ui->threadTreeWidget->expand(index);
index = ui->threadTreeWidget->indexBelow(index);
}
while(index.isValid() && !IS_MSG_UNREAD(index.sibling(index.row(),RsGxsForumModel::COLUMN_THREAD_DATA).data(RsGxsForumModel::StatusRole).toUInt()));
ui->threadTreeWidget->setCurrentIndex(index);
ui->threadTreeWidget->setFocus();
changedThread(index);
}
#ifdef TO_REMOVE
@ -2255,6 +2267,7 @@ bool GxsForumThreadWidget::navigate(const RsGxsMessageId &msgId)
ui->threadTreeWidget->setCurrentIndex(index);
ui->threadTreeWidget->setFocus();
changedThread(index);
return true;
}