📄 mydoc.cpp
字号:
// MyDoc.cpp: implementation of the CMyDoc class.
//
//////////////////////////////////////////////////////////////////////
#include "MyDoc.h"
#include "wk_BaseFunc.h"
#include "SmsText.h"
#include "media.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMyDoc::CMyDoc()
{
}
CMyDoc::~CMyDoc()
{
}
void CMyDoc::Init(AECHAR * szName, long nID, XFRAMEINFO * pInfo)
{
m_nID = nID;
if (szName)
{
long nLen = sizeof(AECHAR) * (WSTRLEN(szName) + 1);
m_szName = (AECHAR *)MALLOC(nLen);
MEMCPY(m_szName, szName, nLen);
}
else
m_szName = NULL;
m_pApplet = pInfo->pApplet;
m_pDevice = pInfo->pDevice;
m_pNetWork = (CNetWork *)pInfo->pNetWork;
m_szMobile = pInfo->szMobile;
m_szMobileType = pInfo->szMobileType;
m_rcScreen.x = 0;
m_rcScreen.y = 0;
m_rcScreen.dx = m_pDevice->cxScreen;
m_rcScreen.dy = m_pDevice->cyScreen;
m_szReceiveData = NULL;
m_szPostData = NULL;
m_nBufferLength = 0;
m_pFileMgr = NULL;
m_pMenu = NULL;
m_pObject = NULL;
m_pIStatic = NULL;
m_nPageIndex = 0;
m_nMenuCount = 0;
m_nType = TYPE_CONTENTLIST;
m_bRelease = TRUE;
}
void CMyDoc::Release()
{
ClearScreen();
if (m_szName) FREEIF(m_szName);
if (m_szReceiveData) FREEIF(m_szReceiveData);
if (m_szPostData) FREEIF(m_szPostData);
if (m_pObject)
{
m_pObject->Release();
delete m_pObject;
m_pObject = NULL;
}
m_bRelease = TRUE;
}
void CMyDoc::Suspend()
{
if (m_pObject)
{
m_pObject->Suspend();
}
else
{
ClearScreen();
}
}
void CMyDoc::Resume()
{
if (m_pObject)
{
m_pObject->Resume();
}
else
{
ClearScreen();
Display();
}
}
void CMyDoc::Create()
{
m_bRelease = FALSE;
Construct(NULL,0);
}
boolean CMyDoc::KeyHandle(AEEEvent evt, uint16 wParam, uint32 dwParam)
{
boolean status = FALSE;
if (m_pObject)
{
status = m_pObject->KeyHandle(evt, wParam, dwParam);
if (m_pObject->m_bRelease)
{
delete m_pObject;
m_pObject = NULL;
Display();
}
return status;
}
switch(evt)
{
//Key handler
case EVT_KEY:
//case EVT_KEY_PRESS:
if (wParam == AVK_CLR)
{
Release();
status = TRUE;
}
else if (m_pMenu)
{
if (IMENUCTL_HandleEvent(m_pMenu, evt, wParam, dwParam))
status = TRUE;
}
break;
case EVT_COMMAND:
Browse(wParam);
status = TRUE;
break;
}
return status;
}
void CMyDoc::Browse(uint16 nID)
{
XFRAMEINFO xFrame;
CtlAddItem pMenu;
if (m_pMenu == NULL) return;
xFrame.pApplet = m_pApplet;
xFrame.pDevice = m_pDevice;
xFrame.pNetWork = (void *)m_pNetWork;
xFrame.szMobile = m_szMobile;
xFrame.szMobileType = m_szMobileType;
if (!IMENUCTL_GetItem(m_pMenu, nID, &pMenu))
{
/*
AEERect rcScreen;
char szBuf[512];
AECHAR * szText = NULL;
SPRINTF(szBuf, "ID = %d", nID);
StrToWstr( szBuf, &szText);
rcScreen.x=0;
rcScreen.y=0;
rcScreen.dx=m_pDevice->cxScreen;
rcScreen.dy=m_pDevice->cyScreen;
ClearScreen();
IDISPLAY_ClearScreen(m_pApplet->m_pIDisplay);
if (m_pIStatic == NULL)
{
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_STATIC, (void * *)&m_pIStatic);
}
ISTATIC_SetRect(m_pIStatic, &rcScreen);
PrintString2(m_pIStatic, m_szName, szText, TRUE);
if (szText) FREEIF(szText);
*/
return;
}
/* if((pMenu.dwData & 0xffff) == CONTENT_SMS)
{
m_pObject = new CSmsText;
m_pObject->Init((AECHAR *)pMenu.pText, nID, &xFrame);
m_pObject->Create();
}
else*/
if((pMenu.dwData & 0xffff) == CONTENT_PIC||(pMenu.dwData & 0xffff) == CONTENT_SOUND)
{
m_pObject = new CMedia;
m_pObject->Init((AECHAR *)pMenu.pText, nID, &xFrame);
ClearScreen();
m_pObject->m_nType = pMenu.dwData;
m_pObject->m_bMyDoc = TRUE;
m_pObject->Create();
}
}
void CMyDoc::Construct(char * szBuffer, long nBufferLength)
{
Display();
return;
}
void CMyDoc::Display()
{
IDISPLAY_ClearScreen(m_pApplet->m_pIDisplay);
IFile *f;
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_MENUCTL, (void **) &m_pMenu);
if (m_pMenu == NULL)
{
ShowResString(m_pApplet->m_pIShell, &m_pIStatic, &m_rcScreen, m_szName, IDS_ERR_MEM);
return;
}
{
// 设置菜单和图片位置
AEERect rect;
rect.x = 0;
rect.y = LOGO_HEIGHT;
rect.dx = m_pDevice->cxScreen;
rect.dy = m_pDevice->cyScreen - LOGO_HEIGHT - BOTTOM_MARGIN;
IMENUCTL_SetRect(m_pMenu,&rect);
}
// set menu title
IMENUCTL_SetTitle(m_pMenu, RES_FILE, NULL, m_szName);
// 打开文件
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_FILEMGR, (void **)&m_pFileMgr);
if (m_pFileMgr == NULL)
{
ShowResString(m_pApplet->m_pIShell, &m_pIStatic, &m_rcScreen, m_szName, IDS_ERR_MEM);
return;
}
f = IFILEMGR_OpenFile(m_pFileMgr, FAVORITE_FILE, _OFM_READ);
if (f == NULL)
{
// implementation of lightening of main menu background color
{
AEEMenuColors colors;
colors.wMask = MC_BACK | MC_SEL_BACK;
colors.cBack = MAKE_BACK_COLOR;
colors.cSelBack = MAKE_SEL_COLOR;
IMENUCTL_SetColors(m_pMenu, &colors);
}
IMENUCTL_EnableCommand(m_pMenu, true);
IMENUCTL_SetActive(m_pMenu, true);
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
return;
}
// 查找文件名称
if (f)
{
// 读取文件的所有信息
char * szBuffer;
long nLen, nIndex = 1, nPos = 0;
FileInfo pInfo;
IFILE_GetInfo(f, &pInfo);
nLen = pInfo.dwSize;
szBuffer = (char*)MALLOC(nLen);
IFILE_Read(f, szBuffer, nLen);
IFILE_Release(f);
// 列举所有文件
while (nPos < nLen)
{
AECHAR * szAechar;
char * szChar;
long nChunkSize, nType, nNextPos;
MEMCPY(&nChunkSize, szBuffer + nPos, 4); // chunk size
nPos += 4;
nNextPos = nPos + nChunkSize;
szAechar = (AECHAR *)(szBuffer + nPos); // name
nPos += sizeof(AECHAR) * (WSTRLEN(szAechar) + 1);
MEMCPY(&nType, szBuffer + nPos, 4); // type
nPos += 4;
szChar = szBuffer + nPos; // file name
nPos += sizeof(char) * (STRLEN(szChar) + 1);
if ((nType & 0xffff) == CONTENT_SMS)
AddMenuItem(m_pMenu, 0, szAechar, BM_TEXT_ICON, (uint16)nIndex, nType);
else if ((nType & 0xffff) == CONTENT_SOUND)
AddMenuItem(m_pMenu, 0, szAechar, BM_AUDIO_ICON, (uint16)nIndex, nType);
else if ((nType & 0xffff) == CONTENT_PIC)
AddMenuItem(m_pMenu, 0, szAechar, BM_IMAGE_ICON, (uint16)nIndex, nType);
else
AddMenuItem(m_pMenu, 0, szAechar, BM_FOLDER_ICON, (uint16)nIndex, nType);
nPos = nNextPos;
nIndex++;
// 删去以前的信息
if (nPos < nLen)
{
char * szTemp = NULL;
szTemp = (char*)MALLOC(nLen - nPos);
MEMCPY(szTemp, szBuffer + nPos, nLen - nPos);
nLen -= nPos;
nPos = 0;
FREEIF(szBuffer);
szBuffer = szTemp;
}
}
/*
{//test
AEERect rcScreen;
char szBuf[512];
char szText[5120];
szText[0] = 0x00;
rcScreen.x=0;
rcScreen.y=0;
rcScreen.dx=m_pDevice->cxScreen;
rcScreen.dy=m_pDevice->cyScreen;
IDISPLAY_ClearScreen(m_pApplet->m_pIDisplay);
if (m_pIStatic == NULL)
{
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_STATIC, (void * *)&m_pIStatic);
}
ISTATIC_SetRect(m_pIStatic, &rcScreen);
// 列举所有文件
{
SPRINTF(szBuf, "Length = %d;", nLen);
STRCAT(szText, szBuf);
}
while (nPos < nLen)
{
AECHAR * szAechar;
char * szChar;
long nChunkSize, nType;
MEMCPY(&nChunkSize, szBuffer + nPos, 4); // chunk size
nPos += 4;
szAechar = (AECHAR *)(szBuffer + nPos); // name
nPos += sizeof(AECHAR) * (WSTRLEN(szAechar) + 1);
{
SPRINTF(szBuf, "Pos = %d Len = %d;", nPos, WSTRLEN(szAechar));
STRCAT(szText, szBuf);
}
MEMCPY(&nType, szBuffer + nPos, 4); // type
nPos += 4;
szChar = szBuffer + nPos; // file name
nPos += STRLEN(szChar) + 1;
nIndex++;
}
AECHAR * szInfo = NULL;
StrToWstr( szText, &szInfo);
PrintString2(m_pIStatic, m_szName, szInfo, TRUE);
if (szInfo) FREEIF(szInfo);
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
return;
}//test
*/
FREEIF(szBuffer);
}
// implementation of lightening of main menu background color
{
AEEMenuColors colors;
colors.wMask = MC_BACK | MC_SEL_BACK;
colors.cBack = MAKE_BACK_COLOR;
colors.cSelBack = MAKE_SEL_COLOR;
IMENUCTL_SetColors(m_pMenu, &colors);
}
IMENUCTL_EnableCommand(m_pMenu, true);
IMENUCTL_SetActive(m_pMenu, true);
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
}
void CMyDoc::ClearScreen()
{
if(m_pIStatic)
ReleaseObj((void * *)&m_pIStatic);
m_pIStatic=NULL;
if (m_pMenu)
{
IMENUCTL_SetActive(m_pMenu, false);
IMENUCTL_Release(m_pMenu);
}
m_pMenu = NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -