/
chatmessagemodel.cpp
68 lines (54 loc) · 1.86 KB
/
chatmessagemodel.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "chatmessagemodel.h"
#include "chatmessageitem.h"
ChatMessageSortFilterProxyModel::ChatMessageSortFilterProxyModel(QObject *parent) :
QSortFilterProxyModel(parent)
{
setSortLocaleAware(true);
setDynamicSortFilter(true);
setSortCaseSensitivity(Qt::CaseInsensitive);
}
void ChatMessageSortFilterProxyModel::setFilterString(const QString &filterString)
{
m_filterString = filterString;
invalidate();
}
bool ChatMessageSortFilterProxyModel::filterAcceptsRow(int AModelRow, const QModelIndex &AModelParent) const
{
if(m_filterString.isEmpty())
return true;
QModelIndex index = sourceModel()->index(AModelRow,0,AModelParent);
if (index.isValid())
{
// if(index.data(BasicDef::OMDR_TYPE).toInt() != OrgItemType_Contact && index.data(BasicDef::OMDR_TYPE).toInt() != OrgItemType_Org_Contact
// && index.data(BasicDef::OMDR_TYPE).toInt() != OrgItemType_Org_Roster)
// return false;
// QString name = index.data(Qt::DisplayRole).toString();
// if(name.contains(m_filterName, Qt::CaseInsensitive))
// return true;
// return false;
}
return true;
}
bool ChatMessageSortFilterProxyModel::lessThan(const QModelIndex &ALeft, const QModelIndex &ARight) const
{
qint64 lStamp = ALeft.data(ChatMessageItem::DATA_ROLE_STAMP).toInt();
qint64 rStamp = ARight.data(ChatMessageItem::DATA_ROLE_STAMP).toInt();
return lStamp < rStamp;
//return QSortFilterProxyModel::lessThan(ALeft, ARight);
}
ChatMessageModel::ChatMessageModel(QObject *parent) :
QStandardItemModel(parent)
{
}
void ChatMessageModel::appendChatMessage(const Message &msg)
{
ChatMessageItem *item = new ChatMessageItem(msg);
appendRow(item);
}
void ChatMessageModel::appendChatMessages(const QList<Message> &msgs)
{
foreach (auto msg, msgs)
{
appendChatMessage(msg);
}
}