⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediabroshedulenew.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  MediaBroSheduleNew.c
Desc :  媒体库资源处理
Autho   :  PengHuacheng
Date :  2007-12-02
Notes :
$Log :
*********************************************************************/
#if ((defined(BOARD)) || defined(ROCK_FS))
#include "include.h"
#include "System.h"

#ifdef _MEIDA_SORT_NEW

#include "MediaBroStructNew.h"
#include "MediaBroMacroNew.h"
#include "..\System\MediaSortNew\MediaSortGloableNew.h"
#include "..\application\Browser\BrowserGlobal.h"

extern UINT16 GetAudioId3Info(FS_FILE *hFile, FILE_SAVE_STRUCT *pSaveStru, char *FileName);
extern bool FS_FileExtNameMatch(char *SrcExtName, char *Filter);
extern void TextModelInterface(WINDOW* win , SYS_FILE_INFO *pSysFileInfo);

UINT32 MediaAllScreenListKeyRightFun(WINDOW* win, MEDIA_DIR_TREE_STRUCT *pMediaDir);
UINT32 MediaAllScreenListKeyLeftFun(WINDOW* win, MEDIA_DIR_TREE_STRUCT *pMediaDir);
UINT32 MediaAllScreenListKeyLineDnFun(WINDOW* win, MEDIA_DIR_TREE_STRUCT *pMediaDir, UINT16 KeyType);
UINT32 MediaAllScreenListKeyLineUpFun(WINDOW* win, MEDIA_DIR_TREE_STRUCT *pMediaDir);
extern int AudioWinShow;
extern UINT16 gMediaLibSelPathID; // 记录音乐播放媒体库路径ID

/*----------------------------------------------------------------------
Name  :  MediaDirValueInit
Desc  :  对媒体库资源管理器层次结构信息进行初始化
Params:  pMediaDir: 目录结构体
Return:
Author:  phc
Date  :  07-12-02
----------------------------------------------------------------------*/
void MediaDirValueInit(MEDIA_DIR_TREE_STRUCT *pMediaDir)
{
    unsigned int i;

    for (i = 0; i < (pMediaDir->ScreenNum); i++)
    {
        RKmemset(&(pMediaDir->BrowserItem[i].MediaFileInfo), 0, sizeof(MEDIABRO_STRUCT));
    }

    for (i = 0; i < (pMediaDir->ScreenNum) - 1; i++)
        pMediaDir->BrowserItem[i].pNext = &pMediaDir->BrowserItem[i+1];
    for (i = 1; i < (pMediaDir->ScreenNum); i++)
        pMediaDir->BrowserItem[i].pPrev = &pMediaDir->BrowserItem[i-1];
    pMediaDir->BrowserItem[0].pPrev = &pMediaDir->BrowserItem[(pMediaDir->ScreenNum)-1];
    pMediaDir->BrowserItem[(pMediaDir->ScreenNum)-1].pNext = &pMediaDir->BrowserItem[0];

    pMediaDir->pBro   = &pMediaDir->BrowserItem[0];

    pMediaDir->CurId     = 0;
    pMediaDir->KeyCounter = 0;

}



/*----------------------------------------------------------------------
Name  :  MediaBroUpProc
Desc  :  媒体库资源管理器
Params:  pMediaDir: 目录结构体  uiUpdateType:获取条目方向
Return:
Author:  phc
Date  :  07-12-02
----------------------------------------------------------------------*/
void MediaBroUpProc(MEDIA_DIR_TREE_STRUCT *pMediaDir, UINT16 uiUpdateType)
{
    MEDIABRO_STRUCT  *pBro;

    UINT16  StartItem = 0;
    UINT16  i;

    StartItem = pMediaDir->CurId - pMediaDir->KeyCounter;

    switch (uiUpdateType)
    {
        case ALL_BROITEM_UPDATE: // 条目全部更新
            for (i = 0; i < (pMediaDir->ScreenNum); i++) // 将显示的几个ITEM清0
            {
                RKmemset(&(pMediaDir->BrowserItem[i].MediaFileInfo), 0, sizeof(FILE_MEDIAINFO_STRUCT));
                pMediaDir->BrowserItem[i].ImageUpdateFlag = MINIATRUE_UPDATE_NEED;
            }

            pMediaDir->pBro = &pMediaDir->BrowserItem[0];
            pBro = pMediaDir->pBro;


            for (i = 0;(i < (pMediaDir->ScreenNum)) && (i < (pMediaDir->TotalItem));i++)
            {
                //pMediaDir->GetMediaFileInfo(&(pBro->MediaFileInfo), pMediaDir->pInfoPath, (UINT16)(StartItem+i));
                pMediaDir->GetMediaFileInfo(&(pBro->MediaFileInfo), StartItem + i, pMediaDir->SumBaseId);

#ifdef FILE_ENCRYPT_ENABLE
                if (TRUE == IsEncryptFile(pBro->MediaFileInfo.Path, pBro->MediaFileInfo.Name))
                {
                    pBro->EncryptFlag = 1; // 文件已被加密
                }
                else
                {
                    pBro->EncryptFlag = 0; // 没有加密信息
                }
#endif

                if (i >= (pMediaDir->ScreenNum) - 1) break;

                pBro = pBro->pNext;
            }

            break;
        case UP_UPDATE: // 向上寻找一个条目
            pMediaDir->pBro = pMediaDir->pBro->pPrev;

            pBro = pMediaDir->pBro;
            RKmemset(&(pBro->MediaFileInfo), 0, sizeof(FILE_MEDIAINFO_STRUCT));
            pBro->ImageUpdateFlag = MINIATRUE_UPDATE_NEED;
            //pMediaDir->GetMediaFileInfo(&(pBro->MediaFileInfo), pMediaDir->pInfoPath, StartItem);
            pMediaDir->GetMediaFileInfo(&(pBro->MediaFileInfo), StartItem, pMediaDir->SumBaseId);

#ifdef FILE_ENCRYPT_ENABLE
            if (TRUE == IsEncryptFile(pBro->MediaFileInfo.Path, pBro->MediaFileInfo.Name))
            {
                pBro->EncryptFlag = 1; // 文件已被加密
            }
            else
            {
                pBro->EncryptFlag = 0; // 没有加密信息
            }
#endif

            break;
        case DOWN_UPDATE:   // 向下寻找一个条目
            pBro = pMediaDir->pBro;
            RKmemset(&(pBro->MediaFileInfo), 0, sizeof(FILE_MEDIAINFO_STRUCT));
            pBro->ImageUpdateFlag = MINIATRUE_UPDATE_NEED;
            //pMediaDir->GetMediaFileInfo(&(pBro->MediaFileInfo), pMediaDir->pInfoPath, (UINT16)(pMediaDir->KeyCounter[pMediaDir->CurDeep]+StartItem));
            pMediaDir->GetMediaFileInfo(&(pBro->MediaFileInfo), pMediaDir->CurId, pMediaDir->SumBaseId);

#ifdef FILE_ENCRYPT_ENABLE
            if (TRUE == IsEncryptFile(pBro->MediaFileInfo.Path, pBro->MediaFileInfo.Name))
            {
                pBro->EncryptFlag = 1; // 文件已被加密
            }
            else
            {
                pBro->EncryptFlag = 0; // 没有加密信息
            }
#endif

            pMediaDir->pBro = pMediaDir->pBro->pNext;

            break;
    }

}


/*----------------------------------------------------------------------
Name  :  MediaBroKeyFun
Desc  :  媒体库按键后台处理
Params:  pMediaDir: 目录结构体  KeyVal:键值
Return:
Author:  phc
Date  :  07-12-02
----------------------------------------------------------------------*/
void MediaBroKeyFun(WINDOW* win, MEDIA_DIR_TREE_STRUCT *pMediaDir, UINT16 KeyVal)
{
    UINT16 i;
    MEDIABRO_STRUCT *pBro = NULL;

    switch (KeyVal)
    {
        case  MEDIABRO_DN:  // 向下
            if (0 == pMediaDir->TotalItem)
                break;
            if (pMediaDir->CurId < (pMediaDir->TotalItem - 1))
            {
                pMediaDir->CurId++;
                if (pMediaDir->KeyCounter >= pMediaDir->ScreenNum - 1)
                {
                    MediaBroUpProc(pMediaDir, DOWN_UPDATE);
                    WindowSendMessage(win, WM_ResetAllListItem, 0, pMediaDir);
                }
                else
                {
                    pMediaDir->KeyCounter++;
                    //MediaListDispSet(win , 0, pMediaDir);
                    WindowSendMessage(win, WM_RedisplayAllListItem, 0, pMediaDir);
                }
            }
            else
            {
                pMediaDir->CurId = 0;
                pMediaDir->KeyCounter = 0;
                MediaBroUpProc(pMediaDir, ALL_BROITEM_UPDATE);
                WindowSendMessage(win, WM_ResetAllListItem, 0, pMediaDir);
            }

            break;

        case MEDIABRO_UP:  // 向上
            if (0 == pMediaDir->TotalItem)
                break;

            if (pMediaDir->CurId > 0)
            {
                pMediaDir->CurId--;

                if (pMediaDir->KeyCounter == 0)
                {
                    MediaBroUpProc(pMediaDir, UP_UPDATE);
                    WindowSendMessage(win, WM_ResetAllListItem, 0, pMediaDir);
                }
                else
                {
                    pMediaDir->KeyCounter--;
                    WindowSendMessage(win, WM_RedisplayAllListItem, 0, pMediaDir);
                }
            }
            else
            {
                pMediaDir->CurId = pMediaDir->TotalItem - 1;

                if (pMediaDir->TotalItem > pMediaDir->ScreenNum)
                {
                    pMediaDir->KeyCounter = pMediaDir->ScreenNum - 1;
                }
                else
                {
                    pMediaDir->KeyCounter = pMediaDir->TotalItem - 1;
                }
                MediaBroUpProc(pMediaDir, ALL_BROITEM_UPDATE);
                WindowSendMessage(win, WM_ResetAllListItem, 0, pMediaDir);
            }

            break;

        case MEDIABRO_SCREEN_LEFT:
            MediaAllScreenListKeyLeftFun(win, pMediaDir);
            break;

        case MEDIABRO_SCREEN_RIGHT:
            MediaAllScreenListKeyRightFun(win, pMediaDir);
            break;

        case MEDIABRO_SCREEN_LINEDN:
            MediaAllScreenListKeyLineDnFun(win, pMediaDir, MEDIABRO_SCREEN_LINEDN);
            break;
        case MEDIABRO_SCREEN_LINEUP:
            MediaAllScreenListKeyLineUpFun(win, pMediaDir);
            break;

        case MEDIABRO_OK:  // 打开一个文件或文件夹
            if (0 == pMediaDir->TotalItem)
                break;

        default:
            break;
    }
}

/*----------------------------------------------------------------------
Name  :  MediaAllScreenListKeyRightFun
Desc  :  媒体库图片缩略图向右按键处理函数
Params:
Return:
Author:  phc
Date  :  07-12-17
----------------------------------------------------------------------*/
UINT32 MediaAllScreenListKeyRightFun(WINDOW* win, MEDIA_DIR_TREE_STRUCT *pMediaDir)
{
    if (0 == (pMediaDir->TotalItem))
        return FALSE;
    if (pMediaDir->CurId < (pMediaDir->TotalItem - 1)) // 当前文件尚未处于最后一个时
    {
        if (pMediaDir->KeyCounter >= pMediaDir->ScreenNum - 1) // 光标移到了屏幕最后一个条目需要读取换行数据
        {
            MediaAllScreenListKeyLineDnFun(win, pMediaDir, MEDIABRO_SCREEN_RIGHT); // 执行换行操作,获取新的一行图片数据

        }
        else // 改变光标在屏幕中位置,数据无需重新读取
        {
            pMediaDir->CurId++;
            pMediaDir->KeyCounter++;
            WindowSendMessage(win, WM_RedisplayAllListItem, 0, pMediaDir);
        }
    }
    else // 处于最后一个文件
    {
        pMediaDir->CurId = 0;
        pMediaDir->KeyCounter = 0;

        if (pMediaDir->TotalItem > pMediaDir->ScreenNum - 1)
        {
            MediaBroUpProc(pMediaDir, ALL_BROITEM_UPDATE);
            WindowSendMessage(win, WM_ResetAllListItem, 0, pMediaDir);
        }
        else // 总图片数小于屏幕显示条目数时
        {
            WindowSendMessage(win, WM_RedisplayAllListItem, 0, pMediaDir);
        }
    }
    return TRUE;
}

/*----------------------------------------------------------------------
Name  :  MediaAllScreenListKeyLeftFun
Desc  :  媒体库图片缩略图向左寻找文件处理函数
Params:
Return:
Author:  phc
Date  :  07-12-17
----------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -