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

Symbian

开发平台:

Visual C++

  1. /************************************************************************
  2.  * chxavviewbase.cpp
  3.  * -----------------
  4.  *
  5.  * Synopsis:
  6.  * Contains the somewhat empty implementation of the CHXAvViewBase class.
  7.  * This is the base class of all views in this app.
  8.  *
  9.  * Target:
  10.  * Symbian OS
  11.  *
  12.  *
  13.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  14.  *
  15.  ************************************************************************/
  16. // Includes...
  17. #include <aknenv.h>
  18. #include <aknview.h>
  19. #include <aknconsts.h>
  20. #include <akntitle.h>
  21. #include <aknnavide.h>
  22. #include <akncontext.h>
  23. #include <eikspane.h>
  24. #include <coecntrl.h>
  25. #include <aknviewappui.h> 
  26. #include <barsread.h>
  27. // Includes from this project...
  28. #include "hxsym_debug.h"
  29. #include "hxsym_leaveutil.h"
  30. #include "chxavviewbase.h"
  31. #include "chxavplayerui.h"
  32. /* 
  33.  * CHXAvViewBase
  34.  * -------------
  35.  * Constructor.   
  36.  *
  37.  */
  38. CHXAvViewBase::CHXAvViewBase(TInt viewIndex, CHXAvPlayerUI *playerUI) 
  39. : m_viewIndex(viewIndex)
  40. , m_playerUI(playerUI)
  41. , m_backViewIndex(-1)
  42. , m_bFirstForegroundEventPending(true)
  43. {
  44.     DPRINTF(SYMP_INFO, ("CHXAvViewBase::Ctor(): id = %dn", m_viewIndex));
  45.     // status pane: container of other panes
  46.     m_statusPane = StatusPane();
  47.     // info area: used for tabs, volume control, etc.
  48.     m_naviPane 
  49. = static_cast<CAknNavigationControlContainer*>(
  50. m_statusPane->ControlL(TUid::Uid(EEikStatusPaneUidNavi)));
  51.     // app bitmap pane
  52.     m_contextPane 
  53.  = static_cast<CAknContextPane*>(
  54.  m_statusPane->ControlL(TUid::Uid(EEikStatusPaneUidContext)));
  55.     // app title pane
  56.     m_titlePane  
  57. = static_cast<CAknTitlePane*>(
  58. m_statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
  59. }
  60. /*
  61.  * ~CHXAvViewBase
  62.  * --------------
  63.  * Destructor.
  64.  *
  65.  */
  66. CHXAvViewBase::~CHXAvViewBase()
  67. {
  68.     DPRINTF(SYMP_INFO, ("CHXAvViewBase::Dtor(): id = %dn", m_viewIndex));
  69. }
  70. /*
  71.  * ConstructL
  72.  * ----------
  73.  * default do-nothing implementation for override
  74.  *
  75.  */
  76. void CHXAvViewBase::ConstructL()
  77. {
  78. }
  79. /* 
  80.  * UpdateViewStateL
  81.  * ----------------
  82.  * default do-nothing implementation for override
  83.  *
  84.  */
  85. void CHXAvViewBase::UpdateViewStateL()
  86. {
  87. }
  88. /*
  89.  * HandleLosePlayFocus
  90.  * ------------------
  91.  * default do-nothing implementation for override
  92.  *
  93.  */
  94. void CHXAvViewBase::HandleLosePlayFocus()
  95. {
  96. }
  97. /*
  98.  * CAknView::HandleForegroundEventL
  99.  * ------------------
  100.  *
  101.  * Called after DoActivate() for new view and before DoDeactivate() for old view when 
  102.  * switching among our own views. Also called when gaining or losing app focus.
  103.  *
  104.  */
  105. void CHXAvViewBase::HandleForegroundEventL(TBool bEnterForeground)
  106. {
  107.     DPRINTF(SYMP_INFO, ("avPlayerAppViewBase::HandleForegroundEventL() enter_foreground = %dn", bEnterForeground));
  108.     CAknView::HandleForegroundEventL(bEnterForeground);
  109.     if( bEnterForeground )
  110.     {
  111.         UpdateViewStateL(); 
  112.         if( m_bFirstForegroundEventPending )
  113.         {
  114.             m_bFirstForegroundEventPending = false;
  115.             m_playerUI->OnViewForegroundActivateL(m_viewIndex);
  116.         }
  117.     }
  118. }
  119. ///////////////////////////////////
  120. // called when we show or hide status pane
  121. void CHXAvViewBase::HandleStatusPaneSizeChange()
  122. {
  123.     if(m_window)
  124.     {
  125. m_window->SetRect(ClientRect());
  126. m_window->DrawNow();
  127.     }
  128. }
  129. /* 
  130.  * Id
  131.  * --
  132.  * Return our id.
  133.  *
  134.  */
  135. TUid CHXAvViewBase::Id() const
  136. {
  137.     return TUid::Uid(m_viewIndex);
  138. }
  139. /* 
  140.  * DoActivateL
  141.  * -----------
  142.  * Called when the view is activating
  143.  *
  144.  * After this we expect following sequence of events
  145.  *  1) get foreground event for the new view
  146.  *  2) get loss of foreground event for old view
  147.  *  3) DoDeactivate() called for old view
  148.  *
  149.  */
  150. void CHXAvViewBase::DoActivateL(const TVwsViewId& prevViewID, TUid customMsgID, const TDesC8& customMsg)
  151. {
  152.     m_bFirstForegroundEventPending = true;
  153.     // create window and add to stack first
  154.     m_window = CreateViewWindowForActivatingViewL();
  155.     HX_ASSERT(m_window);
  156.     m_window->SetMopParent(this);
  157.    
  158.     // note: view state is updated when foreground event occurs
  159.     m_window->ActivateL();
  160.     m_window->MakeVisible(ETrue);
  161.     AppUi()->AddToStackL(*this, m_window);
  162.     FinishViewActivateL();
  163. }
  164. /*
  165.  * DoDeactivate
  166.  * ------------
  167.  * Call subclasses to handle their cleanup on leaving to a new view or exiting.
  168.  *
  169.  * This is called after DoActivate() for new view
  170.  *
  171.  */
  172. void CHXAvViewBase::DoDeactivate()
  173. {
  174.     DPRINTF(SYMP_INFO, ("CHXAvViewBase::DoDeactivate(): for view = %dn", m_viewIndex));
  175.     HX_ASSERT(m_window);
  176.     if( m_window )
  177.     {
  178. AppUi()->RemoveFromStack(m_window);
  179.     }
  180.     
  181.     // derived: do view window cleanup (possibly)
  182.     FinishViewDeactivateL();
  183.     // may or may not be valid from now on (typically derived views free this on each deactivation)
  184.     m_window = 0;
  185. }
  186. /*
  187.  * FinishViewActivateL
  188.  * ------------------
  189.  * default do-nothing implementation for override
  190.  *
  191.  */
  192. void CHXAvViewBase::FinishViewActivateL()
  193. {
  194. }
  195. /*
  196.  * HandleCommandL
  197.  * --------------
  198.  * Handle the command by passing it the UI.
  199.  *
  200.  */
  201. void CHXAvViewBase::HandleCommandL(TInt command)
  202. {
  203.     m_playerUI->HandleCommandL(command);
  204. }
  205. ////////////////////////////////////////
  206. //
  207. void CHXAvViewBase::ClosePopupMenu()
  208. {
  209.     if( m_pMenuPopup )
  210.     {
  211.         m_pMenuPopup->StopDisplayingMenuBar();
  212.         AppUi()->RemoveFromViewStack(*this, m_pMenuPopup.Ptr());
  213.         m_pMenuPopup = 0;
  214.     }
  215. }
  216. ////////////////////////////////////////
  217. //
  218. void CHXAvViewBase::ShowPopupMenuL(TInt idRes)
  219. {
  220.     ClosePopupMenu();
  221.     m_pMenuPopup = new(ELeave) CEikMenuBar;
  222.     TRAPD( err, ShowPopupMenuHelperL(idRes) );
  223.     if(err != KErrNone)
  224.     {
  225.         ClosePopupMenu();
  226.         HXSYM_LEAVE(err);
  227.     }
  228. }
  229. ////////////////////////////////////////
  230. //
  231. void CHXAvViewBase::ShowPopupMenuHelperL(TInt idRes )
  232. {
  233.     m_pMenuPopup->ConstructL( this, 0, idRes );
  234.     AppUi()->AddToViewStackL( *this, m_pMenuPopup.Ptr(), ECoeStackPriorityMenu, ECoeStackFlagRefusesFocus );
  235.     m_pMenuPopup->TryDisplayMenuBarL();
  236. }
  237. ///////////////////////////////////
  238. // calling CAknTitlePane::SetTextToDefaultL() results in title
  239. // being set from long caption from caption resource; initially
  240. // overridden app title is shown and that is what we really want
  241. // to restore to
  242. //
  243. void CHXAvViewBase::SetDefaultAppTitleL()
  244. {
  245.     TResourceReader reader;
  246.     iCoeEnv->CreateResourceReaderLC(reader, R_AVP_OVERRIDEN_APP_NAME);
  247.     m_titlePane->SetFromResourceL(reader);
  248.     CleanupStack::PopAndDestroy(); // reader
  249. }
  250. ////////////////////////////////////////
  251. // normally called when new view is activating
  252. void CHXAvViewBase::RestoreDefaultNaviPaneL()
  253. {
  254.     m_naviPane->PushDefaultL();
  255. }
  256. ////////////////////////////////////////
  257. // hook to make menu go away
  258. void CHXAvViewBase::ProcessCommandL(TInt cmd)
  259. {
  260.     ClosePopupMenu();
  261.     CAknView::ProcessCommandL(cmd);
  262. }