rendstats.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:9k
源码类别:

Symbian

开发平台:

Visual C++

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