Beispiel #1
0
/********************************************************************************
* 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);
}
Beispiel #3
0
/********************************************************************************
* 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;
}