玉兔远程控制 0.1.0-bate8
载入中...
搜索中...
未找到
ParameterFilter.cpp
1#include <QLoggingCategory>
2#include "ParameterFilter.h"
3#include "DatabaseFilter.h"
4
5static Q_LOGGING_CATEGORY(log, "Client.Parameter.Filter")
6CParameterFilter::CParameterFilter(QObject *parent, const QString &szPrefix)
7 : CParameter{parent, szPrefix}
8 , m_pDatabase(nullptr)
9 , m_szSuffix(szPrefix)
10{}
11
12CParameterFilter::~CParameterFilter()
13{
14 if(m_pDatabase) {
15 delete m_pDatabase;
16 m_pDatabase = nullptr;
17 }
18}
19
20bool CParameterFilter::InitDatabase(CParameterDatabase *pDB)
21{
22 if(!pDB) return false;
23 Q_ASSERT(!m_pDatabase);
24 m_pDatabase = new CDatabaseFilter(m_szSuffix);
25 if(m_pDatabase) {
26 QString szConnectName = "connect_filter_" + m_szSuffix;
27 bool ok = m_pDatabase->OpenDatabase(pDB, szConnectName);
28 if(!ok) {
29 qCritical(log) << "Failed to open database:" << szConnectName;
30 return false;
31 }
32 }
33 return true;
34}
35
36bool CParameterFilter::InitDatabase(CDatabase *pDB)
37{
38 if(!pDB) return false;
39 Q_ASSERT(!m_pDatabase);
40 m_pDatabase = new CDatabaseFilter(m_szSuffix);
41 if(m_pDatabase) {
42 bool bRet = m_pDatabase->SetDatabase(pDB->GetDatabase(), pDB->GetParameter());
43 if(!bRet) return false;
44 }
45 return true;
46}
47
48bool CParameterFilter::contains(const QString &szKey)
49{
50 if(m_pDatabase)
51 return m_pDatabase->contains(szKey);
52
53 if(m_Key.contains(szKey))
54 return true;
55 return false;
56}
57
58int CParameterFilter::AddKey(const QString& szKey)
59{
60 if(m_pDatabase)
61 return m_pDatabase->AddKey(szKey);
62
63 if(contains(szKey))
64 return 0;
65 m_Key.insert(szKey);
66 SetModified(true);
67 return 0;
68}
69
70int CParameterFilter::RemoveKey(const QString& szKey)
71{
72 if(m_pDatabase)
73 return m_pDatabase->RemoveKey(szKey);
74
75 m_Key.remove(szKey);
76 return 0;
77}
78
79int CParameterFilter::Clear()
80{
81 if(m_pDatabase)
82 return m_pDatabase->Clear();
83
84 m_Key.clear();
85 return 0;
86}
87
88bool CParameterFilter::isEmpty()
89{
90 if(m_pDatabase)
91 return m_pDatabase->isEmpty();
92
93 return m_Key.isEmpty();
94}
95
96int CParameterFilter::OnProcess(std::function<int (const QString &)> cb, bool bErrExit)
97{
98 if(!cb) return -1;
99 if(m_pDatabase) {
100 return m_pDatabase->OnProcess(cb, bErrExit);
101 }
102 foreach(auto k, m_Key) {
103 int nRet = cb(k);
104 if(bErrExit && nRet)
105 return nRet;
106 }
107 return 0;
108}
109
110int CParameterFilter::OnLoad(QSettings &set)
111{
112 if(m_pDatabase) return 0;
113
114 QStringList s = set.value("Key").toStringList();
115 foreach(auto k, s) {
116 AddKey(k);
117 }
118 return 0;
119}
120
121int CParameterFilter::OnSave(QSettings &set)
122{
123 if(m_pDatabase) return 0;
124
125 QStringList s;
126 foreach (auto k, m_Key) {
127 s << k;
128 }
129 set.setValue("Key", s);
130 return 0;
131}
The CDatabaseFilter class
提供打开数据库和初始化数据库等接口
Definition Database.h:21
bool SetDatabase(const CDatabase *db)
Share an existing database
Definition Database.cpp:34
bool OpenDatabase(const CParameterDatabase *pPara=nullptr, const QString &szConnectName=QString())
Open a new database
Definition Database.cpp:69
参数接口
Definition Parameter.h:218
int SetModified(bool bModified=true)
在设置参数时,如果有修改,则调用。