?? classscheduleappui.cpp
字號:
{
CFileMan *fileman = CFileMan::NewL(CEikonEnv::Static()->FsSession());
CleanupStack::PushL(fileman);
User::LeaveIfError(fileman->Delete(KClassScheduleFileName, 0)); //刪除文件,0表示遞歸處理
CleanupStack::PopAndDestroy(); //fileman
CEikonEnv::Static()->ReadResource(tips, R_STR_DELETE_ALL_TIPS); //從資源文件中獲取"全部刪除成功"
ShowNotify(tips); //顯示提示對話框
delete iDB;
iDB = new(ELeave) CClassScheduleDB(); //定義并分配一個CSyllabusDB 類型的變量
iAppContainer->CreateListBoxL();
}
}
//--------------------------------------------------------------------------
//顯示listbox
//--------------------------------------------------------------------------
TInt CClassScheduleAppUi::ShowPopListBox(TInt aTitleResourceId, TInt *aSelectIndex)
{
CAknSinglePopupMenuStyleListBox *list = new(ELeave) CAknSinglePopupMenuStyleListBox; //定義一個CAknSinglePopupMenuStyleListBox類型的列表框變量
CleanupStack::PushL(list);
CAknPopupList *popupList = CAknPopupList::NewL(list, R_AVKON_SOFTKEYS_OK_BACK,AknPopupLayouts::EMenuGraphicWindow);
CleanupStack::PushL(popupList);
list->ConstructL(popupList, CEikListBox::ELeftDownInViewRect);
list->CreateScrollBarFrameL(ETrue);
//創建一個滾動條框架ETrue表示預先分配內存給滾動條
list->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto); //設置滾動條的水平和垂直的值
TBuf<32> noneText;
CEikonEnv::Static()->ReadResource(noneText, R_STR_NONE);
CDesCArray* items = STATIC_CAST( CDesCArray*,list->Model()->ItemTextArray());
TName itemText;
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = (CArrayFixFlat<TClassScheduleDBStruct>*)iDB->iArray->At(iDB->iWeekId);
TClassScheduleDBStruct &db = arrayDay->At(iAppContainer->GetCurrentItemIndex());
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_NAME); //獲取課程名的信息
itemText.Append(KColon);
if(db.iName.Length()==0)
itemText.Append(noneText);
else
itemText.Append(db.iName);
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_TIME); //獲取上課時間的信息
itemText.Append(KColon);
itemText.Append(GetTimeStringFromTInt64(db.iTime));
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_CLASSROOM); //獲取上課地點的信息
itemText.Append(KColon);
if(db.iAddr.Length()==0)
itemText.Append(noneText);
else
itemText.Append(db.iAddr);
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_TEACHER); //獲取授課教師的信息
itemText.Append(KColon);
if(db.iTeacher.Length()==0)
itemText.Append(noneText);
else
itemText.Append(db.iTeacher);
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_REMARK); //獲取備注的信息
itemText.Append(KColon);
if(db.iRemark.Length()==0)
itemText.Append(noneText);
else
itemText.Append(db.iRemark);
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_LESSON_01 + iAppContainer->GetCurrentItemIndex());
popupList->SetTitleL(itemText); //設置對話框文本,(包含新的標題文本)
CEikButtonGroupContainer *iBgc = popupList->ButtonGroupContainer(); //定義按鈕組
CEikonEnv::Static()->ReadResource(itemText, aTitleResourceId);
iBgc->SetCommandL(EAknSoftkeyOk, itemText); //設置按鈕的文本,改變按鈕的文本,通過aCommandId 識別
iBgc->DrawNow();
list->SetCurrentItemIndex(*aSelectIndex); //定置當前項的索引,這個函數改變當前項,但不能重畫列表視圖或更新選區,參數表示那個項被設置為當前的
TInt popupOk = popupList->ExecuteLD(); //顯示列表
*aSelectIndex = list->CurrentItemIndex(); //將返回的當前項的索引好賦給aSelectIndex
CleanupStack::Pop(); // popupList
CleanupStack::PopAndDestroy(); // list
return popupOk;
}
//--------------------------------------------------
//查詢信息
//--------------------------------------------------
void CClassScheduleAppUi::CmdSearchForName()
{
TName name, tips;
CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL(name, CAknQueryDialog::ENoTone); //定義一個CAknTextQueryDialog類型的對話框變量
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_NAME); //從資源文件獲取"課程名"
dlg->SetPromptL(tips); //設置查詢的提示文本
if (dlg->ExecuteLD(R_DIALOG_INPUT)) //如果輸入信息
{
CmdSearchFromDB(ECourseName, name); //從數據庫中查找和輸入的課程名相同的所有信息并顯示
}
}
void CClassScheduleAppUi::CmdSearchForTime()
{
TName name, tips;
TTime value;
value.HomeTime();
CAknTimeQueryDialog* dlg = CAknTimeQueryDialog::NewL( value, CAknQueryDialog::ENoTone ); //定義一個CAknTimeQueryDialog類型的對話框變量
CleanupStack::PushL(dlg);
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_TIME); //從資源文件獲取"上課時間"
dlg->SetPromptL(tips); //設置查詢的提示文本
CleanupStack::Pop(); //dlg
if(dlg->ExecuteLD( R_DIALOG_TIME_QUERY )) //如果輸入一個時間
{
TInt64 time = value.Int64(); //將時間的值賦給time
name.Copy(GetTimeStringFromTInt64(time)); //將時間拷貝到上課時間中
CmdSearchFromDB(ECourseTime, name); //從數據庫中查找和輸入的上課時間相同的所有信息并顯示
}
}
void CClassScheduleAppUi::CmdSearchForAddr()
{
TName name, tips;
CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL(name, CAknQueryDialog::ENoTone);//定義一個CAknTextQueryDialog類型的對話框變量
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_CLASSROOM); //從資源文件獲取"上課地點"
dlg->SetPromptL(tips); //設置查詢的提示文本
CleanupStack::Pop(); //dlg
if (dlg->ExecuteLD(R_DIALOG_INPUT)) //如果輸入一個上課地點
{
CmdSearchFromDB(ECourseAddr, name); //從數據庫中查找和輸入的上課地點相同的所有信息并顯示
}
}
void CClassScheduleAppUi::CmdSearchForTeacher()
{
TName name, tips;
CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL(name, CAknQueryDialog::ENoTone);//定義一個CAknTextQueryDialog類型的對話框變量
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_TEACHER); //從資源文件獲取“授課教師”
dlg->SetPromptL(tips); //設置查詢的提示文本
if (dlg->ExecuteLD(R_DIALOG_INPUT)) //如果輸入一個授課教師的名字
{
CmdSearchFromDB(ECourseTeacher, name); //從數據庫中查找和輸入的授課教師名相同的所有信息并顯示
}
}
void CClassScheduleAppUi::CmdSearchForRemark()
{
TName name, tips;
CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL(name, CAknQueryDialog::ENoTone); //定義一個CAknTextQueryDialog類型的對話框變量
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_REMARK); //從資源文件獲取“備注”
dlg->SetPromptL(tips); //設置查詢的提示文本
if (dlg->ExecuteLD(R_DIALOG_INPUT)) //如果輸入備注的信息
{
CmdSearchFromDB(ECourseRemark, name); //從數據庫中查找和輸入的備注信息相同的所有信息并顯示
}
}
//-----------------------------------------------------------------------
//從數據庫中查詢
//-----------------------------------------------------------------------
void CClassScheduleAppUi::CmdSearchFromDB(TInt aType, TDesC& aSearchText)
{
TInt weekid = EWeek1;
TInt lessonid = ECourse01;
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = NULL;
for(weekid=EWeek1; weekid<=EWeek7; weekid++) //循環從周一到周末
{
arrayDay = (CArrayFixFlat<TClassScheduleDBStruct>*)iDB->iArray->At(weekid); //返回一個元素索引在數組中的位置
for(lessonid=ECourse01;lessonid<=ECourse10;lessonid++) //循環從第一節課到第十節課
{
iIsSearchFlag[weekid][lessonid] = EFalse;
TClassScheduleDBStruct &db = arrayDay->At(lessonid);
switch(aType)
{
case ECourseTime: //按時間查詢
{
TBuf<32> time;
time.Copy(GetTimeStringFromTInt64(db.iTime));
if(time.Find(aSearchText)>=0) //如果找到
iIsSearchFlag[weekid][lessonid] = ETrue;
}
break;
case ECourseName: //按課程名查找
if(db.iName.Find(aSearchText)>=0)
iIsSearchFlag[weekid][lessonid] = ETrue;
break;
case ECourseAddr: //按上課地點查找
if(db.iAddr.Find(aSearchText)>=0)
iIsSearchFlag[weekid][lessonid] = ETrue;
break;
case ECourseTeacher: //按授課教師查找
if(db.iTeacher.Find(aSearchText)>=0)
iIsSearchFlag[weekid][lessonid] = ETrue;
break;
case ECourseRemark: //按備注查找
if(db.iRemark.Find(aSearchText)>=0)
iIsSearchFlag[weekid][lessonid] = ETrue;
break;
}
}
}
iAppContainer->CreateSearchListBoxL();
}
//-----------------------------------------------------
//查找當前時間的課程
//-----------------------------------------------------
void CClassScheduleAppUi::CheckCurCourse()
{
TTime curTime;
curTime.HomeTime(); //設置時間和日期
TInt lessonid = ECourse01;
TName tips;
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = (CArrayFixFlat<TClassScheduleDBStruct>*)iDB->iArray->At(iDB->iWeekId);//返回一個元素索引在數組中的位置
for(lessonid=ECourse01;lessonid<=ECourse10;lessonid++) //循環從第一節課到第十節課
{
TClassScheduleDBStruct &db = arrayDay->At(lessonid);
TTime dbTime(db.iTime); //從數據庫中獲取已輸入的時間
TInt off = dbTime.DateTime().Hour() - curTime.DateTime().Hour();//輸入到數據庫的時間與當前時間相減
if(off==0) //如果相等
{
CEikonEnv::Static()->ReadResource(tips, R_STR_HAS_COURSE_TIPS); //從資源文件獲取“當前時刻有課”
ShowNotify(tips); //顯示提示信息
DetailDB(iDB->iWeekId, lessonid); //顯示詳細信息
return;
}
}
CEikonEnv::Static()->ReadResource(tips, R_STR_NO_COURSE_TIPS); //如果當前時間無課程從資源文件獲取“當前時刻無課程”
ShowNotify(tips); //顯示提示信息
}
// End of File
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -