chxavplaylistnavicontrol.cpp

来自「symbian 下的helix player源代码」· C++ 代码 · 共 170 行

CPP
170
字号
/*============================================================================*
 *
 * (c) 1995-2002 RealNetworks, Inc. Patents pending. All rights reserved.
 *
 *============================================================================*/

/*

   Description: 

   draws and manages navi pane area shown during playlist navigate state

*/
#include <aknutils.h>
#include "chxavmisc.h"
#include "chxavcleanupstack.h"
#include "chxavcleanstring.h"

#include "hxsym_debug.h"

#include "chxavplaylistnavicontrol.h"


////////////////////////////////
//
CHXAvPlaylistNaviControl* CHXAvPlaylistNaviControl::NewL(CHXAvPlayer* pPlayer, const CCoeControl& parent)
{
    CHXAvPlaylistNaviControl* pSelf = new(ELeave) CHXAvPlaylistNaviControl();
    AUTO_PUSH_POP(pSelf);
    pSelf->ConstructL(pPlayer, parent);
    return pSelf;
}


///////////////////////////////////
// ctor
CHXAvPlaylistNaviControl::CHXAvPlaylistNaviControl()
{
}

///////////////////////////////////
// dtor
CHXAvPlaylistNaviControl::~CHXAvPlaylistNaviControl()
{
    if(m_spPlayer)
    {
        m_spPlayer->GetPlayerState().RemoveObserver(this);
    }

}

////////////////////////////
//
void CHXAvPlaylistNaviControl::ConstructL(CHXAvPlayer* pPlayer, const CCoeControl& parent)
{
    m_spPlayer = pPlayer;
    m_spPlayer->GetPlayerState().AddObserver(this);

    SetContainerWindowL(parent);
    TRect rc(parent.Rect());
    SetRect(rc);

    // save this; we want to draw over whole navi control (see SizeChanged)
    m_rcParent = rc;


    //
    // playlist text
    //
    const TInt CID_PLAYLIST_TEXT = 1;
    m_spPlaylistText = CHXAvTextControl::NewL(*this, CID_PLAYLIST_TEXT);
    m_spPlaylistText->SetTextColor(KRgbWhite);
    m_spPlaylistText->UpdateFont(LatinBold12());
    m_spPlaylistText->MakeVisible(ETrue);
    m_spPlaylistText->SetRect(rc); // for now

    UpdatePlaylistTextL();
}

//////////////////////////////////////////////
// hide or show playlist menu items depending
// on whether or not a playlist is loaded
void CHXAvPlaylistNaviControl::UpdatePlaylistTextL()
{ 
    bool bHaveRam = m_spPlayer->IsPlaylistLoaded(); 
    if( bHaveRam )
    {
        // 1-based indexes
        TInt idxCount = m_spPlayer->GetPlaylistItemCount();
        TInt idxCurrent = m_spPlayer->GetPlaylistCurrentIndex() + 1;

        CHXAvCleanString playUrl(m_spPlayer->GetPlayURL());
        bool bLocal = CHXAvUtil::IsLocal(playUrl());

        HX_ASSERT(idxCount >= 1 && idxCurrent >= 1);

        if( idxCount > 1 )
        {
            //XXXLCM resource
            _LIT(KLocalClipFormat, "Local clip %d/%d");
            _LIT(KRemoteClipFormat, "Remote clip %d/%d");
            TBuf<40> buf;
            if( bLocal )
            {
                buf.Format(KLocalClipFormat, idxCurrent, idxCount);
            }
            else
            {
                buf.Format(KRemoteClipFormat, idxCurrent, idxCount);
            }

            // determine width needed
            const CFont* pFont = m_spPlaylistText->GetFont();
            TInt cxText = pFont->TextWidthInPixels(buf);

            const TUint CX_RIGHT_BORDER = 2;

            // size rect so text just fits
            TRect rcText = m_rcParent;
            rcText.iBr.iX -= CX_RIGHT_BORDER;
            rcText.iTl.iX = rcText.iBr.iX - cxText;
            if(rcText.iTl.iX < m_rcParent.iTl.iX )
            {
                rcText.iTl.iX = m_rcParent.iTl.iX;
            }    

            m_spPlaylistText->SetRect(rcText);
            m_spPlaylistText->SetText(buf);         
        }
        
    }

}

////////////////////////////////////////
//IHXSymPlayerStateObserver
void CHXAvPlaylistNaviControl::OnAdvancePlaylist()
{      
    UpdatePlaylistTextL();    
    m_spRefreshCmd->Execute();
}

////////////////////////////////////////
//
void 
CHXAvPlaylistNaviControl::Draw(const TRect& /* rect */) const
{
    // don't draw background; navi pane container draws background for us
}

//////////////////////////////
//
// CCoeControl
//
TInt CHXAvPlaylistNaviControl::CountComponentControls() const
{ 
    return 1;
}


//////////////////////////////
//
// CCoeControl
//
CCoeControl* CHXAvPlaylistNaviControl::ComponentControl(TInt aIndex) const
{
    HX_ASSERT(aIndex == 0);
    return m_spPlaylistText.Ptr();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?