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

📄 classscheduleappui.cpp

📁 《基于symbian os的手机开发与应用》
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    {
        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 + -