[PATCH] shell32: make new style Browse For Folders dialog resiza=
=3D?utf-8?q?Miko=3DC5=3D82aj=3D20Zalewski?=3D
mikolaj at zalewski.pl
Mon Jul 7 05:05:02 CDT 2008
ble
---
dlls/shell32/brsfolder.c | 124 ++++++++++++++++++++++++++++++++++++++=
+++++-
dlls/shell32/shell32_Da.rc | 2 +-
dlls/shell32/shell32_De.rc | 2 +-
dlls/shell32/shell32_En.rc | 2 +-
dlls/shell32/shell32_Es.rc | 2 +-
dlls/shell32/shell32_Fr.rc | 2 +-
dlls/shell32/shell32_Ko.rc | 2 +-
dlls/shell32/shell32_Nl.rc | 2 +-
dlls/shell32/shell32_No.rc | 2 +-
dlls/shell32/shell32_Pl.rc | 2 +-
dlls/shell32/shell32_Ro.rc | 2 +-
dlls/shell32/shell32_Ru.rc | 2 +-
dlls/shell32/shell32_Si.rc | 2 +-
13 files changed, 135 insertions(+), 13 deletions(-)
diff --git a/dlls/shell32/brsfolder.c b/dlls/shell32/brsfolder.c
index 45e7519..00cf728 100644
--- a/dlls/shell32/brsfolder.c
+++ b/dlls/shell32/brsfolder.c
@@ -20,7 +20,6 @@
* - many flags unimplemented
* - implement new dialog style "make new folder" button
* - implement editbox
- * - implement new dialog style resizing
*/
=20
#include <stdlib.h>
@@ -39,12 +38,21 @@
=20
WINE_DEFAULT_DEBUG_CHANNEL(shell);
=20
+/* original margins and control size */
+typedef struct tagLAYOUT_DATA
+{
+ LONG left, width, right;
+ LONG top, height, bottom;
+} LAYOUT_DATA;
+
typedef struct tagbrowse_info
{
HWND hWnd;
HWND hwndTreeView;
LPBROWSEINFOW lpBrowseInfo;
LPITEMIDLIST pidlRet;
+ LAYOUT_DATA *layout; /* filled by LayoutInit, used by LayoutUpdate=
*/
+ SIZE szMin;
} browse_info;
=20
typedef struct tagTV_ITEMDATA
@@ -55,6 +63,26 @@ typedef struct tagTV_ITEMDATA
IEnumIDList* pEnumIL; /* Children iterator */=20
} TV_ITEMDATA, *LPTV_ITEMDATA;
=20
+typedef struct tagLAYOUT_INFO
+{
+ int iItemId; /* control id */
+ DWORD dwAnchor; /* BF_* flags specifying which margins should =
remain constant */
+} LAYOUT_INFO;
+
+static const LAYOUT_INFO g_layout_info[] =3D
+{
+ {IDD_TITLE, BF_TOP|BF_LEFT|BF_RIGHT},
+ {IDD_STATUS, BF_TOP|BF_LEFT|BF_RIGHT},
+ {IDD_FOLDER, BF_TOP|BF_LEFT|BF_RIGHT},
+ {IDD_TREEVIEW, BF_TOP|BF_BOTTOM|BF_LEFT|BF_RIGHT},
+ {IDD_FOLDERTEXT, BF_BOTTOM|BF_LEFT|BF_RIGHT},
+ {IDD_MAKENEWFOLDER, BF_BOTTOM|BF_LEFT},
+ {IDOK, BF_BOTTOM|BF_RIGHT},
+ {IDCANCEL, BF_BOTTOM|BF_RIGHT}
+};
+
+#define LAYOUT_INFO_COUNT (sizeof(g_layout_info)/sizeof(g_layout_info[0]=
))
+
#define SUPPORTEDFLAGS (BIF_STATUSTEXT | \
BIF_BROWSEFORCOMPUTER | \
BIF_RETURNFSANCESTORS | \
@@ -87,6 +115,68 @@ static void browsefolder_callback( LPBROWSEINFOW lpBr=
owseInfo, HWND hWnd,
lpBrowseInfo->lpfn( hWnd, msg, param, lpBrowseInfo->lParam );
}
=20
+static LAYOUT_DATA *LayoutInit(HWND hwnd, const LAYOUT_INFO *layout_info=
, int layout_count)
+{
+ LAYOUT_DATA *data;
+ RECT rcWnd;
+ int i;
+
+ GetClientRect(hwnd, &rcWnd);
+ data =3D SHAlloc(sizeof(LAYOUT_DATA)*layout_count);
+ for (i =3D 0; i < layout_count; i++)
+ {
+ RECT r;
+ HWND hItem =3D GetDlgItem(hwnd, layout_info[i].iItemId);
+
+ if (hItem =3D=3D NULL)
+ ERR("Item %d not found\n", i);
+ GetWindowRect(hItem, &r);
+ MapWindowPoints(HWND_DESKTOP, hwnd, (LPPOINT)&r, 2);
+
+ data[i].left =3D r.left;
+ data[i].right =3D rcWnd.right - r.right;
+ data[i].width =3D r.right - r.left;
+
+ data[i].top =3D r.top;
+ data[i].bottom =3D rcWnd.bottom - r.bottom;
+ data[i].height =3D r.bottom - r.top;
+ }
+ return data;
+}
+
+static void LayoutUpdate(HWND hwnd, LAYOUT_DATA *data, const LAYOUT_INFO=
*layout_info, int layout_count)
+{
+ RECT rcWnd;
+ int i;
+
+ GetClientRect(hwnd, &rcWnd);
+ for (i =3D 0; i < layout_count; i++)
+ {
+ RECT r;
+ HWND hItem =3D GetDlgItem(hwnd, layout_info[i].iItemId);
+
+ GetWindowRect(hItem, &r);
+ MapWindowPoints(HWND_DESKTOP, hwnd, (LPPOINT)&r, 2);
+
+ if (layout_info[i].dwAnchor & BF_RIGHT)
+ {
+ r.right =3D rcWnd.right - data[i].right;
+ if (!(layout_info[i].dwAnchor & BF_LEFT))
+ r.left =3D r.right - data[i].width;
+ }
+
+ if (layout_info[i].dwAnchor & BF_BOTTOM)
+ {
+ r.bottom =3D rcWnd.bottom - data[i].bottom;
+ if (!(layout_info[i].dwAnchor & BF_TOP))
+ r.top =3D r.bottom - data[i].height;
+ }
+
+ SetWindowPos(hItem, NULL, r.left, r.top, r.right - r.left, r.bot=
tom - r.top, SWP_NOZORDER);
+ }
+}
+
+
/***********************************************************************=
*******
* InitializeTreeView [Internal]
*
@@ -504,6 +594,18 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_in=
fo *info )
if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS)
FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDF=
LAGS);
=20
+ if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)
+ {
+ RECT rcWnd;
+
+ info->layout =3D LayoutInit(hWnd, g_layout_info, LAYOUT_INFO_COU=
NT);
+
+ /* TODO: Windows allows shrinking the windows a bit */
+ GetWindowRect(hWnd, &rcWnd);
+ info->szMin.cx =3D rcWnd.right - rcWnd.left;
+ info->szMin.cy =3D rcWnd.bottom - rcWnd.top;
+ }
+
if (lpBrowseInfo->lpszTitle)
SetWindowTextW( GetDlgItem(hWnd, IDD_TITLE), lpBrowseInfo->lpszTitle );
else
@@ -682,6 +784,18 @@ static BOOL BrsFolder_OnSetSelectionA(browse_info *i=
nfo, LPVOID selection, BOOL
return result;
}
=20
+static BOOL BrsFolder_OnWindowPosChanging(browse_info *info, WINDOWPOS *=
pos)
+{
+ if ((info->lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) && !(pos->fla=
gs & SWP_NOSIZE))
+ {
+ if (pos->cx < info->szMin.cx)
+ pos->cx =3D info->szMin.cx;
+ if (pos->cy < info->szMin.cy)
+ pos->cy =3D info->szMin.cy;
+ }
+ return 0;
+}
+
/***********************************************************************=
**
* BrsFolderDlgProc32 (not an exported API function)
*/
@@ -704,6 +818,14 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd,=
UINT msg, WPARAM wParam,
=20
case WM_COMMAND:
return BrsFolder_OnCommand( info, wParam );
+ =20
+ case WM_WINDOWPOSCHANGING:
+ return BrsFolder_OnWindowPosChanging( info, (WINDOWPOS *)lParam)=
;
+
+ case WM_SIZE:
+ if (info->layout) /* new style dialogs */
+ LayoutUpdate(hWnd, info->layout, g_layout_info, LAYOUT_INFO_=
COUNT);
+ return 0;
=20
case BFFM_SETSTATUSTEXTA:
TRACE("Set status %s\n", debugstr_a((LPSTR)lParam));
diff --git a/dlls/shell32/shell32_Da.rc b/dlls/shell32/shell32_Da.rc
index 59f8c62..c525c88 100644
--- a/dlls/shell32/shell32_Da.rc
+++ b/dlls/shell32/shell32_Da.rc
@@ -107,7 +107,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "V=E6lg Folder"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_De.rc b/dlls/shell32/shell32_De.rc
index e6dc749..e8ac7cb 100644
--- a/dlls/shell32/shell32_De.rc
+++ b/dlls/shell32/shell32_De.rc
@@ -107,7 +107,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "Verzeichnis ausw=E4hlen"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_En.rc b/dlls/shell32/shell32_En.rc
index 732490b..ce84374 100644
--- a/dlls/shell32/shell32_En.rc
+++ b/dlls/shell32/shell32_En.rc
@@ -106,7 +106,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "Browse for Folder"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_Es.rc b/dlls/shell32/shell32_Es.rc
index 15abaf1..b545460 100644
--- a/dlls/shell32/shell32_Es.rc
+++ b/dlls/shell32/shell32_Es.rc
@@ -107,7 +107,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "Explorar carpeta"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_Fr.rc b/dlls/shell32/shell32_Fr.rc
index 9378b94..face6f1 100644
--- a/dlls/shell32/shell32_Fr.rc
+++ b/dlls/shell32/shell32_Fr.rc
@@ -112,7 +112,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "Parcourir les dossiers"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_Ko.rc b/dlls/shell32/shell32_Ko.rc
index 04f4af0..0f5fb8f 100644
--- a/dlls/shell32/shell32_Ko.rc
+++ b/dlls/shell32/shell32_Ko.rc
@@ -108,7 +108,7 @@ WS_BORDER | WS_TABSTOP,
=20
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "=C6=FA=B4=F5 =C5=BD=BB=F6"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_Nl.rc b/dlls/shell32/shell32_Nl.rc
index d50e011..f24bc61 100644
--- a/dlls/shell32/shell32_Nl.rc
+++ b/dlls/shell32/shell32_Nl.rc
@@ -108,7 +108,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "Bladeren naar Map"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_No.rc b/dlls/shell32/shell32_No.rc
index b6ad967..6acd396 100644
--- a/dlls/shell32/shell32_No.rc
+++ b/dlls/shell32/shell32_No.rc
@@ -106,7 +106,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "Bla etter mappe"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_Pl.rc b/dlls/shell32/shell32_Pl.rc
index 8099ab5..3df49c8 100644
--- a/dlls/shell32/shell32_Pl.rc
+++ b/dlls/shell32/shell32_Pl.rc
@@ -107,7 +107,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "Wybierz folder"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_Ro.rc b/dlls/shell32/shell32_Ro.rc
index 36789ca..0694d2f 100644
--- a/dlls/shell32/shell32_Ro.rc
+++ b/dlls/shell32/shell32_Ro.rc
@@ -109,7 +109,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "Selectare dosar"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_Ru.rc b/dlls/shell32/shell32_Ru.rc
index ebd7b96..d68f1d5 100644
--- a/dlls/shell32/shell32_Ru.rc
+++ b/dlls/shell32/shell32_Ru.rc
@@ -107,7 +107,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "=CE=E1=E7=EE=F0"
FONT 8, "MS Shell Dlg"
{
diff --git a/dlls/shell32/shell32_Si.rc b/dlls/shell32/shell32_Si.rc
index ccf9420..18ce181 100644
--- a/dlls/shell32/shell32_Si.rc
+++ b/dlls/shell32/shell32_Si.rc
@@ -108,7 +108,7 @@ FONT 8, "MS Shell Dlg"
}
=20
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, =
218, 196
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFO=
NT | DS_3DLOOK
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRA=
ME | DS_SETFONT | DS_3DLOOK
CAPTION "Brskanje po mapah"
FONT 8, "MS Shell Dlg"
{
--=20
1.5.4
--------------030702010605060401000501--
More information about the wine-patches
mailing list