From fb7a38a131e8cf00ac2d95a785b484e6795b5c06 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 27 Sep 2014 10:16:40 +0000 Subject: [PATCH] [COMDLG32] * Sync with Wine 1.7.27. * Translators, you're up ;) CORE-8540 svn path=/trunk/; revision=64325 --- reactos/dll/win32/comdlg32/filedlg.c | 2 +- reactos/dll/win32/comdlg32/filedlgbrowser.h | 1 + reactos/dll/win32/comdlg32/itemdlg.c | 301 ++++++++++++++++---- reactos/dll/win32/comdlg32/lang/cdlg_Bg.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Ca.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Cs.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Da.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_De.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_El.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_En.rc | 4 +- reactos/dll/win32/comdlg32/lang/cdlg_Eo.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Es.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Fi.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Fr.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_He.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Hu.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_It.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Ja.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Ko.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Lt.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Nl.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_No.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Pl.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Pt.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Ro.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Ru.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Si.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Sk.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Sq.rc | 4 + reactos/dll/win32/comdlg32/lang/cdlg_Sr.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Sv.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Th.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Tr.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Tw.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Uk.rc | 2 + reactos/dll/win32/comdlg32/lang/cdlg_Zh.rc | 2 + reactos/dll/win32/comdlg32/resource.h | 13 +- reactos/media/doc/README.WINE | 2 +- 38 files changed, 325 insertions(+), 64 deletions(-) diff --git a/reactos/dll/win32/comdlg32/filedlg.c b/reactos/dll/win32/comdlg32/filedlg.c index 3fa42552684..7c0ae147d93 100644 --- a/reactos/dll/win32/comdlg32/filedlg.c +++ b/reactos/dll/win32/comdlg32/filedlg.c @@ -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) && diff --git a/reactos/dll/win32/comdlg32/filedlgbrowser.h b/reactos/dll/win32/comdlg32/filedlgbrowser.h index 04d961ddebb..0ea0fd87ed5 100644 --- a/reactos/dll/win32/comdlg32/filedlgbrowser.h +++ b/reactos/dll/win32/comdlg32/filedlgbrowser.h @@ -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 */ diff --git a/reactos/dll/win32/comdlg32/itemdlg.c b/reactos/dll/win32/comdlg32/itemdlg.c index 72c3dfe2925..1b566086b66 100644 --- a/reactos/dll/win32/comdlg32/itemdlg.c +++ b/reactos/dll/win32/comdlg32/itemdlg.c @@ -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, diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Bg.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Bg.rc index 82a29b38d27..8ce44fb48d2 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Bg.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Bg.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Ca.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Ca.rc index abf683e6377..49199847e9a 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Ca.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Ca.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Cs.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Cs.rc index ab62ae47945..9d22aab7343 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Cs.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Cs.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Da.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Da.rc index bd16523dd0a..35c0a65992c 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Da.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Da.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_De.rc b/reactos/dll/win32/comdlg32/lang/cdlg_De.rc index b5a264f03c8..504df624f6e 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_De.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_De.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_El.rc b/reactos/dll/win32/comdlg32/lang/cdlg_El.rc index 3098168f79c..a0565c88ee2 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_El.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_El.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_En.rc b/reactos/dll/win32/comdlg32/lang/cdlg_En.rc index 16a8de420a3..5ad359fc8fb 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_En.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_En.rc @@ -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 diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Eo.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Eo.rc index 344b6ee0356..494edbffd31 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Eo.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Eo.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Es.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Es.rc index b8ccc204f54..35cb0c6b7b1 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Es.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Es.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Fi.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Fi.rc index ae605a2092b..dd0a8199ee0 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Fi.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Fi.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Fr.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Fr.rc index 66548875475..037cbfebff6 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Fr.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Fr.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_He.rc b/reactos/dll/win32/comdlg32/lang/cdlg_He.rc index bbd11e14603..70ec36b47a7 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_He.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_He.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Hu.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Hu.rc index 6e563d5338a..3a636392c6e 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Hu.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Hu.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_It.rc b/reactos/dll/win32/comdlg32/lang/cdlg_It.rc index ce6b144b7f4..a4f5025c091 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_It.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_It.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Ja.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Ja.rc index 8983aeb73e9..b4753c714bf 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Ja.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Ja.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Ko.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Ko.rc index 02887e8a8df..729e5f81ff3 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Ko.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Ko.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Lt.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Lt.rc index 5619eb8d4f8..7ebbaf20b36 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Lt.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Lt.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Nl.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Nl.rc index 00aefbbbc60..cea6119d5b4 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Nl.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Nl.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_No.rc b/reactos/dll/win32/comdlg32/lang/cdlg_No.rc index b9b29442838..c5cf96425a1 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_No.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_No.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Pl.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Pl.rc index 69b0417c6e2..3f2b85470d3 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Pl.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Pl.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Pt.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Pt.rc index d49b500cad3..a62341b159d 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Pt.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Pt.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Ro.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Ro.rc index 420a717ce88..c32ecbe365b 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Ro.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Ro.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Ru.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Ru.rc index ec399515a03..e0bf19d5e37 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Ru.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Ru.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Si.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Si.rc index 8e3697ba119..e7f64b1192f 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Si.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Si.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Sk.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Sk.rc index 73fb7341c6f..caea8cb7cdd 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Sk.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Sk.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Sq.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Sq.rc index 94af28deb1d..76cae21c9f3 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Sq.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Sq.rc @@ -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 diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Sr.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Sr.rc index 3cfee02b267..43531496e36 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Sr.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Sr.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Sv.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Sv.rc index 8ed0ecc625d..cbeac4caeeb 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Sv.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Sv.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Th.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Th.rc index 923aebdfb2b..dabc6d50a09 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Th.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Th.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Tr.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Tr.rc index fb89dad538f..9f1ae77f124 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Tr.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Tr.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Tw.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Tw.rc index 42edb34dfef..369b8e38633 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Tw.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Tw.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Uk.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Uk.rc index 551974e1998..13b0dd38899 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Uk.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Uk.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/lang/cdlg_Zh.rc b/reactos/dll/win32/comdlg32/lang/cdlg_Zh.rc index a9511595e74..cd22b3818b9 100644 --- a/reactos/dll/win32/comdlg32/lang/cdlg_Zh.rc +++ b/reactos/dll/win32/comdlg32/lang/cdlg_Zh.rc @@ -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" } /* diff --git a/reactos/dll/win32/comdlg32/resource.h b/reactos/dll/win32/comdlg32/resource.h index 4d13e43f12a..80c04b17c38 100644 --- a/reactos/dll/win32/comdlg32/resource.h +++ b/reactos/dll/win32/comdlg32/resource.h @@ -126,11 +126,12 @@ #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 diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index 8e49275ef40..cceb09678e0 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -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