📄 classscheduleappui.cpp
字号:
/*
* ============================================================================
* Name : CClassScheduleAppUi from ClassScheduleAppUi.cpp
* Part of : ClassSchedule
* Created : 2005-8-30 by
* Implementation notes:
* Initial content was generated by Series 60 AppWizard.
* Version :
* Copyright:
* ============================================================================
*/
// INCLUDE FILES
#include "ClassScheduleAppUi.h"
#include "ClassScheduleContainer.h"
#include "ClassScheduleDB.h"
#include "ClassSchedule.hrh"
#include <aknlists.h>
#include <aknPopup.h>
#include <eikbtgpc.h>
#include <ClassSchedule.rsg>
#include <avkon.hrh>
#include <aknquerydialog.h>
#include <aknglobalnote.h>
#include <aknmessagequerydialog.h>
#include <eikmenup.h>
#include <akntitle.h>
_LIT(KColon, ": ");
_LIT(KEnter, "\n");
//-----------------------------------------------
//显示提示信息
//-----------------------------------------------
void ShowNotify(TDesC &aBuf)
{
TRequestStatus status; //TRequestStatus:当操作完成的时候请求的状态也随之完成终结
CAknGlobalNote* globalNote = CAknGlobalNote::NewLC();
globalNote->ShowNoteL(status, EAknGlobalInformationNote, aBuf ); //显示提示信息
User::WaitForRequest(status); //等待请求
CleanupStack::PopAndDestroy();
}
// ================= MEMBER FUNCTIONS =======================
//
// ----------------------------------------------------------
// CClassScheduleAppUi::ConstructL()
// ?implementation_description
// ----------------------------------------------------------
void CClassScheduleAppUi::ConstructL()
{
iDB = new(ELeave) CClassScheduleDB(); //给成员变量分配空间
BaseConstructL(); //调用基类的第二阶段构造函数
CEikStatusPane* sp = StatusPane();
iNaviPane = (CAknNavigationControlContainer*)sp->ControlL(
TUid::Uid(EEikStatusPaneUidNavi));
//返回一个CEikStatusPane类型的ID号,强制转换成CAknNavigationControlContainer类型
iDecoratedTabGroup = iNaviPane->ResourceDecorator();
if (iDecoratedTabGroup)
{
iTabGroup = (CAknTabGroup*) iDecoratedTabGroup->DecoratedControl();
//在导航窗格中得到当前标签组(控制中的)
}
iTabGroup->SetActiveTabByIndex(iDB->iWeekId); //加亮活跃标签
iAppContainer = new (ELeave) CClassScheduleContainer;
iAppContainer->SetMopParent(this); //设置父类
iAppContainer->ConstructL( ClientRect(), this);
AddToStackL( iAppContainer );
CheckCurCourse(); //检查当前课程
}
// ----------------------------------------------------
// CClassScheduleAppUi::~CClassScheduleAppUi()
// Destructor
// Frees reserved resources
// ----------------------------------------------------
CClassScheduleAppUi::~CClassScheduleAppUi()
{
delete iDecoratedTabGroup;
if (iAppContainer)
{
RemoveFromStack( iAppContainer );
delete iAppContainer;
}
delete iDB;
}
// ------------------------------------------------------------------------------
// CClassScheduleAppUi::::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
// 这个函数仅在显示菜单前被 EIKON 结构调用。它的默认命令空,可以忽略不记。
//应用程序可以根据应用程序数据的状态激活菜单的各个项。
// 包含处理菜单条的亮/ 暗
// ------------------------------------------------------------------------------
void CClassScheduleAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
{
if(aResourceId==R_CLASSSCHEDULE_MENU)
{
if(iIsSearchStatus)
{
aMenuPane->SetItemDimmed(EClassScheduleCmdAppModify, ETrue);
aMenuPane->SetItemDimmed(EClassScheduleCmdAppDelete, ETrue);
aMenuPane->SetItemDimmed(EClassScheduleCmdAppDeleteAll, ETrue);
aMenuPane->SetItemDimmed(EClassScheduleCmdAppSearch, ETrue);
}
}
}
// ----------------------------------------------------
// CClassScheduleAppUi::HandleKeyEventL(
// const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
// ?implementation_description
// ----------------------------------------------------
TKeyResponse CClassScheduleAppUi::HandleKeyEventL(
const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
{
if ( iTabGroup == NULL )
{
return EKeyWasNotConsumed;
}
TInt active = iTabGroup->ActiveTabIndex(); //返回当前活跃标签的索引
TInt count = iTabGroup->TabCount(); //标签数组中标签的个数
switch ( aKeyEvent.iCode )
{
case EKeyLeftArrow:
if ( active > 0 )
{
active--;
iTabGroup->SetActiveTabByIndex( active );
}
break;
case EKeyRightArrow:
if( (active + 1) < count )
{
active++;
iTabGroup->SetActiveTabByIndex( active );
}
break;
default:
return EKeyWasNotConsumed;
break;
}
return EKeyWasConsumed;
}
// ----------------------------------------------------
// CClassScheduleAppUi::HandleCommandL(TInt aCommand)
// ?implementation_description
// ----------------------------------------------------
void CClassScheduleAppUi::HandleCommandL(TInt aCommand)
{
switch ( aCommand )
{
case EAknSoftkeyExit: //back键
if(iIsSearchStatus)
{
iAppContainer->CreateListBoxL();
iAppContainer->SetCurrentItemIndex(0);
CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
TName title;
CAknTitlePane* iTitlePane = (CAknTitlePane *)sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
CEikonEnv::Static()->ReadResource(title, R_QTN_APP_CAPTION_STRING);
//从资源文件获取title的信息
iTitlePane->SetTextL(title);
break;
}
case EEikCmdExit:
Exit();
break;
case EClassScheduleCmdAppDetail:
if(iIsSearchStatus) //查寻详细信息
CmdSearchDetail();
else
CmdDetail();
break;
case EClassScheduleCmdAppModify:
CmdModify();
break;
case EClassScheduleCmdAppDelete:
CmdDelete();
break;
case EClassScheduleCmdAppDeleteAll:
CmdDeleteAll();
break;
case EClassScheduleCmdAppSearchForName:
CmdSearchForName();
break;
case EClassScheduleCmdAppSearchForAddr:
CmdSearchForAddr();
break;
case EClassScheduleCmdAppSearchForTime:
CmdSearchForTime();
break;
case EClassScheduleCmdAppSearchForTeacher:
CmdSearchForTeacher();
break;
case EClassScheduleCmdAppSearchForRemark:
CmdSearchForRemark();
break;
default:
break;
}
}
//----------------------------------------------
//向前
//----------------------------------------------
void CClassScheduleAppUi::CmdPrev()
{
TInt active = iTabGroup->ActiveTabIndex(); //返回当前活跃标签的索引
TInt count = iTabGroup->TabCount(); //标签数组中标签的个数
if(active > 0)
{
active --;
}
else
{
active = count - 1;
}
iTabGroup->SetActiveTabByIndex(active); //加亮活跃标签
iDB->iWeekId = (TWeekId)active; //iweekId TInt 型记录星期的值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -