forked from BearWare/TeamTalk5
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfilesmodel.cpp
146 lines (132 loc) · 4.35 KB
/
filesmodel.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*
* Copyright (c) 2005-2018, BearWare.dk
*
* Contact Information:
*
* Bjoern D. Rasmussen
* Kirketoften 5
* DK-8260 Viby J
* Denmark
* Email: [email protected]
* Phone: +45 20 20 54 59
* Web: http://www.bearware.dk
*
* This source code is part of the TeamTalk SDK owned by
* BearWare.dk. Use of this file, or its compiled unit, requires a
* TeamTalk SDK License Key issued by BearWare.dk.
*
* The TeamTalk SDK License Agreement along with its Terms and
* Conditions are outlined in the file License.txt included with the
* TeamTalk SDK distribution.
*
*/
#include "filesmodel.h"
extern TTInstance* ttInst;
FilesModel::FilesModel(QObject* parent)
: QAbstractItemModel(parent)
, m_channelid(0)
{
}
QVariant FilesModel::headerData ( int section, Qt::Orientation orientation, int role /*= Qt::DisplayRole */) const
{
switch(role)
{
case Qt::DisplayRole :
if(orientation == Qt::Horizontal)
{
switch(section)
{
case COLUMN_INDEX_NAME: return tr("Name");
case COLUMN_INDEX_SIZE: return tr("Size");
case COLUMN_INDEX_OWNER: return tr("Owner");
case COLUMN_INDEX_UPLOADED : return tr("Date");
}
}
break;
case Qt::TextAlignmentRole :
if(orientation == Qt::Horizontal)
{
switch(section)
{
case COLUMN_INDEX_NAME:
case COLUMN_INDEX_OWNER:
return Qt::AlignLeft;
default:
return Qt::AlignRight;
}
}
}
return QVariant();
}
int FilesModel::columnCount ( const QModelIndex & /*parent = QModelIndex()*/ ) const
{
return COLUMN_COUNT_FILESMODEL;
}
QVariant FilesModel::data ( const QModelIndex & index, int role /*= Qt::DisplayRole*/ ) const
{
Q_ASSERT(index.isValid());
switch(role)
{
case Qt::DisplayRole :
Q_ASSERT(index.row() < m_files.size());
switch(index.column())
{
case COLUMN_INDEX_NAME :
return _Q(m_files[index.row()].szFileName);
case COLUMN_INDEX_SIZE :
{
QString result;
if(m_files[index.row()].nFileSize>=1024*1024)
result = QString("%1 M").arg(m_files[index.row()].nFileSize/(1024*1024));
else if(m_files[index.row()].nFileSize>=1024)
result = QString("%1 K").arg(m_files[index.row()].nFileSize/1024);
else
result = QString("%1").arg(m_files[index.row()].nFileSize);
return result;
}
case COLUMN_INDEX_OWNER :
return _Q(m_files[index.row()].szUsername);
case COLUMN_INDEX_UPLOADED :
return _Q(m_files[index.row()].szUploadTime);
}
break;
case Qt::AccessibleTextRole :
{
QString result;
if(m_files[index.row()].nFileSize>=1024*1024)
result = QString("%1 M").arg(m_files[index.row()].nFileSize/(1024*1024));
else if(m_files[index.row()].nFileSize>=1024)
result = QString("%1 K").arg(m_files[index.row()].nFileSize/1024);
else
result = QString("%1").arg(m_files[index.row()].nFileSize);
return QString(tr("Name: %1, Size: %2, Owner: %3, Date: %4").arg(_Q(m_files[index.row()].szFileName)).arg(result).arg(_Q(m_files[index.row()].szUsername)).arg(_Q(m_files[index.row()].szUploadTime)));
}
break;
}
return QVariant();
}
QModelIndex FilesModel::index ( int row, int column, const QModelIndex & parent /*= QModelIndex()*/ ) const
{
if(!parent.isValid() && row<m_files.size())
return createIndex(row, column, (int)m_files[row].nFileID);
return QModelIndex();
}
QModelIndex FilesModel::parent ( const QModelIndex & /*index */) const
{
return QModelIndex();
}
int FilesModel::rowCount ( const QModelIndex & /*parent = QModelIndex()*/ ) const
{
return m_files.size();
}
void FilesModel::slotChannelUpdated(int channelid)
{
this->beginResetModel();
int count = 0;
TT_GetChannelFiles(ttInst, channelid, nullptr, &count);
m_files.resize(count);
if(count)
TT_GetChannelFiles(ttInst, channelid, &m_files[0], &count);
m_channelid = channelid;
this->endResetModel();
}