📄 main_screen.cpp
字号:
#include "Main_Screen.h"
#include <EIKENV.H>
#include <EIKAPPUI.H>
#include <aknutils.h>
#include <eikapp.h>
#include <akniconarray.h>
#include <aknlists.h>
#include <akngridm.h>
#include <akngrid.h>
#include <GULICON.H>
#include <AknGlobalNote.h>
// CMyMainScreen
//
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CMyMainScreen::~CMyMainScreen()
{
delete iMyGrid;
iMyGrid = NULL;
delete iBgContext;
iBgContext = NULL;
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CMyMainScreen::CMyMainScreen(RPointerArray<CScWrapperShortcut>& aScArray)
:iScArray(aScArray)
{
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CMyMainScreen* CMyMainScreen::NewL(const TRect& aRect,RPointerArray<CScWrapperShortcut>& aScArray)
{
CMyMainScreen* self = new(ELeave)CMyMainScreen(aScArray);
CleanupStack::PushL(self);
self->ConstructL(aRect);
CleanupStack::Pop(self);
return self;
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
void CMyMainScreen::ConstructL(const TRect& aRect)
{
CreateWindowL();
// make first with no size at all
iBgContext = CAknsBasicBackgroundControlContext::NewL(KAknsIIDQsnBgAreaMain,TRect(0,0,1,1), ETrue);
// Setting rect will cause SizeChanged to be called
// and iBgContext size & position is updated accordingly.
SetRect(aRect);
ActivateL();
DrawNow();
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
TInt CMyMainScreen::SelectedIndex()
{
TInt MySetIndex(0);
if(iMyGrid)
{
MySetIndex = iMyGrid->CurrentItemIndex();
}
return MySetIndex;
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
void CMyMainScreen::MakeGridBoxL()
{
TInt MySetIndex(0);
if(iMyGrid)
{
MySetIndex = iMyGrid->CurrentItemIndex();
}
delete iMyGrid;
iMyGrid = NULL;
iMyGrid = new( ELeave ) CAknGrid;
iMyGrid->SetContainerWindowL( *this );
CAknGridM* GridViewM = new( ELeave ) CAknGridM;
iMyGrid->SetModel( GridViewM );
iMyGrid->ConstructL( this, EAknListBoxSelectionGrid );
TRect MyRect(Rect());
iMyGrid->SetRect(MyRect);
TInt NumH = (MyRect.Height() / 80);
TInt NumW = (MyRect.Width() / 80);
if(NumH < 3)
{
NumH = 3;
}
if(NumW < 3)
{
NumW = 3;
}
TSize SizeOfItems;
SizeOfItems.iWidth = ( MyRect.iBr.iX - MyRect.iTl.iX ) / NumW;
SizeOfItems.iHeight = ( MyRect.iBr.iY - MyRect.iTl.iY )/ NumH;
iMyGrid->SetLayoutL(EFalse,ETrue,ETrue,NumW,NumH,SizeOfItems);
iMyGrid->SetPrimaryScrollingType (CAknGridView::EScrollIncrementLineAndLoops);
iMyGrid->SetSecondaryScrollingType(CAknGridView::EScrollIncrementLineAndLoops);
iMyGrid->SetCurrentDataIndex( 0 );
CArrayPtr<CGulIcon>* icons =new( ELeave ) CAknIconArray(2);
CleanupStack::PushL(icons);
const CFont* MyUseFont = AknLayoutUtils::FontFromId(EAknLogicalFontSecondaryFont);
TPoint TxtStartPoint(0,(SizeOfItems.iHeight - (MyUseFont->HeightInPixels() + 3)));
TPoint TxtEndddPoint(SizeOfItems.iWidth,SizeOfItems.iHeight);
TPoint StartIcon(0,0);
TPoint EnddIcon(SizeOfItems.iWidth,TxtStartPoint.iY);
TSize IconsSize((((EnddIcon.iX - StartIcon.iX) * 9) / 10),(((EnddIcon.iY - StartIcon.iY) * 9) / 10));
iMyGrid->Model()->SetItemTextArray(GetArrayL(icons,IconsSize));
iMyGrid->ItemDrawer()->FormattedCellData()->SetIconArrayL(icons);
CleanupStack::Pop();//icons
iMyGrid->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto,CEikScrollBarFrame::EAuto);
iMyGrid->HandleItemAdditionL();
AknListBoxLayouts::SetupStandardGrid( *iMyGrid);
AknListBoxLayouts::SetupFormGfxCell( *iMyGrid, iMyGrid->ItemDrawer(),
0, 0, 0, 0, 0, SizeOfItems.iWidth,(EnddIcon.iY - StartIcon.iY),
StartIcon, EnddIcon);
TInt BaseLine = (TxtEndddPoint.iY - MyUseFont->BaselineOffsetInPixels() - 3);
AknListBoxLayouts::SetupFormTextCell( *iMyGrid, iMyGrid->ItemDrawer(),
1, MyUseFont,
215,
3,
0,
BaseLine,
SizeOfItems.iWidth,
CGraphicsContext::ECenter,
TxtStartPoint,
TxtEndddPoint
);
TInt ItemsCount = iMyGrid->Model()->ItemTextArray()->MdcaCount();
if(ItemsCount > MySetIndex && MySetIndex >= 0)
iMyGrid->SetCurrentItemIndex(MySetIndex);
else if(ItemsCount > 0)
iMyGrid->SetCurrentItemIndex(0);
iMyGrid->MakeVisible( ETrue );
iMyGrid->SetFocus( ETrue );
iMyGrid->ActivateL();
iMyGrid->DrawNow();
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CDesCArray* CMyMainScreen::GetArrayL(CArrayPtr<CGulIcon>* aIcon,const TSize& aIconsize)
{
CDesCArrayFlat* MyArray = new(ELeave)CDesCArrayFlat(1);
CleanupStack::PushL(MyArray);
MAknsSkinInstance* skin = AknsUtils::SkinInstance();
TBuf<250> hJelppp;
for(TInt i= 0; i < iScArray.Count(); i++)
{
if(iScArray[i])
{
TRAPD(Err,
CFbsBitmap* AppIcon(NULL);
CFbsBitmap* AppIconMsk(NULL);
AknsUtils::CreateAppIconLC(skin,TUid::Uid(iScArray[i]->Uid()), EAknsAppIconTypeContext,AppIcon,AppIconMsk);
if(AppIcon && AppIconMsk)
{
AknIconUtils::SetSize(AppIcon,aIconsize,EAspectRatioPreserved);
AknIconUtils::SetSize(AppIconMsk,aIconsize,EAspectRatioPreserved);
aIcon->AppendL(CGulIcon::NewL(AppIcon,AppIconMsk));
CleanupStack::Pop(2);
});
hJelppp.Num((aIcon->Count() - 1));
hJelppp.Append(_L("\t"));
hJelppp.Append(iScArray[i]->ShortcutName());
MyArray->AppendL(hJelppp);
}
}
CleanupStack::Pop(MyArray);
return MyArray;
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
void CMyMainScreen::SizeChanged()
{
if ( iBgContext )
{
iBgContext->SetRect(Rect());
if ( &Window() )
{
iBgContext->SetParentPos( PositionRelativeToScreen() );
}
}
MakeGridBoxL();
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
TTypeUid::Ptr CMyMainScreen::MopSupplyObject(TTypeUid aId)
{
if (iBgContext)
{
return MAknsControlContext::SupplyMopObject(aId, iBgContext );
}
return CCoeControl::MopSupplyObject(aId);
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
void CMyMainScreen::Draw(const TRect& /*aRect*/) const
{
CWindowGc& gc = SystemGc();
// draw background skin first.
MAknsSkinInstance* skin = AknsUtils::SkinInstance();
AknsDrawUtils::Background( skin, iBgContext, this, gc, Rect() );
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
TKeyResponse CMyMainScreen::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aEventCode)
{
TKeyResponse Ret = EKeyWasNotConsumed;
if(iMyGrid)
{
Ret = iMyGrid->OfferKeyEventL(aKeyEvent,aEventCode);
}
return Ret;
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CCoeControl* CMyMainScreen::ComponentControl( TInt /*aIndex*/) const
{
return iMyGrid;
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
TInt CMyMainScreen::CountComponentControls() const
{
if(iMyGrid)
return 1;
else
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -