/******************************************************************************** * Description : Select the Prev file according to type & mode, then get the name of file. * * Arguments : strFile: Dos 8.3 file name of selected file. * Returns : TRUE: Successful. FALSE: Fail, detail information in fselError * Notes : None * ********************************************************************************/ BOOL fselGetPrev(UINT32 *pEntry) { UINT32 dir_entry; switch ( fselMode) { case FSEL_ALL_REPEATONE: case FSEL_DIR_RANDOM: return fselGetNext(pEntry); case FSEL_DIR_SEQUENCE: case FSEL_DIR_INTRO: return SelectPrev(pEntry); case FSEL_ALL_SEQUENCE: return SelectPrevtDisk(pEntry); case FSEL_ALL_REPEATALL: if (SelectPrevtDisk(pEntry)) { return TRUE; } else { fselInit(fselType, fselMode, 0, fselDiskLetter); while((ERR_SUCCESS == FS_GetPrevEntry(&dir_entry, NULL, FS_DIR_DIR))) { FS_ChangeSubDir(dir_entry); } return SelectPrevtDisk(pEntry); } case FSEL_DIR_REPEATALL: if (SelectPrev(pEntry )) { return TRUE; } fselFileNo = fselTotal + 1; return SelectPrev(pEntry); default: return FALSE; } }
//**************************************************************************************** void CBCGPDateTimeCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if (!IsWindowEnabled ()) { return; } if (isdigit (nChar)) { PushDigit (nChar - '0'); return; } if (nChar >= VK_NUMPAD0 && nChar <= VK_NUMPAD9) { PushDigit (nChar - VK_NUMPAD0); return; } if (isalpha (nChar)) { switch (m_CurrPartType) { case MONTH: if (m_monthFormat != 2) { ChangeMonth (nChar); } break; case AMPM: ChangeAmPm (nChar); break; } return; } m_iPrevDigit = -1; switch (nChar) { case VK_DOWN: ScrollCurrPart (-1); break; case VK_UP: ScrollCurrPart (1); break; case VK_RIGHT: SelectNext (); break; case VK_LEFT: SelectPrev (); break; case VK_HOME: ScrollCurrPartToLimit (TRUE); break; case VK_END: ScrollCurrPartToLimit (FALSE); break; case VK_SPACE: if (m_CurrPartType == CHECK_BOX) { ToggleCheck (); } else if (m_CurrPartType == AMPM) { ScrollCurrPart (1); } break; } CButton::OnKeyDown(nChar, nRepCnt, nFlags); }
/******************************************************************************** * Description : Seek to the prev file * * Arguments : strFile:output file name * Returns : TRUE: Successful FALSE: fail. * Notes : 目录数检查,先子目录(子目录N -- 子目录1)再父目录. * ********************************************************************************/ BOOL SelectPrevtDisk(UINT32 *pEntry) { UINT32 inode; //在当前目录向下找文件 fselError = 0; if ( !SelectPrev(pEntry) ) { //检查父目录. ParentDiragainNext: hal_TimWatchDogKeepAlive(); if ( ERR_SUCCESS == FS_ChangeSubDir(FS_PARENT_INO)) { if (ERR_SUCCESS == FS_GetPrevEntry(&inode, NULL, FS_DIR_DIR_CONT)) { goto CurrentDiragainNext; } else { //当前目录下有效的文件 fselTotal = 0; fselFileNo = 0; if ( SelectPrev(pEntry) ) { fselError = 0; return TRUE; } // 当前目录分支没有合适的文件,退回上级目录 goto ParentDiragainNext; } } else { fselError = FSEL_ERR_OUTOF; return FALSE; } //寻找当前目录下的所有目录 CurrentDiragainNext: hal_TimWatchDogKeepAlive(); if ( ERR_SUCCESS != FS_ChangeSubDir(inode)) { fselError = FSEL_ERR_OUTOF; return FALSE; } if (ERR_SUCCESS == FS_GetPrevEntry(&inode, NULL, FS_DIR_DIR)) { goto CurrentDiragainNext; } else // 寻找当前目录的下一个目录(平级寻找) { fselTotal = 0; fselFileNo = 0; if ( SelectPrev(pEntry) ) { fselError = 0; return TRUE; } // 当前目录分支没有合适的文件,退回上级目录 goto ParentDiragainNext; } } return TRUE; }