玉兔远程控制 0.1.0-bate6
载入中...
搜索中...
未找到
RecentModel.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QFileInfo>
4#include <QLoggingCategory>
5#include "RecentModel.h"
6#include "ParameterApp.h"
7
8static Q_LOGGING_CATEGORY(log, "App.Recent.Model")
9CRecentModel::CRecentModel(CParameterApp *pPara, CRecentDatabase *pDb, QObject *parent)
10 : QAbstractTableModel(parent)
11 , m_pParameterApp(pPara)
12 , m_pDatabase(pDb)
13{
14}
15
16Qt::ItemFlags CRecentModel::flags(const QModelIndex &index) const
17{
18 auto f = QAbstractTableModel::flags(index);
19 if (!index.isValid())
20 return f;
21
22 if(index.row() >= m_Items.count())
23 return f;
24
25 auto item = m_Items.at(index.row());
26 QFileInfo fi(item.szFile);
27 if(!item.szFile.isEmpty() && fi.exists())
28 f |= Qt::ItemIsEnabled;
29 else
30 f &= ~Qt::ItemIsEnabled;
31 return f;
32}
33
34QVariant CRecentModel::headerData(int section, Qt::Orientation orientation, int role) const
35{
36 if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
37 switch (section) {
38 case Name: return tr("Name");
39 case Protocol: return tr("Protocol");
40 case Type: return tr("Type");
41 case Time: return tr("Time");
42 case ID: return tr("ID");
43 case File: return tr("File");
44 }
45 }
46
47 return QVariant();
48}
49
50int CRecentModel::rowCount(const QModelIndex &parent) const
51{
52 if (parent.isValid())
53 return 0;
54
55 return m_Items.count();
56}
57
58int CRecentModel::columnCount(const QModelIndex &parent) const
59{
60 return ColumnCount;
61}
62
63QVariant CRecentModel::data(const QModelIndex &index, int role) const
64{
65 if (!index.isValid())
66 return QVariant();
67
68 if(index.row() >= m_Items.count())
69 return QVariant();
70
71 auto item = m_Items.at(index.row());
72
73 switch (role) {
74 case Qt::DisplayRole:
75 switch (index.column()) {
76 case Name:
77 return item.szName;
78 case Protocol:
79 return item.szProtocol;
80 case Type:
81 return item.szType;
82 case Time:
83 return item.time.toString(QLocale::system().dateTimeFormat());
84 case ID:
85 return item.szOperateId;
86 case File:
87 return item.szFile;
88 }
89 break;
90
91 case Qt::DecorationRole:
92 if (index.column() == Name) {
93 return item.icon;
94 }
95 break;
96
97 case Qt::ToolTipRole:
98 return item.szDescription;
99 }
100
101 return QVariant();
102}
103
104bool CRecentModel::removeRows(int row, int count, const QModelIndex &parent)
105{
106 if (row < 0 || row + count > m_Items.count())
107 return false;
108
109 if(!m_pDatabase) {
110 qCritical(log) << "The m_pDatabase is nullptr";
111 return false;
112 }
113
114 for (int i = row + count - 1; i >= row; i--) {
115 m_pDatabase->DeleteRecent(m_Items.at(i).id);
116 m_Items.removeAt(i);
117 }
118
119 return true;
120}
121
122void CRecentModel::refresh(int limit)
123{
124 if(!m_pDatabase) {
125 m_pDatabase = new CRecentDatabase(this);
126 if(!m_pDatabase->OpenDatabase(m_pParameterApp->m_pDatabase))
127 return;
128 }
129 if(!m_pDatabase->IsOpen())
130 return;
131
132 beginResetModel();
133 m_Items.clear();
134 auto items = m_pDatabase->GetRecents(limit, 0);
135 foreach(auto it, items) {
136 m_Items.append(it);
137 }
138 endResetModel();
139}
140
141CRecentDatabase::RecentItem CRecentModel::getItem(const QModelIndex &index)
142{
144 if (!index.isValid())
145 return item;
146
147 if(index.row() >= m_Items.count())
148 return item;
149
150 item = m_Items.at(index.row());
151 return item;
152}
153
154bool CRecentModel::addItem(const CRecentDatabase::RecentItem &item)
155{
156 if(!m_pDatabase) return false;
157 return m_pDatabase->AddRecent(item);
158}
virtual bool OpenDatabase(CParameterDatabase *pPara=nullptr)
OpenDatabase
Definition Database.cpp:45