📄 smsbrowse.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "datatype.h"
#include "common.h"
#include "mmalloc.h"
#include "windows.h"
#include "translate.h"
//#include "timer.h"
#include "phonecard.h"
#include "card_def.h"
#include "cardmanage.h"
#include "sms_def.h"
#include "smsmanage.h"
#include "at.h"
#include "phone.h"
#include "smsbrowse.h"
#include "app.h"
#include "debug_out.h"
extern void Waiting(int);
static int SMS_DetailShow(int pos);
static int SMS_StoreInfo(void);
static BYTE gSmsPage = SMS_RECEIVE;
static SMS_ITEM gCurrentSms;
void MEM_gCurrentSms_Init(void)
{
memset(&gCurrentSms, 0, sizeof(SMS_ITEM));//清除编辑buffer区
}
BYTE SMS_SendMessage(SMS_ITEM *pSms)
{
BYTE box;
XTipWndShow(TranslateChar("正在发送..."),0);
if (AT_SmsSendTo(pSms->number, pSms->message) < 0) {
box = SMS_UNSEND;
XTipWndShow(TranslateChar("发送失败"),1);
}
else {
box = SMS_SENDED;
XTipWndShow(TranslateChar("发送成功"),1);
}
SMS_WriteOne(box, NEW_DATA, pSms);
MEM_gCurrentSms_Init();
return box;
}
extern int Readselect_PB(char * Number);
static int EditNewSms(SMS_ITEM *pSms)
{
int sel;
rect area;
menu_t popmenu;
//pSms=&gCurrentSms; 1
//memset(pSms, 0, sizeof(SMS_ITEM));//清除编辑buffer区
memset(pSms->number,0,NUMBER_LEN+3);
ReEdiatSms:
SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-2-INPUT_AREA_HEIGHT);
if (InputWindow(&area, (BYTE*)pSms->message, MAX_SMS_LEN/2, INPUT_PINYIN) < 0)
return -1;
pSms->len=strlen(pSms->message);
XCreateMenu(NULL, &popmenu);
XAppendMenuItem(&popmenu, TranslateChar("选择号码"), NULL);
XAppendMenuItem(&popmenu, TranslateChar("输入号码"), NULL);
XAppendMenuItem(&popmenu, TranslateChar("保存短信"), NULL);
XAppendMenuItem(&popmenu, TranslateChar("保存模板"), NULL);
sel = XPopMenu(&popmenu, 1, LCD_HEIGHT-2, 0);
switch (sel) {
case 0:
if (1 == Readselect_PB(pSms->number)) {
//if (1 == PB_Browse((void*)1)) {
//memcpy(pSms->number, GetSelectCard()->number, NUMBER_LEN);
sel = SMS_SendMessage(pSms);
}
else {
goto ReEdiatSms;//sel = -1;
}
break;
case 1:
SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);//yuSetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
if (InputLine(&area, TranslateChar("输入号码"), (BYTE*)pSms->number, NUMBER_LEN-1, INPUT_DIGITAL | INPUT_FIXED) < 0)
goto ReEdiatSms; //return -1;
sel = SMS_SendMessage(pSms);
break;
case 2:
//----------------- yu
if(0==pSms->len)
{
XTipWndShow(TranslateChar("保存错误"),1);
goto ReEdiatSms;
}
else
{
//-----------------
SMS_WriteOne(SMS_UNSEND, NEW_DATA, pSms);
XTipWndShow(TranslateChar("保存成功"),1);
sel = SMS_UNSEND;
}
break;
case 3:
SMS_WriteOne(SMS_SAMPLE, NEW_DATA, pSms);
XTipWndShow(TranslateChar("保存成功"),1);
sel = SMS_SAMPLE;
break;
default:
goto ReEdiatSms;//sel = -1;
break;
}
return sel;
}
const static char *smsMenuName[] = {
"新建短信",//"编辑短信",
"删除短信",
"删除全部",
"短信中心",
"存储状态",
};
const static char *smsBoxName[] = {
"收 件 箱",
"发 件 箱",
"草 稿 箱",
"短 信 模 板",
};
typedef struct {
window_t wnd;
listbox_t list;
menu_t tmenu;
int curSms;
SMS_ITEM *pSms; /* SMS内容指针 */
BYTE smsNum; /* SMS数目 */
BYTE box; /* 显示信箱 */
int next; /* 退出状态 */
} sms_list_t;
static sms_list_t *gSmsList = NULL;
extern void showSmsIcon(int xposmin, int yposMax, char id);
static int OnDrawSmsItem(listbox_t *lb, rect *rc, int num)
{
char info[60+15];
if (num >= (int)gSmsList->smsNum)
return -1;
MoveTo(rc->Xmin + 1, rc->Ymax);
if(gSmsPage == SMS_RECEIVE)
{
if(gSmsList->pSms[gSmsList->smsNum-num-1].read == 0)
showSmsIcon(rc->Xmin + 1, rc->Ymax,0);//DrawText((BYTE*)"◆", 0, 2);
else
showSmsIcon(rc->Xmin + 1, rc->Ymax,1);//DrawText((BYTE*)"◇", 0, 2);
MoveTo(rc->Xmin + 1+12, rc->Ymax);
}
sprintf(info, "%d.",num+1);
if ((gSmsPage == SMS_SAMPLE) || (gSmsPage == SMS_UNSEND))
//if (gSmsPage == SMS_UNSEND)
{
//DrawText((BYTE*)gSmsList->pSms[gSmsList->smsNum-num-1].message, 0, 14);
strncpy(&info[strlen(info)],gSmsList->pSms[gSmsList->smsNum-num-1].message,15);
}
else
{ //yu 为了显示短信的号码
//memset(info, 0, NUMBER_LEN);
GetNameFromNumber(gSmsList->pSms[gSmsList->smsNum-num-1].number, &info[strlen(info)]);
}
DrawText((BYTE*)info, 0, 13);
return 0;
}
static void OnPaint(void)
{
rect rc;
TextAlign(alignCenter, alignBottom);
MoveTo(LCD_HMID, LCD_HEIGHT);
DrawString((BYTE*)TranslateChar(smsBoxName[gSmsPage]));
TextAlign(alignLeft, alignBottom);
SetRect(&rc, 0, LCD_HEIGHT-HZ_MAIN, LCD_WIDTH, LCD_HEIGHT);
InvertRect(&rc);
}
static int smsListProc(XMSG *msg)
{
int sel;
switch (msg->message) {
case MSG_PAINT:
EraseRect(&msg->comp->rc);
OnPaint();
break;
case MSG_KEYDOWN:
switch (msg->param1) {
case KEY_CANCEL:
gSmsList->next = -1;
XPostQuitMessage(&gSmsList->wnd);
break;
case KEY_OK:
if (0 == gSmsList->smsNum)
break;
sel = XListBoxGetSelect(&gSmsList->list);
sel = gSmsList->smsNum - sel - 1;
gSmsList->pSms[sel].read=0;//读取的sms为已读
sel = SMS_DetailShow(sel);
debug_print_str(DM_RUNINFO, (info_buffer, "短信顺序=: %d", sel));
if (sel > 0) {
gSmsList->next = sel;
XPostQuitMessage(&gSmsList->wnd);
}
else {
XShowComponent(&gSmsList->wnd.comp);
v_WriteLcdBuff();
}
break;
case KEY_UP:
case KEY_DOWN:
XListBoxKeyHandle(&gSmsList->list, msg->param1);
break;
case KEY_MENU:
XPopMenu(&gSmsList->tmenu, 1, LCD_HEIGHT-2, 0);
break;
case KEY_DH://yu case KEY_QIEHUAN://sms 切换//case KEY_D1:
gSmsPage++;
//gSmsPage %= 3;//
gSmsPage %= 4;
gSmsList->curSms = 0;
gSmsList->next = 2;
XPostQuitMessage(&gSmsList->wnd);
break;
default:
break;
}
default :
XDefaultWindowProc(msg);
break;
}
return 0;
}
static int OnMenuNewSms(menu_t *pMenu)
{
int sel;
sel = EditNewSms(&gCurrentSms);
if (sel < 0) {
XShowComponent(&gSmsList->wnd.comp);
v_WriteLcdBuff();
return -1;
}
if ((BYTE)sel == gSmsPage)
gSmsList->curSms = 0;
gSmsList->next = 2;
XPostQuitMessage(&gSmsList->wnd);
return 0;
}
static int OnMenuDeleteSms(menu_t *pMenu)
{
if (gSmsList->smsNum == 0)
return -1;
if (XMessageBox(NULL,TranslateChar("删除短信?"), ID_OK) == ID_OK) {
gSmsList->curSms = XListBoxGetSelect(&gSmsList->list);
SMS_DeleteOne(gSmsList->box, (BYTE)(gSmsList->smsNum-gSmsList->curSms-1));
gSmsList->next = 2;
XPostQuitMessage(&gSmsList->wnd);
}
return 0;
}
static int OnMenuDeleteAllSms(menu_t *pMenu)
{
if (gSmsList->smsNum == 0)
return -1;
if (XMessageBox(NULL, TranslateChar("删除全部?"), ID_OK) == ID_OK) {
gSmsList->curSms = 0;
SMS_DeleteAll(gSmsList->box);
gSmsList->next = 2;
XPostQuitMessage(&gSmsList->wnd);
}
return 0;
}
static int OnMenuShowStore(menu_t *pMenu)
{
SMS_StoreInfo();
XShowComponent(&gSmsList->wnd.comp);
v_WriteLcdBuff();
return 0;
}
/*
static int OnMenuSmsCenter(menu_t *pMenu)
{
int sel;
rect area;
char number[NUMBER_LEN];
if (AT_GetSmsCenter(number) < 0)
return -1;
SetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
sel = InputLine(&area, "中心号码", (BYTE*)number, NUMBER_LEN-1, INPUT_DIGITAL | INPUT_FIXED);
if (sel == 0) {
AT_SetSmsCenter(number);
}
XShowComponent(&gSmsList->wnd.comp);
v_WriteLcdBuff();
return 0;
}*/
int goto_SMS_RECEIVE(void)
{
gSmsPage =SMS_RECEIVE;//确定进入的
return SMS_Browse(PARA_NULL);
}
extern void showNewMessage(int id);
int SMS_Browse(void *argv)
{
int exit;
rect area;
XMSG msg;
// gsm_sms_t sms[20];
/*if (argv != NULL) {
gSmsPage =*(BYTE*)argv;//确定进入的
}*/
gSmsList = (sms_list_t*)malloc(sizeof(sms_list_t));
if (NULL == gSmsList)
return -1;
gSmsList->pSms = (SMS_ITEM*)malloc(MAX_SMS_NUM*sizeof(SMS_ITEM));
if (NULL == gSmsList->pSms) {
free(gSmsList);
}
gSmsList->curSms = 0;
repeat:
if (gSmsPage == SMS_RECEIVE)
showNewMessage(0); /* 表示已经查看收到短信 */
gSmsList->box = gSmsPage;
gSmsList->smsNum = SMS_ReadBox(gSmsPage, gSmsList->pSms);
SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH, LCD_HEIGHT);
XCreateWindow(NULL, &gSmsList->wnd, &area, "SMS", smsListProc, FALSE);
XSetBaseWindow(&gSmsList->wnd);
SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-12-1);
XCreateListBox(&gSmsList->wnd.comp, \
&gSmsList->list, &area, \
gSmsList->smsNum, HZ_MAIN, OnDrawSmsItem);
gSmsList->curSms = XListBoxSetCurrent(&gSmsList->list, gSmsList->curSms);
XCreateMenu(NULL, &gSmsList->tmenu);
XAppendMenuItem(&gSmsList->tmenu, TranslateChar(smsMenuName[0]), OnMenuNewSms);
XAppendMenuItem(&gSmsList->tmenu, TranslateChar(smsMenuName[1]), OnMenuDeleteSms);
XAppendMenuItem(&gSmsList->tmenu, TranslateChar(smsMenuName[2]), OnMenuDeleteAllSms);
// XAppendMenuItem(&gSmsList->tmenu, TranslateChar(smsMenuName[3]), OnMenuSmsCenter);
XAppendMenuItem(&gSmsList->tmenu, TranslateChar(smsMenuName[4]), OnMenuShowStore);
XShowComponent(&gSmsList->wnd.comp);
v_WriteLcdBuff();
gSmsList->next = 0;
while (XGetMessage(&msg) != -1)
XDispatchMessage(&msg);
XDestroyWindow(&gSmsList->wnd);
if (2 == gSmsList->next)
goto repeat;
exit = gSmsList->next;
free(gSmsList->pSms);
free(gSmsList);
gSmsList = NULL;
debug_print_str(DM_RUNINFO, (info_buffer, "SMS_Browse RET: %d", exit));
return exit;
}
typedef struct {
window_t wnd;
textbox_t tbox;
menu_t tmenu;
SMS_ITEM sms;
int len;
int storepos;
char info[320];
int exit;
} sms_detail_t;
static sms_detail_t *gSmsDetail = NULL;
const static char *titleName[] = {
"发信人",
"收信人",
};
static int smsToShow(SMS_ITEM *sms)
{
char info[60], *pDst;
memset(info, 0, 32);
pDst = gSmsDetail->info;
*pDst = 0;
if (gSmsPage < 2) {
strcpy(pDst, " ");
strcat(pDst, TranslateChar(titleName[gSmsPage]));
strcat(pDst, ":\n");
GetNameFromNumber(sms->number, info);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -