📄 appsviewer.cpp
字号:
// wState: State of the window to be inserted
void CAppsViewer::InsertWindow(CBaseWnd *pWnd, uint16 wState)
{
//Pause current window?
if(m_pCurrWnd != NULL)
{
m_pCurrWnd->Pause();
m_wIndex++;
}
//Save window pointer
m_pCurrWnd = pWnd;
//Save Window pointer
m_wCurrState = wState;
//display window
m_pCurrWnd->Resume();
}
// Create base window and add two softkeys
// wType: Window type, static or menu
// wSoftkey1: ID of soft key 1, 0 indicate no soft key 1
// wSoftkey2: ID of soft key 2, 0 indicate no soft key 2
CBaseWnd *CAppsViewer::CreateBaseWnd(uint16 wType, uint16 wSoftkey1, uint16 wSoftkey2)
{
//New first window
CBaseWnd *pWnd = new CBaseWnd(wType);
if(!pWnd)
{
return NULL;
}
//Create window
if(!pWnd->Create(m_pShell, m_pDisplay, APPSVIEWER_RES_FILE))
{
delete pWnd;
return NULL;
}
//add two softkey
if(wSoftkey1 != 0 && !pWnd->AddSoftkey(APPSVIEWER_RES_FILE, wSoftkey1, wSoftkey1, NULL, 0)
|| wSoftkey2 != 0 && !pWnd->AddSoftkey(APPSVIEWER_RES_FILE, wSoftkey2, wSoftkey2, NULL, 0))
{
delete pWnd;
return NULL;
}
pWnd->SetSoftKeySel(wSoftkey1);
//set window title
pWnd->SetWindowTitle(APPSVIEWER_RES_FILE, IDS_BASEWND_TITLE, IDB_BASEWND_ICON);
return pWnd;
}
// Create static base window and then set text and add two softkeys
// wSoftkey1: ID of soft key 1, 0 indicate no soft key 1
// wSoftkey2: ID of soft key 2, 0 indicate no soft key 2
// pwszText: Text to set to the window
CBaseWnd *CAppsViewer::CreateStaticBaseWnd(uint16 wSoftkey1, uint16 wSoftkey2, AECHAR *pwszText, AECHAR *pwszTitle)
{
//Create static base window
CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_STATIC, wSoftkey1, wSoftkey2);
if(!pWnd)
{
return NULL;
}
//Set text
if(!pWnd->SetText(pwszText, pwszTitle))
{
delete pWnd;
return NULL;
}
return pWnd;
}
//连接完成
void CAppsViewer::OnWebEnd(AEEEvent evt, uint16 wParam, uint32 dwParam)
{
if(!m_bConnectionAction)
return;
//delete the waiting for connection window
delete m_pCurrWnd;
m_wIndex--;
if(evt == EVT_APP_WEBSUCCEED)
{
// 成功
switch(m_wCurrState)
{
case STATE_POLICY_RENEW:
uint16 wError;
char *pszText;
pszText =(char*)dwParam;
if(STRNCMP(pszText, "ErrorCode=", STRLEN("ErrorCode=")) != 0)
{
wError = 0;
}
pszText += STRLEN("ErrorCode=");
//
wError = ATOI(pszText);
if(wError == 1)
{
ShowMessageWnd(0, 0, IDS_RENEW_SUCCESS, STATE_ORDERRESULT);
}
else
{
ShowMessageWnd(0, 0, IDS_RENEW_FAIL, STATE_ORDERRESULT);
}
break;
case STATE_MAINMENU: //主菜单
case STATE_SERVICE_CATALOG: //应用分类
uint16 nResIconID;
uint16 nStateType;
uint16 nReturnCode;
FREEIF(m_pAppInfos)
if(m_nViewType == APP_TYPE_ALL)
m_pAppInfos = PROTOCOL_ServiceDecode((char *)dwParam, m_nAppsCount, nReturnCode);
else
m_pAppInfos = PROTOCOL_AppDownloadDecode((char *)dwParam, m_nAppsCount, nReturnCode);
/*
⑴如果CatalogID下存在子目录,返回
ErrorCode=2%CatalogCount=3%CatID=0: 图片&1: 流媒体&2: 在线游戏%
⑴如果CatalogID下不存在子目录,返回服务列表,返回
ErrorCode=1%CatalogCount =3% CatID =1100: 推箱子&1101: CS游戏&1102:俄罗斯方块%
⑵如果不存在服务或子目录,返回
ErrorCode=0%
*/
switch(nReturnCode)
{
case 2://分类目录
case 1://应用列表
if(m_pAppInfos && m_nAppsCount != 0)
{
//New first window
CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_MENU, 0, 0);
if(!pWnd)
{
m_pCurrWnd->Resume();
return;
}
if(nReturnCode == 2)
{
nResIconID = IDB_ICON_ARROW;
nStateType = STATE_SERVICE_CATALOG;
}
else if(nReturnCode == 1)
{
nResIconID = IDB_ICON_ITEM;
nStateType = STATE_APP_LIST;
}
for(int i = 0; i < m_nAppsCount; i++)
{
if(nReturnCode == 2)
{
pWnd->AddItemEx(APPSVIEWER_RES_FILE, nResIconID, 0, m_pAppInfos[i].cls,
m_pAppInfos[i].wszName, i);
}
else
{
pWnd->AddItemEx(APPSVIEWER_RES_FILE, nResIconID, 0,i ,
m_pAppInfos[i].wszName, m_pAppInfos[i].cls);
}
}
InsertWindow(pWnd, nStateType);
}//end if
break;
default:
//其它错误,未曾下载东西
ShowMessageWnd(0, 0, IDS_NO_APP_DOWN, STATE_NO_APP_DOWN);
break;
}
break;
case STATE_APP_LIST:
uint16 returnCode;
m_pBillingPolicys = PROTOCOL_BillPolicyDecode((char *)dwParam, m_nPolicysCount,returnCode);
switch(returnCode)
{
case CODE_ORDER_POLICY:
//已有的定购关系
CBaseWnd *pWnd ;
AECHAR *pwszTemp;
pwszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, IDS_BILL_INFO);
pWnd = CreateStaticBaseWnd(IDS_SOFTKEY_OK, IDS_SOFTKEY_CHECKOUT, m_pBillingPolicys->wszPolicy, pwszTemp);
FREEIF(pwszTemp);
if(!pWnd)
{
return ;
}
// pWnd->SetWindowTitle(APPSVIEWER_RES_FILE, IDS_BILL_INFO, NULL);
InsertWindow(pWnd, STATE_SHOW_BILLING);
return;
case CODE_ALL_POLICY:
//无定购, 显示资费策略---goto <STATE_CHARGETYPE>
if(m_pBillingPolicys && m_nPolicysCount != 0)
{
//New first window
CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_MENU, IDS_SOFTKEY_DOWNLOAD, IDS_SOFTKEY_CANCEL);
if(!pWnd)
{
m_pCurrWnd->Resume();
return;
}
for(int i = 0; i < m_nPolicysCount; i++)
{
pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_BASEWND_ITEM2,0, m_pBillingPolicys[i].wId,
m_pBillingPolicys[i].wszPolicy, (uint32)m_pBillingPolicys[i].bIsRenewable);
}
InsertWindow(pWnd, STATE_CHARGETYPE);
}//end if
break;
case CODE_NONE_POLICY:
case CODE_PARAM_ERROR:
//查询参数错误
default:
//其它错误
ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_NOTIFY_DISABLE, STATE_APP_DISABLE);
break;
}
break;
case STATE_CHARGETYPE:
//返回结果
uint16 nErrorCode;
//AECHAR *pszMsg = NULL;
nErrorCode = PROTOCOL_ResultDecode((char *)dwParam/*, pszMsg*/);
//success
switch(nErrorCode)
{
case CODE_ORDER_EXIST:
case CODE_ORDER_SUCCESS:
delete m_pCurrWnd;
m_wIndex--;
ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ORDER_SUCCESS, STATE_ORDER_SUCCESS);
//...写记录...
//...
break;
case CODE_ORDER_FAIL:
default:
ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_NOTIFY_ORDERFAIL, STATE_APP_DISABLE);
break;
}
break;
}//~end switch(m_wCurrState)
}
else
{
//网络连接出错
AECHAR *pszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, IDS_CONNECTING_ERROR);
if(!pszTemp)
return;
CBaseWnd *pWnd = CreateStaticBaseWnd(IDS_SOFTKEY_RETRY, IDS_SOFTKEY_CANCEL, pszTemp);
FREEIF(pszTemp);
if(!pWnd)
{
return;
}
InsertWindow(pWnd, STATE_CONNECTFAIL);
}
}
// create lart Message showed window
boolean CAppsViewer::ShowMessageWnd(uint16 nLeft, uint16 nRight, uint16 nMessageId, uint16 nState)
{
// Local information is not available, we need confirm with server
// Create static window
AECHAR *pwszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, nMessageId);
if(!pwszTemp)
return FALSE;
CBaseWnd *pWnd = CreateStaticBaseWnd(nLeft, nRight, pwszTemp);
FREEIF(pwszTemp);
if(!pWnd)
{
return FALSE;
}
InsertWindow(pWnd, nState);
return TRUE;
}
// start to web connect to get subscription 查询定购信息
boolean CAppsViewer::StartGetAppsInfo(uint16 nType)
{
int nUrlSize;
FREEIF(m_pSvrUrl);
if(nType == APP_TYPE_DOWNLOADED)
{
nUrlSize = STRLEN(QUERY_APPSINFO_URL) + STRLEN(URL_PARAM_IMSI) + 20;
m_pSvrUrl = (char *)MALLOC(nUrlSize);
if(!m_pSvrUrl)
{
return FALSE;
}
//组织URL
SPRINTF(m_pSvrUrl, "%s%s%s", QUERY_APPSINFO_URL,
URL_PARAM_IMSI,
m_szIMSI);
}
else
{
nUrlSize = STRLEN(QUERY_UNAPPSINFO_URL) + STRLEN(URL_PARAM_IMSI) + 20;
m_pSvrUrl = (char *)MALLOC(nUrlSize);
if(!m_pSvrUrl)
{
return FALSE;
}
SPRINTF(m_pSvrUrl, "%s%s%s", QUERY_UNAPPSINFO_URL,
URL_PARAM_IMSI,
m_szIMSI);
}
//http://localhost/BrewGatewayAgent/querysubscription.aspx?
if(m_pWebAction)
{
m_bConnectionAction = TRUE;
//Start web connect success?
if(m_pWebAction->CreateWeb() &&
m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
{
return TRUE;
}
}
return FALSE;
}
// start to web connect to get subscription 查询定购信息
boolean CAppsViewer::StartGetSubscription(uint32 classid)
{
//计算Url长度
int nUrlSize = STRLEN(QUERY_SUBSCRIPTION_URL) + STRLEN(URL_PARAM_CLASSID) + STRLEN(URL_PARAM_IMSI) + 30;
FREEIF(m_pSvrUrl);
m_pSvrUrl = (char *)MALLOC(nUrlSize);
if(!m_pSvrUrl)
{
return FALSE;
}
//http://localhost/BrewGatewayAgent/querysubscription.aspx?
//组织URL
SPRINTF(m_pSvrUrl, "%s%s%u%s%s%s", QUERY_SUBSCRIPTION_URL,
URL_PARAM_CLASSID,
classid,
URL_PARAM_SYMBOL_AND,
URL_PARAM_IMSI,
m_szIMSI);
if(m_pWebAction)
{
m_bConnectionAction = TRUE;
//Start web connect success?
if(m_pWebAction->CreateWeb() &&
m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
{
return TRUE;
}
}
return FALSE;
}
//查询服务分类
boolean CAppsViewer::StartGetService(uint16 nCatalogID)
{
int nUrlSize = STRLEN(QUERY_SERVICE_URL) + STRLEN(URL_PARAM_CATALOG) + STRLEN(URL_PARAM_IMSI) + 30;
FREEIF(m_pSvrUrl);
m_pSvrUrl = (char *)MALLOC(nUrlSize);
if(!m_pSvrUrl)
{
return FALSE;
}
SPRINTF(m_pSvrUrl, "%s%s%s%s%s%u", QUERY_SERVICE_URL,
URL_PARAM_IMSI,
m_szIMSI,
URL_PARAM_SYMBOL_AND,
URL_PARAM_CATALOG,
nCatalogID
);
if(m_pWebAction)
{
m_bConnectionAction = TRUE;
//Start web connect success?
if(m_pWebAction->CreateWeb() &&
m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
{
return TRUE;
}
}
return FALSE;
}
//发送定购信息
boolean CAppsViewer::StartOrder(uint16 nPolicyId, uint16 isRenew)
{
int nUrlSize = STRLEN(ORDER_SUBSCRIPTION_URL) + STRLEN(URL_PARAM_CLASSID) + STRLEN(URL_PARAM_IMSI)
+ STRLEN(URL_PARAM_BILLINGPOLICY) + STRLEN(URL_PARAM_ISRENEW) + 30;
FREEIF(m_pSvrUrl);
m_pSvrUrl = (char *)MALLOC(nUrlSize);
if(!m_pSvrUrl)
{
return FALSE;
}
SPRINTF(m_pSvrUrl, "%s%s%u%s%s%s%s%s%u%s%s%u", ORDER_SUBSCRIPTION_URL,
URL_PARAM_CLASSID,
m_clsCPApp,
URL_PARAM_SYMBOL_AND,
URL_PARAM_IMSI,
m_szIMSI,
URL_PARAM_SYMBOL_AND,
URL_PARAM_BILLINGPOLICY,
nPolicyId,
URL_PARAM_SYMBOL_AND,
URL_PARAM_ISRENEW,
isRenew);
if(m_pWebAction)
{
m_bConnectionAction = TRUE;
//Start web connect success?
if(m_pWebAction->CreateWeb() &&
m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
{
return TRUE;
}
}
return FALSE;
}
boolean CAppsViewer::StartRenew(uint32 clsID)
{
int nUrlSize = STRLEN(RENEW_ORDER_URL) + STRLEN(URL_PARAM_CLASSID) + STRLEN(URL_PARAM_IMSI) + 30;
FREEIF(m_pSvrUrl);
m_pSvrUrl = (char *)MALLOC(nUrlSize);
if(!m_pSvrUrl)
{
return FALSE;
}
SPRINTF(m_pSvrUrl, "%s%s%u%s%s%s", RENEW_ORDER_URL,
URL_PARAM_CLASSID,
clsID,
URL_PARAM_SYMBOL_AND,
URL_PARAM_IMSI,
m_szIMSI
);
if(m_pWebAction)
{
m_bConnectionAction = TRUE;
//Start web connect success?
if(m_pWebAction->CreateWeb() &&
m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
{
return TRUE;
}
}
return FALSE;
}
boolean CAppsViewer::StartCancel(uint32 clsID)
{
int nUrlSize = STRLEN(CANCEL_ORDER_URL) + STRLEN(URL_PARAM_CLASSID) + STRLEN(URL_PARAM_IMSI) + 30;
FREEIF(m_pSvrUrl);
m_pSvrUrl = (char *)MALLOC(nUrlSize);
if(!m_pSvrUrl)
{
return FALSE;
}
SPRINTF(m_pSvrUrl, "%s%s%u%s%s%s", CANCEL_ORDER_URL,
URL_PARAM_CLASSID,
clsID,
URL_PARAM_SYMBOL_AND,
URL_PARAM_IMSI,
m_szIMSI
);
if(m_pWebAction)
{
m_bConnectionAction = TRUE;
//Start web connect success?
if(m_pWebAction->CreateWeb() &&
m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
{
return TRUE;
}
}
return FALSE;
}
//handle mainmenu
boolean CAppsViewer::OnMainMenu(uint16 wParam)
{
switch(wParam)
{
case IDS_MAINMENU_OWN:
m_nViewType = APP_TYPE_DOWNLOADED;
if(StartGetAppsInfo(APP_TYPE_DOWNLOADED))
{
ShowMessageWnd(IDS_SOFTKEY_CANCEL, 0, IDS_ALART_CHECK, STATE_CONNECTING);
}
else
{
ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
}
break;
case IDS_MAINMENU_ALL:
m_nViewType = APP_TYPE_ALL;
if(StartGetService(0))
{
ShowMessageWnd(IDS_SOFTKEY_CANCEL, 0, IDS_ALART_CHECK, STATE_CONNECTING);
}
else
{
ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
}
break;
case IDS_MAINMENU_ABOUT:
ShowMessageWnd(0, 0, IDS_MAINMENU_ABOUT, STATE_ABOUT);
break;
case IDS_MAINMENU_HELP:
ShowMessageWnd(0, 0, IDS_MAINMENU_HELP, STATE_HELP);
break;
default:
return FALSE;
}
return TRUE;
}
//
boolean CAppsViewer::CreatePolicyOption(uint16 nPolicyId)
{
//New first window
CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_MENU, IDS_SOFTKEY_OK, IDS_SOFTKEY_CANCEL);
if(!pWnd)
return FALSE;
pWnd->SetWindowTitle(APPSVIEWER_RES_FILE, IDS_OPTION_TITLE, IDB_ICON_ITEM);
AECHAR *pwszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, IDS_OPTION_ITEM);
pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_OPTION_YES, 0, nPolicyId, pwszTemp, 0);
FREEIF(pwszTemp);
InsertWindow(pWnd, STATE_POLICY_OPTION);
return TRUE;
}
//
boolean CAppsViewer::CreatePolicyRenew(uint32 classId, boolean isCancel, boolean isRenew, AECHAR *pTitle)
{
//New first window
CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_MENU, 0, 0/*IDS_SOFTKEY_OK, IDS_SOFTKEY_CANCEL*/);
if(!pWnd)
return FALSE;
pWnd->SetWindowTitle(pTitle);
if(isRenew)
pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_ICON_ARROW, IDS_MENU_RENEW, IDS_MENU_RENEW, NULL, classId);
if(isCancel)
pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_ICON_ARROW, IDS_MENU_CANCEL, IDS_MENU_CANCEL, NULL, classId);
InsertWindow(pWnd, STATE_POLICY_RENEW);
return TRUE;
}
//
boolean CAppsViewer::CreateConfirmWnd(AECHAR *pwszText)
{
// Local information is not available, we need confirm with server
// Create static window
CBaseWnd *pWnd = CreateStaticBaseWnd(IDS_SOFTKEY_OK, IDS_SOFTKEY_CANCEL, pwszText);
if(!pWnd)
{
return FALSE;
}
pWnd->SetWindowTitle(APPSVIEWER_RES_FILE, IDS_CONFIRM_TITLE, IDB_BASEWND_ITEM1);
InsertWindow(pWnd, STATE_CONFIRM);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -