⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filebrowsercontainer.cpp

📁 《基于Symbian OS的手机开发与应用实践》这本书的配套源码。
💻 CPP
字号:
/*
* ============================================================================
*  Name     : CFileBrowserContainer from FileBrowserContainer.h
*  Part of  : FileBrowser
*  Created  : 03.05.2005 by ToBeReplacedByAuthorXinyu
*  Implementation notes:
*     Initial content was generated by Series 60 Application Wizard.
*  Version  :
*  Copyright: ToBeReplacedByCopyrightNone
* ============================================================================
*/

// INCLUDE FILES
#include "FileBrowserContainer.h"
#include <aknlists.h>  // for Listbox
#include <eikclbd.h>
#include <FileBrowser.mbg>
#include <akntitle.h> // for title pane
#include <eikspane.h>

// ================= MEMBER FUNCTIONS =======================
void CFileBrowserContainer::UpdateTitleL()
    {
    CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
    CAknTitlePane* titlePane = ( CAknTitlePane*  )sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) );    
    titlePane->SetTextL(iPath);
    }

void CFileBrowserContainer::UpdateDriveDataL()
    {
    iPath.Zero();
    RFs session = CEikonEnv::Static()->FsSession();

    CDesCArray *itemArray = static_cast<CDesCArray*>(iListBox->Model()->ItemTextArray());
    itemArray->Reset();
    iListBox->HandleItemRemovalL();
    
    TDriveList driveList;
    User::LeaveIfError( session.DriveList( driveList ) );
    const TUint8* listPtr = driveList.Ptr();

    for ( TInt i=0; i < KMaxDrives; i++ )
        {
        if ( *listPtr != 0 )
            {
            TChar driveLetter;
            User::LeaveIfError( session.DriveToChar( i, driveLetter ) );
            TBuf<KMaxFileName> name(_L("1\t"));
            name.Append(driveLetter);
            name.Append(_L(":\\"));
            itemArray->AppendL(name);
            }
        listPtr++;
        }
    iListBox->HandleItemAdditionL();
    iListBox->SetCurrentItemIndexAndDraw(0);    
    }

void CFileBrowserContainer::UpdateFileDataL()
    {
    RFs session = CEikonEnv::Static()->FsSession();
    if (iFileList)
        {
        delete iFileList;
        iFileList = NULL;
        }
    if (iDirList)
        {
        delete iDirList;
        iDirList = NULL;
        }
    TInt err = session.GetDir(iPath,KEntryAttNormal,ESortByName,iFileList,iDirList);
    if (err)
        {
        CEikonEnv::Static()->InfoMsg(_L("Media read error!"));
        UpdateDriveDataL();
        User::Leave(err);
        }
    CDesCArray *itemArray = static_cast<CDesCArray*>(iListBox->Model()->ItemTextArray());
    itemArray->Reset();
    iListBox->HandleItemRemovalL();
    
    for (TInt i=0;i<iDirList->Count();i++)
        {
        TBuf<KMaxFileName> name(_L("1\t"));
        name.Append((*iDirList)[i].iName);
        itemArray->AppendL(name);
        }
    for (i=0;i<iFileList->Count();i++)
        {
        TBuf<KMaxFileName> name(_L("0\t"));
        name.Append((*iFileList)[i].iName);
        itemArray->AppendL(name);
        }
    iListBox->HandleItemAdditionL();
    iListBox->SetCurrentItemIndexAndDraw(0);
    }

void CFileBrowserContainer::HandleListBoxEventL(
    CEikListBox* /*aListBox*/,
    TListBoxEvent aEventType )
    {
    if ( aEventType == MEikListBoxObserver::EEventEnterKeyPressed  ||
         aEventType == MEikListBoxObserver::EEventItemClicked )
        {
        TInt index = iListBox->CurrentItemIndex();
        if (iPath.Length()>0 && index >= iDirList->Count())
            {
            CEikonEnv::Static()->InfoMsg(_L("Not a Folder!"));
            return;
            }
        if (iPath.Length()>0)
            {
            iPath.Append((*iDirList)[index].iName);
            iPath.Append(_L("\\"));
            }
        else
            {
            CDesCArray *itemArray = static_cast<CDesCArray*>(iListBox->Model()->ItemTextArray());
            iPath=(*itemArray)[index];
            iPath.Delete(0,2);
            }
        UpdateFileDataL();
        UpdateTitleL();
        }
    }

