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