📄 calendarapiexamplegridcontainer.cpp
字号:
// INCLUDE FILES
#include "CalendarAPIexampleGridContainer.h"
#include "CalendarAPIexampleGridView.h"
#include "CalendarAPIexample.pan"
#include <CalendarAPIexample.rsg>
#include "MYAGENDA.mbg"
#include <aknnotewrappers.h>
#include "CalendarAPIexampleAppUi.h"
#include "CalendarAPIexampleSearchView.h"
#include "CalendarAPIexampleSearchContainer.h"
#include "CalendarAPIexample.hrh"
#include "CalendarAPIexampleEntryView.h"
#include "CalendarAPIexampleGridView.h" /*YC inclusion calendrier*/
#include "CalendarAPIexampleEntriesView.h"
#include "CalendarAPIexampleDocument.h"
// ================= MEMBER FUNCTIONS =======================
// constructor
CCalendarAPIexampleGridContainer::CCalendarAPIexampleGridContainer(CCalendarAPIexampleGridView& aView,CCalendarAPIexampleDocument& iDoc)
: iGridView(aView)
{
iDocument = &iDoc;
}
// destructor
CCalendarAPIexampleGridContainer::~CCalendarAPIexampleGridContainer()
{
delete iGrid;
iGrid = NULL;
delete iProgressDialog;
}
// Two-phased constructor.
CCalendarAPIexampleGridContainer* CCalendarAPIexampleGridContainer::NewL(const TRect& aRect,
CCalendarAPIexampleGridView& aView,
CCalendarAPIexampleDocument& iDoc)
{
CCalendarAPIexampleGridContainer* self = new (ELeave) CCalendarAPIexampleGridContainer(aView,iDoc);
CleanupStack::PushL(self);
self->ConstructL(aRect);
CleanupStack::Pop(self);
return self;
}
// Symbian OS default constructor can leave.
void CCalendarAPIexampleGridContainer::ConstructL(const TRect& aRect)
{
CreateWindowL();
/*Creation grille*/
iGrid = new( ELeave ) CAknGrid;
iGrid->SetContainerWindowL( *this );
/*Creation modele grille*/
iGridM = new( ELeave ) CAknGridM;
iGrid->SetModel( iGridM );
/*Gestion d'une grille a selection*/
TInt gridFlags = EAknListBoxSelectionGrid;
iGrid->ConstructL( this, gridFlags);
iGrid->SetListBoxObserver(this);
/*Gestion du contenu de la grille*/
TBool iVerticalOrientation = ETrue;
TBool iTopToBottom = ETrue;
TBool iLeftToRight = ETrue;
TUint iNumOfRows = 7;
TUint iNumOfColumns = 8;
TSize iCellSize(20, 20);
iGrid->SetLayoutL(iVerticalOrientation,iLeftToRight,iTopToBottom,iNumOfRows,iNumOfColumns,iCellSize,2,1);
iGrid->SetPrimaryScrollingType( CAknGridView::EScrollFollowsGrid );
iGrid->SetSecondaryScrollingType( CAknGridView::EScrollFollowsGrid );
AknListBoxLayouts::SetupFormGfxCell(
*iGrid, // Reference to grid control
iGrid->ItemDrawer(), // Pointer to the item drawer
0, // Column index
1, // Left position
1, // Top position
1, // Right - unused
20, // Bottom - unused
18, //8 5Width
18, // 8Height
TPoint(0,0), // 10,10 Start position
TPoint(19, 19)); // End position
//iGrid->Model()->SetItemTextArray(cArray);
//AknListBoxLayouts::SetupStandardGrid( *iGrid );
// Setup the text subcell
AknListBoxLayouts::SetupFormTextCell( *iGrid, // Reference to grid
iGrid->ItemDrawer(), // Pointer to the item drawer
1, // Column index "0\txxx"
LatinBold12(), // Font
215, // Color (215 = black)
0, // Left margin
0, // Right margin - unused
20 - 3, // Baseline
15, // Text width
CGraphicsContext::ECenter, // Text alignment
TPoint(1, 1), // Start position
TPoint( iGrid->ColumnWidth(), iGrid->ItemHeight() ));
/*Tableau de valeur*/
MDesCArray *array = iGridM->ItemTextArray();
CDesCArray *cArray = static_cast<CDesCArray*>(array);
// Create icon array with granularity of 1 icon
CArrayPtr<CGulIcon>* icons = new(ELeave) CAknIconArray(5);
CleanupStack::PushL( icons );
//utiliser ces chemins pour l'archive ARMI nokia 6600
_LIT(KMbmPath, "avkon.mbm");
TBuf16<150> AppAvBmp(KMbmPath);
CompleteWithAppPath(AppAvBmp);
_LIT(MyAgendaPath, "myagenda.mbm");
//utiliser ces chemins pour l'emulateur EPOC
_LIT(KMbmPath2, "Z:\\system\\data\\avkon.mbm");
_LIT(MyAgendaPath2, "Z:\\system\\data\\MYAGENDA.mbm");
TBuf16<150> AppBmp(MyAgendaPath);
CompleteWithAppPath(AppBmp);
// Load the bitmap for mail icon
//NOKIA :: CFbsBitmap* bitmap = iEikonEnv->CreateBitmapL( AppAvBmp,EMbmAvkonQgn_note_empty);
CFbsBitmap* bitmap = iEikonEnv->CreateBitmapL( KMbmPath2,EMbmAvkonQgn_note_empty);
CleanupStack::PushL( bitmap );
// Load the mask for mail icon
//NOKIA :: CFbsBitmap* mask = iEikonEnv->CreateBitmapL( AppAvBmp,EMbmAvkonQgn_note_empty_mask );
CFbsBitmap* mask = iEikonEnv->CreateBitmapL( KMbmPath2,EMbmAvkonQgn_note_empty_mask );
CleanupStack::PushL( mask );
//NOKIA :: CFbsBitmap* bitmap2 = iEikonEnv->CreateBitmapL( AppBmp,EMbmMyagendaRdv);
CFbsBitmap* bitmap2 = iEikonEnv->CreateBitmapL( MyAgendaPath2,EMbmMyagendaRdv);
CleanupStack::PushL( bitmap2 );
// Load the mask for mail icon
// NOKIA :: CFbsBitmap* mask2 = iEikonEnv->CreateBitmapL( AppBmp,EMbmMyagendaRdv_mask );
CFbsBitmap* mask2 = iEikonEnv->CreateBitmapL( MyAgendaPath2,EMbmMyagendaRdv_mask );
CleanupStack::PushL( mask2 );
// Append the mail icon to icon array
icons->AppendL( CGulIcon::NewL( bitmap, mask ) );
CleanupStack::Pop(2); // bitmap, mask
icons->AppendL( CGulIcon::NewL( bitmap2, mask2 ) );
CleanupStack::Pop(2); // bitmap, mask
// Attach icon array to grid抯 item drawer
iGrid->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons );
CleanupStack::Pop(); // icons
int current;
//Ceci provoque une errere CBASE !
//CleanupStack::PushL(array);
int i,j;
int nbJour;
int jour;
nbJour = 0;
jour = 1;
TInt first_week;
//date d'aujourd'hui
date_now.HomeTime();
//debut du mois
//TTimeIntervalDays* aDay = new TTimeIntervalDays(date_now.DayNoInMonth());
debutMois = date_now-TTimeIntervalDays(date_now.DayNoInMonth());
//premiere semaine du mois
first_week = debutMois.WeekNoInYear();
//Nombre de jour dans le mois
TTime* nowit = new (ELeave) TTime();
TInt jour_in_month = nowit->DaysInMonth();
/*Construction du tableau init*/
for(i=0;i<7;i++){
for(j=0;j<6;j++){
mytab[j][i]=0;
}
}
i=0;
j=0;
switch(debutMois.DayNoInWeek()){
case EMonday:
j=0;
break;
case ETuesday:
j=1;
break;
case EWednesday:
j=2;
break;
case EThursday:
j=3;
break;
case EFriday:
j=4;
break;
case ESaturday:
j=5;
break;
case ESunday:
j=6;
break;
}
while(jour<jour_in_month){
mytab[i][j]=jour;
if(j==6){
j=0;
i=i+1;
}else{
j=j+1;
}
jour=jour+1;
}
/*Tableaux de jour*/
CDesCArrayFlat* descarray;
descarray = new (ELeave) CDesCArrayFlat(7);
descarray->AppendL(_L("Lu"));
descarray->AppendL(_L("Ma"));
descarray->AppendL(_L("Me"));
descarray->AppendL(_L("Je"));
descarray->AppendL(_L("Ve"));
descarray->AppendL(_L("Sa"));
descarray->AppendL(_L("Di"));
//Premiere case vide !
_LIT16(Kabc,"0\t");
TBuf16<16> tgt(Kabc);
cArray->AppendL(tgt);
/*Recherche des entr閑s pour le mois :) */
TSearchType type = EMonth;
iDocument->DoSearchL(type, this);
//Numero des semaines
for(i=0;i<6;i++){
_LIT16(Kabc,"0\t");
TBuf16<16> tgt(Kabc);
tgt.AppendNum(first_week+i);
cArray->AppendL(tgt);
}
TBool init = false;
for(i=0;i<7;i++){
_LIT16(Kabc,"0\t");
TBuf16<16> tgt(Kabc);
tgt.Append(descarray->MdcaPoint(nbJour));
cArray->AppendL(tgt);
nbJour++;
for(j=0;j<6;j++){
if(mytab[j][i]!=0){
_LIT16(Kabc,"0\t");
TBuf16<16> tgt(Kabc);
_LIT16(Kabcd,"1\t");//Icone repr閟entant un evenement
TBuf16<16> tgt2(Kabcd);
if(iDocument->EntryCount()>0){
for(current=0;current<iDocument->EntryCount();current++){
TDateTime valT = iDocument->Entry(current).Date();
TTime z = (debutMois+TTimeIntervalDays(mytab[j][i]-1));
TDateTime curT = z.DateTime();
init = false;
if( (valT.Year()==curT.Year())&& (valT.Month()==curT.Month()) && (valT.Day()==curT.Day()) ){
tgt2.AppendNum(mytab[j][i]);
cArray->AppendL(tgt2);
init = true;
break;
}
}
if(! init){
tgt.AppendNum(mytab[j][i]);
cArray->AppendL(tgt);
}
}else{
tgt.AppendNum(mytab[j][i]);
cArray->AppendL(tgt);
}
}else{
_LIT16(Kabc,"0\t");
TBuf16<16> tgt(Kabc);
cArray->AppendL(tgt);
}
}
}
//icons->AppendL(iEikonEnv->CreateIconL(_L("Z:\\system\\data\\avkon.mbm"), EMbmAvkonQgn_indi_marked_add,EMbmAvkonQgn_indi_marked_add_mask));
//iGrid->ItemDrawer()->FormattedCellData()->SetIconArray(icons);
iGrid->GridView()->SetBackColor(TRgb(60,60,200));
//iGrid->ItemDrawer()->ColumnData()->SetColumnFontL(TInt(1), LatinPlain12());
// Notify the grid control of item
iGrid->HandleItemAdditionL();
//CleanupStack::Pop(); /*Pop the Array of items*/
SetRect(aRect);
ActivateL();
//iGrid->MakeVisible( ETrue );
//iGrid->SetFocus( ETrue );
//iGrid->ActivateL();
//iGrid->DrawNow();
}
void CCalendarAPIexampleGridContainer::HandleListBoxEventL( CEikListBox* ,
TListBoxEvent aEventType)
{
if (aEventType == EEventEnterKeyPressed)
{
iGridView.HandleCommandL(ECalendarAPIexampleCmdView);
}
/*if( aEventType==EEventKeyDown )
{
switch ( aKeyEvent.iScanCode )
{
case EStdKeyUpArrow:
return EKeyWasConsumed;
break;
case EStdKeyDownArrow:
return EKeyWasConsumed;
break;
case EStdKeyEnter:
iGridView.HandleCommandL(ECalendarAPIexampleCmdView);
return EKeyWasConsumed;
break;
}
}*/
}
// ----------------------------------------------------
// CCalendarAPIexampleGridContainer::SizeChanged()
// Responds to size changes to set the size and
// position of the contents of this control.
// ----------------------------------------------------
//
void CCalendarAPIexampleGridContainer::SizeChanged()
{
//iGrid->SetExtent(TPoint(0,0),iGrid->MinimumSize());
//iGrid->DrawNow();
iGrid->SetExtentToWholeScreen();
/*if ( iGrid )
{
iGrid->SetRect( Rect() );
}*/
//iGrid->ItemDrawer()->FormattedCellData()->SetTransparentSubCellL()
/*TRAPD(error,
{
CAknGrid& aListBox = *iGrid;
CFormattedCellListBoxItemDrawer* itemDrawer =
aListBox.ItemDrawer();
const TInt KMainCellWidth=20;
const TInt KMainCellHeight=20;
AknListBoxLayouts::SetupStandardGrid(aListBox);
AknListBoxLayouts::SetupGridPos(aListBox, 0, 0, -1,-1, KMainCellWidth, KMainCellHeight);
AknListBoxLayouts::SetupGridFormGfxCell(aListBox,itemDrawer,0, 0, 0, -1, -1, KMainCellWidth,KMainCellHeight, TPoint(0, 0),TPoint(KMainCellWidth, KMainCellHeight));
const TInt KFontColor = 215;
const TInt KLeftMargin = 2;
const TInt KNotUsed = 0;
const TInt KBaseLine = 12;
const TInt KWidth = 2;
AknListBoxLayouts::SetupFormAntiFlickerTextCell(
aListBox, itemDrawer, 1,LatinBold12(), KFontColor,
KLeftMargin,KNotUsed, KBaseLine, KWidth, CGraphicsContext::ELeft,
TPoint(0, 0), TPoint(KMainCellWidth,KMainCellHeight));
itemDrawer->FormattedCellData()->SetTransparentSubCellL(1, ETrue);
} ); */ // TRAPD ends
} // SizeChanged ends
// ----------------------------------------------------
// CCalendarAPIexampleGridContainer::CountComponentControls()
// Gets the number of controls contained in a compound
// control.
// ----------------------------------------------------
//
TInt CCalendarAPIexampleGridContainer::CountComponentControls() const
{
TInt count = 1;
return count;
}
// ----------------------------------------------------
// CCalendarAPIexampleGridContainer::ComponentControl()
// Gets the specified component of a compound control.
// ----------------------------------------------------
//
CCoeControl* CCalendarAPIexampleGridContainer::ComponentControl(TInt aIndex) const
{
switch (aIndex)
{
case 0:
return iGrid;
default:
return NULL;
}
}
// ----------------------------------------------------
// CCalendarAPIexampleGridContainer::Draw()
// This function is used for window server-initiated
// redrawing of controls, and for some
// application-initiated drawing.
// ----------------------------------------------------
//
void CCalendarAPIexampleGridContainer::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.SetPenStyle( CGraphicsContext::ENullPen );
gc.SetBrushColor( KRgbDarkBlue );
gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
gc.DrawRect( aRect );
}
//Fonction utilis
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -