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

📄 mediabroshedulenew.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
UINT32 MediaAllScreenListKeyLeftFun(WINDOW* win, MEDIA_DIR_TREE_STRUCT *pMediaDir)
{
    UINT16 i;
    MEDIABRO_STRUCT  *pBro;

    if (0 == pMediaDir->TotalItem)
        return FALSE;

    if (pMediaDir->CurId == 0) // 当前为第一个文件
    {
        pMediaDir->CurId = pMediaDir->TotalItem - 1;

        if (pMediaDir->TotalItem > pMediaDir->ScreenNum - 1)  // 文件个数超过一个屏幕显示个数情况
        {
            pBro = pMediaDir->pBro;
            for (i = 0;i < pMediaDir->ScreenNum;i++)
            {
                RKmemset(&(pBro->MediaFileInfo), 0, sizeof(FILE_MEDIAINFO_STRUCT));
                pBro->ImageUpdateFlag = MINIATRUE_UPDATE_NEED; // 缩略图更新标志置0
                pBro = pBro->pNext;
            }
            pMediaDir->KeyCounter = pMediaDir->ScreenNum - IMAG_NUM_PER_LINE + (pMediaDir->TotalItem - 1) % IMAG_NUM_PER_LINE;;
            MediaBroUpProc(pMediaDir, ALL_BROITEM_UPDATE);
            WindowSendMessage(win, WM_ResetAllListItem, 0, pMediaDir);
        }
        else // 文件个数少于一个屏幕显示个数情况
        {
            pMediaDir->KeyCounter = pMediaDir->TotalItem - 1;
            WindowSendMessage(win, WM_RedisplayAllListItem, 0, pMediaDir);
        }

    }
    else if (pMediaDir->CurId > 0)
    {
        if (0 == pMediaDir->KeyCounter) // 需要向上翻一行时
        {
            pMediaDir->KeyCounter = 3;
            pMediaDir->CurId--;
            MediaBroUpProc(pMediaDir, ALL_BROITEM_UPDATE);
            WindowSendMessage(win, WM_ResetAllListItem, 0, pMediaDir);
        }
        else // 无需向上翻行,只需改变光标位置
        {
            pMediaDir->KeyCounter--;
            pMediaDir->CurId--;
            WindowSendMessage(win, WM_RedisplayAllListItem, 0, pMediaDir);
        }
    }
    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  MediaAllScreenListKeyLineDnFun
Desc  :  媒体库图片缩略图向下翻行处理函数
Params:  KeyType:键类型,区分向右按键的换行要求还是向下按键的换行要求
Return:
Author:  phc
Date  :  07-10-20
----------------------------------------------------------------------*/
UINT32 MediaAllScreenListKeyLineDnFun(WINDOW* win, MEDIA_DIR_TREE_STRUCT *pMediaDir, UINT16 KeyType)
{
    UINT16 i, j;
    MEDIABRO_STRUCT  *pBro;
    UINT16 Temp = 0;


    if (pMediaDir->TotalItem == 0)
        return FALSE;


    if ((pMediaDir->CurId / IMAG_NUM_PER_LINE) == ((pMediaDir->TotalItem - 1) / IMAG_NUM_PER_LINE)) // 当处于最后一行时
    {
        return TRUE;
    }
    else if (pMediaDir->KeyCounter / IMAG_NUM_PER_LINE == 2) // 需要下翻一行
    {
        pBro = pMediaDir->pBro; // 记录当前九宫图第一个文件结构体

        /*将第一行三个文件信息清0,并设定下一行的第一个文件为9宫图第一个文件*/
        for (i = 0;i < IMAG_NUM_PER_LINE;i++)
        {
            RKmemset(&(pMediaDir->pBro->MediaFileInfo), 0, sizeof(FILE_MEDIAINFO_STRUCT));
            pMediaDir->pBro->ImageUpdateFlag = MINIATRUE_UPDATE_NEED; // 缩略图更新标志置0

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

        if (KeyType == MEDIABRO_SCREEN_LINEDN)
        {
            pMediaDir->CurId += IMAG_NUM_PER_LINE;

            if (pMediaDir->CurId > (pMediaDir->TotalItem - 1))
            {
                pMediaDir->CurId = pMediaDir->TotalItem - 1;
                pMediaDir->KeyCounter = IMAG_LAST_LINE_STARNO + pMediaDir->CurId % IMAG_NUM_PER_LINE;
            }

            /* 获取下一行文件信息 */
            Temp = pMediaDir->CurId - pMediaDir->CurId % IMAG_NUM_PER_LINE;
        }
        else
        {
            pMediaDir->CurId++;
            pMediaDir->KeyCounter = IMAG_LAST_LINE_STARNO;
            Temp = pMediaDir->CurId;
        }

        for (i = 0;i < IMAG_NUM_PER_LINE;i++)
        {
            pMediaDir->GetMediaFileInfo(&(pBro->MediaFileInfo), Temp, pMediaDir->SumBaseId);

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

            pBro  = pBro->pNext;
            Temp++;

            if (Temp >= pMediaDir->TotalItem)   // 出现在最后一行
                break;
        }

        WindowSendMessage(win, WM_ResetAllListItem, 0, pMediaDir);

    }
    else // 在屏幕范围内移动光标,信息不需要重新读取,只需改变光便及滚动条位置
    {
        if ((pMediaDir->CurId + IMAG_NUM_PER_LINE) >= pMediaDir->TotalItem)
        {
            pMediaDir->KeyCounter += (pMediaDir->TotalItem - 1) - pMediaDir->CurId;
            pMediaDir->CurId = pMediaDir->TotalItem - 1;
        }
        else
        {
            pMediaDir->CurId += IMAG_NUM_PER_LINE;
            pMediaDir->KeyCounter += IMAG_NUM_PER_LINE;
        }



        if (pMediaDir->CurId > (pMediaDir->TotalItem - 1))
        {
            pMediaDir->CurId = pMediaDir->TotalItem - 1;
            pMediaDir->KeyCounter = (pMediaDir->TotalItem - 1) % (pMediaDir->ScreenNum);

        }
        WindowSendMessage(win, WM_RedisplayAllListItem, 0, pMediaDir);
    }


    return TRUE;
}

/*----------------------------------------------------------------------
Name  :  MediaAllScreenListKeyLineUpFun
Desc  :  媒体库图片缩略图按键向上翻行寻找文件处理函数
Params:
Return:
Author:  phc
Date  :  07-12-17
----------------------------------------------------------------------*/
UINT32 MediaAllScreenListKeyLineUpFun(WINDOW* win, MEDIA_DIR_TREE_STRUCT *pMediaDir)
{
    UINT16 Temp = 0;


    if (pMediaDir->TotalItem == 0)
        return FALSE;

    if ((pMediaDir->CurId) < IMAG_NUM_PER_LINE) // 到顶
        return TRUE;

    if (pMediaDir->KeyCounter / IMAG_NUM_PER_LINE > 0)
    {
        pMediaDir->CurId -= IMAG_NUM_PER_LINE;
        pMediaDir->KeyCounter -= IMAG_NUM_PER_LINE;

        WindowSendMessage(win, WM_RedisplayAllListItem, 0, pMediaDir);
    }
    else
    {
        Temp = pMediaDir->KeyCounter % IMAG_NUM_PER_LINE;
        pMediaDir->KeyCounter = 0;
        pMediaDir->CurId -= IMAG_NUM_PER_LINE;
        pMediaDir->CurId -= Temp;

        MediaBroUpProc(pMediaDir, ALL_BROITEM_UPDATE);

        pMediaDir->KeyCounter = Temp;
        pMediaDir->CurId += Temp;

        WindowSendMessage(win, WM_ResetAllListItem, 0, pMediaDir);
    }

    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  OpenMediaFile
Desc  :  从媒体库打开文件
Params:  pBro:资源管理器待打开条目信息结构体
Return:
Author:  phc
Date  :  07-10-08
----------------------------------------------------------------------*/
UINT32 OpenMediaFile(WINDOW *win, MEDIA_DIR_TREE_STRUCT *pMediaDir)
{
    FS_FILE* fFile = NULL;
    char FilePath[2+FS_MAX_DIR_DEPTH*(11+1)+4];
    FILE_SAVE_STRUCT FileInfo;
    MEDIABRO_STRUCT  *pBro;
    UINT16 i;

    pBro = pMediaDir->pBro;
    for (i = 0; i < pMediaDir->KeyCounter; i++)
        pBro = pBro->pNext;

    RKmemset(&Sysfile1Info, 0, sizeof(SYS_FILE_INFO)); // 清空sysfileinfo

    RKmemcpy(Sysfile1Info.Path, pBro->MediaFileInfo.Path, FS_MAX_PATH_LEN);
    RKmemcpy(Sysfile1Info.Name, pBro->MediaFileInfo.Name, 11);

    Sysfile1Info.pLongPath = PlayLongDirPath;
    Sysfile1Info.MediaSelPathID = gMediaLibSelPathID;


    RKstrcpy(FilePath, Sysfile1Info.Path);
    RKstrcat(FilePath, Sysfile1Info.Name);
    fFile = RKFSFileOpen(FilePath, "r");
    if (fFile == NULL)
    {
        BrowserFileNoExistCreate(win, 0, NULL);      // 文件打开失败
        return FALSE;
    }

    FS_GetLongFileName(fFile, (char *)Sysfile1Info.LongFileName);  // 获取长文件名
    if (Sysfile1Info.LongFileName[0] == 0)
    {
        for (i = 0; i < 8; i++)
        {
            Sysfile1Info.LongFileName[i] = Sysfile1Info.Name[i];
            if (Sysfile1Info.Name[i] == ' ')
                break;
        }
        Sysfile1Info.LongFileName[i++] = '.';
        Sysfile1Info.LongFileName[i++] = Sysfile1Info.Name[8];
        Sysfile1Info.LongFileName[i++] = Sysfile1Info.Name[9];
        Sysfile1Info.LongFileName[i++] = Sysfile1Info.Name[10];
    }



    if (pMediaDir->MediaSelType == ALL_MUSIC_SEARCH_PLAY_TYPE)
    {
        Sysfile1Info.TotalFiles = pMediaDir->TotalItem - 1;
        Sysfile1Info.CurrentFileNum = pMediaDir->CurId;
        //CopySearchInfoToPlayBuffer(); // 将搜索信息拷贝到搜索播放列表中,旨在预防正在播放中重新搜索了音乐
    }
    else
    {
        Sysfile1Info.TotalFiles = pMediaDir->TotalItem;
        Sysfile1Info.CurrentFileNum = pMediaDir->CurId + 1;
    }

    Sysfile1Info.callback = FindMediaMusic;  // 获取下一个文件回调函数

    if (TRUE == FS_FileExtNameMatch(&(Sysfile1Info.Name[8]), MusicFileExtString))
    {
        Sysfile1Info.MusicInfo.MusicOpenType = pMediaDir->MediaSelType;

        if (pMediaDir->MediaSelType == FAVORITE_MEDIA_PLAY_TYPE)
        {
            Sysfile1Info.MusicInfo.SortStarId = pMediaDir->SumBaseId;
        }
        else
        {
            Sysfile1Info.MusicInfo.SortStarId = pBro->MediaFileInfo.SorIndex;
        }
        /* ID3重新获取,有待改进 */
        RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
        GetAudioId3Info(fFile , &FileInfo, Sysfile1Info.Name);
        RKmemcpy(Sysfile1Info.MusicInfo.ID3Title, FileInfo.ID3Title, 30*2);
        RKmemcpy(Sysfile1Info.MusicInfo.ID3Artist, FileInfo.ID3Artist, 30*2);
        RKmemcpy(Sysfile1Info.MusicInfo.ID3Album, FileInfo.ID3Album, 30*2);
        AudioWinShow = 1;//显示音频前台,added by cf

        ProcStartAppGuidEx(GUID_EXE_AUDIO , NULL , ProcGetProcGuid(GUID_EXE_DESKTOP) , NULL , (void*)&Sysfile1Info);
    }
    else if (TRUE == FS_FileExtNameMatch(&(Sysfile1Info.Name[8]), JpegFileExtString))
    {
        //RKSemObtain(&ImageHandleUseSem);
        ProcStartAppGuidEx(GUID_EXE_PIC , NULL , ProcGetProcGuid(GUID_EXE_DESKTOP) , NULL , &Sysfile1Info);
    }
    else if (TRUE == FS_FileExtNameMatch(&(Sysfile1Info.Name[8]), MovieFileExtString))
    {
        ProcStartAppGuidEx(GUID_EXE_VIDEO, NULL , ProcGetProcGuid(GUID_EXE_DESKTOP) , NULL , (void*)&Sysfile1Info);
    }
    else if (TRUE == FS_FileExtNameMatch(&(Sysfile1Info.Name[8]), TextFileExtString))
    {
        TextModelInterface(win , &Sysfile1Info);
    }

    RKFSFileClose(fFile);

    return TRUE;
}


#endif
#endif

⌨️ 快捷键说明

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