📄 phonerecord.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "datatype.h"
#include "common.h"
#include "mmalloc.h"
#include "windows.h"
//#include "timer.h"
#include "recmanage.h"
#include "cardmanage.h"
#include "para_def.h"
#include "phone.h"
#include "smsbrowse.h"
#include "phonecard.h"
#include "phonerecord.h"
#include "Translate.h"
#include "debug_out.h"
static BYTE phoneRecPage = PH_REC_UNTALK; /* record phone record window */
//static PHONE_RECORD recordCurrent;
//static BYTE recordNextWnd = MOD_PHONE;
//static BYTE recordCurPage = PH_REC_UNTALK;
const static char *recName[] = {
"详细信息",
"保存号码",
"发送短信",
"删除记录",
"删除全部",
};
/* 测试用
void PREC_Store(char *number, BYTE nBox, WORD sec, BYTE type, BYTE prior)
{
PHONE_RECORD rec;
memset(&rec, 0, sizeof(PHONE_RECORD));
strncpy(rec.number, number, NUMBER_LEN);
rec.seconds = sec;
rec.type = type;
rec.prior = prior;
REC_WriteOne(nBox, &rec);
}
*/
typedef struct {
window_t wnd;
listbox_t list;
menu_t tmenu;
int select;
PHONE_RECORD record[MAX_RECORD_NUM];
BYTE recSum;
BYTE box; /* 未接、已接、拨出 */
int next; /* 退出状态 */
} phone_record_t;
static phone_record_t *g_pPhRecord = NULL;
static int OnDrawListItem(listbox_t *lb, rect *rc, int num)
{
char info[60];
if (num >= g_pPhRecord->recSum)
return -1;
num = g_pPhRecord->recSum-num-1;
MoveTo(rc->Xmin + 2, rc->Ymax);
memset(info, 0, 60);
GetNameFromNumber(g_pPhRecord->record[num].number, info);
DrawText((BYTE*)info, 0, 12);
// sprintf(info, "%4d", g_pPhRecord->record[num].seconds);
// MoveTo(rc->Xmin + 130, rc->Ymax - 1);
// DrawText(info, 0, 4);
return 0;
}
const static char *recBoxName[] = {
"未 接 电 话",
"已 接 电 话",
"呼 出 电 话",
};
static void OnPaint(void)
{
rect rc;
TextAlign(alignCenter, alignBottom);
MoveTo(LCD_HMID, LCD_HEIGHT);
DrawString((BYTE*)TranslateChar(recBoxName[phoneRecPage]));
TextAlign(alignLeft, alignBottom);
SetRect(&rc, 0, LCD_HEIGHT-HZ_MAIN, LCD_WIDTH, LCD_HEIGHT);
InvertRect(&rc);
}
static int rec_wnd_proc(XMSG *msg)
{
int sel;
switch (msg->message) {
case MSG_PAINT:
EraseRect(&msg->comp->rc);
OnPaint();
break;
case MSG_KEYDOWN:
switch (msg->param1) {
case KEY_OK:
if (0 == g_pPhRecord->recSum)
break;
sel = g_pPhRecord->recSum - g_pPhRecord->select - 1;
setDialNumber(g_pPhRecord->record[sel].number);
XPostQuitMessage(&g_pPhRecord->wnd);
break;
case KEY_CANCEL:
g_pPhRecord->next = -1;
XPostQuitMessage(&g_pPhRecord->wnd);
break;
case KEY_UP:
case KEY_DOWN:
XListBoxKeyHandle(&g_pPhRecord->list, msg->param1);
g_pPhRecord->select = XListBoxGetSelect(&g_pPhRecord->list);
break;
case KEY_MENU:
XPopMenu(&g_pPhRecord->tmenu, 1, LCD_HEIGHT-2, 0);
break;
case KEY_DH://yu case KEY_QIEHUAN:// 通话记录切换case KEY_D1:
phoneRecPage++;
phoneRecPage %= 3;
g_pPhRecord->select = 0;
g_pPhRecord->next = 2;
XPostQuitMessage(&g_pPhRecord->wnd);
break;
default:
break;
}
default :
XDefaultWindowProc(msg);
break;
}
return 0;
}
static int OnMenuDeleteAll(menu_t *pMenu)
{
if (0 == g_pPhRecord->recSum)
return -1;
if (XMessageBox(NULL,TranslateChar("删除全部?"), ID_OK) != ID_OK)
return -1;
g_pPhRecord->select = 0;
REC_DeleteAll(phoneRecPage);
g_pPhRecord->next = 2;
XTipWndShow(TranslateChar("删除成功"),1);//yu add
XPostQuitMessage(&g_pPhRecord->wnd);
return 0;
}
extern int OnStoreSimCard(char * number);
#if 1
static int OnMenuStoreCard(menu_t *pMenu)
{
BYTE box;
menu_t popmenu;
int sel;
int id;
if (0 == g_pPhRecord->recSum)
return -1;
sel = g_pPhRecord->recSum - g_pPhRecord->select - 1;
XCreateMenu(NULL, &popmenu);
XAppendMenuItem(&popmenu, TranslateChar("本机电话本"), NULL);
XAppendMenuItem(&popmenu, TranslateChar("SIM电话本"), NULL);
id = XPopMenu(&popmenu, 28, LCD_HEIGHT-18, 1);
box = 0;
switch (id) {
case 0:
if(0==OnStoreCard(g_pPhRecord->record[sel].number))
box = 1;
break;
case 1:
if(0==OnStoreSimCard(g_pPhRecord->record[sel].number))
box = 1;
break;
default:
break;
}
if (box == 0)
{
XTipWndShow(TranslateChar("保存失败"),1);
XShowComponent(&g_pPhRecord->wnd.comp);
v_WriteLcdBuff();
return -1;
}
XTipWndShow(TranslateChar("保存成功"),1);
XShowComponent(&g_pPhRecord->wnd.comp);
v_WriteLcdBuff();
return 0;
}
#endif
static int OnMenuSendSms(menu_t *pMenu)
{
int sel;
if (0 == g_pPhRecord->recSum)
return -1;
sel = g_pPhRecord->recSum - g_pPhRecord->select - 1;
SMS_SendMessageTo(g_pPhRecord->record[sel].number);
XShowComponent(&g_pPhRecord->wnd.comp);
v_WriteLcdBuff();
return 0;
}
static int OnMenuDeleteOne(menu_t *pMenu)
{
if (0 == g_pPhRecord->recSum)
return -1;
if (XMessageBox(NULL, TranslateChar("删除该记录?"), ID_OK) != ID_OK)
return -1;
if(0==REC_DeleteOne(phoneRecPage, (WORD)(g_pPhRecord->recSum - g_pPhRecord->select - 1)))
XTipWndShow(TranslateChar("删除成功"),1);//yu add
g_pPhRecord->next = 2;
XPostQuitMessage(&g_pPhRecord->wnd);
return 0;
}
static int OnMenuShowDetail(menu_t *pMenu)
{
int sel, exit;
if (0 == g_pPhRecord->recSum)
return -1;
sel = g_pPhRecord->recSum - g_pPhRecord->select - 1;
exit = PH_Detail_Record(&g_pPhRecord->record[sel]);
if (exit == 1) {
XPostQuitMessage(&g_pPhRecord->wnd);
}
else {
XShowComponent(&g_pPhRecord->wnd.comp);
v_WriteLcdBuff();
}
return 0;
}
extern int REC_WriteOneFlag(BYTE box, WORD pos);
extern void showUnTalkPhone(int id);
int PH_Talk_Record(void *argv)
{ int Ret,temCnt;
rect area;
XMSG msg;
g_pPhRecord = (phone_record_t*)malloc(sizeof(phone_record_t));
if (NULL == g_pPhRecord)
return -1;
g_pPhRecord->select = 0;
if (argv != NULL) {
phoneRecPage= (int)argv;
}
repeat:
g_pPhRecord->recSum = (BYTE)REC_ReadBox(phoneRecPage, g_pPhRecord->record);
if (phoneRecPage == PH_REC_UNTALK)
{
showUnTalkPhone(0); /* 表示已经查看未接电话 */
for(temCnt=0;temCnt<g_pPhRecord->recSum;temCnt++)
{
REC_WriteOneFlag(PH_REC_UNTALK, temCnt);//清除未接
}
}
SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH, LCD_HEIGHT);
XCreateWindow(NULL, &g_pPhRecord->wnd, &area, TranslateChar("通话记录"), rec_wnd_proc, FALSE);
XSetBaseWindow(&g_pPhRecord->wnd);
SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-12-1);
XCreateListBox(&g_pPhRecord->wnd.comp, \
&g_pPhRecord->list, &area, \
g_pPhRecord->recSum, HZ_MAIN, OnDrawListItem);
g_pPhRecord->select = XListBoxSetCurrent(&g_pPhRecord->list, g_pPhRecord->select);
XCreateMenu(NULL, &g_pPhRecord->tmenu);
XAppendMenuItem(&g_pPhRecord->tmenu, TranslateChar(recName[0]), OnMenuShowDetail);
XAppendMenuItem(&g_pPhRecord->tmenu, TranslateChar(recName[1]), OnMenuStoreCard);
XAppendMenuItem(&g_pPhRecord->tmenu, TranslateChar(recName[2]), OnMenuSendSms);
XAppendMenuItem(&g_pPhRecord->tmenu, TranslateChar(recName[3]), OnMenuDeleteOne);
XAppendMenuItem(&g_pPhRecord->tmenu, TranslateChar(recName[4]), OnMenuDeleteAll);
XShowComponent(&g_pPhRecord->wnd.comp);
v_WriteLcdBuff();
g_pPhRecord->next = 0;
while (XGetMessage(&msg) != -1)
XDispatchMessage(&msg);
XDestroyWindow(&g_pPhRecord->wnd);
Ret=g_pPhRecord->next;
if (2 == g_pPhRecord->next)
goto repeat;
free(g_pPhRecord);
g_pPhRecord = NULL;
debug_print_str(DM_RUNINFO, (info_buffer, "PH_Talk_Record Ret: %d", Ret));
return 0;
}
typedef struct {
window_t wnd;
textbox_t tBox;
PHONE_RECORD *pRec;
int len;
char info[256];
int exit;
} rec_detail_t;
rec_detail_t *g_pDetailRec = NULL;
static int recordToShow(PHONE_RECORD *rec)
{
char *pDst;
char info[60];
pDst = g_pDetailRec->info;
strcpy(pDst, " ");
if (GetNameFromNumber(rec->number, info) < 0) {
/* 电话本中不存在 */
strcat(pDst, TranslateChar("电话号码"));
}
else {
strcat(pDst, info);
}
strcat(pDst, ":\n");
strcat(pDst, rec->number);
strcat(pDst, "\n");
strcat(pDst, TranslateChar("通话日期"));
strcat(pDst, ":\n");
sprintf(info, "%04d-%02d-%02d", \
(int)((rec->date>>16)&0xFFFF), \
(int)((rec->date>>8)&0xFF), \
(int)(rec->date&0xFF) );
strcat(pDst, info);
strcat(pDst, "\n");
strcat(pDst, TranslateChar("通话时间"));
strcat(pDst, ":\n");
sprintf(info, "%02d-%02d-%02d", \
(int)((rec->time>>16)&0xFF), \
(int)((rec->time>>8)&0xFF), \
(int)(rec->time&0xFF) );
strcat(pDst, info);
strcat(pDst, "\n");
strcat(pDst, TranslateChar("通话时长"));
strcat(pDst, ":\n");
sprintf(info, "%02d分%02d秒", rec->seconds/60, rec->seconds%60);
strcat(pDst, info);
return strlen(pDst);
}
static int rec_detail_proc(XMSG *msg)
{
switch (msg->message) {
case MSG_KEYDOWN:
switch (msg->param1) {
//case KEY_MENU://yu add 1
case KEY_OK:
setDialNumber(g_pDetailRec->pRec->number);
g_pDetailRec->exit = 1;
// XMessageBox("12", "拨号", ID_OK);
XPostQuitMessage(&g_pDetailRec->wnd);
break;
case KEY_CANCEL:
g_pDetailRec->exit = -1;
XPostQuitMessage(&g_pDetailRec->wnd);
break;
case KEY_UP:
case KEY_DOWN:
XTextBoxKeyHandle(&g_pDetailRec->tBox, msg->param1);
break;
}
break;
default:
XDefaultWindowProc(msg);
break;
}
return 0;
}
int PH_Detail_Record(PHONE_RECORD *pRec)
{
int exit;
rect area;
XMSG msg;
g_pDetailRec = (rec_detail_t*)malloc(sizeof(rec_detail_t));
if (NULL == g_pDetailRec)
return -1;
g_pDetailRec->pRec = pRec;
g_pDetailRec->len = recordToShow(pRec);
// memcpy(&g_pDetailRec->rec, pRec, sizeof(PHONE_RECORD));
SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-1);
XCreateWindow(NULL, &g_pDetailRec->wnd, &area, "详细记录", rec_detail_proc, FALSE);
XCreateTextBox(&g_pDetailRec->wnd.comp, &g_pDetailRec->tBox, \
&area, g_pDetailRec->len, (BYTE*)g_pDetailRec->info);
XShowComponent(&g_pDetailRec->wnd.comp);
v_WriteLcdBuff();
g_pDetailRec->exit = -2;
while (XGetMessage(&msg) != -1)
XDispatchMessage(&msg);
XDestroyWindow(&g_pDetailRec->wnd);
exit = g_pDetailRec->exit;
free(g_pDetailRec);
g_pDetailRec = NULL;
return exit;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -