⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smsbrowse.c

📁 本程序是使用CDMA450模块开发的一个无线公话完整程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -