[COMDLG32]
authorAmine Khaldi <amine.khaldi@reactos.org>
Sat, 27 Sep 2014 10:16:40 +0000 (10:16 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Sat, 27 Sep 2014 10:16:40 +0000 (10:16 +0000)
* Sync with Wine 1.7.27.
* Translators, you're up ;)
CORE-8540

svn path=/trunk/; revision=64325

38 files changed:
reactos/dll/win32/comdlg32/filedlg.c
reactos/dll/win32/comdlg32/filedlgbrowser.h
reactos/dll/win32/comdlg32/itemdlg.c
reactos/dll/win32/comdlg32/lang/cdlg_Bg.rc
reactos/dll/win32/comdlg32/lang/cdlg_Ca.rc
reactos/dll/win32/comdlg32/lang/cdlg_Cs.rc
reactos/dll/win32/comdlg32/lang/cdlg_Da.rc
reactos/dll/win32/comdlg32/lang/cdlg_De.rc
reactos/dll/win32/comdlg32/lang/cdlg_El.rc
reactos/dll/win32/comdlg32/lang/cdlg_En.rc
reactos/dll/win32/comdlg32/lang/cdlg_Eo.rc
reactos/dll/win32/comdlg32/lang/cdlg_Es.rc
reactos/dll/win32/comdlg32/lang/cdlg_Fi.rc
reactos/dll/win32/comdlg32/lang/cdlg_Fr.rc
reactos/dll/win32/comdlg32/lang/cdlg_He.rc
reactos/dll/win32/comdlg32/lang/cdlg_Hu.rc
reactos/dll/win32/comdlg32/lang/cdlg_It.rc
reactos/dll/win32/comdlg32/lang/cdlg_Ja.rc
reactos/dll/win32/comdlg32/lang/cdlg_Ko.rc
reactos/dll/win32/comdlg32/lang/cdlg_Lt.rc
reactos/dll/win32/comdlg32/lang/cdlg_Nl.rc
reactos/dll/win32/comdlg32/lang/cdlg_No.rc
reactos/dll/win32/comdlg32/lang/cdlg_Pl.rc
reactos/dll/win32/comdlg32/lang/cdlg_Pt.rc
reactos/dll/win32/comdlg32/lang/cdlg_Ro.rc
reactos/dll/win32/comdlg32/lang/cdlg_Ru.rc
reactos/dll/win32/comdlg32/lang/cdlg_Si.rc
reactos/dll/win32/comdlg32/lang/cdlg_Sk.rc
reactos/dll/win32/comdlg32/lang/cdlg_Sq.rc
reactos/dll/win32/comdlg32/lang/cdlg_Sr.rc
reactos/dll/win32/comdlg32/lang/cdlg_Sv.rc
reactos/dll/win32/comdlg32/lang/cdlg_Th.rc
reactos/dll/win32/comdlg32/lang/cdlg_Tr.rc
reactos/dll/win32/comdlg32/lang/cdlg_Tw.rc
reactos/dll/win32/comdlg32/lang/cdlg_Uk.rc
reactos/dll/win32/comdlg32/lang/cdlg_Zh.rc
reactos/dll/win32/comdlg32/resource.h
reactos/media/doc/README.WINE

index 3fa4255..7c0ae14 100644 (file)
@@ -1776,7 +1776,7 @@ static LRESULT FILEDLG95_ResizeControls(HWND hwnd, WPARAM wParam, LPARAM lParam)
   }
   else
   {
-    /* Resize the height, if open as read only checkbox ad help button are
+    /* Resize the height; if opened as read-only, checkbox and help button are
      * hidden and we are not using a custom template nor a customDialog
      */
     if ( (fodInfos->ofnInfos->Flags & OFN_HIDEREADONLY) &&
index 04d961d..0ea0fd8 100644 (file)
@@ -94,6 +94,7 @@ typedef struct
 #define IDS_INVALID_FILENAME           121
 #define IDS_PATHNOTEXISTING            122
 #define IDS_FILENOTEXISTING            123
+#define IDS_INVALID_FOLDERNAME         124
 
 /* File Dialog Tooltips string IDs */
 
index 72c3dfe..1b56608 100644 (file)
@@ -67,7 +67,8 @@ enum ITEMDLG_CCTRL_TYPE {
     IDLG_CCTRL_CHECKBUTTON,
     IDLG_CCTRL_EDITBOX,
     IDLG_CCTRL_SEPARATOR,
-    IDLG_CCTRL_TEXT
+    IDLG_CCTRL_TEXT,
+    IDLG_CCTRL_VISUALGROUP
 };
 
 typedef struct {
@@ -76,6 +77,9 @@ typedef struct {
     enum ITEMDLG_CCTRL_TYPE type;
     CDCONTROLSTATEF cdcstate;
     struct list entry;
+
+    struct list sub_cctrls;
+    struct list sub_cctrls_entry;
 } customctrl;
 
 typedef struct {
@@ -124,9 +128,11 @@ typedef struct FileDialogImpl {
     LPWSTR custom_filenamelabel;
 
     UINT cctrl_width, cctrl_def_height, cctrls_cols;
+    UINT cctrl_indent;
     HWND cctrls_hwnd;
     struct list cctrls;
     UINT_PTR cctrl_next_dlgid;
+    customctrl *cctrl_active_vg;
 
     GUID client_guid;
 } FileDialogImpl;
@@ -198,6 +204,18 @@ static void events_OnSelectionChange(FileDialogImpl *This)
     }
 }
 
+static void events_OnTypeChange(FileDialogImpl *This)
+{
+    events_client *cursor;
+    TRACE("%p\n", This);
+
+    LIST_FOR_EACH_ENTRY(cursor, &This->events_clients, events_client, entry)
+    {
+        TRACE("Notifying %p\n", cursor);
+        IFileDialogEvents_OnTypeChange(cursor->pfde, (IFileDialog*)&This->IFileDialog2_iface);
+    }
+}
+
 static inline HRESULT get_cctrl_event(IFileDialogEvents *pfde, IFileDialogControlEvents **pfdce)
 {
     return IFileDialogEvents_QueryInterface(pfde, &IID_IFileDialogControlEvents, (void**)pfdce);
@@ -348,8 +366,10 @@ static void fill_filename_from_selection(FileDialogImpl *This)
             UINT attr;
 
             hr = IShellItem_GetAttributes(psi, SFGAO_FOLDER, &attr);
-            if(SUCCEEDED(hr) && (attr & SFGAO_FOLDER))
-                continue; /* FIXME: FOS_PICKFOLDERS */
+            if(SUCCEEDED(hr) &&
+               (( (This->options & FOS_PICKFOLDERS) && !(attr & SFGAO_FOLDER)) ||
+                (!(This->options & FOS_PICKFOLDERS) &&  (attr & SFGAO_FOLDER))))
+                continue;
 
             hr = IShellItem_GetDisplayName(psi, SIGDN_PARENTRELATIVEPARSING, &names[valid_count]);
             if(SUCCEEDED(hr))
@@ -538,21 +558,42 @@ static HRESULT on_default_action(FileDialogImpl *This)
         break;
 
     case ONOPEN_OPEN:
-        if(events_OnFileOk(This) != S_OK)
-            break;
-
         hr = SHGetDesktopFolder(&psf_desktop);
         if(SUCCEEDED(hr))
         {
             if(This->psia_results)
+            {
                 IShellItemArray_Release(This->psia_results);
+                This->psia_results = NULL;
+            }
 
             hr = SHCreateShellItemArray(NULL, psf_desktop, file_count, (PCUITEMID_CHILD_ARRAY)pidla,
                                         &This->psia_results);
-            if(SUCCEEDED(hr))
-                ret = S_OK;
 
             IShellFolder_Release(psf_desktop);
+
+            if(FAILED(hr))
+                break;
+
+            if(This->options & FOS_PICKFOLDERS)
+            {
+                SFGAOF attributes;
+                hr = IShellItemArray_GetAttributes(This->psia_results, SIATTRIBFLAGS_AND, SFGAO_FOLDER, &attributes);
+                if(hr != S_OK)
+                {
+                    WCHAR buf[64];
+                    LoadStringW(COMDLG32_hInstance, IDS_INVALID_FOLDERNAME, buf, sizeof(buf)/sizeof(WCHAR));
+
+                    MessageBoxW(This->dlg_hwnd, buf, This->custom_title, MB_OK | MB_ICONEXCLAMATION);
+
+                    IShellItemArray_Release(This->psia_results);
+                    This->psia_results = NULL;
+                    break;
+                }
+            }
+
+            if(events_OnFileOk(This) == S_OK)
+                ret = S_OK;
         }
         break;
 
@@ -575,25 +616,38 @@ static HRESULT on_default_action(FileDialogImpl *This)
  */
 static inline customctrl *get_cctrl_from_dlgid(FileDialogImpl *This, DWORD dlgid)
 {
-    customctrl *ctrl;
+    customctrl *ctrl, *sub_ctrl;
 
     LIST_FOR_EACH_ENTRY(ctrl, &This->cctrls, customctrl, entry)
+    {
         if(ctrl->dlgid == dlgid)
             return ctrl;
 
+        LIST_FOR_EACH_ENTRY(sub_ctrl, &ctrl->sub_cctrls, customctrl, sub_cctrls_entry)
+            if(sub_ctrl->dlgid == dlgid)
+                return sub_ctrl;
+    }
+
     ERR("Failed to find control with dialog id %d\n", dlgid);
     return NULL;
 }
 
 static inline customctrl *get_cctrl(FileDialogImpl *This, DWORD ctlid)
 {
-    customctrl *ctrl;
+    customctrl *ctrl, *sub_ctrl;
 
     LIST_FOR_EACH_ENTRY(ctrl, &This->cctrls, customctrl, entry)
+    {
         if(ctrl->id == ctlid)
             return ctrl;
 
-    ERR("Failed to find control with control id %d\n", ctlid);
+        LIST_FOR_EACH_ENTRY(sub_ctrl, &ctrl->sub_cctrls, customctrl, sub_cctrls_entry)
+            if(sub_ctrl->id == ctlid)
+                return sub_ctrl;
+    }
+
+
+    TRACE("No existing control with control id %d\n", ctlid);
     return NULL;
 }
 
@@ -639,9 +693,39 @@ static void ctrl_resize(HWND hctrl, UINT min_width, UINT max_width, BOOL multili
     HeapFree(GetProcessHeap(), 0, text);
 }
 
+static UINT ctrl_get_height(customctrl *ctrl) {
+    RECT rc;
+    GetWindowRect(ctrl->wrapper_hwnd, &rc);
+    return rc.bottom - rc.top;
+}
+
+static void ctrl_free(customctrl *ctrl)
+{
+    customctrl *sub_cur1, *sub_cur2;
+
+    TRACE("Freeing control %p\n", ctrl);
+    if(ctrl->type == IDLG_CCTRL_MENU)
+    {
+        TBBUTTON tbb;
+        SendMessageW(ctrl->hwnd, TB_GETBUTTON, 0, (LPARAM)&tbb);
+        DestroyMenu((HMENU)tbb.dwData);
+    }
+
+    LIST_FOR_EACH_ENTRY_SAFE(sub_cur1, sub_cur2, &ctrl->sub_cctrls, customctrl, sub_cctrls_entry)
+    {
+        list_remove(&sub_cur1->sub_cctrls_entry);
+        ctrl_free(sub_cur1);
+    }
+
+    DestroyWindow(ctrl->hwnd);
+    HeapFree(GetProcessHeap(), 0, ctrl);
+}
+
 static void customctrl_resize(FileDialogImpl *This, customctrl *ctrl)
 {
     RECT rc;
+    UINT total_height;
+    customctrl *sub_ctrl;
 
     switch(ctrl->type)
     {
@@ -652,7 +736,35 @@ static void customctrl_resize(FileDialogImpl *This, customctrl *ctrl)
         ctrl_resize(ctrl->hwnd, 160, 160, TRUE);
         GetWindowRect(ctrl->hwnd, &rc);
         SetWindowPos(ctrl->wrapper_hwnd, NULL, 0, 0, rc.right-rc.left, rc.bottom-rc.top,
-                     SWP_NOZORDER|SWP_NOMOVE|SWP_NOZORDER);
+                     SWP_NOZORDER|SWP_NOMOVE);
+        break;
+    case IDLG_CCTRL_VISUALGROUP:
+        total_height = 0;
+        ctrl_resize(ctrl->hwnd, 0, This->cctrl_indent, TRUE);
+
+        LIST_FOR_EACH_ENTRY(sub_ctrl, &ctrl->sub_cctrls, customctrl, sub_cctrls_entry)
+        {
+            customctrl_resize(This, sub_ctrl);
+            SetWindowPos(sub_ctrl->wrapper_hwnd, NULL, This->cctrl_indent, total_height, 0, 0,
+                         SWP_NOZORDER|SWP_NOSIZE);
+
+            total_height += ctrl_get_height(sub_ctrl);
+        }
+
+        /* The label should be right adjusted */
+        {
+            UINT width, height;
+
+            GetWindowRect(ctrl->hwnd, &rc);
+            width = rc.right - rc.left;
+            height = rc.bottom - rc.top;
+
+            SetWindowPos(ctrl->hwnd, NULL, This->cctrl_indent - width, 0, width, height, SWP_NOZORDER);
+        }
+
+        /* Resize the wrapper window to fit all the sub controls */
+        SetWindowPos(ctrl->wrapper_hwnd, NULL, 0, 0, This->cctrl_width + This->cctrl_indent, total_height,
+                     SWP_NOZORDER|SWP_NOMOVE);
         break;
     case IDLG_CCTRL_RADIOBUTTONLIST:
     case IDLG_CCTRL_EDITBOX:
@@ -757,6 +869,7 @@ static LRESULT notifysink_on_wm_notify(FileDialogImpl *This, HWND hwnd, WPARAM w
 static LRESULT CALLBACK notifysink_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
 {
     FileDialogImpl *This = (FileDialogImpl*)GetWindowLongPtrW(hwnd, GWLP_USERDATA);
+    customctrl *ctrl;
     HWND hwnd_child;
     RECT rc;
 
@@ -767,8 +880,12 @@ static LRESULT CALLBACK notifysink_proc(HWND hwnd, UINT message, WPARAM wparam,
     case WM_NOTIFY:           return notifysink_on_wm_notify(This, hwnd, wparam, lparam);
     case WM_SIZE:
         hwnd_child = GetPropW(hwnd, notifysink_childW);
-        GetClientRect(hwnd, &rc);
-        SetWindowPos(hwnd_child, NULL, 0, 0, rc.right, rc.bottom, SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
+        ctrl = (customctrl*)GetWindowLongPtrW(hwnd_child, GWLP_USERDATA);
+        if(ctrl && ctrl->type != IDLG_CCTRL_VISUALGROUP)
+        {
+            GetClientRect(hwnd, &rc);
+            SetWindowPos(hwnd_child, NULL, 0, 0, rc.right, rc.bottom, SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
+        }
         return TRUE;
     }
 
@@ -779,15 +896,20 @@ static HRESULT cctrl_create_new(FileDialogImpl *This, DWORD id,
                                 LPCWSTR text, LPCWSTR wndclass, DWORD ctrl_wsflags,
                                 DWORD ctrl_exflags, UINT height, customctrl **ppctrl)
 {
-    HWND ns_hwnd, control_hwnd;
+    HWND ns_hwnd, control_hwnd, parent_hwnd;
     DWORD wsflags = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS;
     customctrl *ctrl;
 
     if(get_cctrl(This, id))
         return E_UNEXPECTED; /* Duplicate id */
 
+    if(This->cctrl_active_vg)
+        parent_hwnd = This->cctrl_active_vg->wrapper_hwnd;
+    else
+        parent_hwnd = This->cctrls_hwnd;
+
     ns_hwnd = CreateWindowExW(0, floatnotifysinkW, NULL, wsflags,
-                              0, 0, This->cctrl_width, height, This->cctrls_hwnd,
+                              0, 0, This->cctrl_width, height, parent_hwnd,
                               (HMENU)This->cctrl_next_dlgid, COMDLG32_hInstance, This);
     control_hwnd = CreateWindowExW(ctrl_exflags, wndclass, text, wsflags | ctrl_wsflags,
                                    0, 0, This->cctrl_width, height, ns_hwnd,
@@ -813,7 +935,15 @@ static HRESULT cctrl_create_new(FileDialogImpl *This, DWORD id,
     ctrl->id = id;
     ctrl->dlgid = This->cctrl_next_dlgid;
     ctrl->cdcstate = CDCS_ENABLED | CDCS_VISIBLE;
-    list_add_tail(&This->cctrls, &ctrl->entry);
+    list_init(&ctrl->sub_cctrls);
+
+    if(This->cctrl_active_vg)
+        list_add_tail(&This->cctrl_active_vg->sub_cctrls, &ctrl->sub_cctrls_entry);
+    else
+        list_add_tail(&This->cctrls, &ctrl->entry);
+
+    SetWindowLongPtrW(ctrl->hwnd, GWLP_USERDATA, (LPARAM)ctrl);
+
     if(ppctrl) *ppctrl = ctrl;
 
     This->cctrl_next_dlgid++;
@@ -832,7 +962,6 @@ static UINT ctrl_container_resize(FileDialogImpl *This, UINT container_width)
     UINT cur_col_pos, cur_row_pos;
     customctrl *ctrl;
     BOOL fits_height;
-    static const UINT col_indent = 100; /* The first column is indented 100px */
     static const UINT cspacing = 90;    /* Columns are spaced with 90px */
     static const UINT rspacing = 4;     /* Rows are spaced with 4 px. */
 
@@ -844,7 +973,7 @@ static UINT ctrl_container_resize(FileDialogImpl *This, UINT container_width)
     TRACE("%p\n", This);
 
     column_width = This->cctrl_width + cspacing;
-    nr_of_cols = (container_width - col_indent + cspacing) / column_width;
+    nr_of_cols = (container_width - This->cctrl_indent + cspacing) / column_width;
 
     /* We don't need to do anything unless the number of visible columns has changed. */
     if(nr_of_cols == This->cctrls_cols)
@@ -854,7 +983,7 @@ static UINT ctrl_container_resize(FileDialogImpl *This, UINT container_width)
         return rc.bottom - rc.top;
     }
 
-   This->cctrls_cols = nr_of_cols;
+    This->cctrls_cols = nr_of_cols;
 
     /* Get the size of the tallest control, and the total size of
      * all the controls to figure out the number of slots we need.
@@ -864,10 +993,7 @@ static UINT ctrl_container_resize(FileDialogImpl *This, UINT container_width)
     {
         if(ctrl->cdcstate & CDCS_VISIBLE)
         {
-            RECT rc;
-            UINT control_height;
-            GetWindowRect(ctrl->wrapper_hwnd, &rc);
-            control_height = rc.bottom - rc.top;
+            UINT control_height = ctrl_get_height(ctrl);
             max_control_height = max(max_control_height, control_height);
 
             total_height +=  control_height + rspacing;
@@ -892,10 +1018,7 @@ static UINT ctrl_container_resize(FileDialogImpl *This, UINT container_width)
         {
             if(ctrl->cdcstate & CDCS_VISIBLE)
             {
-                RECT rc;
-                UINT control_height;
-                GetWindowRect(ctrl->wrapper_hwnd, &rc);
-                control_height = rc.bottom - rc.top;
+                UINT control_height = ctrl_get_height(ctrl);
 
                 if(cur_row_pos + control_height > container_height)
                 {
@@ -917,13 +1040,13 @@ static UINT ctrl_container_resize(FileDialogImpl *This, UINT container_width)
 
     /* Move the controls to their final destination
      */
-    cur_col_pos = col_indent, cur_row_pos = 0;
+    cur_col_pos = 0, cur_row_pos = 0;
     LIST_FOR_EACH_ENTRY(ctrl, &This->cctrls, customctrl, entry)
     {
         if(ctrl->cdcstate & CDCS_VISIBLE)
         {
             RECT rc;
-            UINT control_height;
+            UINT control_height, control_indent;
             GetWindowRect(ctrl->wrapper_hwnd, &rc);
             control_height = rc.bottom - rc.top;
 
@@ -933,7 +1056,13 @@ static UINT ctrl_container_resize(FileDialogImpl *This, UINT container_width)
                 cur_col_pos += This->cctrl_width + cspacing;
             }
 
-            SetWindowPos(ctrl->wrapper_hwnd, NULL, cur_col_pos, cur_row_pos, 0, 0,
+
+            if(ctrl->type == IDLG_CCTRL_VISUALGROUP)
+                control_indent = 0;
+            else
+                control_indent = This->cctrl_indent;
+
+            SetWindowPos(ctrl->wrapper_hwnd, NULL, cur_col_pos + control_indent, cur_row_pos, 0, 0,
                          SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER);
 
             cur_row_pos += control_height + rspacing;
@@ -953,7 +1082,7 @@ static void ctrl_container_reparent(FileDialogImpl *This, HWND parent)
 
     if(parent)
     {
-        customctrl *ctrl;
+        customctrl *ctrl, *sub_ctrl;
         HFONT font;
 
         wndstyle = GetWindowLongW(This->cctrls_hwnd, GWL_STYLE);
@@ -972,6 +1101,13 @@ static void ctrl_container_reparent(FileDialogImpl *This, HWND parent)
         LIST_FOR_EACH_ENTRY(ctrl, &This->cctrls, customctrl, entry)
         {
             if(font) SendMessageW(ctrl->hwnd, WM_SETFONT, (WPARAM)font, TRUE);
+
+            /* If this is a VisualGroup */
+            LIST_FOR_EACH_ENTRY(sub_ctrl, &ctrl->sub_cctrls, customctrl, sub_cctrls_entry)
+            {
+                if(font) SendMessageW(sub_ctrl->hwnd, WM_SETFONT, (WPARAM)font, TRUE);
+            }
+
             customctrl_resize(This, ctrl);
         }
     }
@@ -1004,18 +1140,8 @@ static LRESULT ctrl_container_on_wm_destroy(FileDialogImpl *This)
 
     LIST_FOR_EACH_ENTRY_SAFE(cur1, cur2, &This->cctrls, customctrl, entry)
     {
-        TRACE("Freeing control %p\n", cur1);
         list_remove(&cur1->entry);
-
-        if(cur1->type == IDLG_CCTRL_MENU)
-        {
-            TBBUTTON tbb;
-            SendMessageW(cur1->hwnd, TB_GETBUTTON, 0, (LPARAM)&tbb);
-            DestroyMenu((HMENU)tbb.dwData);
-        }
-
-        DestroyWindow(cur1->hwnd);
-        HeapFree(GetProcessHeap(), 0, cur1);
+        ctrl_free(cur1);
     }
 
     return TRUE;
@@ -1044,11 +1170,13 @@ static HRESULT init_custom_controls(FileDialogImpl *This)
     InitCommonControlsEx(NULL);
 
     This->cctrl_width = 160;      /* Controls have a fixed width */
+    This->cctrl_indent = 100;
     This->cctrl_def_height = 23;
     This->cctrls_cols = 0;
 
     This->cctrl_next_dlgid = 0x2000;
     list_init(&This->cctrls);
+    This->cctrl_active_vg = NULL;
 
     if( !GetClassInfoW(COMDLG32_hInstance, ctrl_container_classname, &wc) )
     {
@@ -1409,10 +1537,32 @@ static LRESULT on_wm_initdialog(HWND hwnd, LPARAM lParam)
     hitem = GetDlgItem(This->dlg_hwnd, IDC_FILETYPE);
     if(This->filterspec_count)
     {
-        UINT i;
+        HDC hdc;
+        HFONT font;
+        SIZE size;
+        UINT i, maxwidth = 0;
+
+        hdc = GetDC(hitem);
+        font = (HFONT)SendMessageW(hitem, WM_GETFONT, 0, 0);
+        SelectObject(hdc, font);
+
         for(i = 0; i < This->filterspec_count; i++)
+        {
             SendMessageW(hitem, CB_ADDSTRING, 0, (LPARAM)This->filterspecs[i].pszName);
 
+            if(GetTextExtentPoint32W(hdc, This->filterspecs[i].pszName, lstrlenW(This->filterspecs[i].pszName), &size))
+                maxwidth = max(maxwidth, size.cx);
+        }
+        ReleaseDC(hitem, hdc);
+
+        if(maxwidth > 0)
+        {
+            maxwidth += GetSystemMetrics(SM_CXVSCROLL) + 4;
+            SendMessageW(hitem, CB_SETDROPPEDWIDTH, (WPARAM)maxwidth, 0);
+        }
+        else
+            ERR("Failed to calculate width of filetype dropdown\n");
+
         SendMessageW(hitem, CB_SETCURSEL, This->filetypeindex, 0);
     }
     else
@@ -1428,6 +1578,9 @@ static LRESULT on_wm_initdialog(HWND hwnd, LPARAM lParam)
     update_control_text(This);
     update_layout(This);
 
+    if(This->filterspec_count)
+        events_OnTypeChange(This);
+
     return TRUE;
 }
 
@@ -1538,6 +1691,11 @@ static LRESULT on_command_filetype(FileDialogImpl *This, WPARAM wparam, LPARAM l
             }
             CoTaskMemFree(filename);
         }
+
+        /* The documentation claims that OnTypeChange is called only
+         * when the dialog is opened, but this is obviously not the
+         * case. */
+        events_OnTypeChange(This);
     }
 
     return FALSE;
@@ -1746,10 +1904,9 @@ static HRESULT WINAPI IFileDialog2_fnSetFileTypeIndex(IFileDialog2 *iface, UINT
     if(!This->filterspecs)
         return E_FAIL;
 
-    if(iFileType >= This->filterspec_count)
-        This->filetypeindex = This->filterspec_count - 1;
-    else
-        This->filetypeindex = iFileType;
+    iFileType = max(iFileType, 1);
+    iFileType = min(iFileType, This->filterspec_count);
+    This->filetypeindex = iFileType-1;
 
     return S_OK;
 }
@@ -1762,7 +1919,10 @@ static HRESULT WINAPI IFileDialog2_fnGetFileTypeIndex(IFileDialog2 *iface, UINT
     if(!piFileType)
         return E_INVALIDARG;
 
-    *piFileType = This->filetypeindex;
+    if(This->filterspec_count == 0)
+        *piFileType = 0;
+    else
+        *piFileType = This->filetypeindex + 1;
 
     return S_OK;
 }
@@ -1819,6 +1979,13 @@ static HRESULT WINAPI IFileDialog2_fnSetOptions(IFileDialog2 *iface, FILEOPENDIA
     FileDialogImpl *This = impl_from_IFileDialog2(iface);
     TRACE("%p (0x%x)\n", This, fos);
 
+    if( !(This->options & FOS_PICKFOLDERS) && (fos & FOS_PICKFOLDERS) )
+    {
+        WCHAR buf[30];
+        LoadStringW(COMDLG32_hInstance, IDS_SELECT_FOLDER, buf, sizeof(buf)/sizeof(WCHAR));
+        IFileDialog2_SetTitle(iface, buf);
+    }
+
     This->options = fos;
 
     return S_OK;
@@ -2850,7 +3017,7 @@ static HRESULT WINAPI ICommDlgBrowser3_fnIncludeObject(ICommDlgBrowser3 *iface,
     ULONG attr;
     TRACE("%p (%p, %p)\n", This, shv, pidl);
 
-    if(!This->filterspec_count)
+    if(!This->filterspec_count && !(This->options & FOS_PICKFOLDERS))
         return S_OK;
 
     hr = SHGetIDListFromObject((IUnknown*)shv, &parent_pidl);
@@ -2874,6 +3041,12 @@ static HRESULT WINAPI ICommDlgBrowser3_fnIncludeObject(ICommDlgBrowser3 *iface,
         return S_OK;
     }
 
+    if((This->options & FOS_PICKFOLDERS) && !(attr & (SFGAO_FOLDER | SFGAO_LINK)))
+    {
+        IShellItem_Release(psi);
+        return S_FALSE;
+    }
+
     hr = S_OK;
     if(SUCCEEDED(IShellItem_GetDisplayName(psi, SIGDN_PARENTRELATIVEPARSING, &filename)))
     {
@@ -3116,7 +3289,7 @@ static HRESULT WINAPI IFileDialogCustomize_fnAddCheckButton(IFileDialogCustomize
     HRESULT hr;
     TRACE("%p (%d, %p, %d)\n", This, dwIDCtl, pszLabel, bChecked);
 
-    hr = cctrl_create_new(This, dwIDCtl, pszLabel, WC_BUTTONW, BS_AUTOCHECKBOX, 0,
+    hr = cctrl_create_new(This, dwIDCtl, pszLabel, WC_BUTTONW, BS_AUTOCHECKBOX|BS_MULTILINE, 0,
                           This->cctrl_def_height, &ctrl);
     if(SUCCEEDED(hr))
     {
@@ -3193,6 +3366,7 @@ static HRESULT WINAPI IFileDialogCustomize_fnSetControlLabel(IFileDialogCustomiz
     case IDLG_CCTRL_PUSHBUTTON:
     case IDLG_CCTRL_CHECKBUTTON:
     case IDLG_CCTRL_TEXT:
+    case IDLG_CCTRL_VISUALGROUP:
         SendMessageW(ctrl->hwnd, WM_SETTEXT, 0, (LPARAM)pszLabel);
         break;
     default:
@@ -3510,15 +3684,32 @@ static HRESULT WINAPI IFileDialogCustomize_fnStartVisualGroup(IFileDialogCustomi
                                                               LPCWSTR pszLabel)
 {
     FileDialogImpl *This = impl_from_IFileDialogCustomize(iface);
-    FIXME("stub - %p (%d, %s)\n", This, dwIDCtl, debugstr_w(pszLabel));
-    return E_NOTIMPL;
+    customctrl *vg;
+    HRESULT hr;
+    TRACE("%p (%d, %s)\n", This, dwIDCtl, debugstr_w(pszLabel));
+
+    if(This->cctrl_active_vg)
+        return E_UNEXPECTED;
+
+    hr = cctrl_create_new(This, dwIDCtl, pszLabel, WC_STATICW, 0, 0,
+                          This->cctrl_def_height, &vg);
+    if(SUCCEEDED(hr))
+    {
+        vg->type = IDLG_CCTRL_VISUALGROUP;
+        This->cctrl_active_vg = vg;
+    }
+
+    return hr;
 }
 
 static HRESULT WINAPI IFileDialogCustomize_fnEndVisualGroup(IFileDialogCustomize *iface)
 {
     FileDialogImpl *This = impl_from_IFileDialogCustomize(iface);
-    FIXME("stub - %p\n", This);
-    return E_NOTIMPL;
+    TRACE("%p\n", This);
+
+    This->cctrl_active_vg = NULL;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI IFileDialogCustomize_fnMakeProminent(IFileDialogCustomize *iface,
index 82a29b3..8ce44fb 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "Пътят не съществува"
     IDS_FILENOTEXISTING     "Файлът не съществува"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Съхрани"
     IDS_SAVE_AS     "Съхрани като"
     IDS_OPEN_FILE   "Отвори файл"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index abf683e..4919984 100644 (file)
@@ -34,6 +34,7 @@ El voleu reemplaçar?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "La ruta no existeix"
     IDS_FILENOTEXISTING     "El fitxer no existeix"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Desa"
     IDS_SAVE_AS     "Anomenar i Desar"
     IDS_OPEN_FILE   "Obre Fitxer"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index ab62ae4..9d22aab 100644 (file)
@@ -34,6 +34,7 @@ Chcete ho přepsat novým?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Adresář neexistuje"
     IDS_FILENOTEXISTING     "Soubor neexistuje"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Uložit"
     IDS_SAVE_AS     "Ulož pod jménem"
     IDS_OPEN_FILE   "Otevřít soubor"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index bd16523..35c0a65 100644 (file)
@@ -34,6 +34,7 @@ Vil du erstatte den?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Stien eksisterer ikke."
     IDS_FILENOTEXISTING     "Filen eksisterer ikke."
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Gem"
     IDS_SAVE_AS     "Gem som"
     IDS_OPEN_FILE   "Åben fil"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index b5a264f..504df62 100644 (file)
@@ -34,6 +34,7 @@ Wollen Sie sie überschreiben?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Der Pfad existiert nicht"
     IDS_FILENOTEXISTING     "Die Datei existiert nicht"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Speichern"
     IDS_SAVE_AS     "Speichern als"
     IDS_OPEN_FILE   "Öffne Datei"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 3098168..a0565c8 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "Το μονοπάτι δεν υπάρχει"
     IDS_FILENOTEXISTING     "Το αρχείο δεν υπάρχει"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Αποθήκευση"
     IDS_SAVE_AS     "Αποθήκευση ως"
     IDS_OPEN_FILE   "Άνοιγμα Αρχείου"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 16a8de4..5ad359f 100644 (file)
@@ -34,6 +34,7 @@ Do you want to replace it?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Path does not exist"
     IDS_FILENOTEXISTING     "File does not exist"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Save"
     IDS_SAVE_AS     "Save As"
     IDS_OPEN_FILE   "Open File"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
@@ -479,7 +481,7 @@ FONT 8, "MS Shell Dlg"
     EDITTEXT        IDC_FILENAME, 226, 240, 100, 12,  WS_CHILD | WS_VISIBLE | WS_TABSTOP
 
     LTEXT           "Files of type:", IDC_FILETYPESTATIC, 160, 256, 60, 9, SS_RIGHT
-    COMBOBOX        IDC_FILETYPE, 226, 256, 100, 12,  WS_CHILD | WS_VISIBLE | WS_TABSTOP |
+    COMBOBOX        IDC_FILETYPE, 226, 256, 100, 12,  WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL |
                     CBS_HASSTRINGS | CBS_DROPDOWNLIST
 
     DEFPUSHBUTTON   "&Open",  IDOK,     350, 240, 40, 14, WS_GROUP
index 344b6ee..494edbf 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "Vojo estas neekzistanta"
     IDS_FILENOTEXISTING     "Dosiero estas neekzistanta"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Konservu"
     IDS_SAVE_AS     "Konservu"
     IDS_OPEN_FILE   "Malfermu Dosieron"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index b8ccc20..35cb0c6 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "La ruta no existe"
     IDS_FILENOTEXISTING     "El archivo no existe"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Guardar"
     IDS_SAVE_AS     "&Guardar como"
     IDS_OPEN_FILE   "Abrir archivo"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index ae605a2..dd0a819 100644 (file)
@@ -34,6 +34,7 @@ Haluatko ylikirjoitaa sen?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Kansiota ei ole"
     IDS_FILENOTEXISTING     "Tiedostoa ei ole"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Tallenna"
     IDS_SAVE_AS     "Tallenna nimellä"
     IDS_OPEN_FILE   "Avaa tiedosto"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 6654887..037cbfe 100644 (file)
@@ -34,6 +34,7 @@ Voulez-vous le remplacer ?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Le chemin d'accès n'existe pas"
     IDS_FILENOTEXISTING     "Le fichier n'existe pas"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Enregistrer"
     IDS_SAVE_AS     "Enregistrer"
     IDS_OPEN_FILE   "Ouvrir le fichier"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index bbd11e1..70ec36b 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "הנתיב אינו קיים"
     IDS_FILENOTEXISTING     "הקובץ אינו קיים"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "שמירה"
     IDS_SAVE_AS     "שמירה בשם"
     IDS_OPEN_FILE   "פתיחת קובץ"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 6e563d5..3a63639 100644 (file)
@@ -34,6 +34,7 @@ Cseréli a fájlt?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Útvonal nem létezik"
     IDS_FILENOTEXISTING     "Fájl nem létezik"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Mentés"
     IDS_SAVE_AS     "Mentés másként"
     IDS_OPEN_FILE   "Fájl megnyitása"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index ce6b144..a4f5025 100644 (file)
@@ -34,6 +34,7 @@ Sovrascriverlo?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Il percorso specificato non esiste"
     IDS_FILENOTEXISTING     "Il file non esiste"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Salva"
     IDS_SAVE_AS     "Salva con nome"
     IDS_OPEN_FILE   "Apri file"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 8983aeb..b4753c7 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "パスが見つかりません"
     IDS_FILENOTEXISTING     "ファイルが見つかりません"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "保存"
     IDS_SAVE_AS     "名前を付けて保存"
     IDS_OPEN_FILE   "ファイルを開く"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 02887e8..729e5f8 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "경로가 존재하지 않습니다."
     IDS_FILENOTEXISTING     "파일이 존재하지 않습니다"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "저장"
     IDS_SAVE_AS     "다른 이름으로 저장"
     IDS_OPEN_FILE   "파일 열기"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 5619eb8..7ebbaf2 100644 (file)
@@ -34,6 +34,7 @@ Ar norite jį pakeisti?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Kelias neegzistuoja"
     IDS_FILENOTEXISTING     "Failas neegzistuoja"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Išsaugoti"
     IDS_SAVE_AS     "Išsaugoti kaip"
     IDS_OPEN_FILE   "Atverti failą"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 00aefbb..cea6119 100644 (file)
@@ -34,6 +34,7 @@ Wilt u het vervangen?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Het pad bestaat niet"
     IDS_FILENOTEXISTING     "Kan het bestand niet vinden"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -135,6 +136,7 @@ STRINGTABLE
     IDS_SAVE        "Opslaan"
     IDS_SAVE_AS     "&Opslaan als"
     IDS_OPEN_FILE   "Open bestand"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index b9b2944..c5cf964 100644 (file)
@@ -34,6 +34,7 @@ Skal den overskrives?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Stien finnes ikke"
     IDS_FILENOTEXISTING     "Filen finnes ikke"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Lagre"
     IDS_SAVE_AS     "Lagre som"
     IDS_OPEN_FILE   "Åpne fil"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 69b0417..3f2b854 100644 (file)
@@ -34,6 +34,7 @@ Czy chcesz go zastąpić?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Katalog nie istnieje"
     IDS_FILENOTEXISTING     "Plik nie istnieje"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Zapisz"
     IDS_SAVE_AS     "Zapisz jako"
     IDS_OPEN_FILE   "Otwórz plik"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index d49b500..a62341b 100644 (file)
@@ -34,6 +34,7 @@ Gostaria de o substituir?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "A localização não existe"
     IDS_FILENOTEXISTING     "O ficheiro não existe"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Gravar"
     IDS_SAVE_AS     "Gravar Como"
     IDS_OPEN_FILE   "Abrir Ficheiro"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 420a717..c32ecbe 100644 (file)
@@ -36,6 +36,7 @@ Doriți să îl suprascrieți?"
                           / : < > |"
     IDS_PATHNOTEXISTING         "Calea nu există"
     IDS_FILENOTEXISTING         "Fișierul nu există"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -138,6 +139,7 @@ STRINGTABLE
     IDS_SAVE        "Păstrare"
     IDS_SAVE_AS     "Păstrare în:"
     IDS_OPEN_FILE   "Deschidere fișier"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index ec39951..e0bf19d 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "Путь не существует"
     IDS_FILENOTEXISTING     "Файл не существует"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Сохранить"
     IDS_SAVE_AS     "Сохранить как"
     IDS_OPEN_FILE   "Открыть файл"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 8e3697b..e7f64b1 100644 (file)
@@ -34,6 +34,7 @@ Ali jo želite zamenjati?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Pot ne obstaja"
     IDS_FILENOTEXISTING     "Datoteka ne obstaja"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Shrani"
     IDS_SAVE_AS     "Shrani kot"
     IDS_OPEN_FILE   "Odpri datoteko"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 73fb734..caea8cb 100644 (file)
@@ -34,6 +34,7 @@ Do you want to replace it?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Cesta neexistuje"
     IDS_FILENOTEXISTING     "Súbor neexistuje"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Uložiť"
     IDS_SAVE_AS     "Uložiť ako"
     IDS_OPEN_FILE   "Otvoriť súbor"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 94af28d..76cae21 100644 (file)
@@ -38,6 +38,7 @@ Doni ta zevendesoni?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Rruga nuk ekziston"
     IDS_FILENOTEXISTING     "Dokumenti nuk ekziston"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -69,6 +70,7 @@ Ju lutem fusni nje vlere mes 1 dhe %d."
     PD32_GENERIC_ERROR                    "Nje error."
     PD32_DRIVER_UNKNOWN                   "Driveri i printerir i panjohur."
     PD32_NO_DEVICES                       "Para se te besh nje detyre ne lidhje me printerin si konfigurimi i faqes ose printimi i dokumentit, duhet te instaloni nje printer. Ju lutem instaloni nje dhe provoni perseri."
+
     PD32_DEFAULT_PRINTER                  "Printeri i perzgjedhur; "
     PD32_NR_OF_DOCUMENTS_IN_QUEUE         "Dokumentet %d jane ne rradhe/pritje"
     PD32_MARGINS_IN_INCHES                "Diferenca [inches]"
@@ -139,6 +141,7 @@ STRINGTABLE
     IDS_SAVE        "Ruaj"
     IDS_SAVE_AS     "Ruaj si "
     IDS_OPEN_FILE   "Hap"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
@@ -370,6 +373,7 @@ FONT 8, "MS Shell Dlg"
     ICON            "",               ico3, 170,131,  76,24, WS_GROUP | SS_CENTERIMAGE
     CONTROL         "Mbledh",       chx2,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,168,118,100,12
     EDITTEXT                          edt3, 240,103,  32,12, WS_GROUP | ES_NUMBER
+
     GROUPBOX        "Printo gamen",    grp1,   8,92,  144,64, WS_GROUP
     CONTROL         "Te gjith",           rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,106,64,12
     CONTROL         "Faqet",         rad3,"Button",BS_AUTORADIOBUTTON,16,122,36,12
index 3cfee02..4353149 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "Putanja ne postoji"
     IDS_FILENOTEXISTING     "Datoteka ne postoji"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Sačuvaj"
     IDS_SAVE_AS     "Sačuvaj kao"
     IDS_OPEN_FILE   "Otvori datoteku"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 8ed0ecc..cbeac4c 100644 (file)
@@ -34,6 +34,7 @@ Vill du ersätta den?"
                                                / : < > |"
     IDS_PATHNOTEXISTING     "Sökvägen finns inte"
     IDS_FILENOTEXISTING     "Filen finns inte"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -135,6 +136,7 @@ STRINGTABLE
     IDS_SAVE        "Spara"
     IDS_SAVE_AS     "Spara som"
     IDS_OPEN_FILE   "Öppna fil"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 923aebd..dabc6d5 100644 (file)
@@ -34,6 +34,7 @@ Do you want to replace it?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "ไม่พบไดเรกทอรี"
     IDS_FILENOTEXISTING     "ไม่พบแฟ้ม"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -135,6 +136,7 @@ STRINGTABLE
     IDS_SAVE        "Save"
     IDS_SAVE_AS     "บันทืก"
     IDS_OPEN_FILE   "แฟ้ม"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index fb89dad..9f1ae77 100644 (file)
@@ -33,6 +33,7 @@ Onu değiştirmek ister misiniz?"
                           / : < > |"
     IDS_PATHNOTEXISTING     "Kütük yolu yok."
     IDS_FILENOTEXISTING     "Kütük yok."
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -135,6 +136,7 @@ STRINGTABLE
     IDS_SAVE        "Sakla"
     IDS_SAVE_AS     "Ayrı Sakla"
     IDS_OPEN_FILE   "Kütük Aç"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 42edb34..369b8e3 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "資料夾不存在"
     IDS_FILENOTEXISTING     "檔案不存在"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Save"
     IDS_SAVE_AS     "另存新檔"
     IDS_OPEN_FILE   "Open File"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 551974e..13b0dd3 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "Шлях не існує"
     IDS_FILENOTEXISTING     "Файл не існує"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "Зберегти"
     IDS_SAVE_AS     "Зберегти як"
     IDS_OPEN_FILE   "Відкрити файл"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index a951159..cd22b38 100644 (file)
@@ -34,6 +34,7 @@ STRINGTABLE
                           / : < > |"
     IDS_PATHNOTEXISTING     "路径不存在"
     IDS_FILENOTEXISTING     "文件不存在"
+    IDS_INVALID_FOLDERNAME  "The selection contains a non-folder object"
 }
 
 STRINGTABLE
@@ -136,6 +137,7 @@ STRINGTABLE
     IDS_SAVE        "保存"
     IDS_SAVE_AS     "另存为"
     IDS_OPEN_FILE   "打开文件"
+    IDS_SELECT_FOLDER "Select Folder"
 }
 
 /*
index 4d13e43..80c04b1 100644 (file)
 #define IDC_COLOR_GL     727
 #define IDC_COLOR_BL     728
 
-#define IDS_FONT_SIZE    1200
-#define IDS_SAVE_BUTTON  1201
-#define IDS_SAVE_IN      1202
-#define IDS_SAVE         1203
-#define IDS_SAVE_AS      1204
-#define IDS_OPEN_FILE    1205
+#define IDS_FONT_SIZE     1200
+#define IDS_SAVE_BUTTON   1201
+#define IDS_SAVE_IN       1202
+#define IDS_SAVE          1203
+#define IDS_SAVE_AS       1204
+#define IDS_OPEN_FILE     1205
+#define IDS_SELECT_FOLDER 1206
 
 #define IDS_FAKEDOCTEXT  1300
index 8e49275..cceb096 100644 (file)
@@ -61,7 +61,7 @@ reactos/dll/win32/cabinet             # Synced to Wine-1.7.17
 reactos/dll/win32/clusapi             # Synced to Wine-1.7.17
 reactos/dll/win32/comcat              # Synced to Wine-1.7.17
 reactos/dll/win32/comctl32            # Synced to Wine-1.7.27
-reactos/dll/win32/comdlg32            # Synced to Wine-1.7.17
+reactos/dll/win32/comdlg32            # Synced to Wine-1.7.27
 reactos/dll/win32/compstui            # Synced to Wine-1.7.17
 reactos/dll/win32/credui              # Synced to Wine-1.7.17
 reactos/dll/win32/crypt32             # Synced to Wine-1.7.17