?? ebook.c
字號:
/********************************************************************************
* SDK30F_D1
* music player main sub
*
* (c) Copyright 2002, Actions Co,Ld.
* All Right Reserved
*
* File: ebook.c
* By : wurui
* Version: 1> v1.00 first version 2005-9-19 8:28
*
* $Id: ebook.c,v 1.20 2005/12/27 01:53:52 wurui Exp $
*******************************************************************************
*/
#include "main.h"
#include "ebook.h"
#include "string.h"
#include "fifo.h"
#ifndef WIN32
#include "sdfs.h"
#endif
#ifdef WIN32
bool EBookTaskExistFlag = FALSE;
#endif
static OS_EVENT *ShowBookSem = 0;
void EBook_Task();
void EBook_KeyResolveInBook(book_vars *EBookTaskVars,int key);
void EBook_CreateFrameWindow(book_vars *EBookTaskVars);
void EBook_CreateBookWindow(book_vars *EBookTaskVars);
void EBook_ReadCurPage(book_vars *EBookTaskVars);
void EBook_ShowPrevLine(book_vars *EBookTaskVars);
void EBook_ShowNextLine(book_vars *EBookTaskVars);
void EBook_ShowCurPage(book_vars *EBookTaskVars);
void EBook_BackToMainTask(book_vars *EBookTaskVars);
void EBook_ReadPrevPage(book_vars *EBookTaskVars);
void EBook_ReadNextPage(book_vars *EBookTaskVars);
bool EBook_IsBookEnd(book_vars *EBookTaskVars);
void EBook_ResetBookWin(book_vars *EBookTaskVars);
void EBook_KeyResolveInList(book_vars *EBookTaskVars,int key);
void EBook_CreateListWindow(book_vars *EBookTaskVars);
void EBook_DeleteBookWindow(book_vars *EBookTaskVars);
void EBook_DeleteListWindow(book_vars *EBookTaskVars);
void EBook_ShowBookWindow(book_vars *EBookTaskVars);
void EBook_HideBookWindow(book_vars *EBookTaskVars);
void EBook_ShowListWindow(book_vars *EBookTaskVars);
void EBook_DealFSelMessage(book_vars *EBookTaskVars, msg_t *msg);
void EBook_GetMusicList(book_vars *EBookTaskVars);
void EBook_GetNextFile(book_vars *EBookTaskVars);
void EBook_GetPrevFile(book_vars *EBookTaskVars);
void EBook_ListBoxInc(book_vars *EBookTaskVars);
void EBook_ListBoxDec(book_vars *EBookTaskVars);
void EBook_SetLocation(book_vars *EBookTaskVars);
void EBook_DealFSelErr(book_vars *EBookTaskVars, msg_t *msg);
int GetDisplayStringForGui(const char * src,char *dst,int sel,int xlength);
int GetMaxSelForTask(const char * src,int xlength);
void cbCallBack_EBookLISTWindow(WM_MESSAGE* pMsg);
void cbCallBack_EBookReadWindow(WM_MESSAGE* pMsg);
void cbCallBack_KeyResolve(WM_MESSAGE* pMsg);
void GetBookFileName(book_vars *EBookTaskVars);
void GetBookFilePartName(book_vars *EBookTaskVars);
void EBook_SemInit(msg_t *msg_list);
void EBook_ShowBookLock();
void EBook_ShowBookUnlock();
void EBook_SemExit();
void EBook_Task()
{
msg_t msg;
book_vars EBookTaskVars;
msg_t msg_list[10];
char *ListEBookBox[6];
char ebook_menu[65];
int fileno[5];
char Title[6];
char book_ext[5];
char *filesel_exts[2];
EBook_SemInit(msg_list);
memset(&EBookTaskVars,0,sizeof(book_vars));
OSSetTaskOwnPtr((unsigned int *)&EBookTaskVars, EBOOK_FACE_ID);
ListEBookBox[0] = &ebook_menu[0];
ListEBookBox[1] = &ebook_menu[13];
ListEBookBox[2] = &ebook_menu[26];
ListEBookBox[3] = &ebook_menu[39];
ListEBookBox[4] = &ebook_menu[52];
ListEBookBox[5] = NULL;
book_ext[0] = 'T';
book_ext[1] = 'X';
book_ext[2] = 'T';
book_ext[3] = 0;
book_ext[4] = 0;
EBookTaskVars.infomation.fileflag = FALSE;
Title[0] = 'E';
Title[1] = 'B';
Title[2] = 'O';
Title[3] = 'O';
Title[4] = 'K';
Title[5] = 0;
EBookTaskVars.point[0] = ListEBookBox;
EBookTaskVars.point[1]= Title;
EBookTaskVars.point[2]= fileno;
EBookTaskVars.infomation.FifoCntNo = api_open(1, 0x0500000, 0x100000);
api_SetSelMode(EBookTaskVars.infomation.FifoCntNo, 1, (int)book_ext);
EBook_GetMusicList(&EBookTaskVars);
EBook_CreateListWindow(&EBookTaskVars);
while(1)
{
MYOSQPend(GUIToEBookWindow, &msg, 0);
switch(msg.type)
{
case MSG_REBUILDWIN:
EBook_CreateListWindow(&EBookTaskVars);
break;
case MSG_KEY:
MYOSQFlush(GUIToEBookWindow);
if(EBookTaskVars.CurWinSel == 0)
{
EBook_KeyResolveInBook(&EBookTaskVars,msg.msg.data[0]);
break;
}
if(EBookTaskVars.CurWinSel == 2)
{
EBook_KeyResolveInList(&EBookTaskVars,msg.msg.data[0]);
break;
}
}
}
}
void EBook_GetMusicList(book_vars *EBookTaskVars)
{
int i,result;
char **ListEBookBox = EBookTaskVars->point[0];
int *fileno = EBookTaskVars->point[2];
for(i = 0; i < 5; i++)
{
fileno[i] = i+1;
result = api_GetFileNameByNo(EBookTaskVars->infomation.FifoCntNo, ListEBookBox[i], i+1);
if(result == 0)
{
ListEBookBox[i] = NULL;
break;
}
}
}
void EBook_ListBoxInc(book_vars *EBookTaskVars)
{
char **ListEBookBox = EBookTaskVars->point[0];
int *fileno = EBookTaskVars->point[2];
char *sav_charptr;
int i,sav_int;
sav_charptr = ListEBookBox[0];
sav_int = fileno[0];
for(i = 0; i< 4 ; i++ )
{
ListEBookBox[i] = ListEBookBox[i+1];
fileno[i] = fileno[i+1];
}
ListEBookBox[4] = sav_charptr;
fileno[4] = sav_int;
WM_InvalidateWindow(EBookTaskVars->ChildWin[2]);
}
void EBook_ListBoxDec(book_vars *EBookTaskVars)
{
char **ListEBookBox = EBookTaskVars->point[0];
int *fileno = EBookTaskVars->point[2];
char *sav_charptr;
int i,sav_int;
sav_charptr = ListEBookBox[4];
sav_int = fileno[4];
for(i = 4; i > 0 ; i-- )
{
ListEBookBox[i] = ListEBookBox[i-1];
fileno[i] = fileno[i-1];
}
ListEBookBox[0] = sav_charptr;
fileno[0] = sav_int;
WM_InvalidateWindow(EBookTaskVars->ChildWin[2]);
}
void EBook_GetNextFile(book_vars *EBookTaskVars)
{
msg_t msg_send;
char **listbox;
int *fileno;
int result;
listbox = EBookTaskVars->point[0];
fileno = EBookTaskVars->point[2];
result = api_GetFileNameByNo(EBookTaskVars->infomation.FifoCntNo, listbox[0], fileno[4] + 1);
if(result == 0)
return;
fileno[0] = fileno[4] + 1;
EBook_ListBoxInc(EBookTaskVars);
}
void EBook_GetPrevFile(book_vars *EBookTaskVars)
{
msg_t msg_send;
char **listbox;
int *fileno,result;
listbox = EBookTaskVars->point[0];
fileno = EBookTaskVars->point[2];
if(fileno[0] - 1 > 0)
{
result = api_GetFileNameByNo(EBookTaskVars->infomation.FifoCntNo, listbox[4], fileno[0] - 1);
if(result == 0)
return;
fileno[4] = fileno[0] - 1;
EBook_ListBoxDec(EBookTaskVars);
}
}
void EBook_KeyResolveInList(book_vars *EBookTaskVars,int key)
{
int *fileno = EBookTaskVars->point[2];
switch(key)
{
case GUI_KeyEnter_KeyMode | GUI_Key_Long:
EBook_BackToMainTask(EBookTaskVars);
break;
case GUI_KeyEnter_KeyMode | GUI_Key_Up:
if( EBookTaskVars->infomation.fileno != fileno[ LISTBOX_GetSel(EBookTaskVars->ChildWin[2]) ] )
{
EBookTaskVars->infomation.fileno = fileno[ LISTBOX_GetSel(EBookTaskVars->ChildWin[2]) ];
EBook_DeleteBookWindow(EBookTaskVars);
EBook_CreateBookWindow(EBookTaskVars);
}
else
EBook_ShowBookWindow(EBookTaskVars);
break;
case GUI_KeyUp_KeyPrev | GUI_Key_Hold:
case GUI_KeyUp_KeyPrev | GUI_Key_Down:
if( LISTBOX_GetSel(EBookTaskVars->ChildWin[2]) == 0 )
EBook_GetPrevFile(EBookTaskVars);
else
LISTBOX_DecSel(EBookTaskVars->ChildWin[2]);
break;
case GUI_KeyDown_KeyNext | GUI_Key_Hold:
case GUI_KeyDown_KeyNext | GUI_Key_Down:
if( LISTBOX_GetSel(EBookTaskVars->ChildWin[2]) == 4 )
EBook_GetNextFile(EBookTaskVars);
else
LISTBOX_IncSel(EBookTaskVars->ChildWin[2]);
break;
}
}
void EBook_KeyResolveInBook(book_vars *EBookTaskVars,int key)
{
switch(key)
{
case GUI_KeyBackspace_KeyPlay | GUI_Key_Up:
EBook_ShowListWindow(EBookTaskVars);
break;
case GUI_KeyEnd_KeyEQ | GUI_Key_Hold:
case GUI_KeyEnd_KeyEQ | GUI_Key_Down:
EBookTaskVars->sel -=4;
case GUI_KeyUp_KeyPrev | GUI_Key_Hold:
case GUI_KeyUp_KeyPrev | GUI_Key_Down:
EBook_ShowBookLock();
EBook_ShowPrevLine(EBookTaskVars);
break;
case GUI_KeyDelete_KeyLoop | GUI_Key_Hold:
case GUI_KeyDelete_KeyLoop | GUI_Key_Down:
EBookTaskVars->sel +=4;
case GUI_KeyDown_KeyNext | GUI_Key_Hold:
case GUI_KeyDown_KeyNext | GUI_Key_Down:
EBook_ShowBookLock();
EBook_ShowNextLine(EBookTaskVars);
break;
}
}
void EBook_ShowListWindow(book_vars *EBookTaskVars)
{
EBook_HideBookWindow(EBookTaskVars);
FRAMEWIN_SetText(EBookTaskVars->FrameWin, (char*)EBookTaskVars->point[1]);
WM_InvalidateWindow(EBookTaskVars->FrameWin);
WM_InvalidateWindow(EBookTaskVars->ChildWin[2]);
}
void EBook_ShowBookWindow(book_vars *EBookTaskVars)
{
EBookTaskVars->CurWinSel = 0;
FRAMEWIN_SetText(EBookTaskVars->FrameWin, EBookTaskVars->infomation.FileLongName);
WM_InvalidateWindow(EBookTaskVars->FrameWin);
WM_SetFocus(EBookTaskVars->ChildWin[0]);
WM_ShowWindow(EBookTaskVars->ChildWin[0]);
WM_ShowWindow(EBookTaskVars->ChildWin[1]);
WM_InvalidateWindow(EBookTaskVars->ChildWin[0]);
}
void EBook_HideBookWindow(book_vars *EBookTaskVars)
{
EBookTaskVars->CurWinSel = 2;
WM_SetFocus(EBookTaskVars->ChildWin[2]);
WM_HideWindow(EBookTaskVars->ChildWin[0]);
WM_HideWindow(EBookTaskVars->ChildWin[1]);
}
void EBook_BackToMainTask(book_vars *EBookTaskVars)
{
if(EBookTaskVars->infomation.fileflag == TRUE)
{
api_CloseFile(EBookTaskVars->infomation.FifoCntNo);
EBookTaskVars->infomation.fileflag == FALSE;
}
api_close(EBookTaskVars->infomation.FifoCntNo);
WM_SetFocus(WM_HBKWIN);
WM_DeleteWindow(EBookTaskVars->FrameWin);
MainTaskCreate();
EBookTaskDelete(EBookTaskVars);
}
void EBook_ShowPrevLine(book_vars *EBookTaskVars)
{
if(--EBookTaskVars->sel<0)
{
if(EBookTaskVars->page == 0)
{
EBookTaskVars->sel = 0;
}
else
{
EBook_ReadPrevPage(EBookTaskVars);
EBook_ResetBookWin(EBookTaskVars);
EBookTaskVars->sel = EBookTaskVars->maxsel - 6;
}
}
WM_InvalidateWindow(EBookTaskVars->ChildWin[0]);
if(EBookTaskVars->ChildWin[1])
SCROLLBAR_SetValue(EBookTaskVars->ChildWin[1],EBookTaskVars->sel);
}
void EBook_ShowNextLine(book_vars *EBookTaskVars)
{
if(++EBookTaskVars->sel > EBookTaskVars->maxsel)
{
EBookTaskVars->sel=EBookTaskVars->maxsel;
}
else if(EBookTaskVars->sel + 6 >EBookTaskVars->maxsel)
{
if(!EBook_IsBookEnd(EBookTaskVars))
{
EBook_ReadNextPage(EBookTaskVars);
EBook_ResetBookWin(EBookTaskVars);
}
}
WM_InvalidateWindow(EBookTaskVars->ChildWin[0]);
if(EBookTaskVars->ChildWin[1])
SCROLLBAR_SetValue(EBookTaskVars->ChildWin[1],EBookTaskVars->sel);
}
void EBook_ResetBookWin(book_vars *EBookTaskVars)
{
EBookTaskVars->sel=0;
EBookTaskVars->getmaxselflag = TRUE;
GetBookFilePartName(EBookTaskVars);
FRAMEWIN_SetText(EBookTaskVars->FrameWin, EBookTaskVars->infomation.FileLongName);
WM_InvalidateWindow(EBookTaskVars->FrameWin);
WM_InvalidateWindow(EBookTaskVars->ChildWin[0]);
for(;EBookTaskVars->getmaxselflag;)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -