From 7318ae2411eea8e43aa931bbbe676dc2fb7fa233 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Thu, 7 Jun 2007 14:55:09 -0700 Subject: [PATCH] shell32: Start implementing BIF_USENEWUI. --- dlls/shell32/brsfolder.c | 48 ++++++++++++++++++++++++++++++++++++-- dlls/shell32/shell32_En.rc | 20 ++++++++++++++++ dlls/shell32/shresdef.h | 3 +++ 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/dlls/shell32/brsfolder.c b/dlls/shell32/brsfolder.c index e478078cc1a..ff5c1f0b362 100644 --- a/dlls/shell32/brsfolder.c +++ b/dlls/shell32/brsfolder.c @@ -18,6 +18,9 @@ * FIXME: * - many memory leaks * - many flags unimplemented + * - implement new dialog style "make new folder" button + * - implement editbox + * - implement new dialog style resizing */ #include @@ -56,6 +59,8 @@ typedef struct tagTV_ITEMDATA BIF_BROWSEFORCOMPUTER | \ BIF_RETURNFSANCESTORS | \ BIF_RETURNONLYFSDIRS | \ + BIF_NONEWFOLDERBUTTON | \ + BIF_NEWDIALOGSTYLE | \ BIF_BROWSEINCLUDEFILES) static void FillTreeView(browse_info*, LPSHELLFOLDER, @@ -494,6 +499,8 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) info->hWnd = hWnd; SetPropW( hWnd, szBrowseFolderInfo, info ); + if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) + FIXME("flags BIF_NEWDIALOGSTYLE partially implemented\n"); if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS) FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS); @@ -502,12 +509,37 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) else ShowWindow( GetDlgItem(hWnd, IDD_TITLE), SW_HIDE ); - if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT)) + if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT) + || (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)) ShowWindow( GetDlgItem(hWnd, IDD_STATUS), SW_HIDE ); + /* Hide "Make New Folder" Button? */ + if ((lpBrowseInfo->ulFlags & BIF_NONEWFOLDERBUTTON) + || !(lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)) + ShowWindow( GetDlgItem(hWnd, IDD_MAKENEWFOLDER), SW_HIDE ); + + /* Hide the editbox? */ + if (!(lpBrowseInfo->ulFlags & BIF_EDITBOX)) + { + ShowWindow( GetDlgItem(hWnd, IDD_FOLDER), SW_HIDE ); + ShowWindow( GetDlgItem(hWnd, IDD_FOLDERTEXT), SW_HIDE ); + } + info->hwndTreeView = GetDlgItem( hWnd, IDD_TREEVIEW ); if (info->hwndTreeView) + { InitializeTreeView( info ); + + /* Resize the treeview if there's not editbox */ + if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) + && !(lpBrowseInfo->ulFlags & BIF_EDITBOX)) + { + RECT rc; + GetClientRect(info->hwndTreeView, &rc); + SetWindowPos(info->hwndTreeView, HWND_TOP, 0, 0, + rc.right, rc.bottom + 40, SWP_NOMOVE); + } + } else ERR("treeview control missing!\n"); @@ -536,6 +568,10 @@ static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) case IDCANCEL: EndDialog( info->hWnd, 0 ); return TRUE; + + case IDD_MAKENEWFOLDER: + FIXME("make new folder not implemented\n"); + return TRUE; } return FALSE; } @@ -703,6 +739,8 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam, static const WCHAR swBrowseTemplateName[] = { 'S','H','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0}; +static const WCHAR swNewBrowseTemplateName[] = { + 'S','H','N','E','W','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0}; /************************************************************************* * SHBrowseForFolderA [SHELL32.@] @@ -765,6 +803,7 @@ LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi) browse_info info; DWORD r; HRESULT hr; + const WCHAR * templateName; info.hWnd = 0; info.pidlRet = NULL; @@ -772,7 +811,12 @@ LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi) info.hwndTreeView = NULL; hr = OleInitialize(NULL); - r = DialogBoxParamW( shell32_hInstance, swBrowseTemplateName, lpbi->hwndOwner, + + if (lpbi->ulFlags & BIF_NEWDIALOGSTYLE) + templateName = swNewBrowseTemplateName; + else + templateName = swBrowseTemplateName; + r = DialogBoxParamW( shell32_hInstance, templateName, lpbi->hwndOwner, BrsFolderDlgProc, (LPARAM)&info ); if (SUCCEEDED(hr)) OleUninitialize(); diff --git a/dlls/shell32/shell32_En.rc b/dlls/shell32/shell32_En.rc index 0613b41e51e..ca902c8de7a 100644 --- a/dlls/shell32/shell32_En.rc +++ b/dlls/shell32/shell32_En.rc @@ -16,6 +16,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "shresdef.h" + LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT MENU_001 MENU DISCARDABLE @@ -104,6 +106,24 @@ FONT 8, "MS Shell Dlg" 4, 40, 180, 120 } +SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +{ + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 156, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", + TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | + WS_BORDER | WS_TABSTOP, + 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 70, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +} + SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Message" diff --git a/dlls/shell32/shresdef.h b/dlls/shell32/shresdef.h index 3619353ec8c..1e5c76fbe04 100644 --- a/dlls/shell32/shresdef.h +++ b/dlls/shell32/shresdef.h @@ -103,6 +103,9 @@ /* these IDs are the same as on native */ #define IDD_YESTOALL 0x3207 /* browse for folder dialog box */ +#define IDD_MAKENEWFOLDER 0x3746 +#define IDD_FOLDERTEXT 0x3745 +#define IDD_FOLDER 0x3744 #define IDD_STATUS 0x3743 #define IDD_TITLE 0x3742 #define IDD_TREEVIEW 0x3741