2#include "res.mgr/SResProviderMgr.h"
3#include "res.mgr/SResProvider.h"
4#include "helper/SplitString.h"
5#include <res.mgr/SUiDef.h>
9const static TCHAR KTypeFile[] = _T(
"file");
23 SPOSITION pos = m_lstResPackage.GetHeadPosition();
26 IResProvider *pResProvider = m_lstResPackage.GetNext(pos);
28 SSLOGD() <<
"++++begin of check resource usage";
29 pResProvider->
EnumResource(&SResProviderMgr::CheckUsage, (LPARAM)&m_mapResUsageCount);
30 SSLOGD() <<
"----end of check resource usage";
34 m_lstResPackage.RemoveAll();
36 pos = m_mapCachedCursor.GetStartPosition();
39 CURSORMAP::CPair *pPair = m_mapCachedCursor.GetNext(pos);
40 DestroyCursor(pPair->m_value);
42 m_mapCachedCursor.RemoveAll();
48 SPOSITION pos = m_lstResPackage.GetTailPosition();
51 IResProvider *pResProvider = m_lstResPackage.GetPrev(pos);
55 m_mapResUsageCount[SStringT().Format(_T(
"%s:%s"), pszType, pszResName).MakeLower()]++;
66 m_lstResPackage.AddTail(pResProvider);
70 GETUIDEF->InitDefUiDef(pResProvider, pszUidef);
78 SStringT strUiDef = S_CA2T(pszUidef, CP_UTF8);
85 SPOSITION pos = m_lstResPackage.GetTailPosition();
88 SPOSITION posPrev = pos;
89 IResProvider *pResProvierT = m_lstResPackage.GetPrev(pos);
90 if (pResProvierT == pResProvider)
92 m_lstResPackage.RemoveAt(posPrev);
101 return m_lstResPackage.GetHead();
106 return m_lstResPackage.GetTail();
116 static const Cursor2ID cursorMap[] = {
117 { _T(
"arrow"), IDC_ARROW }, { _T(
"ibeam"), IDC_IBEAM }, { _T(
"wait"), IDC_WAIT }, { _T(
"cross"), IDC_CROSS }, { _T(
"uparrow"), IDC_UPARROW }, { _T(
"size"), IDC_SIZE }, { _T(
"sizenwse"), IDC_SIZENWSE }, { _T(
"sizenesw"), IDC_SIZENESW }, { _T(
"sizewe"), IDC_SIZEWE }, { _T(
"sizens"), IDC_SIZENS }, { _T(
"sizeall"), IDC_SIZEALL }, { _T(
"no"), IDC_NO }, { _T(
"hand"), IDC_HAND }, { _T(
"help"), IDC_HELP },
120 for (
int i = 0; i < ARRAYSIZE(cursorMap); i++)
122 if (0 == _tcsicmp(cursorMap[i].szName, pszCursorName))
123 return cursorMap[i].szID;
133 SPOSITION pos = m_lstResPackage.GetHeadPosition();
138 return pRes->
GetRawBuffer(strType, pszResName, pBuf, size);
144 SStringT strPath = m_strFilePrefix + pszResName;
150 m_mapResUsageCount[SStringT().Format(_T(
"%s:%s"), strType, pszResName).MakeLower()]++;
155 return pResProvider->
GetRawBuffer(strType, pszResName, pBuf, size);
164 SPOSITION pos = m_lstResPackage.GetHeadPosition();
175 SStringT strPath = m_strFilePrefix + pszResName;
181 m_mapResUsageCount[SStringT().Format(_T(
"%s:%s"), strType, pszResName).MakeLower()]++;
196 SPOSITION pos = m_lstResPackage.GetHeadPosition();
209 SStringT strPath = m_strFilePrefix + pszResName;
215 m_mapResUsageCount[SStringT().Format(_T(
"%s:%s"), strType, pszResName).MakeLower()]++;
221 return pResProvider->
LoadImgX(strType, pszResName);
230 SPOSITION pos = m_lstResPackage.GetHeadPosition();
242 SStringT strPath = m_strFilePrefix + pszResName;
248 m_mapResUsageCount[SStringT().Format(_T(
"%s:%s"), pszType, pszResName).MakeLower()]++;
254 SSLOGW() <<
"load image failed, resource index " << pszType <<
":" << pszResName <<
" not found!";
260 SSLOGW() <<
"load image failed, resource content " << pszType <<
":" << pszResName <<
" not found!";
271 SStringT strPath = m_strFilePrefix + pszResName;
277 m_mapResUsageCount[SStringT().Format(_T(
"bitmap:%s"), pszResName).MakeLower()]++;
283 SSLOGW() <<
"load bitmap failed, resource index " << pszResName <<
" not found!";
286 HBITMAP hBmp = pResProvider->
LoadBitmap(pszResName);
289 SSLOGW() <<
"load bitmap failed, resource content " << pszResName <<
" not found!";
298 if (IS_INTRESOURCE(pszResName))
300 return ::LoadCursor(NULL, pszResName);
306 return ::LoadCursor(NULL, pszCursorID);
308 const CURSORMAP::CPair *pPair = m_mapCachedCursor.Lookup(pszResName);
310 return pPair->m_value;
315 SStringT strPath = m_strFilePrefix + pszResName;
322 m_mapResUsageCount[SStringT().Format(_T(
"cursor:%s"), pszResName).MakeLower()]++;
328 SSLOGW() <<
"load cursor failed, resource index " << pszResName <<
" not found!";
338 m_mapCachedCursor[pszResName] = hRet;
342 SSLOGW() <<
"load cursor failed, resource content " << pszResName <<
" not found!";
352 SStringT strPath = m_strFilePrefix + pszResName;
358 m_mapResUsageCount[SStringT().Format(_T(
"icon:%s"), pszResName).MakeLower()]++;
363 SSLOGW() <<
"load icon failed, resource index " << pszResName <<
" not found!";
366 HICON hRet = pResProvider->
LoadIcon(pszResName, cx, cy);
369 SSLOGW() <<
"load icon failed, resource content " << pszResName <<
" not found!";
380 SStringT strPath = m_strFilePrefix + pszResName;
381 return IsFilePathValid(strPath);
391 SStringT strImgID2 = S_CW2T(strImgID);
393 int nSegs = ParseResID(strImgID2, strLst);
402 SStringT strIconID2 = S_CW2T(strIconID);
404 int nSegs = ParseResID(strIconID2, strLst);
407 int cx = _ttoi(strLst[1]);
420 return _tcsicmp(pszType, KTypeFile) == 0;
424BOOL SResProviderMgr::CheckUsage(LPCTSTR pszName, LPCTSTR pszType, LPARAM lp)
426 SMap<SStringT, int> *mapResUsageCount = (SMap<SStringT, int> *)lp;
427 if (IS_INTRESOURCE(pszName))
429 SStringT key = SStringT().Format(_T(
"%s:%s"), pszType, pszName);
431 if (!mapResUsageCount->Lookup(key))
433 SSLOGD() << _T(
"resource of [") << key.c_str() << _T(
"] was not used.");
441 m_strFilePrefix = pszFilePrefix;
442 if (!m_strFilePrefix.EndsWith(_T(PATH_SLASH)))
443 m_strFilePrefix.Append(_T(PATH_SLASH));
464 SSLOGW() <<
"GetMatchResProvider failed: " << pszType <<
":" << pszResName <<
" not found in respovider list";
470 SSLOGW() <<
"GetMatchResProvider failed: " << pszType <<
":" << pszResName <<
" pResProvider->GetRawBufferSize return 0";
474 return pResProvider->
GetRawBuffer(pszType, pszResName, buf, dwSize);
A smart buffer management class that automatically handles memory allocation and deallocation.
char * Allocate(size_t nElements)
Allocates a buffer of the specified size. If a buffer is already allocated, it will be freed first.
Auto-lock class for managing critical sections.
static HBITMAP LoadBitmap(LPCTSTR pszFileName)
Loads a bitmap from a file.
static size_t GetRawBufferSize(LPCTSTR pszFileName)
Retrieves the size of the raw buffer for a file.
static BOOL GetRawBuffer(LPCTSTR pszFileName, LPVOID pBuf, size_t size)
Retrieves the raw buffer for a file.
static IBitmapS * LoadImage(LPCTSTR pszFileName)
Loads an image from a file as an IBitmapS object.
static IImgX * LoadImgX(LPCTSTR pszFileName)
Loads an image from a file as an IImgX object.
static HICON LoadIcon(LPCTSTR pszFileName, int cx=0, int cy=0)
Loads an icon from a file.
static HCURSOR LoadCursor(LPCTSTR pszFileName)
Loads a cursor from a file.
IResProvider * GetHeadResProvider() SCONST OVERRIDE
Retrieves the first resource provider in the list.
void RemoveResProvider(IResProvider *pResProvider) OVERRIDE
Removes a resource provider.
void AddResProviderA(IResProvider *pResProvider, LPCSTR pszUidef="uidef:xml_init") OVERRIDE
Adds a resource provider with a specified UI definition (ANSI version).
IBitmapS * LoadImage2(const SStringW &strImgID)
Loads an image using a type:name formatted string.
void SetFilePrefix(LPCTSTR pszFilePrefix) OVERRIDE
Sets the file prefix for resource paths.
IResProvider * GetMatchResProvider(LPCTSTR pszType, LPCTSTR pszResName)
Finds the resource provider that contains the specified resource type and name.
LPCTSTR SysCursorName2ID(LPCTSTR pszCursorName)
Converts a system cursor name to its corresponding ID.
BOOL IsFileType(LPCTSTR pszType)
Checks if the resource type is an external file.
void AddResProvider(IResProvider *pResProvider, LPCTSTR pszUidef=_T("uidef:xml_init")) OVERRIDE
Adds a resource provider with a specified UI definition.
void RemoveAll() OVERRIDE
Removes all resource providers.
IResProvider * GetTailResProvider() SCONST OVERRIDE
Retrieves the last resource provider in the list.
HICON LoadIcon2(const SStringW &strIconID)
Loads an icon using a name:size formatted string.
SResProviderMgr(void)
Constructor.
BOOL LoadRawBuffer(LPCTSTR pszType, LPCTSTR pszResName, IResProvider *pResProvider, SAutoBuf &buf)
Loads the raw buffer for a resource using a specified resource provider.
size_t GetRawBufferSize(LPCTSTR pszType, LPCTSTR pszResName) OVERRIDE
Retrieves the size of the raw buffer for a resource.
HICON LoadIcon(LPCTSTR pszResName, int cx=0, int cy=0, BOOL bFromFile=FALSE) OVERRIDE
Loads an icon resource.
BOOL HasResource(LPCTSTR pszType, LPCTSTR pszResName) OVERRIDE
Checks if a resource exists.
IBitmapS * LoadImage(LPCTSTR pszType, LPCTSTR pszResName) OVERRIDE
Loads an image resource as an IBitmapS object.
~SResProviderMgr(void)
Destructor.
HCURSOR LoadCursor(LPCTSTR pszResName, BOOL bFromFile=FALSE) OVERRIDE
Loads a cursor resource.
IImgX * LoadImgX(LPCTSTR pszType, LPCTSTR pszResName) OVERRIDE
Loads an image resource as an IImgX object.
HBITMAP LoadBitmap(LPCTSTR pszResName, BOOL bFromFile=FALSE) OVERRIDE
Loads a bitmap resource.
BOOL GetRawBuffer(LPCTSTR pszType, LPCTSTR pszResName, LPVOID pBuf, size_t size) OVERRIDE
Retrieves the raw buffer for a resource.
A class representing an ASCII string.
Interface for image data.
IImgX * LoadImgX(LPCTSTR pszType, LPCTSTR pszResName) PURE
从资源中创建一个IImgX对象
IBitmapS * LoadImage(LPCTSTR pszType, LPCTSTR pszResName) PURE
从资源加载一个IBitmap对象
HICON LoadIcon(LPCTSTR pszResName, int cx, int cy) PURE
从资源中加载ICON
void EnumResource(EnumResCallback funEnumCB, LPARAM lp) PURE
枚举资源
HCURSOR LoadCursor(LPCTSTR pszResName) PURE
从资源中加载光标
BOOL GetRawBuffer(LPCTSTR pszType, LPCTSTR pszResName, LPVOID pBuf, size_t size) PURE
获得资源内存块
HBITMAP LoadBitmap(LPCTSTR pszResName) PURE
从资源中加载HBITMAP
BOOL HasResource(LPCTSTR pszType, LPCTSTR pszResName) PURE
查询一个资源是否存在
size_t GetRawBufferSize(LPCTSTR pszType, LPCTSTR pszResName) PURE
获得资源数据大小