diff --git a/.vscode/settings.json b/.vscode/settings.json index a95b29c..33d277b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,11 @@ "stm32f4xx.h": "c", "libc.h": "c", "*.txt": "c", - "*.tmp": "c" + "*.tmp": "c", + "mywin_inc.h": "c", + "mywin_user_status_bar.h": "c", + "elf.h": "c", + "string.h": "c" }, "cortex-debug.variableUseNaturalFormat": false } \ No newline at end of file diff --git a/Project/Src/MyWinApp/mywin_user_filder.c b/Project/Src/MyWinApp/mywin_user_filder.c index 7307174..c1f167d 100644 --- a/Project/Src/MyWinApp/mywin_user_filder.c +++ b/Project/Src/MyWinApp/mywin_user_filder.c @@ -1,6 +1,6 @@ #include "mywin_inc.h" #include "ff.h" -// #include "nes_main.h" +// #include "nes_main.h" #include "gif.h" #include "system_updata.h" #include "avi.h" @@ -13,209 +13,197 @@ #include "tools.h" #include "nrf.h" #include "mywin_user_debug.h" +#include "string.h" -//文件管理器 +// 文件管理器 #define WIN_FILDER_TYPE "WIN_FilderStruct" - - - -static const char *g_popup_itmes[]= -{ - "打开", - "重命名", - "复制到系统文件", - "文件信息", - "删除文件", - "发送", +static const char *g_popup_itmes[] = + { + "打开", + "重命名", + "复制到系统文件", + "文件信息", + "删除文件", + "发送", }; +void FILDER_Delete(WIN_FilderStruct *up); -void FILDER_Delete (WIN_FilderStruct *up); - - -WIN_FilderStruct *WIN_CreatFilder (WIN_WindowStruct *base, - void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg), - int x,int y,int x_size,int y_size) +WIN_FilderStruct *WIN_CreatFilder(WIN_WindowStruct *base, + void (*msgLoop)(struct _WIN_WindowStruct *win, WIN_MsgStruct *msg), + int x, int y, int x_size, int y_size) { - //重设消息循环 - if (msgLoop==0) + // 重设消息循环 + if (msgLoop == 0) { - msgLoop=(void (*)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg))FILDER_defaultMsgLoop; + msgLoop = (void (*)(struct _WIN_WindowStruct *win, WIN_MsgStruct *msg))FILDER_defaultMsgLoop; } - - WIN_FilderStruct *ret=mymalloc_exm (sizeof ( WIN_FilderStruct)); - //调用父类的构造函数 + + WIN_FilderStruct *ret = mymalloc_exm(sizeof(WIN_FilderStruct)); + // 调用父类的构造函数 if (ret) { - mymemset (ret,0,sizeof ( WIN_FilderStruct)); -// if (0==WIN_CreatWindowExt((WIN_WindowStruct *)ret,base,msgLoop,x,y,x_size,y_size)) - if (0==WIN_CreatTouchEx((WIN_TouchWinStruct *)ret,base,msgLoop,x,y,x_size,y_size)) + mymemset(ret, 0, sizeof(WIN_FilderStruct)); + // if (0==WIN_CreatWindowExt((WIN_WindowStruct *)ret,base,msgLoop,x,y,x_size,y_size)) + if (0 == WIN_CreatTouchEx((WIN_TouchWinStruct *)ret, base, msgLoop, x, y, x_size, y_size)) { - //创建失败 - myfree (ret); - ret=0; + // 创建失败 + myfree(ret); + ret = 0; } else { - //构造 - ((WIN_WindowStruct *)ret)->winType=WIN_FILDER_TYPE; - ((WIN_WindowStruct *)ret)->deleteWindow=(void (*)(struct _WIN_WindowStruct *win))FILDER_Delete; - ((WIN_WindowStruct *)ret)->bkcolor=0x808080; - ((WIN_WindowStruct *)ret)->color=0xffffff; - ((WIN_WindowStruct *)ret)->intercept=1;//不发送按键消息到父窗口 - ret->titleHight=30; - ret->itemHight=30; - ret->itemIndent=35; - ret->scrollbar_xsize=10; - ret->itemNumOnePage=(((WIN_WindowStruct *)ret)->y_size-ret->titleHight)/ret->itemHight; - ret->itemHight=(((WIN_WindowStruct *)ret)->y_size-ret->titleHight)/ret->itemNumOnePage; - ret->imgDir=0; - ret->imgFile=0; - - tools_updata_on(); + // 构造 + ((WIN_WindowStruct *)ret)->winType = WIN_FILDER_TYPE; + ((WIN_WindowStruct *)ret)->deleteWindow = (void (*)(struct _WIN_WindowStruct *win))FILDER_Delete; + ((WIN_WindowStruct *)ret)->bkcolor = 0x808080; + ((WIN_WindowStruct *)ret)->color = 0xffffff; + ((WIN_WindowStruct *)ret)->intercept = 1; // 不发送按键消息到父窗口 + ret->titleHight = 30; + ret->itemHight = 30; + ret->itemIndent = 35; + ret->scrollbar_xsize = 10; + ret->itemNumOnePage = (((WIN_WindowStruct *)ret)->y_size - ret->titleHight) / ret->itemHight; + ret->itemHight = (((WIN_WindowStruct *)ret)->y_size - ret->titleHight) / ret->itemNumOnePage; + ret->imgDir = 0; + ret->imgFile = 0; + + tools_updata_on(); } } - - + return ret; } - - -void FILDER_Delete (WIN_FilderStruct *up) +void FILDER_Delete(WIN_FilderStruct *up) { - tools_updata_off(); - - //调用父类的销毁函数 - WIN_DeleteWindow ( (WIN_WindowStruct *)up); + tools_updata_off(); + // 调用父类的销毁函数 + WIN_DeleteWindow((WIN_WindowStruct *)up); } +// 设置文件索引 +int FILDER_SetIndex(WIN_FilderStruct *filder, int index); - -//设置文件索引 -int FILDER_SetIndex(WIN_FilderStruct *filder,int index); - -//设置文件路径,同时扫描路径下的文件 -void FILDER_SetFileDir (WIN_FilderStruct *filder,char *dir) +// 设置文件路径,同时扫描路径下的文件 +void FILDER_SetFileDir(WIN_FilderStruct *filder, char *dir) { - mymemcpy (filder->dirName,dir,strlen(dir)); + mymemcpy(filder->dirName, dir, strlen(dir)); FILDER_ClearItem(filder); - FILDER_ScanFile (filder); + FILDER_ScanFile(filder); } - -//清空条目 -void FILDER_ClearItem (WIN_FilderStruct *filder) +// 清空条目 +void FILDER_ClearItem(WIN_FilderStruct *filder) { - filder->fileNum=0; - filder->firstItemOnPage=0; - filder->dirNum=0; - filder->file[0].name[0]=0; - FILDER_SetIndex(filder,0); + filder->fileNum = 0; + filder->firstItemOnPage = 0; + filder->dirNum = 0; + filder->file[0].name[0] = 0; + FILDER_SetIndex(filder, 0); } - - -//添加一个文件条目 -void FILDER_AddItem (WIN_FilderStruct *filder,Filder_FildInfo *file) +// 添加一个文件条目 +void FILDER_AddItem(WIN_FilderStruct *filder, Filder_FildInfo *file) { - if (filder->fileNumfileNum < FILDER_FILE_MAXNUM) { - mymemcpy (&filder->file[filder->fileNum],file,sizeof (Filder_FildInfo)); + mymemcpy(&filder->file[filder->fileNum], file, sizeof(Filder_FildInfo)); filder->fileNum++; - - //如果是文件夹,文件夹数目加1 - if (file->type==FILDER_DIR_TYPE) - { filder->dirNum++; } + + // 如果是文件夹,文件夹数目加1 + if (file->type == FILDER_DIR_TYPE) + { + filder->dirNum++; + } } } - -//在指定位置插入一个条目 -void FILDER_InsertItem (WIN_FilderStruct *filder,Filder_FildInfo *file,int index) +// 在指定位置插入一个条目 +void FILDER_InsertItem(WIN_FilderStruct *filder, Filder_FildInfo *file, int index) { - if (index<0) return; - if (filder->fileNumfileNum < FILDER_FILE_MAXNUM) { - //在列表中间插入条目 - if (indexfileNum) + // 在列表中间插入条目 + if (index < filder->fileNum) { - //先向后移动,留出位置 - for (int i=filder->fileNum-1;i>=index;i--) + // 先向后移动,留出位置 + for (int i = filder->fileNum - 1; i >= index; i--) { - mymemcpy (&filder->file[i+1],&filder->file[i],sizeof (Filder_FildInfo)); + mymemcpy(&filder->file[i + 1], &filder->file[i], sizeof(Filder_FildInfo)); } - //插入条目 - mymemcpy (&filder->file[index],file,sizeof (Filder_FildInfo)); + // 插入条目 + mymemcpy(&filder->file[index], file, sizeof(Filder_FildInfo)); filder->fileNum++; - - //如果是文件夹,文件夹数目加1 - if (file->type==FILDER_DIR_TYPE) - { filder->dirNum++; } + + // 如果是文件夹,文件夹数目加1 + if (file->type == FILDER_DIR_TYPE) + { + filder->dirNum++; + } } else { - FILDER_AddItem (filder,file); + FILDER_AddItem(filder, file); } - } + } } - -//入栈 -int FILDER_PathPush (WIN_FilderStruct *filder) +// 入栈 +int FILDER_PathPush(WIN_FilderStruct *filder) { - if (filder->path.fileNumpath.fileNum < FILDER_DIR_DEPTH) { - for (int i=filder->path.fileNum;i>0;i--) + for (int i = filder->path.fileNum; i > 0; i--) { - filder->path.first[i]=filder->path.first[i-1]; - filder->path.index[i]=filder->path.index[i-1]; + filder->path.first[i] = filder->path.first[i - 1]; + filder->path.index[i] = filder->path.index[i - 1]; } - filder->path.first[0]=filder->firstItemOnPage; - filder->path.index[0]=filder->index; + filder->path.first[0] = filder->firstItemOnPage; + filder->path.index[0] = filder->index; filder->path.fileNum++; return 0; } return -1; } -//出栈 -int FILDER_PathPull (WIN_FilderStruct *filder) +// 出栈 +int FILDER_PathPull(WIN_FilderStruct *filder) { if (filder->path.fileNum) { - filder->firstItemOnPage=filder->path.first[0]; - filder->index=filder->path.index[0]; + filder->firstItemOnPage = filder->path.first[0]; + filder->index = filder->path.index[0]; filder->path.fileNum--; - for (int i=0;ipath.fileNum;i++) + for (int i = 0; i < filder->path.fileNum; i++) { - filder->path.first[i]=filder->path.first[i+1]; - filder->path.index[i]=filder->path.index[i+1]; + filder->path.first[i] = filder->path.first[i + 1]; + filder->path.index[i] = filder->path.index[i + 1]; } return 0; } return -1; } - - -//把文件名追加到目录,同时扫描路径下的文件,目标不是目录时返回-1 -int FILDER_DirAppend (WIN_FilderStruct *filder,Filder_FildInfo *file) +// 把文件名追加到目录,同时扫描路径下的文件,目标不是目录时返回-1 +int FILDER_DirAppend(WIN_FilderStruct *filder, Filder_FildInfo *file) { - int dir_len=strlen(filder->dirName); - - if (file->type==FILDER_DIR_TYPE) + int dir_len = strlen(filder->dirName); + + if (file->type == FILDER_DIR_TYPE) { - filder->dirName[dir_len]='/'; + filder->dirName[dir_len] = '/'; dir_len++; - mymemcpy (&filder->dirName[dir_len],file->name,strlen(file->name)+1); - FILDER_PathPush (filder); + mymemcpy(&filder->dirName[dir_len], file->name, strlen(file->name) + 1); + FILDER_PathPush(filder); FILDER_ClearItem(filder); - FILDER_ScanFile (filder); - FILDER_SetIndex(filder,0); + FILDER_ScanFile(filder); + FILDER_SetIndex(filder, 0); return 0; } else @@ -224,20 +212,25 @@ int FILDER_DirAppend (WIN_FilderStruct *filder,Filder_FildInfo *file) } } -//剪短一层目录,同时扫描目录下的文件,不能简短时返回-1 -int FILDER_DirCut (WIN_FilderStruct *filder) +// 剪短一层目录,同时扫描目录下的文件,不能简短时返回-1 +int FILDER_DirCut(WIN_FilderStruct *filder) { - int dir_len=strlen(filder->dirName); - if (dir_len==0) return -1; - char *ptr_name=&filder->dirName[dir_len-1]; - while (*ptr_name&&(*ptr_name!='/')&&(*ptr_name!=':')) {*ptr_name=0;ptr_name--;} - if (*ptr_name=='/') - { - *ptr_name=0; + int dir_len = strlen(filder->dirName); + if (dir_len == 0) + return -1; + char *ptr_name = &filder->dirName[dir_len - 1]; + while (*ptr_name && (*ptr_name != '/') && (*ptr_name != ':')) + { + *ptr_name = 0; + ptr_name--; + } + if (*ptr_name == '/') + { + *ptr_name = 0; FILDER_ClearItem(filder); FILDER_PathPull(filder); - FILDER_ScanFile (filder); - FILDER_SetIndex(filder,filder->index); + FILDER_ScanFile(filder); + FILDER_SetIndex(filder, filder->index); return 0; } else @@ -246,658 +239,655 @@ int FILDER_DirCut (WIN_FilderStruct *filder) } } - -//生成文件路径 -void FILDER_GetFileRoute (WIN_FilderStruct *filder) +// 生成文件路径 +void FILDER_GetFileRoute(WIN_FilderStruct *filder) { - int dir_len=strlen(filder->dirName); - mymemcpy (filder->fileName,filder->dirName,dir_len+1); - filder->fileName[dir_len]='/'; + int dir_len = strlen(filder->dirName); + mymemcpy(filder->fileName, filder->dirName, dir_len + 1); + filder->fileName[dir_len] = '/'; dir_len++; - mymemcpy (&filder->fileName[dir_len],filder->file[filder->index].name,strlen(filder->file[filder->index].name)+1); + mymemcpy(&filder->fileName[dir_len], filder->file[filder->index].name, strlen(filder->file[filder->index].name) + 1); } - -//扫描文件 -void FILDER_ScanFile (WIN_FilderStruct *filder) +// 扫描文件 +void FILDER_ScanFile(WIN_FilderStruct *filder) { - FRESULT ret=FR_OK; - DIR dir={0}; - FILINFO *file_info=0; - Filder_FildInfo *file_info_x=0; - file_info=mymalloc (sizeof(FILINFO)); - file_info_x=mymalloc (sizeof (Filder_FildInfo)); - ret=f_findfirst(&dir,file_info,filder->dirName,"*"); - while ((ret==FR_OK)&&(file_info->fname[0]!=0)) + FRESULT ret = FR_OK; + DIR dir = {0}; + FILINFO *file_info = 0; + Filder_FildInfo *file_info_x = 0; + file_info = mymalloc(sizeof(FILINFO)); + file_info_x = mymalloc(sizeof(Filder_FildInfo)); + ret = f_findfirst(&dir, file_info, filder->dirName, "*"); + while ((ret == FR_OK) && (file_info->fname[0] != 0)) { - mymemcpy (file_info_x->name,file_info->fname,strlen(file_info->fname)+1); - file_info_x->size=file_info->fsize; - if (AM_DIR&file_info->fattrib) - {file_info_x->type=FILDER_DIR_TYPE;} - else {file_info_x->type=FILDER_FILE_TYPE;} - if (filder->fileNumname, file_info->fname, strlen(file_info->fname) + 1); + file_info_x->size = file_info->fsize; + if (AM_DIR & file_info->fattrib) { - if (file_info_x->type==FILDER_DIR_TYPE) + file_info_x->type = FILDER_DIR_TYPE; + } + else + { + file_info_x->type = FILDER_FILE_TYPE; + } + if (filder->fileNum < FILDER_FILE_MAXNUM) + { + if (file_info_x->type == FILDER_DIR_TYPE) { - FILDER_InsertItem (filder,file_info_x,filder->dirNum); + FILDER_InsertItem(filder, file_info_x, filder->dirNum); } else { - FILDER_AddItem (filder,file_info_x); + FILDER_AddItem(filder, file_info_x); } } else { break; } - ret=f_findnext(&dir,file_info); + ret = f_findnext(&dir, file_info); } myfree(file_info); myfree(file_info_x); } - - - -//打开文件 -void FILDER_OpenFile (WIN_FilderStruct *filder) +// 打开文件 +void FILDER_OpenFile(WIN_FilderStruct *filder) { - int str_len=strlen(filder->file[filder->index].name); - char *p_str=&filder->file[filder->index].name[str_len-4]; - if (strcmp (p_str,".jpg")==0) + int str_len = strlen(filder->file[filder->index].name); + char *p_str = &filder->file[filder->index].name[str_len - 4]; + if (strcmp(p_str, ".jpg") == 0) { FILDER_GetFileRoute(filder); - PHOTO_ShowPhoto ((WIN_WindowStruct *)filder,filder->fileName); + PHOTO_ShowPhoto((WIN_WindowStruct *)filder, filder->fileName); } - else if (strcmp (p_str,".bmp")==0) + else if (strcmp(p_str, ".bmp") == 0) { FILDER_GetFileRoute(filder); - PHOTO_ShowPhoto ((WIN_WindowStruct *)filder,filder->fileName); + PHOTO_ShowPhoto((WIN_WindowStruct *)filder, filder->fileName); } - else if (strcmp (p_str,".png")==0) + else if (strcmp(p_str, ".png") == 0) { FILDER_GetFileRoute(filder); - PHOTO_ShowPhoto ((WIN_WindowStruct *)filder,filder->fileName); + PHOTO_ShowPhoto((WIN_WindowStruct *)filder, filder->fileName); } - else if (strcmp (p_str,".pic")==0) + else if (strcmp(p_str, ".pic") == 0) { FILDER_GetFileRoute(filder); - WIN_PicStruct pic={0}; - u32 file_size=0; - u8 *data=0; - FIL *file=mymalloc (sizeof(FIL)); - FILINFO *file_info=mymalloc(sizeof(FILINFO)); + WIN_PicStruct pic = {0}; + u32 file_size = 0; + u8 *data = 0; + FIL *file = mymalloc(sizeof(FIL)); + FILINFO *file_info = mymalloc(sizeof(FILINFO)); UINT br; - u8 res=0; - f_stat((char*)filder->fileName,file_info); - data=mymalloc (file_info->fsize); - f_open(file,(char*)filder->fileName,FA_READ); - f_read(file,data,file_info->fsize,&br); + u8 res = 0; + f_stat((char *)filder->fileName, file_info); + data = mymalloc(file_info->fsize); + f_open(file, (char *)filder->fileName, FA_READ); + f_read(file, data, file_info->fsize, &br); f_close(file); - res=WIN_GetImageSize ((u8*)data,&pic.xsize,&pic.ysize); - if (res==0){pic.data=(u16*)(data+8);} - PHOTO_ShowPic ((WIN_WindowStruct *)filder,&pic); + res = WIN_GetImageSize((u8 *)data, &pic.xsize, &pic.ysize); + if (res == 0) + { + pic.data = (u16 *)(data + 8); + } + PHOTO_ShowPic((WIN_WindowStruct *)filder, &pic); myfree(data); myfree(file); myfree(file_info); } - else if (strcmp (p_str,".gif")==0) + else if (strcmp(p_str, ".gif") == 0) { FILDER_GetFileRoute(filder); - ANIMATION_ShowGif ((WIN_WindowStruct *)filder,(char*)filder->fileName); + ANIMATION_ShowGif((WIN_WindowStruct *)filder, (char *)filder->fileName); } - else if ((strcmp (p_str,".nes")==0)||(strcmp (p_str,".NES")==0)) + else if ((strcmp(p_str, ".nes") == 0) || (strcmp(p_str, ".NES") == 0)) { FILDER_GetFileRoute(filder); WIN_KeyShieldOn(); // nes_load ((u8*)filder->fileName,LCD_GetShowAddr(),LCD_GetLcdSizeX()/2-128,LCD_GetLcdSizeY()/2-120); WIN_KeyShieldOff(); - } - else if (strcmp (p_str,".avi")==0) + else if (strcmp(p_str, ".avi") == 0) { FILDER_GetFileRoute(filder); WIN_KeyShieldOn(); - int ret=video_play (filder->fileName,0); + int ret = video_play(filder->fileName, 0); WIN_KeyShieldOff(); } - else if (strcmp (p_str,".mp3")==0) + else if (strcmp(p_str, ".mp3") == 0) { FILDER_GetFileRoute(filder); - MUSIC_PlaySong((WIN_WindowStruct *)filder,filder->fileName); + MUSIC_PlaySong((WIN_WindowStruct *)filder, filder->fileName); } - else if (strcmp (p_str,".axf")==0) + else if (strcmp(p_str, ".axf") == 0) { - //执行程序文件 + // 执行程序文件 FILDER_GetFileRoute(filder); app_run_path(filder->fileName); } - else if (strcmp (p_str,".lua")==0) + else if (strcmp(p_str, ".lua") == 0) { - // 执行lua脚本 + // 执行lua脚本 FILDER_GetFileRoute(filder); - DEBUG_EnterPrintCmd(filder->fileName); - } + DEBUG_EnterPrintCmd(filder->fileName); + } else { - MSGBOX_TipsTime ((WIN_WindowStruct *)filder,"提示","不支持的文件","确定",5000); + MSGBOX_TipsTime((WIN_WindowStruct *)filder, "提示", "不支持的文件", "确定", 5000); } } - - - -void FILDER_PaintItem(WIN_FilderStruct *filder,int index) +void FILDER_PaintItem(WIN_FilderStruct *filder, int index) { - if(index<0||index>=filder->fileNum) return ; - - int x=0; - int y=filder->titleHight+filder->y_off+(index-filder->firstItemOnPage)*filder->itemHight; - int x_size=((WIN_WindowStruct *)filder)->x_size; - int y_size=filder->itemHight; - Filder_FildInfo *file=&filder->file[index]; - //显示图标 - int img_xsize=0; - int img_ysize=0; - char *img=0; - if (file->type==FILDER_DIR_TYPE) - {img=filder->imgDir;} else {img=filder->imgFile;} - if (img) - { - WIN_PicStruct *pic=WIN_GetPic(img); - if(pic) - { - WIN_DrawPic(pic,x+(filder->itemIndent-pic->xsize)/2,y+(y_size-img_ysize)/2, - pic->xsize,pic->ysize); - } - } - //显示文件名 -// RECT_Struct rs={0};//用于裁剪绘图区的矩形 -// rs.x=x+filder->itemIndent;rs.y=y; -// rs.x_size=x_size-filder->scrollbar_xsize-filder->itemIndent-1; -// rs.y_size=y_size; -// WIN_SetWinInvalidRect (((WIN_WindowStruct *)filder),&rs); - if(index==filder->index) - WIN_DrawTxtAt (file->name,x+filder->itemIndent+filder->scroll_x,y+y_size/2-WIN_GetFontHight()/2); - else - WIN_DrawTxtAt (file->name,x+filder->itemIndent,y+y_size/2-WIN_GetFontHight()/2); -} + if (index < 0 || index >= filder->fileNum) + return; - - -//绘制函数 -void FILDER_DefaultPaint (WIN_FilderStruct *filder) -{ - //使用双缓冲,防止闪烁 -// LCD_LayerBufferOn(); - - int x=0; - int y=0; - int x_size=((WIN_WindowStruct *)filder)->x_size; - int y_size=((WIN_WindowStruct *)filder)->y_size; - char txt_buff[20]={0}; - WIN_PaintBackGround ((WIN_WindowStruct *)filder); - - //绘制滚动条 - int scrollbar_x=x_size-filder->scrollbar_xsize; - int scrollbar_y=y+filder->titleHight; - int scrollbar_xsize=filder->scrollbar_xsize; - int scrollbar_ysize=y_size-scrollbar_y; - int scrollbar_tstart=filder->firstItemOnPage*scrollbar_ysize/filder->fileNum; - int scrollbar_tsize=filder->itemNumOnePage*scrollbar_ysize/filder->fileNum; - WIN_SetLcdColor (((WIN_WindowStruct *)filder)->color); - WIN_DrawHLine (scrollbar_x,scrollbar_y,scrollbar_x+scrollbar_xsize-1); - WIN_DrawHLine (scrollbar_x,scrollbar_y+scrollbar_ysize-1,scrollbar_x+scrollbar_xsize-1); - WIN_DrawVLine (scrollbar_x,scrollbar_y,scrollbar_y+scrollbar_ysize-1); - WIN_DrawVLine (scrollbar_x+scrollbar_xsize-1,scrollbar_y,scrollbar_y+scrollbar_ysize-1); - WIN_FillRectByColor (scrollbar_x,scrollbar_y+scrollbar_tstart,scrollbar_xsize,scrollbar_tsize); - - //显示标题 - WIN_SetFontMode (WIN_DRAWMODE_ALONE); - WIN_DrawTxtHCenterAt ("文件管理器",x_size/2,filder->titleHight/2-WIN_GetFontHight()/2); - - //显示文件信息 - sprintf (txt_buff,"%d/%d",filder->index+1,filder->fileNum); - WIN_DrawTxtAt (txt_buff,x_size-WIN_GetFontWidth()*strlen(txt_buff)/2-1,filder->titleHight/2-WIN_GetFontHight()/2); - - //显示选中框 - int selete_x=x; - int selete_y=y+filder->titleHight; - int selete_xsize=x_size-scrollbar_xsize-1; - int selete_ysize=filder->itemHight; - WIN_SetLcdColor (0x00ffff); - selete_y+=filder->itemHight*(filder->index-filder->firstItemOnPage); - WIN_FillRectByColorAlpha (selete_x,selete_y,selete_xsize,selete_ysize,16); - - //显示文件 - RECT_Struct rs={0};//用于裁剪绘图区的矩形 - rs.x=x;rs.y=y+filder->titleHight; - rs.x_size=x_size-scrollbar_xsize-1; - rs.y_size=y_size-rs.y; - WIN_SetLcdColor (((WIN_WindowStruct *)filder)->color); - WIN_SetWinInvalidRect (((WIN_WindowStruct *)filder),&rs); - for (int i=0;iitemNumOnePage+2;i++) + int x = 0; + int y = filder->titleHight + filder->y_off + (index - filder->firstItemOnPage) * filder->itemHight; + int x_size = ((WIN_WindowStruct *)filder)->x_size; + int y_size = filder->itemHight; + Filder_FildInfo *file = &filder->file[index]; + // 显示图标 + int img_xsize = 0; + int img_ysize = 0; + char *img = 0; + if (file->type == FILDER_DIR_TYPE) { - FILDER_PaintItem(filder,i+filder->firstItemOnPage-1); + img = filder->imgDir; } - WIN_SetWinInvalidRect (((WIN_WindowStruct *)filder),0); - - - + else + { + img = filder->imgFile; + } + if (img) + { + WIN_PicStruct *pic = WIN_GetPic(img); + if (pic) + { + WIN_DrawPic(pic, x + (filder->itemIndent - pic->xsize) / 2, y + (y_size - img_ysize) / 2, + pic->xsize, pic->ysize); + } + } + // 显示文件名 + // RECT_Struct rs={0};//用于裁剪绘图区的矩形 + // rs.x=x+filder->itemIndent;rs.y=y; + // rs.x_size=x_size-filder->scrollbar_xsize-filder->itemIndent-1; + // rs.y_size=y_size; + // WIN_SetWinInvalidRect (((WIN_WindowStruct *)filder),&rs); + if (index == filder->index) + WIN_DrawTxtAt(file->name, x + filder->itemIndent + filder->scroll_x, y + y_size / 2 - WIN_GetFontHight() / 2); + else + WIN_DrawTxtAt(file->name, x + filder->itemIndent, y + y_size / 2 - WIN_GetFontHight() / 2); } +// 绘制函数 +void FILDER_DefaultPaint(WIN_FilderStruct *filder) +{ + // 使用双缓冲,防止闪烁 + // LCD_LayerBufferOn(); + int x = 0; + int y = 0; + int x_size = ((WIN_WindowStruct *)filder)->x_size; + int y_size = ((WIN_WindowStruct *)filder)->y_size; + char txt_buff[20] = {0}; + WIN_PaintBackGround((WIN_WindowStruct *)filder); + // 绘制滚动条 + int scrollbar_x = x_size - filder->scrollbar_xsize; + int scrollbar_y = y + filder->titleHight; + int scrollbar_xsize = filder->scrollbar_xsize; + int scrollbar_ysize = y_size - scrollbar_y; + int scrollbar_tstart = filder->firstItemOnPage * scrollbar_ysize / filder->fileNum; + int scrollbar_tsize = filder->itemNumOnePage * scrollbar_ysize / filder->fileNum; + WIN_SetLcdColor(((WIN_WindowStruct *)filder)->color); + WIN_DrawHLine(scrollbar_x, scrollbar_y, scrollbar_x + scrollbar_xsize - 1); + WIN_DrawHLine(scrollbar_x, scrollbar_y + scrollbar_ysize - 1, scrollbar_x + scrollbar_xsize - 1); + WIN_DrawVLine(scrollbar_x, scrollbar_y, scrollbar_y + scrollbar_ysize - 1); + WIN_DrawVLine(scrollbar_x + scrollbar_xsize - 1, scrollbar_y, scrollbar_y + scrollbar_ysize - 1); + WIN_FillRectByColor(scrollbar_x, scrollbar_y + scrollbar_tstart, scrollbar_xsize, scrollbar_tsize); + + // 显示标题 + WIN_SetFontMode(WIN_DRAWMODE_ALONE); + WIN_DrawTxtHCenterAt("文件管理器", x_size / 2, filder->titleHight / 2 - WIN_GetFontHight() / 2); + + // 显示文件信息 + sprintf(txt_buff, "%d/%d", filder->index + 1, filder->fileNum); + WIN_DrawTxtAt(txt_buff, x_size - WIN_GetFontWidth() * strlen(txt_buff) / 2 - 1, filder->titleHight / 2 - WIN_GetFontHight() / 2); + + // 显示选中框 + int selete_x = x; + int selete_y = y + filder->titleHight; + int selete_xsize = x_size - scrollbar_xsize - 1; + int selete_ysize = filder->itemHight; + WIN_SetLcdColor(0x00ffff); + selete_y += filder->itemHight * (filder->index - filder->firstItemOnPage); + WIN_FillRectByColorAlpha(selete_x, selete_y, selete_xsize, selete_ysize, 16); + + // 显示文件 + RECT_Struct rs = {0}; // 用于裁剪绘图区的矩形 + rs.x = x; + rs.y = y + filder->titleHight; + rs.x_size = x_size - scrollbar_xsize - 1; + rs.y_size = y_size - rs.y; + WIN_SetLcdColor(((WIN_WindowStruct *)filder)->color); + WIN_SetWinInvalidRect(((WIN_WindowStruct *)filder), &rs); + for (int i = 0; i < filder->itemNumOnePage + 2; i++) + { + FILDER_PaintItem(filder, i + filder->firstItemOnPage - 1); + } + WIN_SetWinInvalidRect(((WIN_WindowStruct *)filder), 0); +} typedef struct { char *name; char *path; -}sysfile_updata_struct; +} sysfile_updata_struct; - - -static int sysfile_updata (void *ptr) +static int sysfile_updata(void *ptr) { - sysfile_updata_struct *t=ptr; - SysFile_Updata (t->name,t->path); + sysfile_updata_struct *t = ptr; + SysFile_Updata(t->name, t->path); return 0; } - -static void FILDER_Down (WIN_FilderStruct *filder) +static void FILDER_Down(WIN_FilderStruct *filder) { - if ( filder->indexfileNum-1) + if (filder->index < filder->fileNum - 1) { - FILDER_SetIndex(filder,filder->index+1); - if (filder->index>=filder->firstItemOnPage+filder->itemNumOnePage) + FILDER_SetIndex(filder, filder->index + 1); + if (filder->index >= filder->firstItemOnPage + filder->itemNumOnePage) { filder->firstItemOnPage++; } } else { - FILDER_SetIndex(filder,0); - filder->firstItemOnPage=0; + FILDER_SetIndex(filder, 0); + filder->firstItemOnPage = 0; } } - - -static void FILDER_Up (WIN_FilderStruct *filder) +static void FILDER_Up(WIN_FilderStruct *filder) { - if ( filder->index>0) + if (filder->index > 0) { - FILDER_SetIndex(filder,filder->index-1); - if (filder->indexfirstItemOnPage) + FILDER_SetIndex(filder, filder->index - 1); + if (filder->index < filder->firstItemOnPage) { filder->firstItemOnPage--; } } else { - FILDER_SetIndex(filder,filder->fileNum-1); - if (filder->fileNum>filder->itemNumOnePage) - filder->firstItemOnPage=filder->fileNum-filder->itemNumOnePage; - else filder->firstItemOnPage=0; + FILDER_SetIndex(filder, filder->fileNum - 1); + if (filder->fileNum > filder->itemNumOnePage) + filder->firstItemOnPage = filder->fileNum - filder->itemNumOnePage; + else + filder->firstItemOnPage = 0; } } - - - static int g_send_file(void *t); -static int set_progress(int now,int all); -static void get_progress(int *now,int *all); -static int g_send(void *data,int size); +static int set_progress(int now, int all); +static void get_progress(int *now, int *all); +static int g_send(void *data, int size); - -static void FILDER_Enter (WIN_FilderStruct *filder,int x,int y) +static void FILDER_Enter(WIN_FilderStruct *filder, int x, int y) { - //打开 - if (FILDER_DirAppend (filder,&filder->file[filder->index])==-1) + // 打开 + if (FILDER_DirAppend(filder, &filder->file[filder->index]) == -1) { - //是文件,在此做文件的处理 - int index=POPUP_SelectItem ((WIN_WindowStruct *)filder,(char **)g_popup_itmes,6,x,y); - if (index==0) + // 是文件,在此做文件的处理 + int index = POPUP_SelectItem((WIN_WindowStruct *)filder, (char **)g_popup_itmes, 6, x, y); + if (index == 0) { FILDER_OpenFile(filder); } - else if (index==1) + else if (index == 1) { - //重命名 - char *txt_buff=mymalloc (256); - mymemcpy (txt_buff,filder->file[filder->index].name,strlen(filder->file[filder->index].name)+1); - if (INPUT_KeyBoard ((WIN_WindowStruct *)filder,txt_buff,256)==1) - { - char *txt_path_old=mymalloc (256); - FILDER_GetFileRoute (filder); - mymemcpy (txt_path_old,filder->fileName,strlen(filder->fileName)+1);//原始路径 - mymemcpy (filder->file[filder->index].name,txt_buff,strlen(txt_buff)+1);//新文件名 - FILDER_GetFileRoute (filder);//新路径 - if (f_rename (txt_path_old,filder->fileName)==FR_OK) - { - MSGBOX_TipsTime ((WIN_WindowStruct *)filder,"提示","文件名修改成功","确定",5000); - }else - { - MSGBOX_TipsTime ((WIN_WindowStruct *)filder,"提示","文件名修改失败","确定",5000); - } - myfree (txt_path_old); - } - myfree(txt_buff); - } - else if (index==2) - { - //复制到系统文件 - FILDER_GetFileRoute(filder); - //SysFile_Updata (filder->file[filder->index].name,filder->fileName); - sysfile_updata_struct upd={0}; - upd.name=filder->file[filder->index].name; - upd.path=filder->fileName; - WORKING_DoWork ((WIN_WindowStruct *)filder,"正在复制文件到系统。。。",sysfile_updata,&upd); - - MSGBOX_TipsTime ((WIN_WindowStruct *)filder,"提示","已复制到系统文件","确定",5000); - } - else if (index==3) - { - //文件信息 - char *txt_buff=mymalloc (512); - FILDER_GetFileRoute(filder); - sprintf (txt_buff,"路径:%s\n大小:%lld Byte",filder->fileName,filder->file[filder->index].size); - MSGBOX_Tips((WIN_WindowStruct *)filder,"文件信息",txt_buff,"确定"); - myfree(txt_buff); - } - else if (index==4) - { - //删除 - if (MSGBOX_Inquiry((WIN_WindowStruct *)filder,"警告","确定删除这个文件吗?","确定","取消")==0) + // 重命名 + char *txt_buff = mymalloc(256); + mymemcpy(txt_buff, filder->file[filder->index].name, strlen(filder->file[filder->index].name) + 1); + if (INPUT_KeyBoard((WIN_WindowStruct *)filder, txt_buff, 256) == 1) { + char *txt_path_old = mymalloc(256); FILDER_GetFileRoute(filder); - if (f_unlink(filder->fileName)==FR_OK) + mymemcpy(txt_path_old, filder->fileName, strlen(filder->fileName) + 1); // 原始路径 + mymemcpy(filder->file[filder->index].name, txt_buff, strlen(txt_buff) + 1); // 新文件名 + FILDER_GetFileRoute(filder); // 新路径 + if (f_rename(txt_path_old, filder->fileName) == FR_OK) { - MSGBOX_TipsTime ((WIN_WindowStruct *)filder,"提示","文件已删除","确定",5000); - FILDER_ClearItem(filder); - FILDER_ScanFile (filder); + MSGBOX_TipsTime((WIN_WindowStruct *)filder, "提示", "文件名修改成功", "确定", 5000); } else { - MSGBOX_TipsTime ((WIN_WindowStruct *)filder,"提示","删除文件失败","确定",5000); + MSGBOX_TipsTime((WIN_WindowStruct *)filder, "提示", "文件名修改失败", "确定", 5000); + } + myfree(txt_path_old); + } + myfree(txt_buff); + } + else if (index == 2) + { + // 复制到系统文件 + FILDER_GetFileRoute(filder); + // SysFile_Updata (filder->file[filder->index].name,filder->fileName); + sysfile_updata_struct upd = {0}; + upd.name = filder->file[filder->index].name; + upd.path = filder->fileName; + WORKING_DoWork((WIN_WindowStruct *)filder, "正在复制文件到系统。。。", sysfile_updata, &upd); + + MSGBOX_TipsTime((WIN_WindowStruct *)filder, "提示", "已复制到系统文件", "确定", 5000); + } + else if (index == 3) + { + // 文件信息 + char *txt_buff = mymalloc(512); + FILDER_GetFileRoute(filder); + sprintf(txt_buff, "路径:%s\n大小:%lld Byte", filder->fileName, filder->file[filder->index].size); + MSGBOX_Tips((WIN_WindowStruct *)filder, "文件信息", txt_buff, "确定"); + myfree(txt_buff); + } + else if (index == 4) + { + // 删除 + if (MSGBOX_Inquiry((WIN_WindowStruct *)filder, "警告", "确定删除这个文件吗?", "确定", "取消") == 0) + { + FILDER_GetFileRoute(filder); + if (f_unlink(filder->fileName) == FR_OK) + { + MSGBOX_TipsTime((WIN_WindowStruct *)filder, "提示", "文件已删除", "确定", 5000); + FILDER_ClearItem(filder); + FILDER_ScanFile(filder); + } + else + { + MSGBOX_TipsTime((WIN_WindowStruct *)filder, "提示", "删除文件失败", "确定", 5000); } } } - else if(index==5) - { - // 发送 - FILDER_GetFileRoute(filder); - SysFile_SendStruct send; - SysFile_SendFileInit(&send,filder->file[filder->index].name,filder->fileName, - g_send,set_progress); - int ret=WORKING_DoWorkPro((WIN_WindowStruct *)filder,"正在发送文件",g_send_file,&send, - 0,0,get_progress,25); - if(ret==0) - MSGBOX_TipsTime ((WIN_WindowStruct *)filder,"提示","文件发送成功","确定",5000); - else - MSGBOX_TipsTime ((WIN_WindowStruct *)filder,"提示","文件发送失败","确定",5000); - - } - }//if (FILDER_DirAppend (filder,&filder->file[filder->index])==-1) + else if (index == 5) + { + // 发送 + FILDER_GetFileRoute(filder); + SysFile_SendStruct send; + SysFile_SendFileInit(&send, filder->file[filder->index].name, filder->fileName, + g_send, set_progress); + int ret = WORKING_DoWorkPro((WIN_WindowStruct *)filder, "正在发送文件", g_send_file, &send, + 0, 0, get_progress, 25); + if (ret == 0) + MSGBOX_TipsTime((WIN_WindowStruct *)filder, "提示", "文件发送成功", "确定", 5000); + else + MSGBOX_TipsTime((WIN_WindowStruct *)filder, "提示", "文件发送失败", "确定", 5000); + } + } // if (FILDER_DirAppend (filder,&filder->file[filder->index])==-1) } - - - static int g_send_now; static int g_send_all; -static int set_progress(int now,int all) +static int set_progress(int now, int all) { - g_send_now=now; - g_send_all=all; - return 0; -} -static void get_progress(int *now,int *all) -{ - *now=g_send_now; - *all=g_send_all; + g_send_now = now; + g_send_all = all; + return 0; } -static int g_send(void *data,int size) +static void get_progress(int *now, int *all) { - if(nrf_send(data,size,0)==NRF_OK) - return 0; - else return -1; + *now = g_send_now; + *all = g_send_all; +} +static int g_send(void *data, int size) +{ + if (nrf_send(data, size, 0) == NRF_OK) + return 0; + else + return -1; } static int g_send_file(void *t) { - g_send_now=0; - g_send_all=0; - SysFile_SendStruct *send=t; - int ret=0; - ret=SysFile_SendFileName(send); - if(ret!=0) return ret; + g_send_now = 0; + g_send_all = 0; + SysFile_SendStruct *send = t; + int ret = 0; + ret = SysFile_SendFileName(send); + if (ret != 0) + return ret; - ret=SysFile_SendFileInfo(send); - if(ret!=0) return ret; + ret = SysFile_SendFileInfo(send); + if (ret != 0) + return ret; - ret=SysFile_SendFileData(send); - return ret; + ret = SysFile_SendFileData(send); + return ret; } - - - - - - - - -static void FILDER_Home (WIN_FilderStruct *filder) +static void FILDER_Home(WIN_FilderStruct *filder) { - //后退 - if (FILDER_DirCut (filder)==-1) + // 后退 + if (FILDER_DirCut(filder) == -1) { - //是根目录了,退出文件管理器 + // 是根目录了,退出文件管理器 ((WIN_WindowStruct *)filder)->deleteWindow((WIN_WindowStruct *)filder); } } -int FILDER_GetTouchIndex(WIN_FilderStruct *filder,int x,int y) +int FILDER_GetTouchIndex(WIN_FilderStruct *filder, int x, int y) { - if(ytitleHight) return -1; - return (y-filder->titleHight)/filder->itemHight+filder->firstItemOnPage; + if (y < filder->titleHight) + return -1; + return (y - filder->titleHight) / filder->itemHight + filder->firstItemOnPage; } -int FILDER_SetIndex(WIN_FilderStruct *filder,int index) +int FILDER_SetIndex(WIN_FilderStruct *filder, int index) { - int x_size=((WIN_WindowStruct *)filder)->x_size-filder->itemIndent; - Filder_FildInfo *file=&filder->file[index]; - filder->scroll_xsize=(strlen(file->name)+4)*WIN_GetFontWidth()/2; - if(filder->scroll_xsize>x_size) - { - if(filder->scroll_timer==0) - filder->scroll_timer=WIN_CreatTimer((WIN_WindowStruct *)filder,50); - } - else - { - if(filder->scroll_timer) - WIN_DeleteTimer(filder->scroll_timer); - filder->scroll_timer=0; - } - filder->index=index; - filder->scroll_x=0; - return 0; + int x_size = ((WIN_WindowStruct *)filder)->x_size - filder->itemIndent; + Filder_FildInfo *file = &filder->file[index]; + filder->scroll_xsize = (strlen(file->name) + 4) * WIN_GetFontWidth() / 2; + if (filder->scroll_xsize > x_size) + { + if (filder->scroll_timer == 0) + filder->scroll_timer = WIN_CreatTimer((WIN_WindowStruct *)filder, 50); + } + else + { + if (filder->scroll_timer) + WIN_DeleteTimer(filder->scroll_timer); + filder->scroll_timer = 0; + } + filder->index = index; + filder->scroll_x = 0; + return 0; } void FILDER_ScrollTimer(WIN_FilderStruct *filder) { - int x_size=((WIN_WindowStruct *)filder)->x_size-filder->itemIndent; - int y=(filder->index-filder->firstItemOnPage)*filder->itemHight+filder->titleHight; - if(filder->scroll_x+filder->scroll_xsize>x_size) - { - filder->scroll_x-=3; - } - else - { - filder->scroll_x=4*WIN_GetFontWidth()/2; - } - WIN_SetInvalidRectWhenTop ((WIN_WindowStruct *)filder,filder->itemIndent,y,x_size,filder->itemHight); + int x_size = ((WIN_WindowStruct *)filder)->x_size - filder->itemIndent; + int y = (filder->index - filder->firstItemOnPage) * filder->itemHight + filder->titleHight; + if (filder->scroll_x + filder->scroll_xsize > x_size) + { + filder->scroll_x -= 3; + } + else + { + filder->scroll_x = 4 * WIN_GetFontWidth() / 2; + } + WIN_SetInvalidRectWhenTop((WIN_WindowStruct *)filder, filder->itemIndent, y, x_size, filder->itemHight); } +#define FIRST_ADD() \ + { \ + if (filder->firstItemOnPage < filder->fileNum - filder->itemNumOnePage) \ + { \ + filder->firstItemOnPage++; \ + if (filder->index < filder->firstItemOnPage) \ + FILDER_SetIndex(filder, filder->firstItemOnPage); \ + filder->y_off += filder->itemHight; \ + } \ + else \ + filder->y_off = 0; \ + } +#define FIRST_SUB() \ + { \ + if (filder->firstItemOnPage > 0) \ + { \ + filder->firstItemOnPage--; \ + if (filder->index > filder->firstItemOnPage + filder->itemNumOnePage - 1) \ + FILDER_SetIndex(filder, filder->firstItemOnPage + filder->itemNumOnePage - 1); \ + filder->y_off -= filder->itemHight; \ + } \ + else \ + filder->y_off = 0; \ + } -#define FIRST_ADD() {if (filder->firstItemOnPagefileNum-filder->itemNumOnePage) {filder->firstItemOnPage++;\ - if(filder->indexfirstItemOnPage) FILDER_SetIndex(filder,filder->firstItemOnPage);\ - filder->y_off+=filder->itemHight;}else filder->y_off=0;} -#define FIRST_SUB() {if (filder->firstItemOnPage>0) {filder->firstItemOnPage--;\ - if(filder->index>filder->firstItemOnPage+filder->itemNumOnePage-1)\ - FILDER_SetIndex(filder,filder->firstItemOnPage+filder->itemNumOnePage-1);\ - filder->y_off-=filder->itemHight;}else filder->y_off=0;} +#define IS_MIDDLE() (filder->firstItemOnPage > 0 || m->y_move < 0) && (filder->firstItemOnPage < filder->fileNum - filder->itemNumOnePage || m->y_move > 0) -#define IS_MIDDLE() (filder->firstItemOnPage>0||m->y_move<0)&&(filder->firstItemOnPagefileNum-filder->itemNumOnePage||m->y_move>0) - -//消息处理函数 -void FILDER_defaultMsgLoop (WIN_FilderStruct *filder,WIN_MsgStruct *msg) +// 消息处理函数 +void FILDER_defaultMsgLoop(WIN_FilderStruct *filder, WIN_MsgStruct *msg) { - WIN_MoveStruct *m=0; - WIN_KeyStruct *k=0; + WIN_MoveStruct *m = 0; + WIN_KeyStruct *k = 0; switch (msg->msg) - { - case WIN_MSG_PAINT: - FILDER_DefaultPaint(filder); + { + case WIN_MSG_PAINT: + FILDER_DefaultPaint(filder); break; - case WIN_MSG_TIMER: - if (msg->data.v==filder->scroll_timer) - { - FILDER_ScrollTimer(filder); - } - break; - case WIN_MSG_KEY: - k=msg->data.p; - //收到确定或返回键 - if (k->shortPress& KEY_VALUE_DOWN) + case WIN_MSG_TIMER: + if (msg->data.v == filder->scroll_timer) + { + FILDER_ScrollTimer(filder); + } + break; + case WIN_MSG_KEY: + k = msg->data.p; + // 收到确定或返回键 + if (k->shortPress & KEY_VALUE_DOWN) + { + FILDER_Down(filder); + } // if (k->shortPress&KEY_VALUE_DOWN) + else if (k->shortPress & KEY_VALUE_UP) + { + FILDER_Up(filder); + } // else if (k->shortPress&KEY_VALUE_UP) + else if (k->shortPress & KEY_VALUE_ENTER) + { + FILDER_Enter(filder, 100, 100); + } + else if (k->shortPress & KEY_VALUE_HOME) + { + FILDER_Home(filder); + } + if (k->shortPress) + { + WIN_SetInvalid((WIN_WindowStruct *)filder); + } + break; // case WIN_MSG_KEY: + case WIN_MSG_MOVE: + m = msg->data.p; + switch (m->moveType) + { + case MOVE_DATA_SHORT: + { + int index = FILDER_GetTouchIndex(filder, m->x_move, m->y_move); + if (index == filder->index) { - FILDER_Down(filder); - }//if (k->shortPress&KEY_VALUE_DOWN) - else if (k->shortPress&KEY_VALUE_UP) - { - FILDER_Up(filder); - }//else if (k->shortPress&KEY_VALUE_UP) - else if (k->shortPress&KEY_VALUE_ENTER) - { - FILDER_Enter(filder,100,100); + FILDER_Enter(filder, m->x_move, m->y_move); } - else if (k->shortPress&KEY_VALUE_HOME) + else if (index != -1) + { + FILDER_SetIndex(filder, index); + } + else { FILDER_Home(filder); } - if (k->shortPress) + WIN_SetInvalid((WIN_WindowStruct *)filder); + } + break; + case MOVE_DATA_MOVED: + if (IS_MIDDLE()) { - WIN_SetInvalid((WIN_WindowStruct *)filder); - } - break;//case WIN_MSG_KEY: - case WIN_MSG_MOVE: - m=msg->data.p; - switch (m->moveType) - { - case MOVE_DATA_SHORT: - { - int index=FILDER_GetTouchIndex(filder,m->x_move,m->y_move); - if(index==filder->index) - { - FILDER_Enter(filder,m->x_move,m->y_move); - } - else if(index!=-1) - { - FILDER_SetIndex(filder,index); - } - else - { - FILDER_Home(filder); - } - WIN_SetInvalid((WIN_WindowStruct *)filder); - } - break; - case MOVE_DATA_MOVED: - if(IS_MIDDLE()) - { - filder->y_off+=m->y_move; - if(filder->y_off>=filder->itemHight) - { - FIRST_SUB(); - } - else if(filder->y_off<=-filder->itemHight) - { - FIRST_ADD(); - } - if(m->y_move==0&&m->x_move==0) - { - filder->y_off=0; - } - } - else - { - filder->y_off=0; - } - WIN_SetInvalidWhenTop ((WIN_WindowStruct *)filder); - break; - default: - WIN_DefaultMsgLoop ((WIN_WindowStruct *)filder,msg); - break; - } - break; - case WIN_MSG_CHID: - switch (msg->data.v) - { - case CHID_DELETE: - break; - case CHID_USER: + filder->y_off += m->y_move; + if (filder->y_off >= filder->itemHight) { - if (msg->data2.v==BUTTON_PRESSED) - { -// if (msg->srcWin==filder->key_back) -// { -// //返回 -// FILDER_Home(filder); -// } -// else if (msg->srcWin==filder->key_up) -// { -// FILDER_Up(filder); -// } -// else if (msg->srcWin==filder->key_down) -// { -// FILDER_Down(filder); -// } -// else if (msg->srcWin==filder->key_enter) -// { -// FILDER_Enter(filder); -// } -// WIN_SetInvalid((WIN_WindowStruct *)filder); - } + FIRST_SUB(); + } + else if (filder->y_off <= -filder->itemHight) + { + FIRST_ADD(); + } + if (m->y_move == 0 && m->x_move == 0) + { + filder->y_off = 0; } - break; - default: - break; } + else + { + filder->y_off = 0; + } + WIN_SetInvalidWhenTop((WIN_WindowStruct *)filder); break; default: - WIN_DefaultMsgLoop((WIN_WindowStruct *)filder,msg); + WIN_DefaultMsgLoop((WIN_WindowStruct *)filder, msg); + break; + } + break; + case WIN_MSG_CHID: + switch (msg->data.v) + { + case CHID_DELETE: + break; + case CHID_USER: + { + if (msg->data2.v == BUTTON_PRESSED) + { + // if (msg->srcWin==filder->key_back) + // { + // //返回 + // FILDER_Home(filder); + // } + // else if (msg->srcWin==filder->key_up) + // { + // FILDER_Up(filder); + // } + // else if (msg->srcWin==filder->key_down) + // { + // FILDER_Down(filder); + // } + // else if (msg->srcWin==filder->key_enter) + // { + // FILDER_Enter(filder); + // } + // WIN_SetInvalid((WIN_WindowStruct *)filder); + } + } + break; + default: + break; + } + break; + default: + WIN_DefaultMsgLoop((WIN_WindowStruct *)filder, msg); break; } } - -//选则文件 -int FILDER_ChooseFile (WIN_WindowStruct *win,char *dir) +// 选则文件 +int FILDER_ChooseFile(WIN_WindowStruct *win, char *dir) { - WIN_FilderStruct *filder=0; - if (win) + WIN_FilderStruct *filder = 0; + if (win) { - filder=WIN_CreatFilder (win,0,0,0,win->x_size,win->y_size); + filder = WIN_CreatFilder(win, 0, 0, 0, win->x_size, win->y_size); } - else filder=WIN_CreatFilder (0,0,0,0,WIN_GetWinStruct()->lcd->getLcdSizeX(),WIN_GetWinStruct()->lcd->getLcdSizeY()); - WIN_SetBackPicPath ((WIN_WindowStruct *)filder,win->pic_path); - FILDER_SetFileDir (filder,dir); + else + filder = WIN_CreatFilder(0, 0, 0, 0, WIN_GetWinStruct()->lcd->getLcdSizeX(), WIN_GetWinStruct()->lcd->getLcdSizeY()); + WIN_SetBackPicPath((WIN_WindowStruct *)filder, win->pic_path); + FILDER_SetFileDir(filder, dir); WIN_ShowWindow((WIN_WindowStruct *)filder); - //return WIN_RunBlock ((WIN_WindowStruct *)filder); + // return WIN_RunBlock ((WIN_WindowStruct *)filder); return 0; } - - - diff --git a/Project/Src/MyWinApp/mywin_user_tool.c b/Project/Src/MyWinApp/mywin_user_tool.c index 93d8868..d3a4aa7 100644 --- a/Project/Src/MyWinApp/mywin_user_tool.c +++ b/Project/Src/MyWinApp/mywin_user_tool.c @@ -4,137 +4,127 @@ #include "mywin_user_tool.h" #include "ff.h" #include "elf.h" +#include "char_encode.h" +#include "string.h" +void MENU_ToolScanFile(WIN_MenuStruct *menu); - - - -void MENU_ToolScanFile (WIN_MenuStruct *menu); - - - -//进入设置页面 -WIN_MenuStruct *MENU_Tool (WIN_WindowStruct *base,WIN_PicStruct *pic) +// 进入设置页面 +WIN_MenuStruct *MENU_Tool(WIN_WindowStruct *base, WIN_PicStruct *pic) { - WIN_MenuStruct *menu=WIN_CreatMenu (base,(void (*)(WIN_WindowStruct *,WIN_MsgStruct *))MENU_ToolMsgLoop, - 0,0,base->x_size,base->y_size); - ((WIN_WindowStruct *)menu)->intercept=1;//不发送按键消息到父窗口 - - WIN_SetBackPicPath ((WIN_WindowStruct *)menu,base->pic_path); - MENU_SetTitle (menu,0,"工具"); - - MENU_SetMaxItem(menu,TOOL_APP_MAXNUM); + WIN_MenuStruct *menu = WIN_CreatMenu(base, (void (*)(WIN_WindowStruct *, WIN_MsgStruct *))MENU_ToolMsgLoop, + 0, 0, base->x_size, base->y_size); + ((WIN_WindowStruct *)menu)->intercept = 1; // 不发送按键消息到父窗口 + + WIN_SetBackPicPath((WIN_WindowStruct *)menu, base->pic_path); + MENU_SetTitle(menu, 0, "工具"); + + MENU_SetMaxItem(menu, TOOL_APP_MAXNUM); MENU_ToolScanFile(menu); - - WIN_ShowWindow((WIN_WindowStruct*)menu); + + WIN_ShowWindow((WIN_WindowStruct *)menu); return menu; } - - - -void MENU_ToolScanFile (WIN_MenuStruct *menu) +void MENU_ToolScanFile(WIN_MenuStruct *menu) { - FRESULT ret=FR_OK; - DIR dir={0}; - FILINFO *file_info=0; - file_info=mymalloc (sizeof(FILINFO)); - ret=f_findfirst(&dir,file_info,TOOL_APP_PATH,"*.axf"); - while ((ret==FR_OK)&&(file_info->fname[0]!=0)) + FRESULT ret = FR_OK; + DIR dir = {0}; + FILINFO *file_info = 0; + char *tmp = mymalloc(256); + file_info = mymalloc(sizeof(FILINFO)); + ret = f_findfirst(&dir, file_info, TOOL_APP_PATH, "*.axf"); + while ((ret == FR_OK) && (file_info->fname[0] != 0)) { - if (AM_DIR&file_info->fattrib) continue; - if(MENU_GetAllItemNum(menu)fname); - else break; - ret=f_findnext(&dir,file_info); + if (AM_DIR & file_info->fattrib) + continue; + gbk2utf8_str(file_info->fname, tmp); + if (MENU_GetAllItemNum(menu) < TOOL_APP_MAXNUM) + MENU_AddItem(menu, 0, tmp); + else + break; + ret = f_findnext(&dir, file_info); } myfree(file_info); - - - + myfree(tmp); } - - - - -static void MENU_ToolEnter (WIN_MenuStruct *menu) +static void MENU_ToolEnter(WIN_MenuStruct *menu) { - //选择了一个 - char *path=mymalloc(256); - sprintf(path,"%s/%s",TOOL_APP_PATH,MENU_GetSelectItem(menu)); + // 选择了一个 + char *path = mymalloc(256); + char *tmp = mymalloc(256); + utf82gbk_str(MENU_GetSelectItem(menu), tmp); + sprintf(path, "%s/%s", TOOL_APP_PATH, tmp); app_run_path(path); myfree(path); + myfree(tmp); } - - static void MENU_ToolDeleteFun(WIN_MenuStruct *menu) { } - - -//消息处理函数 -void MENU_ToolMsgLoop (WIN_MenuStruct *menu,WIN_MsgStruct *msg) +// 消息处理函数 +void MENU_ToolMsgLoop(WIN_MenuStruct *menu, WIN_MsgStruct *msg) { - WIN_MoveStruct *m=0; - WIN_TouchStruct *t=0; - WIN_KeyStruct *k=0; + WIN_MoveStruct *m = 0; + WIN_TouchStruct *t = 0; + WIN_KeyStruct *k = 0; switch (msg->msg) - { - case WIN_MSG_KEY: - k=msg->data.p; - if (k->shortPress&KEY_VALUE_ENTER) + { + case WIN_MSG_KEY: + k = msg->data.p; + if (k->shortPress & KEY_VALUE_ENTER) + { + MENU_ToolEnter(menu); + } + else + { + MENU_DefaultMsgLoop(menu, msg); + } + break; // case WIN_MSG_KEY: + case WIN_MSG_MOVE: + m = msg->data.p; + switch (m->moveType) + { + case MOVE_DATA_SHORT: + // if (m->y_move>((WIN_WindowStruct *)menu)->y_size/2-20&&m->y_move<((WIN_WindowStruct *)menu)->y_size/2+20) + // { + // MENU_ToolEnter(menu); + // } + break; + default: + MENU_DefaultMsgLoop(menu, msg); + break; + } + break; + case WIN_MSG_CHID: + switch (msg->data.v) + { + case CHID_DELETE: + break; + case CHID_USER: + { + if (msg->srcWin == menu->bar) { - MENU_ToolEnter(menu); + if (msg->data2.v == SCROLLBAR_PRESSED) + { + MENU_ToolEnter(menu); + } } else { - MENU_DefaultMsgLoop (menu,msg); + MENU_DefaultMsgLoop(menu, msg); } - break;//case WIN_MSG_KEY: - case WIN_MSG_MOVE: - m=msg->data.p; - switch (m->moveType) - { - case MOVE_DATA_SHORT: -// if (m->y_move>((WIN_WindowStruct *)menu)->y_size/2-20&&m->y_move<((WIN_WindowStruct *)menu)->y_size/2+20) -// { -// MENU_ToolEnter(menu); -// } - break; - default: - MENU_DefaultMsgLoop (menu,msg); - break; - } - break; - case WIN_MSG_CHID: - switch (msg->data.v) - { - case CHID_DELETE: - break; - case CHID_USER: - { - if (msg->srcWin==menu->bar) - { - if (msg->data2.v==SCROLLBAR_PRESSED) - { - MENU_ToolEnter(menu); - } - } - else - { - MENU_DefaultMsgLoop (menu,msg); - } - } - break; - default: - break; - } - break; + } + break; default: - MENU_DefaultMsgLoop (menu,msg); + break; + } + break; + default: + MENU_DefaultMsgLoop(menu, msg); break; } }