📄 phonecard.c
字号:
/* 设置该窗口为基准窗口,便于直接返回 */
XSetBaseWindow(&gPBBrowse->wnd);
SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-HZ_MAIN-2);
/* 创建列表框,父组件为参数设置窗口 */
XCreateListBox(&gPBBrowse->wnd.comp, \
&gPBBrowse->list, &area, \
0, HZ_MAIN, OnDrawCardItem);
gPBBrowse->keyb = XCreateInputBoard(&gPBBrowse->wnd.comp, INPUT_ENGLISH | INPUT_FIXED);
if (gDisplayGroup != 0xFF) {
XDisableInput(gPBBrowse->keyb);
}
SearchPhoneCard();
//设置列表框的参数
XListBoxSet(&gPBBrowse->list, gPBBrowse->sum, HZ_MAIN, OnDrawCardItem);
gPBBrowse->select = XListBoxSetCurrent(&gPBBrowse->list, gPBBrowse->select);
XCreateMenu(NULL, &gPBBrowse->tmenu);
// XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[0]), OnMenuDetail);
// XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[1]), OnMenuModify);
XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[0]), OnMenuNewCard);
// XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[3]), OnMenuAddInfo);
XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[1]), OnMenuDeleteOne);
XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[2]), OnMenuDeleteAll);
// XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[2]), OnMenuGroup);
XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[3]), OnMenuStoreInfo);
/* 显示参数设置窗口,包括其子组件 */
XShowComponent(&gPBBrowse->wnd.comp);
v_WriteLcdBuff();
gPBBrowse->next = 0;
while (XGetMessage(&msg) != -1)
XDispatchMessage(&msg);
XDestroyWindow(&gPBBrowse->wnd);
gDisplayGroup = gPBBrowse->grpShow;
ret = gPBBrowse->next;
if (2 == gPBBrowse->next)
goto repeat;
free(gPBBrowse);
gPBBrowse = NULL;
return ret;
}
#endif
#if COMPILE_OK
typedef struct {
window_t wnd;
listbox_t list;
BYTE index[MAX_GROUP_NUM];
BYTE sum;
BYTE data;
int select;
} sel_grp_t;
static sel_grp_t *gSelGroup = NULL;
static int OnDrawSelItem(listbox_t *lb, rect *rc, int num)
{
char name[GRP_NAME_LEN];
if (num > gSelGroup->sum)
return -1;
if (num == 0) {
strcpy(name, TranslateChar("不分类"));
}
else {
if (GRP_ReadOne(gSelGroup->index[num-1], name) < 0)
strcpy(name, TranslateChar("名字错误"));
}
MoveTo(rc->Xmin + 2, rc->Ymax);
DrawText((BYTE*)name, 0, 8);
return 0;
}
static int selGroupProc(XMSG *msg)
{
switch (msg->message) {
case MSG_PAINT:
EraseRect(&msg->comp->rc);
FrameWindow(&msg->comp->rc);
break;
case MSG_KEYDOWN:
switch (msg->param1) {
//case KEY_MENU://yu add 1
case KEY_OK:
gSelGroup->select = XListBoxGetSelect(&gSelGroup->list);
XPostQuitMessage(&gSelGroup->wnd);
break;
case KEY_CANCEL:
gSelGroup->select = -2;
XPostQuitMessage(&gSelGroup->wnd);
break;
default:
XListBoxKeyHandle(&gSelGroup->list, msg->param1);
break;
}
break;
default:
XDefaultWindowProc(msg);
break;
}
return 0;
}
/* 选择组别 */
static int PB_SelectGroup(BYTE *oldGrp)
{
rect area;
XMSG msg;
int sel;
if (0 == GRP_GetNumber()) {
*oldGrp = 0xFF;
return 0;
}
gSelGroup = (sel_grp_t*)malloc(sizeof(sel_grp_t));
if (NULL == gSelGroup)
return -1;
gSelGroup->data = *oldGrp;
gSelGroup->sum = GRP_GetIndex(gSelGroup->index, MAX_GROUP_NUM);
SetRect(&area, 20, LCD_ICONEND+6, LCD_WIDTH-20, LCD_HEIGHT-7);
XCreateWindow(NULL, &gSelGroup->wnd, &area, TranslateChar("选组"), selGroupProc, FALSE);
InsetRect(&area, 3, 3);
XCreateListBox(&gSelGroup->wnd.comp, \
&gSelGroup->list, &area, \
gSelGroup->sum+1, HZ_MAIN, OnDrawSelItem);
if (*oldGrp != 0xFF) {
for (sel = 0; sel < (int)gSelGroup->sum; sel++) {
if (*oldGrp == gSelGroup->index[sel])
break;
}
sel++;
XListBoxSetCurrent(&gSelGroup->list, sel);
}
XShowComponent(&gSelGroup->wnd.comp);
v_WriteLcdBuff();
gSelGroup->select = -1;
while (XGetMessage(&msg) != -1)
XDispatchMessage(&msg);
XDestroyWindow(&gSelGroup->wnd);
sel = gSelGroup->select;
if (sel < 0) {
sel = -1;
}
else {
if (0 == gSelGroup->select)
*oldGrp = 0xFF;
else
*oldGrp = gSelGroup->index[gSelGroup->select-1];
}
free(gSelGroup);
gSelGroup = NULL;
return sel;
}
#endif
#if COMPILE_OK
const static char *detailMenuName[] = {
"拨打电话",
"发送短信",
"修改记录",
// "添加备注",
"删除记录",
};
typedef struct {
window_t wnd;
PHONE_CARD nCard;
textbox_t tBox;
menu_t tmenu;
int len;
char info[256];
WORD store;
int exit;
} pb_detail_t;
static pb_detail_t *gPBDetail = NULL;
static int OnMenuDetailModify(menu_t *pMenu)
{
int inStat;
inStat = inputFullCard(&gPBDetail->nCard);
if (inStat == 0) {
PB_WriteOne(gPBDetail->store, &gPBDetail->nCard);
XTipWndShow(TranslateChar("保存成功"),1);//yu add
XPostQuitMessage(&gPBDetail->wnd);
}
else {
XTipWndShow(TranslateChar("保存失败"),1);
XShowComponent(&gPBDetail->wnd.comp);
v_WriteLcdBuff();
}
return 0;
}
static int OnMenuDetailDelete(menu_t *pMenu)
{
if (XMessageBox(NULL, TranslateChar("删除电话本?"), ID_OK) == ID_OK) {
if(0==PB_DeleteOne(gPBDetail->store))
XTipWndShow(TranslateChar("删除成功"),1);//yu add
XPostQuitMessage(&gPBDetail->wnd);
}
return 0;
}
static int OnMenuSendSms(menu_t *pMenu)
{
SMS_SendMessageTo(gPBDetail->nCard.number);
XPostQuitMessage(&gPBDetail->wnd);
// XShowComponent(&gPBDetail->wnd.comp);
// v_WriteLcdBuff();
// XMessageBox("z", "发送短消息", ID_OK);
return 0;
}
static int phoneCardToShow(PHONE_CARD *pCard)
{
char info[32], *pDst;
pDst = gPBDetail->info;
strcpy(pDst, " ");
if (pCard->group == 0xFF) {
strcat(pDst, TranslateChar("未分组"));
}
else {
strcat(pDst, TranslateChar("组别:"));
memset(info, 0, 32);
GRP_ReadOne(pCard->group, info);
strcat(pDst, info);
}
strcat(pDst, "\n");
strcat(pDst, TranslateChar("姓名:"));
strcat(pDst, pCard->name);
strcat(pDst, "\n");
strcat(pDst, TranslateChar("电话:"));
strcat(pDst, "\n");
strcat(pDst, pCard->number);
/* sprintf(info, "\n类别:%s", gCallTypeName[pCard->type]);
strcat(pDst, info);*/
/* if (pCard->prior == 0xFF) {
strcat(pDst, "\n优先级未定义");
}
else {
sprintf(info, "\n优先级: %d", pCard->prior);
strcat(pDst, info);
}*/
if(pCard->type_ring==0){
strcat(pDst, "\n");
strcat(pDst, TranslateChar("铃声:默认"));
}
else {
strcat(pDst, "\n");
strcat(pDst, TranslateChar("铃声"));
sprintf(info, ": %d", pCard->type_ring);
strcat(pDst, info);
}
/* if (*pCard->remark) {
strcat(pDst, "\n===========\n");
strcat(pDst, pCard->remark);
}
*/
return strlen(pDst);
}
static int pbDetailProc(XMSG *msg)
{
switch (msg->message) {
// case MSG_PAINT:
// OnDetailShow(&msg->comp->rc);
// break;
case MSG_KEYDOWN:
switch (msg->param1) {
case KEY_UP:
case KEY_DOWN:
XTextBoxKeyHandle(&gPBDetail->tBox, msg->param1);
break;
case KEY_OK:
memcpy(&gFindedCard, &gPBDetail->nCard, sizeof(PHONE_CARD));
XPostQuitMessage(&gPBDetail->wnd);
gPBDetail->exit = 1;
// XMessageBox("z", "拨打电话", ID_OK);
break;
case KEY_MENU:
XPopMenu(&gPBDetail->tmenu, 1, LCD_HEIGHT-2, 0);
break;
case KEY_CANCEL:
gPBDetail->exit = -1;
XPostQuitMessage(&gPBDetail->wnd);
break;
}
break;
default:
XDefaultWindowProc(msg);
break;
}
return 0;
}
static int PB_DetailShow(WORD pos)
{
int exit;
rect area;
XMSG msg;
gPBDetail = (pb_detail_t*)malloc(sizeof(pb_detail_t));
if (NULL == gPBDetail)
return -1;
gPBDetail->store = pos;
PB_ReadOne(pos, &gPBDetail->nCard);
gPBDetail->len = phoneCardToShow(&gPBDetail->nCard);
SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-1);
XCreateWindow(NULL, &gPBDetail->wnd, &area, TranslateChar("详细"), pbDetailProc, FALSE);
XCreateTextBox(&gPBDetail->wnd.comp, &gPBDetail->tBox, \
&area, gPBDetail->len, (BYTE*)gPBDetail->info);
XCreateMenu(NULL, &gPBDetail->tmenu);
// XAppendMenuItem(&gPBDetail->tmenu, detailMenuName[0], OnMenuDialTo);
XAppendMenuItem(&gPBDetail->tmenu, TranslateChar(detailMenuName[1]), OnMenuSendSms);
XAppendMenuItem(&gPBDetail->tmenu, TranslateChar(detailMenuName[2]), OnMenuDetailModify);
//yu XAppendMenuItem(&gPBDetail->tmenu, TranslateChar(detailMenuName[3]), OnMenuDetailAddInfo);
XAppendMenuItem(&gPBDetail->tmenu, TranslateChar(detailMenuName[3]), OnMenuDetailDelete);
XShowComponent(&gPBDetail->wnd.comp);
v_WriteLcdBuff();
gPBDetail->exit = 0;
while (XGetMessage(&msg) != -1)
XDispatchMessage(&msg);
XDestroyWindow(&gPBDetail->wnd);
exit = gPBDetail->exit;
free(gPBDetail);
gPBDetail = NULL;
return exit;
}
#endif
int OnStoreCard(char *number)
{
PHONE_CARD nCard;
rect area;
int sel, data;
if (strlen(number) == 0)
return -1;
// debug_print_str(DM_RUNINFO, (info_buffer, "number:%s", number));
if (CheckNumberExist(number, NULL)) {
XTipWndShow(TranslateChar("号码已经存在"),1);//yu XMessageBox(NULL, TranslateChar("号码已经存在"), ID_OK);
return -1;
}
if (MAX_CARD_NUM == PB_GetNumber()) {
XTipWndShow(TranslateChar("空间已满"),1);//yu XMessageBox(NULL, TranslateChar("空间已满"), ID_OK);
return -1;
}
memset(&nCard, 0, sizeof(PHONE_CARD));
nCard.group = 0xFF;
nCard.prior = gDevicePara.dev.defPrior;
sel = PB_SelectGroup(&nCard.group);
if (sel < 0)
return -1;
inputname:
SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);//yuSetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
sel = InputLine(&area, TranslateChar("输入姓名"), (BYTE*)nCard.name, NAME_LEN-1, INPUT_PINYIN);
if (sel < 0)
return -1;
if(0==strlen(nCard.name))
goto inputname;
//inputtype:
//--
data = nCard.type_ring;
sel = SelectCallring(&data);
if (sel == -1)
return -1;
if (sel == -2)
goto inputname;
nCard.type_ring= (BYTE)data;
//--
//input_ok:
memcpy(nCard.number, number, NUMBER_LEN-1);
PB_WriteOne(NEW_CARD, &nCard);
return 0;
}
#if COMPILE_OK
typedef struct {
window_t wnd;
} pb_store_t;
static pb_store_t *gPBStore = NULL;
static int pbStoreProc(XMSG *msg)
{
switch (msg->message) {
case MSG_PAINT:
OnPaintWindow((window_t*)msg->comp);
break;
case MSG_KEYDOWN:
XPostQuitMessage(&gPBStore->wnd);
break;
default:
XDefaultWindowProc(msg);
break;
}
return 0;
}
static int PB_StoreInfo(void)
{int kkk;
char info[32];
rect area;
XMSG msg;
gPBStore = (pb_store_t*)malloc(sizeof(pb_store_t));
if (NULL == gPBStore)
return -1;
SetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-5);
XCreateWindow(NULL, &gPBStore->wnd, &area, TranslateChar("存储状态"), pbStoreProc, FALSE);
XShowComponent(&gPBStore->wnd.comp);
//-------
strcpy(info,TranslateChar("正在查询..."));
MoveTo(area.Xmin+5, area.Ymax-15);//MoveTo(area.Xmin+15, area.Ymin+80);
DrawString((BYTE*)info);
//-------
kkk=PHBOOK_Select(PB_ALL);
sprintf(info, "%s: %3d/%d",TranslateChar("本机"), PB_GetNumber(),MAX_CARD_NUM);
MoveTo(area.Xmin+5, area.Ymax-15);//MoveTo(area.Xmin+5, area.Ymax-8);
DrawString((BYTE*)info);
//-1 失败, 否则返回最大容量-低双字节 和 使用空间-高双字节
//sprintf(info, "SIM卡: xx / xx",NULL);
if(kkk>0)
sprintf(info, "%s:%3d/%3d",TranslateChar("SIM卡"),(kkk>>16)&0x00FFFF,kkk&0xFFFF);
else
strcpy(info,TranslateChar("SIM卡: 错误"));
MoveTo(area.Xmin+5, area.Ymax-3);//MoveTo(area.Xmin+15, area.Ymin+80);
DrawString((BYTE*)info);
v_WriteLcdBuff();
while (XGetMessage(&msg) != -1)
XDispatchMessage(&msg);
XDestroyWindow(&gPBStore->wnd);
free(gPBStore);
gPBStore = NULL;
return 0;
}
void PB_StoreInfo_(void)
{PB_StoreInfo();}
void PB_BOOK_Flash_Test(void)
{
static int number=0;
int adloop;
PHONE_CARD ntCard;
int ret;
for(adloop=0;adloop<10;adloop++)
{
sprintf(ntCard.number,"%d",number);
sprintf(ntCard.name,"姓名%d",number);
number++;
ret=PB_WriteOne(0xFFFF, &ntCard);
debug_print_str(DM_RUNINFO, (info_buffer, "number=%s;name=%s;ret= %d", ntCard.number,ntCard.name,ret));
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -