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

📄 calendarapiexamplegridcontainer.cpp

📁 该源码实现个人日程管理以及备忘功能
💻 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 + -