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

Symbian

开发平台:

Visual C++

  1. /************************************************************************
  2.  * chxavsettingsviewwindow.h
  3.  * -------------------------
  4.  *
  5.  * Synopsis:
  6.  * Contains the declaration of the setting view window.  
  7.  * This window entering/altering player settings.
  8.  *
  9.  * Target:
  10.  * Symbian OS
  11.  *
  12.  *
  13.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  14.  *
  15.  ************************************************************************/ 
  16. // Symbian includes...
  17. #include <aknlists.h>
  18. #include <akntabgrp.h>
  19. #include <aknnavide.h>
  20. #include <akntitle.h>
  21. #include <aknsfld.h>
  22. #include <aknutils.h>
  23. #include <aknselectionlist.h>
  24. #include <barsread.h> //TResourceReader
  25. // Includes from this project...
  26. #include "chxavmisc.h"
  27. #include "chxavplayer.h"
  28. #include "chxavsettingslist.h"
  29. #include "chxavsettingsview.h"
  30. #include "chxavfileutil.h"
  31. #include "chxavplayerui.h"
  32. #include "chxavcleanstring.h"
  33. #include "chxavsettingsviewwindow.h"
  34. #include "realplayer.hrh"
  35. #include "player_uids.h"
  36. #include "hxsym_debug.h"
  37. #include "hxsym_leaveutil.h"
  38. #include "realplayer.mbg"
  39. #include "help/r1p.hlp.hrh"
  40. CHXAvSettingsViewWindow::CHXAvSettingsViewWindow(CHXAvSettingsView* pView)
  41. : m_pNaviPane(0)
  42. , m_pDecoratedTabGroup(0)
  43. , m_pTitlePane(0)
  44. , m_pTabGroup(0)
  45. , m_pView(pView)
  46. {
  47.     HX_ASSERT(pView != NULL);
  48.     
  49.     // Grab a pointer to preferences here...
  50.     CHXAvPlayerUI *playerUI = pView->GetPlayerUI();
  51.     HX_ASSERT(playerUI);
  52.     
  53.     CHXClientEngineManagerPtr spClientEngine = playerUI->GetClientEngineManager();
  54.     
  55.     m_prefs = spClientEngine->GetPrefs();
  56.     m_factory = spClientEngine->GetFactory();
  57.    
  58. }
  59. CHXAvSettingsViewWindow::~CHXAvSettingsViewWindow()
  60. {
  61.     CleanUpTabs();
  62. }
  63. ////////////////////////////////////////////////////////////
  64. //
  65. void CHXAvSettingsViewWindow::CleanUpTabs()
  66. {
  67.     if( m_pNaviPane )
  68.     {
  69.         if(m_pDecoratedTabGroup)
  70.         {
  71.     m_pNaviPane->Pop(m_pDecoratedTabGroup);
  72.         }
  73. m_pNaviPane = 0; // we don't own
  74.     }
  75.     HX_DELETE(m_pDecoratedTabGroup);
  76.     m_pTabGroup = 0;
  77. }
  78. ////////////////////////////////////////////////////////////
  79. // update config so it reflects all changes made 
  80. // to current data model
  81. //
  82. void CHXAvSettingsViewWindow::ApplyChangesL()
  83. {
  84.     if( m_spList )
  85.     {
  86. m_spList->StoreSettingsL();
  87.     }
  88.     HX_ASSERT(m_spData);
  89.     if(m_spData)
  90.     {
  91.         m_spData->UpdatePreferencesL();
  92.     }
  93. }
  94. ////////////////////////////////////////////////////////////
  95. //
  96. void CHXAvSettingsViewWindow::ConstructL(const TRect& rc, TInt idxInitTab)
  97. {
  98.     CEikStatusPane* pStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
  99.     
  100.     m_pTitlePane
  101. = static_cast<CAknTitlePane*>(
  102. pStatusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
  103.     
  104.     m_pNaviPane 
  105. = static_cast<CAknNavigationControlContainer*>(
  106. pStatusPane->ControlL(TUid::Uid(EEikStatusPaneUidNavi)));
  107.     CreateWindowL();
  108.     SetRect(rc);
  109.     CreateTabsL(idxInitTab);
  110.     HX_ASSERT(idxInitTab == m_pTabGroup->ActiveTabIndex());
  111.     ShowPageL(idxInitTab);
  112.     ActivateL();
  113. }
  114. ////////////////////////////////////////////////////////////
  115. //
  116. void CHXAvSettingsViewWindow::CreateTabsL(TInt idxInitTab)
  117. {
  118.     HX_ASSERT(m_pNaviPane != 0);
  119.     HX_ASSERT(0 == m_pDecoratedTabGroup);
  120.     m_pDecoratedTabGroup = m_pNaviPane->CreateTabGroupL();
  121.     m_pTabGroup 
  122.     = static_cast<CAknTabGroup*>(m_pDecoratedTabGroup->DecoratedControl());
  123.     m_pTabGroup->SetTabFixedWidthL(EAknTabWidthWithFourTabs);
  124.     //
  125.     // create tabs
  126.     //
  127.     TFileName* pImageFilePath = CHXAvFile::AllocAppFolderPathL(CHXAvUtil::KImagesMBMName);
  128.     AUTO_PUSH_POP_DEL(pImageFilePath);
  129.     CHXAvMisc::AddTabL(m_pTabGroup, *pImageFilePath, 
  130. EAVPSetVideoTab,  
  131. EMbmRealplayerQgn_prop_sett_video_tab, 
  132. EMbmRealplayerQgn_prop_sett_video_tab_mask);
  133.     CHXAvMisc::AddTabL(m_pTabGroup, *pImageFilePath, 
  134. EAVPSetPlaybackTab,  
  135. EMbmRealplayerQgn_prop_sett_playback_tab, 
  136. EMbmRealplayerQgn_prop_sett_playback_tab_mask);
  137.     CHXAvMisc::AddTabL(m_pTabGroup, *pImageFilePath, 
  138. EAVPSetNetworkTab,  
  139. EMbmRealplayerQgn_prop_sett_network_tab, 
  140. EMbmRealplayerQgn_prop_sett_network_tab_mask);
  141.     CHXAvMisc::AddTabL(m_pTabGroup, *pImageFilePath, 
  142. EAVPSetProxyTab,  
  143. EMbmRealplayerQgn_prop_sett_proxy_tab, 
  144. EMbmRealplayerQgn_prop_sett_proxy_tab_mask);
  145.     
  146. #if defined(HELIX_FEATURE_DPRINTF)
  147.     m_pTabGroup->AddTabL(EAVPSetDebugTab, _L("D"));
  148. #endif
  149.     
  150.     m_pTabGroup->SetActiveTabByIndex(idxInitTab);
  151.     m_pNaviPane->PushL(*m_pDecoratedTabGroup);
  152. }
  153. ////////////////////////////////////////////
  154. //
  155. void CHXAvSettingsViewWindow::UpdateTopAndBottomL()
  156. {
  157.     UpdateNaviPaneL();
  158.     if(m_spList)
  159.     {
  160.         CHXAvMisc::UpdateScrollBar(m_spList->ListBox());
  161.     }
  162. }
  163. ////////////////////////////////////////////////////////////////////
  164. //
  165. void CHXAvSettingsViewWindow::ShowPageL(TInt idxPage)
  166. {
  167.     TInt idTab = m_pTabGroup->TabIdFromIndex(idxPage);
  168.     TInt resID = -1;
  169.     TInt titleResId = -1;
  170.     m_spList = 0;
  171.     switch( idTab )
  172.     {
  173.     case EAVPSetPlaybackTab:
  174. resID = R_AVP_PLAYBACK_SETTINGS_LIST;
  175. titleResId = R_SETTINGS_TITLE_PLAYBACK;
  176.         m_spData = new (ELeave) CHXAvSettingsDataPlayback(m_factory, m_prefs);
  177. break;
  178.     case EAVPSetVideoTab:
  179. resID = R_AVP_VIDEO_SETTINGS_LIST;
  180. titleResId = R_SETTINGS_TITLE_VIDEO;
  181.         m_spData = new (ELeave) CHXAvSettingsDataVideo(m_factory,m_prefs);
  182. break;
  183.     case EAVPSetNetworkTab:
  184. resID = R_AVP_NETWORK_SETTINGS_LIST;
  185. titleResId = R_SETTINGS_TITLE_NETWORK;
  186.         m_spData = new (ELeave) CHXAvSettingsDataNetwork(m_factory,m_prefs);
  187. break;
  188.     case EAVPSetProxyTab:
  189. resID = R_AVP_PROXY_SETTINGS_LIST;
  190. titleResId = R_SETTINGS_TITLE_PROXY;
  191.         m_spData = new (ELeave) CHXAvSettingsDataProxy(m_factory,m_prefs);
  192. break;
  193. #if defined(HELIX_FEATURE_DPRINTF)
  194.     case EAVPSetDebugTab:
  195. resID = R_AVP_DEBUG_SETTINGS_LIST;
  196. titleResId = R_SETTINGS_TITLE_DEBUG;
  197.         m_spData = new (ELeave) CHXAvSettingsDataDebug(m_factory,m_prefs);
  198. break;
  199. #endif
  200.     default:
  201.         HX_ASSERT(false);
  202.     }
  203.     m_spData->InitValuesFromPreferencesL();
  204.     // set the title
  205.     m_pTitlePane->SetTextL(CHXAvCleanString(titleResId)());
  206.   
  207.     // create the list box for current tab view
  208.     m_spList = new (ELeave) CHXAvSettingsList(m_spData);
  209.     m_spList->SetMopParent(this);
  210.     m_spList->ConstructFromResourceL(resID); 
  211.     m_spList->OnPostConstructL();
  212.  
  213.     //
  214.     // create a scrollbar
  215.     //
  216.     CEikFormattedCellListBox* pListBox = m_spList->ListBox();
  217.     
  218.     pListBox->CreateScrollBarFrameL( ETrue );
  219.     CEikScrollBarFrame* pFrame = pListBox->ScrollBarFrame();
  220.     pFrame->SetScrollBarVisibilityL(
  221. CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
  222.   
  223.     m_spList->MakeVisible(ETrue);
  224.   
  225.     TRect rc = Rect();
  226.     rc.Move(Position());
  227.     m_spList->SetRect(rc);
  228.     m_spList->ActivateL();
  229.     CHXAvMisc::UpdateScrollBar(m_spList->ListBox());
  230.     DrawNow();
  231. }
  232. ////////////////////////////////////////////////////////////////////
  233. //
  234. void CHXAvSettingsViewWindow::UpdateNaviPaneL()
  235. {
  236.     DPRINTF(SYMP_INFO, ("CHXAvSettingsViewWindow::UpdateNaviPaneL()n"));
  237.     if( m_pNaviPane && m_pDecoratedTabGroup)
  238.     {
  239.         m_pNaviPane->PushL(*m_pDecoratedTabGroup);
  240.     }
  241. }
  242. ////////////////////////////////////////////////////////////////////
  243. //
  244. TInt CHXAvSettingsViewWindow::GetCurrentPageIndex() const
  245. {
  246.     TInt idxTab = -1;
  247.     if( m_pTabGroup)
  248.     {
  249.         idxTab = m_pTabGroup->ActiveTabIndex();
  250.     }
  251.     return idxTab;
  252. }
  253. ////////////////////////////////////////////////////////////////////
  254. //
  255. void CHXAvSettingsViewWindow::EditCurrentItemL()
  256. {
  257.     HX_ASSERT(m_spList);
  258.     TInt idx = m_spList->ListBox()->CurrentItemIndex();
  259.     if( idx != -1)
  260.     {
  261. CAknSettingItemArray* pArray = m_spList->SettingItemArray();
  262. TInt idxVisible = (*pArray)[idx]->VisibleIndex();
  263. m_spList->EditItemL(idxVisible, ETrue);
  264.     }
  265. }
  266. ////////////////////////////////////////////
  267. // CCoeControl
  268. CCoeControl* CHXAvSettingsViewWindow::ComponentControl( TInt aIndex ) const
  269. {
  270.     HX_ASSERT(aIndex == 0);
  271.     return m_spList.Ptr();
  272. }
  273. ////////////////////////////////////////////
  274. // CCoeControl
  275. TInt CHXAvSettingsViewWindow::CountComponentControls() const
  276. {
  277.     return m_spList ? 1 : 0;
  278. }
  279. ////////////////////////////////////////////
  280. // CCoeControl
  281. void CHXAvSettingsViewWindow::SizeChanged()
  282. {
  283.     TRect rc = Rect();
  284.     if(m_spList)
  285.     {
  286. m_spList->SetRect(rc);
  287.     }  
  288. }
  289. ////////////////////////////////////////////
  290. // CCoeControl
  291. void CHXAvSettingsViewWindow::GetHelpContext(TCoeHelpContext& aContext) const
  292. {
  293.     HX_ASSERT(m_pTabGroup);
  294.     
  295.     TInt idxTab = m_pTabGroup->ActiveTabIndex();
  296.     TInt idTab = m_pTabGroup->TabIdFromIndex(idxTab);
  297.     
  298.     TPtrC ptr(KRP_HLP_SETTINGS);
  299.     switch( idTab )
  300.     {
  301.     case EAVPSetPlaybackTab:
  302.         ptr.Set(KRP_HLP_SETT_PLAYBACK);
  303. break;
  304.     case EAVPSetVideoTab:
  305.         ptr.Set(KRP_HLP_SETT_VIDEO);
  306. break;
  307.     case EAVPSetNetworkTab:
  308.         ptr.Set(KRP_HLP_SETT_NETWORK);
  309. break;
  310.     case EAVPSetProxyTab:
  311.         ptr.Set(KRP_HLP_SETT_PROXY);
  312. break;
  313.     default:
  314.         ptr.Set(KRP_HLP_SETTINGS);
  315.         break;
  316.     }
  317.     aContext = TCoeHelpContext( CHXAvMisc::KHelpUID, ptr );
  318. }
  319. ////////////////////////////////////////////////////////////////////
  320. //
  321. TKeyResponse CHXAvSettingsViewWindow::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
  322. {
  323.     TKeyResponse response = EKeyWasNotConsumed;
  324.     if( aType == EEventKey )
  325.     {
  326. switch( aKeyEvent.iCode )
  327. {
  328. case EKeyLeftArrow:
  329. case EKeyRightArrow:
  330.     // these go to tab control 
  331.     if( m_pTabGroup )
  332.     {
  333. if( EKeyWasConsumed == m_pTabGroup->OfferKeyEventL(aKeyEvent, aType) )
  334. {
  335.                     // save changes made to current settings list...
  336.                     ApplyChangesL();
  337.     TInt idxTab = m_pTabGroup->ActiveTabIndex();
  338.     ShowPageL(idxTab);
  339.     response = EKeyWasConsumed;
  340. }
  341.     }
  342.     break;
  343. default:
  344.     // everything else goes to list
  345.     if( m_spList )
  346.     {
  347. response = m_spList->OfferKeyEventL(aKeyEvent, aType);
  348.     }
  349.     break;
  350. }
  351.     }
  352.     return response;
  353. }