Bug #232443 --> Modifying Windows Folder Picker to use the new folder dialog on windows

and to automatically expand the folder tree to the passed in folder path.

r=dean with help from neil, biesi.
sr=bienvenu
This commit is contained in:
scott%scott-macgregor.org 2004-02-19 22:08:02 +00:00
Родитель 44d7372cf8
Коммит 8d174157ce
1 изменённых файлов: 35 добавлений и 2 удалений

Просмотреть файл

@ -35,6 +35,7 @@
#include "nsIURL.h"
#include "nsIFileURL.h"
#include "nsIStringBundle.h"
#include "nsNativeCharsetUtils.h"
#include "nsEnumeratorUtils.h"
#include "nsCRT.h"
#include <windows.h>
@ -56,6 +57,12 @@ char nsFilePicker::mLastUsedDirectory[MAX_PATH+1] = { 0 };
#define MAX_EXTENSION_LENGTH 10
#ifndef BIF_USENEWUI
// BIF_USENEWUI isn't defined in the platform SDK that comes with
// MSVC6.0.
#define BIF_USENEWUI 0x50
#endif
//-------------------------------------------------------------------------
//
// nsFilePicker constructor
@ -87,6 +94,22 @@ nsFilePicker::~nsFilePicker()
// Show - Display the file dialog
//
//-------------------------------------------------------------------------
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if (uMsg == BFFM_INITIALIZED)
{
char * filePath = (char *) lpData;
if (filePath)
{
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE /* true because lpData is a path string */, lpData);
nsCRT::free(filePath);
}
}
return 0;
}
NS_IMETHODIMP nsFilePicker::ShowW(PRInt16 *aReturnVal)
{
NS_ENSURE_ARG_POINTER(aReturnVal);
@ -124,9 +147,19 @@ NS_IMETHODIMP nsFilePicker::ShowW(PRInt16 *aReturnVal)
browserInfo.pidlRoot = nsnull;
browserInfo.pszDisplayName = (LPWSTR)dirBuffer;
browserInfo.lpszTitle = title;
browserInfo.ulFlags = BIF_RETURNONLYFSDIRS;//BIF_STATUSTEXT | BIF_RETURNONLYFSDIRS;
browserInfo.lpfn = nsnull;
browserInfo.ulFlags = BIF_USENEWUI | BIF_RETURNONLYFSDIRS;
if (initialDir.Length()) // convert folder path to native, the strdup copy will be released in BrowseCallbackProc
{
nsCAutoString nativeFolderPath;
NS_CopyUnicodeToNative(initialDir, nativeFolderPath);
browserInfo.lParam = (LPARAM) nsCRT::strdup(nativeFolderPath.get());
browserInfo.lpfn = &BrowseCallbackProc;
}
else
{
browserInfo.lParam = nsnull;
browserInfo.lpfn = nsnull;
}
browserInfo.iImage = nsnull;
// XXX UNICODE support is needed here --> DONE