chxavsettingsviewwindow.cpp
来自「symbian 下的helix player源代码」· C++ 代码 · 共 406 行
CPP
406 行
/************************************************************************
* chxavsettingsviewwindow.h
* -------------------------
*
* Synopsis:
* Contains the declaration of the setting view window.
* This window entering/altering player settings.
*
* Target:
* Symbian OS
*
*
* (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
*
************************************************************************/
// Symbian includes...
#include <aknlists.h>
#include <akntabgrp.h>
#include <aknnavide.h>
#include <akntitle.h>
#include <aknsfld.h>
#include <aknutils.h>
#include <aknselectionlist.h>
#include <barsread.h> //TResourceReader
// Includes from this project...
#include "chxavmisc.h"
#include "chxavplayer.h"
#include "chxavsettingslist.h"
#include "chxavsettingsview.h"
#include "chxavfileutil.h"
#include "chxavplayerui.h"
#include "chxavcleanstring.h"
#include "chxavsettingsviewwindow.h"
#include "realplayer.hrh"
#include "player_uids.h"
#include "hxsym_debug.h"
#include "hxsym_leaveutil.h"
#include "realplayer.mbg"
#include "help/r1p.hlp.hrh"
CHXAvSettingsViewWindow::CHXAvSettingsViewWindow(CHXAvSettingsView* pView)
: m_pNaviPane(0)
, m_pDecoratedTabGroup(0)
, m_pTitlePane(0)
, m_pTabGroup(0)
, m_pView(pView)
{
HX_ASSERT(pView != NULL);
// Grab a pointer to preferences here...
CHXAvPlayerUI *playerUI = pView->GetPlayerUI();
HX_ASSERT(playerUI);
CHXClientEngineManagerPtr spClientEngine = playerUI->GetClientEngineManager();
m_prefs = spClientEngine->GetPrefs();
m_factory = spClientEngine->GetFactory();
}
CHXAvSettingsViewWindow::~CHXAvSettingsViewWindow()
{
CleanUpTabs();
}
////////////////////////////////////////////////////////////
//
void CHXAvSettingsViewWindow::CleanUpTabs()
{
if( m_pNaviPane )
{
if(m_pDecoratedTabGroup)
{
m_pNaviPane->Pop(m_pDecoratedTabGroup);
}
m_pNaviPane = 0; // we don't own
}
HX_DELETE(m_pDecoratedTabGroup);
m_pTabGroup = 0;
}
////////////////////////////////////////////////////////////
// update config so it reflects all changes made
// to current data model
//
void CHXAvSettingsViewWindow::ApplyChangesL()
{
if( m_spList )
{
m_spList->StoreSettingsL();
}
HX_ASSERT(m_spData);
if(m_spData)
{
m_spData->UpdatePreferencesL();
}
}
////////////////////////////////////////////////////////////
//
void CHXAvSettingsViewWindow::ConstructL(const TRect& rc, TInt idxInitTab)
{
CEikStatusPane* pStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
m_pTitlePane
= static_cast<CAknTitlePane*>(
pStatusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
m_pNaviPane
= static_cast<CAknNavigationControlContainer*>(
pStatusPane->ControlL(TUid::Uid(EEikStatusPaneUidNavi)));
CreateWindowL();
SetRect(rc);
CreateTabsL(idxInitTab);
HX_ASSERT(idxInitTab == m_pTabGroup->ActiveTabIndex());
ShowPageL(idxInitTab);
ActivateL();
}
////////////////////////////////////////////////////////////
//
void CHXAvSettingsViewWindow::CreateTabsL(TInt idxInitTab)
{
HX_ASSERT(m_pNaviPane != 0);
HX_ASSERT(0 == m_pDecoratedTabGroup);
m_pDecoratedTabGroup = m_pNaviPane->CreateTabGroupL();
m_pTabGroup
= static_cast<CAknTabGroup*>(m_pDecoratedTabGroup->DecoratedControl());
m_pTabGroup->SetTabFixedWidthL(EAknTabWidthWithFourTabs);
//
// create tabs
//
TFileName* pImageFilePath = CHXAvFile::AllocAppFolderPathL(CHXAvUtil::KImagesMBMName);
AUTO_PUSH_POP_DEL(pImageFilePath);
CHXAvMisc::AddTabL(m_pTabGroup, *pImageFilePath,
EAVPSetVideoTab,
EMbmRealplayerQgn_prop_sett_video_tab,
EMbmRealplayerQgn_prop_sett_video_tab_mask);
CHXAvMisc::AddTabL(m_pTabGroup, *pImageFilePath,
EAVPSetPlaybackTab,
EMbmRealplayerQgn_prop_sett_playback_tab,
EMbmRealplayerQgn_prop_sett_playback_tab_mask);
CHXAvMisc::AddTabL(m_pTabGroup, *pImageFilePath,
EAVPSetNetworkTab,
EMbmRealplayerQgn_prop_sett_network_tab,
EMbmRealplayerQgn_prop_sett_network_tab_mask);
CHXAvMisc::AddTabL(m_pTabGroup, *pImageFilePath,
EAVPSetProxyTab,
EMbmRealplayerQgn_prop_sett_proxy_tab,
EMbmRealplayerQgn_prop_sett_proxy_tab_mask);
#if defined(HELIX_FEATURE_DPRINTF)
m_pTabGroup->AddTabL(EAVPSetDebugTab, _L("D"));
#endif
m_pTabGroup->SetActiveTabByIndex(idxInitTab);
m_pNaviPane->PushL(*m_pDecoratedTabGroup);
}
////////////////////////////////////////////
//
void CHXAvSettingsViewWindow::UpdateTopAndBottomL()
{
UpdateNaviPaneL();
if(m_spList)
{
CHXAvMisc::UpdateScrollBar(m_spList->ListBox());
}
}
////////////////////////////////////////////////////////////////////
//
void CHXAvSettingsViewWindow::ShowPageL(TInt idxPage)
{
TInt idTab = m_pTabGroup->TabIdFromIndex(idxPage);
TInt resID = -1;
TInt titleResId = -1;
m_spList = 0;
switch( idTab )
{
case EAVPSetPlaybackTab:
resID = R_AVP_PLAYBACK_SETTINGS_LIST;
titleResId = R_SETTINGS_TITLE_PLAYBACK;
m_spData = new (ELeave) CHXAvSettingsDataPlayback(m_factory, m_prefs);
break;
case EAVPSetVideoTab:
resID = R_AVP_VIDEO_SETTINGS_LIST;
titleResId = R_SETTINGS_TITLE_VIDEO;
m_spData = new (ELeave) CHXAvSettingsDataVideo(m_factory,m_prefs);
break;
case EAVPSetNetworkTab:
resID = R_AVP_NETWORK_SETTINGS_LIST;
titleResId = R_SETTINGS_TITLE_NETWORK;
m_spData = new (ELeave) CHXAvSettingsDataNetwork(m_factory,m_prefs);
break;
case EAVPSetProxyTab:
resID = R_AVP_PROXY_SETTINGS_LIST;
titleResId = R_SETTINGS_TITLE_PROXY;
m_spData = new (ELeave) CHXAvSettingsDataProxy(m_factory,m_prefs);
break;
#if defined(HELIX_FEATURE_DPRINTF)
case EAVPSetDebugTab:
resID = R_AVP_DEBUG_SETTINGS_LIST;
titleResId = R_SETTINGS_TITLE_DEBUG;
m_spData = new (ELeave) CHXAvSettingsDataDebug(m_factory,m_prefs);
break;
#endif
default:
HX_ASSERT(false);
}
m_spData->InitValuesFromPreferencesL();
// set the title
m_pTitlePane->SetTextL(CHXAvCleanString(titleResId)());
// create the list box for current tab view
m_spList = new (ELeave) CHXAvSettingsList(m_spData);
m_spList->SetMopParent(this);
m_spList->ConstructFromResourceL(resID);
m_spList->OnPostConstructL();
//
// create a scrollbar
//
CEikFormattedCellListBox* pListBox = m_spList->ListBox();
pListBox->CreateScrollBarFrameL( ETrue );
CEikScrollBarFrame* pFrame = pListBox->ScrollBarFrame();
pFrame->SetScrollBarVisibilityL(
CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
m_spList->MakeVisible(ETrue);
TRect rc = Rect();
rc.Move(Position());
m_spList->SetRect(rc);
m_spList->ActivateL();
CHXAvMisc::UpdateScrollBar(m_spList->ListBox());
DrawNow();
}
////////////////////////////////////////////////////////////////////
//
void CHXAvSettingsViewWindow::UpdateNaviPaneL()
{
DPRINTF(SYMP_INFO, ("CHXAvSettingsViewWindow::UpdateNaviPaneL()\n"));
if( m_pNaviPane && m_pDecoratedTabGroup)
{
m_pNaviPane->PushL(*m_pDecoratedTabGroup);
}
}
////////////////////////////////////////////////////////////////////
//
TInt CHXAvSettingsViewWindow::GetCurrentPageIndex() const
{
TInt idxTab = -1;
if( m_pTabGroup)
{
idxTab = m_pTabGroup->ActiveTabIndex();
}
return idxTab;
}
////////////////////////////////////////////////////////////////////
//
void CHXAvSettingsViewWindow::EditCurrentItemL()
{
HX_ASSERT(m_spList);
TInt idx = m_spList->ListBox()->CurrentItemIndex();
if( idx != -1)
{
CAknSettingItemArray* pArray = m_spList->SettingItemArray();
TInt idxVisible = (*pArray)[idx]->VisibleIndex();
m_spList->EditItemL(idxVisible, ETrue);
}
}
////////////////////////////////////////////
// CCoeControl
CCoeControl* CHXAvSettingsViewWindow::ComponentControl( TInt aIndex ) const
{
HX_ASSERT(aIndex == 0);
return m_spList.Ptr();
}
////////////////////////////////////////////
// CCoeControl
TInt CHXAvSettingsViewWindow::CountComponentControls() const
{
return m_spList ? 1 : 0;
}
////////////////////////////////////////////
// CCoeControl
void CHXAvSettingsViewWindow::SizeChanged()
{
TRect rc = Rect();
if(m_spList)
{
m_spList->SetRect(rc);
}
}
////////////////////////////////////////////
// CCoeControl
void CHXAvSettingsViewWindow::GetHelpContext(TCoeHelpContext& aContext) const
{
HX_ASSERT(m_pTabGroup);
TInt idxTab = m_pTabGroup->ActiveTabIndex();
TInt idTab = m_pTabGroup->TabIdFromIndex(idxTab);
TPtrC ptr(KRP_HLP_SETTINGS);
switch( idTab )
{
case EAVPSetPlaybackTab:
ptr.Set(KRP_HLP_SETT_PLAYBACK);
break;
case EAVPSetVideoTab:
ptr.Set(KRP_HLP_SETT_VIDEO);
break;
case EAVPSetNetworkTab:
ptr.Set(KRP_HLP_SETT_NETWORK);
break;
case EAVPSetProxyTab:
ptr.Set(KRP_HLP_SETT_PROXY);
break;
default:
ptr.Set(KRP_HLP_SETTINGS);
break;
}
aContext = TCoeHelpContext( CHXAvMisc::KHelpUID, ptr );
}
////////////////////////////////////////////////////////////////////
//
TKeyResponse CHXAvSettingsViewWindow::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
TKeyResponse response = EKeyWasNotConsumed;
if( aType == EEventKey )
{
switch( aKeyEvent.iCode )
{
case EKeyLeftArrow:
case EKeyRightArrow:
// these go to tab control
if( m_pTabGroup )
{
if( EKeyWasConsumed == m_pTabGroup->OfferKeyEventL(aKeyEvent, aType) )
{
// save changes made to current settings list...
ApplyChangesL();
TInt idxTab = m_pTabGroup->ActiveTabIndex();
ShowPageL(idxTab);
response = EKeyWasConsumed;
}
}
break;
default:
// everything else goes to list
if( m_spList )
{
response = m_spList->OfferKeyEventL(aKeyEvent, aType);
}
break;
}
}
return response;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?