chxavselectsettingsviewwindow.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:7k
源码类别:
Symbian
开发平台:
C/C++
- /************************************************************************
- * chxavselectsettingsviewwindow.cpp
- * ---------------------------------
- *
- * Synopsis:
- * Implementation for window for the CHXAvSelectSettingsView view.
- *
- *
- * Target:
- * Symbian OS
- *
- *
- * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
- *
- ************************************************************************/
- // Symbian includes...
- #include <eikclbd.h>
- #include <eikclb.h>
- #include <akntitle.h>
- #include <aknlists.h>
- #include <AknGrid.h>
- // Includes from this project...
- #include "chxavmisc.h"
- #include "chxavselectsettingsview.h"
- #include "chxavselectsettingsviewwindow.h"
- #include "chxavcleanstring.h"
- #include "realplayer.hrh"
- #include "hxsym_debug.h"
- #include "chxavcleanupstack.h"
- #include "realplayer.rsg"
- #include "player_uids.h"
- #include "realplayer.mbg"
- #include "help/r1p.hlp.hrh"
- ///////////////////////////////////
- // ctor
- CHXAvSelectSettingsViewWindow::CHXAvSelectSettingsViewWindow(CHXAvSelectSettingsView* pView)
- : m_wpView(pView)
- {
- }
- ///////////////////////////////////
- // dtor
- CHXAvSelectSettingsViewWindow::~CHXAvSelectSettingsViewWindow()
- {
- }
- ////////////////////////////////////////////////////////////
- //
- void CHXAvSelectSettingsViewWindow::ConstructL(const TRect& rc, TInt idxInit)
- {
- CEikStatusPane* pStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
- CAknTitlePane* pTitlePane
- = static_cast<CAknTitlePane*>(
- pStatusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
- pTitlePane->SetTextL(CHXAvCleanString(R_SETTINGS_TITLE_MAIN)());
- CreateWindowL();
- SetRect(rc);
- ShowMainSelectionListBoxL(idxInit);
- ActivateL();
- DrawNow();
- }
- ////////////////////////////////////////////////////////////
- //
- void CHXAvSelectSettingsViewWindow::AddItemHelperL(CDesCArrayFlat* pItems, TInt idxIcon, TInt resId) const
- {
- HBufC* pEntry = CHXAvMisc::AllocGrListItemL(CHXAvMisc::Single, idxIcon , CHXAvCleanString(resId)());
- AUTO_PUSH_POP_DEL(pEntry);
- pItems->AppendL(*pEntry);
- }
- ////////////////////////////////////////////////////////////
- //
- CDesCArrayFlat* CHXAvSelectSettingsViewWindow::AllocListItemsL() const
- {
- CDesCArrayFlat* pItems = new (ELeave) CDesCArrayFlat(20 /*granularity*/);
- AUTO_PUSH_POP(pItems); // out
- AddItemHelperL(pItems, 0, R_SETTINGS_TAB_VIDEO);
- AddItemHelperL(pItems, 1, R_SETTINGS_TAB_PLAYBACK);
- AddItemHelperL(pItems, 2, R_SETTINGS_TAB_NETWORK);
- AddItemHelperL(pItems, 3, R_SETTINGS_TAB_PROXY);
- #if defined(HELIX_FEATURE_DPRINTF)
- AddItemHelperL(pItems, 4, R_SETTINGS_TAB_DEBUG);
- #endif
- return pItems;
- }
- ////////////////////////////////////////////////////////////
- // 42 X 29 (their folder = 42 x 36; mark icon = 13 x 13) for large icons
- void CHXAvSelectSettingsViewWindow::SetMainSelectionListBoxIconsL()
- {
- HX_ASSERT(m_spCategoryListBox);
- CHXAvMisc::ImageInfo const settingsMainListIcons[] =
- {
- { EMbmRealplayerQgn_prop_sett_video_sub, EMbmRealplayerQgn_prop_sett_video_sub_mask },
- { EMbmRealplayerQgn_prop_sett_playback_sub, EMbmRealplayerQgn_prop_sett_playback_sub_mask },
- { EMbmRealplayerQgn_prop_sett_network_sub, EMbmRealplayerQgn_prop_sett_network_sub_mask },
- { EMbmRealplayerQgn_prop_sett_proxy_sub, EMbmRealplayerQgn_prop_sett_proxy_sub_mask },
- { EMbmRealplayerQgn_prop_media_sub, EMbmRealplayerQgn_prop_media_sub_mask } // debug arbitrary
- };
- CAknIconArray* pIcons = CHXAvMisc::AllocIconsL(settingsMainListIcons, ARRAY_COUNT(settingsMainListIcons));
- AUTO_PUSH_POP(pIcons);
- // CEikColumnListBox: // transfer icon array ownership to list box
- m_spCategoryListBox->ItemDrawer()->ColumnData()->SetIconArray(pIcons);
- }
- ////////////////////////////////////////////
- // MEikListBoxObserver; called when something happens with main selection list
- void CHXAvSelectSettingsViewWindow::HandleListBoxEventL(CEikListBox* /*aListBox*/,TListBoxEvent aEventType)
- {
- if( aEventType == MEikListBoxObserver::EEventEnterKeyPressed ||
- aEventType == MEikListBoxObserver::EEventItemClicked )
- {
- DPRINTF(SYMP_WSEVENTS, ("CHXAvSelectSettingsViewWindow::HandleListBoxEventL()n: click!"));
- m_wpView->HandleCommandL(EOpenSettings);
- }
- }
- ////////////////////////////////////////////
- //
- TInt CHXAvSelectSettingsViewWindow::GetCurrentSelectionIndex() const
- {
- TInt idx = -1;
- if( m_spCategoryListBox )
- {
- idx = m_spCategoryListBox->CurrentItemIndex();
- }
- return idx;
- }
- ////////////////////////////////////////////////////////////////////
- // (re-)create the main selection list box for selecting settings
- // category
- //
- void CHXAvSelectSettingsViewWindow::ShowMainSelectionListBoxL(TInt idxInit)
- {
- //
- // list entries for 'CAknSingleLargeStyleListBox' should look like:
- //
- // {idxIcon}t{text}
- //
- m_spCategoryListBox = new (ELeave) CAknSingleLargeStyleListBox();
- const TInt flags = EAknListBoxSelectionList;
- m_spCategoryListBox->ConstructL(this, flags);
- m_spCategoryListBox->SetMopParent(this);
- SetMainSelectionListBoxIconsL();
- // create and add listbox contents
- CDesCArrayFlat* pItems = AllocListItemsL();
- AUTO_PUSH_POP(pItems);
- CTextListBoxModel* pModel = m_spCategoryListBox->Model();
- pModel->SetItemTextArray(pItems);
- pModel->SetOwnershipType(ELbmOwnsItemArray);
- m_spCategoryListBox->CreateScrollBarFrameL( ETrue );
- m_spCategoryListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
- m_spCategoryListBox->SetListBoxObserver(this);
- m_spCategoryListBox->HandleItemAdditionL();
- m_spCategoryListBox->Reset();
- m_spCategoryListBox->SetCurrentItemIndex(idxInit);
- m_spCategoryListBox->MakeVisible(ETrue);
- m_spCategoryListBox->SetRect(Rect());
- m_spCategoryListBox->ActivateL();
- CHXAvMisc::UpdateScrollBar(m_spCategoryListBox.Ptr());
- }
- ////////////////////////////////////////////
- //
- void CHXAvSelectSettingsViewWindow::UpdateTopAndBottomL()
- {
- CHXAvMisc::UpdateScrollBar(m_spCategoryListBox.Ptr());
- }
- ////////////////////////////////////////////
- // CCoeControl
- CCoeControl* CHXAvSelectSettingsViewWindow::ComponentControl( TInt aIndex ) const
- {
- HX_ASSERT(aIndex == 0);
- return m_spCategoryListBox.Ptr();
- }
- ////////////////////////////////////////////
- // CCoeControl
- TInt CHXAvSelectSettingsViewWindow::CountComponentControls() const
- {
- return m_spCategoryListBox ? 1 : 0;
- }
- ////////////////////////////////////////////
- // CCoeControl
- void CHXAvSelectSettingsViewWindow::SizeChanged()
- {
- TRect rc = Rect();
- if(m_spCategoryListBox)
- {
- m_spCategoryListBox->SetRect(rc);
- }
- }
- ////////////////////////////////////////////
- // CCoeControl
- void CHXAvSelectSettingsViewWindow::GetHelpContext(TCoeHelpContext& aContext) const
- {
- aContext = TCoeHelpContext( CHXAvMisc::KHelpUID, KRP_HLP_SETTINGS );
- }
- //////////////////////////////////////
- // CCoeControl
- TKeyResponse CHXAvSelectSettingsViewWindow::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
- {
- // XXXLCM is there a better way to hook up the list box to get events? control stack?
- TKeyResponse response = EKeyWasNotConsumed;
- if( m_spCategoryListBox )
- {
- response = m_spCategoryListBox->OfferKeyEventL(aKeyEvent, aType);
- }
- return response;
- }