📄 phone_a.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "datatype.h"
#include "general.h"
#include "common.h"
#include "mmalloc.h"
#include "windows.h"
#include "pub_wnd.h"
#include "smsbrowse.h"
#include "para_def.h"
#include "grpmanage.h"
#include "cardmanage.h"
#include "phonecard.h"
#include "debug_out.h"
#include "phonebook.h"//yu
#include "translate.h"
#define COMPILE_OK 1
#define COMPILING 1
#ifdef COMPILE_OK
extern int phoneBookSize;
//extern int phoneBookMax;
extern int phoneBookRead;
extern void SetHandleKey(int id);
extern void Waiting(int a);
extern int xstrcmp(char *pSrc, char *pDst, int len);
const static char *menuName[] = {
"增加号码",
"删除记录",
"删除全部",
};
#if 1
phone_book_t *SIM_BOOK;
static int Sim_init_read_ok;// =-1 error
static int ReReadSim(void)
{int kkk;
SetHandleKey(0); /* 禁止按键 */
Waiting(1000);
kkk=PHBOOK_Select(PB_ALL);//获取phoneBookSize
Waiting(80);
//Sim_init_read_ok=-1;
if(kkk>0)
{
memset(SIM_BOOK, 0, sizeof(phone_book_t)*phoneBookSize);
kkk=PHBOOK_ReadAll(SIM_BOOK,phoneBookSize);
}
SetHandleKey(1); /* 允许按键 */
return kkk;
}
static int readSim(void)
{int kkk;
SetHandleKey(0); /* 禁止按键 */
kkk=PHBOOK_Select(PB_ALL);//获取phoneBookSize
Sim_init_read_ok=-1;
if(kkk>0)
{
SIM_BOOK = (phone_book_t*)malloc(sizeof(phone_book_t)*(phoneBookSize+1));
if(SIM_BOOK==NULL)
return -1;
memset(SIM_BOOK, 0, sizeof(phone_book_t)*phoneBookSize);
kkk=PHBOOK_ReadAll(SIM_BOOK,phoneBookSize);
//--------------
if(kkk<0)
free(SIM_BOOK);
else
Sim_init_read_ok=1;
//--------------
}
SetHandleKey(1); /* 允许按键 */
return Sim_init_read_ok;
}
void Sim_Book_init(void)
{
Sim_init_read_ok=-1;
}
// phoneBookRead = 0;
// phoneBookMax = max;
//phoneBookSize
#endif
void SimLode(void)
{
if(Sim_init_read_ok<0)
readSim();
}
static int inputSimFullCard(phone_book_t *pCard)
{
phone_book_t nCard;
char number[SIMMAX_PHONENum_LEN];
rect area;
int sel;
//int data;
memcpy(&nCard, pCard, sizeof(phone_book_t));
/* sel = PB_SelectGroup(&nCard.group);
if (sel < 0)
return -1;
*/
memcpy(number, nCard.number, SIMMAX_PHONENum_LEN);
inputnumber:
SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);//yu SetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
sel = InputLine(&area, TranslateChar("输入号码"), (BYTE*)number, SIMMAX_PHONENum_LEN-1, INPUT_DIGITAL | INPUT_FIXED);
if (sel < 0)
return -1;
if(0==strlen(number))
goto inputnumber;
/* if (CheckNumberExist(number, nCard.number)) {
XMessageBox("11", "号码已经存在", ID_OK);
goto inputnumber;
}*/
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, 14, INPUT_PINYIN);
if (sel == -1)
return -1;
if (sel == -2)
goto inputnumber;
if(0==strlen(nCard.name))
goto inputname;
//----------------- yu
if((0==strlen(nCard.name)) && (0== strlen(number)))
{
XTipWndShow(TranslateChar("保存错误"),1);
return -3;
}
//-----------------
//input_ok:
memcpy(nCard.number, number, SIMMAX_PHONENum_LEN-1);//yu memcpy(nCard.number, number, NAME_LEN-1);
memcpy(pCard, &nCard, sizeof(phone_book_t));
return 0;
}
#define SIMBOOKSIMBOOK 1
#ifdef SIMBOOKSIMBOOK
static phone_book_t gSimFindedCard;//yu static PHONE_CARD gFindedCard;
//static BYTE gDisplayGroup = 0xFF;
typedef struct {
window_t wnd;
listbox_t list;
inputbox_t *keyb;
menu_t tmenu;
int select;
WORD card[MAX_CARD_NUM*3]; /* 搜索结果,待显示的电话本 */
WORD acard[MAX_CARD_NUM*3]; /* 全部待搜索电话本 */
WORD total; /* 全部待搜索电话本总数 */
WORD sum; /* 搜索结果,待显示的电话本数目 */
char keyWord[SIMMAX_PHONENum_LEN]; /* 关键字 */
BYTE keyLen; /* 关键字输入长度 */
// BYTE group[MAX_GROUP_NUM];
// BYTE grpSum;
// BYTE grpCur;
// BYTE grpShow;
BYTE idFind;
int next; /* 退出状态 */
} pb_browse_t;
static pb_browse_t *gSimPBBrowse = NULL;
static int OnDrawSimCardItem(listbox_t *lb, rect *rc, int num)
{ phone_book_t nCard;//PHONE_CARD nCard;
if (num >= gSimPBBrowse->sum)
return -1;
nCard=SIM_BOOK[gSimPBBrowse->card[num]];
//yu if(nCard.index<1)//if (PB_ReadOne(gSimPBBrowse->card[num], &nCard) < 0)
//yu return -1;
MoveTo(rc->Xmin + 2, rc->Ymax);
if(0==strlen(nCard.name))
DrawText((BYTE*)nCard.number, 0, 12);//DrawText((BYTE*)nCard.name, 0, 12);
else
DrawText((BYTE*)nCard.name, 0, 12);//DrawText((BYTE*)nCard.name, 0, 12);
// MoveTo(rc->Xmax - 82, rc->Ymax - 1);
// DrawText(nCard.number, 0, 10);
return 0;
}
static WORD simSearchPhoneBook(char *keyWord)
{
WORD i, finded;
int len;
char ascName[SIMMAX_NAME_LEN];
phone_book_t nCard;// PHONE_CARD nCard;
len = strlen(keyWord);
if (len == 0) {
memcpy(gSimPBBrowse->card, gSimPBBrowse->acard, MAX_CARD_NUM*3*2);
gSimPBBrowse->sum = gSimPBBrowse->total;
return gSimPBBrowse->total;
}
finded = 0;
for (i = 0; i < gSimPBBrowse->total; ++i) {
nCard=SIM_BOOK[gSimPBBrowse->acard[i]];//PB_ReadOne(gSimPBBrowse->acard[i], &nCard);
ChangeNameToASCII((BYTE*)nCard.name, (BYTE*)ascName, SIMMAX_NAME_LEN);
if (xstrcmp(ascName, keyWord, len) != 0)
continue;
gSimPBBrowse->card[finded++] = gSimPBBrowse->acard[i];
}
return finded;
}
static int SimSearchPhoneCard(void)
{
gSimPBBrowse->sum = simSearchPhoneBook(gSimPBBrowse->keyWord);
return (int)(gSimPBBrowse->sum);
}
static void ShowSimKeyword(void)
{
rect area;
BYTE first, len;
SetRect(&area, 48, LCD_HEIGHT-HZ_MAIN, LCD_WIDTH, LCD_HEIGHT);
EraseRect(&area);
first = 0;
len = gSimPBBrowse->keyLen;
if (len > 10) {
first = len - 10;
len = 10;
}
MoveTo(60, LCD_HEIGHT+1);
DrawText((BYTE*)gSimPBBrowse->keyWord, first, len);
}
static int PB_SimDetailShow(WORD num);//(WORD pos)
static void OnBrowseSimKeyDown(int keyID)
{
int tmp;
switch (keyID) {
case KEY_MENU:
/* 删除输入法键盘 */
XDeleteInputBoard(gSimPBBrowse->keyb);
XPopMenu(&gSimPBBrowse->tmenu, 1, LCD_HEIGHT-2, 0);
/* 重新创建输入法键盘 */
gSimPBBrowse->keyb = XCreateInputBoard(&gSimPBBrowse->wnd.comp, INPUT_ENGLISH | INPUT_FIXED);
XShowInputBoard(gSimPBBrowse->keyb);
v_WriteLcdBuff();
break;
case KEY_OK:
if (0 != gSimPBBrowse->sum) {
if (gSimPBBrowse->idFind == 1) {
gSimFindedCard=SIM_BOOK[gSimPBBrowse->card[gSimPBBrowse->select]];//PB_ReadOne(gSimPBBrowse->card[gSimPBBrowse->select], &gFindedCard);
gSimPBBrowse->next = 1;
}
else {
/* 删除输入法键盘 */
XDeleteInputBoard(gSimPBBrowse->keyb);
tmp = PB_SimDetailShow(gSimPBBrowse->card[gSimPBBrowse->select]);//tmp = PB_SimDetailShow(gSimPBBrowse->card[gSimPBBrowse->select]);
if (tmp == 1)
gSimPBBrowse->next = 1;
else
gSimPBBrowse->next = 2;
/* 重新创建输入法键盘 */
gSimPBBrowse->keyb = XCreateInputBoard(&gSimPBBrowse->wnd.comp, INPUT_ENGLISH | INPUT_FIXED);
}
XPostQuitMessage(&gSimPBBrowse->wnd);
}
break;
case KEY_CANCEL:
gSimPBBrowse->next = -1;
XPostQuitMessage(&gSimPBBrowse->wnd);
break;
case KEY_UP:
case KEY_DOWN:
XListBoxKeyHandle(&gSimPBBrowse->list, keyID);
gSimPBBrowse->select = XListBoxGetSelect(&gSimPBBrowse->list);
break;
default:
break;
}
}
static int pbSimBrowseProc(XMSG *msg)
{
int num;
BYTE *buf;
switch (msg->message) {
case MSG_PAINT:
EraseRect(&msg->comp->rc);
break;
case MSG_WAITOUT:
case MSG_KEYDOWN:
num = XInputMsgHandle(gSimPBBrowse->keyb, msg);
if (num == 1) {
buf = XInputGetInput(gSimPBBrowse->keyb);
if (gSimPBBrowse->keyLen < SIMMAX_PHONENum_LEN-1) {
gSimPBBrowse->keyWord[gSimPBBrowse->keyLen++] = buf[0];
gSimPBBrowse->keyWord[gSimPBBrowse->keyLen] = 0;
if (0 == SimSearchPhoneCard()) {
gSimPBBrowse->keyLen--;
gSimPBBrowse->keyWord[gSimPBBrowse->keyLen] = 0;
SimSearchPhoneCard();
}
ShowSimKeyword();
XListBoxSet(&gSimPBBrowse->list, gSimPBBrowse->sum, HZ_MAIN, OnDrawSimCardItem);
gSimPBBrowse->select = XListBoxSetCurrent(&gSimPBBrowse->list, gSimPBBrowse->select);
XShowComponent(&gSimPBBrowse->list.comp);
v_WriteLcdBuff();
}
}
else if (num == 0) {
OnBrowseSimKeyDown(msg->param1);
}
else {
v_WriteLcdBuff();
}
break;
default:
XDefaultWindowProc(msg);
break;
}
return 0;
}
static int OnMenuSimNewCard(menu_t *pMenu)
{
int inStat;
phone_book_t nCard;
if (phoneBookSize == phoneBookRead) {
XTipWndShow(TranslateChar("空间已满"),1);//yu XMessageBox(NULL, TranslateChar("空间已满"), ID_OK);
XShowComponent(&gSimPBBrowse->wnd.comp);
v_WriteLcdBuff();
return -1;
}
memset(&nCard, 0, sizeof(phone_book_t));
nCard.index=-1;//由模块决定存储位置
inStat = inputSimFullCard(&nCard);
if (0 == inStat)
{
SetHandleKey(0); /* 禁止按键 */
if(0==PHBOOK_WriteOne(&nCard))//PB_WriteOne(NEW_CARD, &nCard);
{
XTipWndShow(TranslateChar("正在操作..."),0);//
if(0==ReReadSim())//重新加载电话本
XTipWndShow(TranslateChar("保存成功"),1);//"设置成功"
}
else
{
XTipWndShow(TranslateChar("保存失败"),1);
}
gSimPBBrowse->next = 2;
gSimPBBrowse->select = gSimPBBrowse->sum;
XPostQuitMessage(&gSimPBBrowse->wnd);
SetHandleKey(1); /* 允许按键 */
}
else {
XTipWndShow(TranslateChar("保存失败"),1);
XShowComponent(&gSimPBBrowse->wnd.comp);
v_WriteLcdBuff();
}
return 0;
}
static int OnMenuSimDeleteOne(menu_t *pMenu)
{
if (0 == gSimPBBrowse->sum)
return -1;
if (XMessageBox(NULL, TranslateChar("删除电话本?"), ID_OK) == ID_OK)
{
SetHandleKey(0); /* 禁止按键 */
if(0==PHBOOK_DeleteOne(SIM_BOOK[gSimPBBrowse->select].index)) // PB_DeleteOne(gSimPBBrowse->card[gSimPBBrowse->select]);
{
XTipWndShow(TranslateChar("正在操作..."),0);//
if(0==ReReadSim())//重新加载电话本
XTipWndShow(TranslateChar("删除成功"),1);//"设置成功"
}
gSimPBBrowse->next = 2;
XPostQuitMessage(&gSimPBBrowse->wnd);
SetHandleKey(1); /* 允许按键 */
}
return 0;
}
static int PHBOOK_DeleteAll(int Max)
{int index;
int ret=0;
for (index=0;index<Max;index++)
{
ret+=PHBOOK_DeleteOne(index);
Waiting(100);
}
return ret;
}
static int OnMenuSimDeleteAll(menu_t *pMenu)
{
if (0 == gSimPBBrowse->sum)
return -1;
if (XMessageBox(NULL, TranslateChar("删除全部?"), ID_OK) == ID_OK)
{
SetHandleKey(0); /* 禁止按键 */
XTipWndShow(TranslateChar("正在删除..."),0);//"设置成功"
PHBOOK_DeleteAll(phoneBookSize);
ReReadSim();//重新加载电话本
XTipWndShow(TranslateChar("删除成功"),1);//"设置成功"
gSimPBBrowse->next = 2;
XPostQuitMessage(&gSimPBBrowse->wnd);
SetHandleKey(1); /* 允许按键 */
}
return 0;
}
static WORD sPB_GetIndex(BYTE grp, WORD *index)
{
WORD i, cnt;
cnt = 0;
for (i = 0; i < phoneBookRead; ++i) {
index[cnt++] = i;
}
return cnt;
}
int PB_Sim_Browse(void *argv)
{
rect area;
XMSG msg;
//BYTE i;
int ret;
//-------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -