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

Symbian

开发平台:

C/C++

  1. /************************************************************************
  2.  * chxavcompositecommand.cpp
  3.  * -------------------------
  4.  *
  5.  * Synopsis:
  6.  * 
  7.  *
  8.  * Implementation of aggregated command object
  9.  *
  10.  * commands (actions) are executed in order of addition
  11.  * copying the command object implies sharing a reference to the aggregated list
  12.  *
  13.  * Target:
  14.  * Symbian OS
  15.  *
  16.  *
  17.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  18.  *
  19.  ************************************************************************/ 
  20. // Symbian includes...
  21. #include <e32std.h>
  22. // Include from this project...
  23. #include "chxavcompositecommand.h"
  24. CHXAvCompositeCommand::CHXAvCompositeCommand(const CHXAvCompositeCommand& rhs) :
  25.     m_nextId(rhs.m_nextId)
  26. {
  27.     // Copy the command list
  28.     LISTPOSITION pos = rhs.m_commands.GetHeadPosition();
  29.     while (pos != NULL)
  30.     {
  31. CHXAvCommand *ptr = (CHXAvCommand *)rhs.m_commands.GetNext(pos);
  32. AppendL(*ptr);
  33.     }
  34. }
  35. CHXAvCompositeCommand::~CHXAvCompositeCommand()
  36. {
  37.     LISTPOSITION pos = m_commands.GetHeadPosition();
  38.     while (pos != NULL)
  39.     {
  40. CHXAvCommand *ptr = (CHXAvCommand *)m_commands.GetNext(pos);
  41. delete ptr;
  42.     }
  43. }
  44. ////////////////////////////////////////
  45. // add an action; becomes last command to be executed
  46. // return id that can be used to remove command
  47. // later on
  48. //
  49. CHXAvCompositeCommand::CID CHXAvCompositeCommand::AppendL(const CHXAvCommand& cmd)
  50. {
  51.     CHXAvCommand *pCmd = cmd.CloneL();
  52.     m_commands.AddTail(pCmd);
  53.     return pCmd;
  54. }
  55. ////////////////////////////////////////
  56. // add an action; becomes last command to be executed
  57. //
  58. void CHXAvCompositeCommand::Remove(CID idCommand)
  59. {
  60.     LISTPOSITION pos = m_commands.Find(idCommand, NULL);
  61.     if (pos != NULL)
  62. m_commands.RemoveAt(pos);
  63.     delete (CHXAvCommand *)idCommand;
  64. }
  65. ////////////////////////////////////////
  66. // go through list of commands and execute each
  67. // in order they were added
  68. void CHXAvCompositeCommand::Execute()
  69. {
  70.     LISTPOSITION pos = m_commands.GetHeadPosition();
  71.     while (pos != NULL)
  72.     {
  73. CHXAvCommand *ptr = (CHXAvCommand *)m_commands.GetNext(pos);
  74. if (ptr != NULL)
  75.     ptr->Execute();
  76.     }
  77.     
  78. }