Skip to content

Commit cd46521

Browse files
committed
插件ITrafficMonitor接口新增获取字符串资源的接口
1 parent 5e26ca4 commit cd46521

File tree

7 files changed

+107
-24
lines changed

7 files changed

+107
-24
lines changed

PluginDemo/PluginDemo.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,14 @@ void CPluginDemo::OnExtenedInfo(ExtendedInfoIndex index, const wchar_t* data)
101101
}
102102
}
103103

104+
void CPluginDemo::OnInitialize(ITrafficMonitor* pApp)
105+
{
106+
m_app = pApp;
107+
std::wstring str = m_app->GetStringRes(L"IDS_MEMORY_USAGE", L"text");
108+
std::wstring str1 = m_app->GetStringRes(L"BCP_47", L"general");
109+
int a = 0;
110+
}
111+
104112
ITMPlugin* TMPluginGetInstance()
105113
{
106114
AFX_MANAGE_STATE(AfxGetStaticModuleState());

PluginDemo/PluginDemo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ class CPluginDemo : public ITMPlugin
1818
virtual const wchar_t* GetInfo(PluginInfoIndex index) override;
1919
virtual OptionReturn ShowOptionsDialog(void* hParent) override;
2020
virtual void OnExtenedInfo(ExtendedInfoIndex index, const wchar_t* data) override;
21+
virtual void OnInitialize(ITrafficMonitor* pApp) override;
2122

2223
private:
2324
CPluginSystemDate m_system_date;
2425
CPluginSystemTime m_system_time;
2526
CCustomDrawItem m_custom_draw_item;
27+
ITrafficMonitor* m_app{};
2628

2729
static CPluginDemo m_instance;
2830
};

TrafficMonitor/StrTable.cpp

Lines changed: 69 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
#include "Common.h"
44
#include "IniHelper.h"
55
#include "TrafficMonitor.h"
6-
76
CStrTable::CStrTable()
87
{
98
}
@@ -70,13 +69,11 @@ void CStrTable::Init()
7069

7170
//先读取默认字符串资源,如果当前语言中没有对应字符串,则会使用默认的字符串资源
7271
CIniHelper ini_default(IDR_LANGUAGE_DEFAULT);
73-
ini_default.GetAllKeyValues(L"text", m_text_string_table);
74-
ini_default.GetAllKeyValues(L"menu", m_menu_string_table);
72+
ReadStringtableFronIni(ini_default);
7573

7674
//读取字符串资源
7775
CIniHelper ini(IDR_LANGUAGE);
78-
ini.GetAllKeyValues(L"text", m_text_string_table);
79-
ini.GetAllKeyValues(L"menu", m_menu_string_table);
76+
ReadStringtableFronIni(ini);
8077
LanguageInfoFromIni(m_language_info, ini);
8178

8279
//从外部language文件夹获取语言文件
@@ -100,8 +97,7 @@ void CStrTable::Init()
10097
if (language_info.language_id == cur_language_id)
10198
{
10299
m_language_info = language_info;
103-
ini_file.GetAllKeyValues(L"text", m_text_string_table);
104-
ini_file.GetAllKeyValues(L"menu", m_menu_string_table);
100+
ReadStringtableFronIni(ini_file);
105101
}
106102

107103
//如果语言不在m_language_list,添加到该列表
@@ -113,18 +109,79 @@ void CStrTable::Init()
113109

114110
const wstring& CStrTable::LoadText(const wstring& key) const
115111
{
116-
auto iter = m_text_string_table.find(key);
117-
if (iter != m_text_string_table.end())
112+
const auto& text_string_table = GetTextStringTable();
113+
return LoadText(key, text_string_table);
114+
}
115+
116+
wstring CStrTable::LoadTextFormat(const wstring& key, const std::initializer_list<CVariant>& paras) const
117+
{
118+
const auto& text_string_table = GetTextStringTable();
119+
return LoadTextFormat(key, text_string_table, paras);
120+
}
121+
122+
const wstring& CStrTable::LoadMenuText(const wstring& key) const
123+
{
124+
const auto& menu_string_table = GetMenuStringTable();
125+
return LoadText(key, menu_string_table);
126+
}
127+
128+
const wstring& CStrTable::LoadText(const wstring& key, const wstring& section)
129+
{
130+
auto iter = m_string_table.find(section);
131+
if (iter != m_string_table.end())
132+
{
133+
return LoadText(key, iter->second);
134+
}
135+
static std::wstring str_empty;
136+
return str_empty;
137+
}
138+
139+
void CStrTable::ReadStringtableFronIni(const CIniHelper& ini)
140+
{
141+
std::set<std::wstring> sections{ L"general", L"text", L"menu" };
142+
auto section_list = ini.GetAllAppName(L"");
143+
for (const auto& section : section_list)
144+
sections.insert(section);
145+
146+
for (const auto& section : sections)
147+
{
148+
auto& value_map = m_string_table[section];
149+
ini.GetAllKeyValues(section, value_map);
150+
}
151+
}
152+
153+
const std::map<std::wstring, std::wstring>& CStrTable::GetTextStringTable() const
154+
{
155+
auto iter = m_string_table.find(L"text");
156+
if (iter != m_string_table.end())
157+
return iter->second;
158+
static std::map<std::wstring, std::wstring> empty_map;
159+
return empty_map;
160+
}
161+
162+
const std::map<std::wstring, std::wstring>& CStrTable::GetMenuStringTable() const
163+
{
164+
auto iter = m_string_table.find(L"menu");
165+
if (iter != m_string_table.end())
166+
return iter->second;
167+
static std::map<std::wstring, std::wstring> empty_map;
168+
return empty_map;
169+
}
170+
171+
const wstring& CStrTable::LoadText(const wstring& key, const std::map<std::wstring, std::wstring>& string_table)
172+
{
173+
auto iter = string_table.find(key);
174+
if (iter != string_table.end())
118175
return iter->second;
119176
ASSERT(false);
120177
static std::wstring str_empty;
121178
return str_empty;
122179
}
123180

