rendstats.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:9k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. /****************************************************************************
  36.  *  Defines
  37.  */
  38. #define MAX_DISPLAY_NAME_LENGTH     1024
  39. /****************************************************************************
  40.  *  Includes
  41.  */
  42. #include <stdio.h>
  43. #include "rendstats.h"
  44. #include "hxstrutl.h"
  45. /****************************************************************************
  46.  *  CRendererStatisticsDisplay
  47.  */
  48. /****************************************************************************
  49.  *  Constructor/Destructor
  50.  */
  51. CRendererStatisticsDisplay::CRendererStatisticsDisplay(IHXRegistry* pRegistry,
  52.        UINT32 ulNumEntries)
  53.     : m_pRegistry(pRegistry)
  54.     , m_ulRegistryID(0)
  55.     , m_pFormatEntryArray(NULL)
  56.     , m_ulFormatEntryArraySize(0)
  57. {
  58.     if (m_pRegistry)
  59.     {
  60. m_pRegistry->AddRef();
  61.     }
  62.     m_pFormatEntryArray = new CFormatEntry[ulNumEntries];
  63.     if (m_pFormatEntryArray)
  64.     {
  65. m_ulFormatEntryArraySize = ulNumEntries;
  66.     }
  67. }
  68. CRendererStatisticsDisplay::~CRendererStatisticsDisplay()
  69. {
  70.     HX_RELEASE(m_pRegistry);
  71.     HX_VECTOR_DELETE(m_pFormatEntryArray);
  72. }
  73. /****************************************************************************
  74.  *  MoveToRegID
  75.  */
  76. HX_RESULT CRendererStatisticsDisplay::MoveToRegID(ULONG32 ulRegID)
  77. {
  78.     m_ulRegistryID = ulRegID;
  79.     return ReprimeEntries();
  80. }
  81. HX_RESULT CRendererStatisticsDisplay::ReprimeEntries(void)
  82. {
  83.     UINT32 ulIdx;
  84.     HX_RESULT status;
  85.     HX_RESULT retVal = HXR_OK;
  86.     for (ulIdx = 0; ulIdx < m_ulFormatEntryArraySize; ulIdx++)
  87.     {
  88. if (m_pFormatEntryArray[ulIdx].IsPrimed())
  89. {
  90.     status = PrimeEntry(ulIdx,
  91. m_pFormatEntryArray[ulIdx].GetStatName(),
  92. m_pFormatEntryArray[ulIdx].m_ulType);
  93.     if (SUCCEEDED(retVal))
  94.     {
  95. status = retVal;
  96.     }
  97. }
  98.     }
  99.     return retVal;
  100. }
  101. /****************************************************************************
  102.  *  MoveToRegID
  103.  */
  104. HX_RESULT CRendererStatisticsDisplay::HideEntry(UINT32 ulEntryID)
  105. {
  106.     if (m_pFormatEntryArray)
  107.     {
  108. m_pFormatEntryArray[ulEntryID].Hide();
  109.     }
  110.     return HXR_OK;
  111. }
  112. /****************************************************************************
  113.  *  DestroyEntry
  114.  */
  115. HX_RESULT CRendererStatisticsDisplay::DestroyEntry(UINT32 ulEntryID)
  116. {
  117.     if (m_pFormatEntryArray)
  118.     {
  119. m_pFormatEntryArray[ulEntryID].Kill();
  120.     }
  121.     return HXR_OK;
  122. }
  123. /****************************************************************************
  124.  *  UpdateEntry
  125.  */
  126. HX_RESULT CRendererStatisticsDisplay::UpdateEntry(UINT32 ulEntryID, 
  127.   INT32 lVal)
  128. {   
  129.     if (m_pFormatEntryArray)
  130.     {
  131. return m_pFormatEntryArray[ulEntryID].Update(lVal);
  132.     }
  133.     else
  134.     {
  135. return HXR_FAIL;
  136.     }
  137. }
  138. /****************************************************************************
  139.  *  UpdateEntry
  140.  */
  141. HX_RESULT CRendererStatisticsDisplay::UpdateEntry(UINT32 ulEntryID, 
  142.           const char* pVal)
  143. {
  144.     if (m_pFormatEntryArray)
  145.     {
  146. return m_pFormatEntryArray[ulEntryID].Update(pVal);
  147.     }
  148.     else
  149.     {
  150. return HXR_FAIL;
  151.     }
  152. }
  153. /****************************************************************************
  154.  *  MarkEntryAsDirty
  155.  */
  156. HX_RESULT CRendererStatisticsDisplay::MarkEntryAsDirty(UINT32 ulEntryID)
  157. {
  158.     if (m_pFormatEntryArray)
  159.     {
  160. m_pFormatEntryArray[ulEntryID].MarkAsDirty();
  161.     }
  162.     return HXR_OK;
  163. }
  164. /****************************************************************************
  165.  *  IsEntryDirty
  166.  */
  167. BOOL CRendererStatisticsDisplay::IsEntryDirty(UINT32 ulEntryID)
  168. {
  169.     if (m_pFormatEntryArray)
  170.     {
  171. return m_pFormatEntryArray[ulEntryID].IsDirty();
  172.     }
  173.     return FALSE;
  174. }
  175. /****************************************************************************
  176.  *  RefreshEntries
  177.  */
  178. HX_RESULT CRendererStatisticsDisplay::RefreshEntries(ULONG32 ulRegID)
  179. {
  180.     ULONG32 ulIdx;
  181.     HX_RESULT retVal = HXR_INVALID_PARAMETER;
  182.     if (ulRegID != 0)
  183.     {
  184. retVal = HXR_OK;
  185. if (ulRegID != m_ulRegistryID)
  186. {
  187.     retVal = MoveToRegID(ulRegID);
  188. }
  189. if (SUCCEEDED(retVal))
  190. {
  191.     if (!m_pFormatEntryArray)
  192.     {
  193. retVal = HXR_FAIL;
  194.     }
  195. }
  196. if (SUCCEEDED(retVal))
  197. {
  198.     for (ulIdx = 0; ulIdx < m_ulFormatEntryArraySize; ulIdx++)
  199.     {
  200. m_pFormatEntryArray[ulIdx].Refresh(m_pRegistry);
  201.     }
  202. }
  203.     }
  204.     return retVal;
  205. }
  206. /****************************************************************************
  207.  *  PrimeEntry
  208.  */
  209. HX_RESULT CRendererStatisticsDisplay::PrimeEntry(UINT32 ulEntryID,
  210.  const char* pzName, 
  211.  UINT32 ulType)
  212. {
  213.     char sRegKeyName[MAX_DISPLAY_NAME_LENGTH]; /* Flawfinder: ignore */
  214.     IHXBuffer* pParentNameBuffer = NULL;
  215.     HX_RESULT retVal = HXR_FAIL;
  216.     if (m_pRegistry)
  217.     {
  218. char* pRegKeyName = NULL;
  219. retVal = HXR_OK;
  220. if (m_ulRegistryID != 0)
  221. {
  222.     retVal = m_pRegistry->GetPropName(m_ulRegistryID, pParentNameBuffer);
  223.     if (SUCCEEDED(retVal))
  224.     {
  225. SafeSprintf(sRegKeyName, MAX_DISPLAY_NAME_LENGTH, "%s.%s", 
  226. pParentNameBuffer->GetBuffer(), 
  227. pzName);
  228. pRegKeyName = &(sRegKeyName[0]);
  229.     }
  230. }
  231. else
  232. {
  233.     pRegKeyName = (char*) pzName;
  234. }
  235. if (SUCCEEDED(retVal))
  236. {
  237.     if (!m_pFormatEntryArray)
  238.     {
  239. retVal = HXR_FAIL;
  240.     }
  241. }
  242. if (SUCCEEDED(retVal))
  243. {
  244.     retVal = m_pFormatEntryArray[ulEntryID].Prime(m_pRegistry,
  245. pRegKeyName, 
  246. ulType);
  247. }
  248.     }
  249.     HX_RELEASE(pParentNameBuffer);
  250.     return retVal;
  251. }
  252. /****************************************************************************
  253.  *  CRendererStatisticsDisplay::CFormatEntry
  254.  */
  255. /****************************************************************************
  256.  *  GetStatName
  257.  */
  258. const char* CRendererStatisticsDisplay::CFormatEntry::GetStatName(void)
  259. {
  260.     const char* pStatName = NULL;
  261.     if (m_pName)
  262.     {
  263. pStatName = strrchr(m_pName, '.');
  264. if (!pStatName)
  265. {
  266.     pStatName = m_pName;
  267. }
  268.     }
  269.     return pStatName;
  270. }
  271. /****************************************************************************
  272.  *  CFormatEntry::Prime
  273.  */
  274. HX_RESULT CRendererStatisticsDisplay::CFormatEntry::Prime(IHXRegistry* pRegistry, 
  275.   char* pName, 
  276.   UINT32 ulType)
  277. {
  278.     HX_RESULT retVal = HXR_OK;
  279.     BOOL bIsActive = (m_pEntry != NULL);
  280.     
  281.     HX_DELETE(m_pEntry);
  282.     if (pName != m_pName)
  283.     {
  284. HX_VECTOR_DELETE(m_pName);
  285. if (pName)
  286. {
  287.     m_pName = new char [strlen(pName) + 1];
  288.     
  289.     retVal = HXR_OUTOFMEMORY;
  290.     if (m_pName)
  291.     {
  292. strcpy(m_pName, pName); /* Flawfinder: ignore */
  293. retVal = HXR_OK;
  294.     }
  295. }
  296.     }
  297.     m_ulType = ulType;
  298.     if (SUCCEEDED(retVal) && 
  299. m_pName &&
  300. (bIsActive || m_bIsDirty))
  301.     {
  302. m_pEntry = new CStatisticEntry(pRegistry, 
  303.        pName, 
  304.        ulType);
  305. if (!m_pEntry)
  306. {
  307.     retVal = HXR_OUTOFMEMORY;
  308. }
  309. m_bIsDirty = TRUE;
  310.     }
  311.     return retVal;
  312. }