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

Symbian

开发平台:

Visual C++

  1. /************************************************************************
  2.  * chxavwaitnote.h
  3.  * ---------------
  4.  *
  5.  * Synopsis:
  6.  * Description: 
  7.  *
  8.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  9.  *
  10.  ************************************************************************/
  11. // Symbian includes...
  12. #include <aknwaitdialog.h>
  13. // Includes from this project...
  14. #include "chxavmisc.h"
  15. #include "chxavutil.h"
  16. #include "chxavwaitnote.h"
  17. #include "chxavthread.h"
  18. #include "hxsym_debug.h"
  19. ///////////////////////////////////
  20. // ctor
  21. CHXAvWaitNote::CHXAvWaitNote()
  22. : m_wpWaitNote(0)
  23. , m_idSoftkey(R_AVKON_SOFTKEYS_EMPTY)
  24. , m_bDismissPending(false)
  25. }
  26. ///////////////////////////////////
  27. // dtor
  28. CHXAvWaitNote::~CHXAvWaitNote()
  29. {
  30.     HX_ASSERT(!m_wpWaitNote);
  31. }
  32. ////////////////////////////////////////
  33. //
  34. void CHXAvWaitNote::ClearCancelCommand()
  35. {
  36.     m_spUserCancelCmd = 0;
  37.     m_idSoftkey = R_AVKON_SOFTKEYS_EMPTY;
  38. }
  39. ////////////////////////////////////////
  40. // userCancelCmd - command to execute when cancel button is pressed
  41. // idSoftkey     - resource (see avkon.rsg) for cba (softkey text)
  42. //
  43. void CHXAvWaitNote::SetCancelCommandL(const CHXAvCommand& userCancelCmd, TInt idSoftkey)
  44. {
  45.     m_spUserCancelCmd = userCancelCmd.CloneL();
  46.     m_idSoftkey = idSoftkey;  
  47. }
  48. ////////////////////////////////////////
  49. // MProgressDialogCallback
  50. //
  51. // called when user cancels or we close it (because
  52. // time consuming event has completed)
  53. //
  54. // note: we might get simulated cancel event (e.g., from dialog shutter)
  55. //
  56. void CHXAvWaitNote::DialogDismissedL(TInt bid)
  57. {
  58.     DPRINTF(SYMP_INFO, ("WaitNote::DialogDismissedL() button id = %ld; ptr = %pn", bid, m_wpWaitNote));
  59.    
  60.     HX_ASSERT(m_bDismissPending);
  61.     if( m_bDismissPending )
  62.     {
  63.         m_bDismissPending = false;
  64.         if(m_spUserCancelCmd)
  65.         {
  66.             m_spUserCancelCmd->Execute();
  67.         }
  68.     }
  69.     
  70. }
  71. ////////////////////////////////////////////////
  72. //
  73. void CHXAvWaitNote::StartAndKickL()
  74. {
  75.     StartL(false);
  76.     // process active objects so dialog has a chance to display itself (in case blocking processing follows)
  77.     CHXAvThread::ProcessPendingRequests();
  78. }
  79.     
  80. ////////////////////////////////////////////////
  81. //
  82. // bDelayVisibility    - if true, wait 1.5 secs before displaying (in case wait turns
  83. //                       out to be very short
  84. //
  85. void CHXAvWaitNote::StartL(bool bDelayVisibility)
  86. {
  87.     DPRINTF(SYMP_INFO, ("WaitNote::StartL()n"));
  88.     HX_ASSERT(!m_bDismissPending);
  89.     HX_ASSERT(!m_wpWaitNote);
  90.     
  91.     m_wpWaitNote = new (ELeave) CAknWaitDialog( reinterpret_cast<CEikDialog**>(&m_wpWaitNote), !bDelayVisibility);
  92.     
  93.     // not modal; modal requires EEikDialogFlagWait
  94.     m_wpWaitNote->PrepareLC(R_AVP_WAIT_NOTE);
  95.     // save cleanupstack init until LD
  96.     {
  97.         AUTO_PUSH_POP(m_wpWaitNote);
  98.         m_wpWaitNote->SetTextL(*m_spText);
  99.         //m_wpWaitNote->SetCurrentLabelL(EGeneralQuery, *m_spText);
  100.     
  101.         m_wpWaitNote->SetCallback(this); 
  102.         // set softkey (default is empty)
  103.         m_wpWaitNote->ButtonGroupContainer().SetCommandSetL(m_idSoftkey);
  104.     
  105.         m_bDismissPending = true;
  106.     }
  107.     m_wpWaitNote->RunLD();
  108. }
  109. ////////////////////////////////////////////////
  110. //
  111. void CHXAvWaitNote::EndL()
  112. {
  113.     DPRINTF(SYMP_INFO, ("WaitNote::EndL() pNote = %pn", m_wpWaitNote));
  114.     if(m_bDismissPending && m_wpWaitNote)
  115.     {
  116.         m_bDismissPending = false;
  117.         m_wpWaitNote->SetCallback(0); // just in case; we don't need callback after this
  118.         m_wpWaitNote->ProcessFinishedL(); 
  119.         // sometimes m_wpWaitNote lingers; self-destructs a bit later! (e.g., if you start and then end it quickly)
  120.         // HX_ASSERT(0 == m_wpWaitNote);
  121.     }
  122. }
  123.