void CFileBrowserContainer::HandleCommandL(TInt aCommand)
    {   
    switch ( aCommand )
        {
        case EAknSoftkeyBack:
            {
            if (iPath.Length() ==0)
                return;
            iPath.Delete(iPath.Length()-1, 1);
            TInt pos = iPath.LocateReverseF('\\');
            if (pos>=0)
                {
                iPath.Delete(pos+1, iPath.Length()-pos+1);
                UpdateFileDataL();
                }
            else
                {
                UpdateDriveDataL();
                }
            UpdateTitleL();
            break;
            }
        default:
            {
            break;
            }
        }
    }

// ---------------------------------------------------------
// CFileBrowserContainer::ConstructL(const TRect& aRect)
// EPOC two phased constructor
// ---------------------------------------------------------
//
void CFileBrowserContainer::ConstructL(const TRect& aRect)
    {
    CreateWindowL();
    RFs session = CEikonEnv::Static()->FsSession();
    User::LeaveIfError(session.DefaultPath(iPath));
    UpdateTitleL();

    iListBox = new(ELeave)CAknSingleGraphicStyleListBox();
    iListBox->SetContainerWindowL(*this);
    iListBox->ConstructL( this, EAknListBoxSelectionList );
    iListBox->SetListBoxObserver(this);
    
    _LIT(KMbmFileName, "\\system\\apps\\FileBrowser\\FileBrowser.mbm");
    //_LIT(KMbmFileName, "FileBrowser.mbm");

    CArrayPtr<CGulIcon>* iconArray = new (ELeave)CArrayPtrFlat<CGulIcon>(2);
    CGulIcon* icon1 = CEikonEnv::Static()->CreateIconL
        (KMbmFileName, EMbmFilebrowserFile, EMbmFilebrowserFile_mask);
    CGulIcon* icon2 = CEikonEnv::Static()->CreateIconL
        (KMbmFileName, EMbmFilebrowserFolder, EMbmFilebrowserFolder_mask);    
    iconArray->AppendL(icon1);
    iconArray->AppendL(icon2);    
    iListBox->ItemDrawer()->ColumnData()->SetIconArray(iconArray);
    
    UpdateFileDataL();
    iListBox->CreateScrollBarFrameL(ETrue);
    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EOn);
    
    SetRect(aRect);
    ActivateL();
    }

// Destructor
CFileBrowserContainer::~CFileBrowserContainer()
    {
    delete iListBox;
    if (iFileList)
        {
        delete iFileList;
        iFileList = NULL;
        }
    if (iDirList)
        {
        delete iDirList;
        iDirList = NULL;
        }
    }

// ---------------------------------------------------------
// CFileBrowserContainer::SizeChanged()
// Called by framework when the view size is changed
// ---------------------------------------------------------
//
void CFileBrowserContainer::SizeChanged()
    {
    // TODO: Add here control resize code etc.
    iListBox->SetExtent( TPoint(0,0), iListBox->MinimumSize() );
    }

// ---------------------------------------------------------
// CFileBrowserContainer::CountComponentControls() const
// ---------------------------------------------------------
//
TInt CFileBrowserContainer::CountComponentControls() const
    {
    return 1; 
    }

// ---------------------------------------------------------
// CFileBrowserContainer::ComponentControl(TInt aIndex) const
// ---------------------------------------------------------
//
CCoeControl* CFileBrowserContainer::ComponentControl(TInt aIndex) const
    {
    switch ( aIndex )
        {
        case 0:
            return iListBox;
        default:
            return NULL;
        }
    }

// ---------------------------------------------------------
// CFileBrowserContainer::Draw(const TRect& aRect) const
// ---------------------------------------------------------
//
void CFileBrowserContainer::Draw(const TRect& aRect) const
    {
    CWindowGc& gc = SystemGc();
    gc.Clear();
    }

TKeyResponse CFileBrowserContainer::OfferKeyEventL(
    const TKeyEvent& aKeyEvent, TEventCode aType)
    {
    if ( aType != EEventKey ) // Is not key event?
        {
        return EKeyWasNotConsumed;
        }
    if (iListBox)
        {
        return iListBox->OfferKeyEventL(aKeyEvent, aType);
        }
    return EKeyWasNotConsumed;
    }
// End of File  

⌨️ 快捷键说明

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