124-
wstring CStrTable::LoadTextFormat(const wstring& key, const std::initializer_list<CVariant>& paras) const
181+
wstring CStrTable::LoadTextFormat(const wstring& key, const std::map<std::wstring, std::wstring>& string_table, const std::initializer_list<CVariant>& paras)
125182
{
126-
auto iter = m_text_string_table.find(key);
127-
if (iter == m_text_string_table.end())
183+
auto iter = string_table.find(key);
184+
if (iter == string_table.end())
128185
{
129186
ASSERT(false);
130187
return std::wstring();
@@ -139,13 +196,3 @@ wstring CStrTable::LoadTextFormat(const wstring& key, const std::initializer_lis
139196
}
140197
return str;
141198
}
142-
143-
const wstring& CStrTable::LoadMenuText(const wstring& key) const
144-
{
145-
auto iter = m_menu_string_table.find(key);
146-
if (iter != m_menu_string_table.end())
147-
return iter->second;
148-
ASSERT(false);
149-
static std::wstring str_empty;
150-
return str_empty;
151-
}

TrafficMonitor/StrTable.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#pragma once
22
#include "CVariant.h"
33
#include <map>
4+
class CIniHelper;
5+
46
class CStrTable
57
{
68
public:
@@ -31,6 +33,8 @@ class CStrTable
3133

3234
const wstring& LoadMenuText(const wstring& key) const;
3335

36+
const wstring& LoadText(const wstring& key, const wstring& section);
37+
3438
// 获取默认字体名称
3539
const LanguageInfo& GetLanguageInfo() const { return m_language_info; }
3640

@@ -40,9 +44,17 @@ class CStrTable
4044
// 当前语言是否为简体中文(选择默认更新源以及更新信息语言)
4145
bool IsSimplifiedChinese() const { return m_language_info.bcp_47 == L"zh-CN"; };
4246

47+
protected:
48+
void ReadStringtableFronIni(const CIniHelper& ini);
49+
const std::map<std::wstring, std::wstring>& GetTextStringTable() const;
50+
const std::map<std::wstring, std::wstring>& GetMenuStringTable() const;
51+
52+
static const wstring& LoadText(const wstring& key, const std::map<std::wstring, std::wstring>& string_table);
53+
static wstring LoadTextFormat(const wstring& key, const std::map<std::wstring, std::wstring>& string_table, const std::initializer_list<CVariant>& paras);
54+
55+
4356
private:
44-
std::map<std::wstring, std::wstring> m_text_string_table;
45-
std::map<std::wstring, std::wstring> m_menu_string_table;
57+
std::map<std::wstring, std::map<std::wstring, std::wstring>> m_string_table; //保存ini文件每个section的键值对
4658
LanguageInfo m_language_info; //当前语言
4759
std::vector<LanguageInfo> m_language_list; //所有支持的语言
4860
};

TrafficMonitor/TrafficMonitor.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,3 +1495,8 @@ int CTrafficMonitorApp::GetDPI(DPIType type) const
14951495
}
14961496
return 0;
14971497
}
1498+
1499+
const wchar_t* CTrafficMonitorApp::GetStringRes(const wchar_t* key, const wchar_t* section)
1500+
{
1501+
return m_str_table.LoadText(key, section).c_str();
1502+
}

TrafficMonitor/TrafficMonitor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ class CTrafficMonitorApp : public CWinApp, public ITrafficMonitor
205205
virtual const wchar_t* GetVersion() override;
206206
double GetMonitorValue(MonitorItem item) override;
207207
virtual const wchar_t* GetMonitorValueString(MonitorItem item, int is_main_window = false) override;
208+
virtual const wchar_t* GetStringRes(const wchar_t* key, const wchar_t* section) override;
208209
public:
209210
void ShowNotifyMessage(const wchar_t* strMsg) override;
210211
unsigned short GetLanguageId() const override;

include/PluginInterface.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,14 @@ class ITrafficMonitor
412412
* @return COLORREF格式的颜色值
413413
*/
414414
virtual unsigned int GetThemeColor() const = 0;
415+
416+
/**
417+
* @brief 获取当前语言的字符串资源
418+
* @param str_id 字符串资源id
419+
* @param str_section 字符串资源在ini文件中的段名称
420+
* @return
421+
*/
422+
virtual const wchar_t* GetStringRes(const wchar_t* key, const wchar_t* section) = 0;
415423
};
416424

417425

0 commit comments

Comments
 (0)