?? filebrowsercontainer.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 + -