📄 favedit.c
字号:
#include "main_task.h"
#include "osg.h"
#include "gfm.h"
#include "system_drv.h"
#include "demux.h"
#include "keydef.h"
#include "gif.h"
#include "list.h"
#include "utc.h"
#include "nonstdio.h"
/*#include "mcx.h"*/
#include "strview.h"
#include "favedit.h"
#include "InferTt.h"
#include "FavNameFile.h"
#define MainMenuY 50
#define MainMenuX 120
#define MainMenuW 470
#define MainMenuH 290
#define MainNameW 213
#define Font_MAIN 1
#define Font_SUB 2
#define MAX_LINES 10
#define TT_LEFT 120
#define TT_TOP 395
#define TT_WIDTH 480
#define TT_HIGH 120
/*#define _DEBUG_*/
static pSTRVIEW favlist = NULL;
#define OK_BOX 0
#define CANCEL_BOX 1
#define DEL_BOX 2
typedef void (*SubBox)(int);
static SubBox subfuc = NULL;
static int boxtype = 0;
/*
#define _DEBUG_
#define _D1_ */
static UINT32 status = FTAok; /*返回主状态机的状态*/
static void DrawInfBox(int left,int top,int width,int high,char *str);
static void ShowMidPart(void);
static void ShowInf(void);
static int SaveInfToFlash(void);
static void ShowEditMenu(void);
static void DrawInfBox(int left,int top,int width,int high,char *str)
{
int len = strlen(str);
GFMDrawRectangle(left, top, width, high, Colors_white,TRUE);
GFMDrawRectangle(left+3, top+3, width -6, high -6, COLOR_weakblue,TRUE);
FNTDrawText(0, 0, left + (width - len * 9) / 2, top + 30, str);
FNTDrawText(0, 0, left+5, top + 80, "OK键确定");
FNTDrawText(0, 0, left + 225, top + 80, "退出/返回键取消");
}
static void InfBox(int code)
{
int left = MainMenuX + MainMenuW / 2 - 170;
int top = MainMenuH / 2 + MainMenuY - 30;
int width = 360;
int high = 100;
static unsigned char *ospb = NULL;
char *txt[] =
{
"您确定要保存结果退出吗?",
"您确定要退出不保存结果吗?",
"您确定要删除此项爱好设置吗?"
};
switch(code)
{
case BAPP_CREATE:
{
if(ospb)
{
DTOS_DRV_FreeMemory(ospb);
ospb = NULL;
}
ospb = (unsigned char *)DTOS_DRV_AllocateMemory(width*high);
GFMReadRectangle(left, top,width, high, ospb);
DrawInfBox(left,top,width,high ,txt[boxtype]);
}
break;
case BUTTON_SELECT:
{
if(boxtype == CANCEL_BOX)/*不保存退出*/
{
favlist = NULL;
}else if(boxtype == OK_BOX)/*保存退出*/
{
SaveInfToFlash();
}else
{
DelFromStrView(favlist,favlist->baseindex + favlist->coursory);
ShowInf();
subfuc = NULL;
}
if(ospb)
{
GFMWriteRectangle(left,top,width,high, ospb);
DTOS_DRV_FreeMemory(ospb);
ospb = NULL;
}
if(boxtype == DEL_BOX)
{
ShowStrView(favlist);
return;
}
DeleteStrView(favlist);/*内存回收*/
favlist = NULL;
subfuc = NULL;
/*这里写退出代码*/
/* status = ;*/
}
break;
case BUTTON_EXIT :
case BUTTON_CANCEL:
{
subfuc = NULL;
/*隐藏信息框*/
if(ospb)
{
GFMWriteRectangle(left,top,width,high, ospb);
DTOS_DRV_FreeMemory(ospb);
ospb = NULL;
}
}
break;
}
}
static int SaveInfToFlash(void)
{
char buf[BLOCK_SIZE/2];
char *str0,*str;
pDATA p1;
pFAVNAME p2;
int i;
if(!favlist) return;
p1 = (pDATA)buf;
p1->nums = favlist->cellnum;
str0 = p1->data;
p2 = (pFAVNAME)str0;
p2->simbol = SIMBOL_CHAR;
for(i = 0;i < favlist->cellnum;i++)
{
str = GetStrViewData(favlist,i);
p2->len = strlen(str);
if(( BLOCK_SIZE + buf - str0 - 4) > p2->len)/*缓冲是否够用*/
{
memcpy(p2->name,str,p2->len);
p2->name[p2->len] = '\0';
}else
return -1;
str0 += sizeof(FAVNAME);
str0 += p2->len +1;
p2 = (pFAVNAME)str0;
p2->simbol = SIMBOL_CHAR;
}
#ifdef _D1_
{
pFAVNAME favp;
pDATA data =(pDATA)buf;
favp = (pFAVNAME)data->data;
FNTDrawText(202, 0, 250, 215,favp->name );
}
#endif
SaveFavNames(buf,BLOCK_SIZE/2);
return 1;
}
static void ShowMidPart(void)
{
GFMDrawRectangle(MainMenuX + 3, MainMenuY + 69, 470, 321, COLOR_blue_gray, TRUE);
ShowStrView(favlist);
GFMDrawRectangle(MainMenuX + 245, MainMenuY + 120, MainMenuY + 150, MainMenuH - 74,3 , TRUE);
FNTDrawText(218, 1,MainMenuX + 40, MainMenuY + 84, "爱好列表:");
FNTDrawText(218, Font_MAIN,MainMenuX + 30, MainMenuH + 120, "OK键确定");
FNTDrawText(218, Font_MAIN,MainMenuX + 315, MainMenuH + 120, "退出键取消");
FNTDrawText(218, Font_MAIN,MainMenuX + 250, MainMenuY + 125, "1.右键添加新项");
FNTDrawText(218, Font_MAIN,MainMenuX + 250, MainMenuY + 155, "2.左键删除");
FNTDrawText(218, Font_MAIN,MainMenuX + 250, MainMenuY + 185, "3.节目+/-翻页");
FNTDrawText(218, Font_MAIN,MainMenuX + 250, MainMenuY + 215, "4.菜单键修改");
/* FNTDrawText(218, Font_MAIN,MainMenuX + 300, MainMenuH + 210, "退出键取消");*/
ShowInf();
}
static void ShowInf(void)
{
char buf[20] ={0};
char *p;
GFMDrawRectangle(MainMenuX + 245, MainMenuY + 245, MainMenuY + 150, MainMenuH - 205,3 , TRUE);
sprintf(buf,"当前共有喜好:%d项",favlist->cellnum);
FNTDrawText(0, 0,MainMenuX + 250, MainMenuY + 245, buf);
p = GetStrViewData(favlist,favlist->baseindex + favlist->coursory);
if(p)
FNTDrawText(0, 0,MainMenuX + 250, MainMenuY + 275, p);
/* if(favlist->cellnum <= 0)
drawlistcontext();*/
}
static void ShowEditMenu(void)
{
GFMDisplayOnOff(FALSE);
unpackGif(MainMenuX, MainMenuY, (unsigned char*)epggif_h, 0);
unpackGif(MainMenuX, MainMenuY + MainMenuH + 30 + 69, (unsigned char*)epggif_b, 0);
GFMDisplayOnOff(TRUE);
FNTDrawText(COLOR_lightyellow, Font_MAIN,MainMenuX + 45, MainMenuY + 15, "爱好设置");
ShowMidPart();
/*DisplayDateTime();*/
}
int FavEditEH(T_FTA_Event *event)
{
UINT8 i;
if(subfuc)
(*subfuc)(event->code);
else
switch (event -> code)
{
case BAPP_CREATE:
{
int num,i;
char *str;
if(favlist)
DeleteStrView(favlist);
favlist = CreateStrView( MainMenuX + 30,MainMenuY + 120,200,MainMenuH - 70,6,20,0);
num = LoadFavNamesData( BLOCK_SIZE /2);
if(num)
{
for(i = 0;i < num;i++)
{
GetNameByOrder(i,&str);
if(str)
AddToStrViewEx(favlist,str);
}
ReleaseFavNamesData();
}
GFMDrawRectangle(MainMenuX, MainMenuY, 620 - MainMenuX, 550 - MainMenuY, Colors_clear, TRUE);
ShowEditMenu();
#ifdef _DEBUG_
if(num)
FNTDrawText(202, 0,MainMenuX + 250, MainMenuY + 215, " begin load name!!");
#endif
}
break;
case BUTTON_CURSOR_LEFT:
{
subfuc = InfBox ;
boxtype = DEL_BOX;
(*subfuc)(BAPP_CREATE);
}
break;
case BUTTON_CURSOR_RIGHT:
/*drawlistcontext();*/
{
char buf[50];
unsigned char *ospb = (unsigned char *)malloc(TT_WIDTH *TT_HIGH);
GFMReadRectangle(TT_LEFT,TT_TOP,TT_WIDTH,TT_HIGH,ospb);
if(TT(buf))
if(strlen(buf) >= 1)
{
AddToStrView(favlist,buf);
ShowStrView(favlist);
}
GFMWriteRectangle(TT_LEFT,TT_TOP,TT_WIDTH,TT_HIGH,ospb);
free(ospb);
}
break;
case BUTTON_PAGEUP:
MoveStrViewCursor(favlist,0, favlist->ospnum);
ShowStrView(favlist);
ShowInf();
break;
case BUTTON_PAGEDOWN:
MoveStrViewCursor(favlist,0, -favlist->ospnum);
ShowStrView(favlist);
ShowInf();
break;
case BUTTON_CURSOR_DOWN:
MoveStrViewCursor(favlist,0, 1);
/*ShowStrView(favlist);*/
ShowInf();
break;
case BUTTON_CURSOR_UP:
MoveStrViewCursor(favlist,0, -1);
/*ShowStrView(favlist);*/
ShowInf();
break;
case BUTTON_EXIT :
case BUTTON_CANCEL:
{
subfuc = InfBox ;
boxtype = 1;
(*subfuc)(BAPP_CREATE);
}
break;
case BUTTON_SELECT:
{
/*确定要保存吗?*/
subfuc = InfBox ;
boxtype = 0;
(*subfuc)(BAPP_CREATE);
}
break;
case BUTTON_MENU:
{
char buf[60] = 0;
char *p = GetStrViewData(favlist,favlist->baseindex + favlist->coursory);
unsigned char *ospb = (unsigned char *)malloc(TT_WIDTH *TT_HIGH);
GFMReadRectangle(TT_LEFT,TT_TOP,TT_WIDTH,TT_HIGH,ospb);
if( TTEx(p,buf))
ModifyStrViewItem(favlist,buf,favlist->baseindex + favlist->coursory);
ShowStrView(favlist);
GFMWriteRectangle(TT_LEFT,TT_TOP,TT_WIDTH,TT_HIGH,ospb);
free(ospb);
}
break;
default:;
}
return status;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -