📄 media.cpp
字号:
if (m_pObject)
{
m_pObject->Resume();
}
else
{
if(m_nState==STATE_ERRO)
{
if(m_pIStatic)
{
ISTATIC_SetActive(m_pIStatic,true);
ISTATIC_Redraw(m_pIStatic);
}
}
else
{
ClearScreen();
if(m_pMenu)
IMENUCTL_SetActive(m_pMenu, TRUE);
if (((m_nType & 0xffff) == CONTENT_SOUND) && (m_nState == STATE_CONTENT))
{
if (!m_bPlayResume && HIDE_MUSIC_BUTTON)
{
m_bPlayResume = TRUE;
m_bResum = FALSE;
m_nState=STATE_OPTION;
}
else
{
ISHELL_PostEvent(m_pApplet->m_pIShell, CLASS_ID, EVT_CREATEMEDIA, 0, 0);
ShowPicCallback(this);
}
}
/*
if(m_pMedia)
{
IMEDIA_RegisterNotify(m_pMedia, MediaNotify, this);
if(m_bPlayRec)
IMEDIA_Resume(m_pMedia);
ShowPicCallback(this);
}
*/
Display();
}
}
m_bResum = FALSE;
}
void CMedia::ReadDoc()
{
char szFile[256];
int nLen;
MEMSET(szFile, 0, 256);
if(!GetFavoriteByIndex(m_pApplet->m_pIShell,&m_pFileMgr, m_nID, szFile))
{
/*
AEERect rcScreen;
char szBuf[512];
AECHAR * szText = NULL;
SPRINTF(szBuf, "ID = %d; File = %s", m_nID, szFile);
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);
*/
m_nState = STATE_ERRO;
return; //erro
}
nLen = STRLEN(szFile)+1;
FREEIF(m_szFileName);
m_szFileName = (char*)MALLOC(nLen);
STRCPY(m_szFileName,szFile);
m_nState = STATE_OPTION;
Display();
}
void CMedia::ShowPic()
{
long xoff = 0, yoff = 0;
IImage * pImage;
AEEImageInfo info;
if(m_nPic < TIME_MUSICFLASH)
{
pImage = m_imgMusic[0];
}
else if(m_nPic < TIME_MUSICFLASH * 2)
{
pImage = m_imgMusic[1];
}
else if(m_nPic < TIME_MUSICFLASH * 3)
{
pImage = m_imgMusic[2];
}
m_nPic++;
if (m_nPic > (TIME_MUSICFLASH * 3 - 1))
m_nPic = 0;
if(pImage)
{
IIMAGE_GetInfo(pImage, &info);
xoff = (m_pDevice->cxScreen - info.cx)/2;
yoff = (m_pDevice->cyScreen - info.cy)/2;
if (yoff < PLAYICON_HEIGHT) yoff = PLAYICON_HEIGHT;
IIMAGE_Draw(pImage,xoff,yoff);
yoff += info.cy;
// IDISPLAY_Update(m_pApplet->m_pIDisplay);
}
if (!HIDE_MUSIC_BUTTON)
{
if (m_nButtonIndex >=0 && m_nButtonIndex < m_nButtonCount)
{
int i;
// 图标
for (i = 0; i < m_nButtonCount; i++)
{
if (i == m_nButtonIndex)
pImage = m_icon[i * 2 + 1];
else
pImage = m_icon[i * 2];
if(pImage)
{
IIMAGE_GetInfo(pImage, &info);
IIMAGE_Draw(pImage, xoff, yoff);
xoff += info.cx;
}
}
}
}
IDISPLAY_Update(m_pApplet->m_pIDisplay);
}
void CMedia::ShowPicCallback(CMedia* pMe)
{
ISHELL_SetTimer(pMe->m_pApplet->m_pIShell, TIMER_SPEED, (PFNNOTIFY)(ShowPicCallback), pMe);
pMe->ShowPic();
}
void CMedia::CancelShowPicCallback()
{
ISHELL_CancelTimer(m_pApplet->m_pIShell, (PFNNOTIFY)(ShowPicCallback), this);
}
void CMedia::SetRinger()
{
AEERingerID ringerId ;
int16 nResID;
if (CreateRinger() == 1)
{
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_RINGERMGR, (void **)&m_pIRingerMgr);
if(m_pIRingerMgr == NULL)
{
nResID = IDS_SETRINGER_ERROR;
}
else
{
char szFile[255];
char szExt[255];
long nLen = 0;
// 获取文件名
GetFileName(szFile, m_szFileName);
// SPRINTF( szFile, "wxfz%d",m_nID);
// STRCPY(szFile,m_szFileName);
// WSTR_TO_STR(m_szName, szFile, 255);
switch(m_nType & 0xffff0000)
{
case SOUND_MID:
STRCPY(szExt, ".mid");
break;
case SOUND_MP3:
STRCPY(szExt, ".mp3");
break;
default:
STRCPY(szExt, "");
break;
}
STRCAT(szFile, szExt);
// 设置铃声
ringerId = IRINGERMGR_GetRingerID(m_pIRingerMgr, szFile);
if (IRINGERMGR_SetRinger(m_pIRingerMgr, AEE_RINGER_CATEGORY_ALL, ringerId) == SUCCESS)
//if (IRINGERMGR_SetRinger(m_pIRingerMgr, 1, ringerId) == SUCCESS)
{
nResID = IDS_SETRINGER_SUCCESS;
}
else
{
nResID = IDS_SETRINGER_ERROR;
}
CleanRingerPtr();
}
//nResID = IDS_SETRINGER_SUCCESS;
}
else
{
nResID = IDS_CREATERINGER_ERROR;
}
// 显示提示信息
{
AEERect rcScreen;
rcScreen.x=0;
rcScreen.y=0;
rcScreen.dx=m_pDevice->cxScreen;
rcScreen.dy=m_pDevice->cyScreen;
ClearScreen();
ShowResString(m_pApplet->m_pIShell, &m_pIStatic, &rcScreen, m_szName, nResID);
m_nState=STATE_ERRO;
}
}
int CMedia::CreateRinger()
{
FileInfo fi;
IFile *f;
AEESoundPlayerFile format;
if (RECOVER_FIRST_RINGER)
CheckMaxRinger();
// Create IRingerMgr interface object. This step needs to be done only
// if the IRingerMgr interface object have not already been created.
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_RINGERMGR, (void **)&m_pIRingerMgr);
if(m_pIRingerMgr == NULL)
{
return 0;
}
// Create an instance of IFileMgr so we can access the file
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_FILEMGR, (void **)(&m_pFileMgr));
if (NULL == m_pFileMgr)
{
return 0;
}
if (NULL == (f = IFILEMGR_OpenFile(m_pFileMgr, m_szFileName, _OFM_READ)))
{
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
CleanRingerPtr();
return 0;
}
// Determine the size of the bitmap file and allocate memory
// to store its contents
IFILE_GetInfo(f, &fi);
char* buf;
buf = (char*)MALLOC(fi.dwSize);
// Read the contents of the ringer file into the
// area allocated in memory for it
if (IFILE_Read(f, buf, fi.dwSize) == 0)
{
FREEIF(buf);
buf = NULL;
IFILE_Release(f);
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
CleanRingerPtr();
return 0;
}
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_MEMASTREAM, (void **)(&m_pMemStream));
if (NULL == m_pMemStream)
{
FREEIF(buf);
buf = NULL;
IFILE_Release(f);
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
CleanRingerPtr();
return 0;
}
IMEMASTREAM_Set(m_pMemStream, (byte*)buf, fi.dwSize, 0, 0);
switch(m_nType & 0xffff0000)
{
case SOUND_MID:
format = AEE_SOUNDPLAYER_FILE_MIDI;
break;
case SOUND_MP3:
format = AEE_SOUNDPLAYER_FILE_MP3;
break;
default:
format = AEE_SOUNDPLAYER_FILE_UNKNOWN;
break;
}
AECHAR szwName[MAX_RINGER_NAME];
char szName[MAX_RINGER_NAME];
// 获取文件名
GetFileName(szName, m_szFileName);
// SPRINTF( szName, "wxfz%d",m_nID);
STRTOWSTR(szName, szwName, sizeof(szwName));
if (SUCCESS == IRINGERMGR_Create(m_pIRingerMgr, szwName, format, (IAStream*)m_pMemStream))
{
// FREEIF(buf);
buf = NULL;
IFILE_Release(f);
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
CleanRingerPtr();
return 1;
}
// FREEIF(buf);
buf = NULL;
IFILE_Release(f);
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
CleanRingerPtr();
return 0;
}
// 清除铃声变量
void CMedia::CleanRingerPtr()
{
if (m_pIRingerMgr != NULL)
{
// Deregister Notify so that
IRINGERMGR_RegisterNotify (m_pIRingerMgr, NULL, NULL);
// Stop any songs being played at this time
IRINGERMGR_Stop (m_pIRingerMgr);
IRINGERMGR_Release (m_pIRingerMgr);
m_pIRingerMgr = NULL;
}
if(m_pMemStream != NULL)
{
IMEMASTREAM_Release(m_pMemStream);
m_pMemStream = NULL;
}
}
void CMedia::SetWallPaper()
{
if (!CheckFileSpace(m_pApplet->m_pIShell))
{
AEERect rcScreen;
rcScreen.x=0;
rcScreen.y=0;
rcScreen.dx=m_pDevice->cxScreen;
rcScreen.dy=m_pDevice->cyScreen;
ClearScreen();
ShowResString(m_pApplet->m_pIShell, &m_pIStatic, &rcScreen, m_szName, IDS_ERR_SPACE);
m_nState=STATE_ERRO;
return;
}
char filename[256];
STRCPY( filename, AEE_SHARED_DIR );
STRCAT( filename, "/" );
STRCAT( filename, m_szFileName );
AEERect rcScreen;
rcScreen.x=0;
rcScreen.y=0;
rcScreen.dx=m_pDevice->cxScreen;
rcScreen.dy=m_pDevice->cyScreen;
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_FILEMGR, (void **)(&m_pFileMgr));
if (NULL == m_pFileMgr)
{
ShowResString(m_pApplet->m_pIShell, &m_pIStatic, &rcScreen, m_szName, IDS_SETWALLPAPER_ERRO);
m_nState=STATE_ERRO;
return ;
}
IFile* f;
if (NULL == (f = IFILEMGR_OpenFile( m_pFileMgr, filename, _OFM_CREATE )))
{
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
ShowResString(m_pApplet->m_pIShell, &m_pIStatic, &rcScreen, m_szName, IDS_SETWALLPAPER_ERRO);
m_nState=STATE_ERRO;
return ;
}
IFile* fPic;
if (NULL == (fPic = IFILEMGR_OpenFile( m_pFileMgr, m_szFileName, _OFM_READ )))
{
IFILEMGR_Release(m_pFileMgr);
IFILE_Release(f);
m_pFileMgr = NULL;
ShowResString(m_pApplet->m_pIShell, &m_pIStatic, &rcScreen, m_szName, IDS_SETWALLPAPER_ERRO);
m_nState=STATE_ERRO;
return ;
}
FileInfo pInfo;
IFILE_GetInfo(fPic,&pInfo);
// 以1024字节为单位,逐步写入文件信息
int cstLength = 1024;
long nLen = pInfo.dwSize;
long i = 0, nBuffer = cstLength;
char szBuffer[1024];
while (i < nLen)
{
if ((nLen - i) > cstLength)
nBuffer = cstLength;
else
nBuffer = nLen - i;
IFILE_Read(fPic,szBuffer,nBuffer);
IFILE_Write (f, szBuffer, nBuffer);
i += nBuffer;
}
IFILEMGR_Release(m_pFileMgr);
IFILE_Release(f);
IFILE_Release(fPic);
m_pFileMgr = NULL;
ShowResString(m_pApplet->m_pIShell, &m_pIStatic, &rcScreen, m_szName, IDS_SETWALLPAPER_SUCCESS);
m_nState=STATE_ERRO;
}
boolean CMedia::IsPlay()
{
boolean bChg;
if(m_pMedia==NULL) return FALSE;
int nState = IMEDIA_GetState(m_pMedia, &bChg);
if (bChg)
return FALSE;
return (nState == MM_STATE_PLAY || nState == MM_STATE_RECORD);
}
void CMedia::RemoveRinger()
{
// 获取文件名
AEERingerID id;
char szName[MAX_RINGER_NAME];
GetFileName(szName, m_szFileName);
// SPRINTF( szName, "wxfz%d",m_nID);
switch(m_nType & 0xffff0000)
{
case SOUND_MID:
STRCAT(szName, ".mid");
break;
case SOUND_MP3:
STRCAT(szName, ".mp3");
break;
default:
break;
}
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_RINGERMGR, (void **)&m_pIRingerMgr);
if(m_pIRingerMgr == NULL)
{
return;
}
id = IRINGERMGR_GetRingerID(m_pIRingerMgr, szName);
if (id != AEE_RINGER_ID_NONE)
{
IRINGERMGR_Remove(m_pIRingerMgr, id);
}
// IRINGERMGR_Release (m_pIRingerMgr);
// m_pIRingerMgr = NULL;
CleanRingerPtr();
}
void CMedia::GetFileName(char * szName, char * szFile)
{
char * szStart, * szEnd;
if (szName == NULL) return;
if (szFile == NULL) return;
szName[0] = 0x00;
// 先找到路径后面的第一个文件名字符
szStart = szFile;
while(TRUE)
{
szEnd = STRCHR(szStart, '\\');
if (szEnd == NULL) break;
szStart = szEnd + 1;
}
if (szStart == NULL)
szStart = szFile;
STRCPY(szName, szStart);
// 清除后缀名的信息
szStart = STRCHR(szName, '.');
if (szStart) szStart[0] = 0x00;
}
void CMedia::RemoveWallPaper()
{
char filename[256];
STRCPY( filename, AEE_SHARED_DIR );
STRCAT( filename, "/" );
STRCAT( filename, m_szFileName );
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_FILEMGR, (void **)(&m_pFileMgr));
if (NULL == m_pFileMgr)
{
return;
}
IFILEMGR_Remove(m_pFileMgr, filename);
IFILEMGR_Release(m_pFileMgr);
m_pFileMgr = NULL;
}
// 显示错误提示信息
void CMedia::ShowError(int16 nResId)
{
AEERect rcScreen;
rcScreen.x=0;
rcScreen.y=0;
rcScreen.dx=m_pDevice->cxScreen;
rcScreen.dy=m_pDevice->cyScreen;
ClearScreen();
ReleaseMedia();
CancelShowPicCallback();
IDISPLAY_ClearScreen(m_pApplet->m_pIDisplay);
ShowResString(m_pApplet->m_pIShell, &m_pIStatic, &rcScreen, m_szName, nResId);
m_nState=STATE_ERRO;
}
// 如果铃声已满则删除第一个铃声,准备覆盖之
void CMedia::CheckMaxRinger()
{
ISHELL_CreateInstance(m_pApplet->m_pIShell, AEECLSID_RINGERMGR, (void **)&m_pIRingerMgr);
if(m_pIRingerMgr == NULL)
{
return;
}
//if (IRINGERMGR_EnumRingerInit(m_pIRingerMgr))
{
AEERingerID id;
AEERingerInfo pi;
int nCount = 0;
IRINGERMGR_EnumRingerInit(m_pIRingerMgr);
while (IRINGERMGR_EnumNextRinger(m_pIRingerMgr, &pi))
{
//if (id < 0)
id = pi.id;
nCount++;
}
//if (RINGER_COUNT == nCount)
{
IRINGERMGR_Remove(m_pIRingerMgr, id);
}
}
CleanRingerPtr();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -