ENH: add initial path support for file choosers
This commit is contained in:
parent
237f960c89
commit
17d7ff0358
@ -381,6 +381,21 @@ void CPropertyList::OnCheckBox()
|
|||||||
m_Dirty = true;
|
m_Dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Insane Microsoft way of setting the initial directory
|
||||||
|
// for the Shbrowseforfolder function...
|
||||||
|
// SetSelProc
|
||||||
|
// Callback procedure to set the initial selection of the browser.
|
||||||
|
|
||||||
|
int CALLBACK SetSelProc( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM
|
||||||
|
lpData )
|
||||||
|
{
|
||||||
|
if (uMsg==BFFM_INITIALIZED)
|
||||||
|
{
|
||||||
|
::SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lpData );
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void CPropertyList::OnButton()
|
void CPropertyList::OnButton()
|
||||||
{
|
{
|
||||||
CPropertyItem* pItem = (CPropertyItem*) GetItemDataPtr(m_curSel);
|
CPropertyItem* pItem = (CPropertyItem*) GetItemDataPtr(m_curSel);
|
||||||
@ -426,17 +441,26 @@ void CPropertyList::OnButton()
|
|||||||
else if (pItem->m_nItemType == CPropertyList::FILE)
|
else if (pItem->m_nItemType == CPropertyList::FILE)
|
||||||
{
|
{
|
||||||
CString SelectedFile;
|
CString SelectedFile;
|
||||||
CString Filter("Gif Files (*.gif)|*.gif||");
|
CString Filter("All Files (*.*)||");
|
||||||
|
|
||||||
CFileDialog FileDlg(TRUE, NULL, NULL, NULL,
|
CFileDialog FileDlg(TRUE, NULL, NULL, NULL,
|
||||||
Filter);
|
Filter);
|
||||||
|
CString initialDir;
|
||||||
CString currPath = pItem->m_curValue;
|
CString currPath = pItem->m_curValue;
|
||||||
|
if (currPath.GetLength() > 0)
|
||||||
|
{
|
||||||
|
int endSlash = currPath.ReverseFind('\\');
|
||||||
|
if(endSlash == -1)
|
||||||
|
{
|
||||||
|
endSlash = currPath.ReverseFind('/');
|
||||||
|
}
|
||||||
|
initialDir = currPath.Left(endSlash);
|
||||||
|
}
|
||||||
|
initialDir.Replace("/", "\\");
|
||||||
FileDlg.m_ofn.lpstrTitle = "Select file";
|
FileDlg.m_ofn.lpstrTitle = "Select file";
|
||||||
if (currPath.GetLength() > 0)
|
if (currPath.GetLength() > 0)
|
||||||
FileDlg.m_ofn.lpstrInitialDir = currPath.Left(
|
FileDlg.m_ofn.lpstrInitialDir = initialDir;
|
||||||
currPath.GetLength() - currPath.ReverseFind('\\'));
|
|
||||||
|
|
||||||
if(IDOK == FileDlg.DoModal())
|
if(IDOK == FileDlg.DoModal())
|
||||||
{
|
{
|
||||||
SelectedFile = FileDlg.GetPathName();
|
SelectedFile = FileDlg.GetPathName();
|
||||||
@ -450,15 +474,28 @@ void CPropertyList::OnButton()
|
|||||||
}
|
}
|
||||||
else if (pItem->m_nItemType == CPropertyList::PATH)
|
else if (pItem->m_nItemType == CPropertyList::PATH)
|
||||||
{
|
{
|
||||||
|
CString initialDir;
|
||||||
|
CString currPath = pItem->m_curValue;
|
||||||
|
if (currPath.GetLength() > 0)
|
||||||
|
{
|
||||||
|
int endSlash = currPath.ReverseFind('\\');
|
||||||
|
if(endSlash == -1)
|
||||||
|
{
|
||||||
|
endSlash = currPath.ReverseFind('/');
|
||||||
|
}
|
||||||
|
initialDir = currPath.Left(endSlash);
|
||||||
|
}
|
||||||
|
initialDir.Replace("/", "\\");
|
||||||
char szPathName[4096];
|
char szPathName[4096];
|
||||||
BROWSEINFO bi;
|
BROWSEINFO bi;
|
||||||
|
bi.lpfn = SetSelProc;
|
||||||
|
bi.lParam = (LPARAM)(LPCSTR) initialDir;
|
||||||
|
|
||||||
bi.hwndOwner = m_hWnd;
|
bi.hwndOwner = m_hWnd;
|
||||||
bi.pidlRoot = NULL;
|
bi.pidlRoot = NULL;
|
||||||
bi.pszDisplayName = (LPTSTR)szPathName;
|
bi.pszDisplayName = (LPTSTR)szPathName;
|
||||||
bi.lpszTitle = "Select Directory";
|
bi.lpszTitle = "Select Directory";
|
||||||
bi.ulFlags = BIF_EDITBOX | BIF_RETURNONLYFSDIRS;
|
bi.ulFlags = BIF_EDITBOX | BIF_RETURNONLYFSDIRS;
|
||||||
bi.lpfn = NULL;
|
|
||||||
|
|
||||||
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
|
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user