diff --git a/reactos/dll/win32/shell32_new/GlueCode.cpp b/reactos/dll/win32/shell32_new/GlueCode.cpp new file mode 100644 index 00000000000..055ca4775af --- /dev/null +++ b/reactos/dll/win32/shell32_new/GlueCode.cpp @@ -0,0 +1,336 @@ + +LONG WINAPI RegCopyTreeX(HKEY, LPCWSTR, HKEY) +{ + DebugBreak(); + return 0; +} + +static int load_string(HINSTANCE hModule, UINT resId, LPWSTR pwszBuffer, INT cMaxChars) +{ + HGLOBAL hMemory; + HRSRC hResource; + WCHAR *pString; + int idxString; + + /* Negative values have to be inverted. */ + if (HIWORD(resId) == 0xffff) + resId = (UINT)(-((INT)resId)); + + /* Load the resource into memory and get a pointer to it. */ + hResource = FindResourceW(hModule, MAKEINTRESOURCEW(LOWORD(resId >> 4) + 1), (LPWSTR)RT_STRING); + if (!hResource) return 0; + hMemory = LoadResource(hModule, hResource); + if (!hMemory) return 0; + pString = (WCHAR *)LockResource(hMemory); + + /* Strings are length-prefixed. Lowest nibble of resId is an index. */ + idxString = resId & 0xf; + while (idxString--) pString += *pString + 1; + + /* If no buffer is given, return length of the string. */ + if (!pwszBuffer) return *pString; + + /* Else copy over the string, respecting the buffer size. */ + cMaxChars = (*pString < cMaxChars) ? *pString : (cMaxChars - 1); + if (cMaxChars >= 0) + { + memcpy(pwszBuffer, pString+1, cMaxChars * sizeof(WCHAR)); + pwszBuffer[cMaxChars] = L'\0'; + } + + return cMaxChars; +} + +LONG WINAPI +RegLoadMUIStringWX(IN HKEY hKey, + IN LPCWSTR pszValue OPTIONAL, + OUT LPWSTR pszOutBuf, + IN DWORD cbOutBuf, + OUT LPDWORD pcbData OPTIONAL, + IN DWORD Flags, + IN LPCWSTR pszDirectory OPTIONAL) +{ + DWORD dwValueType, cbData; + LPWSTR pwszTempBuffer = NULL, pwszExpandedBuffer = NULL; + LONG result; + + /* Parameter sanity checks. */ + if (!hKey || !pszOutBuf) + return ERROR_INVALID_PARAMETER; + + if (pszDirectory && *pszDirectory) + { + return ERROR_INVALID_PARAMETER; + } + + /* Check for value existence and correctness of it's type, allocate a buffer and load it. */ + result = RegQueryValueExW(hKey, pszValue, NULL, &dwValueType, NULL, &cbData); + if (result != ERROR_SUCCESS) goto cleanup; + if (!(dwValueType == REG_SZ || dwValueType == REG_EXPAND_SZ) || !cbData) + { + result = ERROR_FILE_NOT_FOUND; + goto cleanup; + } + pwszTempBuffer = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, cbData); + if (!pwszTempBuffer) + { + result = ERROR_NOT_ENOUGH_MEMORY; + goto cleanup; + } + result = RegQueryValueExW(hKey, pszValue, NULL, &dwValueType, (LPBYTE)pwszTempBuffer, &cbData); + if (result != ERROR_SUCCESS) goto cleanup; + + /* Expand environment variables, if appropriate, or copy the original string over. */ + if (dwValueType == REG_EXPAND_SZ) + { + cbData = ExpandEnvironmentStringsW(pwszTempBuffer, NULL, 0) * sizeof(WCHAR); + if (!cbData) goto cleanup; + pwszExpandedBuffer = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, cbData); + if (!pwszExpandedBuffer) + { + result = ERROR_NOT_ENOUGH_MEMORY; + goto cleanup; + } + ExpandEnvironmentStringsW(pwszTempBuffer, pwszExpandedBuffer, cbData); + } + else + { + pwszExpandedBuffer = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, cbData); + memcpy(pwszExpandedBuffer, pwszTempBuffer, cbData); + } + + /* If the value references a resource based string, parse the value and load the string. + * Else just copy over the original value. */ + result = ERROR_SUCCESS; + if (*pwszExpandedBuffer != L'@') /* '@' is the prefix for resource based string entries. */ + { + lstrcpynW(pszOutBuf, pwszExpandedBuffer, cbOutBuf / sizeof(WCHAR)); + } + else + { + WCHAR *pComma = wcsrchr(pwszExpandedBuffer, L','); + UINT uiStringId; + HMODULE hModule; + + /* Format of the expanded value is 'path_to_dll,-resId' */ + if (!pComma || pComma[1] != L'-') + { + result = ERROR_BADKEY; + goto cleanup; + } + + uiStringId = _wtoi(pComma+2); + *pComma = L'\0'; + + hModule = LoadLibraryExW(pwszExpandedBuffer + 1, NULL, LOAD_LIBRARY_AS_DATAFILE); + if (!hModule || !load_string(hModule, uiStringId, pszOutBuf, cbOutBuf / sizeof(WCHAR))) + result = ERROR_BADKEY; + FreeLibrary(hModule); + } + +cleanup: + HeapFree(GetProcessHeap(), 0, pwszTempBuffer); + HeapFree(GetProcessHeap(), 0, pwszExpandedBuffer); + return result; +} + +#if 0 +VOID WINAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString); +#else +typedef VOID (WINAPI *PRtlFreeUnicodeString)(PUNICODE_STRING UnicodeString); +static VOID WINAPI +RtlFreeUnicodeStringx(PUNICODE_STRING UnicodeString) +{ + static PRtlFreeUnicodeString Func = NULL; + + if (Func == NULL) + { + HMODULE hShlwapi; + hShlwapi = LoadLibrary(TEXT("ntdll.DLL")); + if (hShlwapi != NULL) + { + Func = (PRtlFreeUnicodeString)GetProcAddress(hShlwapi, "RtlFreeUnicodeString"); + } + } + + if (Func != NULL) + { + Func(UnicodeString); + return; + } + + MessageBox(NULL, TEXT("RtlFreeUnicodeString not available"), NULL, 0); +} +#endif + +LONG WINAPI +RegLoadMUIStringAX(IN HKEY hKey, + IN LPCSTR pszValue OPTIONAL, + OUT LPSTR pszOutBuf, + IN DWORD cbOutBuf, + OUT LPDWORD pcbData OPTIONAL, + IN DWORD Flags, + IN LPCSTR pszDirectory OPTIONAL) +{ + UNICODE_STRING valueW, baseDirW; + WCHAR *pwszBuffer; + DWORD cbData = cbOutBuf * sizeof(WCHAR); + LONG result; + + valueW.Buffer = baseDirW.Buffer = pwszBuffer = NULL; + if (!RtlCreateUnicodeStringFromAsciiz(&valueW, pszValue) || + !RtlCreateUnicodeStringFromAsciiz(&baseDirW, pszDirectory) || + !(pwszBuffer = (WCHAR *)HeapAlloc(GetProcessHeap(), 0, cbData))) + { + result = ERROR_NOT_ENOUGH_MEMORY; + goto cleanup; + } + + result = RegLoadMUIStringWX(hKey, valueW.Buffer, pwszBuffer, cbData, NULL, Flags, + baseDirW.Buffer); + + if (result == ERROR_SUCCESS) + { + cbData = WideCharToMultiByte(CP_ACP, 0, pwszBuffer, -1, pszOutBuf, cbOutBuf, NULL, NULL); + if (pcbData) + *pcbData = cbData; + } + +cleanup: + HeapFree(GetProcessHeap(), 0, pwszBuffer); + RtlFreeUnicodeStringx(&baseDirW); + RtlFreeUnicodeStringx(&valueW); + + return result; +} + +static VOID +RegpApplyRestrictions(DWORD dwFlags, + DWORD dwType, + DWORD cbData, + PLONG ret) +{ + /* Check if the type is restricted by the passed flags */ + if (*ret == ERROR_SUCCESS || *ret == ERROR_MORE_DATA) + { + DWORD dwMask = 0; + + switch (dwType) + { + case REG_NONE: dwMask = RRF_RT_REG_NONE; break; + case REG_SZ: dwMask = RRF_RT_REG_SZ; break; + case REG_EXPAND_SZ: dwMask = RRF_RT_REG_EXPAND_SZ; break; + case REG_MULTI_SZ: dwMask = RRF_RT_REG_MULTI_SZ; break; + case REG_BINARY: dwMask = RRF_RT_REG_BINARY; break; + case REG_DWORD: dwMask = RRF_RT_REG_DWORD; break; + case REG_QWORD: dwMask = RRF_RT_REG_QWORD; break; + } + + if (dwFlags & dwMask) + { + /* Type is not restricted, check for size mismatch */ + if (dwType == REG_BINARY) + { + DWORD cbExpect = 0; + + if ((dwFlags & RRF_RT_DWORD) == RRF_RT_DWORD) + cbExpect = 4; + else if ((dwFlags & RRF_RT_QWORD) == RRF_RT_QWORD) + cbExpect = 8; + + if (cbExpect && cbData != cbExpect) + *ret = ERROR_DATATYPE_MISMATCH; + } + } + else *ret = ERROR_UNSUPPORTED_TYPE; + } +} + +LONG WINAPI RegGetValueX(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData) +{ + DWORD dwType, cbData = pcbData ? *pcbData : 0; + PVOID pvBuf = NULL; + LONG ret; + + if (pvData && !pcbData) + return ERROR_INVALID_PARAMETER; + if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND) && + ((dwFlags & RRF_RT_ANY) != RRF_RT_ANY)) + return ERROR_INVALID_PARAMETER; + + if (pszSubKey && pszSubKey[0]) + { + ret = RegOpenKeyExW(hKey, pszSubKey, 0, KEY_QUERY_VALUE, &hKey); + if (ret != ERROR_SUCCESS) return ret; + } + + ret = RegQueryValueExW(hKey, pszValue, NULL, &dwType, (LPBYTE)pvData, &cbData); + + /* If we are going to expand we need to read in the whole the value even + * if the passed buffer was too small as the expanded string might be + * smaller than the unexpanded one and could fit into cbData bytes. */ + if ((ret == ERROR_SUCCESS || ret == ERROR_MORE_DATA) && + dwType == REG_EXPAND_SZ && !(dwFlags & RRF_NOEXPAND)) + { + do + { + HeapFree(GetProcessHeap(), 0, pvBuf); + + pvBuf = HeapAlloc(GetProcessHeap(), 0, cbData); + if (!pvBuf) + { + ret = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + if (ret == ERROR_MORE_DATA || !pvData) + ret = RegQueryValueExW(hKey, pszValue, NULL, + &dwType, (LPBYTE)pvBuf, &cbData); + else + { + /* Even if cbData was large enough we have to copy the + * string since ExpandEnvironmentStrings can't handle + * overlapping buffers. */ + CopyMemory(pvBuf, pvData, cbData); + } + + /* Both the type or the value itself could have been modified in + * between so we have to keep retrying until the buffer is large + * enough or we no longer have to expand the value. */ + } + while (dwType == REG_EXPAND_SZ && ret == ERROR_MORE_DATA); + + if (ret == ERROR_SUCCESS) + { + /* Recheck dwType in case it changed since the first call */ + if (dwType == REG_EXPAND_SZ) + { + cbData = ExpandEnvironmentStringsW((LPCWSTR)pvBuf, (LPWSTR)pvData, + pcbData ? *pcbData : 0) * sizeof(WCHAR); + dwType = REG_SZ; + if (pvData && pcbData && cbData > *pcbData) + ret = ERROR_MORE_DATA; + } + else if (pvData) + CopyMemory(pvData, pvBuf, *pcbData); + } + + HeapFree(GetProcessHeap(), 0, pvBuf); + } + + if (pszSubKey && pszSubKey[0]) + RegCloseKey(hKey); + + RegpApplyRestrictions(dwFlags, dwType, cbData, &ret); + + if (pvData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE)) + ZeroMemory(pvData, *pcbData); + + if (pdwType) + *pdwType = dwType; + + if (pcbData) + *pcbData = cbData; + + return ret; +} diff --git a/reactos/dll/win32/shell32_new/GlueCode.h b/reactos/dll/win32/shell32_new/GlueCode.h new file mode 100644 index 00000000000..4803de2cd08 --- /dev/null +++ b/reactos/dll/win32/shell32_new/GlueCode.h @@ -0,0 +1,11 @@ + +#ifndef _GLUE_CODE_H_ +#define _GLUE_CODE_H_ + +LONG WINAPI RegCopyTreeX(HKEY, LPCWSTR, HKEY); +LONG WINAPI RegGetValueX(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData); +LONG WINAPI RegLoadMUIStringWX(IN HKEY hKey, IN LPCWSTR pszValue OPTIONAL, OUT LPWSTR pszOutBuf, IN DWORD cbOutBuf, OUT LPDWORD pcbData OPTIONAL, IN DWORD Flags, IN LPCWSTR pszDirectory OPTIONAL); +LONG WINAPI RegLoadMUIStringAX(IN HKEY hKey, IN LPCSTR pszValue OPTIONAL, OUT LPSTR pszOutBuf, IN DWORD cbOutBuf, OUT LPDWORD pcbData OPTIONAL, IN DWORD Flags, IN LPCSTR pszDirectory OPTIONAL); + +#endif + diff --git a/reactos/dll/win32/shell32_new/authors.cpp b/reactos/dll/win32/shell32_new/authors.cpp new file mode 100644 index 00000000000..adf252d56c9 --- /dev/null +++ b/reactos/dll/win32/shell32_new/authors.cpp @@ -0,0 +1,2 @@ + +const char * const SHELL_Authors[] = { "Copyright 1993-2009 WINE team", "Copyright 1998-2011 ReactOS Team", 0 }; diff --git a/reactos/dll/win32/shell32_new/autocomplete.cpp b/reactos/dll/win32/shell32_new/autocomplete.cpp new file mode 100644 index 00000000000..da141540441 --- /dev/null +++ b/reactos/dll/win32/shell32_new/autocomplete.cpp @@ -0,0 +1,400 @@ +/* + * AutoComplete interfaces implementation. + * + * Copyright 2004 Maxime Bellengé + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* + Implemented: + - ACO_AUTOAPPEND style + - ACO_AUTOSUGGEST style + - ACO_UPDOWNKEYDROPSLIST style + + - Handle pwzsRegKeyPath and pwszQuickComplete in Init + + TODO: + - implement ACO_SEARCH style + - implement ACO_FILTERPREFIXES style + - implement ACO_USETAB style + - implement ACO_RTLREADING style + + */ + +#include +#include +#include +#include +#include +#include "autocomplete.h" + + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/************************************************************************** + * IAutoComplete_Constructor + */ +CAutoComplete::CAutoComplete() +{ + enabled = TRUE; + options = ACO_AUTOAPPEND; + wpOrigEditProc = NULL; + hwndListBox = NULL; + txtbackup = NULL; + quickComplete = NULL; +} + +/************************************************************************** + * IAutoComplete_Destructor + */ +CAutoComplete::~CAutoComplete() +{ + TRACE(" destroying IAutoComplete(%p)\n", this); + HeapFree(GetProcessHeap(), 0, quickComplete); + HeapFree(GetProcessHeap(), 0, txtbackup); + if (hwndListBox) + DestroyWindow(hwndListBox); +} + +/****************************************************************************** + * IAutoComplete_fnEnable + */ +HRESULT WINAPI CAutoComplete::Enable(BOOL fEnable) +{ + HRESULT hr = S_OK; + + TRACE("(%p)->(%s)\n", this, (fEnable) ? "true" : "false"); + + enabled = fEnable; + + return hr; +} + +/****************************************************************************** + * IAutoComplete_fnInit + */ +HRESULT WINAPI CAutoComplete::Init(HWND hwndEdit, IUnknown *punkACL, LPCOLESTR pwzsRegKeyPath, LPCOLESTR pwszQuickComplete) +{ + static const WCHAR lbName[] = {'L','i','s','t','B','o','x',0}; + + TRACE("(%p)->(0x%08lx, %p, %s, %s)\n", + this, hwndEdit, punkACL, debugstr_w(pwzsRegKeyPath), debugstr_w(pwszQuickComplete)); + + if (options & ACO_AUTOSUGGEST) TRACE(" ACO_AUTOSUGGEST\n"); + if (options & ACO_AUTOAPPEND) TRACE(" ACO_AUTOAPPEND\n"); + if (options & ACO_SEARCH) FIXME(" ACO_SEARCH not supported\n"); + if (options & ACO_FILTERPREFIXES) FIXME(" ACO_FILTERPREFIXES not supported\n"); + if (options & ACO_USETAB) FIXME(" ACO_USETAB not supported\n"); + if (options & ACO_UPDOWNKEYDROPSLIST) TRACE(" ACO_UPDOWNKEYDROPSLIST\n"); + if (options & ACO_RTLREADING) FIXME(" ACO_RTLREADING not supported\n"); + + hwndEdit = hwndEdit; + + if (!SUCCEEDED (punkACL->QueryInterface(IID_IEnumString, (LPVOID *)&enumstr))) { + TRACE("No IEnumString interface\n"); + return E_NOINTERFACE; + } + + wpOrigEditProc = (WNDPROC)SetWindowLongPtrW(hwndEdit, GWLP_WNDPROC, (LONG_PTR) ACEditSubclassProc); + SetWindowLongPtrW(hwndEdit, GWLP_USERDATA, (LONG_PTR)this); + + if (options & ACO_AUTOSUGGEST) { + HWND hwndParent; + + hwndParent = GetParent(hwndEdit); + + /* FIXME : The listbox should be resizable with the mouse. WS_THICKFRAME looks ugly */ + hwndListBox = CreateWindowExW(0, lbName, NULL, + WS_BORDER | WS_CHILD | WS_VSCROLL | LBS_HASSTRINGS | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + hwndParent, NULL, + (HINSTANCE)GetWindowLongPtrW(hwndParent, GWLP_HINSTANCE), NULL); + + if (hwndListBox) { + wpOrigLBoxProc = (WNDPROC)SetWindowLongPtrW(hwndListBox, GWLP_WNDPROC, (LONG_PTR)ACLBoxSubclassProc); + SetWindowLongPtrW(hwndListBox, GWLP_USERDATA, (LONG_PTR)this); + } + } + + if (pwzsRegKeyPath) { + WCHAR *key; + WCHAR result[MAX_PATH]; + WCHAR *value; + HKEY hKey = 0; + LONG res; + LONG len; + + /* pwszRegKeyPath contains the key as well as the value, so we split */ + key = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (wcslen(pwzsRegKeyPath) + 1) * sizeof(WCHAR)); + wcscpy(key, pwzsRegKeyPath); + value = const_cast(strrchrW(key, '\\')); + *value = 0; + value++; + /* Now value contains the value and buffer the key */ + res = RegOpenKeyExW(HKEY_CURRENT_USER, key, 0, KEY_READ, &hKey); + if (res != ERROR_SUCCESS) { + /* if the key is not found, MSDN states we must seek in HKEY_LOCAL_MACHINE */ + res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &hKey); + } + if (res == ERROR_SUCCESS) { + res = RegQueryValueW(hKey, value, result, &len); + if (res == ERROR_SUCCESS) { + quickComplete = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR)); + wcscpy(quickComplete, result); + } + RegCloseKey(hKey); + } + HeapFree(GetProcessHeap(), 0, key); + } + + if ((pwszQuickComplete) && (!quickComplete)) { + quickComplete = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (wcslen(pwszQuickComplete) + 1) * sizeof(WCHAR)); + wcscpy(quickComplete, pwszQuickComplete); + } + + return S_OK; +} + +/************************************************************************** + * IAutoComplete_fnGetOptions + */ +HRESULT WINAPI CAutoComplete::GetOptions(DWORD *pdwFlag) +{ + HRESULT hr = S_OK; + + TRACE("(%p) -> (%p)\n", this, pdwFlag); + + *pdwFlag = options; + + return hr; +} + +/************************************************************************** + * IAutoComplete_fnSetOptions + */ +HRESULT WINAPI CAutoComplete::SetOptions(DWORD dwFlag) +{ + HRESULT hr = S_OK; + + TRACE("(%p) -> (0x%x)\n", this, dwFlag); + + options = (AUTOCOMPLETEOPTIONS)dwFlag; + + return hr; +} + +/* + Window procedure for autocompletion + */ +LRESULT APIENTRY CAutoComplete::ACEditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + CAutoComplete *pThis = (CAutoComplete *)GetWindowLongPtrW(hwnd, GWLP_USERDATA); + LPOLESTR strs; + HRESULT hr; + WCHAR hwndText[255]; + WCHAR *hwndQCText; + RECT r; + BOOL control, filled, displayall = FALSE; + int cpt, height, sel; + + if (!pThis->enabled) return CallWindowProcW(pThis->wpOrigEditProc, hwnd, uMsg, wParam, lParam); + + switch (uMsg) + { + case CB_SHOWDROPDOWN: + ShowWindow(pThis->hwndListBox, SW_HIDE); + break; + case WM_KILLFOCUS: + if ((pThis->options & ACO_AUTOSUGGEST) && + ((HWND)wParam != pThis->hwndListBox)) + { + ShowWindow(pThis->hwndListBox, SW_HIDE); + } + break; + case WM_KEYUP: + + GetWindowTextW(hwnd, (LPWSTR)hwndText, 255); + + switch(wParam) { + case VK_RETURN: + /* If quickComplete is set and control is pressed, replace the string */ + control = GetKeyState(VK_CONTROL) & 0x8000; + if (control && pThis->quickComplete) { + hwndQCText = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + (wcslen(pThis->quickComplete)+wcslen(hwndText))*sizeof(WCHAR)); + sel = swprintf(hwndQCText, pThis->quickComplete, hwndText); + SendMessageW(hwnd, WM_SETTEXT, 0, (LPARAM)hwndQCText); + SendMessageW(hwnd, EM_SETSEL, 0, sel); + HeapFree(GetProcessHeap(), 0, hwndQCText); + } + + ShowWindow(pThis->hwndListBox, SW_HIDE); + return 0; + case VK_LEFT: + case VK_RIGHT: + return 0; + case VK_UP: + case VK_DOWN: + /* Two cases here : + - if the listbox is not visible, displays it + with all the entries if the style ACO_UPDOWNKEYDROPSLIST + is present but does not select anything. + - if the listbox is visible, change the selection + */ + if ( (pThis->options & (ACO_AUTOSUGGEST | ACO_UPDOWNKEYDROPSLIST)) + && (!IsWindowVisible(pThis->hwndListBox) && (! *hwndText)) ) + { + /* We must display all the entries */ + displayall = TRUE; + } else { + if (IsWindowVisible(pThis->hwndListBox)) { + int count; + + count = SendMessageW(pThis->hwndListBox, LB_GETCOUNT, 0, 0); + /* Change the selection */ + sel = SendMessageW(pThis->hwndListBox, LB_GETCURSEL, 0, 0); + if (wParam == VK_UP) + sel = ((sel-1)<0)?count-1:sel-1; + else + sel = ((sel+1)>= count)?-1:sel+1; + SendMessageW(pThis->hwndListBox, LB_SETCURSEL, sel, 0); + if (sel != -1) { + WCHAR *msg; + int len; + + len = SendMessageW(pThis->hwndListBox, LB_GETTEXTLEN, sel, (LPARAM)NULL); + msg = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (len + 1) * sizeof(WCHAR)); + SendMessageW(pThis->hwndListBox, LB_GETTEXT, sel, (LPARAM)msg); + SendMessageW(hwnd, WM_SETTEXT, 0, (LPARAM)msg); + SendMessageW(hwnd, EM_SETSEL, wcslen(msg), wcslen(msg)); + HeapFree(GetProcessHeap(), 0, msg); + } else { + SendMessageW(hwnd, WM_SETTEXT, 0, (LPARAM)pThis->txtbackup); + SendMessageW(hwnd, EM_SETSEL, wcslen(pThis->txtbackup), wcslen(pThis->txtbackup)); + } + } + return 0; + } + break; + case VK_BACK: + case VK_DELETE: + if ((! *hwndText) && (pThis->options & ACO_AUTOSUGGEST)) { + ShowWindow(pThis->hwndListBox, SW_HIDE); + return CallWindowProcW(pThis->wpOrigEditProc, hwnd, uMsg, wParam, lParam); + } + if (pThis->options & ACO_AUTOAPPEND) { + DWORD b; + SendMessageW(hwnd, EM_GETSEL, (WPARAM)&b, (LPARAM)NULL); + if (b>1) { + hwndText[b-1] = '\0'; + } else { + hwndText[0] = '\0'; + SetWindowTextW(hwnd, hwndText); + } + } + break; + default: + ; + } + + SendMessageW(pThis->hwndListBox, LB_RESETCONTENT, 0, 0); + + HeapFree(GetProcessHeap(), 0, pThis->txtbackup); + pThis->txtbackup = (WCHAR *)HeapAlloc(GetProcessHeap(), + HEAP_ZERO_MEMORY, (wcslen(hwndText)+1)*sizeof(WCHAR)); + wcscpy(pThis->txtbackup, hwndText); + + /* Returns if there is no text to search and we doesn't want to display all the entries */ + if ((!displayall) && (! *hwndText) ) + break; + + pThis->enumstr->Reset(); + filled = FALSE; + for(cpt = 0;;) { + hr = pThis->enumstr->Next(1, &strs, NULL); + if (hr != S_OK) + break; + + if ((LPWSTR)strstrW(strs, hwndText) == strs) { + + if (pThis->options & ACO_AUTOAPPEND) { + SetWindowTextW(hwnd, strs); + SendMessageW(hwnd, EM_SETSEL, wcslen(hwndText), wcslen(strs)); + break; + } + + if (pThis->options & ACO_AUTOSUGGEST) { + SendMessageW(pThis->hwndListBox, LB_ADDSTRING, 0, (LPARAM)strs); + filled = TRUE; + cpt++; + } + } + } + + if (pThis->options & ACO_AUTOSUGGEST) { + if (filled) { + height = SendMessageW(pThis->hwndListBox, LB_GETITEMHEIGHT, 0, 0); + SendMessageW(pThis->hwndListBox, LB_CARETOFF, 0, 0); + GetWindowRect(hwnd, &r); + SetParent(pThis->hwndListBox, HWND_DESKTOP); + /* It seems that Windows XP displays 7 lines at most + and otherwise displays a vertical scroll bar */ + SetWindowPos(pThis->hwndListBox, HWND_TOP, + r.left, r.bottom + 1, r.right - r.left, min(height * 7, height * (cpt + 1)), + SWP_SHOWWINDOW ); + } else { + ShowWindow(pThis->hwndListBox, SW_HIDE); + } + } + + break; + default: + return CallWindowProcW(pThis->wpOrigEditProc, hwnd, uMsg, wParam, lParam); + + } + + return 0; +} + +LRESULT APIENTRY CAutoComplete::ACLBoxSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + CAutoComplete *pThis = (CAutoComplete *)GetWindowLongPtrW(hwnd, GWLP_USERDATA); + WCHAR *msg; + int sel, len; + + switch (uMsg) { + case WM_MOUSEMOVE: + sel = SendMessageW(hwnd, LB_ITEMFROMPOINT, 0, lParam); + SendMessageW(hwnd, LB_SETCURSEL, (WPARAM)sel, (LPARAM)0); + break; + case WM_LBUTTONDOWN: + sel = SendMessageW(hwnd, LB_GETCURSEL, 0, 0); + if (sel < 0) + break; + len = SendMessageW(pThis->hwndListBox, LB_GETTEXTLEN, sel, 0); + msg = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (len + 1) * sizeof(WCHAR)); + SendMessageW(hwnd, LB_GETTEXT, sel, (LPARAM)msg); + SendMessageW(pThis->hwndEdit, WM_SETTEXT, 0, (LPARAM)msg); + SendMessageW(pThis->hwndEdit, EM_SETSEL, 0, wcslen(msg)); + ShowWindow(hwnd, SW_HIDE); + HeapFree(GetProcessHeap(), 0, msg); + break; + default: + return CallWindowProcW(pThis->wpOrigLBoxProc, hwnd, uMsg, wParam, lParam); + } + return 0; +} diff --git a/reactos/dll/win32/shell32_new/autocomplete.h b/reactos/dll/win32/shell32_new/autocomplete.h new file mode 100644 index 00000000000..d50fe4c1e62 --- /dev/null +++ b/reactos/dll/win32/shell32_new/autocomplete.h @@ -0,0 +1,65 @@ +/* + * AutoComplete interfaces implementation. + * + * Copyright 2004 Maxime Bellengé + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _AUTOCOMPLETE_H_ +#define _AUTOCOMPLETE_H_ + +class CAutoComplete : + public CComCoClass, + public CComObjectRootEx, + public IAutoComplete2 +{ +private: + BOOL enabled; + HWND hwndEdit; + HWND hwndListBox; + WNDPROC wpOrigEditProc; + WNDPROC wpOrigLBoxProc; + WCHAR *txtbackup; + WCHAR *quickComplete; + CComPtr enumstr; + AUTOCOMPLETEOPTIONS options; +public: + + CAutoComplete(); + ~CAutoComplete(); + + static LRESULT APIENTRY ACEditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + static LRESULT APIENTRY ACLBoxSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + + // IAutoComplete2 + virtual HRESULT WINAPI Enable(BOOL fEnable); + virtual HRESULT WINAPI Init(HWND hwndEdit, IUnknown *punkACL, LPCOLESTR pwzsRegKeyPath, LPCOLESTR pwszQuickComplete); + virtual HRESULT WINAPI GetOptions(DWORD *pdwFlag); + virtual HRESULT WINAPI SetOptions(DWORD dwFlag); + +DECLARE_REGISTRY_RESOURCEID(IDR_AUTOCOMPLETE) +DECLARE_NOT_AGGREGATABLE(CAutoComplete) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CAutoComplete) + COM_INTERFACE_ENTRY_IID(IID_IAutoComplete, IAutoComplete) + COM_INTERFACE_ENTRY_IID(IID_IAutoComplete2, IAutoComplete2) +END_COM_MAP() +}; + +#endif // _AUTOCOMPLETE_H_ diff --git a/reactos/dll/win32/shell32_new/avi_res.rc b/reactos/dll/win32/shell32_new/avi_res.rc new file mode 100644 index 00000000000..fec00e0c594 --- /dev/null +++ b/reactos/dll/win32/shell32_new/avi_res.rc @@ -0,0 +1,9 @@ +IDA_SHELL_COPY AVI "res/avis/160+161+167+168.avi" +IDA_SHELL_COPY1 AVI "res/avis/160+161+167+168.avi" +IDA_SHELL_COPY2 AVI "res/avis/160+161+167+168.avi" +IDA_SHELL_COPY3 AVI "res/avis/160+161+167+168.avi" +IDA_SHELL_RECYCLE AVI "res/avis/162.avi" +IDA_SHELL_EMPTY_RECYCLE AVI "res/avis/163.avi" +IDA_SHELL_DELETE AVI "res/avis/164+169.avi" +IDA_SHELL_DELETE1 AVI "res/avis/164+169.avi" +IDA_SHELL_DOWNLOAD AVI "res/avis/170.avi" diff --git a/reactos/dll/win32/shell32_new/basebar.cpp b/reactos/dll/win32/shell32_new/basebar.cpp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/basebar.h b/reactos/dll/win32/shell32_new/basebar.h new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/bitmap_res.rc b/reactos/dll/win32/shell32_new/bitmap_res.rc new file mode 100644 index 00000000000..0a5787c1a52 --- /dev/null +++ b/reactos/dll/win32/shell32_new/bitmap_res.rc @@ -0,0 +1,13 @@ +IDB_SHELL_ABOUT_LOGO_24BPP BITMAP "res/bitmaps/shell_about_logo_24bpp.bmp" + +/*IDB_SHELL_IEXPLORE_LG BITMAP "res/bitmaps/204+205.bmp" +IDB_SHELL_IEXPLORE_SM BITMAP "res/bitmaps/206+207.bmp" +IDB_SHELL_EXPLORER_LG BITMAP "res/bitmaps/214+215.bmp" +IDB_SHELL_EXPLORER_SM BITMAP "res/bitmaps/216+217.bmp" +IDB_SHELL_UNKNOWN1 BITMAP "res/bitmaps/225.bmp" +IDB_SHELL_UNKNOWN2 BITMAP "res/bitmaps/226.bmp" +IDB_SHELL_UNKNOWN3 BITMAP "res/bitmaps/227.bmp" +IDB_SHELL_UNKNOWN4 BITMAP "res/bitmaps/228.bmp" +IDB_SHELL_UNKNOWN5 BITMAP "res/bitmaps/230.bmp" +IDB_SHELL_UNKNOWN6 BITMAP "res/bitmaps/231.bmp" +IDB_SHELL_UNKNOWN7 BITMAP "res/bitmaps/245.bmp"*/ diff --git a/reactos/dll/win32/shell32_new/brsfolder.cpp b/reactos/dll/win32/shell32_new/brsfolder.cpp new file mode 100644 index 00000000000..f4bf88c3f38 --- /dev/null +++ b/reactos/dll/win32/shell32_new/brsfolder.cpp @@ -0,0 +1,816 @@ +/* + * Copyright 1999 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * FIXME: + * - many memory leaks + * - many flags unimplemented + * - implement new dialog style "make new folder" button + * - implement editbox + * - implement new dialog style resizing + */ + +#include + + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +typedef struct tagbrowse_info +{ + HWND hWnd; + HWND hwndTreeView; + LPBROWSEINFOW lpBrowseInfo; + LPITEMIDLIST pidlRet; +} browse_info; + +typedef struct tagTV_ITEMDATA +{ + LPSHELLFOLDER lpsfParent; /* IShellFolder of the parent */ + LPITEMIDLIST lpi; /* PIDL relative to parent */ + LPITEMIDLIST lpifq; /* Fully qualified PIDL */ + IEnumIDList* pEnumIL; /* Children iterator */ +} TV_ITEMDATA, *LPTV_ITEMDATA; + +#define SUPPORTEDFLAGS (BIF_STATUSTEXT | \ + BIF_BROWSEFORCOMPUTER | \ + BIF_RETURNFSANCESTORS | \ + BIF_RETURNONLYFSDIRS | \ + BIF_NONEWFOLDERBUTTON | \ + BIF_NEWDIALOGSTYLE | \ + BIF_BROWSEINCLUDEFILES) + +static void FillTreeView(browse_info*, LPSHELLFOLDER, + LPITEMIDLIST, HTREEITEM, IEnumIDList*); +static HTREEITEM InsertTreeViewItem( browse_info*, IShellFolder *, + LPCITEMIDLIST, LPCITEMIDLIST, IEnumIDList*, HTREEITEM); + +static const WCHAR szBrowseFolderInfo[] = { + '_','_','W','I','N','E','_', + 'B','R','S','F','O','L','D','E','R','D','L','G','_', + 'I','N','F','O',0 +}; + +static DWORD __inline BrowseFlagsToSHCONTF(UINT ulFlags) +{ + return SHCONTF_FOLDERS | (ulFlags & BIF_BROWSEINCLUDEFILES ? SHCONTF_NONFOLDERS : 0); +} + +static void browsefolder_callback( LPBROWSEINFOW lpBrowseInfo, HWND hWnd, + UINT msg, LPARAM param ) +{ + if (!lpBrowseInfo->lpfn) + return; + lpBrowseInfo->lpfn( hWnd, msg, param, lpBrowseInfo->lParam ); +} + +/****************************************************************************** + * InitializeTreeView [Internal] + * + * Called from WM_INITDIALOG handler. + * + * PARAMS + * hwndParent [I] The BrowseForFolder dialog + * root [I] ITEMIDLIST of the root shell folder + */ +static void InitializeTreeView( browse_info *info ) +{ + LPITEMIDLIST pidlParent, pidlChild; + HIMAGELIST hImageList; + HRESULT hr; + IShellFolder *lpsfParent, *lpsfRoot; + IEnumIDList * pEnumChildren = NULL; + HTREEITEM item; + DWORD flags; + LPCITEMIDLIST root = info->lpBrowseInfo->pidlRoot; + + TRACE("%p\n", info ); + + Shell_GetImageLists(NULL, &hImageList); + + if (hImageList) + SendMessageW( info->hwndTreeView, TVM_SETIMAGELIST, 0, (LPARAM)hImageList ); + + /* We want to call InsertTreeViewItem down the code, in order to insert + * the root item of the treeview. Due to InsertTreeViewItem's signature, + * we need the following to do this: + * + * + An ITEMIDLIST corresponding to _the parent_ of root. + * + An ITEMIDLIST, which is a relative path from root's parent to root + * (containing a single SHITEMID). + * + An IShellFolder interface pointer of root's parent folder. + * + * If root is 'Desktop', then root's parent is also 'Desktop'. + */ + + pidlParent = ILClone(root); + ILRemoveLastID(pidlParent); + pidlChild = ILClone(ILFindLastID(root)); + + if (_ILIsDesktop(pidlParent)) { + hr = SHGetDesktopFolder(&lpsfParent); + } else { + IShellFolder *lpsfDesktop; + hr = SHGetDesktopFolder(&lpsfDesktop); + if (!SUCCEEDED(hr)) { + WARN("SHGetDesktopFolder failed! hr = %08x\n", hr); + return; + } + hr = lpsfDesktop->BindToObject(pidlParent, 0, IID_IShellFolder, (LPVOID *)&lpsfParent); + lpsfDesktop->Release(); + } + + if (!SUCCEEDED(hr)) { + WARN("Could not bind to parent shell folder! hr = %08x\n", hr); + return; + } + + if (pidlChild && pidlChild->mkid.cb) { + hr = lpsfParent->BindToObject(pidlChild, 0, IID_IShellFolder, (LPVOID *)&lpsfRoot); + } else { + lpsfRoot = lpsfParent; + hr = lpsfParent->AddRef(); + } + + if (!SUCCEEDED(hr)) { + WARN("Could not bind to root shell folder! hr = %08x\n", hr); + lpsfParent->Release(); + return; + } + + flags = BrowseFlagsToSHCONTF( info->lpBrowseInfo->ulFlags ); + hr = lpsfRoot->EnumObjects(info->hWnd, flags, &pEnumChildren ); + if (!SUCCEEDED(hr)) { + WARN("Could not get child iterator! hr = %08x\n", hr); + lpsfParent->Release(); + lpsfRoot->Release(); + return; + } + + SendMessageW( info->hwndTreeView, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT ); + item = InsertTreeViewItem( info, lpsfParent, pidlChild, + pidlParent, pEnumChildren, TVI_ROOT ); + SendMessageW( info->hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)item ); + + lpsfRoot->Release(); + lpsfParent->Release(); +} + +static int GetIcon(LPCITEMIDLIST lpi, UINT uFlags) +{ + SHFILEINFOW sfi; + SHGetFileInfoW((LPCWSTR)lpi, 0 ,&sfi, sizeof(SHFILEINFOW), uFlags); + return sfi.iIcon; +} + +static void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM) +{ + LPITEMIDLIST pidlDesktop = NULL; + DWORD flags; + + TRACE("%p %p\n",lpifq, lpTV_ITEM); + + if (!lpifq) + { + pidlDesktop = _ILCreateDesktop(); + lpifq = pidlDesktop; + } + + flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON; + lpTV_ITEM->iImage = GetIcon( lpifq, flags ); + + flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON; + lpTV_ITEM->iSelectedImage = GetIcon( lpifq, flags ); + + if (pidlDesktop) + ILFree( pidlDesktop ); +} + +/****************************************************************************** + * GetName [Internal] + * + * Query a shell folder for the display name of one of it's children + * + * PARAMS + * lpsf [I] IShellFolder interface of the folder to be queried. + * lpi [I] ITEMIDLIST of the child, relative to parent + * dwFlags [I] as in IShellFolder::GetDisplayNameOf + * lpFriendlyName [O] The desired display name in unicode + * + * RETURNS + * Success: TRUE + * Failure: FALSE + */ +static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR lpFriendlyName) +{ + BOOL bSuccess=TRUE; + STRRET str; + + TRACE("%p %p %x %p\n", lpsf, lpi, dwFlags, lpFriendlyName); + if (SUCCEEDED(lpsf->GetDisplayNameOf(lpi, dwFlags, &str))) + bSuccess = StrRetToStrNW(lpFriendlyName, MAX_PATH, &str, lpi); + else + bSuccess = FALSE; + + TRACE("-- %s\n", debugstr_w(lpFriendlyName)); + return bSuccess; +} + +/****************************************************************************** + * InsertTreeViewItem [Internal] + * + * PARAMS + * info [I] data for the dialog + * lpsf [I] IShellFolder interface of the item's parent shell folder + * pidl [I] ITEMIDLIST of the child to insert, relative to parent + * pidlParent [I] ITEMIDLIST of the parent shell folder + * pEnumIL [I] Iterator for the children of the item to be inserted + * hParent [I] The treeview-item that represents the parent shell folder + * + * RETURNS + * Success: Handle to the created and inserted treeview-item + * Failure: NULL + */ +static HTREEITEM InsertTreeViewItem( browse_info *info, IShellFolder * lpsf, + LPCITEMIDLIST pidl, LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, + HTREEITEM hParent) +{ + TVITEMW tvi; + TVINSERTSTRUCTW tvins; + WCHAR szBuff[MAX_PATH]; + LPTV_ITEMDATA lptvid=0; + + tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; + + tvi.cChildren= pEnumIL ? 1 : 0; + tvi.mask |= TVIF_CHILDREN; + + lptvid = (TV_ITEMDATA *)SHAlloc( sizeof(TV_ITEMDATA) ); + if (!lptvid) + return NULL; + + if (!GetName(lpsf, pidl, SHGDN_NORMAL, szBuff)) + return NULL; + + tvi.pszText = szBuff; + tvi.cchTextMax = MAX_PATH; + tvi.lParam = (LPARAM)lptvid; + + lpsf->AddRef(); + lptvid->lpsfParent = lpsf; + lptvid->lpi = ILClone(pidl); + lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl); + lptvid->pEnumIL = pEnumIL; + GetNormalAndSelectedIcons(lptvid->lpifq, &tvi); + + tvins.item = tvi; + tvins.hInsertAfter = NULL; + tvins.hParent = hParent; + + return (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_INSERTITEM, 0, (LPARAM)&tvins ); +} + +/****************************************************************************** + * FillTreeView [Internal] + * + * For each child (given by lpe) of the parent shell folder, which is given by + * lpsf and whose PIDL is pidl, insert a treeview-item right under hParent + * + * PARAMS + * info [I] data for the dialog + * lpsf [I] IShellFolder interface of the parent shell folder + * pidl [I] ITEMIDLIST of the parent shell folder + * hParent [I] The treeview item that represents the parent shell folder + * lpe [I] An iterator for the children of the parent shell folder + */ +static void FillTreeView( browse_info *info, IShellFolder * lpsf, + LPITEMIDLIST pidl, HTREEITEM hParent, IEnumIDList* lpe) +{ + HTREEITEM hPrev = 0; + LPITEMIDLIST pidlTemp = 0; + ULONG ulFetched; + HRESULT hr; + HWND hwnd = GetParent( info->hwndTreeView ); + + TRACE("%p %p %p %p\n",lpsf, pidl, hParent, lpe); + + /* No IEnumIDList -> No children */ + if (!lpe) return; + + SetCapture( hwnd ); + SetCursor( LoadCursorA( 0, (LPSTR)IDC_WAIT ) ); + + while (NOERROR == lpe->Next(1,&pidlTemp,&ulFetched)) + { + ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER; + IEnumIDList* pEnumIL = NULL; + IShellFolder* pSFChild = NULL; + lpsf->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlTemp, &ulAttrs); + if (ulAttrs & SFGAO_FOLDER) + { + hr = lpsf->BindToObject(pidlTemp, NULL, IID_IShellFolder, (LPVOID *)&pSFChild); + if (SUCCEEDED(hr)) + { + DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags); + hr = pSFChild->EnumObjects(hwnd, flags, &pEnumIL); + if (hr == S_OK) + { + if ((pEnumIL->Skip(1) != S_OK) || + FAILED(pEnumIL->Reset())) + { + pEnumIL->Release(); + pEnumIL = NULL; + } + } + pSFChild->Release(); + } + } + + if (!(hPrev = InsertTreeViewItem(info, lpsf, pidlTemp, pidl, pEnumIL, hParent))) + goto done; + SHFree(pidlTemp); /* Finally, free the pidl that the shell gave us... */ + pidlTemp=NULL; + } + +done: + ReleaseCapture(); + SetCursor(LoadCursorW(0, (LPWSTR)IDC_ARROW)); + SHFree(pidlTemp); +} + +static BOOL __inline PIDLIsType(LPCITEMIDLIST pidl, PIDLTYPE type) +{ + LPPIDLDATA data = _ILGetDataPointer(pidl); + if (!data) + return FALSE; + return (data->type == type); +} + +static void BrsFolder_CheckValidSelection( browse_info *info, LPTV_ITEMDATA lptvid ) +{ + LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; + LPCITEMIDLIST pidl = lptvid->lpi; + BOOL bEnabled = TRUE; + DWORD dwAttributes; + HRESULT r; + + if ((lpBrowseInfo->ulFlags & BIF_BROWSEFORCOMPUTER) && + !PIDLIsType(pidl, PT_COMP)) + bEnabled = FALSE; + if (lpBrowseInfo->ulFlags & BIF_RETURNFSANCESTORS) + { + dwAttributes = SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM; + r = lptvid->lpsfParent->GetAttributesOf(1, + (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes); + if (FAILED(r) || !(dwAttributes & (SFGAO_FILESYSANCESTOR|SFGAO_FILESYSTEM))) + bEnabled = FALSE; + } + if (lpBrowseInfo->ulFlags & BIF_RETURNONLYFSDIRS) + { + dwAttributes = SFGAO_FOLDER | SFGAO_FILESYSTEM; + r = lptvid->lpsfParent->GetAttributesOf(1, + (LPCITEMIDLIST*)&lptvid->lpi, &dwAttributes); + if (FAILED(r) || + ((dwAttributes & (SFGAO_FOLDER|SFGAO_FILESYSTEM)) != (SFGAO_FOLDER|SFGAO_FILESYSTEM))) + { + bEnabled = FALSE; + } + } + SendMessageW(info->hWnd, BFFM_ENABLEOK, 0, (LPARAM)bEnabled); +} + +static LRESULT BrsFolder_Treeview_Delete( browse_info *info, NMTREEVIEWW *pnmtv ) +{ + LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA)pnmtv->itemOld.lParam; + + TRACE("TVN_DELETEITEMA/W %p\n", lptvid); + + lptvid->lpsfParent->Release(); + if (lptvid->pEnumIL) + lptvid->pEnumIL->Release(); + SHFree(lptvid->lpi); + SHFree(lptvid->lpifq); + SHFree(lptvid); + return 0; +} + +static LRESULT BrsFolder_Treeview_Expand( browse_info *info, NMTREEVIEWW *pnmtv ) +{ + IShellFolder *lpsf2 = NULL; + LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA) pnmtv->itemNew.lParam; + HRESULT r; + + TRACE("TVN_ITEMEXPANDINGA/W\n"); + + if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE)) + return 0; + + if (lptvid->lpi && lptvid->lpi->mkid.cb) { + r = lptvid->lpsfParent->BindToObject(lptvid->lpi, 0, + IID_IShellFolder, (LPVOID *)&lpsf2 ); + } else { + lpsf2 = lptvid->lpsfParent; + r = lpsf2->AddRef(); + } + + if (SUCCEEDED(r)) + FillTreeView( info, lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem, lptvid->pEnumIL); + + /* My Computer is already sorted and trying to do a simple text + * sort will only mess things up */ + if (!_ILIsMyComputer(lptvid->lpi)) + SendMessageW( info->hwndTreeView, TVM_SORTCHILDREN, + FALSE, (LPARAM)pnmtv->itemNew.hItem ); + + return 0; +} + +static HRESULT BrsFolder_Treeview_Changed( browse_info *info, NMTREEVIEWW *pnmtv ) +{ + LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA) pnmtv->itemNew.lParam; + + lptvid = (LPTV_ITEMDATA) pnmtv->itemNew.lParam; + info->pidlRet = lptvid->lpifq; + browsefolder_callback( info->lpBrowseInfo, info->hWnd, BFFM_SELCHANGED, + (LPARAM)info->pidlRet ); + BrsFolder_CheckValidSelection( info, lptvid ); + return 0; +} + +static LRESULT BrsFolder_OnNotify( browse_info *info, UINT CtlID, LPNMHDR lpnmh ) +{ + NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh; + + TRACE("%p %x %p msg=%x\n", info, CtlID, lpnmh, pnmtv->hdr.code); + + if (pnmtv->hdr.idFrom != IDD_TREEVIEW) + return 0; + + switch (pnmtv->hdr.code) + { + case TVN_DELETEITEMA: + case TVN_DELETEITEMW: + return BrsFolder_Treeview_Delete( info, pnmtv ); + + case TVN_ITEMEXPANDINGA: + case TVN_ITEMEXPANDINGW: + return BrsFolder_Treeview_Expand( info, pnmtv ); + + case TVN_SELCHANGEDA: + case TVN_SELCHANGEDW: + return BrsFolder_Treeview_Changed( info, pnmtv ); + + default: + WARN("unhandled (%d)\n", pnmtv->hdr.code); + break; + } + + return 0; +} + + +static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info ) +{ + LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; + + info->hWnd = hWnd; + SetPropW( hWnd, szBrowseFolderInfo, info ); + + if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) + FIXME("flags BIF_NEWDIALOGSTYLE partially implemented\n"); + if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS) + FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS); + + if (lpBrowseInfo->lpszTitle) + SetWindowTextW( GetDlgItem(hWnd, IDD_TITLE), lpBrowseInfo->lpszTitle ); + else + ShowWindow( GetDlgItem(hWnd, IDD_TITLE), SW_HIDE ); + + if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT) + || (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)) + ShowWindow( GetDlgItem(hWnd, IDD_STATUS), SW_HIDE ); + + /* Hide "Make New Folder" Button? */ + if ((lpBrowseInfo->ulFlags & BIF_NONEWFOLDERBUTTON) + || !(lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)) + ShowWindow( GetDlgItem(hWnd, IDD_MAKENEWFOLDER), SW_HIDE ); + + /* Hide the editbox? */ + if (!(lpBrowseInfo->ulFlags & BIF_EDITBOX)) + { + ShowWindow( GetDlgItem(hWnd, IDD_FOLDER), SW_HIDE ); + ShowWindow( GetDlgItem(hWnd, IDD_FOLDERTEXT), SW_HIDE ); + } + + info->hwndTreeView = GetDlgItem( hWnd, IDD_TREEVIEW ); + if (info->hwndTreeView) + { + InitializeTreeView( info ); + + /* Resize the treeview if there's not editbox */ + if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) + && !(lpBrowseInfo->ulFlags & BIF_EDITBOX)) + { + RECT rc; + GetClientRect(info->hwndTreeView, &rc); + SetWindowPos(info->hwndTreeView, HWND_TOP, 0, 0, + rc.right, rc.bottom + 40, SWP_NOMOVE); + } + } + else + ERR("treeview control missing!\n"); + + browsefolder_callback( info->lpBrowseInfo, hWnd, BFFM_INITIALIZED, 0 ); + + return TRUE; +} + +static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) +{ + LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; + + switch (id) + { + case IDOK: + /* The original pidl is owned by the treeview and will be free'd. */ + info->pidlRet = ILClone(info->pidlRet); + if (info->pidlRet == NULL) /* A null pidl would mean a cancel */ + info->pidlRet = _ILCreateDesktop(); + pdump( info->pidlRet ); + if (lpBrowseInfo->pszDisplayName) + SHGetPathFromIDListW( info->pidlRet, lpBrowseInfo->pszDisplayName ); + EndDialog( info->hWnd, 1 ); + return TRUE; + + case IDCANCEL: + EndDialog( info->hWnd, 0 ); + return TRUE; + + case IDD_MAKENEWFOLDER: + FIXME("make new folder not implemented\n"); + return TRUE; + } + return FALSE; +} + +static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection, + BOOL is_str, HTREEITEM *pItem) +{ + LPITEMIDLIST pidlSelection = (LPITEMIDLIST)selection; + LPCITEMIDLIST pidlCurrent, pidlRoot; + TVITEMEXW item; + BOOL bResult = FALSE; + + /* If 'selection' is a string, convert to a Shell ID List. */ + if (is_str) { + IShellFolder *psfDesktop; + HRESULT hr; + + hr = SHGetDesktopFolder(&psfDesktop); + if (FAILED(hr)) + goto done; + + hr = psfDesktop->ParseDisplayName(NULL, NULL, + (LPOLESTR)selection, NULL, &pidlSelection, NULL); + psfDesktop->Release(); + if (FAILED(hr)) + goto done; + } + + /* Move pidlCurrent behind the SHITEMIDs in pidlSelection, which are the root of + * the sub-tree currently displayed. */ + pidlRoot = info->lpBrowseInfo->pidlRoot; + pidlCurrent = pidlSelection; + while (!_ILIsEmpty(pidlRoot) && _ILIsEqualSimple(pidlRoot, pidlCurrent)) { + pidlRoot = ILGetNext(pidlRoot); + pidlCurrent = ILGetNext(pidlCurrent); + } + + /* The given ID List is not part of the SHBrowseForFolder's current sub-tree. */ + if (!_ILIsEmpty(pidlRoot)) + goto done; + + /* Initialize item to point to the first child of the root folder. */ + memset(&item, 0, sizeof(item)); + item.mask = TVIF_PARAM; + item.hItem = TreeView_GetRoot(info->hwndTreeView); + if (item.hItem) + item.hItem = TreeView_GetChild(info->hwndTreeView, item.hItem); + + /* Walk the tree along the nodes corresponding to the remaining ITEMIDLIST */ + while (item.hItem && !_ILIsEmpty(pidlCurrent)) { + LPTV_ITEMDATA pItemData; + + SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item); + pItemData = (LPTV_ITEMDATA)item.lParam; + + if (_ILIsEqualSimple(pItemData->lpi, pidlCurrent)) { + pidlCurrent = ILGetNext(pidlCurrent); + if (!_ILIsEmpty(pidlCurrent)) { + /* Only expand current node and move on to it's first child, + * if we didn't already reach the last SHITEMID */ + SendMessageW(info->hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)item.hItem); + item.hItem = TreeView_GetChild(info->hwndTreeView, item.hItem); + } + } else { + item.hItem = TreeView_GetNextSibling(info->hwndTreeView, item.hItem); + } + } + + if (_ILIsEmpty(pidlCurrent) && item.hItem) + bResult = TRUE; + +done: + if (pidlSelection && pidlSelection != (LPITEMIDLIST)selection) + ILFree(pidlSelection); + + if (pItem) + *pItem = item.hItem; + + return bResult; +} + +static BOOL BrsFolder_OnSetSelectionW(browse_info *info, LPVOID selection, BOOL is_str) { + HTREEITEM hItem; + BOOL bResult; + + bResult = BrsFolder_OnSetExpanded(info, selection, is_str, &hItem); + if (bResult) + SendMessageW(info->hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hItem ); + return bResult; +} + +static BOOL BrsFolder_OnSetSelectionA(browse_info *info, LPVOID selection, BOOL is_str) { + LPWSTR selectionW = NULL; + BOOL result = FALSE; + int length; + + if (!is_str) + return BrsFolder_OnSetSelectionW(info, selection, is_str); + + if ((length = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)selection, -1, NULL, 0)) && + (selectionW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, length * sizeof(WCHAR))) && + MultiByteToWideChar(CP_ACP, 0, (LPCSTR)selection, -1, selectionW, length)) + { + result = BrsFolder_OnSetSelectionW(info, selectionW, is_str); + } + + HeapFree(GetProcessHeap(), 0, selectionW); + return result; +} + +/************************************************************************* + * BrsFolderDlgProc32 (not an exported API function) + */ +static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam, + LPARAM lParam ) +{ + browse_info *info; + + TRACE("hwnd=%p msg=%04x 0x%08lx 0x%08lx\n", hWnd, msg, wParam, lParam ); + + if (msg == WM_INITDIALOG) + return BrsFolder_OnCreate( hWnd, (browse_info*) lParam ); + + info = (browse_info*) GetPropW( hWnd, szBrowseFolderInfo ); + + switch (msg) + { + case WM_NOTIFY: + return BrsFolder_OnNotify( info, (UINT)wParam, (LPNMHDR)lParam); + + case WM_COMMAND: + return BrsFolder_OnCommand( info, wParam ); + + case BFFM_SETSTATUSTEXTA: + TRACE("Set status %s\n", debugstr_a((LPSTR)lParam)); + SetWindowTextA(GetDlgItem(hWnd, IDD_STATUS), (LPSTR)lParam); + break; + + case BFFM_SETSTATUSTEXTW: + TRACE("Set status %s\n", debugstr_w((LPWSTR)lParam)); + SetWindowTextW(GetDlgItem(hWnd, IDD_STATUS), (LPWSTR)lParam); + break; + + case BFFM_ENABLEOK: + TRACE("Enable %ld\n", lParam); + EnableWindow(GetDlgItem(hWnd, 1), (lParam)?TRUE:FALSE); + break; + + case BFFM_SETOKTEXT: /* unicode only */ + TRACE("Set OK text %s\n", debugstr_w((LPWSTR)wParam)); + SetWindowTextW(GetDlgItem(hWnd, 1), (LPWSTR)wParam); + break; + + case BFFM_SETSELECTIONA: + return BrsFolder_OnSetSelectionA(info, (LPVOID)lParam, (BOOL)wParam); + + case BFFM_SETSELECTIONW: + return BrsFolder_OnSetSelectionW(info, (LPVOID)lParam, (BOOL)wParam); + + case BFFM_SETEXPANDED: /* unicode only */ + return BrsFolder_OnSetExpanded(info, (LPVOID)lParam, (BOOL)wParam, NULL); + } + return FALSE; +} + +static const WCHAR swBrowseTemplateName[] = { + 'S','H','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0}; +static const WCHAR swNewBrowseTemplateName[] = { + 'S','H','N','E','W','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0}; + +/************************************************************************* + * SHBrowseForFolderA [SHELL32.@] + * SHBrowseForFolder [SHELL32.@] + */ +LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) +{ + BROWSEINFOW bi; + LPITEMIDLIST lpid; + INT len; + LPWSTR title; + + TRACE("%p\n", lpbi); + + bi.hwndOwner = lpbi->hwndOwner; + bi.pidlRoot = lpbi->pidlRoot; + if (lpbi->pszDisplayName) + { + bi.pszDisplayName = (WCHAR *)HeapAlloc( GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, lpbi->pszDisplayName, -1, bi.pszDisplayName, MAX_PATH ); + } + else + bi.pszDisplayName = NULL; + + if (lpbi->lpszTitle) + { + len = MultiByteToWideChar( CP_ACP, 0, lpbi->lpszTitle, -1, NULL, 0 ); + title = (WCHAR *)HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, lpbi->lpszTitle, -1, title, len ); + } + else + title = NULL; + + bi.lpszTitle = title; + bi.ulFlags = lpbi->ulFlags; + bi.lpfn = lpbi->lpfn; + bi.lParam = lpbi->lParam; + bi.iImage = lpbi->iImage; + lpid = SHBrowseForFolderW( &bi ); + if (bi.pszDisplayName) + { + WideCharToMultiByte( CP_ACP, 0, bi.pszDisplayName, -1, + lpbi->pszDisplayName, MAX_PATH, 0, NULL); + HeapFree( GetProcessHeap(), 0, bi.pszDisplayName ); + } + HeapFree(GetProcessHeap(), 0, title); + lpbi->iImage = bi.iImage; + return lpid; +} + + +/************************************************************************* + * SHBrowseForFolderW [SHELL32.@] + * + * NOTES + * crashes when passed a null pointer + */ +LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi) +{ + browse_info info; + DWORD r; + HRESULT hr; + const WCHAR * templateName; + + info.hWnd = 0; + info.pidlRet = NULL; + info.lpBrowseInfo = lpbi; + info.hwndTreeView = NULL; + + hr = OleInitialize(NULL); + + if (lpbi->ulFlags & BIF_NEWDIALOGSTYLE) + templateName = swNewBrowseTemplateName; + else + templateName = swBrowseTemplateName; + r = DialogBoxParamW( shell32_hInstance, templateName, lpbi->hwndOwner, + BrsFolderDlgProc, (LPARAM)&info ); + if (SUCCEEDED(hr)) + OleUninitialize(); + if (!r) + return NULL; + + return info.pidlRet; +} diff --git a/reactos/dll/win32/shell32_new/changenotify.cpp b/reactos/dll/win32/shell32_new/changenotify.cpp new file mode 100644 index 00000000000..5328daec2a5 --- /dev/null +++ b/reactos/dll/win32/shell32_new/changenotify.cpp @@ -0,0 +1,476 @@ +/* + * shell change notification + * + * Copyright 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +namespace +{ + extern CRITICAL_SECTION SHELL32_ChangenotifyCS; + CRITICAL_SECTION_DEBUG critsect_debug = + { + 0, 0, &SHELL32_ChangenotifyCS, + { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": SHELL32_ChangenotifyCS") } + }; + CRITICAL_SECTION SHELL32_ChangenotifyCS = { &critsect_debug, -1, 0, 0, 0, 0 }; +} + +typedef SHChangeNotifyEntry *LPNOTIFYREGISTER; + +/* internal list of notification clients (internal) */ +typedef struct _NOTIFICATIONLIST +{ + struct _NOTIFICATIONLIST *next; + struct _NOTIFICATIONLIST *prev; + HWND hwnd; /* window to notify */ + DWORD uMsg; /* message to send */ + LPNOTIFYREGISTER apidl; /* array of entries to watch*/ + UINT cidl; /* number of pidls in array */ + LONG wEventMask; /* subscribed events */ + LONG wSignalledEvent; /* event that occurred */ + DWORD dwFlags; /* client flags */ + LPCITEMIDLIST pidlSignaled; /*pidl of the path that caused the signal*/ + +} NOTIFICATIONLIST, *LPNOTIFICATIONLIST; + +static NOTIFICATIONLIST *head, *tail; + +#define SHCNE_NOITEMEVENTS ( \ + SHCNE_ASSOCCHANGED ) + +#define SHCNE_ONEITEMEVENTS ( \ + SHCNE_ATTRIBUTES | SHCNE_CREATE | SHCNE_DELETE | SHCNE_DRIVEADD | \ + SHCNE_DRIVEADDGUI | SHCNE_DRIVEREMOVED | SHCNE_FREESPACE | \ + SHCNE_MEDIAINSERTED | SHCNE_MEDIAREMOVED | SHCNE_MKDIR | \ + SHCNE_NETSHARE | SHCNE_NETUNSHARE | SHCNE_RMDIR | \ + SHCNE_SERVERDISCONNECT | SHCNE_UPDATEDIR | SHCNE_UPDATEIMAGE ) + +#define SHCNE_TWOITEMEVENTS ( \ + SHCNE_RENAMEFOLDER | SHCNE_RENAMEITEM | SHCNE_UPDATEITEM ) + +/* for dumping events */ +static const char * DumpEvent( LONG event ) +{ + if( event == SHCNE_ALLEVENTS ) + return "SHCNE_ALLEVENTS"; +#define DUMPEV(x) ,( event & SHCNE_##x )? #x " " : "" + return wine_dbg_sprintf( "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s" + DUMPEV(RENAMEITEM) + DUMPEV(CREATE) + DUMPEV(DELETE) + DUMPEV(MKDIR) + DUMPEV(RMDIR) + DUMPEV(MEDIAINSERTED) + DUMPEV(MEDIAREMOVED) + DUMPEV(DRIVEREMOVED) + DUMPEV(DRIVEADD) + DUMPEV(NETSHARE) + DUMPEV(NETUNSHARE) + DUMPEV(ATTRIBUTES) + DUMPEV(UPDATEDIR) + DUMPEV(UPDATEITEM) + DUMPEV(SERVERDISCONNECT) + DUMPEV(UPDATEIMAGE) + DUMPEV(DRIVEADDGUI) + DUMPEV(RENAMEFOLDER) + DUMPEV(FREESPACE) + DUMPEV(EXTENDED_EVENT) + DUMPEV(ASSOCCHANGED) + DUMPEV(INTERRUPT) + ); +#undef DUMPEV +} + +static const char * NodeName(const NOTIFICATIONLIST *item) +{ + const char *str; + WCHAR path[MAX_PATH]; + + if(SHGetPathFromIDListW(item->apidl[0].pidl, path )) + str = wine_dbg_sprintf("%s", debugstr_w(path)); + else + str = wine_dbg_sprintf("" ); + return str; +} + +static void AddNode(LPNOTIFICATIONLIST item) +{ + TRACE("item %p\n", item ); + + /* link items */ + item->prev = tail; + item->next = NULL; + if( tail ) + tail->next = item; + else + head = item; + tail = item; +} + +static LPNOTIFICATIONLIST FindNode( HANDLE hitem ) +{ + LPNOTIFICATIONLIST ptr; + for( ptr = head; ptr; ptr = ptr->next ) + if( ptr == (LPNOTIFICATIONLIST) hitem ) + return ptr; + return NULL; +} + +static void DeleteNode(LPNOTIFICATIONLIST item) +{ + UINT i; + + TRACE("item=%p prev=%p next=%p\n", item, item->prev, item->next); + + /* remove item from list */ + if( item->prev ) + item->prev->next = item->next; + else + head = item->next; + if( item->next ) + item->next->prev = item->prev; + else + tail = item->prev; + + /* free the item */ + for (i=0; icidl; i++) + SHFree((LPITEMIDLIST)item->apidl[i].pidl); + SHFree(item->apidl); + SHFree(item); +} + +void InitChangeNotifications(void) +{ +} + +void FreeChangeNotifications(void) +{ + TRACE("\n"); + + EnterCriticalSection(&SHELL32_ChangenotifyCS); + + while( head ) + DeleteNode( head ); + + LeaveCriticalSection(&SHELL32_ChangenotifyCS); + + // DeleteCriticalSection(&SHELL32_ChangenotifyCS); // static +} + +/************************************************************************* + * SHChangeNotifyRegister [SHELL32.2] + * + */ +ULONG WINAPI +SHChangeNotifyRegister( + HWND hwnd, + int fSources, + LONG wEventMask, + UINT uMsg, + int cItems, + SHChangeNotifyEntry *lpItems) +{ + LPNOTIFICATIONLIST item; + int i; + + item = (NOTIFICATIONLIST *)SHAlloc(sizeof(NOTIFICATIONLIST)); + + TRACE("(%p,0x%08x,0x%08x,0x%08x,%d,%p) item=%p\n", + hwnd, fSources, wEventMask, uMsg, cItems, lpItems, item); + + item->next = NULL; + item->prev = NULL; + item->cidl = cItems; + item->apidl = (SHChangeNotifyEntry *)SHAlloc(sizeof(SHChangeNotifyEntry) * cItems); + for(i=0;iapidl[i].pidl = ILClone(lpItems[i].pidl); + item->apidl[i].fRecursive = lpItems[i].fRecursive; + } + item->hwnd = hwnd; + item->uMsg = uMsg; + item->wEventMask = wEventMask; + item->wSignalledEvent = 0; + item->dwFlags = fSources; + + TRACE("new node: %s\n", NodeName( item )); + + EnterCriticalSection(&SHELL32_ChangenotifyCS); + + AddNode(item); + + LeaveCriticalSection(&SHELL32_ChangenotifyCS); + + return (ULONG)item; +} + +/************************************************************************* + * SHChangeNotifyDeregister [SHELL32.4] + */ +BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify) +{ + LPNOTIFICATIONLIST node; + + TRACE("(0x%08x)\n", hNotify); + + EnterCriticalSection(&SHELL32_ChangenotifyCS); + + node = FindNode((HANDLE)hNotify); + if( node ) + DeleteNode(node); + + LeaveCriticalSection(&SHELL32_ChangenotifyCS); + + return node?TRUE:FALSE; +} + +/************************************************************************* + * SHChangeNotifyUpdateEntryList [SHELL32.5] + */ +EXTERN_C BOOL WINAPI SHChangeNotifyUpdateEntryList(DWORD unknown1, DWORD unknown2, + DWORD unknown3, DWORD unknown4) +{ + FIXME("(0x%08x, 0x%08x, 0x%08x, 0x%08x)\n", + unknown1, unknown2, unknown3, unknown4); + + return -1; +} + +static BOOL should_notify( LPCITEMIDLIST changed, LPCITEMIDLIST watched, BOOL sub ) +{ + TRACE("%p %p %d\n", changed, watched, sub ); + if ( !watched ) + return FALSE; + if (ILIsEqual( watched, changed ) ) + return TRUE; + if( sub && ILIsParent( watched, changed, TRUE ) ) + return TRUE; + return FALSE; +} + +/************************************************************************* + * SHChangeNotify [SHELL32.@] + */ +void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2) +{ + LPCITEMIDLIST Pidls[2]; + LPNOTIFICATIONLIST ptr; + UINT typeFlag = uFlags & SHCNF_TYPE; + + Pidls[0] = NULL; + Pidls[1] = NULL; + + TRACE("(0x%08x,0x%08x,%p,%p):stub.\n", wEventId, uFlags, dwItem1, dwItem2); + + if( ( wEventId & SHCNE_NOITEMEVENTS ) && ( dwItem1 || dwItem2 ) ) + { + TRACE("dwItem1 and dwItem2 are not zero, but should be\n"); + dwItem1 = 0; + dwItem2 = 0; + return; + } + else if( ( wEventId & SHCNE_ONEITEMEVENTS ) && dwItem2 ) + { + TRACE("dwItem2 is not zero, but should be\n"); + dwItem2 = 0; + return; + } + + if( ( ( wEventId & SHCNE_NOITEMEVENTS ) && + ( wEventId & ~SHCNE_NOITEMEVENTS ) ) || + ( ( wEventId & SHCNE_ONEITEMEVENTS ) && + ( wEventId & ~SHCNE_ONEITEMEVENTS ) ) || + ( ( wEventId & SHCNE_TWOITEMEVENTS ) && + ( wEventId & ~SHCNE_TWOITEMEVENTS ) ) ) + { + WARN("mutually incompatible events listed\n"); + return; + } + + /* convert paths in IDLists*/ + switch (typeFlag) + { + case SHCNF_PATHA: + if (dwItem1) Pidls[0] = SHSimpleIDListFromPathA((LPCSTR)dwItem1); //FIXME + if (dwItem2) Pidls[1] = SHSimpleIDListFromPathA((LPCSTR)dwItem2); //FIXME + break; + case SHCNF_PATHW: + if (dwItem1) Pidls[0] = SHSimpleIDListFromPathW((LPCWSTR)dwItem1); + if (dwItem2) Pidls[1] = SHSimpleIDListFromPathW((LPCWSTR)dwItem2); + break; + case SHCNF_IDLIST: + Pidls[0] = (LPCITEMIDLIST)dwItem1; + Pidls[1] = (LPCITEMIDLIST)dwItem2; + break; + case SHCNF_PRINTERA: + case SHCNF_PRINTERW: + FIXME("SHChangeNotify with (uFlags & SHCNF_PRINTER)\n"); + return; + case SHCNF_DWORD: + default: + FIXME("unknown type %08x\n",typeFlag); + return; + } + + { + WCHAR path[MAX_PATH]; + + if( Pidls[0] && SHGetPathFromIDListW(Pidls[0], path )) + TRACE("notify %08x on item1 = %s\n", wEventId, debugstr_w(path)); + + if( Pidls[1] && SHGetPathFromIDListW(Pidls[1], path )) + TRACE("notify %08x on item2 = %s\n", wEventId, debugstr_w(path)); + } + + EnterCriticalSection(&SHELL32_ChangenotifyCS); + + /* loop through the list */ + for( ptr = head; ptr; ptr = ptr->next ) + { + BOOL notify; + DWORD i; + + notify = FALSE; + + TRACE("trying %p\n", ptr); + + for( i=0; (icidl) && !notify ; i++ ) + { + LPCITEMIDLIST pidl = ptr->apidl[i].pidl; + BOOL subtree = ptr->apidl[i].fRecursive; + + if (wEventId & ptr->wEventMask) + { + if( !pidl ) /* all ? */ + notify = TRUE; + else if( wEventId & SHCNE_NOITEMEVENTS ) + notify = TRUE; + else if( wEventId & ( SHCNE_ONEITEMEVENTS | SHCNE_TWOITEMEVENTS ) ) + notify = should_notify( Pidls[0], pidl, subtree ); + else if( wEventId & SHCNE_TWOITEMEVENTS ) + notify = should_notify( Pidls[1], pidl, subtree ); + } + } + + if( !notify ) + continue; + + ptr->pidlSignaled = ILClone(Pidls[0]); + + TRACE("notifying %s, event %s(%x) before\n", NodeName( ptr ), DumpEvent( + wEventId ),wEventId ); + + ptr->wSignalledEvent |= wEventId; + + if (ptr->dwFlags & SHCNRF_NewDelivery) + SendMessageW(ptr->hwnd, ptr->uMsg, (WPARAM) ptr, (LPARAM) GetCurrentProcessId()); + else + SendMessageW(ptr->hwnd, ptr->uMsg, (WPARAM)Pidls, wEventId); + + TRACE("notifying %s, event %s(%x) after\n", NodeName( ptr ), DumpEvent( + wEventId ),wEventId ); + + } + TRACE("notify Done\n"); + LeaveCriticalSection(&SHELL32_ChangenotifyCS); + + /* if we allocated it, free it. The ANSI flag is also set in its Unicode sibling. */ + if ((typeFlag & SHCNF_PATHA) || (typeFlag & SHCNF_PRINTERA)) + { + SHFree((LPITEMIDLIST)Pidls[0]); + SHFree((LPITEMIDLIST)Pidls[1]); + } +} + +/************************************************************************* + * NTSHChangeNotifyRegister [SHELL32.640] + * NOTES + * Idlist is an array of structures and Count specifies how many items in the array. + * count should always be one when calling SHChangeNotifyRegister, or + * SHChangeNotifyDeregister will not work properly. + */ +EXTERN_C ULONG WINAPI NTSHChangeNotifyRegister( + HWND hwnd, + int fSources, + LONG fEvents, + UINT msg, + int count, + SHChangeNotifyEntry *idlist) +{ + return SHChangeNotifyRegister(hwnd, fSources | SHCNRF_NewDelivery, + fEvents, msg, count, idlist); +} + +/************************************************************************* + * SHChangeNotification_Lock [SHELL32.644] + */ +HANDLE WINAPI SHChangeNotification_Lock( + HANDLE hChange, + DWORD dwProcessId, + LPITEMIDLIST **lppidls, + LPLONG lpwEventId) +{ + DWORD i; + LPNOTIFICATIONLIST node; + LPCITEMIDLIST *idlist; + + TRACE("%p %08x %p %p\n", hChange, dwProcessId, lppidls, lpwEventId); + + /* EnterCriticalSection(&SHELL32_ChangenotifyCS); */ + + node = FindNode( hChange ); + if( node ) + { + idlist = (LPCITEMIDLIST *)SHAlloc( sizeof(LPCITEMIDLIST *) * node->cidl ); + for(i=0; icidl; i++) + idlist[i] = (LPCITEMIDLIST)node->pidlSignaled; + *lpwEventId = node->wSignalledEvent; + *lppidls = (LPITEMIDLIST*)idlist; + node->wSignalledEvent = 0; + } + else + ERR("Couldn't find %p\n", hChange ); + + /* LeaveCriticalSection(&SHELL32_ChangenotifyCS); */ + + return (HANDLE) node; +} + +/************************************************************************* + * SHChangeNotification_Unlock [SHELL32.645] + */ +BOOL WINAPI SHChangeNotification_Unlock ( HANDLE hLock) +{ + TRACE("\n"); + return 1; +} + +/************************************************************************* + * NTSHChangeNotifyDeregister [SHELL32.641] + */ +EXTERN_C DWORD WINAPI NTSHChangeNotifyDeregister(ULONG x1) +{ + FIXME("(0x%08x):semi stub.\n",x1); + + return SHChangeNotifyDeregister( x1 ); +} diff --git a/reactos/dll/win32/shell32_new/classes.cpp b/reactos/dll/win32/shell32_new/classes.cpp new file mode 100644 index 00000000000..f07d9af5a99 --- /dev/null +++ b/reactos/dll/win32/shell32_new/classes.cpp @@ -0,0 +1,506 @@ +/* + * file type mapping + * (HKEY_CLASSES_ROOT - Stuff) + * + * Copyright 1998, 1999, 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +#define MAX_EXTENSION_LENGTH 20 + +BOOL HCR_MapTypeToValueW(LPCWSTR szExtension, LPWSTR szFileType, LONG len, BOOL bPrependDot) +{ + HKEY hkey; + WCHAR szTemp[MAX_EXTENSION_LENGTH + 2]; + + TRACE("%s %p\n", debugstr_w(szExtension), debugstr_w(szFileType)); + + /* added because we do not want to have double dots */ + if (szExtension[0] == '.') + bPrependDot = 0; + + if (bPrependDot) + szTemp[0] = '.'; + + lstrcpynW(szTemp + (bPrependDot?1:0), szExtension, MAX_EXTENSION_LENGTH); + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szTemp, 0, KEY_READ, &hkey)) + { + return FALSE; + } + + if (RegQueryValueW(hkey, NULL, szFileType, &len)) + { + RegCloseKey(hkey); + return FALSE; + } + + RegCloseKey(hkey); + + TRACE("--UE;\n} %s\n", debugstr_w(szFileType)); + + return TRUE; +} + +BOOL HCR_MapTypeToValueA(LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bPrependDot) +{ + HKEY hkey; + char szTemp[MAX_EXTENSION_LENGTH + 2]; + + TRACE("%s %p\n", szExtension, szFileType); + + /* added because we do not want to have double dots */ + if (szExtension[0] == '.') + bPrependDot = 0; + + if (bPrependDot) + szTemp[0] = '.'; + + lstrcpynA(szTemp + (bPrependDot?1:0), szExtension, MAX_EXTENSION_LENGTH); + + if (RegOpenKeyExA(HKEY_CLASSES_ROOT, szTemp, 0, KEY_READ, &hkey)) + { + return FALSE; + } + + if (RegLoadMUIStringA(hkey, "FriendlyTypeName", szFileType, len, NULL, 0, NULL) == ERROR_SUCCESS) + { + RegCloseKey(hkey); + return TRUE; + } + + if (RegQueryValueA(hkey, NULL, szFileType, &len)) + { + RegCloseKey(hkey); + return FALSE; + } + + RegCloseKey(hkey); + + TRACE("--UE;\n} %s\n", szFileType); + + return TRUE; +} + +static const WCHAR swShell[] = {'s','h','e','l','l','\\',0}; +static const WCHAR swOpen[] = {'o','p','e','n',0}; +static const WCHAR swCommand[] = {'\\','c','o','m','m','a','n','d',0}; + +BOOL HCR_GetDefaultVerbW( HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len ) +{ + WCHAR sTemp[MAX_PATH]; + LONG size; + HKEY hkey; + + TRACE("%p %s %p\n", hkeyClass, debugstr_w(szVerb), szDest); + + if (szVerb) + { + lstrcpynW(szDest, szVerb, len); + return TRUE; + } + + size=len; + *szDest='\0'; + if (!RegQueryValueW(hkeyClass, L"shell", szDest, &size) && *szDest) + { + /* The MSDN says to first try the default verb */ + wcscpy(sTemp, swShell); + wcscat(sTemp, szDest); + wcscat(sTemp, swCommand); + if (!RegOpenKeyExW(hkeyClass, sTemp, 0, KEY_READ, &hkey)) + { + RegCloseKey(hkey); + TRACE("default verb=%s\n", debugstr_w(szDest)); + return TRUE; + } + } + + /* then fallback to 'open' */ + wcscpy(sTemp, swShell); + wcscat(sTemp, swOpen); + wcscat(sTemp, swCommand); + if (!RegOpenKeyExW(hkeyClass, sTemp, 0, KEY_READ, &hkey)) + { + RegCloseKey(hkey); + lstrcpynW(szDest, swOpen, len); + TRACE("default verb=open\n"); + return TRUE; + } + + /* and then just use the first verb on Windows >= 2000 */ + if (!RegOpenKeyExW(hkeyClass, L"shell", 0, KEY_READ, &hkey)) + { + if (!RegEnumKeyW(hkey, 0, szDest, len) && *szDest) + { + TRACE("default verb=first verb=%s\n", debugstr_w(szDest)); + RegCloseKey(hkey); + return TRUE; + } + RegCloseKey(hkey); + } + + + TRACE("no default verb!\n"); + return FALSE; +} + +BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len ) +{ + WCHAR sTempVerb[MAX_PATH]; + BOOL ret; + + TRACE("%p %s %s %p\n", hkeyClass, debugstr_w(szClass), debugstr_w(szVerb), szDest); + + if (szClass) + RegOpenKeyExW(HKEY_CLASSES_ROOT, szClass, 0, KEY_READ, &hkeyClass); + if (!hkeyClass) + return FALSE; + ret = FALSE; + + if (HCR_GetDefaultVerbW(hkeyClass, szVerb, sTempVerb, sizeof(sTempVerb))) + { + WCHAR sTemp[MAX_PATH]; + wcscpy(sTemp, swShell); + wcscat(sTemp, sTempVerb); + wcscat(sTemp, swCommand); + ret = (ERROR_SUCCESS == SHGetValueW(hkeyClass, sTemp, NULL, NULL, szDest, &len)); + } + if (szClass) + RegCloseKey(hkeyClass); + + TRACE("-- %s\n", debugstr_w(szDest) ); + return ret; +} + +/*************************************************************************************** +* HCR_GetDefaultIcon [internal] +* +* Gets the icon for a filetype +*/ +static BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey) +{ + WCHAR xriid[50]; + swprintf( xriid, L"CLSID\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + riid.Data1, riid.Data2, riid.Data3, + riid.Data4[0], riid.Data4[1], riid.Data4[2], riid.Data4[3], + riid.Data4[4], riid.Data4[5], riid.Data4[6], riid.Data4[7] ); + + TRACE("%S\n",xriid ); + + return !RegOpenKeyExW(HKEY_CLASSES_ROOT, xriid, 0, KEY_READ, hkey); +} + +static BOOL HCR_RegGetDefaultIconW(HKEY hkey, LPWSTR szDest, DWORD len, int* picon_idx) +{ + DWORD dwType; + WCHAR sTemp[MAX_PATH]; + WCHAR sNum[7]; + + if (!RegQueryValueExW(hkey, NULL, 0, &dwType, (LPBYTE)szDest, &len)) + { + if (dwType == REG_EXPAND_SZ) + { + ExpandEnvironmentStringsW(szDest, sTemp, MAX_PATH); + lstrcpynW(szDest, sTemp, len); + } + if (ParseFieldW (szDest, 2, sNum, _countof(sNum))) + *picon_idx = atoiW(sNum); + else + *picon_idx=0; /* sometimes the icon number is missing */ + ParseFieldW (szDest, 1, szDest, len); + PathUnquoteSpacesW(szDest); + return TRUE; + } + return FALSE; +} + +static BOOL HCR_RegGetDefaultIconA(HKEY hkey, LPSTR szDest, DWORD len, int* picon_idx) +{ + DWORD dwType; + char sTemp[MAX_PATH]; + char sNum[5]; + + if (!RegQueryValueExA(hkey, NULL, 0, &dwType, (LPBYTE)szDest, &len)) + { + if (dwType == REG_EXPAND_SZ) + { + ExpandEnvironmentStringsA(szDest, sTemp, MAX_PATH); + lstrcpynA(szDest, sTemp, len); + } + if (ParseFieldA (szDest, 2, sNum, 5)) + *picon_idx=atoi(sNum); + else + *picon_idx=0; /* sometimes the icon number is missing */ + ParseFieldA (szDest, 1, szDest, len); + PathUnquoteSpacesA(szDest); + return TRUE; + } + return FALSE; +} + +BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, int* picon_idx) +{ + static const WCHAR swDefaultIcon[] = {'\\','D','e','f','a','u','l','t','I','c','o','n',0}; + HKEY hkey; + WCHAR sTemp[MAX_PATH]; + BOOL ret = FALSE; + + TRACE("%s\n",debugstr_w(szClass) ); + + lstrcpynW(sTemp, szClass, MAX_PATH); + wcscat(sTemp, swDefaultIcon); + + if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, sTemp, 0, KEY_READ, &hkey)) + { + ret = HCR_RegGetDefaultIconW(hkey, szDest, len, picon_idx); + RegCloseKey(hkey); + } + + if(ret) + TRACE("-- %s %i\n", debugstr_w(szDest), *picon_idx); + else + TRACE("-- not found\n"); + + return ret; +} + +BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, int* picon_idx) +{ + HKEY hkey; + char sTemp[MAX_PATH]; + BOOL ret = FALSE; + + TRACE("%s\n",szClass ); + + sprintf(sTemp, "%s\\DefaultIcon",szClass); + + if (!RegOpenKeyExA(HKEY_CLASSES_ROOT, sTemp, 0, KEY_READ, &hkey)) + { + ret = HCR_RegGetDefaultIconA(hkey, szDest, len, picon_idx); + RegCloseKey(hkey); + } + TRACE("-- %s %i\n", szDest, *picon_idx); + return ret; +} + +BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, int* picon_idx) +{ + HKEY hkey; + BOOL ret = FALSE; + + if (HCR_RegOpenClassIDKey(riid, &hkey)) + { + ret = HCR_RegGetDefaultIconW(hkey, szDest, len, picon_idx); + RegCloseKey(hkey); + } + TRACE("-- %s %i\n", debugstr_w(szDest), *picon_idx); + return ret; +} + +/*************************************************************************************** +* HCR_GetClassName [internal] +* +* Gets the name of a registered class +*/ +static const WCHAR swEmpty[] = {0}; + +BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len) +{ + HKEY hkey; + BOOL ret = FALSE; + DWORD buflen = len; + WCHAR szName[100]; + LPOLESTR pStr; + + szDest[0] = 0; + + if (StringFromCLSID(riid, &pStr) == S_OK) + { + DWORD dwLen = buflen * sizeof(WCHAR); + swprintf(szName, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\%s", pStr); + if (RegGetValueW(HKEY_CURRENT_USER, szName, NULL, RRF_RT_REG_SZ, NULL, (PVOID)szDest, &dwLen) == ERROR_SUCCESS) + { + ret = TRUE; + } + CoTaskMemFree(pStr); + } + if (!ret && HCR_RegOpenClassIDKey(riid, &hkey)) + { + static const WCHAR wszLocalizedString[] = + { 'L','o','c','a','l','i','z','e','d','S','t','r','i','n','g', 0 }; + if (!RegLoadMUIStringW(hkey, wszLocalizedString, szDest, len, NULL, 0, NULL) || + !RegQueryValueExW(hkey, swEmpty, 0, NULL, (LPBYTE)szDest, &len)) + { + ret = TRUE; + } + RegCloseKey(hkey); + } + + if (!ret || !szDest[0]) + { + if(IsEqualIID(riid, CLSID_ShellDesktop)) + { + if (LoadStringW(shell32_hInstance, IDS_DESKTOP, szDest, buflen)) + ret = TRUE; + } + else if (IsEqualIID(riid, CLSID_MyComputer)) + { + if(LoadStringW(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen)) + ret = TRUE; + } + else if (IsEqualIID(riid, CLSID_MyDocuments)) + { + if(LoadStringW(shell32_hInstance, IDS_PERSONAL, szDest, buflen)) + ret = TRUE; + } + else if (IsEqualIID(riid, CLSID_RecycleBin)) + { + if(LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_FOLDER_NAME, szDest, buflen)) + ret = TRUE; + } + else if (IsEqualIID(riid, CLSID_ControlPanel)) + { + if(LoadStringW(shell32_hInstance, IDS_CONTROLPANEL, szDest, buflen)) + ret = TRUE; + } + else if (IsEqualIID(riid, CLSID_AdminFolderShortcut)) + { + if(LoadStringW(shell32_hInstance, IDS_ADMINISTRATIVETOOLS, szDest, buflen)) + ret = TRUE; + } + + } + TRACE("-- %s\n", debugstr_w(szDest)); + return ret; +} + +BOOL HCR_GetClassNameA(REFIID riid, LPSTR szDest, DWORD len) +{ HKEY hkey; + BOOL ret = FALSE; + DWORD buflen = len; + + szDest[0] = 0; + if (HCR_RegOpenClassIDKey(riid, &hkey)) + { + if (!RegLoadMUIStringA(hkey,"LocalizedString",szDest,len,NULL,0,NULL) || + !RegQueryValueExA(hkey,"",0,NULL,(LPBYTE)szDest,&len)) + { + ret = TRUE; + } + RegCloseKey(hkey); + } + + if (!ret || !szDest[0]) + { + if(IsEqualIID(riid, CLSID_ShellDesktop)) + { + if (LoadStringA(shell32_hInstance, IDS_DESKTOP, szDest, buflen)) + ret = TRUE; + } + else if (IsEqualIID(riid, CLSID_MyComputer)) + { + if(LoadStringA(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen)) + ret = TRUE; + } + } + + TRACE("-- %s\n", szDest); + + return ret; +} + +/****************************************************************************** + * HCR_GetFolderAttributes [Internal] + * + * Query the registry for a shell folders' attributes + * + * PARAMS + * pidlFolder [I] A simple pidl of type PT_GUID. + * pdwAttributes [IO] In: Attributes to be queried, OUT: Resulting attributes. + * + * RETURNS + * TRUE: Found information for the attributes in the registry + * FALSE: No attribute information found + * + * NOTES + * If queried for an attribute, which is set in the CallForAttributes registry + * value, the function binds to the shellfolder objects and queries it. + */ +BOOL HCR_GetFolderAttributes(LPCITEMIDLIST pidlFolder, LPDWORD pdwAttributes) +{ + HKEY hSFKey; + LPOLESTR pwszCLSID; + LONG lResult; + DWORD dwTemp, dwLen; + static const WCHAR wszAttributes[] = { 'A','t','t','r','i','b','u','t','e','s',0 }; + static const WCHAR wszCallForAttributes[] = { + 'C','a','l','l','F','o','r','A','t','t','r','i','b','u','t','e','s',0 }; + WCHAR wszShellFolderKey[] = { 'C','L','S','I','D','\\','{','0','0','0','2','1','4','0','0','-', + '0','0','0','0','-','0','0','0','0','-','C','0','0','0','-','0','0','0','0','0','0','0', + '0','0','0','4','6','}','\\','S','h','e','l','l','F','o','l','d','e','r',0 }; + + TRACE("(pidlFolder=%p, pdwAttributes=%p)\n", pidlFolder, pdwAttributes); + + if (!_ILIsPidlSimple(pidlFolder)) { + ERR("should be called for simple PIDL's only!\n"); + return FALSE; + } + + if (!_ILIsDesktop(pidlFolder)) { + if (FAILED(StringFromCLSID(*_ILGetGUIDPointer(pidlFolder), &pwszCLSID))) return FALSE; + memcpy(&wszShellFolderKey[6], pwszCLSID, 38 * sizeof(WCHAR)); + CoTaskMemFree(pwszCLSID); + } + + lResult = RegOpenKeyExW(HKEY_CLASSES_ROOT, wszShellFolderKey, 0, KEY_READ, &hSFKey); + if (lResult != ERROR_SUCCESS) return FALSE; + + dwLen = sizeof(DWORD); + lResult = RegQueryValueExW(hSFKey, wszCallForAttributes, 0, NULL, (LPBYTE)&dwTemp, &dwLen); + if ((lResult == ERROR_SUCCESS) && (dwTemp & *pdwAttributes)) { + CComPtr psfDesktop; + CComPtr psfFolder; + HRESULT hr; + + RegCloseKey(hSFKey); + hr = SHGetDesktopFolder(&psfDesktop); + if (SUCCEEDED(hr)) { + hr = psfDesktop->BindToObject(pidlFolder, NULL, IID_IShellFolder, + (LPVOID*)&psfFolder); + if (SUCCEEDED(hr)) { + hr = psfFolder->GetAttributesOf(0, NULL, pdwAttributes); + } + } + if (FAILED(hr)) return FALSE; + } else { + lResult = RegQueryValueExW(hSFKey, wszAttributes, 0, NULL, (LPBYTE)&dwTemp, &dwLen); + RegCloseKey(hSFKey); + if (lResult == ERROR_SUCCESS) { + *pdwAttributes &= dwTemp; + } else { + return FALSE; + } + } + + TRACE("-- *pdwAttributes == 0x%08x\n", *pdwAttributes); + + return TRUE; +} diff --git a/reactos/dll/win32/shell32_new/clipboard.cpp b/reactos/dll/win32/shell32_new/clipboard.cpp new file mode 100644 index 00000000000..b9b2846c29e --- /dev/null +++ b/reactos/dll/win32/shell32_new/clipboard.cpp @@ -0,0 +1,236 @@ +/* + * clipboard helper functions + * + * Copyright 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * NOTES: + * + * For copy & paste functions within contextmenus does the shell use + * the OLE clipboard functions in combination with dataobjects. + * The OLE32.DLL gets loaded with LoadLibrary + * + * - a right mousebutton-copy sets the following formats: + * classic: + * Shell IDList Array + * Preferred Drop Effect + * Shell Object Offsets + * HDROP + * FileName + * ole: + * OlePrivateData (ClipboardDataObjectInterface) + * + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/************************************************************************** + * RenderHDROP + * + * creates a CF_HDROP structure + */ +HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) +{ + UINT i; + int rootlen = 0,size = 0; + WCHAR wszRootPath[MAX_PATH]; + WCHAR wszFileName[MAX_PATH]; + HGLOBAL hGlobal; + DROPFILES *pDropFiles; + int offset; + + TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); + + /* get the size needed */ + size = sizeof(DROPFILES); + + SHGetPathFromIDListW(pidlRoot, wszRootPath); + PathAddBackslashW(wszRootPath); + rootlen = wcslen(wszRootPath); + + for (i=0; ipFiles = offset * sizeof(WCHAR); + pDropFiles->fWide = TRUE; + + wcscpy(wszFileName, wszRootPath); + + for (i=0; icidl = cidl; + + /* root pidl */ + offset = sizeof(CIDA) + sizeof (UINT)*(cidl); + pcida->aoffset[0] = offset; /* first element */ + sizePidl = ILGetSize (pidlRoot); + memcpy(((LPBYTE)pcida)+offset, pidlRoot, sizePidl); + offset += sizePidl; + + for(i=0; iaoffset[i+1] = offset; + sizePidl = ILGetSize(apidl[i]); + memcpy(((LPBYTE)pcida)+offset, apidl[i], sizePidl); + offset += sizePidl; + } + + GlobalUnlock(hGlobal); + return hGlobal; +} + +HGLOBAL RenderSHELLIDLISTOFFSET (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) +{ + FIXME("\n"); + return 0; +} + +HGLOBAL RenderFILECONTENTS (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) +{ + FIXME("\n"); + return 0; +} + +HGLOBAL RenderFILEDESCRIPTOR (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) +{ + FIXME("\n"); + return 0; +} + +HGLOBAL RenderFILENAMEA (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) +{ + int size = 0; + char szTemp[MAX_PATH], *szFileName; + LPITEMIDLIST pidl; + HGLOBAL hGlobal; + BOOL bSuccess; + + TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); + + /* get path of combined pidl */ + pidl = ILCombine(pidlRoot, apidl[0]); + if (!pidl) + return 0; + + bSuccess = SHGetPathFromIDListA(pidl, szTemp); + SHFree(pidl); + if (!bSuccess) + return 0; + + size = strlen(szTemp) + 1; + + /* fill the structure */ + hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); + if(!hGlobal) return hGlobal; + szFileName = (char *)GlobalLock(hGlobal); + memcpy(szFileName, szTemp, size); + GlobalUnlock(hGlobal); + + return hGlobal; +} + +HGLOBAL RenderFILENAMEW (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) +{ + int size = 0; + WCHAR szTemp[MAX_PATH], *szFileName; + LPITEMIDLIST pidl; + HGLOBAL hGlobal; + BOOL bSuccess; + + TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); + + /* get path of combined pidl */ + pidl = ILCombine(pidlRoot, apidl[0]); + if (!pidl) + return 0; + + bSuccess = SHGetPathFromIDListW(pidl, szTemp); + SHFree(pidl); + if (!bSuccess) + return 0; + + size = (wcslen(szTemp)+1) * sizeof(WCHAR); + + /* fill the structure */ + hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); + if(!hGlobal) return hGlobal; + szFileName = (WCHAR *)GlobalLock(hGlobal); + memcpy(szFileName, szTemp, size); + GlobalUnlock(hGlobal); + + return hGlobal; +} + +HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags) +{ + DWORD * pdwFlag; + HGLOBAL hGlobal; + + TRACE("(0x%08x)\n", dwFlags); + + hGlobal = GlobalAlloc(GHND|GMEM_SHARE, sizeof(DWORD)); + if(!hGlobal) return hGlobal; + pdwFlag = (DWORD*)GlobalLock(hGlobal); + *pdwFlag = dwFlags; + GlobalUnlock(hGlobal); + return hGlobal; +} diff --git a/reactos/dll/win32/shell32_new/control.cpp b/reactos/dll/win32/shell32_new/control.cpp new file mode 100644 index 00000000000..9b4b74a868b --- /dev/null +++ b/reactos/dll/win32/shell32_new/control.cpp @@ -0,0 +1,524 @@ +/* Control Panel management + * + * Copyright 2001 Eric Pouech + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shlctrl); + +CPlApplet* Control_UnloadApplet(CPlApplet* applet) +{ + unsigned i; + CPlApplet* next; + + for (i = 0; i < applet->count; i++) { + if (!applet->info[i].dwSize) continue; + applet->proc(applet->hWnd, CPL_STOP, i, applet->info[i].lData); + } + if (applet->proc) applet->proc(applet->hWnd, CPL_EXIT, 0L, 0L); + FreeLibrary(applet->hModule); + next = applet->next; + HeapFree(GetProcessHeap(), 0, applet); + return next; +} + +CPlApplet* Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel* panel) +{ + CPlApplet* applet; + unsigned i; + CPLINFO info; + NEWCPLINFOW newinfo; + + if (!(applet = (CPlApplet *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*applet)))) + return applet; + + applet->hWnd = hWnd; + + if (!(applet->hModule = LoadLibraryW(cmd))) { + WARN("Cannot load control panel applet %s\n", debugstr_w(cmd)); + goto theError; + } + if (!(applet->proc = (APPLET_PROC)GetProcAddress(applet->hModule, "CPlApplet"))) { + WARN("Not a valid control panel applet %s\n", debugstr_w(cmd)); + goto theError; + } + if (!applet->proc(hWnd, CPL_INIT, 0L, 0L)) { + WARN("Init of applet has failed\n"); + goto theError; + } + if ((applet->count = applet->proc(hWnd, CPL_GETCOUNT, 0L, 0L)) == 0) { + WARN("No subprogram in applet\n"); + goto theError; + } + + applet = (CPlApplet *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, applet, + sizeof(*applet) + (applet->count - 1) * sizeof(NEWCPLINFOW)); + + for (i = 0; i < applet->count; i++) { + ZeroMemory(&newinfo, sizeof(newinfo)); + newinfo.dwSize = sizeof(NEWCPLINFOW); + applet->info[i].dwSize = sizeof(NEWCPLINFOW); + /* proc is supposed to return a null value upon success for + * CPL_INQUIRE and CPL_NEWINQUIRE + * However, real drivers don't seem to behave like this + * So, use introspection rather than return value + */ + applet->proc(hWnd, CPL_NEWINQUIRE, i, (LPARAM)&newinfo); + if (newinfo.hIcon == 0) { + applet->proc(hWnd, CPL_INQUIRE, i, (LPARAM)&info); + if (info.idIcon == 0 || info.idName == 0) { + WARN("Couldn't get info from sp %u\n", i); + applet->info[i].dwSize = 0; + } else { + /* convert the old data into the new structure */ + applet->info[i].dwFlags = 0; + applet->info[i].dwHelpContext = 0; + applet->info[i].lData = info.lData; + applet->info[i].hIcon = LoadIconW(applet->hModule, + MAKEINTRESOURCEW(info.idIcon)); + LoadStringW(applet->hModule, info.idName, + applet->info[i].szName, sizeof(applet->info[i].szName) / sizeof(WCHAR)); + LoadStringW(applet->hModule, info.idInfo, + applet->info[i].szInfo, sizeof(applet->info[i].szInfo) / sizeof(WCHAR)); + applet->info[i].szHelpFile[0] = '\0'; + } + } + else + { + CopyMemory(&applet->info[i], &newinfo, newinfo.dwSize); + if (newinfo.dwSize != sizeof(NEWCPLINFOW)) + { + applet->info[i].dwSize = sizeof(NEWCPLINFOW); + lstrcpyW(applet->info[i].szName, newinfo.szName); + lstrcpyW(applet->info[i].szInfo, newinfo.szInfo); + lstrcpyW(applet->info[i].szHelpFile, newinfo.szHelpFile); + } + } + } + + applet->next = panel->first; + panel->first = applet; + + return applet; + + theError: + Control_UnloadApplet(applet); + return NULL; +} + +static void Control_WndProc_Create(HWND hWnd, const CREATESTRUCTW* cs) +{ + CPanel* panel = (CPanel*)cs->lpCreateParams; + + SetWindowLongPtrW(hWnd, 0, (LONG_PTR)panel); + panel->status = 0; + panel->hWnd = hWnd; +} + +#define XICON 32 +#define XSTEP 128 +#define YICON 32 +#define YSTEP 64 + +static BOOL Control_Localize(const CPanel* panel, int cx, int cy, + CPlApplet** papplet, unsigned* psp) +{ + unsigned int i; + int x = (XSTEP-XICON)/2, y = 0; + CPlApplet* applet; + RECT rc; + + GetClientRect(panel->hWnd, &rc); + for (applet = panel->first; applet; applet = applet->next) { + for (i = 0; i < applet->count; i++) { + if (!applet->info[i].dwSize) continue; + if (x + XSTEP >= rc.right - rc.left) { + x = (XSTEP-XICON)/2; + y += YSTEP; + } + if (cx >= x && cx < x + XICON && cy >= y && cy < y + YSTEP) { + *papplet = applet; + *psp = i; + return TRUE; + } + x += XSTEP; + } + } + return FALSE; +} + +static LRESULT Control_WndProc_Paint(const CPanel* panel, WPARAM wParam) +{ + HDC hdc; + PAINTSTRUCT ps; + RECT rc, txtRect; + unsigned int i; + int x = 0, y = 0; + CPlApplet* applet; + HGDIOBJ hOldFont; + + hdc = (wParam) ? (HDC)wParam : BeginPaint(panel->hWnd, &ps); + hOldFont = SelectObject(hdc, GetStockObject(ANSI_VAR_FONT)); + GetClientRect(panel->hWnd, &rc); + for (applet = panel->first; applet; applet = applet->next) { + for (i = 0; i < applet->count; i++) { + if (x + XSTEP >= rc.right - rc.left) { + x = 0; + y += YSTEP; + } + if (!applet->info[i].dwSize) continue; + DrawIcon(hdc, x + (XSTEP-XICON)/2, y, applet->info[i].hIcon); + txtRect.left = x; + txtRect.right = x + XSTEP; + txtRect.top = y + YICON; + txtRect.bottom = y + YSTEP; + DrawTextW(hdc, applet->info[i].szName, -1, &txtRect, + DT_CENTER | DT_VCENTER); + x += XSTEP; + } + } + SelectObject(hdc, hOldFont); + if (!wParam) EndPaint(panel->hWnd, &ps); + return 0; +} + +static LRESULT Control_WndProc_LButton(CPanel* panel, LPARAM lParam, BOOL up) +{ + unsigned i; + CPlApplet* applet; + + if (Control_Localize(panel, (short)LOWORD(lParam), (short)HIWORD(lParam), &applet, &i)) { + if (up) { + if (panel->clkApplet == applet && panel->clkSP == i) { + applet->proc(applet->hWnd, CPL_DBLCLK, i, applet->info[i].lData); + } + } else { + panel->clkApplet = applet; + panel->clkSP = i; + } + } + return 0; +} + +static LRESULT WINAPI Control_WndProc(HWND hWnd, UINT wMsg, + WPARAM lParam1, LPARAM lParam2) +{ + CPanel* panel = (CPanel*)GetWindowLongPtrW(hWnd, 0); + + if (panel || wMsg == WM_CREATE) { + switch (wMsg) { + case WM_CREATE: + Control_WndProc_Create(hWnd, (CREATESTRUCTW*)lParam2); + return 0; + case WM_DESTROY: + { + CPlApplet* applet = panel->first; + while (applet) + applet = Control_UnloadApplet(applet); + } + PostQuitMessage(0); + break; + case WM_PAINT: + return Control_WndProc_Paint(panel, lParam1); + case WM_LBUTTONUP: + return Control_WndProc_LButton(panel, lParam2, TRUE); + case WM_LBUTTONDOWN: + return Control_WndProc_LButton(panel, lParam2, FALSE); +/* EPP case WM_COMMAND: */ +/* EPP return Control_WndProc_Command(mwi, lParam1, lParam2); */ + } + } + + return DefWindowProcW(hWnd, wMsg, lParam1, lParam2); +} + +static void Control_DoInterface(CPanel* panel, HWND hWnd, HINSTANCE hInst) +{ + WNDCLASSW wc; + MSG msg; + const WCHAR* appName = L"ReactOS Control Panel"; + wc.style = CS_HREDRAW|CS_VREDRAW; + wc.lpfnWndProc = Control_WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = sizeof(CPlApplet*); + wc.hInstance = hInst; + wc.hIcon = 0; + wc.hCursor = 0; + wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); + wc.lpszMenuName = NULL; + wc.lpszClassName = L"Shell_Control_WndClass"; + + if (!RegisterClassW(&wc)) return; + + CreateWindowExW(0, wc.lpszClassName, appName, + WS_OVERLAPPEDWINDOW | WS_VISIBLE, + CW_USEDEFAULT, CW_USEDEFAULT, + CW_USEDEFAULT, CW_USEDEFAULT, + hWnd, NULL, hInst, panel); + if (!panel->hWnd) return; + + if (!panel->first) { + /* FIXME appName & message should be localized */ + MessageBoxW(panel->hWnd, L"Cannot load any applets", appName, MB_OK); + return; + } + + while (GetMessageW(&msg, panel->hWnd, 0, 0)) { + TranslateMessage(&msg); + DispatchMessageW(&msg); + } +} + +static void Control_DoWindow(CPanel* panel, HWND hWnd, HINSTANCE hInst) +{ + HANDLE h; + WIN32_FIND_DATAW fd; + WCHAR buffer[MAX_PATH]; + static const WCHAR wszAllCpl[] = {'*','.','c','p','l',0}; + WCHAR *p; + + GetSystemDirectoryW( buffer, MAX_PATH ); + p = buffer + wcslen(buffer); + *p++ = '\\'; + wcscpy(p, wszAllCpl); + + if ((h = FindFirstFileW(buffer, &fd)) != INVALID_HANDLE_VALUE) { + do { + wcscpy(p, fd.cFileName); + Control_LoadApplet(hWnd, buffer, panel); + } while (FindNextFileW(h, &fd)); + FindClose(h); + } + + Control_DoInterface(panel, hWnd, hInst); +} + +static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) + /* forms to parse: + * foo.cpl,@sp,str + * foo.cpl,@sp + * foo.cpl,,str + * foo.cpl @sp + * foo.cpl str + * "a path\foo.cpl" + */ +{ + LPWSTR buffer; + LPWSTR beg = NULL; + LPWSTR end; + WCHAR ch; + LPCWSTR ptr, ptr2; + WCHAR szName[MAX_PATH]; + unsigned sp = 0; + LPWSTR extraPmts = NULL; + int quoted = 0; + BOOL spSet = FALSE; + HANDLE hMutex; + UINT Length; + + ptr = wcsrchr(wszCmd, L'\\'); + ptr2 = wcsrchr(wszCmd, L','); + if (!ptr2) + { + ptr2 = wszCmd + wcslen(wszCmd) + 1; + } + + if (ptr) + ptr++; + else + ptr = wszCmd; + + Length = (ptr2 - ptr); + if (Length >= MAX_PATH) + return; + + memcpy(szName, (LPVOID)ptr, Length * sizeof(WCHAR)); + szName[Length] = L'\0'; + hMutex = CreateMutexW(NULL, TRUE, szName); + + if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS)) + return; + buffer = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(wszCmd) + 1) * sizeof(*wszCmd)); + if (!buffer) + { + CloseHandle(hMutex); + return; + } + end = wcscpy(buffer, wszCmd); + for (;;) { + ch = *end; + if (ch == '"') quoted = !quoted; + if (!quoted && (ch == ' ' || ch == ',' || ch == '\0')) { + *end = '\0'; + if (beg) { + if (*beg == '@') { + sp = atoiW(beg + 1); + spSet = TRUE; + } else if (*beg == '\0') { + sp = 0; + spSet = TRUE; + } else { + extraPmts = beg; + } + } + if (ch == '\0') break; + beg = end + 1; + if (ch == ' ') while (end[1] == ' ') end++; + } + end++; + } + while ((ptr = StrChrW(buffer, '"'))) + memmove((LPVOID)ptr, ptr+1, wcslen(ptr)*sizeof(WCHAR)); + + while ((ptr = StrChrW(extraPmts, '"'))) + memmove((LPVOID)ptr, ptr+1, wcslen(ptr)*sizeof(WCHAR)); + + TRACE("cmd %s, extra %s, sp %d\n", debugstr_w(buffer), debugstr_w(extraPmts), sp); + + Control_LoadApplet(hWnd, buffer, panel); + + if (panel->first) { + CPlApplet* applet = panel->first; + + assert(applet && applet->next == NULL); + if (sp >= applet->count) { + WARN("Out of bounds (%u >= %u), setting to 0\n", sp, applet->count); + sp = 0; + } + + if ((extraPmts) && extraPmts[0] &&(!spSet)) + { + while ((lstrcmpiW(extraPmts, applet->info[sp].szName)) && (sp < applet->count)) + sp++; + + if (sp >= applet->count) + { + ReleaseMutex(hMutex); + CloseHandle(hMutex); + Control_UnloadApplet(applet); + HeapFree(GetProcessHeap(), 0, buffer); + return; + } + } + if (applet->info[sp].dwSize) { + if (!applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].lData)) + applet->proc(applet->hWnd, CPL_STARTWPARMSA, sp, (LPARAM)extraPmts); + } + Control_UnloadApplet(applet); + } + ReleaseMutex(hMutex); + CloseHandle(hMutex); + HeapFree(GetProcessHeap(), 0, buffer); +} + +/************************************************************************* + * Control_RunDLLW [SHELL32.@] + * + */ +EXTERN_C void WINAPI Control_RunDLLW(HWND hWnd, HINSTANCE hInst, LPCWSTR cmd, DWORD nCmdShow) +{ + CPanel panel; + + TRACE("(%p, %p, %s, 0x%08x)\n", + hWnd, hInst, debugstr_w(cmd), nCmdShow); + + memset(&panel, 0, sizeof(panel)); + + if (!cmd || !*cmd) { + Control_DoWindow(&panel, hWnd, hInst); + } else { + Control_DoLaunch(&panel, hWnd, cmd); + } +} + +/************************************************************************* + * Control_RunDLLA [SHELL32.@] + * + */ +EXTERN_C void WINAPI Control_RunDLLA(HWND hWnd, HINSTANCE hInst, LPCSTR cmd, DWORD nCmdShow) +{ + DWORD len = MultiByteToWideChar(CP_ACP, 0, cmd, -1, NULL, 0 ); + LPWSTR wszCmd = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (wszCmd && MultiByteToWideChar(CP_ACP, 0, cmd, -1, wszCmd, len )) + { + Control_RunDLLW(hWnd, hInst, wszCmd, nCmdShow); + } + HeapFree(GetProcessHeap(), 0, wszCmd); +} + +/************************************************************************* + * Control_FillCache_RunDLLW [SHELL32.@] + * + */ +EXTERN_C HRESULT WINAPI Control_FillCache_RunDLLW(HWND hWnd, HANDLE hModule, DWORD w, DWORD x) +{ + FIXME("%p %p 0x%08x 0x%08x stub\n", hWnd, hModule, w, x); + return 0; +} + +/************************************************************************* + * Control_FillCache_RunDLLA [SHELL32.@] + * + */ +EXTERN_C HRESULT WINAPI Control_FillCache_RunDLLA(HWND hWnd, HANDLE hModule, DWORD w, DWORD x) +{ + return Control_FillCache_RunDLLW(hWnd, hModule, w, x); +} + + +/************************************************************************* + * RunDLL_CallEntry16 [SHELL32.122] + * the name is probably wrong + */ +EXTERN_C void WINAPI RunDLL_CallEntry16( DWORD proc, HWND hwnd, HINSTANCE inst, + LPCSTR cmdline, INT cmdshow ) +{ +#if !defined(__CYGWIN__) && !defined (__MINGW32__) && !defined(_MSC_VER) + WORD args[5]; + SEGPTR cmdline_seg; + + TRACE( "proc %x hwnd %p inst %p cmdline %s cmdshow %d\n", + proc, hwnd, inst, debugstr_a(cmdline), cmdshow ); + + cmdline_seg = MapLS( cmdline ); + args[4] = HWND_16(hwnd); + args[3] = MapHModuleLS(inst); + args[2] = SELECTOROF(cmdline_seg); + args[1] = OFFSETOF(cmdline_seg); + args[0] = cmdshow; + WOWCallback16Ex( proc, WCB16_PASCAL, sizeof(args), args, NULL ); + UnMapLS( cmdline_seg ); +#else + FIXME( "proc %lx hwnd %p inst %p cmdline %s cmdshow %d\n", + proc, hwnd, inst, debugstr_a(cmdline), cmdshow ); +#endif +} + +/************************************************************************* + * CallCPLEntry16 [SHELL32.166] + * + * called by desk.cpl on "Advanced" with: + * hMod("DeskCp16.Dll"), pFunc("CplApplet"), 0, 1, 0xc, 0 + * + */ +LRESULT WINAPI CallCPLEntry16(HINSTANCE hMod, FARPROC pFunc, HWND dw3, UINT dw4, LPARAM dw5, LPARAM dw6) +{ + FIXME("(%p, %p, %08x, %08x, %08x, %08x): stub.\n", hMod, pFunc, dw3, dw4, dw5, dw6); + return 0x0deadbee; +} diff --git a/reactos/dll/win32/shell32_new/cpanel.h b/reactos/dll/win32/shell32_new/cpanel.h new file mode 100644 index 00000000000..05923f1bdbe --- /dev/null +++ b/reactos/dll/win32/shell32_new/cpanel.h @@ -0,0 +1,47 @@ +/* Control Panel management + * + * Copyright 2001 Eric Pouech + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_SHELL_CPANEL_H +#define __WINE_SHELL_CPANEL_H + +#include "cpl.h" + +typedef struct CPlApplet { + struct CPlApplet* next; /* linked list */ + HWND hWnd; + unsigned count; /* number of subprograms */ + HMODULE hModule; /* module of loaded applet */ + APPLET_PROC proc; /* entry point address */ + NEWCPLINFOW info[1]; /* array of count information. + * dwSize field is 0 if entry is invalid */ +} CPlApplet; + +typedef struct CPanel { + CPlApplet* first; /* linked list */ + HWND hWnd; + unsigned status; + CPlApplet* clkApplet; + unsigned clkSP; +} CPanel; + + +CPlApplet* Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel* panel); +CPlApplet* Control_UnloadApplet(CPlApplet* applet); + +#endif /* __WINE_SHELL_CPANEL_H */ diff --git a/reactos/dll/win32/shell32_new/dataobject.cpp b/reactos/dll/win32/shell32_new/dataobject.cpp new file mode 100644 index 00000000000..2cb86034ae5 --- /dev/null +++ b/reactos/dll/win32/shell32_new/dataobject.cpp @@ -0,0 +1,395 @@ +/* + * IEnumFORMATETC, IDataObject + * + * selecting and droping objects within the shell and/or common dialogs + * + * Copyright 1998, 1999 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/*********************************************************************** +* IEnumFORMATETC implementation +*/ + +class IEnumFORMATETCImpl : + public CComObjectRootEx, + public IEnumFORMATETC +{ +private: + UINT posFmt; + UINT countFmt; + LPFORMATETC pFmt; +public: + IEnumFORMATETCImpl(); + ~IEnumFORMATETCImpl(); + HRESULT WINAPI Initialize(UINT cfmt, const FORMATETC afmt[]); + + // ***************** + virtual HRESULT WINAPI Next(ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed); + virtual HRESULT WINAPI Skip(ULONG celt); + virtual HRESULT WINAPI Reset(); + virtual HRESULT WINAPI Clone(LPENUMFORMATETC* ppenum); + +BEGIN_COM_MAP(IEnumFORMATETCImpl) + COM_INTERFACE_ENTRY_IID(IID_IEnumFORMATETC, IEnumFORMATETC) +END_COM_MAP() +}; + +IEnumFORMATETCImpl::IEnumFORMATETCImpl() +{ + posFmt = 0; + countFmt = 0; + pFmt = NULL; +} + +IEnumFORMATETCImpl::~IEnumFORMATETCImpl() +{ +} + +HRESULT WINAPI IEnumFORMATETCImpl::Initialize(UINT cfmt, const FORMATETC afmt[]) +{ + DWORD size; + + size = cfmt * sizeof(FORMATETC); + countFmt = cfmt; + pFmt = (LPFORMATETC)SHAlloc(size); + if (pFmt == NULL) + return E_OUTOFMEMORY; + + memcpy(pFmt, afmt, size); + return S_OK; +} + +HRESULT WINAPI IEnumFORMATETCImpl::Next(ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed) +{ + UINT i; + + TRACE("(%p)->(%u,%p)\n", this, celt, rgelt); + + if(!pFmt)return S_FALSE; + if(!rgelt) return E_INVALIDARG; + if (pceltFethed) *pceltFethed = 0; + + for(i = 0; posFmt < countFmt && celt > i; i++) + { + *rgelt++ = pFmt[posFmt++]; + } + + if (pceltFethed) *pceltFethed = i; + + return ((i == celt) ? S_OK : S_FALSE); +} + +HRESULT WINAPI IEnumFORMATETCImpl::Skip(ULONG celt) +{ + TRACE("(%p)->(num=%u)\n", this, celt); + + if (posFmt + celt >= countFmt) return S_FALSE; + posFmt += celt; + return S_OK; +} + +HRESULT WINAPI IEnumFORMATETCImpl::Reset() +{ + TRACE("(%p)->()\n", this); + + posFmt = 0; + return S_OK; +} + +HRESULT WINAPI IEnumFORMATETCImpl::Clone(LPENUMFORMATETC* ppenum) +{ + HRESULT hResult; + + TRACE("(%p)->(ppenum=%p)\n", this, ppenum); + + if (!ppenum) return E_INVALIDARG; + hResult = IEnumFORMATETC_Constructor(countFmt, pFmt, ppenum); + if (FAILED (hResult)) + return hResult; + return (*ppenum)->Skip(posFmt); +} + +HRESULT IEnumFORMATETC_Constructor(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **enumerator) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + if (enumerator == NULL) + return E_POINTER; + *enumerator = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumFORMATETC, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize (cfmt, afmt); + if (FAILED (hResult)) + return hResult; + *enumerator = result.Detach (); + TRACE("(%p)->(%u,%p)\n", *enumerator, cfmt, afmt); + return S_OK; +} + + +/*********************************************************************** +* IDataObject implementation +*/ + +/* number of supported formats */ +#define MAX_FORMATS 4 + +class IDataObjectImpl : + public CComObjectRootEx, + public IDataObject +{ +private: + LPITEMIDLIST pidl; + LPITEMIDLIST * apidl; + UINT cidl; + + FORMATETC pFormatEtc[MAX_FORMATS]; + UINT cfShellIDList; + UINT cfFileNameA; + UINT cfFileNameW; +public: + IDataObjectImpl(); + ~IDataObjectImpl(); + HRESULT WINAPI Initialize(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidlx, UINT cidlx); + + /////////// + virtual HRESULT WINAPI GetData(LPFORMATETC pformatetcIn, STGMEDIUM *pmedium); + virtual HRESULT WINAPI GetDataHere(LPFORMATETC pformatetc, STGMEDIUM *pmedium); + virtual HRESULT WINAPI QueryGetData(LPFORMATETC pformatetc); + virtual HRESULT WINAPI GetCanonicalFormatEtc(LPFORMATETC pformatectIn, LPFORMATETC pformatetcOut); + virtual HRESULT WINAPI SetData(LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease); + virtual HRESULT WINAPI EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc); + virtual HRESULT WINAPI DAdvise(FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection); + virtual HRESULT WINAPI DUnadvise(DWORD dwConnection); + virtual HRESULT WINAPI EnumDAdvise(IEnumSTATDATA **ppenumAdvise); + +BEGIN_COM_MAP(IDataObjectImpl) + COM_INTERFACE_ENTRY_IID(IID_IDataObject, IDataObject) +END_COM_MAP() +}; + +IDataObjectImpl::IDataObjectImpl() +{ + pidl = NULL; + apidl = NULL; + cidl = 0; + cfShellIDList = 0; + cfFileNameA = 0; + cfFileNameW = 0; +} + +IDataObjectImpl::~IDataObjectImpl() +{ + TRACE(" destroying IDataObject(%p)\n",this); + _ILFreeaPidl(apidl, cidl); + ILFree(pidl); +} + +HRESULT WINAPI IDataObjectImpl::Initialize(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidlx, UINT cidlx) +{ + pidl = ILClone(pMyPidl); + apidl = _ILCopyaPidl(apidlx, cidlx); + if (pidl == NULL || apidl == NULL) + return E_OUTOFMEMORY; + cidl = cidlx; + + cfShellIDList = RegisterClipboardFormatW(CFSTR_SHELLIDLIST); + cfFileNameA = RegisterClipboardFormatA(CFSTR_FILENAMEA); + cfFileNameW = RegisterClipboardFormatW(CFSTR_FILENAMEW); + InitFormatEtc(pFormatEtc[0], cfShellIDList, TYMED_HGLOBAL); + InitFormatEtc(pFormatEtc[1], CF_HDROP, TYMED_HGLOBAL); + InitFormatEtc(pFormatEtc[2], cfFileNameA, TYMED_HGLOBAL); + InitFormatEtc(pFormatEtc[3], cfFileNameW, TYMED_HGLOBAL); + return S_OK; +} + +/************************************************************************** +* IDataObject_fnGetData +*/ +HRESULT WINAPI IDataObjectImpl::GetData(LPFORMATETC pformatetcIn, STGMEDIUM *pmedium) +{ + char szTemp[256]; + + szTemp[0] = 0; + GetClipboardFormatNameA (pformatetcIn->cfFormat, szTemp, 256); + TRACE("(%p)->(%p %p format=%s)\n", this, pformatetcIn, pmedium, szTemp); + + if (pformatetcIn->cfFormat == cfShellIDList) + { + if (cidl < 1) return(E_UNEXPECTED); + pmedium->hGlobal = RenderSHELLIDLIST(pidl, apidl, cidl); + } + else if (pformatetcIn->cfFormat == CF_HDROP) + { + if (cidl < 1) return(E_UNEXPECTED); + pmedium->hGlobal = RenderHDROP(pidl, apidl, cidl); + } + else if (pformatetcIn->cfFormat == cfFileNameA) + { + if (cidl < 1) return(E_UNEXPECTED); + pmedium->hGlobal = RenderFILENAMEA(pidl, apidl, cidl); + } + else if (pformatetcIn->cfFormat == cfFileNameW) + { + if (cidl < 1) return(E_UNEXPECTED); + pmedium->hGlobal = RenderFILENAMEW(pidl, apidl, cidl); + } + else + { + FIXME("-- expected clipformat not implemented\n"); + return (E_INVALIDARG); + } + if (pmedium->hGlobal) + { + pmedium->tymed = TYMED_HGLOBAL; + pmedium->pUnkForRelease = NULL; + return S_OK; + } + return E_OUTOFMEMORY; +} + +HRESULT WINAPI IDataObjectImpl::GetDataHere(LPFORMATETC pformatetc, STGMEDIUM *pmedium) +{ + FIXME("(%p)->()\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI IDataObjectImpl::QueryGetData(LPFORMATETC pformatetc) +{ + UINT i; + + TRACE("(%p)->(fmt=0x%08x tym=0x%08x)\n", this, pformatetc->cfFormat, pformatetc->tymed); + + if(!(DVASPECT_CONTENT & pformatetc->dwAspect)) + return DV_E_DVASPECT; + + /* check our formats table what we have */ + for (i=0; icfFormat) + && (pFormatEtc[i].tymed == pformatetc->tymed)) + { + return S_OK; + } + } + + return DV_E_TYMED; +} + +HRESULT WINAPI IDataObjectImpl::GetCanonicalFormatEtc(LPFORMATETC pformatectIn, LPFORMATETC pformatetcOut) +{ + FIXME("(%p)->()\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI IDataObjectImpl::SetData(LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease) +{ + FIXME("(%p)->()\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI IDataObjectImpl::EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc) +{ + TRACE("(%p)->()\n", this); + *ppenumFormatEtc = NULL; + + /* only get data */ + if (DATADIR_GET == dwDirection) + { + return IEnumFORMATETC_Constructor(MAX_FORMATS, pFormatEtc, ppenumFormatEtc); + } + + return E_NOTIMPL; +} + +HRESULT WINAPI IDataObjectImpl::DAdvise(FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection) +{ + FIXME("(%p)->()\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI IDataObjectImpl::DUnadvise(DWORD dwConnection) +{ + FIXME("(%p)->()\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI IDataObjectImpl::EnumDAdvise(IEnumSTATDATA **ppenumAdvise) +{ + FIXME("(%p)->()\n", this); + return E_NOTIMPL; +} + +/************************************************************************** +* IDataObject_Constructor +*/ +HRESULT IDataObject_Constructor(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidl, UINT cidl, IDataObject **dataObject) +{ + CComObject *theDataObject; + CComPtr result; + HRESULT hResult; + + if (dataObject == NULL) + return E_POINTER; + *dataObject = NULL; + ATLTRY (theDataObject = new CComObject); + if (theDataObject == NULL) + return E_OUTOFMEMORY; + hResult = theDataObject->QueryInterface (IID_IDataObject, (void **)&result); + if (FAILED (hResult)) + { + delete theDataObject; + return hResult; + } + hResult = theDataObject->Initialize (hwndOwner, pMyPidl, apidl, cidl); + if (FAILED (hResult)) + return hResult; + *dataObject = result.Detach (); + TRACE("(%p)->(apidl=%p cidl=%u)\n", *dataObject, apidl, cidl); + return S_OK; +} + +/************************************************************************* + * SHCreateDataObject [SHELL32.@] + * + */ + +HRESULT WINAPI SHCreateDataObject(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST* apidl, IDataObject *pdtInner, REFIID riid, void **ppv) +{ + if (IsEqualIID(riid, IID_IDataObject)) + { + return CIDLData_CreateFromIDArray(pidlFolder, cidl, apidl, (IDataObject **)ppv); + } + return E_FAIL; +} diff --git a/reactos/dll/win32/shell32_new/dde.cpp b/reactos/dll/win32/shell32_new/dde.cpp new file mode 100644 index 00000000000..96139bbdb7a --- /dev/null +++ b/reactos/dll/win32/shell32_new/dde.cpp @@ -0,0 +1,170 @@ +/* + * Shell DDE Handling + * + * Copyright 2004 Robert Shearman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/* String handles */ +static HSZ hszProgmanTopic; +static HSZ hszProgmanService; +static HSZ hszAsterisk; +static HSZ hszShell; +static HSZ hszAppProperties; +static HSZ hszFolders; +/* DDE Instance ID */ +static DWORD dwDDEInst; + + +static BOOL __inline Dde_OnConnect(HSZ hszTopic, HSZ hszService) +{ + if ((hszTopic == hszProgmanTopic) && (hszService == hszProgmanService)) + return TRUE; + if ((hszTopic == hszProgmanTopic) && (hszService == hszAppProperties)) + return TRUE; + if ((hszTopic == hszShell) && (hszService == hszFolders)) + return TRUE; + if ((hszTopic == hszShell) && (hszService == hszAppProperties)) + return TRUE; + return FALSE; +} + +static void __inline Dde_OnConnectConfirm(HCONV hconv, HSZ hszTopic, HSZ hszService) +{ + FIXME("stub\n"); +} + +static BOOL __inline Dde_OnWildConnect(HSZ hszTopic, HSZ hszService) +{ + FIXME("stub\n"); + return FALSE; +} + +static HDDEDATA __inline Dde_OnRequest(UINT uFmt, HCONV hconv, HSZ hszTopic, + HSZ hszItem) +{ + FIXME("stub\n"); + return NULL; +} + +static DWORD __inline Dde_OnExecute(HCONV hconv, HSZ hszTopic, HDDEDATA hdata) +{ + BYTE * pszCommand; + + pszCommand = DdeAccessData(hdata, NULL); + if (!pszCommand) + return DDE_FNOTPROCESSED; + + FIXME("stub: %s\n", pszCommand); + + DdeUnaccessData(hdata); + + return DDE_FNOTPROCESSED; +} + +static void __inline Dde_OnDisconnect(HCONV hconv) +{ + FIXME("stub\n"); +} + +static HDDEDATA CALLBACK DdeCallback( + UINT uType, + UINT uFmt, + HCONV hconv, + HSZ hsz1, + HSZ hsz2, + HDDEDATA hdata, + ULONG_PTR dwData1, + ULONG_PTR dwData2) +{ + switch (uType) + { + case XTYP_CONNECT: + return (HDDEDATA)(DWORD_PTR)Dde_OnConnect(hsz1, hsz2); + case XTYP_CONNECT_CONFIRM: + Dde_OnConnectConfirm(hconv, hsz1, hsz2); + return NULL; + case XTYP_WILDCONNECT: + return (HDDEDATA)(DWORD_PTR)Dde_OnWildConnect(hsz1, hsz2); + case XTYP_REQUEST: + return Dde_OnRequest(uFmt, hconv, hsz1, hsz2); + case XTYP_EXECUTE: + return (HDDEDATA)(DWORD_PTR)Dde_OnExecute(hconv, hsz1, hdata); + case XTYP_DISCONNECT: + Dde_OnDisconnect(hconv); + return NULL; + default: + return NULL; + } +} + +/************************************************************************* + * ShellDDEInit (SHELL32.@) + * + * Registers the Shell DDE services with the system so that applications + * can use them. + * + * PARAMS + * bInit [I] TRUE to initialize the services, FALSE to uninitalize. + * + * RETURNS + * Nothing. + */ +EXTERN_C void WINAPI ShellDDEInit(BOOL bInit) +{ + TRACE("bInit = %s\n", bInit ? "TRUE" : "FALSE"); + + if (bInit) + { + static const WCHAR wszProgman[] = {'P','r','o','g','m','a','n',0}; + static const WCHAR wszAsterisk[] = {'*',0}; + static const WCHAR wszShell[] = {'S','h','e','l','l',0}; + static const WCHAR wszAppProperties[] = + {'A','p','p','P','r','o','p','e','r','t','i','e','s',0}; + static const WCHAR wszFolders[] = {'F','o','l','d','e','r','s',0}; + + DdeInitializeW(&dwDDEInst, DdeCallback, CBF_FAIL_ADVISES | CBF_FAIL_POKES, 0); + + hszProgmanTopic = DdeCreateStringHandleW(dwDDEInst, wszProgman, CP_WINUNICODE); + hszProgmanService = DdeCreateStringHandleW(dwDDEInst, wszProgman, CP_WINUNICODE); + hszAsterisk = DdeCreateStringHandleW(dwDDEInst, wszAsterisk, CP_WINUNICODE); + hszShell = DdeCreateStringHandleW(dwDDEInst, wszShell, CP_WINUNICODE); + hszAppProperties = DdeCreateStringHandleW(dwDDEInst, wszAppProperties, CP_WINUNICODE); + hszFolders = DdeCreateStringHandleW(dwDDEInst, wszFolders, CP_WINUNICODE); + + DdeNameService(dwDDEInst, hszFolders, 0, DNS_REGISTER); + DdeNameService(dwDDEInst, hszProgmanService, 0, DNS_REGISTER); + DdeNameService(dwDDEInst, hszShell, 0, DNS_REGISTER); + } + else + { + /* unregister all services */ + DdeNameService(dwDDEInst, 0, 0, DNS_UNREGISTER); + + DdeFreeStringHandle(dwDDEInst, hszFolders); + DdeFreeStringHandle(dwDDEInst, hszAppProperties); + DdeFreeStringHandle(dwDDEInst, hszShell); + DdeFreeStringHandle(dwDDEInst, hszAsterisk); + DdeFreeStringHandle(dwDDEInst, hszProgmanService); + DdeFreeStringHandle(dwDDEInst, hszProgmanTopic); + + DdeUninitialize(dwDDEInst); + } +} diff --git a/reactos/dll/win32/shell32_new/debughlp.cpp b/reactos/dll/win32/shell32_new/debughlp.cpp new file mode 100644 index 00000000000..fde3b30f892 --- /dev/null +++ b/reactos/dll/win32/shell32_new/debughlp.cpp @@ -0,0 +1,425 @@ +/* + * Helper functions for debugging + * + * Copyright 1998, 2002 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(pidl); + +static +LPITEMIDLIST _dbg_ILGetNext(LPCITEMIDLIST pidl) +{ + WORD len; + + if(pidl) + { + len = pidl->mkid.cb; + if (len) + { + return (LPITEMIDLIST) (((LPBYTE)pidl)+len); + } + } + return NULL; +} + +static +BOOL _dbg_ILIsDesktop(LPCITEMIDLIST pidl) +{ + return ( !pidl || (pidl && pidl->mkid.cb == 0x00) ); +} + +static +LPPIDLDATA _dbg_ILGetDataPointer(LPCITEMIDLIST pidl) +{ + if(pidl && pidl->mkid.cb != 0x00) + return (LPPIDLDATA) &(pidl->mkid.abID); + return NULL; +} + +static +LPSTR _dbg_ILGetTextPointer(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata =_dbg_ILGetDataPointer(pidl); + + if (pdata) + { + switch (pdata->type) + { + case PT_GUID: + case PT_SHELLEXT: + case PT_YAGUID: + return NULL; + + case PT_DRIVE: + case PT_DRIVE1: + case PT_DRIVE2: + case PT_DRIVE3: + return (LPSTR)&(pdata->u.drive.szDriveName); + + case PT_FOLDER: + case PT_FOLDER1: + case PT_VALUE: + case PT_IESPECIAL1: + case PT_IESPECIAL2: + return (LPSTR)&(pdata->u.file.szNames); + + case PT_WORKGRP: + case PT_COMP: + case PT_NETWORK: + case PT_NETPROVIDER: + case PT_SHARE: + return (LPSTR)&(pdata->u.network.szNames); + } + } + return NULL; +} + +static +LPWSTR _dbg_ILGetTextPointerW(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata =_dbg_ILGetDataPointer(pidl); + + if (pdata) + { + switch (pdata->type) + { + case PT_GUID: + case PT_SHELLEXT: + case PT_YAGUID: + return NULL; + + case PT_DRIVE: + case PT_DRIVE1: + case PT_DRIVE2: + case PT_DRIVE3: + /* return (LPSTR)&(pdata->u.drive.szDriveName);*/ + return NULL; + + case PT_FOLDER: + case PT_FOLDER1: + case PT_VALUE: + case PT_IESPECIAL1: + case PT_IESPECIAL2: + /* return (LPSTR)&(pdata->u.file.szNames); */ + return NULL; + + case PT_WORKGRP: + case PT_COMP: + case PT_NETWORK: + case PT_NETPROVIDER: + case PT_SHARE: + /* return (LPSTR)&(pdata->u.network.szNames); */ + return NULL; + + case PT_VALUEW: + return (LPWSTR)&(pdata->u.file.szNames); + } + } + return NULL; +} + + +static +LPSTR _dbg_ILGetSTextPointer(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata =_dbg_ILGetDataPointer(pidl); + + if (pdata) + { + switch (pdata->type) + { + case PT_FOLDER: + case PT_VALUE: + case PT_IESPECIAL1: + case PT_IESPECIAL2: + return (LPSTR)(pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1); + + case PT_WORKGRP: + return (LPSTR)(pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1); + } + } + return NULL; +} + +static +LPWSTR _dbg_ILGetSTextPointerW(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata =_dbg_ILGetDataPointer(pidl); + + if (pdata) + { + switch (pdata->type) + { + case PT_FOLDER: + case PT_VALUE: + case PT_IESPECIAL1: + case PT_IESPECIAL2: + /*return (LPSTR)(pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1); */ + return NULL; + + case PT_WORKGRP: + /* return (LPSTR)(pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1); */ + return NULL; + + case PT_VALUEW: + return (LPWSTR)(pdata->u.file.szNames + wcslen ((LPWSTR)pdata->u.file.szNames) + 1); + } + } + return NULL; +} + + +static +IID* _dbg_ILGetGUIDPointer(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata =_ILGetDataPointer(pidl); + + if (pdata) + { + switch (pdata->type) + { + case PT_SHELLEXT: + case PT_GUID: + case PT_YAGUID: + return &(pdata->u.guid.guid); + } + } + return NULL; +} + +static +void _dbg_ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize) +{ + LPSTR szSrc; + LPWSTR szSrcW; + GUID const * riid; + + if (!pidl) return; + + if (szOut) + *szOut = 0; + + if (_dbg_ILIsDesktop(pidl)) + { + /* desktop */ + if (szOut) lstrcpynA(szOut, "Desktop", uOutSize); + } + else if (( szSrc = _dbg_ILGetTextPointer(pidl) )) + { + /* filesystem */ + if (szOut) lstrcpynA(szOut, szSrc, uOutSize); + } + else if (( szSrcW = _dbg_ILGetTextPointerW(pidl) )) + { + CHAR tmp[MAX_PATH]; + /* unicode filesystem */ + WideCharToMultiByte(CP_ACP,0,szSrcW, -1, tmp, MAX_PATH, NULL, NULL); + if (szOut) lstrcpynA(szOut, tmp, uOutSize); + } + else if (( riid = _dbg_ILGetGUIDPointer(pidl) )) + { + if (szOut) + sprintf( szOut, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + riid->Data1, riid->Data2, riid->Data3, + riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3], + riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7] ); + } +} + + + + +void pdump (LPCITEMIDLIST pidl) +{ + LPCITEMIDLIST pidltemp = pidl; + + if (!TRACE_ON(pidl)) return; + + if (! pidltemp) + { + MESSAGE ("-------- pidl=NULL (Desktop)\n"); + } + else + { + MESSAGE ("-------- pidl=%p\n", pidl); + if (pidltemp->mkid.cb) + { + do + { + if (_ILIsUnicode(pidltemp)) + { + DWORD dwAttrib = 0; + LPPIDLDATA pData = _dbg_ILGetDataPointer(pidltemp); + DWORD type = pData ? pData->type : 0; + LPWSTR szLongName = _dbg_ILGetTextPointerW(pidltemp); + LPWSTR szShortName = _dbg_ILGetSTextPointerW(pidltemp); + char szName[MAX_PATH]; + + _dbg_ILSimpleGetText(pidltemp, szName, MAX_PATH); + if ( pData && (PT_FOLDER == type || PT_VALUE == type) ) + dwAttrib = pData->u.file.uFileAttribs; + + MESSAGE ("[%p] size=%04u type=%x attr=0x%08x name=%s (%s,%s)\n", + pidltemp, pidltemp->mkid.cb, type, dwAttrib, + debugstr_a(szName), debugstr_w(szLongName), debugstr_w(szShortName)); + } + else + { + DWORD dwAttrib = 0; + LPPIDLDATA pData = _dbg_ILGetDataPointer(pidltemp); + DWORD type = pData ? pData->type : 0; + LPSTR szLongName = _dbg_ILGetTextPointer(pidltemp); + LPSTR szShortName = _dbg_ILGetSTextPointer(pidltemp); + char szName[MAX_PATH]; + + _dbg_ILSimpleGetText(pidltemp, szName, MAX_PATH); + if ( pData && (PT_FOLDER == type || PT_VALUE == type) ) + dwAttrib = pData->u.file.uFileAttribs; + + MESSAGE ("[%p] size=%04u type=%x attr=0x%08x name=%s (%s,%s)\n", + pidltemp, pidltemp->mkid.cb, type, dwAttrib, + debugstr_a(szName), debugstr_a(szLongName), debugstr_a(szShortName)); + } + + pidltemp = _dbg_ILGetNext(pidltemp); + + } while (pidltemp && pidltemp->mkid.cb); + } + else + { + MESSAGE ("empty pidl (Desktop)\n"); + } + pcheck(pidl); + } +} + +static void dump_pidl_hex( LPCITEMIDLIST pidl ) +{ + const unsigned char *p = (const unsigned char *)pidl; + const int max_bytes = 0x80; +#define max_line 0x10 + char szHex[max_line*3+1], szAscii[max_line+1]; + int i, n; + + n = pidl->mkid.cb; + if( n>max_bytes ) + n = max_bytes; + for( i=0; imkid.cb ) + { + type = _dbg_ILGetDataPointer(pidltemp)->type; + switch( type ) + { + case PT_CPLAPPLET: + case PT_GUID: + case PT_SHELLEXT: + case PT_DRIVE: + case PT_DRIVE1: + case PT_DRIVE2: + case PT_DRIVE3: + case PT_FOLDER: + case PT_VALUE: + case PT_VALUEW: + case PT_FOLDER1: + case PT_WORKGRP: + case PT_COMP: + case PT_NETPROVIDER: + case PT_NETWORK: + case PT_IESPECIAL1: + case PT_YAGUID: + case PT_IESPECIAL2: + case PT_SHARE: + break; + default: + ERR("unknown IDLIST %p [%p] size=%u type=%x\n", + pidl, pidltemp, pidltemp->mkid.cb,type ); + dump_pidl_hex( pidltemp ); + return FALSE; + } + pidltemp = _dbg_ILGetNext(pidltemp); + } + return TRUE; +} + +static const struct { + REFIID riid; + const char *name; +} InterfaceDesc[] = { + {IID_IUnknown, "IID_IUnknown"}, + {IID_IClassFactory, "IID_IClassFactory"}, + {IID_IShellView, "IID_IShellView"}, + {IID_IOleCommandTarget, "IID_IOleCommandTarget"}, + {IID_IDropTarget, "IID_IDropTarget"}, + {IID_IDropSource, "IID_IDropSource"}, + {IID_IViewObject, "IID_IViewObject"}, + {IID_IContextMenu, "IID_IContextMenu"}, + {IID_IShellExtInit, "IID_IShellExtInit"}, + {IID_IShellFolder, "IID_IShellFolder"}, + {IID_IShellFolder2, "IID_IShellFolder2"}, + {IID_IPersist, "IID_IPersist"}, + {IID_IPersistFolder, "IID_IPersistFolder"}, + {IID_IPersistFolder2, "IID_IPersistFolder2"}, + {IID_IPersistFolder3, "IID_IPersistFolder3"}, + {IID_IExtractIconA, "IID_IExtractIconA"}, + {IID_IExtractIconW, "IID_IExtractIconW"}, + {IID_IDataObject, "IID_IDataObject"}, + {IID_IAutoComplete, "IID_IAutoComplete"}, + {IID_IAutoComplete2, "IID_IAutoComplete2"}, + {IID_IShellLinkA, "IID_IShellLinkA"}, + {IID_IShellLinkW, "IID_IShellLinkW"}, + }; + +const char * shdebugstr_guid( const struct _GUID *id ) +{ + unsigned int i; + const char* name = NULL; + char clsidbuf[100]; + + if (!id) return "(null)"; + + for (i=0; i < sizeof(InterfaceDesc) / sizeof(InterfaceDesc[0]); i++) { + if (IsEqualIID(InterfaceDesc[i].riid, *id)) name = InterfaceDesc[i].name; + } + if (!name) { + if (HCR_GetClassNameA(*id, clsidbuf, 100)) + name = clsidbuf; + } + + return wine_dbg_sprintf( "\n\t{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x} (%s)", + id->Data1, id->Data2, id->Data3, + id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3], + id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7], name ? name : "unknown" ); +} diff --git a/reactos/dll/win32/shell32_new/debughlp.h b/reactos/dll/win32/shell32_new/debughlp.h new file mode 100644 index 00000000000..62fb5bf1a55 --- /dev/null +++ b/reactos/dll/win32/shell32_new/debughlp.h @@ -0,0 +1,35 @@ +/* + * Definitions for debugging + * + * Copyright 1998, 2002 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_SHELL32_DEBUGHLP_H +#define __WINE_SHELL32_DEBUGHLP_H + +#include + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "shlobj.h" + +extern void pdump (LPCITEMIDLIST pidl); +extern BOOL pcheck (LPCITEMIDLIST pidl); +extern const char * shdebugstr_guid( const struct _GUID *id ); + +#endif /* __WINE_SHELL32_DEBUGHLP_H */ diff --git a/reactos/dll/win32/shell32_new/desktop.cpp b/reactos/dll/win32/shell32_new/desktop.cpp new file mode 100644 index 00000000000..bd0e75ba591 --- /dev/null +++ b/reactos/dll/win32/shell32_new/desktop.cpp @@ -0,0 +1,566 @@ +/* + * Shell Desktop + * + * Copyright 2008 Thomas Bluemel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include + +WINE_DEFAULT_DEBUG_CHANNEL(desktop); + +BOOL WINAPI SetShellWindowEx(HWND, HWND); + +#define SHDESK_TAG 0x4b534544 + +static const WCHAR szProgmanClassName[] = {'P','r','o','g','m','a','n'}; +static const WCHAR szProgmanWindowName[] = { + 'P','r','o','g','r','a','m',' ','M','a','n','a','g','e','r' +}; + +class CDesktopBrowser : + public CComObjectRootEx, + public IShellBrowser, + public ICommDlgBrowser, + public IServiceProvider +{ +public: + DWORD Tag; +private: + HWND hWnd; + HWND hWndShellView; + HWND hWndDesktopListView; + CComPtr ShellDesk; + CComPtr DesktopView; + IShellBrowser *DefaultShellBrowser; + LPITEMIDLIST pidlDesktopDirectory; + LPITEMIDLIST pidlDesktop; +public: + CDesktopBrowser(); + ~CDesktopBrowser(); + HRESULT Initialize(HWND hWndx, IShellDesktopTray *ShellDeskx); + HWND FindDesktopListView (); + BOOL CreateDeskWnd(); + HWND DesktopGetWindowControl(IN UINT id); + static LRESULT CALLBACK ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam); + static BOOL MessageLoop(); + + // *** IOleWindow methods *** + virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd); + virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode); + + // *** IShellBrowser methods *** + virtual HRESULT STDMETHODCALLTYPE InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths); + virtual HRESULT STDMETHODCALLTYPE SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject); + virtual HRESULT STDMETHODCALLTYPE RemoveMenusSB(HMENU hmenuShared); + virtual HRESULT STDMETHODCALLTYPE SetStatusTextSB(LPCOLESTR pszStatusText); + virtual HRESULT STDMETHODCALLTYPE EnableModelessSB(BOOL fEnable); + virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorSB(MSG *pmsg, WORD wID); + virtual HRESULT STDMETHODCALLTYPE BrowseObject(LPCITEMIDLIST pidl, UINT wFlags); + virtual HRESULT STDMETHODCALLTYPE GetViewStateStream(DWORD grfMode, IStream **ppStrm); + virtual HRESULT STDMETHODCALLTYPE GetControlWindow(UINT id, HWND *lphwnd); + virtual HRESULT STDMETHODCALLTYPE SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret); + virtual HRESULT STDMETHODCALLTYPE QueryActiveShellView(struct IShellView **ppshv); + virtual HRESULT STDMETHODCALLTYPE OnViewWindowActive(struct IShellView *ppshv); + virtual HRESULT STDMETHODCALLTYPE SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags); + + // *** ICommDlgBrowser methods *** + virtual HRESULT STDMETHODCALLTYPE OnDefaultCommand (struct IShellView *ppshv); + virtual HRESULT STDMETHODCALLTYPE OnStateChange (struct IShellView *ppshv, ULONG uChange); + virtual HRESULT STDMETHODCALLTYPE IncludeObject (struct IShellView *ppshv, LPCITEMIDLIST pidl); + + // *** IServiceProvider methods *** + virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject); + +BEGIN_COM_MAP(CDesktopBrowser) + COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow) + COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser) + COM_INTERFACE_ENTRY_IID(IID_ICommDlgBrowser, ICommDlgBrowser) + COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider) +END_COM_MAP() +}; + +CDesktopBrowser::CDesktopBrowser() +{ + Tag = SHDESK_TAG; + hWnd = NULL; + hWndShellView = NULL; + hWndDesktopListView = NULL; + DefaultShellBrowser = NULL; + pidlDesktopDirectory = NULL; + pidlDesktop = NULL; +} + +CDesktopBrowser::~CDesktopBrowser() +{ + if (DesktopView.p != NULL) + { + if (hWndShellView != NULL) + DesktopView->DestroyViewWindow(); + + hWndShellView = NULL; + hWndDesktopListView = NULL; + } + + if (pidlDesktopDirectory != NULL) + { + ILFree(pidlDesktopDirectory); + pidlDesktopDirectory = NULL; + } + + if (pidlDesktop != NULL) + { + ILFree(pidlDesktop); + pidlDesktop = NULL; + } +} + +HRESULT CDesktopBrowser::Initialize(HWND hWndx, IShellDesktopTray *ShellDeskx) +{ + CComPtr psfDesktopFolder; + CSFV csfv; + HRESULT hRet; + + hWnd = hWndx; + ShellDesk = ShellDeskx; + ShellDesk->AddRef(); + + pidlDesktopDirectory = SHCloneSpecialIDList(hWnd, CSIDL_DESKTOPDIRECTORY, FALSE); + hRet = SHGetSpecialFolderLocation(hWnd, CSIDL_DESKTOP, &pidlDesktop); + if (FAILED(hRet)) + return hRet; + + hRet = SHGetDesktopFolder(&psfDesktopFolder); + if (FAILED(hRet)) + return hRet; + + ZeroMemory(&csfv, sizeof(csfv)); + csfv.cbSize = sizeof(csfv); + csfv.pshf = psfDesktopFolder; + csfv.psvOuter = NULL; + + hRet = SHCreateShellFolderViewEx(&csfv, &DesktopView); + + return hRet; +} + +static CDesktopBrowser *SHDESK_Create(HWND hWnd, LPCREATESTRUCT lpCreateStruct) +{ + IShellDesktopTray *ShellDesk; + CComObject *pThis; + HRESULT hRet; + + ShellDesk = (IShellDesktopTray *)lpCreateStruct->lpCreateParams; + if (ShellDesk == NULL) + { + WARN("No IShellDesk interface provided!"); + return NULL; + } + + pThis = new CComObject; + if (pThis == NULL) + return NULL; + pThis->AddRef(); + + hRet = pThis->Initialize(hWnd, ShellDesk); + if (FAILED(hRet)) + { + pThis->Release(); + return NULL; + } + + return pThis; +} + +HWND CDesktopBrowser::FindDesktopListView () +{ + return FindWindowExW(hWndShellView, NULL, WC_LISTVIEW, NULL); +} + +BOOL CDesktopBrowser::CreateDeskWnd() +{ + FOLDERSETTINGS fs; + RECT rcClient; + HRESULT hRet; + + if (!GetClientRect(hWnd, &rcClient)) + { + return FALSE; + } + + fs.ViewMode = FVM_ICON; + fs.fFlags = FWF_DESKTOP | FWF_NOCLIENTEDGE | FWF_NOSCROLL | FWF_TRANSPARENT; + hRet = DesktopView->CreateViewWindow(NULL, &fs, (IShellBrowser *)this, &rcClient, &hWndShellView); + if (!SUCCEEDED(hRet)) + return FALSE; + + SetShellWindowEx(hWnd, FindDesktopListView()); + + return TRUE; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::GetWindow(HWND *phwnd) +{ + if (hWnd != NULL) + { + *phwnd = hWnd; + return S_OK; + } + + *phwnd = NULL; + return E_UNEXPECTED; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::ContextSensitiveHelp(BOOL fEnterMode) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::RemoveMenusSB(HMENU hmenuShared) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::SetStatusTextSB(LPCOLESTR lpszStatusText) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::EnableModelessSB(BOOL fEnable) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::TranslateAcceleratorSB(LPMSG lpmsg, WORD wID) +{ + return S_FALSE; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::BrowseObject(LPCITEMIDLIST pidl, UINT wFlags) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::GetViewStateStream(DWORD grfMode, IStream **ppStrm) +{ + return E_NOTIMPL; +} + +HWND CDesktopBrowser::DesktopGetWindowControl(IN UINT id) +{ + switch (id) + { + case FCW_TOOLBAR: + case FCW_STATUS: + case FCW_TREE: + case FCW_PROGRESS: + return NULL; + + default: + return NULL; + } + +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::GetControlWindow(UINT id, HWND *lphwnd) +{ + HWND hWnd; + + hWnd = DesktopGetWindowControl(id); + if (hWnd != NULL) + { + *lphwnd = hWnd; + return S_OK; + } + + *lphwnd = NULL; + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) +{ + HWND hWnd; + + if (pret == NULL) + return E_POINTER; + + hWnd = DesktopGetWindowControl(id); + if (hWnd != NULL) + { + *pret = SendMessageW(hWnd, + uMsg, + wParam, + lParam); + return S_OK; + } + + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::QueryActiveShellView(IShellView **ppshv) +{ + *ppshv = DesktopView; + if (DesktopView != NULL) + DesktopView->AddRef(); + + return S_OK; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::OnViewWindowActive(IShellView *ppshv) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::OnDefaultCommand(IShellView *ppshv) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::OnStateChange(IShellView *ppshv, ULONG uChange) +{ + return S_OK; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::IncludeObject(IShellView *ppshv, LPCITEMIDLIST pidl) +{ + return S_OK; +} + +HRESULT STDMETHODCALLTYPE CDesktopBrowser::QueryService(REFGUID guidService, REFIID riid, PVOID *ppv) +{ + /* FIXME - handle guidService */ + return QueryInterface(riid, ppv); +} + +BOOL CDesktopBrowser::MessageLoop() +{ + MSG Msg; + BOOL bRet; + + while ((bRet = GetMessageW(&Msg, NULL, 0, 0)) != 0) + { + if (bRet != -1) + { + TranslateMessage(&Msg); + DispatchMessageW(&Msg); + } + } + + return TRUE; +} + +LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam) +{ + CDesktopBrowser *pThis = NULL; + LRESULT Ret = FALSE; + + if (uMsg != WM_NCCREATE) + { + pThis = (CDesktopBrowser*)GetWindowLongPtrW(hwnd, + 0); + if (pThis == NULL) + goto DefMsgHandler; + } + + if (pThis != NULL || uMsg == WM_NCCREATE) + { + switch (uMsg) + { + case WM_ERASEBKGND: + PaintDesktop((HDC)wParam); + break; + + case WM_GETISHELLBROWSER: + Ret = (LRESULT)((IShellBrowser *)pThis); + break; + + case WM_SIZE: + if (wParam == SIZE_MINIMIZED) + { + /* Hey, we're the desktop!!! */ + ShowWindow(hwnd, + SW_RESTORE); + } + else + { + RECT rcDesktop; + + rcDesktop.left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rcDesktop.top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rcDesktop.right = GetSystemMetrics(SM_CXVIRTUALSCREEN); + rcDesktop.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN); + + /* FIXME: Update work area */ + } + break; + + case WM_SYSCOLORCHANGE: + { + InvalidateRect(pThis->hWnd, + NULL, + TRUE); + + if (pThis->hWndShellView != NULL) + { + /* Forward the message */ + SendMessageW(pThis->hWndShellView, + WM_SYSCOLORCHANGE, + wParam, + lParam); + } + break; + } + + case WM_CREATE: + { + pThis->ShellDesk->RegisterDesktopWindow(pThis->hWnd); + + if (!pThis->CreateDeskWnd()) + WARN("Could not create the desktop view control!\n"); + break; + } + + case WM_NCCREATE: + { + LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT)lParam; + pThis = SHDESK_Create(hwnd, CreateStruct); + if (pThis == NULL) + { + WARN("Failed to create desktop structure\n"); + break; + } + + SetWindowLongPtrW(hwnd, + 0, + (LONG_PTR)pThis); + Ret = TRUE; + break; + } + + case WM_NCDESTROY: + { + pThis->Release(); + break; + } + + default: +DefMsgHandler: + Ret = DefWindowProcW(hwnd, uMsg, wParam, lParam); + break; + } + } + + return Ret; +} + +static BOOL +RegisterProgmanWindowClass(VOID) +{ + WNDCLASSW wcProgman; + + wcProgman.style = CS_DBLCLKS; + wcProgman.lpfnWndProc = CDesktopBrowser::ProgmanWindowProc; + wcProgman.cbClsExtra = 0; + wcProgman.cbWndExtra = sizeof(CDesktopBrowser *); + wcProgman.hInstance = shell32_hInstance; + wcProgman.hIcon = NULL; + wcProgman.hCursor = LoadCursorW(NULL, IDC_ARROW); + wcProgman.hbrBackground = (HBRUSH)(COLOR_BACKGROUND + 1); + wcProgman.lpszMenuName = NULL; + wcProgman.lpszClassName = szProgmanClassName; + + return RegisterClassW(&wcProgman) != 0; +} + + +/************************************************************************* + * SHCreateDesktop [SHELL32.200] + * + */ +HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *ShellDesk) +{ + HWND hWndDesk; + RECT rcDesk; + + if (ShellDesk == NULL) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + + if (RegisterProgmanWindowClass() == 0) + { + WARN("Failed to register the Progman window class!\n"); + return NULL; + } + + rcDesk.left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rcDesk.top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rcDesk.right = rcDesk.left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rcDesk.bottom = rcDesk.top + GetSystemMetrics(SM_CYVIRTUALSCREEN); + + if (IsRectEmpty(&rcDesk)) + { + rcDesk.left = rcDesk.top = 0; + rcDesk.right = GetSystemMetrics(SM_CXSCREEN); + rcDesk.bottom = GetSystemMetrics(SM_CYSCREEN); + } + + hWndDesk = CreateWindowExW(0, szProgmanClassName, szProgmanWindowName, + WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, + rcDesk.left, rcDesk.top, rcDesk.right, rcDesk.bottom, + NULL, NULL, shell32_hInstance, (LPVOID)ShellDesk); + if (hWndDesk != NULL) + return (HANDLE)GetWindowLongPtrW(hWndDesk, 0); + + return NULL; +} + +/************************************************************************* + * SHCreateDesktop [SHELL32.201] + * + */ +BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop) +{ + CDesktopBrowser *Desk = (CDesktopBrowser *)hDesktop; + + if (Desk == NULL || Desk->Tag != SHDESK_TAG) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + return Desk->MessageLoop(); +} diff --git a/reactos/dll/win32/shell32_new/dialogs.cpp b/reactos/dll/win32/shell32_new/dialogs.cpp new file mode 100644 index 00000000000..b42d490288e --- /dev/null +++ b/reactos/dll/win32/shell32_new/dialogs.cpp @@ -0,0 +1,657 @@ +/* + * common shell dialogs + * + * Copyright 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + + +typedef struct + { + HWND hwndOwner ; + HICON hIcon ; + LPCSTR lpstrDirectory ; + LPCSTR lpstrTitle ; + LPCSTR lpstrDescription ; + UINT uFlags ; + } RUNFILEDLGPARAMS ; + +typedef BOOL (*LPFNOFN) (OPENFILENAMEA *) ; + +WINE_DEFAULT_DEBUG_CHANNEL(shell); +static INT_PTR CALLBACK RunDlgProc (HWND, UINT, WPARAM, LPARAM) ; +static void FillList (HWND, char *) ; + + +/************************************************************************* + * PickIconDlg [SHELL32.62] + * + */ + +typedef struct +{ + HMODULE hLibrary; + HWND hDlgCtrl; + WCHAR szName[MAX_PATH]; + INT Index; +}PICK_ICON_CONTEXT, *PPICK_ICON_CONTEXT; + +BOOL CALLBACK EnumPickIconResourceProc(HMODULE hModule, + LPCWSTR lpszType, + LPWSTR lpszName, + LONG_PTR lParam +) +{ + WCHAR szName[100]; + int index; + HICON hIcon; + PPICK_ICON_CONTEXT pIconContext = (PPICK_ICON_CONTEXT)lParam; + + if (IS_INTRESOURCE(lpszName)) + swprintf(szName, L"%u\n", lpszName); + else + wcscpy(szName, (WCHAR*)lpszName); + + + hIcon = LoadIconW(pIconContext->hLibrary, (LPCWSTR)lpszName); + if (hIcon == NULL) + return TRUE; + + index = SendMessageW(pIconContext->hDlgCtrl, LB_ADDSTRING, 0, (LPARAM)szName); + if (index != LB_ERR) + SendMessageW(pIconContext->hDlgCtrl, LB_SETITEMDATA, index, (LPARAM)hIcon); + + return TRUE; +} + +void +DestroyIconList(HWND hDlgCtrl) +{ + int count; + int index; + + count = SendMessage(hDlgCtrl, LB_GETCOUNT, 0, 0); + if (count == LB_ERR) + return; + + for(index = 0; index < count; index++) + { + HICON hIcon = (HICON)SendMessageW(hDlgCtrl, LB_GETITEMDATA, index, 0); + DestroyIcon(hIcon); + } +} + +INT_PTR CALLBACK PickIconProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + LPMEASUREITEMSTRUCT lpmis; + LPDRAWITEMSTRUCT lpdis; + HICON hIcon; + INT index; + WCHAR szText[MAX_PATH], szTitle[100], szFilter[100]; + OPENFILENAMEW ofn = {0}; + + PPICK_ICON_CONTEXT pIconContext = (PPICK_ICON_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + + switch(uMsg) + { + case WM_INITDIALOG: + pIconContext = (PPICK_ICON_CONTEXT)lParam; + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG)pIconContext); + pIconContext->hDlgCtrl = GetDlgItem(hwndDlg, IDC_PICKICON_LIST); + EnumResourceNamesW(pIconContext->hLibrary, RT_ICON, EnumPickIconResourceProc, (LPARAM)pIconContext); + if (PathUnExpandEnvStringsW(pIconContext->szName, szText, MAX_PATH)) + SendDlgItemMessageW(hwndDlg, IDC_EDIT_PATH, WM_SETTEXT, 0, (LPARAM)szText); + else + SendDlgItemMessageW(hwndDlg, IDC_EDIT_PATH, WM_SETTEXT, 0, (LPARAM)pIconContext->szName); + + swprintf(szText, L"%u", pIconContext->Index); + index = SendMessageW(pIconContext->hDlgCtrl, LB_FINDSTRING, -1, (LPARAM)szText); + if (index != LB_ERR) + SendMessageW(pIconContext->hDlgCtrl, LB_SETCURSEL, index, 0); + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDOK: + index = SendMessageW(pIconContext->hDlgCtrl, LB_GETCURSEL, 0, 0); + SendMessageW(pIconContext->hDlgCtrl, LB_GETTEXT, index, (LPARAM)szText); + pIconContext->Index = _wtoi(szText); + SendDlgItemMessageW(hwndDlg, IDC_EDIT_PATH, WM_GETTEXT, MAX_PATH, (LPARAM)pIconContext->szName); + DestroyIconList(pIconContext->hDlgCtrl); + EndDialog(hwndDlg, 1); + break; + case IDCANCEL: + DestroyIconList(pIconContext->hDlgCtrl); + EndDialog(hwndDlg, 0); + break; + case IDC_PICKICON_LIST: + if (HIWORD(wParam) == LBN_SELCHANGE) + InvalidateRect((HWND)lParam, NULL, TRUE); // FIXME USE UPDATE RECT + break; + case IDC_BUTTON_PATH: + szText[0] = 0; + szTitle[0] = 0; + szFilter[0] = 0; + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = hwndDlg; + ofn.lpstrFile = szText; + ofn.nMaxFile = MAX_PATH; + LoadStringW(shell32_hInstance, IDS_PICK_ICON_TITLE, szTitle, sizeof(szTitle) / sizeof(WCHAR)); + ofn.lpstrTitle = szTitle; + LoadStringW(shell32_hInstance, IDS_PICK_ICON_FILTER, szFilter, sizeof(szFilter) / sizeof(WCHAR)); + ofn.lpstrFilter = szFilter; + if (GetOpenFileNameW(&ofn)) + { + HMODULE hLibrary; + + if (!wcsicmp(pIconContext->szName, szText)) + break; + + DestroyIconList(pIconContext->hDlgCtrl); + + hLibrary = LoadLibraryExW(szText, NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE); + if (hLibrary == NULL) + break; + FreeLibrary(pIconContext->hLibrary); + pIconContext->hLibrary = hLibrary; + wcscpy(pIconContext->szName, szText); + EnumResourceNamesW(pIconContext->hLibrary, RT_ICON, EnumPickIconResourceProc, (LPARAM)pIconContext); + if (PathUnExpandEnvStringsW(pIconContext->szName, szText, MAX_PATH)) + SendDlgItemMessageW(hwndDlg, IDC_EDIT_PATH, WM_SETTEXT, 0, (LPARAM)szText); + else + SendDlgItemMessageW(hwndDlg, IDC_EDIT_PATH, WM_SETTEXT, 0, (LPARAM)pIconContext->szName); + + SendMessageW(pIconContext->hDlgCtrl, LB_SETCURSEL, 0, 0); + } + break; + } + break; + case WM_MEASUREITEM: + lpmis = (LPMEASUREITEMSTRUCT) lParam; + lpmis->itemHeight = 32; + lpmis->itemWidth = 64; + return TRUE; + case WM_DRAWITEM: + lpdis = (LPDRAWITEMSTRUCT) lParam; + if (lpdis->itemID == (UINT)-1) + { + break; + } + switch (lpdis->itemAction) + { + case ODA_SELECT: + case ODA_DRAWENTIRE: + index = SendMessageW(pIconContext->hDlgCtrl, LB_GETCURSEL, 0, 0); + hIcon =(HICON)SendMessage(lpdis->hwndItem, LB_GETITEMDATA, lpdis->itemID, (LPARAM) 0); + + if (lpdis->itemID == (UINT)index) + { + HBRUSH hBrush; + hBrush = CreateSolidBrush(RGB(0, 0, 255)); + FillRect(lpdis->hDC, &lpdis->rcItem, hBrush); + DeleteObject(hBrush); + } + else + { + HBRUSH hBrush; + hBrush = CreateSolidBrush(RGB(255, 255, 255)); + FillRect(lpdis->hDC, &lpdis->rcItem, hBrush); + DeleteObject(hBrush); + } + DrawIconEx(lpdis->hDC, lpdis->rcItem.left,lpdis->rcItem.top, hIcon, + 0, + 0, + 0, + NULL, + DI_NORMAL); + break; + } + break; + } + + return FALSE; +} + +BOOL WINAPI PickIconDlg( + HWND hwndOwner, + LPWSTR lpstrFile, + UINT nMaxFile, + INT* lpdwIconIndex) +{ + HMODULE hLibrary; + int res; + PICK_ICON_CONTEXT IconContext; + + hLibrary = LoadLibraryExW(lpstrFile, NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE); + IconContext.hLibrary = hLibrary; + IconContext.Index = *lpdwIconIndex; + wcscpy(IconContext.szName, lpstrFile); + + res = DialogBoxParamW(shell32_hInstance, MAKEINTRESOURCEW(IDD_PICK_ICON_DIALOG), hwndOwner, PickIconProc, (LPARAM)&IconContext); + if (res) + { + wcscpy(lpstrFile, IconContext.szName); + *lpdwIconIndex = IconContext.Index; + } + + FreeLibrary(hLibrary); + return res; +} + +/************************************************************************* + * RunFileDlg [SHELL32.61] + * + * NOTES + * Original name: RunFileDlg (exported by ordinal) + */ +void WINAPI RunFileDlg( + HWND hwndOwner, + HICON hIcon, + LPCSTR lpstrDirectory, + LPCSTR lpstrTitle, + LPCSTR lpstrDescription, + UINT uFlags) +{ + + RUNFILEDLGPARAMS rfdp; + HRSRC hRes; + DLGTEMPLATE *templatex; + TRACE("\n"); + + rfdp.hwndOwner = hwndOwner; + rfdp.hIcon = hIcon; + rfdp.lpstrDirectory = lpstrDirectory; + rfdp.lpstrTitle = lpstrTitle; + rfdp.lpstrDescription = lpstrDescription; + rfdp.uFlags = uFlags; + + if(!(hRes = FindResourceA(shell32_hInstance, "SHELL_RUN_DLG", (LPSTR)RT_DIALOG))) + { + MessageBoxA (hwndOwner, "Couldn't find dialog.", "Nix", MB_OK) ; + return; + } + if(!(templatex = (DLGTEMPLATE *)LoadResource(shell32_hInstance, hRes))) + { + MessageBoxA (hwndOwner, "Couldn't load dialog.", "Nix", MB_OK) ; + return; + } + + DialogBoxIndirectParamA((HINSTANCE)GetWindowLongPtrW( hwndOwner, + GWLP_HINSTANCE ), + templatex, hwndOwner, RunDlgProc, (LPARAM)&rfdp); + +} + +/* Dialog procedure for RunFileDlg */ +static INT_PTR CALLBACK RunDlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) + { + int ic ; + char *psz, *pdir, szMsg[256]; + static RUNFILEDLGPARAMS *prfdp = NULL ; + + switch (message) + { + case WM_INITDIALOG : + prfdp = (RUNFILEDLGPARAMS *)lParam ; + + if (prfdp->lpstrTitle) + SetWindowTextA (hwnd, prfdp->lpstrTitle) ; + + SetClassLongPtrW (hwnd, GCLP_HICON, (LPARAM)prfdp->hIcon) ; + SendMessageW (GetDlgItem (hwnd, 12297), STM_SETICON, + (WPARAM)LoadIconW (NULL, (LPCWSTR)IDI_WINLOGO), 0); + FillList (GetDlgItem (hwnd, 12298), NULL) ; + SetFocus (GetDlgItem (hwnd, 12298)) ; + return TRUE ; + + case WM_COMMAND : + switch (LOWORD (wParam)) + { + case IDOK : + { + HWND htxt = NULL ; + if ((ic = GetWindowTextLengthA (htxt = GetDlgItem (hwnd, 12298)))) + { + psz = (char *)HeapAlloc( GetProcessHeap(), 0, (ic + 2) ); + GetWindowTextA (htxt, psz, ic + 1) ; + pdir = (char *)HeapAlloc( GetProcessHeap(), 0, (ic + 2) ); + if (pdir) + { + char * ptr; + strcpy(pdir, psz); + ptr = strrchr(pdir + 4, '\\'); + if(ptr) + ptr[0] = '\0'; + else + pdir[3] = '\0'; + } + if (ShellExecuteA(NULL, NULL, psz, NULL, pdir, SW_SHOWNORMAL) < (HINSTANCE)33) + { + char *pszSysMsg = NULL ; + FormatMessageA ( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, GetLastError (), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR)&pszSysMsg, 0, NULL + ) ; + sprintf (szMsg, "Error: %s", pszSysMsg) ; + LocalFree ((HLOCAL)pszSysMsg) ; + MessageBoxA (hwnd, szMsg, NULL, MB_OK | MB_ICONEXCLAMATION) ; + + HeapFree(GetProcessHeap(), 0, psz); + HeapFree(GetProcessHeap(), 0, pdir); + SendMessageA (htxt, CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ; + return TRUE ; + } + FillList (htxt, psz) ; + HeapFree(GetProcessHeap(), 0, psz); + HeapFree(GetProcessHeap(), 0, pdir); + EndDialog (hwnd, 0) ; + } + } + + case IDCANCEL : + EndDialog (hwnd, 0) ; + return TRUE ; + + case 12288 : + { + HMODULE hComdlg = NULL ; + LPFNOFN ofnProc = NULL ; + static char szFName[1024] = "", szFileTitle[256] = "", szInitDir[768] = "" ; + static OPENFILENAMEA ofn = + { + sizeof (OPENFILENAMEA), + NULL, + NULL, + "Executable Files\0*.exe\0All Files\0*.*\0\0\0\0", + NULL, + 0, + 0, + szFName, + 1023, + szFileTitle, + 255, + (LPCSTR)szInitDir, + "Browse", + OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST, + 0, + 0, + NULL, + 0, + (LPOFNHOOKPROC)NULL, + NULL + } ; + + ofn.hwndOwner = hwnd ; + + if (NULL == (hComdlg = LoadLibraryExA ("comdlg32", NULL, 0))) + { + MessageBoxA (hwnd, "Unable to display dialog box (LoadLibraryEx) !", "Nix", MB_OK | MB_ICONEXCLAMATION) ; + return TRUE ; + } + + if ((LPFNOFN)NULL == (ofnProc = (LPFNOFN)GetProcAddress (hComdlg, "GetOpenFileNameA"))) + { + MessageBoxA (hwnd, "Unable to display dialog box (GetProcAddress) !", "Nix", MB_OK | MB_ICONEXCLAMATION) ; + return TRUE ; + } + + ofnProc (&ofn) ; + + SetFocus (GetDlgItem (hwnd, IDOK)) ; + SetWindowTextA (GetDlgItem (hwnd, 12298), szFName) ; + SendMessageA (GetDlgItem (hwnd, 12298), CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ; + SetFocus (GetDlgItem (hwnd, IDOK)) ; + + FreeLibrary (hComdlg) ; + + return TRUE ; + } + } + return TRUE ; + } + return FALSE ; + } + +/* This grabs the MRU list from the registry and fills the combo for the "Run" dialog above */ +static void FillList (HWND hCb, char *pszLatest) + { + HKEY hkey ; +/* char szDbgMsg[256] = "" ; */ + char *pszList = NULL, *pszCmd = NULL, cMatch = 0, cMax = 0x60, szIndex[2] = "-" ; + DWORD icList = 0, icCmd = 0 ; + UINT Nix ; + + SendMessageA (hCb, CB_RESETCONTENT, 0, 0) ; + + if (ERROR_SUCCESS != RegCreateKeyExA ( + HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU", + 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL)) + MessageBoxA (hCb, "Unable to open registry key !", "Nix", MB_OK) ; + + RegQueryValueExA (hkey, "MRUList", NULL, NULL, NULL, &icList) ; + + if (icList > 0) + { + pszList = (char *)HeapAlloc( GetProcessHeap(), 0, icList) ; + if (ERROR_SUCCESS != RegQueryValueExA (hkey, "MRUList", NULL, NULL, (LPBYTE)pszList, &icList)) + MessageBoxA (hCb, "Unable to grab MRUList !", "Nix", MB_OK) ; + } + else + { + icList = 1 ; + pszList = (char *)HeapAlloc( GetProcessHeap(), 0, icList) ; + pszList[0] = 0 ; + } + + for (Nix = 0 ; Nix < icList - 1 ; Nix++) + { + if (pszList[Nix] > cMax) + cMax = pszList[Nix] ; + + szIndex[0] = pszList[Nix] ; + + if (ERROR_SUCCESS != RegQueryValueExA (hkey, szIndex, NULL, NULL, NULL, &icCmd)) + MessageBoxA (hCb, "Unable to grab size of index", "Nix", MB_OK) ; + if( pszCmd ) + pszCmd = (char *)HeapReAlloc(GetProcessHeap(), 0, pszCmd, icCmd) ; + else + pszCmd = (char *)HeapAlloc(GetProcessHeap(), 0, icCmd) ; + if (ERROR_SUCCESS != RegQueryValueExA (hkey, szIndex, NULL, NULL, (LPBYTE)pszCmd, &icCmd)) + MessageBoxA (hCb, "Unable to grab index", "Nix", MB_OK) ; + + if (NULL != pszLatest) + { + if (!lstrcmpiA(pszCmd, pszLatest)) + { + /* + sprintf (szDbgMsg, "Found existing (%d).\n", Nix) ; + MessageBoxA (hCb, szDbgMsg, "Nix", MB_OK) ; + */ + SendMessageA (hCb, CB_INSERTSTRING, 0, (LPARAM)pszCmd) ; + SetWindowTextA (hCb, pszCmd) ; + SendMessageA (hCb, CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ; + + cMatch = pszList[Nix] ; + memmove (&pszList[1], pszList, Nix) ; + pszList[0] = cMatch ; + continue ; + } + } + + if (26 != icList - 1 || icList - 2 != Nix || cMatch || NULL == pszLatest) + { + /* + sprintf (szDbgMsg, "Happily appending (%d).\n", Nix) ; + MessageBoxA (hCb, szDbgMsg, "Nix", MB_OK) ; + */ + SendMessageA (hCb, CB_ADDSTRING, 0, (LPARAM)pszCmd) ; + if (!Nix) + { + SetWindowTextA (hCb, pszCmd) ; + SendMessageA (hCb, CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ; + } + + } + else + { + /* + sprintf (szDbgMsg, "Doing loop thing.\n") ; + MessageBoxA (hCb, szDbgMsg, "Nix", MB_OK) ; + */ + SendMessageA (hCb, CB_INSERTSTRING, 0, (LPARAM)pszLatest) ; + SetWindowTextA (hCb, pszLatest) ; + SendMessageA (hCb, CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ; + + cMatch = pszList[Nix] ; + memmove (&pszList[1], pszList, Nix) ; + pszList[0] = cMatch ; + szIndex[0] = cMatch ; + RegSetValueExA (hkey, szIndex, 0, REG_SZ, (LPBYTE)pszLatest, strlen (pszLatest) + 1) ; + } + } + + if (!cMatch && NULL != pszLatest) + { + /* + sprintf (szDbgMsg, "Simply inserting (increasing list).\n") ; + MessageBoxA (hCb, szDbgMsg, "Nix", MB_OK) ; + */ + SendMessageA (hCb, CB_INSERTSTRING, 0, (LPARAM)pszLatest) ; + SetWindowTextA (hCb, pszLatest) ; + SendMessageA (hCb, CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ; + + cMatch = ++cMax ; + if( pszList ) + pszList = (char *)HeapReAlloc(GetProcessHeap(), 0, pszList, ++icList) ; + else + pszList = (char *)HeapAlloc(GetProcessHeap(), 0, ++icList) ; + memmove (&pszList[1], pszList, icList - 1) ; + pszList[0] = cMatch ; + szIndex[0] = cMatch ; + RegSetValueExA (hkey, szIndex, 0, REG_SZ, (LPBYTE)pszLatest, strlen (pszLatest) + 1) ; + } + + RegSetValueExA (hkey, "MRUList", 0, REG_SZ, (LPBYTE)pszList, strlen (pszList) + 1) ; + + HeapFree( GetProcessHeap(), 0, pszCmd) ; + HeapFree( GetProcessHeap(), 0, pszList) ; + } + + +/************************************************************************* + * ConfirmDialog [internal] + * + * Put up a confirm box, return TRUE if the user confirmed + */ +static BOOL ConfirmDialog(HWND hWndOwner, UINT PromptId, UINT TitleId) +{ + WCHAR Prompt[256]; + WCHAR Title[256]; + + LoadStringW(shell32_hInstance, PromptId, Prompt, sizeof(Prompt) / sizeof(WCHAR)); + LoadStringW(shell32_hInstance, TitleId, Title, sizeof(Title) / sizeof(WCHAR)); + return MessageBoxW(hWndOwner, Prompt, Title, MB_YESNO|MB_ICONQUESTION) == IDYES; +} + + +/************************************************************************* + * RestartDialogEx [SHELL32.730] + */ + +int WINAPI RestartDialogEx(HWND hWndOwner, LPCWSTR lpwstrReason, DWORD uFlags, DWORD uReason) +{ + TRACE("(%p)\n", hWndOwner); + + /* FIXME: use lpwstrReason */ + if (ConfirmDialog(hWndOwner, IDS_RESTART_PROMPT, IDS_RESTART_TITLE)) + { + HANDLE hToken; + TOKEN_PRIVILEGES npr; + + /* enable the shutdown privilege for the current process */ + if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) + { + LookupPrivilegeValueA(0, "SeShutdownPrivilege", &npr.Privileges[0].Luid); + npr.PrivilegeCount = 1; + npr.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + AdjustTokenPrivileges(hToken, FALSE, &npr, 0, 0, 0); + CloseHandle(hToken); + } + ExitWindowsEx(EWX_REBOOT, uReason); + } + + return 0; +} + +/************************************************************************* + * LogoffWindowsDialog [SHELL32.54] + */ + +EXTERN_C int WINAPI LogoffWindowsDialog(HWND hWndOwner) +{ + if (ConfirmDialog(hWndOwner, IDS_LOGOFF_PROMPT, IDS_LOGOFF_TITLE)) + { + ExitWindowsEx(EWX_LOGOFF, 0); + } + return 0;} + +/************************************************************************* + * RestartDialog [SHELL32.59] + */ + +int WINAPI RestartDialog(HWND hWndOwner, LPCWSTR lpstrReason, DWORD uFlags) +{ + return RestartDialogEx(hWndOwner, lpstrReason, uFlags, 0); +} + + +/************************************************************************* + * ExitWindowsDialog [SHELL32.60] + * + * NOTES + * exported by ordinal + */ +void WINAPI ExitWindowsDialog (HWND hWndOwner) +{ + TRACE("(%p)\n", hWndOwner); + + if (ConfirmDialog(hWndOwner, IDS_SHUTDOWN_PROMPT, IDS_SHUTDOWN_TITLE)) + { + HANDLE hToken; + TOKEN_PRIVILEGES npr; + + /* enable shutdown privilege for current process */ + if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) + { + LookupPrivilegeValueA(0, "SeShutdownPrivilege", &npr.Privileges[0].Luid); + npr.PrivilegeCount = 1; + npr.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + AdjustTokenPrivileges(hToken, FALSE, &npr, 0, 0, 0); + CloseHandle(hToken); + } + ExitWindowsEx(EWX_SHUTDOWN, 0); + } +} diff --git a/reactos/dll/win32/shell32_new/dragdrophelper.cpp b/reactos/dll/win32/shell32_new/dragdrophelper.cpp new file mode 100644 index 00000000000..0b87d31819e --- /dev/null +++ b/reactos/dll/win32/shell32_new/dragdrophelper.cpp @@ -0,0 +1,72 @@ +/* + * file system folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "dragdrophelper.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/*********************************************************************** +* IDropTargetHelper implementation +*/ + +IDropTargetHelperImpl::IDropTargetHelperImpl() +{ +} + +IDropTargetHelperImpl::~IDropTargetHelperImpl() +{ +} + +HRESULT WINAPI IDropTargetHelperImpl::DragEnter (HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) +{ + FIXME ("(%p)->(%p %p %p 0x%08x)\n", this, hwndTarget, pDataObject, ppt, dwEffect); + return E_NOTIMPL; +} + +HRESULT WINAPI IDropTargetHelperImpl::DragLeave() +{ + FIXME ("(%p)->()\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI IDropTargetHelperImpl::DragOver(POINT *ppt, DWORD dwEffect) +{ + FIXME ("(%p)->(%p 0x%08x)\n", this, ppt, dwEffect); + return E_NOTIMPL; +} + +HRESULT WINAPI IDropTargetHelperImpl::Drop(IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) +{ + FIXME ("(%p)->(%p %p 0x%08x)\n", this, pDataObject, ppt, dwEffect); + return E_NOTIMPL; +} + +HRESULT WINAPI IDropTargetHelperImpl::Show(BOOL fShow) +{ + FIXME ("(%p)->(%u)\n", this, fShow); + return E_NOTIMPL; +} diff --git a/reactos/dll/win32/shell32_new/dragdrophelper.h b/reactos/dll/win32/shell32_new/dragdrophelper.h new file mode 100644 index 00000000000..c850bf69d14 --- /dev/null +++ b/reactos/dll/win32/shell32_new/dragdrophelper.h @@ -0,0 +1,53 @@ +/* + * file system folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _DRAGDROPHELPER_H_ +#define _DRAGDROPHELPER_H_ + +class IDropTargetHelperImpl : + public CComCoClass, + public CComObjectRootEx, + public IDropTargetHelper +{ +private: +public: + IDropTargetHelperImpl(); + ~IDropTargetHelperImpl(); + + //////// + virtual HRESULT WINAPI DragEnter (HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect); + virtual HRESULT WINAPI DragLeave(); + virtual HRESULT WINAPI DragOver(POINT *ppt, DWORD dwEffect); + virtual HRESULT WINAPI Drop(IDataObject* pDataObject, POINT* ppt, DWORD dwEffect); + virtual HRESULT WINAPI Show(BOOL fShow); + +DECLARE_REGISTRY_RESOURCEID(IDR_DRAGDROPHELPER) +DECLARE_NOT_AGGREGATABLE(IDropTargetHelperImpl) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(IDropTargetHelperImpl) + COM_INTERFACE_ENTRY_IID(IID_IDropTargetHelper, IDropTargetHelper) +END_COM_MAP() +}; + +#endif // _DRAGDROPHELPER_H_ diff --git a/reactos/dll/win32/shell32_new/drive.cpp b/reactos/dll/win32/shell32_new/drive.cpp new file mode 100644 index 00000000000..86039e05331 --- /dev/null +++ b/reactos/dll/win32/shell32_new/drive.cpp @@ -0,0 +1,1292 @@ +/* + * Shell Library Functions + * + * Copyright 2005 Johannes Anderwald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#define MAX_PROPERTY_SHEET_PAGE 32 + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +typedef enum +{ + HWPD_STANDARDLIST = 0, + HWPD_LARGELIST, + HWPD_MAX = HWPD_LARGELIST +} HWPAGE_DISPLAYMODE, *PHWPAGE_DISPLAYMODE; + +typedef +BOOLEAN +(NTAPI *INITIALIZE_FMIFS)( + IN PVOID hinstDll, + IN DWORD dwReason, + IN PVOID reserved +); +typedef +BOOLEAN +(NTAPI *QUERY_AVAILABLEFSFORMAT)( + IN DWORD Index, + IN OUT PWCHAR FileSystem, + OUT UCHAR* Major, + OUT UCHAR* Minor, + OUT BOOLEAN* LastestVersion +); +typedef +BOOLEAN +(NTAPI *ENABLEVOLUMECOMPRESSION)( + IN PWCHAR DriveRoot, + IN USHORT Compression +); + +typedef +VOID +(NTAPI *FORMAT_EX)( + IN PWCHAR DriveRoot, + IN FMIFS_MEDIA_FLAG MediaFlag, + IN PWCHAR Format, + IN PWCHAR Label, + IN BOOLEAN QuickFormat, + IN ULONG ClusterSize, + IN PFMIFSCALLBACK Callback +); + +typedef +VOID +(NTAPI *CHKDSK)( + IN PWCHAR DriveRoot, + IN PWCHAR Format, + IN BOOLEAN CorrectErrors, + IN BOOLEAN Verbose, + IN BOOLEAN CheckOnlyIfDirty, + IN BOOLEAN ScanDrive, + IN PVOID Unused2, + IN PVOID Unused3, + IN PFMIFSCALLBACK Callback +); + + +typedef struct +{ + WCHAR Drive; + UINT Options; + HMODULE hLibrary; + QUERY_AVAILABLEFSFORMAT QueryAvailableFileSystemFormat; + FORMAT_EX FormatEx; + ENABLEVOLUMECOMPRESSION EnableVolumeCompression; + CHKDSK Chkdsk; + UINT Result; +}FORMAT_DRIVE_CONTEXT, *PFORMAT_DRIVE_CONTEXT; + +BOOL InitializeFmifsLibrary(PFORMAT_DRIVE_CONTEXT pContext); +BOOL GetDefaultClusterSize(LPWSTR szFs, PDWORD pClusterSize, PULARGE_INTEGER TotalNumberOfBytes); +EXTERN_C HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj); +EXTERN_C HWND WINAPI +DeviceCreateHardwarePageEx(HWND hWndParent, + LPGUID lpGuids, + UINT uNumberOfGuids, + HWPAGE_DISPLAYMODE DisplayMode); + +HPROPSHEETPAGE SH_CreatePropertySheetPage(LPCSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle); + +#define DRIVE_PROPERTY_PAGES (3) + +static const GUID GUID_DEVCLASS_DISKDRIVE = {0x4d36e967L, 0xe325, 0x11ce, {0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}}; + + +VOID +GetDriveNameWithLetter(LPWSTR szText, UINT Length, WCHAR Drive) +{ + WCHAR szDrive[] = {'C',':','\\', 0}; + DWORD dwMaxComp, dwFileSys, TempLength = 0; + + szDrive[0] = Drive; + if (GetVolumeInformationW(szDrive, szText, Length, NULL, &dwMaxComp, &dwFileSys, NULL, 0)) + { + szText[Length-1] = L'\0'; + TempLength = wcslen(szText); + if (!TempLength) + { + /* load default volume label */ + TempLength = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2); + } + } + if (TempLength + 4 < Length) + { + szText[TempLength] = L' '; + szText[TempLength+1] = L'('; + szText[TempLength+2] = szDrive[0]; + szText[TempLength+3] = L')'; + TempLength +=4; + } + + if (TempLength < Length) + szText[TempLength] = L'\0'; + else + szText[Length-1] = L'\0'; +} + + +VOID +InitializeChkDskDialog(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szText[100]; + UINT Length; + SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pContext); + + Length = GetWindowTextW(hwndDlg, szText, sizeof(szText)/sizeof(WCHAR)); + + GetDriveNameWithLetter(&szText[Length +1], (sizeof(szText)/sizeof(WCHAR))-Length-1, pContext->Drive); + szText[Length] = L' '; + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + SetWindowText(hwndDlg, szText); +} + +HWND ChkdskDrvDialog = NULL; +BOOLEAN bChkdskSuccess = FALSE; + +BOOLEAN +NTAPI +ChkdskCallback( + IN CALLBACKCOMMAND Command, + IN ULONG SubAction, + IN PVOID ActionInfo) +{ + PDWORD Progress; + PBOOLEAN pSuccess; + switch(Command) + { + case PROGRESS: + Progress = (PDWORD)ActionInfo; + SendDlgItemMessageW(ChkdskDrvDialog, 14002, PBM_SETPOS, (WPARAM)*Progress, 0); + break; + case DONE: + pSuccess = (PBOOLEAN)ActionInfo; + bChkdskSuccess = (*pSuccess); + break; + + case VOLUMEINUSE: + case INSUFFICIENTRIGHTS: + case FSNOTSUPPORTED: + case CLUSTERSIZETOOSMALL: + bChkdskSuccess = FALSE; + FIXME("\n"); + break; + + default: + break; + } + + return TRUE; +} + +VOID +ChkDskNow(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + DWORD ClusterSize = 0, dwMaxComponentLength, FileSystemFlags; + WCHAR szFs[30]; + WCHAR szDrive[] = {'C',':','\\', 0}; + WCHAR szVolumeLabel[40]; + ULARGE_INTEGER TotalNumberOfFreeBytes, FreeBytesAvailableUser; + BOOLEAN bCorrectErrors = FALSE, bScanDrive = FALSE; + + szDrive[0] = pContext->Drive; + if(!GetVolumeInformationW(szDrive, szVolumeLabel, sizeof(szVolumeLabel)/sizeof(WCHAR), NULL, &dwMaxComponentLength, &FileSystemFlags, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + FIXME("failed to get drive fs type\n"); + return; + } + + if (!GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfFreeBytes, NULL)) + { + FIXME("failed to get drive space type\n"); + return; + } + + if (!GetDefaultClusterSize(szFs, &ClusterSize, &TotalNumberOfFreeBytes)) + { + FIXME("invalid cluster size\n"); + return; + } + + if (SendDlgItemMessageW(hwndDlg, 14000, BM_GETCHECK, 0, 0) == BST_CHECKED) + bCorrectErrors = TRUE; + + if (SendDlgItemMessageW(hwndDlg, 14001, BM_GETCHECK, 0, 0) == BST_CHECKED) + bScanDrive = TRUE; + + ChkdskDrvDialog = hwndDlg; + bChkdskSuccess = FALSE; + SendDlgItemMessageW(hwndDlg, 14002, PBM_SETRANGE, 0, MAKELPARAM(0, 100)); + pContext->Chkdsk(szDrive, szFs, bCorrectErrors, TRUE, FALSE, bScanDrive, NULL, NULL, ChkdskCallback); + + ChkdskDrvDialog = NULL; + pContext->Result = bChkdskSuccess; + bChkdskSuccess = FALSE; + +} + +INT_PTR +CALLBACK +ChkDskDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + PFORMAT_DRIVE_CONTEXT pContext; + switch(uMsg) + { + case WM_INITDIALOG: + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)lParam); + InitializeChkDskDialog(hwndDlg, (PFORMAT_DRIVE_CONTEXT)lParam); + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDCANCEL: + EndDialog(hwndDlg, 0); + break; + case IDOK: + pContext = (PFORMAT_DRIVE_CONTEXT) GetWindowLongPtr(hwndDlg, DWLP_USER); + ChkDskNow(hwndDlg, pContext); + break; + } + break; + } + + return FALSE; +} + + +static +ULONGLONG +GetFreeBytesShare(ULONGLONG TotalNumberOfFreeBytes, ULONGLONG TotalNumberOfBytes) +{ + ULONGLONG Temp; + + if (TotalNumberOfFreeBytes == 0LL) + { + return 0; + } + + Temp = TotalNumberOfBytes / 100; + if (Temp >= TotalNumberOfFreeBytes) + { + return 1; + } + else + { + return TotalNumberOfFreeBytes / Temp; + } +} + +static +void +PaintStaticControls(HWND hwndDlg, LPDRAWITEMSTRUCT drawItem) +{ + HBRUSH hBrush; + + if (drawItem->CtlID == 14013) + { + hBrush = CreateSolidBrush(RGB(0, 0, 255)); + if (hBrush) + { + FillRect(drawItem->hDC, &drawItem->rcItem, hBrush); + DeleteObject((HGDIOBJ)hBrush); + } + } + else if (drawItem->CtlID == 14014) + { + hBrush = CreateSolidBrush(RGB(255, 0, 255)); + if (hBrush) + { + FillRect(drawItem->hDC, &drawItem->rcItem, hBrush); + DeleteObject((HGDIOBJ)hBrush); + } + } + else if (drawItem->CtlID == 14015) + { + HBRUSH hBlueBrush; + HBRUSH hMagBrush; + RECT rect; + LONG horzsize; + LONGLONG Result; + WCHAR szBuffer[20]; + + hBlueBrush = CreateSolidBrush(RGB(0, 0, 255)); + hMagBrush = CreateSolidBrush(RGB(255, 0, 255)); + + SendDlgItemMessageW(hwndDlg, 14006, WM_GETTEXT, 20, (LPARAM)szBuffer); + Result = _wtoi(szBuffer); + + CopyRect(&rect, &drawItem->rcItem); + horzsize = rect.right - rect.left; + Result = (Result * horzsize) / 100; + + rect.right = drawItem->rcItem.right - Result; + FillRect(drawItem->hDC, &rect, hBlueBrush); + rect.left = rect.right; + rect.right = drawItem->rcItem.right; + FillRect(drawItem->hDC, &rect, hMagBrush); + DeleteObject(hBlueBrush); + DeleteObject(hMagBrush); + } +} + +static +void +InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive) +{ + WCHAR szVolumeName[MAX_PATH+1] = {0}; + DWORD MaxComponentLength = 0; + DWORD FileSystemFlags = 0; + WCHAR FileSystemName[MAX_PATH+1] = {0}; + WCHAR szFormat[50]; + WCHAR szBuffer[128]; + BOOL ret; + UINT DriveType; + ULARGE_INTEGER FreeBytesAvailable; + LARGE_INTEGER TotalNumberOfFreeBytes; + LARGE_INTEGER TotalNumberOfBytes; + + ret = GetVolumeInformationW(szDrive, szVolumeName, MAX_PATH+1, NULL, &MaxComponentLength, &FileSystemFlags, FileSystemName, MAX_PATH+1); + if (ret) + { + /* set volume label */ + SendDlgItemMessageW(hwndDlg, 14000, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szVolumeName); + + /* set filesystem type */ + SendDlgItemMessageW(hwndDlg, 14002, WM_SETTEXT, (WPARAM)NULL, (LPARAM)FileSystemName); + + } + + DriveType = GetDriveTypeW(szDrive); + if (DriveType == DRIVE_FIXED || DriveType == DRIVE_CDROM) + { + + if(GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable, (PULARGE_INTEGER)&TotalNumberOfBytes, (PULARGE_INTEGER)&TotalNumberOfFreeBytes)) + { + WCHAR szResult[128]; + LONGLONG Result; +#ifdef IOCTL_DISK_GET_LENGTH_INFO_IMPLEMENTED + HANDLE hVolume; + DWORD BytesReturned = 0; + + swprintf(szResult, L"\\\\.\\%c:", towupper(szDrive[0])); + hVolume = CreateFileW(szResult, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); + if (hVolume != INVALID_HANDLE_VALUE) + { + ret = DeviceIoControl(hVolume, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, (LPVOID)&TotalNumberOfBytes, sizeof(ULARGE_INTEGER), &BytesReturned, NULL); + if (ret && StrFormatByteSizeW(LengthInformation.Length.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR))) + SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult); + + CloseHandle(hVolume); + } + TRACE("szResult %s hVOlume %p ret %d LengthInformation %ul Bytesreturned %d\n", debugstr_w(szResult), hVolume, ret, LengthInformation.Length.QuadPart, BytesReturned); +#else + if (ret && StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR))) + SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult); +#endif + + if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR))) + SendDlgItemMessageW(hwndDlg, 14003, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult); + + if (StrFormatByteSizeW(FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR))) + SendDlgItemMessageW(hwndDlg, 14005, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult); + + Result = GetFreeBytesShare(TotalNumberOfFreeBytes.QuadPart, TotalNumberOfBytes.QuadPart); + /* set free bytes percentage */ + swprintf(szResult, L"%02d%%", Result); + SendDlgItemMessageW(hwndDlg, 14006, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); + /* store used share amount */ + Result = 100 - Result; + swprintf(szResult, L"%02d%%", Result); + SendDlgItemMessageW(hwndDlg, 14004, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); + if (DriveType == DRIVE_FIXED) + { + if (LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szBuffer, sizeof(szBuffer) / sizeof(WCHAR))) + SendDlgItemMessageW(hwndDlg, 14001, WM_SETTEXT, (WPARAM)0, (LPARAM)szBuffer); + } + else /* DriveType == DRIVE_CDROM) */ + { + if (LoadStringW(shell32_hInstance, IDS_DRIVE_CDROM, szBuffer, sizeof(szBuffer) / sizeof(WCHAR))) + SendDlgItemMessageW(hwndDlg, 14001, WM_SETTEXT, (WPARAM)0, (LPARAM)szBuffer); + } + } + } + /* set drive description */ + SendDlgItemMessageW(hwndDlg, 14009, WM_GETTEXT, (WPARAM)50, (LPARAM)szFormat); + swprintf(szBuffer, szFormat, szDrive); + SendDlgItemMessageW(hwndDlg, 14009, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szBuffer); +} + + +INT_PTR +CALLBACK +DriveGeneralDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + LPPROPSHEETPAGEW ppsp; + LPDRAWITEMSTRUCT drawItem; + STARTUPINFOW si; + PROCESS_INFORMATION pi; + WCHAR * lpstr; + WCHAR szPath[MAX_PATH]; + UINT length; + LPPSHNOTIFY lppsn; + + switch(uMsg) + { + case WM_INITDIALOG: + ppsp = (LPPROPSHEETPAGEW)lParam; + if (ppsp == NULL) + break; + lpstr = (WCHAR *)ppsp->lParam; + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)lpstr); + InitializeGeneralDriveDialog(hwndDlg, lpstr); + return TRUE; + case WM_DRAWITEM: + drawItem = (LPDRAWITEMSTRUCT)lParam; + if (drawItem->CtlID >= 14013 && drawItem->CtlID <= 14015) + { + PaintStaticControls(hwndDlg, drawItem); + return TRUE; + } + break; + case WM_COMMAND: + if (LOWORD(wParam) == 14010) /* Disk Cleanup */ + { + lpstr = (WCHAR*)GetWindowLongPtr(hwndDlg, DWLP_USER); + ZeroMemory( &si, sizeof(si) ); + si.cb = sizeof(si); + ZeroMemory( &pi, sizeof(pi) ); + if (!GetSystemDirectoryW(szPath, MAX_PATH)) + break; + wcscat(szPath, L"\\cleanmgr.exe /D "); + length = wcslen(szPath); + szPath[length] = lpstr[0]; + szPath[length+1] = L'\0'; + if (CreateProcessW(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + { + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + break; + } + case WM_NOTIFY: + lppsn = (LPPSHNOTIFY) lParam; + if (LOWORD(wParam) == 14000) + { + if (HIWORD(wParam) == EN_CHANGE) + { + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + } + break; + } + if (lppsn->hdr.code == PSN_APPLY) + { + lpstr = (LPWSTR)GetWindowLongPtr(hwndDlg, DWLP_USER); + if (lpstr && SendDlgItemMessageW(hwndDlg, 14000, WM_GETTEXT, sizeof(szPath)/sizeof(WCHAR), (LPARAM)szPath)) + { + szPath[(sizeof(szPath)/sizeof(WCHAR))-1] = L'\0'; + SetVolumeLabelW(lpstr, szPath); + } + SetWindowLongPtr( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); + return TRUE; + } + break; + + default: + break; + } + + + return FALSE; +} + +INT_PTR +CALLBACK +DriveExtraDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + STARTUPINFOW si; + PROCESS_INFORMATION pi; + WCHAR szPath[MAX_PATH + 10]; + WCHAR szArg[MAX_PATH]; + WCHAR * szDrive; + LPPROPSHEETPAGEW ppsp; + DWORD dwSize; + FORMAT_DRIVE_CONTEXT Context; + + switch (uMsg) + { + case WM_INITDIALOG: + ppsp = (LPPROPSHEETPAGEW)lParam; + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)ppsp->lParam); + return TRUE; + case WM_COMMAND: + ZeroMemory( &si, sizeof(si) ); + si.cb = sizeof(si); + ZeroMemory( &pi, sizeof(pi) ); + + szDrive = (WCHAR*)GetWindowLongPtr(hwndDlg, DWLP_USER); + switch(LOWORD(wParam)) + { + case 14000: + if (InitializeFmifsLibrary(&Context)) + { + Context.Drive = szDrive[0]; + DialogBoxParamW(shell32_hInstance, L"CHKDSK_DLG", hwndDlg, ChkDskDlg, (LPARAM)&Context); + FreeLibrary(Context.hLibrary); + } + break; + case 14001: + dwSize = sizeof(szPath); + if (RegGetValueW(HKEY_LOCAL_MACHINE, + L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\DefragPath", + NULL, + RRF_RT_REG_EXPAND_SZ, + NULL, + (PVOID)szPath, + &dwSize) == S_OK) + { + swprintf(szArg, szPath, szDrive[0]); + if (!GetSystemDirectoryW(szPath, MAX_PATH)) + break; + szDrive = PathAddBackslashW(szPath); + if (!szDrive) + break; + + wcscat(szDrive, L"mmc.exe"); + if (CreateProcessW(szPath, szArg, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + { + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + } + break; + case 14002: + dwSize = sizeof(szPath); + if (RegGetValueW(HKEY_LOCAL_MACHINE, + L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\BackupPath", + NULL, + RRF_RT_REG_EXPAND_SZ, + NULL, + (PVOID)szPath, + &dwSize) == S_OK) + { + if (CreateProcessW(szPath, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + { + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + } + } + break; + } + return FALSE; +} + +INT_PTR +CALLBACK +DriveHardwareDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + GUID Guids[1]; + Guids[0] = GUID_DEVCLASS_DISKDRIVE; + + UNREFERENCED_PARAMETER(lParam); + UNREFERENCED_PARAMETER(wParam); + + switch(uMsg) + { + case WM_INITDIALOG: + /* create the hardware page */ + DeviceCreateHardwarePageEx(hwndDlg, + Guids, + sizeof(Guids) / sizeof(Guids[0]), + HWPD_STANDARDLIST); + break; + } + + return FALSE; +} + +static +const +struct +{ + LPCSTR resname; + DLGPROC dlgproc; + UINT DriveType; +} PropPages[] = +{ + { "DRIVE_GENERAL_DLG", DriveGeneralDlg, -1}, + { "DRIVE_EXTRA_DLG", DriveExtraDlg, DRIVE_FIXED}, + { "DRIVE_HARDWARE_DLG", DriveHardwareDlg, -1}, +}; + +HRESULT +CALLBACK +AddPropSheetPageProc(HPROPSHEETPAGE hpage, LPARAM lParam) +{ + PROPSHEETHEADER *ppsh = (PROPSHEETHEADER *)lParam; + if (ppsh != NULL && ppsh->nPages < MAX_PROPERTY_SHEET_PAGE) + { + ppsh->phpage[ppsh->nPages++] = hpage; + return TRUE; + } + return FALSE; +} + +BOOL +SH_ShowDriveProperties(WCHAR * drive, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST * apidl) +{ + HPSXA hpsx = NULL; + HPROPSHEETPAGE hpsp[MAX_PROPERTY_SHEET_PAGE]; + PROPSHEETHEADERW psh; + BOOL ret; + UINT i; + WCHAR szName[MAX_PATH+6]; + DWORD dwMaxComponent, dwFileSysFlags; + CComPtr pDataObj; + UINT DriveType; + + ZeroMemory(&psh, sizeof(PROPSHEETHEADERW)); + psh.dwSize = sizeof(PROPSHEETHEADERW); + //psh.dwFlags = PSH_USECALLBACK | PSH_PROPTITLE; + psh.hwndParent = NULL; + psh.nStartPage = 0; + psh.phpage = hpsp; + + if (GetVolumeInformationW(drive, szName, sizeof(szName)/sizeof(WCHAR), NULL, &dwMaxComponent, + &dwFileSysFlags, NULL, 0)) + { + psh.pszCaption = szName; + psh.dwFlags |= PSH_PROPTITLE; + if (!wcslen(szName)) + { + /* FIXME + * check if disk is a really a local hdd + */ + i = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szName, sizeof(szName)/sizeof(WCHAR)-6); + if (i > 0 && i < (sizeof(szName)/sizeof(WCHAR)) - 6) + { + szName[i] = L' '; + szName[i+1] = L'('; + wcscpy(&szName[i+2], drive); + szName[i+4] = L')'; + szName[i+5] = L'\0'; + } + } + } + + DriveType = GetDriveTypeW(drive); + for (i = 0; i < DRIVE_PROPERTY_PAGES; i++) + { + if (PropPages[i].DriveType == (UINT)-1 || (PropPages[i].DriveType != (UINT)-1 && PropPages[i].DriveType == DriveType)) + { + HPROPSHEETPAGE hprop = SH_CreatePropertySheetPage(PropPages[i].resname, PropPages[i].dlgproc, (LPARAM)drive, NULL); + if (hprop) + { + hpsp[psh.nPages] = hprop; + psh.nPages++; + } + } + } + + if (SHCreateDataObject(pidlFolder, 1, apidl, NULL, IID_IDataObject, (void **)&pDataObj) == S_OK) + { + hpsx = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, L"Drive", MAX_PROPERTY_SHEET_PAGE-DRIVE_PROPERTY_PAGES, pDataObj); + if (hpsx) + { + SHAddFromPropSheetExtArray(hpsx, (LPFNADDPROPSHEETPAGE)AddPropSheetPageProc, (LPARAM)&psh); + } + } + + ret = PropertySheetW(&psh); + + if (hpsx) + SHDestroyPropSheetExtArray(hpsx); + + if (ret < 0) + return FALSE; + else + return TRUE; +} + +BOOL +GetDefaultClusterSize(LPWSTR szFs, PDWORD pClusterSize, PULARGE_INTEGER TotalNumberOfBytes) +{ + DWORD ClusterSize; + + if (!wcsicmp(szFs, L"FAT16") || + !wcsicmp(szFs, L"FAT")) //REACTOS HACK + { + if (TotalNumberOfBytes->QuadPart <= (16 * 1024 * 1024)) + ClusterSize = 2048; + else if (TotalNumberOfBytes->QuadPart <= (32 * 1024 * 1024)) + ClusterSize = 512; + else if (TotalNumberOfBytes->QuadPart <= (64 * 1024 * 1024)) + ClusterSize = 1024; + else if (TotalNumberOfBytes->QuadPart <= (128 * 1024 * 1024)) + ClusterSize = 2048; + else if (TotalNumberOfBytes->QuadPart <= (256 * 1024 * 1024)) + ClusterSize = 4096; + else if (TotalNumberOfBytes->QuadPart <= (512 * 1024 * 1024)) + ClusterSize = 8192; + else if (TotalNumberOfBytes->QuadPart <= (1024 * 1024 * 1024)) + ClusterSize = 16384; + else if (TotalNumberOfBytes->QuadPart <= (2048LL * 1024LL * 1024LL)) + ClusterSize = 32768; + else if (TotalNumberOfBytes->QuadPart <= (4096LL * 1024LL * 1024LL)) + ClusterSize = 8192; + else + return FALSE; + } + else if (!wcsicmp(szFs, L"FAT32")) + { + if (TotalNumberOfBytes->QuadPart <=(64 * 1024 * 1024)) + ClusterSize = 512; + else if (TotalNumberOfBytes->QuadPart <= (128 * 1024 * 1024)) + ClusterSize = 1024; + else if (TotalNumberOfBytes->QuadPart <= (256 * 1024 * 1024)) + ClusterSize = 2048; + else if (TotalNumberOfBytes->QuadPart <= (8192LL * 1024LL * 1024LL)) + ClusterSize = 2048; + else if (TotalNumberOfBytes->QuadPart <= (16384LL * 1024LL * 1024LL)) + ClusterSize = 8192; + else if (TotalNumberOfBytes->QuadPart <= (32768LL * 1024LL * 1024LL)) + ClusterSize = 16384; + else + return FALSE; + } + else if (!wcsicmp(szFs, L"NTFS")) + { + if (TotalNumberOfBytes->QuadPart <=(512 * 1024 * 1024)) + ClusterSize = 512; + else if (TotalNumberOfBytes->QuadPart <= (1024 * 1024 * 1024)) + ClusterSize = 1024; + else if (TotalNumberOfBytes->QuadPart <= (2048LL * 1024LL * 1024LL)) + ClusterSize = 2048; + else + ClusterSize = 2048; + } + else + return FALSE; + + *pClusterSize = ClusterSize; + return TRUE; +} + + +VOID +InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szFs[100] = {0}; + WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; + INT iSelIndex; + ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes; + DWORD ClusterSize; + LRESULT lIndex; + HWND hDlgCtrl; + + hDlgCtrl = GetDlgItem(hwndDlg, 28677); + iSelIndex = SendMessage(hDlgCtrl, CB_GETCURSEL, 0, 0); + if (iSelIndex == CB_ERR) + return; + + if (SendMessageW(hDlgCtrl, CB_GETLBTEXT, iSelIndex, (LPARAM)szFs) == CB_ERR) + return; + + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + szDrive[0] = pContext->Drive + 'A'; + + if (!GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL)) + return; + + if (!wcsicmp(szFs, L"FAT16") || + !wcsicmp(szFs, L"FAT")) //REACTOS HACK + { + if (!GetDefaultClusterSize(szFs, &ClusterSize, &TotalNumberOfBytes)) + { + TRACE("FAT16 is not supported on hdd larger than 4G current %lu\n", TotalNumberOfBytes.QuadPart); + SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); + return; + } + + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); + } + } + else if (!wcsicmp(szFs, L"FAT32")) + { + if (!GetDefaultClusterSize(szFs, &ClusterSize, &TotalNumberOfBytes)) + { + TRACE("FAT32 is not supported on hdd larger than 32G current %lu\n", TotalNumberOfBytes.QuadPart); + SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); + return; + } + + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); + } + } + else if (!wcsicmp(szFs, L"NTFS")) + { + if (!GetDefaultClusterSize(szFs, &ClusterSize, &TotalNumberOfBytes)) + { + TRACE("NTFS is not supported on hdd larger than 2TB current %lu\n", TotalNumberOfBytes.QuadPart); + SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); + return; + } + + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); + } + ClusterSize = 512; + for (lIndex = 0; lIndex < 4; lIndex++) + { + TotalNumberOfBytes.QuadPart = ClusterSize; + if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + } + ClusterSize *= 2; + } + } + else + { + FIXME("unknown fs\n"); + SendDlgItemMessageW(hwndDlg, 28680, CB_RESETCONTENT, iSelIndex, 0); + return; + } +} + +VOID +InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szText[120]; + WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; + WCHAR szFs[30] = {0}; + INT Length, TempLength; + DWORD dwSerial, dwMaxComp, dwFileSys; + ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes; + DWORD dwIndex, dwDefault; + UCHAR uMinor, uMajor; + BOOLEAN Latest; + HWND hDlgCtrl; + + Length = GetWindowTextW(hwndDlg, szText, sizeof(szText)/sizeof(WCHAR)); + if (Length < 0) + Length = 0; + szDrive[0] = pContext->Drive + L'A'; + if (GetVolumeInformationW(szDrive, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2, &dwSerial, &dwMaxComp, &dwFileSys, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + szText[Length] = L' '; + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + TempLength = wcslen(&szText[Length+1]); + if (!TempLength) + { + /* load default volume label */ + TempLength = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2); + } + else + { + /* set volume label */ + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + SendDlgItemMessageW(hwndDlg, 28679, WM_SETTEXT, 0, (LPARAM)&szText[Length+1]); + } + Length += TempLength + 1; + } + + if ((DWORD)Length + 4 < (sizeof(szText)/sizeof(WCHAR))) + { + szText[Length] = L' '; + szText[Length+1] = L'('; + szText[Length+2] = szDrive[0]; + szText[Length+3] = L')'; + Length +=4; + } + + if ((DWORD)Length < (sizeof(szText)/sizeof(WCHAR))) + szText[Length] = L'\0'; + else + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + + /* set window text */ + SetWindowTextW(hwndDlg, szText); + + if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL)) + { + if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szText, sizeof(szText)/sizeof(WCHAR))) + { + /* add drive capacity */ + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + SendDlgItemMessageW(hwndDlg, 28673, CB_ADDSTRING, 0, (LPARAM)szText); + SendDlgItemMessageW(hwndDlg, 28673, CB_SETCURSEL, 0, (LPARAM)0); + } + } + + if (pContext->Options & SHFMT_OPT_FULL) + { + /* check quick format button */ + SendDlgItemMessageW(hwndDlg, 28674, BM_SETCHECK, BST_CHECKED, 0); + } + + /* enumerate all available filesystems */ + dwIndex = 0; + dwDefault = 0; + hDlgCtrl = GetDlgItem(hwndDlg, 28677); + + while(pContext->QueryAvailableFileSystemFormat(dwIndex, szText, &uMajor, &uMinor, &Latest)) + { + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + if (!wcsicmp(szText, szFs)) + dwDefault = dwIndex; + + SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szText); + dwIndex++; + } + + if (!dwIndex) + { + ERR("no filesystem providers\n"); + return; + } + + /* select default filesys */ + SendMessageW(hDlgCtrl, CB_SETCURSEL, dwDefault, 0); + /* setup cluster combo */ + InsertDefaultClusterSizeForFs(hwndDlg, pContext); + /* hide progress control */ + ShowWindow(GetDlgItem(hwndDlg, 28678), SW_HIDE); +} + +HWND FormatDrvDialog = NULL; +BOOLEAN bSuccess = FALSE; + + +BOOLEAN +NTAPI +FormatExCB( + IN CALLBACKCOMMAND Command, + IN ULONG SubAction, + IN PVOID ActionInfo) +{ + PDWORD Progress; + PBOOLEAN pSuccess; + switch(Command) + { + case PROGRESS: + Progress = (PDWORD)ActionInfo; + SendDlgItemMessageW(FormatDrvDialog, 28678, PBM_SETPOS, (WPARAM)*Progress, 0); + break; + case DONE: + pSuccess = (PBOOLEAN)ActionInfo; + bSuccess = (*pSuccess); + break; + + case VOLUMEINUSE: + case INSUFFICIENTRIGHTS: + case FSNOTSUPPORTED: + case CLUSTERSIZETOOSMALL: + bSuccess = FALSE; + FIXME("\n"); + break; + + default: + break; + } + + return TRUE; +} + + + + + +VOID +FormatDrive(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; + WCHAR szFileSys[40] = {0}; + WCHAR szLabel[40] = {0}; + INT iSelIndex; + UINT Length; + HWND hDlgCtrl; + BOOL QuickFormat; + DWORD ClusterSize; + + /* set volume path */ + szDrive[0] = pContext->Drive; + + /* get filesystem */ + hDlgCtrl = GetDlgItem(hwndDlg, 28677); + iSelIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0); + if (iSelIndex == CB_ERR) + { + FIXME("\n"); + return; + } + Length = SendMessageW(hDlgCtrl, CB_GETLBTEXTLEN, iSelIndex, 0); + if ((int)Length == CB_ERR || Length + 1> sizeof(szFileSys)/sizeof(WCHAR)) + { + FIXME("\n"); + return; + } + + /* retrieve the file system */ + SendMessageW(hDlgCtrl, CB_GETLBTEXT, iSelIndex, (LPARAM)szFileSys); + szFileSys[(sizeof(szFileSys)/sizeof(WCHAR))-1] = L'\0'; + + /* retrieve the volume label */ + hDlgCtrl = GetWindow(hwndDlg, 28679); + Length = SendMessageW(hDlgCtrl, WM_GETTEXTLENGTH, 0, 0); + if (Length + 1 > sizeof(szLabel)/sizeof(WCHAR)) + { + FIXME("\n"); + return; + } + SendMessageW(hDlgCtrl, WM_GETTEXT, sizeof(szLabel)/sizeof(WCHAR), (LPARAM)szLabel); + szLabel[(sizeof(szLabel)/sizeof(WCHAR))-1] = L'\0'; + + /* check for quickformat */ + if (SendDlgItemMessageW(hwndDlg, 28674, BM_GETCHECK, 0, 0) == BST_CHECKED) + QuickFormat = TRUE; + else + QuickFormat = FALSE; + + /* get the cluster size */ + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + iSelIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0); + if (iSelIndex == CB_ERR) + { + FIXME("\n"); + return; + } + ClusterSize = SendMessageW(hDlgCtrl, CB_GETITEMDATA, iSelIndex, 0); + if ((int)ClusterSize == CB_ERR) + { + FIXME("\n"); + return; + } + + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + ShowWindow(hDlgCtrl, SW_SHOW); + SendMessageW(hDlgCtrl, PBM_SETRANGE, 0, MAKELPARAM(0, 100)); + bSuccess = FALSE; + + /* FIXME + * will cause display problems + * when performing more than one format + */ + FormatDrvDialog = hwndDlg; + + pContext->FormatEx(szDrive, + FMIFS_HARDDISK, /* FIXME */ + szFileSys, + szLabel, + QuickFormat, + ClusterSize, + FormatExCB); + + ShowWindow(hDlgCtrl, SW_HIDE); + FormatDrvDialog = NULL; + if (!bSuccess) + { + pContext->Result = SHFMT_ERROR; + } + else if (QuickFormat) + { + pContext->Result = SHFMT_OPT_FULL; + } + else + { + pContext->Result = FALSE; + } +} + + +BOOL +CALLBACK +FormatDriveDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + PFORMAT_DRIVE_CONTEXT pContext; + + switch(uMsg) + { + case WM_INITDIALOG: + InitializeFormatDriveDlg(hwndDlg, (PFORMAT_DRIVE_CONTEXT)lParam); + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)lParam); + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDOK: + pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + FormatDrive(hwndDlg, pContext); + break; + case IDCANCEL: + pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + EndDialog(hwndDlg, pContext->Result); + break; + case 28677: // filesystem combo + if (HIWORD(wParam) == CBN_SELENDOK) + { + pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + InsertDefaultClusterSizeForFs(hwndDlg, pContext); + } + break; + } + } + return FALSE; +} + + +BOOL +InitializeFmifsLibrary(PFORMAT_DRIVE_CONTEXT pContext) +{ + INITIALIZE_FMIFS InitFmifs; + BOOLEAN ret; + HMODULE hLibrary; + + hLibrary = pContext->hLibrary = LoadLibraryW(L"fmifs.dll"); + if(!hLibrary) + { + ERR("failed to load fmifs.dll\n"); + return FALSE; + } + + InitFmifs = (INITIALIZE_FMIFS)GetProcAddress(hLibrary, "InitializeFmIfs"); + if (!InitFmifs) + { + ERR("InitializeFmIfs export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + ret = (*InitFmifs)(NULL, DLL_PROCESS_ATTACH, NULL); + if (!ret) + { + ERR("fmifs failed to initialize\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->QueryAvailableFileSystemFormat = (QUERY_AVAILABLEFSFORMAT)GetProcAddress(hLibrary, "QueryAvailableFileSystemFormat"); + if (!pContext->QueryAvailableFileSystemFormat) + { + ERR("QueryAvailableFileSystemFormat export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->FormatEx = (FORMAT_EX) GetProcAddress(hLibrary, "FormatEx"); + if (!pContext->FormatEx) + { + ERR("FormatEx export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->EnableVolumeCompression = (ENABLEVOLUMECOMPRESSION) GetProcAddress(hLibrary, "EnableVolumeCompression"); + if (!pContext->FormatEx) + { + ERR("EnableVolumeCompression export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->Chkdsk = (CHKDSK) GetProcAddress(hLibrary, "Chkdsk"); + if (!pContext->Chkdsk) + { + ERR("Chkdsk export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + return TRUE; +} + +/************************************************************************* + * SHFormatDrive (SHELL32.@) + */ + +DWORD +WINAPI +SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options) +{ + FORMAT_DRIVE_CONTEXT Context; + int result; + + TRACE("%p, 0x%08x, 0x%08x, 0x%08x - stub\n", hwnd, drive, fmtID, options); + + if (!InitializeFmifsLibrary(&Context)) + { + ERR("failed to initialize fmifs\n"); + return SHFMT_NOFORMAT; + } + + Context.Drive = drive; + Context.Options = options; + + result = DialogBoxParamW(shell32_hInstance, L"FORMAT_DLG", hwnd, FormatDriveDlg, (LPARAM)&Context); + + FreeLibrary(Context.hLibrary); + return result; +} + + diff --git a/reactos/dll/win32/shell32_new/enumidlist.cpp b/reactos/dll/win32/shell32_new/enumidlist.cpp new file mode 100644 index 00000000000..abe2e02a0d3 --- /dev/null +++ b/reactos/dll/win32/shell32_new/enumidlist.cpp @@ -0,0 +1,299 @@ +/* + * IEnumIDList + * + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +IEnumIDListImpl::IEnumIDListImpl() +{ + mpFirst = NULL; + mpLast = NULL; + mpCurrent = NULL; +} + +IEnumIDListImpl::~IEnumIDListImpl() +{ +} + +/************************************************************************** + * AddToEnumList() + */ +BOOL IEnumIDListImpl::AddToEnumList(LPITEMIDLIST pidl) +{ + ENUMLIST *pNew; + + TRACE("(%p)->(pidl=%p)\n", this, pidl); + + if (!pidl) + return FALSE; + + pNew = (ENUMLIST *)SHAlloc(sizeof(ENUMLIST)); + if (pNew) + { + /*set the next pointer */ + pNew->pNext = NULL; + pNew->pidl = pidl; + + /*is This the first item in the list? */ + if (!mpFirst) + { + mpFirst = pNew; + mpCurrent = pNew; + } + + if (mpLast) + { + /*add the new item to the end of the list */ + mpLast->pNext = pNew; + } + + /*update the last item pointer */ + mpLast = pNew; + TRACE("-- (%p)->(first=%p, last=%p)\n", this, mpFirst, mpLast); + return TRUE; + } + return FALSE; +} + +/************************************************************************** +* DeleteList() +*/ +BOOL IEnumIDListImpl::DeleteList() +{ + ENUMLIST *pDelete; + + TRACE("(%p)->()\n", this); + + while (mpFirst) + { + pDelete = mpFirst; + mpFirst = pDelete->pNext; + SHFree(pDelete->pidl); + SHFree(pDelete); + } + mpFirst = NULL; + mpLast = NULL; + mpCurrent = NULL; + return TRUE; +} + +/************************************************************************** + * HasItemWithCLSID() + */ +BOOL IEnumIDListImpl::HasItemWithCLSID(LPITEMIDLIST pidl) +{ + ENUMLIST *pCur; + REFIID refid = *_ILGetGUIDPointer(pidl); + + pCur = mpFirst; + + while(pCur) + { + LPGUID curid = _ILGetGUIDPointer(pCur->pidl); + if (curid && IsEqualGUID(*curid, refid)) + { + return TRUE; + } + pCur = pCur->pNext; + } + return FALSE; +} + + +/************************************************************************** + * CreateFolderEnumList() + */ +BOOL IEnumIDListImpl::CreateFolderEnumList( + LPCWSTR lpszPath, + DWORD dwFlags) +{ + LPITEMIDLIST pidl=NULL; + WIN32_FIND_DATAW stffile; + HANDLE hFile; + WCHAR szPath[MAX_PATH]; + BOOL succeeded = TRUE; + static const WCHAR stars[] = { '*','.','*',0 }; + static const WCHAR dot[] = { '.',0 }; + static const WCHAR dotdot[] = { '.','.',0 }; + + TRACE("(%p)->(path=%s flags=0x%08x)\n", this, debugstr_w(lpszPath), dwFlags); + + if(!lpszPath || !lpszPath[0]) return FALSE; + + wcscpy(szPath, lpszPath); + PathAddBackslashW(szPath); + wcscat(szPath,stars); + + hFile = FindFirstFileW(szPath,&stffile); + if ( hFile != INVALID_HANDLE_VALUE ) + { + BOOL findFinished = FALSE; + + do + { + if ( !(stffile.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) + || (dwFlags & SHCONTF_INCLUDEHIDDEN) ) + { + if ( (stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && + dwFlags & SHCONTF_FOLDERS && + strcmpW(stffile.cFileName, dot) && strcmpW(stffile.cFileName, dotdot)) + { + pidl = _ILCreateFromFindDataW(&stffile); + succeeded = succeeded && AddToEnumList(pidl); + } + else if (!(stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + && dwFlags & SHCONTF_NONFOLDERS) + { + pidl = _ILCreateFromFindDataW(&stffile); + succeeded = succeeded && AddToEnumList(pidl); + } + } + if (succeeded) + { + if (!FindNextFileW(hFile, &stffile)) + { + if (GetLastError() == ERROR_NO_MORE_FILES) + findFinished = TRUE; + else + succeeded = FALSE; + } + } + } while (succeeded && !findFinished); + FindClose(hFile); + } + return succeeded; +} + +/************************************************************************** + * IEnumIDList_fnNext + */ + +HRESULT WINAPI IEnumIDListImpl::Next( + ULONG celt, + LPITEMIDLIST * rgelt, + ULONG *pceltFetched) +{ + ULONG i; + HRESULT hr = S_OK; + LPITEMIDLIST temp; + + TRACE("(%p)->(%d,%p, %p)\n", this, celt, rgelt, pceltFetched); + +/* It is valid to leave pceltFetched NULL when celt is 1. Some of explorer's + * subsystems actually use it (and so may a third party browser) + */ + if(pceltFetched) + *pceltFetched = 0; + + *rgelt=0; + + if(celt > 1 && !pceltFetched) + { return E_INVALIDARG; + } + + if(celt > 0 && !mpCurrent) + { return S_FALSE; + } + + for(i = 0; i < celt; i++) + { if(!mpCurrent) + break; + + temp = ILClone(mpCurrent->pidl); + rgelt[i] = temp; + mpCurrent = mpCurrent->pNext; + } + if(pceltFetched) + { *pceltFetched = i; + } + + return hr; +} + +/************************************************************************** +* IEnumIDList_fnSkip +*/ +HRESULT WINAPI IEnumIDListImpl::Skip( + ULONG celt) +{ + DWORD dwIndex; + HRESULT hr = S_OK; + + TRACE("(%p)->(%u)\n", this, celt); + + for(dwIndex = 0; dwIndex < celt; dwIndex++) + { if(!mpCurrent) + { hr = S_FALSE; + break; + } + mpCurrent = mpCurrent->pNext; + } + return hr; +} + +/************************************************************************** +* IEnumIDList_fnReset +*/ +HRESULT WINAPI IEnumIDListImpl::Reset() +{ + TRACE("(%p)\n", this); + mpCurrent = mpFirst; + return S_OK; +} + +/************************************************************************** +* IEnumIDList_fnClone +*/ +HRESULT WINAPI IEnumIDListImpl::Clone(LPENUMIDLIST *ppenum) +{ + TRACE("(%p)->() to (%p)->() E_NOTIMPL\n", this, ppenum); + return E_NOTIMPL; +} + +/************************************************************************** + * IEnumIDList_Folder_Constructor + * + */ +HRESULT IEnumIDList_Constructor(IEnumIDList **enumerator) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + if (enumerator == NULL) + return E_POINTER; + *enumerator = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + *enumerator = result.Detach (); + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/enumidlist.h b/reactos/dll/win32/shell32_new/enumidlist.h new file mode 100644 index 00000000000..b68265acd29 --- /dev/null +++ b/reactos/dll/win32/shell32_new/enumidlist.h @@ -0,0 +1,54 @@ +/* + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ +#ifndef __ENUMIDLIST_H__ +#define __ENUMIDLIST_H__ + +#include "shlobj.h" + +struct ENUMLIST +{ + ENUMLIST *pNext; + LPITEMIDLIST pidl; +}; + +class IEnumIDListImpl : + public CComObjectRootEx, + public IEnumIDList +{ +private: + ENUMLIST *mpFirst; + ENUMLIST *mpLast; + ENUMLIST *mpCurrent; +public: + IEnumIDListImpl(); + ~IEnumIDListImpl(); + BOOL AddToEnumList(LPITEMIDLIST pidl); + BOOL DeleteList(); + BOOL HasItemWithCLSID(LPITEMIDLIST pidl); + BOOL CreateFolderEnumList(LPCWSTR lpszPath, DWORD dwFlags); + + // *** IEnumIDList methods *** + virtual HRESULT STDMETHODCALLTYPE Next(ULONG celt, LPITEMIDLIST *rgelt, ULONG *pceltFetched); + virtual HRESULT STDMETHODCALLTYPE Skip(ULONG celt); + virtual HRESULT STDMETHODCALLTYPE Reset(); + virtual HRESULT STDMETHODCALLTYPE Clone(IEnumIDList **ppenum); + +BEGIN_COM_MAP(IEnumIDListImpl) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +#endif /* ndef __ENUMIDLIST_H__ */ diff --git a/reactos/dll/win32/shell32_new/extracticon.cpp b/reactos/dll/win32/shell32_new/extracticon.cpp new file mode 100644 index 00000000000..7f2daa09686 --- /dev/null +++ b/reactos/dll/win32/shell32_new/extracticon.cpp @@ -0,0 +1,362 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Registry namespace extension + * FILE: dll/win32/shell32/extracticon.c + * PURPOSE: Icon extraction + * + * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.org) + */ + +#include +#include +#include +#include +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +struct IconLocation +{ + LPWSTR file; + UINT index; +}; + +class IconExtraction : + public CComObjectRootEx, + public IDefaultExtractIconInit, + public IExtractIconW, + public IExtractIconA, + public IPersistFile +{ +private: + UINT flags; + struct IconLocation defaultIcon; + struct IconLocation normalIcon; + struct IconLocation openIcon; + struct IconLocation shortcutIcon; +public: + IconExtraction(); + ~IconExtraction(); + + // IDefaultExtractIconInit + virtual HRESULT STDMETHODCALLTYPE SetDefaultIcon(LPCWSTR pszFile, int iIcon); + virtual HRESULT STDMETHODCALLTYPE SetFlags(UINT uFlags); + virtual HRESULT STDMETHODCALLTYPE SetKey(HKEY hkey); + virtual HRESULT STDMETHODCALLTYPE SetNormalIcon(LPCWSTR pszFile, int iIcon); + virtual HRESULT STDMETHODCALLTYPE SetOpenIcon(LPCWSTR pszFile, int iIcon); + virtual HRESULT STDMETHODCALLTYPE SetShortcutIcon(LPCWSTR pszFile, int iIcon); + + // IExtractIconW + virtual HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags); + virtual HRESULT STDMETHODCALLTYPE Extract(LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); + + // IExtractIconA + virtual HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, LPSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags); + virtual HRESULT STDMETHODCALLTYPE Extract(LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); + + // IPersist + virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID); + virtual HRESULT STDMETHODCALLTYPE IsDirty(); + + // IPersistFile + virtual HRESULT STDMETHODCALLTYPE Load(LPCOLESTR pszFileName, DWORD dwMode); + virtual HRESULT STDMETHODCALLTYPE Save(LPCOLESTR pszFileName, BOOL fRemember); + virtual HRESULT STDMETHODCALLTYPE SaveCompleted(LPCOLESTR pszFileName); + virtual HRESULT STDMETHODCALLTYPE GetCurFile(LPOLESTR *ppszFileName); + +BEGIN_COM_MAP(IconExtraction) + COM_INTERFACE_ENTRY_IID(IID_IDefaultExtractIconInit, IDefaultExtractIconInit) + COM_INTERFACE_ENTRY_IID(IID_IExtractIconW, IExtractIconW) + COM_INTERFACE_ENTRY_IID(IID_IExtractIconA, IExtractIconA) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) + COM_INTERFACE_ENTRY_IID(IID_IPersistFile, IPersistFile) +END_COM_MAP() +}; + +VOID DuplicateString( + LPCWSTR Source, + LPWSTR *Destination) +{ + SIZE_T cb; + + if (*Destination) + CoTaskMemFree(*Destination); + + cb = (wcslen(Source) + 1) * sizeof(WCHAR); + *Destination = (LPWSTR)CoTaskMemAlloc(cb); + if (!*Destination) + return; + CopyMemory(*Destination, Source, cb); +} + +IconExtraction::IconExtraction() +{ + flags = 0; + memset(&defaultIcon, 0, sizeof(defaultIcon)); + memset(&normalIcon, 0, sizeof(normalIcon)); + memset(&openIcon, 0, sizeof(openIcon)); + memset(&shortcutIcon, 0, sizeof(shortcutIcon)); +} + +IconExtraction::~IconExtraction() +{ + if (defaultIcon.file) CoTaskMemFree(defaultIcon.file); + if (normalIcon.file) CoTaskMemFree(normalIcon.file); + if (openIcon.file) CoTaskMemFree(openIcon.file); + if (shortcutIcon.file) CoTaskMemFree(shortcutIcon.file); +} + +HRESULT STDMETHODCALLTYPE IconExtraction::SetDefaultIcon( + LPCWSTR pszFile, + int iIcon) +{ + TRACE("(%p, %s, %d)\n", this, debugstr_w(pszFile), iIcon); + + DuplicateString(pszFile, &defaultIcon.file); + if (!defaultIcon.file) + return E_OUTOFMEMORY; + defaultIcon.index = iIcon; + return S_OK; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::SetFlags( + UINT uFlags) +{ + TRACE("(%p, 0x%x)\n", this, uFlags); + + flags = uFlags; + return S_OK; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::SetKey( + HKEY hkey) +{ + FIXME("(%p, %p)\n", this, hkey); + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::SetNormalIcon( + LPCWSTR pszFile, + int iIcon) +{ + TRACE("(%p, %s, %d)\n", this, debugstr_w(pszFile), iIcon); + + DuplicateString(pszFile, &normalIcon.file); + if (!normalIcon.file) + return E_OUTOFMEMORY; + normalIcon.index = iIcon; + return S_OK; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::SetOpenIcon( + LPCWSTR pszFile, + int iIcon) +{ + TRACE("(%p, %s, %d)\n", this, debugstr_w(pszFile), iIcon); + + DuplicateString(pszFile, &openIcon.file); + if (!openIcon.file) + return E_OUTOFMEMORY; + openIcon.index = iIcon; + return S_OK; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::SetShortcutIcon( + LPCWSTR pszFile, + int iIcon) +{ + TRACE("(%p, %s, %d)\n", this, debugstr_w(pszFile), iIcon); + + DuplicateString(pszFile, &shortcutIcon.file); + if (!shortcutIcon.file) + return E_OUTOFMEMORY; + shortcutIcon.index = iIcon; + return S_OK; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::GetIconLocation( + UINT uFlags, + LPWSTR szIconFile, + UINT cchMax, + int *piIndex, + UINT *pwFlags) +{ + const struct IconLocation *icon = NULL; + SIZE_T cb; + + TRACE("(%p, 0x%x, %s, 0x%x, %p, %p)\n", this, uFlags, debugstr_w(szIconFile), cchMax, piIndex, pwFlags); + + if (!piIndex || !pwFlags) + return E_POINTER; + + if (uFlags & GIL_DEFAULTICON) + icon = defaultIcon.file ? &defaultIcon : &normalIcon; + else if (uFlags & GIL_FORSHORTCUT) + icon = shortcutIcon.file ? &shortcutIcon : &normalIcon; + else if (uFlags & GIL_OPENICON) + icon = openIcon.file ? &openIcon : &normalIcon; + else + icon = &normalIcon; + + if (!icon->file) + return E_FAIL; + + cb = wcslen(icon->file) + 1; + if (cchMax < (UINT)cb) + return E_FAIL; + CopyMemory(szIconFile, icon->file, cb * sizeof(WCHAR)); + *piIndex = icon->index; + *pwFlags = flags; + return S_OK; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::Extract( + LPCWSTR pszFile, + UINT nIconIndex, + HICON *phiconLarge, + HICON *phiconSmall, + UINT nIconSize) +{ + TRACE("(%p, %s, %u, %p, %p, %u)\n", this, debugstr_w(pszFile), nIconIndex, phiconLarge, phiconSmall, nIconSize); + + /* Nothing to do, ExtractIconW::GetIconLocation should be enough */ + return S_FALSE; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::GetIconLocation( + UINT uFlags, + LPSTR szIconFile, + UINT cchMax, + int *piIndex, + UINT *pwFlags) +{ + LPWSTR szIconFileW = NULL; + HRESULT hr; + + if (cchMax > 0) + { + szIconFileW = (LPWSTR)CoTaskMemAlloc(cchMax * sizeof(WCHAR)); + if (!szIconFileW) + return E_OUTOFMEMORY; + } + + hr = GetIconLocation( + uFlags, szIconFileW, cchMax, piIndex, pwFlags); + if (SUCCEEDED(hr) && cchMax > 0) + if (0 == WideCharToMultiByte(CP_ACP, 0, szIconFileW, cchMax, szIconFile, cchMax, NULL, NULL)) + hr = E_FAIL; + + if (szIconFileW) + CoTaskMemFree(szIconFileW); + return hr; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::Extract( + LPCSTR pszFile, + UINT nIconIndex, + HICON *phiconLarge, + HICON *phiconSmall, + UINT nIconSize) +{ + LPWSTR pszFileW = NULL; + int nLength; + HRESULT hr; + + if (pszFile) + { + nLength = MultiByteToWideChar(CP_ACP, 0, pszFile, -1, NULL, 0); + if (nLength == 0) + return E_FAIL; + pszFileW = (LPWSTR)CoTaskMemAlloc(nLength * sizeof(WCHAR)); + if (!pszFileW) + return E_OUTOFMEMORY; + if (!MultiByteToWideChar(CP_ACP, 0, pszFile, nLength, pszFileW, nLength)) + { + CoTaskMemFree(pszFileW); + return E_FAIL; + } + } + + hr = Extract( + pszFileW, nIconIndex, phiconLarge, phiconSmall, nIconSize); + + if (pszFileW) + CoTaskMemFree(pszFileW); + return hr; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::GetClassID( + CLSID *pClassID) +{ + TRACE("(%p, %p)\n", this, pClassID); + + if (!pClassID) + return E_POINTER; + + *pClassID = GUID_NULL; + return S_OK; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::IsDirty() +{ + FIXME("(%p)\n", this); + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::Load( + LPCOLESTR pszFileName, + DWORD dwMode) +{ + FIXME("(%p, %s, %u)\n", this, debugstr_w(pszFileName), dwMode); + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::Save( + LPCOLESTR pszFileName, + BOOL fRemember) +{ + FIXME("(%p, %s, %d)\n", this, debugstr_w(pszFileName), fRemember); + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::SaveCompleted( + LPCOLESTR pszFileName) +{ + FIXME("(%p, %s)\n", this, debugstr_w(pszFileName)); + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE IconExtraction::GetCurFile( + LPOLESTR *ppszFileName) +{ + FIXME("(%p, %p)\n", this, ppszFileName); + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT WINAPI SHCreateDefaultExtractIcon(REFIID riid, void **ppv) +{ + CComObject *theExtractor; + CComPtr result; + HRESULT hResult; + + if (ppv == NULL) + return E_POINTER; + *ppv = NULL; + ATLTRY (theExtractor = new CComObject); + if (theExtractor == NULL) + return E_OUTOFMEMORY; + hResult = theExtractor->QueryInterface (riid, (void **)&result); + if (FAILED (hResult)) + { + delete theExtractor; + return hResult; + } + *ppv = result.Detach (); + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/folder_options.cpp b/reactos/dll/win32/shell32_new/folder_options.cpp new file mode 100644 index 00000000000..b5d2ad47aa0 --- /dev/null +++ b/reactos/dll/win32/shell32_new/folder_options.cpp @@ -0,0 +1,817 @@ +/* + * Open With Context Menu extension + * + * Copyright 2007 Johannes Anderwald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + + +WINE_DEFAULT_DEBUG_CHANNEL (fprop); +#define MAX_PROPERTY_SHEET_PAGE (32) + +/// Folder Options: +/// CLASSKEY = HKEY_CLASSES_ROOT\CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF} +/// DefaultIcon = %SystemRoot%\system32\SHELL32.dll,-210 +/// Verbs: Open / RunAs +/// Cmd: rundll32.exe shell32.dll,Options_RunDLL 0 + +/// ShellFolder Attributes: 0x0 + +typedef struct +{ + DWORD cFiles; + DWORD cFolder; + LARGE_INTEGER bSize; + HWND hwndDlg; + WCHAR szFolderPath[MAX_PATH]; +}FOLDER_PROPERTIES_CONTEXT, *PFOLDER_PROPERTIES_CONTEXT; + +typedef struct +{ + WCHAR FileExtension[30]; + WCHAR FileDescription[100]; + WCHAR ClassKey[MAX_PATH]; +}FOLDER_FILE_TYPE_ENTRY, *PFOLDER_FILE_TYPE_ENTRY; + +typedef struct +{ + LPCWSTR szKeyName; + UINT ResourceID; +}FOLDER_VIEW_ENTRY, PFOLDER_VIEW_ENTRY; +/* +static FOLDER_VIEW_ENTRY s_Options[] = +{ + { L"AlwaysShowMenus", IDS_ALWAYSSHOWMENUS }, + { L"AutoCheckSelect", -1 }, + { L"ClassicViewState", -1 }, + { L"DontPrettyPath", -1 }, + { L"Filter", -1 }, + { L"FolderContentsInfoTip", IDS_FOLDERCONTENTSTIP }, + { L"FriendlyTree", -1 }, + { L"Hidden", -1, }, + { L"HideFileExt", IDS_HIDEFILEEXT }, + { L"HideIcons", -1}, + { L"IconsOnly", -1}, + { L"ListviewAlphaSelect", -1}, + { L"ListviewShadow", -1}, + { L"ListviewWatermark", -1}, + { L"MapNetDrvBtn", -1}, + { L"PersistBrowsers", -1}, + { L"SeperateProcess", IDS_SEPERATEPROCESS}, + { L"ServerAdminUI", -1}, + { L"SharingWizardOn", IDS_USESHAREWIZARD}, + { L"ShowCompColor", IDS_COMPCOLOR}, + { L"ShowInfoTip", IDS_SHOWINFOTIP}, + { L"ShowPreviewHandlers", -1}, + { L"ShowSuperHidden", IDS_HIDEOSFILES}, + { L"ShowTypeOverlay", -1}, + { L"Start_ShowMyGames", -1}, + { L"StartMenuInit", -1}, + { L"SuperHidden", -1}, + { L"TypeAhead", -1}, + { L"Webview", -1}, + { NULL, -1} + +}; +*/ + +EXTERN_C HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj); + +INT_PTR +CALLBACK +FolderOptionsGeneralDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + + + + return FALSE; +} + +static +VOID +InitializeFolderOptionsListCtrl(HWND hwndDlg) +{ + RECT clientRect; + LVCOLUMNW col; + WCHAR szName[50]; + HWND hDlgCtrl; + + hDlgCtrl = GetDlgItem(hwndDlg, 14003); + + if (!LoadStringW(shell32_hInstance, IDS_COLUMN_EXTENSION, szName, sizeof(szName) / sizeof(WCHAR))) + szName[0] = 0; + szName[(sizeof(szName)/sizeof(WCHAR))-1] = 0; + + GetClientRect(hDlgCtrl, &clientRect); + ZeroMemory(&col, sizeof(LV_COLUMN)); + col.mask = LVCF_SUBITEM | LVCF_WIDTH | LVCF_FMT; + col.iSubItem = 0; + col.pszText = szName; + col.fmt = LVCFMT_LEFT; + col.cx = (clientRect.right - clientRect.left) - GetSystemMetrics(SM_CXVSCROLL); + (void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMN, 0, (LPARAM)&col); + + + +} + + +INT_PTR +CALLBACK +FolderOptionsViewDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + switch(uMsg) + { + case WM_INITDIALOG: + InitializeFolderOptionsListCtrl(hwndDlg); + return TRUE; + } + + return FALSE; + +} + +VOID +InitializeFileTypesListCtrlColumns(HWND hDlgCtrl) +{ + RECT clientRect; + LVCOLUMNW col; + WCHAR szName[50]; + DWORD dwStyle; + int columnSize = 140; + + + if (!LoadStringW(shell32_hInstance, IDS_COLUMN_EXTENSION, szName, sizeof(szName) / sizeof(WCHAR))) + { + /* default to english */ + wcscpy(szName, L"Extensions"); + } + + /* make sure its null terminated */ + szName[(sizeof(szName)/sizeof(WCHAR))-1] = 0; + + GetClientRect(hDlgCtrl, &clientRect); + ZeroMemory(&col, sizeof(LV_COLUMN)); + columnSize = 140; //FIXME + col.iSubItem = 0; + col.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT; + col.fmt = LVCFMT_FIXED_WIDTH; + col.cx = columnSize | LVCFMT_LEFT; + col.cchTextMax = wcslen(szName); + col.pszText = szName; + (void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, 0, (LPARAM)&col); + + if (!LoadStringW(shell32_hInstance, IDS_FILE_TYPES, szName, sizeof(szName) / sizeof(WCHAR))) + { + /* default to english */ + wcscpy(szName, L"FileTypes"); + } + + col.iSubItem = 1; + col.cx = clientRect.right - clientRect.left - columnSize; + col.cchTextMax = wcslen(szName); + col.pszText = szName; + (void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, 1, (LPARAM)&col); + + /* set full select style */ + dwStyle = (DWORD) SendMessage(hDlgCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0); + dwStyle = dwStyle | LVS_EX_FULLROWSELECT; + SendMessage(hDlgCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle); +} + +INT +FindItem(HWND hDlgCtrl, WCHAR * ItemName) +{ + LVFINDINFOW findInfo; + ZeroMemory(&findInfo, sizeof(LVFINDINFOW)); + + findInfo.flags = LVFI_STRING; + findInfo.psz = ItemName; + return ListView_FindItem(hDlgCtrl, 0, &findInfo); +} + +VOID +InsertFileType(HWND hDlgCtrl, WCHAR * szName, PINT iItem, WCHAR * szFile) +{ + PFOLDER_FILE_TYPE_ENTRY Entry; + HKEY hKey; + LVITEMW lvItem; + DWORD dwSize; + + if (szName[0] != L'.') + { + /* FIXME handle URL protocol handlers */ + return; + } + + /* allocate file type entry */ + Entry = (PFOLDER_FILE_TYPE_ENTRY)HeapAlloc(GetProcessHeap(), 0, sizeof(FOLDER_FILE_TYPE_ENTRY)); + + if (!Entry) + return; + + /* open key */ + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szName, 0, KEY_READ, &hKey) != ERROR_SUCCESS) + return; + + /* FIXME check for duplicates */ + + /* query for the default key */ + dwSize = sizeof(Entry->ClassKey); + if (RegQueryValueExW(hKey, NULL, NULL, NULL, (LPBYTE)Entry->ClassKey, &dwSize) != ERROR_SUCCESS) + { + /* no link available */ + Entry->ClassKey[0] = 0; + } + + if (Entry->ClassKey[0]) + { + HKEY hTemp; + /* try open linked key */ + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, Entry->ClassKey, 0, KEY_READ, &hTemp) == ERROR_SUCCESS) + { + /* use linked key */ + RegCloseKey(hKey); + hKey = hTemp; + } + } + + /* read friendly type name */ + if (RegLoadMUIStringW(hKey, L"FriendlyTypeName", Entry->FileDescription, sizeof(Entry->FileDescription), NULL, 0, NULL) != ERROR_SUCCESS) + { + /* read file description */ + dwSize = sizeof(Entry->FileDescription); + Entry->FileDescription[0] = 0; + + /* read default key */ + RegQueryValueExW(hKey, NULL, NULL, NULL, (LPBYTE)Entry->FileDescription, &dwSize); + } + + /* close key */ + RegCloseKey(hKey); + + /* convert extension to upper case */ + wcscpy(Entry->FileExtension, szName); + _wcsupr(Entry->FileExtension); + + if (!Entry->FileDescription[0]) + { + /* construct default 'FileExtensionFile' */ + wcscpy(Entry->FileDescription, &Entry->FileExtension[1]); + wcscat(Entry->FileDescription, L" "); + wcscat(Entry->FileDescription, szFile); + } + + ZeroMemory(&lvItem, sizeof(LVITEMW)); + lvItem.mask = LVIF_TEXT | LVIF_PARAM; + lvItem.iSubItem = 0; + lvItem.pszText = &Entry->FileExtension[1]; + lvItem.iItem = *iItem; + lvItem.lParam = (LPARAM)Entry; + (void)SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&lvItem); + + ZeroMemory(&lvItem, sizeof(LVITEMW)); + lvItem.mask = LVIF_TEXT; + lvItem.pszText = Entry->FileDescription; + lvItem.iItem = *iItem; + lvItem.iSubItem = 1; + + (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&lvItem); + (*iItem)++; +} + +int +CALLBACK +ListViewCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) +{ + PFOLDER_FILE_TYPE_ENTRY Entry1, Entry2; + + Entry1 = (PFOLDER_FILE_TYPE_ENTRY)lParam1; + Entry2 = (PFOLDER_FILE_TYPE_ENTRY)lParam2; + + return wcsicmp(Entry1->FileExtension, Entry2->FileExtension); +} + +BOOL +InitializeFileTypesListCtrl(HWND hwndDlg) +{ + HWND hDlgCtrl; + DWORD dwIndex = 0; + WCHAR szName[50]; + WCHAR szFile[100]; + DWORD dwName; + LVITEMW lvItem; + INT iItem = 0; + + hDlgCtrl = GetDlgItem(hwndDlg, 14000); + InitializeFileTypesListCtrlColumns(hDlgCtrl); + + szFile[0] = 0; + if (!LoadStringW(shell32_hInstance, IDS_SHV_COLUMN1, szFile, sizeof(szFile) / sizeof(WCHAR))) + { + /* default to english */ + wcscpy(szFile, L"File"); + } + szFile[(sizeof(szFile)/sizeof(WCHAR))-1] = 0; + + dwName = sizeof(szName) / sizeof(WCHAR); + + while(RegEnumKeyExW(HKEY_CLASSES_ROOT, dwIndex++, szName, &dwName, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) + { + InsertFileType(hDlgCtrl, szName, &iItem, szFile); + dwName = sizeof(szName) / sizeof(WCHAR); + } + + /* sort list */ + ListView_SortItems(hDlgCtrl, ListViewCompareProc, NULL); + + /* select first item */ + ZeroMemory(&lvItem, sizeof(LVITEMW)); + lvItem.mask = LVIF_STATE; + lvItem.stateMask = (UINT)-1; + lvItem.state = LVIS_FOCUSED|LVIS_SELECTED; + lvItem.iItem = 0; + (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&lvItem); + + return TRUE; +} + +PFOLDER_FILE_TYPE_ENTRY +FindSelectedItem( + HWND hDlgCtrl) +{ + UINT Count, Index; + LVITEMW lvItem; + + Count = ListView_GetItemCount(hDlgCtrl); + + for (Index = 0; Index < Count; Index++) + { + ZeroMemory(&lvItem, sizeof(LVITEM)); + lvItem.mask = LVIF_PARAM | LVIF_STATE; + lvItem.iItem = Index; + lvItem.stateMask = (UINT)-1; + + if (ListView_GetItem(hDlgCtrl, &lvItem)) + { + if (lvItem.state & LVIS_SELECTED) + return (PFOLDER_FILE_TYPE_ENTRY)lvItem.lParam; + } + } + + return NULL; +} + +INT_PTR +CALLBACK +FolderOptionsFileTypesDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + LPNMLISTVIEW lppl; + LVITEMW lvItem; + WCHAR Buffer[200], FormatBuffer[100]; + PFOLDER_FILE_TYPE_ENTRY pItem; + OPENASINFO Info; + + switch(uMsg) + { + case WM_INITDIALOG: + InitializeFileTypesListCtrl(hwndDlg); + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case 14006: + pItem = FindSelectedItem(GetDlgItem(hwndDlg, 14000)); + if (pItem) + { + Info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_REGISTER_EXT; + Info.pcszClass = pItem->FileExtension; + SHOpenWithDialog(hwndDlg, &Info); + } + break; + } + + break; + case WM_NOTIFY: + lppl = (LPNMLISTVIEW) lParam; + + if (lppl->hdr.code == LVN_ITEMCHANGING) + { + ZeroMemory(&lvItem, sizeof(LVITEM)); + lvItem.mask = LVIF_PARAM; + lvItem.iItem = lppl->iItem; + if (!SendMessageW(lppl->hdr.hwndFrom, LVM_GETITEMW, 0, (LPARAM)&lvItem)) + return TRUE; + + pItem = (PFOLDER_FILE_TYPE_ENTRY)lvItem.lParam; + if (!pItem) + return TRUE; + + if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED)) + { + /* new focused item */ + if (!LoadStringW(shell32_hInstance, IDS_FILE_DETAILS, FormatBuffer, sizeof(FormatBuffer) / sizeof(WCHAR))) + { + /* use default english format string */ + wcscpy(FormatBuffer, L"Details for '%s' extension"); + } + + /* format buffer */ + swprintf(Buffer, FormatBuffer, &pItem->FileExtension[1]); + /* update dialog */ + SendDlgItemMessageW(hwndDlg, 14003, WM_SETTEXT, 0, (LPARAM)Buffer); + } + } + break; + } + + return FALSE; +} + + +VOID +ShowFolderOptionsDialog(HWND hWnd, HINSTANCE hInst) +{ + PROPSHEETHEADERW pinfo; + HPROPSHEETPAGE hppages[3]; + HPROPSHEETPAGE hpage; + UINT num_pages = 0; + WCHAR szOptions[100]; + + hpage = SH_CreatePropertySheetPage("FOLDER_OPTIONS_GENERAL_DLG", FolderOptionsGeneralDlg, 0, NULL); + if (hpage) + hppages[num_pages++] = hpage; + + hpage = SH_CreatePropertySheetPage("FOLDER_OPTIONS_VIEW_DLG", FolderOptionsViewDlg, 0, NULL); + if (hpage) + hppages[num_pages++] = hpage; + + hpage = SH_CreatePropertySheetPage("FOLDER_OPTIONS_FILETYPES_DLG", FolderOptionsFileTypesDlg, 0, NULL); + if (hpage) + hppages[num_pages++] = hpage; + + szOptions[0] = L'\0'; + LoadStringW(shell32_hInstance, IDS_FOLDER_OPTIONS, szOptions, sizeof(szOptions) / sizeof(WCHAR)); + szOptions[(sizeof(szOptions)/sizeof(WCHAR))-1] = L'\0'; + + memset(&pinfo, 0x0, sizeof(PROPSHEETHEADERW)); + pinfo.dwSize = sizeof(PROPSHEETHEADERW); + pinfo.dwFlags = PSH_NOCONTEXTHELP; + pinfo.nPages = num_pages; + pinfo.phpage = hppages; + pinfo.pszCaption = szOptions; + + PropertySheetW(&pinfo); +} + +VOID +Options_RunDLLCommon(HWND hWnd, HINSTANCE hInst, int fOptions, DWORD nCmdShow) +{ + switch(fOptions) + { + case 0: + ShowFolderOptionsDialog(hWnd, hInst); + break; + case 1: + // show taskbar options dialog + FIXME("notify explorer to show taskbar options dialog"); + //PostMessage(GetShellWindow(), WM_USER+22, fOptions, 0); + break; + default: + FIXME("unrecognized options id %d\n", fOptions); + } +} + +/************************************************************************* + * Options_RunDLL (SHELL32.@) + */ +EXTERN_C VOID WINAPI Options_RunDLL(HWND hWnd, HINSTANCE hInst, LPCSTR cmd, DWORD nCmdShow) +{ + Options_RunDLLCommon(hWnd, hInst, StrToIntA(cmd), nCmdShow); +} + +/************************************************************************* + * Options_RunDLLA (SHELL32.@) + */ +EXTERN_C VOID WINAPI Options_RunDLLA(HWND hWnd, HINSTANCE hInst, LPCSTR cmd, DWORD nCmdShow) +{ + Options_RunDLLCommon(hWnd, hInst, StrToIntA(cmd), nCmdShow); +} + +/************************************************************************* + * Options_RunDLLW (SHELL32.@) + */ +EXTERN_C VOID WINAPI Options_RunDLLW(HWND hWnd, HINSTANCE hInst, LPCWSTR cmd, DWORD nCmdShow) +{ + Options_RunDLLCommon(hWnd, hInst, StrToIntW(cmd), nCmdShow); +} + +static +DWORD WINAPI +CountFolderAndFiles(LPVOID lParam) +{ + WIN32_FIND_DATAW FindData; + HANDLE hFile; + UINT Length; + LPWSTR pOffset; + BOOL ret; + PFOLDER_PROPERTIES_CONTEXT pContext = (PFOLDER_PROPERTIES_CONTEXT) lParam; + + pOffset = PathAddBackslashW(pContext->szFolderPath); + if (!pOffset) + return 0; + + Length = pOffset - pContext->szFolderPath; + + wcscpy(pOffset, L"*.*"); + hFile = FindFirstFileW(pContext->szFolderPath, &FindData); + if (hFile == INVALID_HANDLE_VALUE) + return 0; + + do + { + ret = FindNextFileW(hFile, &FindData); + if (ret) + { + if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + if (FindData.cFileName[0] == L'.' && FindData.cFileName[1] == L'.' && + FindData.cFileName[2] == L'\0') + continue; + + pContext->cFolder++; + wcscpy(pOffset, FindData.cFileName); + CountFolderAndFiles((LPVOID)pContext); + pOffset[0] = L'\0'; + } + else + { + pContext->cFiles++; + pContext->bSize.u.LowPart += FindData.nFileSizeLow; + pContext->bSize.u.HighPart += FindData.nFileSizeHigh; + } + } + else if (GetLastError() == ERROR_NO_MORE_FILES) + { + break; + } + }while(1); + + FindClose(hFile); + return 1; +} + +static +VOID +InitializeFolderGeneralDlg(PFOLDER_PROPERTIES_CONTEXT pContext) +{ + LPWSTR pFolderName; + WIN32_FILE_ATTRIBUTE_DATA FolderAttribute; + FILETIME ft; + SYSTEMTIME dt; + WCHAR szBuffer[MAX_PATH+5]; + WCHAR szFormat[30] = {0}; + + static const WCHAR wFormat[] = {'%','0','2','d','/','%','0','2','d','/','%','0','4','d',' ',' ','%','0','2','d',':','%','0','2','u',0}; + + pFolderName = wcsrchr(pContext->szFolderPath, L'\\'); + if (!pFolderName) + return; + + /* set folder name */ + SendDlgItemMessageW(pContext->hwndDlg, 14001, WM_SETTEXT, 0, (LPARAM) (pFolderName + 1)); + /* set folder location */ + pFolderName[0] = L'\0'; + if (wcslen(pContext->szFolderPath) == 2) + { + /* folder is located at root */ + WCHAR szDrive[4] = {L'C',L':',L'\\',L'\0'}; + szDrive[0] = pContext->szFolderPath[0]; + SendDlgItemMessageW(pContext->hwndDlg, 14007, WM_SETTEXT, 0, (LPARAM) szDrive); + } + else + { + SendDlgItemMessageW(pContext->hwndDlg, 14007, WM_SETTEXT, 0, (LPARAM) pContext->szFolderPath); + } + pFolderName[0] = L'\\'; + /* get folder properties */ + if (GetFileAttributesExW(pContext->szFolderPath, GetFileExInfoStandard, (LPVOID)&FolderAttribute)) + { + if (FolderAttribute.dwFileAttributes & FILE_ATTRIBUTE_READONLY) + { + /* check readonly button */ + SendDlgItemMessage(pContext->hwndDlg, 14021, BM_SETCHECK, BST_CHECKED, 0); + } + + if (FolderAttribute.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) + { + /* check hidden button */ + SendDlgItemMessage(pContext->hwndDlg, 14022, BM_SETCHECK, BST_CHECKED, 0); + } + + if (FileTimeToLocalFileTime(&FolderAttribute.ftCreationTime, &ft)) + { + FileTimeToSystemTime(&ft, &dt); + swprintf (szBuffer, wFormat, dt.wDay, dt.wMonth, dt.wYear, dt.wHour, dt.wMinute); + SendDlgItemMessageW(pContext->hwndDlg, 14015, WM_SETTEXT, 0, (LPARAM) szBuffer); + } + } + /* now enumerate enumerate contents */ + wcscpy(szBuffer, pContext->szFolderPath); + CountFolderAndFiles((LPVOID)pContext); + wcscpy(pContext->szFolderPath, szBuffer); + /* set folder details */ + LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, szFormat, sizeof(szFormat)/sizeof(WCHAR)); + szFormat[(sizeof(szFormat)/sizeof(WCHAR))-1] = L'\0'; + swprintf(szBuffer, szFormat, pContext->cFiles, pContext->cFolder); + SendDlgItemMessageW(pContext->hwndDlg, 14011, WM_SETTEXT, 0, (LPARAM) szBuffer); + + if (StrFormatByteSizeW(pContext->bSize.QuadPart, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + /* store folder size */ + SendDlgItemMessageW(pContext->hwndDlg, 14009, WM_SETTEXT, 0, (LPARAM) szBuffer); + } +} + + +INT_PTR +CALLBACK +FolderPropertiesGeneralDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + LPPROPSHEETPAGEW ppsp; + PFOLDER_PROPERTIES_CONTEXT pContext; + HICON hIcon; + WIN32_FILE_ATTRIBUTE_DATA FolderAttribute; + LONG res; + LPPSHNOTIFY lppsn; + DWORD Attribute; + + switch(uMsg) + { + case WM_INITDIALOG: + ppsp = (LPPROPSHEETPAGEW)lParam; + if (ppsp == NULL) + break; + hIcon = LoadIconW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_FOLDER_OPEN)); + if (hIcon) + SendDlgItemMessageW(hwndDlg, 14000, STM_SETICON, (WPARAM)hIcon, 0); + + pContext = (FOLDER_PROPERTIES_CONTEXT *)SHAlloc(sizeof(FOLDER_PROPERTIES_CONTEXT)); + if (pContext) + { + ZeroMemory(pContext, sizeof(FOLDER_PROPERTIES_CONTEXT)); + pContext->hwndDlg = hwndDlg; + wcscpy(pContext->szFolderPath, (LPWSTR)ppsp->lParam); + SetWindowLongPtr(hwndDlg, DWL_USER, (LONG_PTR)pContext); + InitializeFolderGeneralDlg(pContext); + } + return TRUE; + case WM_COMMAND: + if (HIWORD(wParam) == BN_CLICKED) + { + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + } + break; + case WM_DESTROY: + pContext = (PFOLDER_PROPERTIES_CONTEXT)GetWindowLongPtr(hwndDlg, DWL_USER); + SHFree((LPVOID)pContext); + break; + case WM_NOTIFY: + pContext = (PFOLDER_PROPERTIES_CONTEXT)GetWindowLongPtr(hwndDlg, DWL_USER); + lppsn = (LPPSHNOTIFY) lParam; + if (lppsn->hdr.code == PSN_APPLY) + { + if (GetFileAttributesExW(pContext->szFolderPath, GetFileExInfoStandard, (LPVOID)&FolderAttribute)) + { + res = SendDlgItemMessageW(hwndDlg, 14021, BM_GETCHECK, 0, 0); + if (res == BST_CHECKED) + FolderAttribute.dwFileAttributes |= FILE_ATTRIBUTE_READONLY; + else + FolderAttribute.dwFileAttributes &= (~FILE_ATTRIBUTE_READONLY); + + res = SendDlgItemMessageW(hwndDlg, 14022, BM_GETCHECK, 0, 0); + if (res == BST_CHECKED) + FolderAttribute.dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN; + else + FolderAttribute.dwFileAttributes &= (~FILE_ATTRIBUTE_HIDDEN); + + Attribute = FolderAttribute.dwFileAttributes & +(FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY); + + SetFileAttributesW(pContext->szFolderPath, Attribute); + } + SetWindowLongPtr( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); + return TRUE; + } + break; + } + return FALSE; +} + +static +BOOL +CALLBACK +FolderAddPropSheetPageProc(HPROPSHEETPAGE hpage, LPARAM lParam) +{ + PROPSHEETHEADERW *ppsh = (PROPSHEETHEADERW *)lParam; + if (ppsh != NULL && ppsh->nPages < MAX_PROPERTY_SHEET_PAGE) + { + ppsh->phpage[ppsh->nPages++] = hpage; + return TRUE; + } + return FALSE; +} + +BOOL +SH_ShowFolderProperties(LPWSTR pwszFolder, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST * apidl) +{ + HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE]; + HPROPSHEETPAGE hpage; + PROPSHEETHEADERW psh; + BOOL ret; + WCHAR szName[MAX_PATH] = {0}; + HPSXA hpsx = NULL; + LPWSTR pFolderName; + CComPtr pDataObj; + + if (!PathIsDirectoryW(pwszFolder)) + return FALSE; + + pFolderName = wcsrchr(pwszFolder, L'\\'); + if (!pFolderName) + return FALSE; + + wcscpy(szName, pFolderName + 1); + + hpage = SH_CreatePropertySheetPage("SHELL_FOLDER_GENERAL_DLG", FolderPropertiesGeneralDlg, (LPARAM)pwszFolder, NULL); + if (!hpage) + return FALSE; + + ZeroMemory(&psh, sizeof(PROPSHEETHEADERW)); + hppages[psh.nPages] = hpage; + psh.nPages++; + psh.dwSize = sizeof(PROPSHEETHEADERW); + psh.dwFlags = PSH_PROPTITLE; + psh.hwndParent = NULL; + psh.phpage = hppages; + psh.pszCaption = szName; + + + if (SHCreateDataObject(pidlFolder, 1, apidl, NULL, IID_IDataObject, (void**)&pDataObj) == S_OK) + { + hpsx = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, L"Directory", MAX_PROPERTY_SHEET_PAGE-1, pDataObj); + if (hpsx) + { + SHAddFromPropSheetExtArray(hpsx, + (LPFNADDPROPSHEETPAGE)FolderAddPropSheetPageProc, + (LPARAM)&psh); + } + } + + ret = PropertySheetW(&psh); + + if (hpsx) + SHDestroyPropSheetExtArray(hpsx); + + if (ret < 0) + return FALSE; + else + return TRUE; +} + + diff --git a/reactos/dll/win32/shell32_new/folders.cpp b/reactos/dll/win32/shell32_new/folders.cpp new file mode 100644 index 00000000000..3783fe7c505 --- /dev/null +++ b/reactos/dll/win32/shell32_new/folders.cpp @@ -0,0 +1,380 @@ +/* + * Copyright 1997 Marcus Meissner + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +WCHAR swShell32Name[MAX_PATH]; + +DWORD NumIconOverlayHandlers = 0; +IShellIconOverlayIdentifier ** Handlers = NULL; + +static HRESULT getIconLocationForFolder(LPCITEMIDLIST pidl, UINT uFlags, + LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags) +{ + int icon_idx; + WCHAR wszPath[MAX_PATH]; + WCHAR wszCLSIDValue[CHARS_IN_GUID]; + static const WCHAR shellClassInfo[] = { '.','S','h','e','l','l','C','l','a','s','s','I','n','f','o',0 }; + static const WCHAR iconFile[] = { 'I','c','o','n','F','i','l','e',0 }; + static const WCHAR clsid[] = { 'C','L','S','I','D',0 }; + static const WCHAR clsid2[] = { 'C','L','S','I','D','2',0 }; + static const WCHAR iconIndex[] = { 'I','c','o','n','I','n','d','e','x',0 }; + + if (SHELL32_GetCustomFolderAttribute(pidl, shellClassInfo, iconFile, + wszPath, MAX_PATH)) + { + WCHAR wszIconIndex[10]; + SHELL32_GetCustomFolderAttribute(pidl, shellClassInfo, iconIndex, + wszIconIndex, 10); + *piIndex = _wtoi(wszIconIndex); + } + else if (SHELL32_GetCustomFolderAttribute(pidl, shellClassInfo, clsid, + wszCLSIDValue, CHARS_IN_GUID) && + HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx)) + { + *piIndex = icon_idx; + } + else if (SHELL32_GetCustomFolderAttribute(pidl, shellClassInfo, clsid2, + wszCLSIDValue, CHARS_IN_GUID) && + HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx)) + { + *piIndex = icon_idx; + } + else + { + static const WCHAR folder[] = { 'F','o','l','d','e','r',0 }; + + if (!HCR_GetDefaultIconW(folder, szIconFile, cchMax, &icon_idx)) + { + lstrcpynW(szIconFile, swShell32Name, cchMax); + icon_idx = -IDI_SHELL_FOLDER; + } + + if (uFlags & GIL_OPENICON) + *piIndex = icon_idx<0? icon_idx-1: icon_idx+1; + else + *piIndex = icon_idx; + } + + return S_OK; +} + +void InitIconOverlays(void) +{ + HKEY hKey; + DWORD dwIndex, dwResult, dwSize; + WCHAR szName[MAX_PATH]; + WCHAR szValue[100]; + CLSID clsid; + IShellIconOverlayIdentifier * Overlay; + + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers",0, KEY_READ, &hKey) != ERROR_SUCCESS) + return; + + if (RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &dwResult, NULL, NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return; + } + + Handlers = (IShellIconOverlayIdentifier **)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwResult * sizeof(IShellIconOverlayIdentifier*)); + if (!Handlers) + { + RegCloseKey(hKey); + return; + } + + dwIndex = 0; + + CoInitialize(0); + + do + { + dwSize = sizeof(szName) / sizeof(WCHAR); + dwResult = RegEnumKeyExW(hKey, dwIndex, szName, &dwSize, NULL, NULL, NULL, NULL); + + if (dwResult == ERROR_NO_MORE_ITEMS) + break; + + if (dwResult == ERROR_SUCCESS) + { + dwSize = sizeof(szValue) / sizeof(WCHAR); + if (RegGetValueW(hKey, szName, NULL, RRF_RT_REG_SZ, NULL, szValue, &dwSize) == ERROR_SUCCESS) + { + + CLSIDFromString(szValue, &clsid); + dwResult = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (LPVOID*)&Overlay); + if (dwResult == S_OK) + { + Handlers[NumIconOverlayHandlers] = Overlay; + NumIconOverlayHandlers++; + } + } + } + + dwIndex++; + + }while(1); + + RegCloseKey(hKey); +} + +BOOL +GetIconOverlay(LPCITEMIDLIST pidl, WCHAR * wTemp, int* pIndex) +{ + DWORD Index; + HRESULT hResult; + int Priority; + int HighestPriority; + ULONG IconIndex; + ULONG Flags; + WCHAR szPath[MAX_PATH]; + + if(!SHGetPathFromIDListW(pidl, szPath)) + return FALSE; + + + HighestPriority = 101; + IconIndex = NumIconOverlayHandlers; + for(Index = 0; Index < NumIconOverlayHandlers; Index++) + { + hResult = Handlers[Index]->IsMemberOf(szPath, SFGAO_FILESYSTEM); + if (hResult == S_OK) + { + hResult = Handlers[Index]->GetPriority(&Priority); + if (hResult == S_OK) + { + if (Priority < HighestPriority) + { + HighestPriority = Priority; + IconIndex = Index; + } + } + } + } + + if (IconIndex == NumIconOverlayHandlers) + return FALSE; + + hResult = Handlers[IconIndex]->GetOverlayInfo(wTemp, MAX_PATH, pIndex, &Flags); + + if (hResult == S_OK) + return TRUE; + else + return FALSE; +} + +/************************************************************************** +* IExtractIconW_Constructor +*/ +IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl) +{ + CComPtr initIcon; + IExtractIconW *extractIcon; + GUID const * riid; + int icon_idx; + UINT flags; + CHAR sTemp[MAX_PATH]; + WCHAR wTemp[MAX_PATH]; + LPITEMIDLIST pSimplePidl = ILFindLastID(pidl); + HRESULT hr; + + hr = SHCreateDefaultExtractIcon(IID_IDefaultExtractIconInit, (void **)&initIcon); + if (FAILED(hr)) + return NULL; + + hr = initIcon->QueryInterface(IID_IExtractIconW, (void **)&extractIcon); + if (FAILED(hr)) + return NULL; + + if (_ILIsDesktop(pSimplePidl)) + { + initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_DESKTOP); + } + else if ((riid = _ILGetGUIDPointer(pSimplePidl))) + { + /* my computer and other shell extensions */ + static const WCHAR fmt[] = { 'C','L','S','I','D','\\', + '{','%','0','8','l','x','-','%','0','4','x','-','%','0','4','x','-', + '%','0','2','x','%','0','2','x','-','%','0','2','x', '%','0','2','x', + '%','0','2','x','%','0','2','x','%','0','2','x','%','0','2','x','}',0 }; + WCHAR xriid[50]; + + swprintf(xriid, fmt, + riid->Data1, riid->Data2, riid->Data3, + riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3], + riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7]); + + if (HCR_GetDefaultIconW(xriid, wTemp, MAX_PATH, &icon_idx)) + { + initIcon->SetNormalIcon(wTemp, icon_idx); + } + else + { + if (IsEqualGUID(*riid, CLSID_MyComputer)) + initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_COMPUTER); + else if (IsEqualGUID(*riid, CLSID_MyDocuments)) + initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_DOCUMENTS); + else if (IsEqualGUID(*riid, CLSID_NetworkPlaces)) + initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_NETWORK_PLACES); + else + initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_FOLDER); + } + } + + else if (_ILIsDrive (pSimplePidl)) + { + static const WCHAR drive[] = { 'D','r','i','v','e',0 }; + int icon_idx = -1; + + if (_ILGetDrive(pSimplePidl, sTemp, MAX_PATH)) + { + switch(GetDriveTypeA(sTemp)) + { + case DRIVE_REMOVABLE: icon_idx = IDI_SHELL_FLOPPY; break; + case DRIVE_CDROM: icon_idx = IDI_SHELL_CDROM; break; + case DRIVE_REMOTE: icon_idx = IDI_SHELL_NETDRIVE; break; + case DRIVE_RAMDISK: icon_idx = IDI_SHELL_RAMDISK; break; + case DRIVE_NO_ROOT_DIR: icon_idx = IDI_SHELL_CDROM; break; + } + } + + if (icon_idx != -1) + { + initIcon->SetNormalIcon(swShell32Name, -icon_idx); + } + else + { + if (HCR_GetDefaultIconW(drive, wTemp, MAX_PATH, &icon_idx)) + initIcon->SetNormalIcon(wTemp, icon_idx); + else + initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_DRIVE); + } + } + + else if (_ILIsFolder (pSimplePidl)) + { + if (SUCCEEDED(getIconLocationForFolder( + pidl, 0, wTemp, MAX_PATH, + &icon_idx, + &flags))) + { + initIcon->SetNormalIcon(wTemp, icon_idx); + } + if (SUCCEEDED(getIconLocationForFolder( + pidl, GIL_DEFAULTICON, wTemp, MAX_PATH, + &icon_idx, + &flags))) + { + initIcon->SetDefaultIcon(wTemp, icon_idx); + } + if (SUCCEEDED(getIconLocationForFolder( + pidl, GIL_FORSHORTCUT, wTemp, MAX_PATH, + &icon_idx, + &flags))) + { + initIcon->SetShortcutIcon(wTemp, icon_idx); + } + if (SUCCEEDED(getIconLocationForFolder( + pidl, GIL_OPENICON, wTemp, MAX_PATH, + &icon_idx, + &flags))) + { + initIcon->SetOpenIcon(wTemp, icon_idx); + } + } + else + { + BOOL found = FALSE; + + if (_ILIsCPanelStruct(pSimplePidl)) + { + if (SUCCEEDED(CPanel_GetIconLocationW(pSimplePidl, wTemp, MAX_PATH, &icon_idx))) + found = TRUE; + } + else if (_ILGetExtension(pSimplePidl, sTemp, MAX_PATH)) + { + if (HCR_MapTypeToValueA(sTemp, sTemp, MAX_PATH, TRUE) + && HCR_GetDefaultIconA(sTemp, sTemp, MAX_PATH, &icon_idx)) + { + if (!lstrcmpA("%1", sTemp)) /* icon is in the file */ + { + SHGetPathFromIDListW(pidl, wTemp); + icon_idx = 0; + } + else + { + MultiByteToWideChar(CP_ACP, 0, sTemp, -1, wTemp, MAX_PATH); + } + + found = TRUE; + } + else if (!lstrcmpiA(sTemp, "lnkfile")) + { + /* extract icon from shell shortcut */ + CComPtr dsf; + CComPtr psl; + + if (SUCCEEDED(SHGetDesktopFolder(&dsf))) + { + HRESULT hr = dsf->GetUIObjectOf(NULL, 1, (LPCITEMIDLIST*)&pidl, IID_IShellLinkW, NULL, (LPVOID *)&psl); + + if (SUCCEEDED(hr)) + { + hr = psl->GetIconLocation(wTemp, MAX_PATH, &icon_idx); + + if (SUCCEEDED(hr) && *sTemp) + found = TRUE; + + } + } + } + } + + if (!found) + /* default icon */ + initIcon->SetNormalIcon(swShell32Name, 0); + else + initIcon->SetNormalIcon(wTemp, icon_idx); + } + + return extractIcon; +} + +/************************************************************************** +* IExtractIconA_Constructor +*/ +IExtractIconA* IExtractIconA_Constructor(LPCITEMIDLIST pidl) +{ + IExtractIconW *extractIconW; + IExtractIconA *extractIconA; + HRESULT hr; + + extractIconW = IExtractIconW_Constructor(pidl); + if (!extractIconW) + return NULL; + + hr = extractIconW->QueryInterface(IID_IExtractIconA, (void **)&extractIconA); + extractIconW->Release(); + if (FAILED(hr)) + return NULL; + return extractIconA; +} diff --git a/reactos/dll/win32/shell32_new/fprop.cpp b/reactos/dll/win32/shell32_new/fprop.cpp new file mode 100644 index 00000000000..15c2c6fbef6 --- /dev/null +++ b/reactos/dll/win32/shell32_new/fprop.cpp @@ -0,0 +1,878 @@ +/* + * Shell Library Functions + * + * Copyright 2005 Johannes Anderwald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +#define MAX_PROPERTY_SHEET_PAGE 32 + +typedef struct _LANGANDCODEPAGE_ +{ + WORD lang; + WORD code; +} LANGANDCODEPAGE, *LPLANGANDCODEPAGE; + +EXTERN_C HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj); + +/************************************************************************* + * + * SH_CreatePropertySheetPage [Internal] + * + * creates a property sheet page from an resource name + * + */ + +HPROPSHEETPAGE +SH_CreatePropertySheetPage(LPCSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle) +{ + HRSRC hRes; + LPVOID lpsztemplate; + PROPSHEETPAGEW ppage; + + if (resname == NULL) + return (HPROPSHEETPAGE)0; + + hRes = FindResourceA(shell32_hInstance, resname, (LPSTR)RT_DIALOG); + + if (hRes == NULL) + { + ERR("failed to find resource name\n"); + return (HPROPSHEETPAGE)0; + } + + lpsztemplate = LoadResource(shell32_hInstance, hRes); + + if (lpsztemplate == NULL) + return (HPROPSHEETPAGE)0; + + memset(&ppage, 0x0, sizeof(PROPSHEETPAGEW)); + ppage.dwSize = sizeof(PROPSHEETPAGEW); + ppage.dwFlags = PSP_DLGINDIRECT; + ppage.pResource = (DLGTEMPLATE *)lpsztemplate; + ppage.pfnDlgProc = dlgproc; + ppage.lParam = lParam; + ppage.pszTitle = szTitle; + + if (szTitle) + { + ppage.dwFlags |= PSP_USETITLE; + } + + return CreatePropertySheetPageW(&ppage); +} + +/************************************************************************* + * + * SH_FileGeneralFileType [Internal] + * + * retrieves file extension description from registry and sets it in dialog + * + * TODO: retrieve file extension default icon and load it + * find executable name from registry, retrieve description from executable + */ + +BOOL +SH_FileGeneralSetFileType(HWND hwndDlg, WCHAR *filext) +{ + WCHAR name[MAX_PATH]; + WCHAR value[MAX_PATH]; + DWORD lname = MAX_PATH; + DWORD lvalue = MAX_PATH; + HKEY hKey; + LONG result; + HWND hDlgCtrl; + + TRACE("fileext %s\n", debugstr_w(filext)); + + if (filext == NULL) + return FALSE; + + hDlgCtrl = GetDlgItem(hwndDlg, 14005); + + if (hDlgCtrl == NULL) + return FALSE; + + if (RegOpenKeyW(HKEY_CLASSES_ROOT, filext, &hKey) != ERROR_SUCCESS) + { + /* the file extension is unknown, so default to string "FileExtension File" */ + SendMessageW(hDlgCtrl, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)value); + swprintf(name, L"%s %s", &filext[1], value); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)name); + return TRUE; + } + + result = RegEnumValueW(hKey, 0, name, &lname, NULL, NULL, (LPBYTE)value, &lvalue); + RegCloseKey(hKey); + + if (result != ERROR_SUCCESS) + return FALSE; + + if (RegOpenKeyW(HKEY_CLASSES_ROOT, value, &hKey) == ERROR_SUCCESS) + { + if (RegLoadMUIStringW(hKey, L"FriendlyTypeName", value, MAX_PATH, NULL, 0, NULL) != ERROR_SUCCESS) + { + lvalue = lname = MAX_PATH; + result = RegEnumValueW(hKey, 0, name, &lname, NULL, NULL, (LPBYTE)value, &lvalue); + } + + lname = MAX_PATH; + + if (RegGetValueW(hKey, L"DefaultIcon", NULL, RRF_RT_REG_SZ, NULL, name, &lname) == ERROR_SUCCESS) + { + UINT IconIndex; + WCHAR szBuffer[MAX_PATH]; + WCHAR *Offset; + HICON hIcon = 0; + HRSRC hResource; + LPVOID pResource = NULL; + HGLOBAL hGlobal; + HINSTANCE hLibrary; + Offset = wcsrchr(name, L','); + + if (Offset) + { + IconIndex = _wtoi(Offset + 2); + *Offset = L'\0'; + name[MAX_PATH - 1] = L'\0'; + + if (ExpandEnvironmentStringsW(name, szBuffer, MAX_PATH)) + { + szBuffer[MAX_PATH - 1] = L'\0'; + hLibrary = LoadLibraryExW(szBuffer, NULL, LOAD_LIBRARY_AS_DATAFILE); + if (hLibrary) + { + hResource = FindResourceW(hLibrary, MAKEINTRESOURCEW(IconIndex), (LPCWSTR)RT_ICON); + if (hResource) + { + hGlobal = LoadResource(shell32_hInstance, hResource); + if (hGlobal) + { + pResource = LockResource(hGlobal); + if (pResource != NULL) + { + hIcon = CreateIconFromResource((LPBYTE)pResource, SizeofResource(shell32_hInstance, hResource), TRUE, 0x00030000); + TRACE("hIcon %p,- szBuffer %s IconIndex %u error %u icon %p hResource %p pResource %p\n", + hIcon, + debugstr_w(szBuffer), + IconIndex, + MAKEINTRESOURCEW(IconIndex), + hResource, + pResource); + SendDlgItemMessageW(hwndDlg, 14000, STM_SETICON, (WPARAM)hIcon, 0); + } + } + } + FreeLibrary(hLibrary); + } + } + } + } + RegCloseKey(hKey); + } + + /* file extension type */ + value[MAX_PATH - 1] = L'\0'; + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)value); + + return TRUE; +} + +/************************************************************************* + * + * SHFileGeneralGetFileTimeString [Internal] + * + * formats a given LPFILETIME struct into readable user format + */ + +BOOL +SHFileGeneralGetFileTimeString(LPFILETIME lpFileTime, WCHAR *lpResult) +{ + FILETIME ft; + SYSTEMTIME dt; + WORD wYear; + static const WCHAR wFormat[] = { + '%', '0', '2', 'd', '/', '%', '0', '2', 'd', '/', '%', '0', '4', 'd', + ' ', ' ', '%', '0', '2', 'd', ':', '%', '0', '2', 'u', 0 }; + + if (lpFileTime == NULL || lpResult == NULL) + return FALSE; + + if (!FileTimeToLocalFileTime(lpFileTime, &ft)) + return FALSE; + + FileTimeToSystemTime(&ft, &dt); + + wYear = dt.wYear; + + /* ddmmyy */ + swprintf(lpResult, wFormat, dt.wDay, dt.wMonth, wYear, dt.wHour, dt.wMinute); + + TRACE("result %s\n", debugstr_w(lpResult)); + return TRUE; +} + +/************************************************************************* + * + * SH_FileGeneralSetText [Internal] + * + * sets file path string and filename string + * + */ + +BOOL +SH_FileGeneralSetText(HWND hwndDlg, WCHAR *lpstr) +{ + int flength; + int plength; + WCHAR *lpdir; + WCHAR buff[MAX_PATH]; + HWND hDlgCtrl; + + if (lpstr == NULL) + return FALSE; + + lpdir = wcsrchr(lpstr, '\\'); /* find the last occurence of '\\' */ + + plength = wcslen(lpstr); + flength = wcslen(lpdir); + + if (lpdir) + { + /* location text field */ + wcsncpy(buff, lpstr, plength - flength); + buff[plength - flength] = UNICODE_NULL; + hDlgCtrl = GetDlgItem(hwndDlg, 14009); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)buff); + } + + if (flength > 1) + { + /* text filename field */ + wcsncpy(buff, &lpdir[1], flength); + hDlgCtrl = GetDlgItem(hwndDlg, 14001); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)buff); + } + + return TRUE; +} + +/************************************************************************* + * + * SH_FileGeneralSetFileSizeTime [Internal] + * + * retrieves file information from file and sets in dialog + * + */ + +BOOL +SH_FileGeneralSetFileSizeTime(HWND hwndDlg, WCHAR *lpfilename, PULARGE_INTEGER lpfilesize) +{ + BOOL result; + HANDLE hFile; + FILETIME create_time; + FILETIME accessed_time; + FILETIME write_time; + WCHAR resultstr[MAX_PATH]; + HWND hDlgCtrl; + LARGE_INTEGER file_size; + + if (lpfilename == NULL) + return FALSE; + + hFile = CreateFileW(lpfilename, + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + + if (hFile == INVALID_HANDLE_VALUE) + { + WARN("failed to open file %s\n", debugstr_w(lpfilename)); + return FALSE; + } + + result = GetFileTime(hFile, &create_time, &accessed_time, &write_time); + + if (!result) + { + WARN("GetFileTime failed\n"); + return FALSE; + } + + if (SHFileGeneralGetFileTimeString(&create_time, resultstr)) + { + hDlgCtrl = GetDlgItem(hwndDlg, 14015); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)resultstr); + } + + if (SHFileGeneralGetFileTimeString(&accessed_time, resultstr)) + { + hDlgCtrl = GetDlgItem(hwndDlg, 14019); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)resultstr); + } + + if (SHFileGeneralGetFileTimeString(&write_time, resultstr)) + { + hDlgCtrl = GetDlgItem(hwndDlg, 14017); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)resultstr); + } + + if (!GetFileSizeEx(hFile, &file_size)) + { + WARN("GetFileSize failed\n"); + CloseHandle(hFile); + return FALSE; + } + + CloseHandle(hFile); + + if (!StrFormatByteSizeW(file_size.QuadPart, + resultstr, + sizeof(resultstr) / sizeof(WCHAR))) + return FALSE; + + hDlgCtrl = GetDlgItem(hwndDlg, 14011); + + TRACE("result size %u resultstr %s\n", file_size.QuadPart, debugstr_w(resultstr)); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)resultstr); + + if (lpfilesize) + lpfilesize->QuadPart = (ULONGLONG)file_size.QuadPart; + + return TRUE; +} + +/************************************************************************* + * + * SH_SetFileVersionText [Internal] + * + * + */ + +BOOL +SH_FileVersionQuerySetText(HWND hwndDlg, DWORD dlgId, LPVOID pInfo, WCHAR *text, WCHAR **resptr) +{ + UINT reslen; + HWND hDlgCtrl; + + if (hwndDlg == NULL || resptr == NULL || text == NULL) + return FALSE; + + if (VerQueryValueW(pInfo, text, (LPVOID *)resptr, &reslen)) + { + /* file description property */ + hDlgCtrl = GetDlgItem(hwndDlg, dlgId); + TRACE("%s :: %s\n", debugstr_w(text), debugstr_w(*resptr)); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)0, (LPARAM)*resptr); + return TRUE; + } + + return FALSE; +} + +/************************************************************************* + * + * SH_FileVersionQuerySetListText [Internal] + * + * retrieves a version string and adds it to listbox + * + */ + +BOOL +SH_FileVersionQuerySetListText(HWND hwndDlg, LPVOID pInfo, const WCHAR *text, WCHAR **resptr, WORD lang, WORD code) +{ + UINT reslen; + HWND hDlgCtrl; + UINT index; + static const WCHAR wFormat[] = { + '\\', 'S', 't', 'r', 'i', 'n', 'g', 'F', 'i', 'l', 'e', 'I', 'n', 'f', 'o', + '\\', '%', '0', '4', 'x', '%', '0', '4', 'x', '\\', '%', 's', 0 }; + WCHAR buff[256]; + + TRACE("text %s, resptr %p hwndDlg %p\n", debugstr_w(text), resptr, hwndDlg); + + if (hwndDlg == NULL || resptr == NULL || text == NULL) + return FALSE; + + swprintf(buff, wFormat, lang, code, text); + + if (VerQueryValueW(pInfo, buff, (LPVOID *)resptr, &reslen)) + { + /* listbox name property */ + hDlgCtrl = GetDlgItem(hwndDlg, 14009); + TRACE("%s :: %s\n", debugstr_w(text), debugstr_w(*resptr)); + index = SendMessageW(hDlgCtrl, LB_ADDSTRING, (WPARAM)-1, (LPARAM)text); + SendMessageW(hDlgCtrl, LB_SETITEMDATA, (WPARAM)index, (LPARAM)(WCHAR *)*resptr); + return TRUE; + } + + return FALSE; +} + +/************************************************************************* + * + * SH_FileVersionInitialize [Internal] + * + * sets all file version properties in dialog + */ + +BOOL +SH_FileVersionInitialize(HWND hwndDlg, WCHAR *lpfilename) +{ + LPVOID pBuf; + DWORD versize; + DWORD handle; + LPVOID info = NULL; + UINT infolen; + WCHAR buff[256]; + HWND hDlgCtrl; + WORD lang = 0; + WORD code = 0; + LPLANGANDCODEPAGE lplangcode; + WCHAR *str; + static const WCHAR wVersionFormat[] = { + '%', 'd', '.', '%', 'd', '.', '%', 'd', '.', '%', 'd', 0 }; + static const WCHAR wFileDescriptionFormat[] = { + '\\', 'S', 't', 'r', 'i', 'n', 'g', 'F', 'i', 'l', 'e', 'I', 'n', 'f', 'o', + '\\', '%', '0', '4', 'x', '%', '0', '4', 'x', + '\\', 'F', 'i', 'l', 'e', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', 0 }; + static const WCHAR wLegalCopyrightFormat[] = { + '\\', 'S', 't', 'r', 'i', 'n', 'g', 'F', 'i', 'l', 'e', 'I', 'n', 'f', 'o', + '\\', '%', '0', '4', 'x', '%', '0', '4', 'x', + '\\', 'L', 'e', 'g', 'a', 'l', 'C', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', 0 }; + static const WCHAR wTranslation[] = { + 'V', 'a', 'r', 'F', 'i', 'l', 'e', 'I', 'n', 'f', 'o', + '\\', 'T', 'r', 'a', 'n', 's', 'l', 'a', 't', 'i', 'o', 'n', 0 }; + static const WCHAR wCompanyName[] = { + 'C', 'o', 'm', 'p', 'a', 'n', 'y', 'N', 'a', 'm', 'e', 0 }; + static const WCHAR wFileVersion[] = { + 'F', 'i', 'l', 'e', 'V', 'e', 'r', 's', 'i', 'o', 'n', 0 }; + static const WCHAR wInternalName[] = { + 'I', 'n', 't', 'e', 'r', 'n', 'a', 'l', 'N', 'a', 'm', 'e', 0 }; + static const WCHAR wOriginalFilename[] = { + 'O', 'r', 'i', 'g', 'i', 'n', 'a', 'l', 'F', 'i', 'l', 'e', 'n', 'a', 'm', 'e', 0 }; + static const WCHAR wProductName[] = { + 'P', 'r', 'o', 'd', 'u', 'c', 't', 'N', 'a', 'm', 'e', 0 }; + static const WCHAR wProductVersion[] = { + 'P', 'r', 'o', 'd', 'u', 'c', 't', 'V', 'e', 'r', 's', 'i', 'o', 'n', 0 }; + static const WCHAR wSlash[] = { '\\', 0 }; + + if (lpfilename == 0) + return FALSE; + + if (!(versize = GetFileVersionInfoSizeW(lpfilename, &handle))) + { + WARN("GetFileVersionInfoSize failed\n"); + return FALSE; + } + + if (!(pBuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, versize))) + { + WARN("HeapAlloc failed bytes %x\n", versize); + return FALSE; + } + + if (!GetFileVersionInfoW(lpfilename, handle, versize, pBuf)) + { + HeapFree(GetProcessHeap(), 0, pBuf); + return FALSE; + } + + if (VerQueryValueW(pBuf, const_cast(wSlash), &info, &infolen)) + { + VS_FIXEDFILEINFO *inf = (VS_FIXEDFILEINFO *)info; + swprintf(buff, wVersionFormat, HIWORD(inf->dwFileVersionMS), + LOWORD(inf->dwFileVersionMS), + HIWORD(inf->dwFileVersionLS), + LOWORD(inf->dwFileVersionLS)); + hDlgCtrl = GetDlgItem(hwndDlg, 14001); + TRACE("MS %x LS %x res %s \n", inf->dwFileVersionMS, inf->dwFileVersionLS, debugstr_w(buff)); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)buff); + } + + if (VerQueryValueW(pBuf, const_cast(wTranslation), (LPVOID *)&lplangcode, &infolen)) + { + /* FIXME find language from current locale / if not available, + * default to english + * for now default to first available language + */ + lang = lplangcode->lang; + code = lplangcode->code; + } + + swprintf(buff, wFileDescriptionFormat, lang, code); + SH_FileVersionQuerySetText(hwndDlg, 14003, pBuf, buff, &str); + + swprintf(buff, wLegalCopyrightFormat, lang, code); + SH_FileVersionQuerySetText(hwndDlg, 14005, pBuf, buff, &str); + + /* listbox properties */ + SH_FileVersionQuerySetListText(hwndDlg, pBuf, wCompanyName, &str, lang, code); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, wFileVersion, &str, lang, code); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, wInternalName, &str, lang, code); + + /* FIXME insert language identifier */ + + SH_FileVersionQuerySetListText(hwndDlg, pBuf, wOriginalFilename, &str, lang, code); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, wProductName, &str, lang, code); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, wProductVersion, &str, lang, code); + SetWindowLongPtr(hwndDlg, DWL_USER, (LONG_PTR)pBuf); + + /* select first item */ + hDlgCtrl = GetDlgItem(hwndDlg, 14009); + SendMessageW(hDlgCtrl, LB_SETCURSEL, 0, 0); + str = (WCHAR *) SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)0, (LPARAM)NULL); + hDlgCtrl = GetDlgItem(hwndDlg, 14010); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)str); + + return TRUE; +} + +/************************************************************************* + * + * SH_FileVersionDlgProc + * + * wnd proc of 'Version' property sheet page + */ + +INT_PTR +CALLBACK +SH_FileVersionDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + LPPROPSHEETPAGE ppsp; + WCHAR *lpstr; + LPVOID buf; + + switch (uMsg) + { + case WM_INITDIALOG: + ppsp = (LPPROPSHEETPAGE)lParam; + + if (ppsp == NULL) + break; + + TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %x\n", hwndDlg, lParam, ppsp->lParam); + + lpstr = (WCHAR *)ppsp->lParam; + + if (lpstr == NULL) + break; + + return SH_FileVersionInitialize(hwndDlg, lpstr); + + case WM_COMMAND: + if (LOWORD(wParam) == 14009 && HIWORD(wParam) == LBN_DBLCLK) + { + HWND hDlgCtrl; + LRESULT lresult; + WCHAR *str; + + hDlgCtrl = GetDlgItem(hwndDlg, 14009); + lresult = SendMessageW(hDlgCtrl, LB_GETCURSEL, (WPARAM)NULL, (LPARAM)NULL); + + if (lresult == LB_ERR) + break; + + str = (WCHAR *) SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)lresult, (LPARAM)NULL); + + if (str == NULL) + break; + + hDlgCtrl = GetDlgItem(hwndDlg, 14010); + TRACE("hDlgCtrl %x string %s \n", hDlgCtrl, debugstr_w(str)); + SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)str); + + return TRUE; + } + break; + + case WM_DESTROY: + buf = (LPVOID) GetWindowLongPtr(hwndDlg, DWL_USER); + HeapFree(GetProcessHeap(), 0, buf); + break; + + default: + break; + } + + return FALSE; +} + +/************************************************************************* + * + * SH_FileGeneralDlgProc + * + * wnd proc of 'General' property sheet page + * + */ + +INT_PTR +CALLBACK +SH_FileGeneralDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + LPPROPSHEETPAGEW ppsp; + WCHAR *lpstr; + + switch (uMsg) + { + case WM_INITDIALOG: + ppsp = (LPPROPSHEETPAGEW)lParam; + + if (ppsp == NULL) + break; + + TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %S\n", hwndDlg, lParam, ppsp->lParam); + + lpstr = (WCHAR *)ppsp->lParam; + + if (lpstr == NULL) + { + ERR("no filename\n"); + break; + } + + /* set general text properties filename filelocation and icon */ + SH_FileGeneralSetText(hwndDlg, lpstr); + + /* enumerate file extension from registry and application which opens it */ + SH_FileGeneralSetFileType(hwndDlg, wcsrchr(lpstr, '.')); + + /* set file time create/modfied/accessed */ + SH_FileGeneralSetFileSizeTime(hwndDlg, lpstr, NULL); + + return TRUE; + + default: + break; + } + + return FALSE; +} + +BOOL +CALLBACK +AddShellPropSheetExCallback(HPROPSHEETPAGE hPage, + LPARAM lParam) +{ + PROPSHEETHEADERW *pinfo = (PROPSHEETHEADERW *)lParam; + + if (pinfo->nPages < MAX_PROPERTY_SHEET_PAGE) + { + pinfo->phpage[pinfo->nPages++] = hPage; + return TRUE; + } + + return FALSE; +} + +int +EnumPropSheetExt(LPWSTR wFileName, PROPSHEETHEADERW *pinfo, int NumPages, HPSXA *hpsxa, IDataObject *pDataObj) +{ + WCHAR szName[MAX_PATH] = { 0 }; + WCHAR *pOffset; + UINT Length; + DWORD dwName; + int Pages; + CLSID clsid; + + pOffset = wcsrchr(wFileName, L'.'); + + if (!pOffset) + { + Length = wcslen(szName); + + if (Length + 6 > sizeof(szName) / sizeof(szName[0])) + return 0; + + if (CLSIDFromString(wFileName, &clsid) == NOERROR) + { + wcscpy(szName, L"CLSID\\"); + wcscpy(&szName[6], wFileName); + } + else + { + wcscpy(szName, wFileName); + } + } + else + { + Length = wcslen(pOffset); + + if (Length >= sizeof(szName) / sizeof(szName[0])) + return 0; + + wcscpy(szName, pOffset); + } + + TRACE("EnumPropSheetExt szName %s\n", debugstr_w(szName)); + + hpsxa[0] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, szName, NumPages, pDataObj); + Pages = SHAddFromPropSheetExtArray(hpsxa[0], AddShellPropSheetExCallback, (LPARAM)pinfo); + + hpsxa[1] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, L"*", NumPages-Pages, pDataObj); + Pages += SHAddFromPropSheetExtArray(hpsxa[1], AddShellPropSheetExCallback, (LPARAM)pinfo); + + hpsxa[2] = NULL; + + if (pOffset) + { + /* try to load property sheet handlers from prog id key */ + dwName = sizeof(szName); + + if (RegGetValueW(HKEY_CLASSES_ROOT, pOffset, NULL, RRF_RT_REG_SZ, NULL, szName, &dwName) == ERROR_SUCCESS) + { + TRACE("EnumPropSheetExt szName %s, pOffset %s\n", debugstr_w(szName), debugstr_w(pOffset)); + szName[(sizeof(szName) / sizeof(WCHAR)) - 1] = L'\0'; + hpsxa[2] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, szName, NumPages - Pages, pDataObj); + Pages += SHAddFromPropSheetExtArray(hpsxa[2], AddShellPropSheetExCallback, (LPARAM)pinfo); + } + } + + return Pages; +} + +/************************************************************************* + * + * SH_ShowPropertiesDialog + * + * called from ShellExecuteExW32 + * + * lpf contains (quoted) path of folder/file + * + * TODO: provide button change application type if file has registered type + * make filename field editable and apply changes to filename on close + */ + +BOOL +SH_ShowPropertiesDialog(WCHAR *lpf, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST *apidl) +{ + PROPSHEETHEADERW pinfo; + HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE]; + WCHAR wFileName[MAX_PATH]; + DWORD dwHandle = 0; + WCHAR *pFileName; + HPSXA hpsxa[3]; + INT_PTR res; + CComPtr pDataObj; + HRESULT hResult; + + TRACE("SH_ShowPropertiesDialog entered filename %s\n", debugstr_w(lpf)); + + if (lpf == NULL) + return FALSE; + + if (!wcslen(lpf)) + return FALSE; + + memset(hppages, 0x0, sizeof(HPROPSHEETPAGE) * MAX_PROPERTY_SHEET_PAGE); + + if (lpf[0] == '"') + { + /* remove quotes from lpf */ + LPCWSTR src = lpf + 1; + LPWSTR dst = wFileName; + + while (*src && *src != '"') + *dst++ = *src++; + + *dst = '\0'; + } + else + { + wcscpy(wFileName, lpf); + } + + if (PathIsDirectoryW(wFileName)) + { + return SH_ShowFolderProperties(wFileName, pidlFolder, apidl); + } + + if (wcslen(wFileName) == 3) + { + return SH_ShowDriveProperties(wFileName, pidlFolder, apidl); + } + + pFileName = wcsrchr(wFileName, '\\'); + + if (!pFileName) + pFileName = wFileName; + else + pFileName++; + + memset(&pinfo, 0x0, sizeof(PROPSHEETHEADERW)); + pinfo.dwSize = sizeof(PROPSHEETHEADERW); + pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE; + pinfo.phpage = hppages; + pinfo.pszCaption = pFileName; + + hppages[pinfo.nPages] = + SH_CreatePropertySheetPage("SHELL_FILE_GENERAL_DLG", + SH_FileGeneralDlgProc, + (LPARAM)wFileName, + NULL); + + if (hppages[pinfo.nPages]) + pinfo.nPages++; + + hResult = SHCreateDataObject(pidlFolder, 1, apidl, NULL, IID_IDataObject, (LPVOID *)&pDataObj); + + if (hResult == S_OK) + { + if (!EnumPropSheetExt(wFileName, &pinfo, MAX_PROPERTY_SHEET_PAGE - 1, hpsxa, pDataObj)) + { + hpsxa[0] = NULL; + hpsxa[1] = NULL; + hpsxa[2] = NULL; + } + } + + if (GetFileVersionInfoSizeW(lpf, &dwHandle)) + { + hppages[pinfo.nPages] = + SH_CreatePropertySheetPage("SHELL_FILE_VERSION_DLG", + SH_FileVersionDlgProc, + (LPARAM)wFileName, + NULL); + if (hppages[pinfo.nPages]) + pinfo.nPages++; + } + + res = PropertySheetW(&pinfo); + + if (hResult == S_OK) + { + SHDestroyPropSheetExtArray(hpsxa[0]); + SHDestroyPropSheetExtArray(hpsxa[1]); + SHDestroyPropSheetExtArray(hpsxa[2]); + } + + return (res != -1); +} + +/*EOF */ diff --git a/reactos/dll/win32/shell32_new/icon_res.rc b/reactos/dll/win32/shell32_new/icon_res.rc new file mode 100644 index 00000000000..1f644ae6cf8 --- /dev/null +++ b/reactos/dll/win32/shell32_new/icon_res.rc @@ -0,0 +1,166 @@ +IDI_SHELL_DOCUMENT ICON "res/icons/1.ico" +IDI_SHELL_RICH_TEXT ICON "res/icons/2.ico" +IDI_SHELL_EXE ICON "res/icons/3.ico" +IDI_SHELL_FOLDER ICON "res/icons/4.ico" +IDI_SHELL_FOLDER_OPEN ICON "res/icons/5.ico" +IDI_SHELL_5_12_FLOPPY ICON "res/icons/6.ico" +IDI_SHELL_3_14_FLOPPY ICON "res/icons/7.ico" +IDI_SHELL_FLOPPY ICON "res/icons/8.ico" +IDI_SHELL_DRIVE ICON "res/icons/9.ico" +IDI_SHELL_NETDRIVE ICON "res/icons/10.ico" +IDI_SHELL_NETDRIVE2 ICON "res/icons/11.ico" //THIS SHOULD BE IDI_SHELL_NETDRIVE_OFF +IDI_SHELL_CDROM ICON "res/icons/12.ico" +IDI_SHELL_RAMDISK ICON "res/icons/13.ico" +IDI_SHELL_ENTIRE_NETWORK ICON "res/icons/14.ico" +IDI_SHELL_NETWORK ICON "res/icons/15.ico" +IDI_SHELL_MY_COMPUTER ICON "res/icons/16.ico" +IDI_SHELL_PRINTER ICON "res/icons/17.ico" +IDI_SHELL_MY_NETWORK_PLACES ICON "res/icons/18.ico" +IDI_SHELL_COMPUTERS_NEAR_ME ICON "res/icons/19.ico" +IDI_SHELL_PROGRAMS_FOLDER ICON "res/icons/20.ico" +IDI_SHELL_RECENT_DOCUMENTS ICON "res/icons/21.ico" +IDI_SHELL_CONTROL_PANEL ICON "res/icons/22.ico" +IDI_SHELL_SEARCH ICON "res/icons/23.ico" +IDI_SHELL_HELP ICON "res/icons/24.ico" +IDI_SHELL_RUN ICON "res/icons/25.ico" +IDI_SHELL_SHUTDOWN ICON "res/icons/28.ico" +IDI_SHELL_SHARE ICON "res/icons/29.ico" +IDI_SHELL_SHORTCUT ICON "res/icons/30.ico" +IDI_SHELL_EMPTY_RECYCLE_BIN ICON "res/icons/32.ico" +IDI_SHELL_FULL_RECYCLE_BIN ICON "res/icons/33.ico" +IDI_SHELL_DESKTOP ICON "res/icons/35.ico" +IDI_SHELL_CONTROL_PANEL2 ICON "res/icons/36.ico" +IDI_SHELL_PROGRAMS_FOLDER2 ICON "res/icons/37.ico" +IDI_SHELL_PRINTERS_FOLDER ICON "res/icons/38.ico" +IDI_SHELL_FONTS_FOLDER ICON "res/icons/39.ico" +IDI_SHELL_TSKBAR_STARTMENU ICON "res/icons/40.ico" +IDI_SHELL_CD_MUSIC ICON "res/icons/41.ico" +IDI_SHELL_FAVORITES ICON "res/icons/44.ico" +IDI_SHELL_LOGOFF ICON "res/icons/45.ico" +IDI_SHELL_EXPLORER ICON "res/icons/46.ico" +IDI_SHELL_UPDATE ICON "res/icons/47.ico" +IDI_SHELL_LOCKED ICON "res/icons/48.ico" +IDI_SHELL_NOT_CONNECTED_HDD ICON "res/icons/54.ico" +IDI_SHELL_FIND_IN_FILE ICON "res/icons/134.ico" +IDI_SHELL_OPEN_WITH ICON "res/icons/135.ico" +IDI_SHELL_CONTROL_PANEL3 ICON "res/icons/137.ico" +IDI_SHELL_PRINTER2 ICON "res/icons/138.ico" +/* TODO: 139.ico, 140.ico, 141.ico, 142.ico, 143.ico, 144,ico, 145.ico, 146.ico, 147.ico, 148.ico */ +IDI_SHELL_INF_FILE ICON "res/icons/151.ico" +IDI_SHELL_TEXT_FILE ICON "res/icons/152.ico" +IDI_SHELL_BAT_FILE ICON "res/icons/153.ico" +IDI_SHELL_SYSTEM_FILE ICON "res/icons/154.ico" +IDI_SHELL_FONT_FILE ICON "res/icons/155.ico" +IDI_SHELL_TT_FONT_FILE ICON "res/icons/156.ico" +IDI_SHELL_FONT_FILE2 ICON "res/icons/157.ico" +IDI_SHELL_RUN2 ICON "res/icons/160.ico" +IDI_SHELL_CONFIRM_DELETE ICON "res/icons/161.ico" +/* TODO: 165.ico, 166.ico, 167.ico, 168.ico, 169.ico, 170.ico, 171.ico */ +IDI_SHELL_NETWORK_FOLDER ICON "res/icons/172.ico" +IDI_SHELL_FAVORITES2 ICON "res/icons/173.ico" +/* TODO: 174.ico, 175.ico, 176.ico, 177.ico, 178.ico, 179.ico, 180.ico, 181.ico */ + +// Folder Options, General dialog +IDI_SHELL_SHOW_COMMON_TASKS ICON "res/icons/182.ico" +IDI_SHELL_CLASSIC_FOLDERS ICON "res/icons/183.ico" +IDI_SHELL_OPEN_IN_SOME_WINDOW ICON "res/icons/184.ico" +IDI_SHELL_OPEN_IN_NEW_WINDOW ICON "res/icons/185.ico" +IDI_SHELL_SINGLE_CLICK_TO_OPEN ICON "res/icons/186.ico" +IDI_SHELL_DOUBLE_CLICK_TO_OPEN ICON "res/icons/187.ico" + +/* TODO: 174.ico, 175.ico, 176.ico, 177.ico, 178.ico, 179.ico, 180.ico, 181.ico */ +IDI_SHELL_EMPTY_RECYCLE_BIN1 ICON "res/icons/191.ico" +IDI_SHELL_FULL_RECYCLE_BIN1 ICON "res/icons/192.ico" +/* TODO: 193.ico, 194.ico, 196.ico, 197.ico, 198.ico, 199.ico, 200.ico */ +IDI_SHELL_FOLDER_OPTIONS ICON "res/icons/210.ico" +IDI_SHELL_USERS2 ICON "res/icons/220.ico" +IDI_SHELL_TURN_OFF ICON "res/icons/221.ico" +/* TODO: 223.ico */ +IDI_SHELL_DVD_ROM ICON "res/icons/222.ico" +IDI_SHELL_MOVIE_FILE ICON "res/icons/224.ico" +IDI_SHELL_MUSIC_FILE ICON "res/icons/225.ico" +IDI_SHELL_PICTURE_FILE ICON "res/icons/226.ico" +/* TODO: 227.ico */ +IDI_SHELL_CD_MUSIC2 ICON "res/icons/228.ico" +/* TODO: 229.ico, 230.ico, 231.ico, 232.ico */ +IDI_SHELL_FDD ICON "res/icons/233.ico" +/* TODO: 234.ico */ +IDI_SHELL_MY_DOCUMENTS ICON "res/icons/235.ico" +IDI_SHELL_MY_PICTURES ICON "res/icons/236.ico" +IDI_SHELL_MY_MUSIC ICON "res/icons/237.ico" +IDI_SHELL_MY_MOVIES ICON "res/icons/238.ico" +/* TODO: 239.ico */ +IDI_SHELL_FULL_RECYCLE_BIN2 ICON "res/icons/240.ico" +/* TODO: 241.ico, 242.ico, 243.ico, 244.ico */ +IDI_SHELL_PRINTER3 ICON "res/icons/245.ico" +IDI_SHELL_ICON_246 ICON "res/icons/246.ico" +/* TODO: 247.ico */ +IDI_SHELL_CAMERA ICON "res/icons/248.ico" +IDI_SHELL_SLIDE_SHOW ICON "res/icons/249.ico" +IDI_SHELL_DISPLAY ICON "res/icons/250.ico" +/* TODO: 251.ico */ +IDI_SHELL_PRINT_PICS ICON "res/icons/252.ico" +/* TODO: 253.ico */ +IDI_SHELL_EMPTY_RECYCLE_BIN3 ICON "res/icons/254.ico" +IDI_SHELL_ICON_255 ICON "res/icons/255.ico" +/* TODO: 256.ico, 257.ico, 258.ico, 259.ico, 260.ico, 261.ico, 262.ico */ +IDI_SHELL_HELP1 ICON "res/icons/263.ico" +/* TODO: 264.ico */ +IDI_SHELL_SENDMAIL ICON "res/icons/265.ico" +/* TODO: 266.ico, 267.ico */ +IDI_SHELL_ACCESSABILITY ICON "res/icons/268.ico" +IDI_SHELL_USERS ICON "res/icons/269.ico" +IDI_SHELL_SCREEN_COLORS ICON "res/icons/270.ico" +IDI_SHELL_ADD_REM_PROGRAMS ICON "res/icons/271.ico" +/* TODO: 272.ico, 273.ico, 274.ico, 275.ico, 276.ico */ +IDI_SHELL_TUNES ICON "res/icons/277.ico" +/* TODO: 278.ico */ +IDI_SHELL_USER_ACCOUNTS ICON "res/icons/279.ico" +/* TODO: 281.ico, 282.ico, 283.ico, 284.ico */ +IDI_SHELL_HELP_FILE ICON "res/icons/289.ico" +IDI_SHELL_GO ICON "res/icons/290.ico" +IDI_SHELL_DVD_DRIVE ICON "res/icons/291.ico" +IDI_SHELL_CD_ADD_MUSIC ICON "res/icons/292.ico" +IDI_SHELL_CD ICON "res/icons/293.ico" +IDI_SHELL_CD_ROM ICON "res/icons/294.ico" +IDI_SHELL_CDR ICON "res/icons/295.ico" +IDI_SHELL_CDRW ICON "res/icons/296.ico" +IDI_SHELL_DVD_RAM ICON "res/icons/297.ico" +IDI_SHELL_DVDR_ROM ICON "res/icons/298.ico" +IDI_SHELL_MP3_PLAYER ICON "res/icons/299.ico" +/* TODO: 300.ico, 301.ico */ +IDI_SHELL_CD_ROM1 ICON "res/icons/302.ico" +/* TODO: 303.ico */ +IDI_SHELL_DVD_ROM1 ICON "res/icons/304.ico" +IDI_SHELL_FDD2 ICON "res/icons/305.ico" +/* TODO: 306.ico, 307.ico, 308.ico */ +IDI_SHELL_CAMERA1 ICON "res/icons/309.ico" +/* TODO: 310.ico, 311.ico, 312.ico, 313.ico, 314.ico */ +IDI_SHELL_SCANNER ICON "res/icons/315.ico" +/* TODO: 316.ico */ +IDI_SHELL_CAMCORDER ICON "res/icons/317.ico" +IDI_SHELL_DVDRW_ROM ICON "res/icons/318.ico" +IDI_SHELL_NEW_FOLDER ICON "res/icons/319.ico" +/* TODO: 320.ico, 321.ico */ +IDI_SHELL_FAVOTITES ICON "res/icons/322.ico" +IDI_SHELL_SEARCH1 ICON "res/icons/323.ico" +IDI_SHELL_HELP2 ICON "res/icons/324.ico" +IDI_SHELL_LOGOFF1 ICON "res/icons/325.ico" +IDI_SHELL_PROGRAMS_FOLDER1 ICON "res/icons/326.ico" +IDI_SHELL_RECENT_DOCUMENTS1 ICON "res/icons/327.ico" +IDI_SHELL_RUN1 ICON "res/icons/328.ico" +IDI_SHELL_SHUTDOWN1 ICON "res/icons/329.ico" +IDI_SHELL_CONTROL_PANEL1 ICON "res/icons/330.ico" +/* TODO: 331.ico, 337.ico, 338.ico, 512.ico */ +IDI_SHELL_IDEA ICON "res/icons/1001.ico" +/* TODO: 1002.ico, 1003.ico */ +IDI_SHELL_HELP_FILE1 ICON "res/icons/1004.ico" +/* TODO: 1005.ico, 1006.ico, 1007.ico, 1008.ico, 1009.ico, 1010.ico, 1011.ico */ +IDI_SHELL_SHUTDOWN2 ICON "res/icons/8240.ico" +IDI_SHELL_DELETE1 ICON "res/icons/16710.ico" +IDI_SHELL_DELETE2 ICON "res/icons/16715.ico" +IDI_SHELL_DELETE3 ICON "res/icons/16717.ico" +IDI_SHELL_DELETE4 ICON "res/icons/16718.ico" +IDI_SHELL_DELETE5 ICON "res/icons/16721.ico" + +IDI_SHELL_ADMINTOOLS ICON "res/icons/1700.ico" /* FIXME */ diff --git a/reactos/dll/win32/shell32_new/iconcache.cpp b/reactos/dll/win32/shell32_new/iconcache.cpp new file mode 100644 index 00000000000..c48925ad5c7 --- /dev/null +++ b/reactos/dll/win32/shell32_new/iconcache.cpp @@ -0,0 +1,942 @@ +/* + * shell icon cache (SIC) + * + * Copyright 1998, 1999 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/********************** THE ICON CACHE ********************************/ + +#define INVALID_INDEX -1 + +typedef struct +{ + LPWSTR sSourceFile; /* file (not path!) containing the icon */ + DWORD dwSourceIndex; /* index within the file, if it is a resoure ID it will be negated */ + DWORD dwListIndex; /* index within the iconlist */ + DWORD dwFlags; /* GIL_* flags */ + DWORD dwAccessTime; +} SIC_ENTRY, * LPSIC_ENTRY; + +static HDPA sic_hdpa = 0; + +namespace +{ +extern CRITICAL_SECTION SHELL32_SicCS; +CRITICAL_SECTION_DEBUG critsect_debug = +{ + 0, 0, &SHELL32_SicCS, + { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": SHELL32_SicCS") } +}; +CRITICAL_SECTION SHELL32_SicCS = { &critsect_debug, -1, 0, 0, 0, 0 }; +} + +/***************************************************************************** + * SIC_CompareEntries + * + * NOTES + * Callback for DPA_Search + */ +static INT CALLBACK SIC_CompareEntries( LPVOID p1, LPVOID p2, LPARAM lparam) +{ LPSIC_ENTRY e1 = (LPSIC_ENTRY)p1, e2 = (LPSIC_ENTRY)p2; + + TRACE("%p %p %8lx\n", p1, p2, lparam); + + /* Icons in the cache are keyed by the name of the file they are + * loaded from, their resource index and the fact if they have a shortcut + * icon overlay or not. + */ + if (e1->dwSourceIndex != e2->dwSourceIndex || /* first the faster one */ + (e1->dwFlags & GIL_FORSHORTCUT) != (e2->dwFlags & GIL_FORSHORTCUT)) + return 1; + + if (wcsicmp(e1->sSourceFile,e2->sSourceFile)) + return 1; + + return 0; +} + +/* declare SIC_LoadOverlayIcon() */ +static int SIC_LoadOverlayIcon(int icon_idx); + +/***************************************************************************** + * SIC_OverlayShortcutImage [internal] + * + * NOTES + * Creates a new icon as a copy of the passed-in icon, overlayed with a + * shortcut image. + */ +static HICON SIC_OverlayShortcutImage(HICON SourceIcon, BOOL large) +{ ICONINFO SourceIconInfo, ShortcutIconInfo, TargetIconInfo; + HICON ShortcutIcon, TargetIcon; + BITMAP SourceBitmapInfo, ShortcutBitmapInfo; + HDC SourceDC = NULL, + ShortcutDC = NULL, + TargetDC = NULL, + ScreenDC = NULL; + HBITMAP OldSourceBitmap = NULL, + OldShortcutBitmap = NULL, + OldTargetBitmap = NULL; + + static int s_imgListIdx = -1; + + /* Get information about the source icon and shortcut overlay */ + if (! GetIconInfo(SourceIcon, &SourceIconInfo) + || 0 == GetObjectW(SourceIconInfo.hbmColor, sizeof(BITMAP), &SourceBitmapInfo)) + { + return NULL; + } + + /* search for the shortcut icon only once */ + if (s_imgListIdx == -1) + s_imgListIdx = SIC_LoadOverlayIcon(- IDI_SHELL_SHORTCUT); + /* FIXME should use icon index 29 instead of the + resource id, but not all icons are present yet + so we can't use icon indices */ + + if (s_imgListIdx != -1) + { + if (large) + ShortcutIcon = ImageList_GetIcon(ShellBigIconList, s_imgListIdx, ILD_TRANSPARENT); + else + ShortcutIcon = ImageList_GetIcon(ShellSmallIconList, s_imgListIdx, ILD_TRANSPARENT); + } else + ShortcutIcon = NULL; + + if (NULL == ShortcutIcon + || ! GetIconInfo(ShortcutIcon, &ShortcutIconInfo) + || 0 == GetObjectW(ShortcutIconInfo.hbmColor, sizeof(BITMAP), &ShortcutBitmapInfo)) + { + return NULL; + } + + TargetIconInfo = SourceIconInfo; + TargetIconInfo.hbmMask = NULL; + TargetIconInfo.hbmColor = NULL; + + /* Setup the source, shortcut and target masks */ + SourceDC = CreateCompatibleDC(NULL); + if (NULL == SourceDC) goto fail; + OldSourceBitmap = (HBITMAP)SelectObject(SourceDC, SourceIconInfo.hbmMask); + if (NULL == OldSourceBitmap) goto fail; + + ShortcutDC = CreateCompatibleDC(NULL); + if (NULL == ShortcutDC) goto fail; + OldShortcutBitmap = (HBITMAP)SelectObject(ShortcutDC, ShortcutIconInfo.hbmMask); + if (NULL == OldShortcutBitmap) goto fail; + + TargetDC = CreateCompatibleDC(NULL); + if (NULL == TargetDC) goto fail; + TargetIconInfo.hbmMask = CreateCompatibleBitmap(TargetDC, SourceBitmapInfo.bmWidth, + SourceBitmapInfo.bmHeight); + if (NULL == TargetIconInfo.hbmMask) goto fail; + ScreenDC = GetDC(NULL); + if (NULL == ScreenDC) goto fail; + TargetIconInfo.hbmColor = CreateCompatibleBitmap(ScreenDC, SourceBitmapInfo.bmWidth, + SourceBitmapInfo.bmHeight); + ReleaseDC(NULL, ScreenDC); + if (NULL == TargetIconInfo.hbmColor) goto fail; + OldTargetBitmap = (HBITMAP)SelectObject(TargetDC, TargetIconInfo.hbmMask); + if (NULL == OldTargetBitmap) goto fail; + + /* Create the target mask by ANDing the source and shortcut masks */ + if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight, + SourceDC, 0, 0, SRCCOPY) || + ! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight, + ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, + ShortcutDC, 0, 0, SRCAND)) + { + goto fail; + } + + /* Setup the source and target xor bitmap */ + if (NULL == SelectObject(SourceDC, SourceIconInfo.hbmColor) || + NULL == SelectObject(TargetDC, TargetIconInfo.hbmColor)) + { + goto fail; + } + + /* Copy the source xor bitmap to the target and clear out part of it by using + the shortcut mask */ + if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight, + SourceDC, 0, 0, SRCCOPY) || + ! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight, + ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, + ShortcutDC, 0, 0, SRCAND)) + { + goto fail; + } + + if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail; + + /* Now put in the shortcut xor mask */ + if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight, + ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, + ShortcutDC, 0, 0, SRCINVERT)) + { + goto fail; + } + + /* Clean up, we're not goto'ing to 'fail' after this so we can be lazy and not set + handles to NULL */ + SelectObject(TargetDC, OldTargetBitmap); + DeleteObject(TargetDC); + SelectObject(ShortcutDC, OldShortcutBitmap); + DeleteObject(ShortcutDC); + SelectObject(SourceDC, OldSourceBitmap); + DeleteObject(SourceDC); + + /* Create the icon using the bitmaps prepared earlier */ + TargetIcon = CreateIconIndirect(&TargetIconInfo); + + /* CreateIconIndirect copies the bitmaps, so we can release our bitmaps now */ + DeleteObject(TargetIconInfo.hbmColor); + DeleteObject(TargetIconInfo.hbmMask); + + return TargetIcon; + +fail: + /* Clean up scratch resources we created */ + if (NULL != OldTargetBitmap) SelectObject(TargetDC, OldTargetBitmap); + if (NULL != TargetIconInfo.hbmColor) DeleteObject(TargetIconInfo.hbmColor); + if (NULL != TargetIconInfo.hbmMask) DeleteObject(TargetIconInfo.hbmMask); + if (NULL != TargetDC) DeleteObject(TargetDC); + if (NULL != OldShortcutBitmap) SelectObject(ShortcutDC, OldShortcutBitmap); + if (NULL != ShortcutDC) DeleteObject(ShortcutDC); + if (NULL != OldSourceBitmap) SelectObject(SourceDC, OldSourceBitmap); + if (NULL != SourceDC) DeleteObject(SourceDC); + + return NULL; +} + +/***************************************************************************** + * SIC_IconAppend [internal] + * + * NOTES + * appends an icon pair to the end of the cache + */ +static INT SIC_IconAppend (LPCWSTR sSourceFile, INT dwSourceIndex, HICON hSmallIcon, HICON hBigIcon, DWORD dwFlags) +{ LPSIC_ENTRY lpsice; + INT ret, index, index1; + WCHAR path[MAX_PATH]; + TRACE("%s %i %p %p\n", debugstr_w(sSourceFile), dwSourceIndex, hSmallIcon ,hBigIcon); + + lpsice = (LPSIC_ENTRY) SHAlloc (sizeof (SIC_ENTRY)); + + GetFullPathNameW(sSourceFile, MAX_PATH, path, NULL); + lpsice->sSourceFile = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, (wcslen(path)+1)*sizeof(WCHAR) ); + wcscpy( lpsice->sSourceFile, path ); + + lpsice->dwSourceIndex = dwSourceIndex; + lpsice->dwFlags = dwFlags; + + EnterCriticalSection(&SHELL32_SicCS); + + index = DPA_InsertPtr(sic_hdpa, 0x7fff, lpsice); + if ( INVALID_INDEX == index ) + { + HeapFree(GetProcessHeap(), 0, lpsice->sSourceFile); + SHFree(lpsice); + ret = INVALID_INDEX; + } + else + { + index = ImageList_AddIcon (ShellSmallIconList, hSmallIcon); + index1= ImageList_AddIcon (ShellBigIconList, hBigIcon); + + if (index!=index1) + { + FIXME("iconlists out of sync 0x%x 0x%x\n", index, index1); + } + lpsice->dwListIndex = index; + ret = lpsice->dwListIndex; + } + + LeaveCriticalSection(&SHELL32_SicCS); + return ret; +} +/**************************************************************************** + * SIC_LoadIcon [internal] + * + * NOTES + * gets small/big icon by number from a file + */ +static INT SIC_LoadIcon (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags) +{ HICON hiconLarge=0; + HICON hiconSmall=0; + HICON hiconLargeShortcut; + HICON hiconSmallShortcut; + +#if defined(__CYGWIN__) || defined (__MINGW32__) || defined(_MSC_VER) + static UINT (WINAPI*PrivateExtractIconExW)(LPCWSTR,int,HICON*,HICON*,UINT) = NULL; + + if (!PrivateExtractIconExW) { + HMODULE hUser32 = GetModuleHandleA("user32"); + PrivateExtractIconExW = (UINT(WINAPI*)(LPCWSTR,int,HICON*,HICON*,UINT)) GetProcAddress(hUser32, "PrivateExtractIconExW"); + } + + if (PrivateExtractIconExW) + PrivateExtractIconExW(sSourceFile, dwSourceIndex, &hiconLarge, &hiconSmall, 1); + else +#endif + { + PrivateExtractIconsW(sSourceFile, dwSourceIndex, 32, 32, &hiconLarge, NULL, 1, 0); + PrivateExtractIconsW(sSourceFile, dwSourceIndex, 16, 16, &hiconSmall, NULL, 1, 0); + } + + if ( !hiconLarge || !hiconSmall) + { + WARN("failure loading icon %i from %s (%p %p)\n", dwSourceIndex, debugstr_w(sSourceFile), hiconLarge, hiconSmall); + return -1; + } + + if (0 != (dwFlags & GIL_FORSHORTCUT)) + { + hiconLargeShortcut = SIC_OverlayShortcutImage(hiconLarge, TRUE); + hiconSmallShortcut = SIC_OverlayShortcutImage(hiconSmall, FALSE); + if (NULL != hiconLargeShortcut && NULL != hiconSmallShortcut) + { + hiconLarge = hiconLargeShortcut; + hiconSmall = hiconSmallShortcut; + } + else + { + WARN("Failed to create shortcut overlayed icons\n"); + if (NULL != hiconLargeShortcut) DestroyIcon(hiconLargeShortcut); + if (NULL != hiconSmallShortcut) DestroyIcon(hiconSmallShortcut); + dwFlags &= ~ GIL_FORSHORTCUT; + } + } + + return SIC_IconAppend (sSourceFile, dwSourceIndex, hiconSmall, hiconLarge, dwFlags); +} +/***************************************************************************** + * SIC_GetIconIndex [internal] + * + * Parameters + * sSourceFile [IN] filename of file containing the icon + * index [IN] index/resID (negated) in this file + * + * NOTES + * look in the cache for a proper icon. if not available the icon is taken + * from the file and cached + */ +INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags ) +{ + SIC_ENTRY sice; + INT ret, index = INVALID_INDEX; + WCHAR path[MAX_PATH]; + + TRACE("%s %i\n", debugstr_w(sSourceFile), dwSourceIndex); + + GetFullPathNameW(sSourceFile, MAX_PATH, path, NULL); + sice.sSourceFile = path; + sice.dwSourceIndex = dwSourceIndex; + sice.dwFlags = dwFlags; + + EnterCriticalSection(&SHELL32_SicCS); + + if (NULL != DPA_GetPtr (sic_hdpa, 0)) + { + /* search linear from position 0*/ + index = DPA_Search (sic_hdpa, &sice, 0, SIC_CompareEntries, 0, 0); + } + + if ( INVALID_INDEX == index ) + { + ret = SIC_LoadIcon (sSourceFile, dwSourceIndex, dwFlags); + } + else + { + TRACE("-- found\n"); + ret = ((LPSIC_ENTRY)DPA_GetPtr(sic_hdpa, index))->dwListIndex; + } + + LeaveCriticalSection(&SHELL32_SicCS); + return ret; +} +/***************************************************************************** + * SIC_Initialize [internal] + */ +BOOL SIC_Initialize(void) +{ + HICON hSm = NULL, hLg = NULL; + INT cx_small, cy_small; + INT cx_large, cy_large; + HDC hDC; + INT bpp; + DWORD ilMask; + + TRACE("Entered SIC_Initialize\n"); + + if (sic_hdpa) + { + TRACE("Icon cache already initialized\n"); + return TRUE; + } + + sic_hdpa = DPA_Create(16); + if (!sic_hdpa) + { + return FALSE; + } + + hDC = CreateICW(L"DISPLAY", NULL, NULL, NULL); + if (!hDC) + { + ERR("Failed to create information context (error %d)\n", GetLastError()); + return FALSE; + } + + bpp = GetDeviceCaps(hDC, BITSPIXEL); + ReleaseDC(NULL, hDC); + + if (bpp <= 4) + ilMask = ILC_COLOR4; + else if (bpp <= 8) + ilMask = ILC_COLOR8; + else if (bpp <= 16) + ilMask = ILC_COLOR16; + else if (bpp <= 24) + ilMask = ILC_COLOR24; + else if (bpp <= 32) + ilMask = ILC_COLOR32; + else + ilMask = ILC_COLOR; + + ilMask |= ILC_MASK; + + cx_small = GetSystemMetrics(SM_CXSMICON); + cy_small = GetSystemMetrics(SM_CYSMICON); + cx_large = GetSystemMetrics(SM_CXICON); + cy_large = GetSystemMetrics(SM_CYICON); + + ShellSmallIconList = ImageList_Create(cx_small, + cy_small, + ilMask, + 100, + 100); + + ShellBigIconList = ImageList_Create(cx_large, + cy_large, + ilMask, + 100, + 100); + if (ShellSmallIconList) + { + /* Load the document icon, which is used as the default if an icon isn't found. */ + hSm = (HICON)LoadImageW(shell32_hInstance, + MAKEINTRESOURCEW(IDI_SHELL_DOCUMENT), + IMAGE_ICON, + cx_small, + cy_small, + LR_SHARED | LR_DEFAULTCOLOR); + if (!hSm) + { + ERR("Failed to load IDI_SHELL_DOCUMENT icon1!\n"); + return FALSE; + } + } + else + { + ERR("Failed to load ShellSmallIconList\n"); + return FALSE; + } + + if (ShellBigIconList) + { + hLg = (HICON)LoadImageW(shell32_hInstance, + MAKEINTRESOURCEW(IDI_SHELL_DOCUMENT), + IMAGE_ICON, + cx_large, + cy_large, + LR_SHARED | LR_DEFAULTCOLOR); + if (!hLg) + { + ERR("Failed to load IDI_SHELL_DOCUMENT icon2!\n"); + DestroyIcon(hSm); + return FALSE; + } + } + else + { + ERR("Failed to load ShellBigIconList\n"); + return FALSE; + } + + SIC_IconAppend(swShell32Name, IDI_SHELL_DOCUMENT-1, hSm, hLg, 0); + SIC_IconAppend(swShell32Name, -IDI_SHELL_DOCUMENT, hSm, hLg, 0); + + TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList); + + return TRUE; +} +/************************************************************************* + * SIC_Destroy + * + * frees the cache + */ +static INT CALLBACK sic_free( LPVOID ptr, LPVOID lparam ) +{ + HeapFree(GetProcessHeap(), 0, ((LPSIC_ENTRY)ptr)->sSourceFile); + SHFree(ptr); + return TRUE; +} + +void SIC_Destroy(void) +{ + TRACE("\n"); + + EnterCriticalSection(&SHELL32_SicCS); + + if (sic_hdpa) DPA_DestroyCallback(sic_hdpa, sic_free, NULL ); + + sic_hdpa = NULL; + ImageList_Destroy(ShellSmallIconList); + ShellSmallIconList = 0; + ImageList_Destroy(ShellBigIconList); + ShellBigIconList = 0; + + LeaveCriticalSection(&SHELL32_SicCS); + //DeleteCriticalSection(&SHELL32_SicCS); //static +} + +/***************************************************************************** + * SIC_LoadOverlayIcon [internal] + * + * Load a shell overlay icon and return its icon cache index. + */ +static int SIC_LoadOverlayIcon(int icon_idx) +{ + WCHAR buffer[1024], wszIdx[8]; + HKEY hKeyShellIcons; + LPCWSTR iconPath; + int iconIdx; + + static const WCHAR wszShellIcons[] = { + 'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\', + 'W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\', + 'E','x','p','l','o','r','e','r','\\','S','h','e','l','l',' ','I','c','o','n','s',0 + }; + static const WCHAR wszNumFmt[] = {'%','d',0}; + + iconPath = swShell32Name; /* default: load icon from shell32.dll */ + iconIdx = icon_idx; + + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, wszShellIcons, 0, KEY_READ, &hKeyShellIcons) == ERROR_SUCCESS) + { + DWORD count = sizeof(buffer); + + swprintf(wszIdx, wszNumFmt, icon_idx); + + /* read icon path and index */ + if (RegQueryValueExW(hKeyShellIcons, wszIdx, NULL, NULL, (LPBYTE)buffer, &count) == ERROR_SUCCESS) + { + LPWSTR p = wcschr(buffer, ','); + + if (p) + *p++ = 0; + + iconPath = buffer; + iconIdx = _wtoi(p); + } + + RegCloseKey(hKeyShellIcons); + } + + return SIC_LoadIcon(iconPath, iconIdx, 0); +} + +/************************************************************************* + * Shell_GetImageLists [SHELL32.71] + * + * PARAMETERS + * imglist[1|2] [OUT] pointer which receives imagelist handles + * + */ +BOOL WINAPI Shell_GetImageLists(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList) +{ TRACE("(%p,%p)\n",lpBigList,lpSmallList); + if (lpBigList) + { *lpBigList = ShellBigIconList; + } + if (lpSmallList) + { *lpSmallList = ShellSmallIconList; + } + + return TRUE; +} +/************************************************************************* + * PidlToSicIndex [INTERNAL] + * + * PARAMETERS + * sh [IN] IShellFolder + * pidl [IN] + * bBigIcon [IN] + * uFlags [IN] GIL_* + * pIndex [OUT] index within the SIC + * + */ +BOOL PidlToSicIndex ( + IShellFolder * sh, + LPCITEMIDLIST pidl, + BOOL bBigIcon, + UINT uFlags, + int * pIndex) +{ + CComPtr ei; + WCHAR szIconFile[MAX_PATH]; /* file containing the icon */ + INT iSourceIndex; /* index or resID(negated) in this file */ + BOOL ret = FALSE; + UINT dwFlags = 0; + int iShortcutDefaultIndex = INVALID_INDEX; + + TRACE("sf=%p pidl=%p %s\n", sh, pidl, bBigIcon?"Big":"Small"); + + if (SUCCEEDED (sh->GetUIObjectOf(0, 1, &pidl, IID_IExtractIconW, 0, (void **)&ei))) + { + if (SUCCEEDED(ei->GetIconLocation(uFlags, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags))) + { + *pIndex = SIC_GetIconIndex(szIconFile, iSourceIndex, uFlags); + ret = TRUE; + } + } + + if (INVALID_INDEX == *pIndex) /* default icon when failed */ + { + if (0 == (uFlags & GIL_FORSHORTCUT)) + { + *pIndex = 0; + } + else + { + if (INVALID_INDEX == iShortcutDefaultIndex) + { + iShortcutDefaultIndex = SIC_LoadIcon(swShell32Name, 0, GIL_FORSHORTCUT); + } + *pIndex = (INVALID_INDEX != iShortcutDefaultIndex ? iShortcutDefaultIndex : 0); + } + } + + return ret; + +} + +/************************************************************************* + * SHMapPIDLToSystemImageListIndex [SHELL32.77] + * + * PARAMETERS + * sh [IN] pointer to an instance of IShellFolder + * pidl [IN] + * pIndex [OUT][OPTIONAL] SIC index for big icon + * + */ +int WINAPI SHMapPIDLToSystemImageListIndex( + IShellFolder *sh, + LPCITEMIDLIST pidl, + int *pIndex) +{ + int Index; + UINT uGilFlags = 0; + + TRACE("(SF=%p,pidl=%p,%p)\n",sh,pidl,pIndex); + pdump(pidl); + + if (SHELL_IsShortcut(pidl)) + uGilFlags |= GIL_FORSHORTCUT; + + if (pIndex) + if (!PidlToSicIndex ( sh, pidl, 1, uGilFlags, pIndex)) + *pIndex = -1; + + if (!PidlToSicIndex ( sh, pidl, 0, uGilFlags, &Index)) + return -1; + + return Index; +} + +/************************************************************************* + * SHMapIDListToImageListIndexAsync [SHELL32.148] + */ +EXTERN_C HRESULT WINAPI SHMapIDListToImageListIndexAsync(IShellTaskScheduler *pts, IShellFolder *psf, + LPCITEMIDLIST pidl, UINT flags, + PFNASYNCICONTASKBALLBACK pfn, void *pvData, void *pvHint, + int *piIndex, int *piIndexSel) +{ + FIXME("(%p, %p, %p, 0x%08x, %p, %p, %p, %p, %p)\n", + pts, psf, pidl, flags, pfn, pvData, pvHint, piIndex, piIndexSel); + return E_FAIL; +} + +/************************************************************************* + * Shell_GetCachedImageIndex [SHELL32.72] + * + */ +INT WINAPI Shell_GetCachedImageIndexA(LPCSTR szPath, INT nIndex, UINT bSimulateDoc) +{ + INT ret, len; + LPWSTR szTemp; + + WARN("(%s,%08x,%08x) semi-stub.\n",debugstr_a(szPath), nIndex, bSimulateDoc); + + len = MultiByteToWideChar( CP_ACP, 0, szPath, -1, NULL, 0 ); + szTemp = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, szPath, -1, szTemp, len ); + + ret = SIC_GetIconIndex( szTemp, nIndex, 0 ); + + HeapFree( GetProcessHeap(), 0, szTemp ); + + return ret; +} + +INT WINAPI Shell_GetCachedImageIndexW(LPCWSTR szPath, INT nIndex, UINT bSimulateDoc) +{ + WARN("(%s,%08x,%08x) semi-stub.\n",debugstr_w(szPath), nIndex, bSimulateDoc); + + return SIC_GetIconIndex(szPath, nIndex, 0); +} + +EXTERN_C INT WINAPI Shell_GetCachedImageIndexAW(LPCVOID szPath, INT nIndex, BOOL bSimulateDoc) +{ if( SHELL_OsIsUnicode()) + return Shell_GetCachedImageIndexW((LPCWSTR)szPath, nIndex, bSimulateDoc); + return Shell_GetCachedImageIndexA((LPCSTR)szPath, nIndex, bSimulateDoc); +} + +/************************************************************************* + * ExtractIconExW [SHELL32.@] + * RETURNS + * 0 no icon found + * -1 file is not valid + * or number of icons extracted + */ +UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON * phiconLarge, HICON * phiconSmall, UINT nIcons) +{ + /* get entry point of undocumented function PrivateExtractIconExW() in user32 */ +#if defined(__CYGWIN__) || defined (__MINGW32__) || defined(_MSC_VER) + static UINT (WINAPI*PrivateExtractIconExW)(LPCWSTR,int,HICON*,HICON*,UINT) = NULL; + + if (!PrivateExtractIconExW) { + HMODULE hUser32 = GetModuleHandleA("user32"); + PrivateExtractIconExW = (UINT(WINAPI*)(LPCWSTR,int,HICON*,HICON*,UINT)) GetProcAddress(hUser32, "PrivateExtractIconExW"); + + if (!PrivateExtractIconExW) + return 0; + } +#endif + + TRACE("%s %i %p %p %i\n", debugstr_w(lpszFile), nIconIndex, phiconLarge, phiconSmall, nIcons); + + return PrivateExtractIconExW(lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons); +} + +/************************************************************************* + * ExtractIconExA [SHELL32.@] + */ +UINT WINAPI ExtractIconExA(LPCSTR lpszFile, INT nIconIndex, HICON * phiconLarge, HICON * phiconSmall, UINT nIcons) +{ + UINT ret = 0; + INT len = MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, NULL, 0); + LPWSTR lpwstrFile = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + + TRACE("%s %i %p %p %i\n", lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons); + + if (lpwstrFile) + { + MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, lpwstrFile, len); + ret = ExtractIconExW(lpwstrFile, nIconIndex, phiconLarge, phiconSmall, nIcons); + HeapFree(GetProcessHeap(), 0, lpwstrFile); + } + return ret; +} + +/************************************************************************* + * ExtractAssociatedIconA (SHELL32.@) + * + * Return icon for given file (either from file itself or from associated + * executable) and patch parameters if needed. + */ +HICON WINAPI ExtractAssociatedIconA(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIcon) +{ + HICON hIcon = NULL; + INT len = MultiByteToWideChar(CP_ACP, 0, lpIconPath, -1, NULL, 0); + /* Note that we need to allocate MAX_PATH, since we are supposed to fill + * the correct executable if there is no icon in lpIconPath directly. + * lpIconPath itself is supposed to be large enough, so make sure lpIconPathW + * is large enough too. Yes, I am puking too. + */ + LPWSTR lpIconPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); + + TRACE("%p %s %p\n", hInst, debugstr_a(lpIconPath), lpiIcon); + + if (lpIconPathW) + { + MultiByteToWideChar(CP_ACP, 0, lpIconPath, -1, lpIconPathW, len); + hIcon = ExtractAssociatedIconW(hInst, lpIconPathW, lpiIcon); + WideCharToMultiByte(CP_ACP, 0, lpIconPathW, -1, lpIconPath, MAX_PATH , NULL, NULL); + HeapFree(GetProcessHeap(), 0, lpIconPathW); + } + return hIcon; +} + +/************************************************************************* + * ExtractAssociatedIconW (SHELL32.@) + * + * Return icon for given file (either from file itself or from associated + * executable) and patch parameters if needed. + */ +HICON WINAPI ExtractAssociatedIconW(HINSTANCE hInst, LPWSTR lpIconPath, LPWORD lpiIcon) +{ + HICON hIcon = NULL; + WORD wDummyIcon = 0; + + TRACE("%p %s %p\n", hInst, debugstr_w(lpIconPath), lpiIcon); + + if(lpiIcon == NULL) + lpiIcon = &wDummyIcon; + + hIcon = ExtractIconW(hInst, lpIconPath, *lpiIcon); + + if( hIcon < (HICON)2 ) + { if( hIcon == (HICON)1 ) /* no icons found in given file */ + { WCHAR tempPath[MAX_PATH]; + HINSTANCE uRet = FindExecutableW(lpIconPath,NULL,tempPath); + + if( uRet > (HINSTANCE)32 && tempPath[0] ) + { wcscpy(lpIconPath,tempPath); + hIcon = ExtractIconW(hInst, lpIconPath, *lpiIcon); + if( hIcon > (HICON)2 ) + return hIcon; + } + } + + if( hIcon == (HICON)1 ) + *lpiIcon = 2; /* MSDOS icon - we found .exe but no icons in it */ + else + *lpiIcon = 6; /* generic icon - found nothing */ + + if (GetModuleFileNameW(hInst, lpIconPath, MAX_PATH)) + hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(*lpiIcon)); + } + return hIcon; +} + +/************************************************************************* + * ExtractAssociatedIconExW (SHELL32.@) + * + * Return icon for given file (either from file itself or from associated + * executable) and patch parameters if needed. + */ +EXTERN_C HICON WINAPI ExtractAssociatedIconExW(HINSTANCE hInst, LPWSTR lpIconPath, LPWORD lpiIconIdx, LPWORD lpiIconId) +{ + FIXME("%p %s %p %p): stub\n", hInst, debugstr_w(lpIconPath), lpiIconIdx, lpiIconId); + return 0; +} + +/************************************************************************* + * ExtractAssociatedIconExA (SHELL32.@) + * + * Return icon for given file (either from file itself or from associated + * executable) and patch parameters if needed. + */ +EXTERN_C HICON WINAPI ExtractAssociatedIconExA(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIconIdx, LPWORD lpiIconId) +{ + HICON ret; + INT len = MultiByteToWideChar( CP_ACP, 0, lpIconPath, -1, NULL, 0 ); + LPWSTR lpwstrFile = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); + + TRACE("%p %s %p %p)\n", hInst, lpIconPath, lpiIconIdx, lpiIconId); + + MultiByteToWideChar( CP_ACP, 0, lpIconPath, -1, lpwstrFile, len ); + ret = ExtractAssociatedIconExW(hInst, lpwstrFile, lpiIconIdx, lpiIconId); + HeapFree(GetProcessHeap(), 0, lpwstrFile); + return ret; +} + + +/**************************************************************************** + * SHDefExtractIconW [SHELL32.@] + */ +HRESULT WINAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags, + HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize) +{ + UINT ret; + HICON hIcons[2]; + WARN("%s %d 0x%08x %p %p %d, semi-stub\n", debugstr_w(pszIconFile), iIndex, uFlags, phiconLarge, phiconSmall, nIconSize); + + ret = PrivateExtractIconsW(pszIconFile, iIndex, nIconSize, nIconSize, hIcons, NULL, 2, LR_DEFAULTCOLOR); + /* FIXME: deal with uFlags parameter which contains GIL_ flags */ + if (ret == 0xFFFFFFFF) + return E_FAIL; + if (ret > 0) { + if (phiconLarge) + *phiconLarge = hIcons[0]; + else + DestroyIcon(hIcons[0]); + if (phiconSmall) + *phiconSmall = hIcons[1]; + else + DestroyIcon(hIcons[1]); + return S_OK; + } + return S_FALSE; +} + +/**************************************************************************** + * SHDefExtractIconA [SHELL32.@] + */ +HRESULT WINAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags, + HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize) +{ + HRESULT ret; + INT len = MultiByteToWideChar(CP_ACP, 0, pszIconFile, -1, NULL, 0); + LPWSTR lpwstrFile = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + + TRACE("%s %d 0x%08x %p %p %d\n", pszIconFile, iIndex, uFlags, phiconLarge, phiconSmall, nIconSize); + + MultiByteToWideChar(CP_ACP, 0, pszIconFile, -1, lpwstrFile, len); + ret = SHDefExtractIconW(lpwstrFile, iIndex, uFlags, phiconLarge, phiconSmall, nIconSize); + HeapFree(GetProcessHeap(), 0, lpwstrFile); + return ret; +} + +/**************************************************************************** + * SHGetIconOverlayIndexA [SHELL32.@] + * + * Returns the index of the overlay icon in the system image list. + */ +EXTERN_C INT WINAPI SHGetIconOverlayIndexA(LPCSTR pszIconPath, INT iIconIndex) +{ + FIXME("%s, %d\n", debugstr_a(pszIconPath), iIconIndex); + + return -1; +} + +/**************************************************************************** + * SHGetIconOverlayIndexW [SHELL32.@] + * + * Returns the index of the overlay icon in the system image list. + */ +EXTERN_C INT WINAPI SHGetIconOverlayIndexW(LPCWSTR pszIconPath, INT iIconIndex) +{ + FIXME("%s, %d\n", debugstr_w(pszIconPath), iIconIndex); + + return -1; +} diff --git a/reactos/dll/win32/shell32_new/lang/bg-BG.rc b/reactos/dll/win32/shell32_new/lang/bg-BG.rc new file mode 100644 index 00000000000..13a9bdb9f44 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/bg-BG.rc @@ -0,0 +1,761 @@ +/* Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Ăîëĺěč çíŕ÷ĺňŕ", FCIDM_SHVIEW_BIGICON + MENUITEM "&Ěŕëęč çíŕ÷ĺňŕ", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Ńďčńúę", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Ďîäđîáĺí", FCIDM_SHVIEW_REPORTVIEW +END + +// shellview background menu +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "Čç&ăëĺä" + BEGIN + MENUITEM "&Ăîëĺěč çíŕ÷ĺňŕ", FCIDM_SHVIEW_BIGICON + MENUITEM "&Ěŕëęč çíŕ÷ĺňŕ", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Ńďčńúę", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Ďîäđîáĺí", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Ďîäđĺćäŕíĺ íŕ &çíŕ÷ĺňŕňŕ" + BEGIN + MENUITEM "Ďî &čěĺ", 0x30 // column 0 + MENUITEM "Ďî &âčä", 0x32 // column 2 + MENUITEM "Ďî &đŕçěĺđ", 0x31 // ... + MENUITEM "Ďî &äŕňŕ", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Ńŕěîďîäđĺćäŕíĺ", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Ďîäđŕâíĺíč çíŕ÷ĺňŕ", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Îďđĺńí˙âŕíĺ", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Ďîńňŕâ˙íĺ", FCIDM_SHVIEW_INSERT + MENUITEM "Ďîńňŕâ˙íĺ ęŕňî âđúçęŕ", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Ńâîéńňâŕ", FCIDM_SHVIEW_PROPERTIES + END +END + +// shellview item menu +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Îáçîđ", FCIDM_SHVIEW_EXPLORE + MENUITEM "Î&ňâŕđ˙íĺ", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "Čç&đ˙çâŕíĺ", FCIDM_SHVIEW_CUT + MENUITEM "Çŕ&ďîěí˙íĺ", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Ńúçäŕâŕíĺ íŕ &âđúçęŕ", FCIDM_SHVIEW_CREATELINK + MENUITEM "Čç&ňđčâŕíĺ", FCIDM_SHVIEW_DELETE + MENUITEM "Ďđĺ&čěĺíóâŕíĺ", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Ńâîéńňâŕ", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Ňúđńĺíĺ íŕ ďŕďęŕ" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Äîáđĺ", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Îňęŕç", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Ňúđńĺíĺ íŕ ďŕďęŕ" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Ďŕďęŕ:", IDD_FOLDER, 10, 156, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Ńúçäŕâŕíĺ íŕ íîâŕ ďŕďęŕ", IDD_MAKENEWFOLDER, 10, 174, 92, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Äîáđĺ", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Îňęŕç", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Ńúîáůĺíčĺ" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Äŕ", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Äŕ çŕ âńč&÷ęč", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Íĺ", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Îňęŕç" , IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Çŕ %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Âĺđńč˙ " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Ňŕçč âĺđńč˙ íŕ ĐĺŕęňÎŃ ĺ çŕďčńŕíŕ íŕ:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Íŕëč÷íŕ ôčçč÷ĺńęŕ ďŕěĺň:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "Äîáđĺ", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ĐĺŕęňÎŃ äîńňčăíŕ äî âŕń, áëŕăîäŕđĺíčĺ íŕ:", IDC_STATIC, 0, 0, 250, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Íŕďčřĺňĺ čěĺňî íŕ ďđčëîćĺíčĺ, ďŕďęŕ, äîęóěĺíň čëč číňĺđíĺň čçňî÷íčę č ĐĺŕęňÎŃ ůĺ ăî îňâîđč.", 12289, 36, 11, 182, 18 + LTEXT "&Îňâŕđ˙íĺ:", 12305, 7, 39, 40, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 46, 37, 180, 100 + DEFPUSHBUTTON "Äîáđĺ", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Îňęŕç", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Îáçîđ...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ďđĺďđŕňęŕ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE + LTEXT "Âčä íŕ öĺëňŕ:", 14004, 10, 30, 60, 10 + LTEXT "", 14005, 70, 30, 150, 10 + LTEXT "Ě˙ńňî íŕ öĺëňŕ:", 14006, 10, 40, 60, 10 + LTEXT "", 14007, 70, 40, 150, 10 + LTEXT "Öĺë:", 14008, 10, 55, 55, 10 + EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT | ES_AUTOHSCROLL + LTEXT "Čçďúëí˙âŕíĺ â:",14010, 10, 65, 55, 10 + EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT | ES_AUTOHSCROLL + LTEXT "Áúđç &ęëŕâčř:", 14014, 10, 80, 55, 10 + EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT + LTEXT "Čçďúëí˙âŕíĺ:", 14016, 10, 90, 55, 10 + EDITTEXT 14017, 70, 90, 150, 10, ES_AUTOHSCROLL + LTEXT "Çŕáĺëĺćęŕ:", 14018, 10, 100, 55, 10 + EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT | ES_AUTOHSCROLL + PUSHBUTTON "&Íŕěčđŕíĺ íŕ öĺëňŕ...", 14020, 10, 115, 75, 14, ES_LEFT + PUSHBUTTON "&Ńě˙íŕ íŕ çíŕ÷ĺňî...", 14021, 86, 115, 72, 14, ES_LEFT + PUSHBUTTON "Đŕç&řčđĺíč...", 14022, 160, 115, 60, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 260, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Äîďúëíčňĺëíč ńâîéńňâŕ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Óęŕćĺňĺ ćĺëŕíčňĺ äîďúëíčňĺëíč ńâîéńňâŕ çŕ ďđĺďđŕňęŕňŕ.", -1, 5, 30, 246, 10 + CHECKBOX "Čçďúëí˙âŕíĺ ń đŕçëč÷íč ďđŕâîěîůč˙", 14000, 30, 50, 150, 10 + LTEXT "Ňŕçč âúçěîćíîńň âč ďîçâîë˙âŕ äŕ čçďúëíčňĺ ďđĺďđŕňęŕňŕ ęŕňî äđóă ďîňđĺáčňĺë čëč äŕ ďđîäúëćčňĺ ęŕňî ńĺáĺ ńč, ęŕňî ďđĺäďŕçâŕňĺ ęîěďţňúđŕ č äŕííčňĺ îň íĺóďúëíîěîůĺíŕ äĺéíîńň íŕ ďđčëîćĺíč˙ňŕ.", -1, 50, 60, 200, 40 + CHECKBOX "Čçďúëí˙âŕíĺ â îňäĺëĺí ä˙ë îň ďŕěĺňňŕ", 14001, 30, 100, 170, 10, WS_DISABLED + PUSHBUTTON "Äîáđĺ", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Ďđĺęúńâŕíĺ", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Îáůč" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Âčä íŕ ôŕéëŕ:", 14004, 8, 35, 50, 10 + LTEXT "Ďŕďęŕ", 14005, 68, 35, 160, 10 + LTEXT "Ě˙ńňî:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Đŕçěĺđ:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Ńúäúđćŕ:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Ńúçäŕäĺíî:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Ńŕěî çŕ ÷ĺňĺíĺ", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Ńęđčň", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Îáůč" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Âčä ôŕéë:", 14004, 8, 35, 50, 10 + LTEXT "Ôŕéë", 14005, 68, 35, 160, 10 + LTEXT "Îňâŕđ˙íĺ ń:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Ěĺńňîďîëîćĺíčĺ:", 14008, 8, 72, 61, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Đŕçěĺđ:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Ńúçäŕäĺí:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Ďđîěĺíĺí:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Čçďîëçâŕí:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Ďđčíŕäëĺćíîńňč", 14020, 8, 189, 60, 10 + CHECKBOX "Ńŕěî çŕ &÷ĺňĺíĺ", 14021, 61, 189, 67, 10 + CHECKBOX "Ń&ęđčň", 14022, 129, 189, 50, 10 + CHECKBOX "&Ńáčň", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Čçäŕíčĺ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Čçäŕíčĺ íŕ ôŕéëŕ: ", 14000, 10, 10, 67, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Îďčńŕíčĺ: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Âúçďđîčçâîäńňâĺíî ďđŕâî: ", 14004, 10, 46, 68, 16 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Äđóăč ńâĺäĺíč˙ çŕ čçäŕíčĺňî", 14006, 6, 70, 222, 115 + LTEXT "Čěĺ íŕ ďđĺäěĺňŕ: ", 14007, 13, 82, 90, 10 + LTEXT "Ńňîéíîńň: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Îáůč" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Âčä:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Ôŕéëîâŕ óđĺäáŕ:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Čçďîëçâŕíî ě˙ńňî:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Ńâîáîäíî ě˙ńňî:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Îáĺě:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Óńňđîéńňâî %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Ďî÷čńňâŕíĺ íŕ äčńęŕ", 14010, 150, 175, 80, 15, WS_TABSTOP + CHECKBOX "Óďëúňí˙âŕíĺ íŕ óńňđîéńňâîňî çŕ ńďĺńň˙âŕíĺ íŕ ě˙ńňî", 14011, 1, 205, 238, 10, WS_DISABLED + CHECKBOX "Číäĺęńčđŕůŕňŕ óńëóăŕ äŕ číäĺęńčđŕ äčńęŕ çŕ ďî- áúđçî ňúđńĺíĺ", 14012, 1, 220, 238, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ńđĺäńňâŕ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Ďđîâĺđęŕ çŕ ăđĺřęč", -1, 5, 5, 230, 60 + LTEXT "Ňîçč čçáîđ ůĺ ďđîâĺđč ňîěŕ çŕ ăđĺřęč.", -1, 40, 25, 160, 20 + PUSHBUTTON "Ďđîâĺđč âĺäíŕăŕ...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Ďîäđĺćäŕíĺ", -1, 5, 65, 230, 60 + LTEXT "Ňîçč čçáîđ ůĺ ďîäđĺäč (äĺôđŕăěĺíňčđŕ) ôŕéëîâĺňĺ íŕ ňîěŕ", -1, 40, 85, 160, 20 + PUSHBUTTON "Ďîäđĺäč âĺäíŕăŕ...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Çŕďŕń˙âŕíĺ", -1, 5, 130, 230, 60 + LTEXT "Ňîçč čçáîđ ůĺ íŕďđŕâč çŕďŕńíî ńúőđŕíĺíčĺ íŕ ôŕéëîâĺňĺ íŕ äčńęŕ.", -1, 40, 150, 160, 20 + PUSHBUTTON "Çŕďŕńč âĺäíŕăŕ", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Îáîđóäâŕíĺ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Čçďúëí˙âŕíĺ ęŕňî" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Îň ÷č˙ ďîňđĺáčňĺëńęŕ ńěĺňęŕ čńęŕňĺ äŕ čçďúëíčňĺ ďđčëîćĺíčĺňî?", -1, 10, 20, 220, 20 + CHECKBOX "Ńĺăŕřĺí ďîňđĺáčňĺë %s", 14000, 10, 45, 150, 10 + LTEXT "Çŕůčňŕ íŕ ęîěďţňúđŕ č äŕííčňĺ îň íĺóďúëíîěîůĺíŕ äĺéíîńň íŕ ďđčëîćĺíč˙ňŕ", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Ňîçč čçáîđ ěîćĺ äŕ ďîďđĺ÷č íŕ âčđóńčňĺ äŕ ďîâđĺä˙ň ęîěďţňúđŕ čëč äŕííčňĺ âč, íî ěîćĺ č äŕ ďîďđĺ÷č íŕ đĺäîâíŕňŕ đŕáîňŕ íŕ ďđčëîćĺíčĺňî.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Ńëĺäíč˙ň ďîňđĺáčňĺë:", 14002, 10, 100, 90, 10 + LTEXT "Ďîňđĺáčňĺë:", -1, 20, 115, 60, 10 + COMBOBOX 14003, 70, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Ďŕđîëŕ:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "Äîáđĺ", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Îňęŕç", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ńâîéńňâŕ íŕ ęîř÷ĺňî" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Íŕńňđîéęč çŕ čçáđŕíîňî ě˙ńňî", -1, 10, 72, 220, 70 + RADIOBUTTON "Ó&ęŕçŕí đŕçěĺđ:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "Đŕçěĺđ äî (ĚÁ):", -1, 20, 105, 70, 10 + RADIOBUTTON "Ôŕéëîâĺňĺ ńĺ čçňđčâŕň âĺäíŕăŕ, áĺç äŕ ńĺ ěĺńň˙ň â ęîř÷ĺňî.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Ďčňŕíĺ ďđĺäč čçňđčâŕíĺ", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Îňâŕđ˙íĺ ń" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Čçáĺđĺňĺ ďđčëîćĺíčĺ, ęîĺňî äŕ îňâîđč ňîçč ôŕéë:", -1, 44, 12, 211, 10 + LTEXT "Ôŕéë: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Ďđčëîćĺíč˙", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Âčíŕăč čçáđŕíîňî ďđčëîćĺíčĺ äŕ îňâŕđ˙ ňîçč âčä ôŕéëîâĺ.", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Îáçîđ...", 14004, 198, 207, 50, 14 + PUSHBUTTON "Äîáđĺ", 14005, 150, 236, 50, 14 + PUSHBUTTON "Îňęŕç", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Îáůč" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Çŕäŕ÷č", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Ďîęŕçâŕíĺ íŕ îáůčňĺ çŕäŕ÷č â ďŕďęčňĺ", 14001, 20, 25, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Čçďîëçâŕíĺ íŕ îáč÷ŕéíčňĺ ďŕďęč íŕ Windows", 14002, 20, 37, 210, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Îáçîđ íŕ ďŕďęčňĺ", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Îňâŕđ˙íĺ íŕ âńč÷ęč ďŕďęč â &ĺäčí ďđîçîđĺö", 14004, 20, 70, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Îňâŕđ˙íĺ íŕ âń˙ęŕ ďŕďęŕ â îň&äĺëĺí ďđîçîđĺö", 14005, 20, 82, 210, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Öúęŕíĺňî äĺéńňâŕ ňŕęŕ:", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Îňâŕđ˙íĺ ń ĺäčíč÷íî öúęŕíĺ (čçáîđ ń ďîńî÷âŕíĺ)", 14007, 20, 120, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Ďîä÷ĺđňŕâŕíĺ çŕăëŕâč˙ňŕ íŕ çíŕ÷ĺňŕňŕ ńúăëŕńíî &îáçîđíčęŕ ěč", 14008, 30, 220, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Ďîä÷ĺđňŕâŕíĺ íŕ çŕăëŕâč˙ňŕ íŕ çíŕ÷ĺňŕňŕ ďđč &ďîńî÷âŕíĺ", 14009, 30, 144, 220, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Îňâŕđ˙íĺ ń äâîéíî öúęŕíĺ (čçáčđŕíĺ ń ĺäčíč÷íî)", 14010, 20, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "Îň ďîä&đŕçáčđŕíčňĺ", 14011, 160, 180, 75, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Čçăëĺä" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Čçăëĺä íŕ ďŕďęčňĺ", -1, 7, 10, 249, 60 +//ICON +LTEXT "Ěîćĺňĺ äŕ ďđčëŕăŕňĺ čçăëĺäŕ (îň đîäŕ íŕ ďîäđîáĺí\nč íŕńňĺëĺí) íŕ ňŕçč ďŕďęŕ çŕ âńč÷ęč ďŕďęč.", -1, 60, 20, 190, 20 +PUSHBUTTON "Ďđčëŕăŕíĺ âúđőó âč&÷ęč ďŕďęč", 14001, 20, 50, 115, 14, WS_TABSTOP +PUSHBUTTON "&Çŕ÷čńňâŕíĺ íŕ âńč÷ęč ďŕďęč", 14002, 140, 50, 115, 14, WS_TABSTOP +LTEXT "Đŕçřčđĺíč íŕńňđîéęč", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Îň ďîä&đŕçáčđŕíčňĺ", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Âčäîâĺ ôŕéëîâĺ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Âďčńŕíč &âčäîâĺ ôŕéëîâĺ:", -1, 7, 10, 170, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Íîâ", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "Čç&ňđčâŕíĺ", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Ďîäđîáíîńňč çŕ đŕçřčđĺíčĺ '%s'", 14003, 7, 130, 249, 70 +LTEXT "Îňâŕđ˙íĺ ń:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Čěĺ íŕ ďđčëîćĺíčĺ", 14005, 100, 140, 40, 10 +PUSHBUTTON "Ďđî&ě˙íŕ...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Ôŕéëîâĺňĺ ń đŕçřčđĺíčĺ '%s' ńŕ îň âčäŕ '%s'.\nÇŕ äŕ ďđîěĺíčňĺ íŕńňđîéęčňĺ, çŕ âńč÷ęč '%s'\nôŕéëîâĺ, íŕňčńíĺňĺ „Đŕçřčđĺíč”.", 14007, 12, 155, 160, 32 +PUSHBUTTON "Đŕç&řčđĺíč", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ďîňâúđćäĺíčĺ çŕ çŕě˙íŕ íŕ ôŕéë" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Äŕ", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Äŕ çŕ âńč&÷ęč", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Íĺ", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Îňęŕç", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ďŕďęŕňŕ âĺ÷ĺ ńúäúđćŕ ôŕéë ń čěĺ '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Ďŕďęŕňŕ âĺ÷ĺ ńúäúđćŕ ôŕéë ńŕěî çŕ ÷ĺňĺíĺ ń čěĺ '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Ďŕďęŕňŕ âĺ÷ĺ ńúäúđćŕ ńčńňĺěĺí ôŕéë ń čěĺ '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Ćĺëŕĺňĺ ëč äŕ çŕěĺíčňĺ ńúůĺńňâóâŕůč˙ ôŕéë", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(íĺčçâĺńňíč äŕňŕ č đŕçěĺđ)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "ń ňîçč?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(íĺčçâĺńňíč äŕňŕ č đŕçěĺđ)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Čçëčçŕíĺ îň ĐĺŕęňÎŃ" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ńčăóđíč ëč ńňĺ, ÷ĺ čńęŕňĺ äŕ čçëĺçĺňĺ?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Čçëčçŕíĺ", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Îňęŕç", IDCANCEL, 122, 40, 60, 14 +END + + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Îňęŕ÷ŕíĺ îň ĐĺŕęňÎŃ" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ńčăóđíč ëč ńňĺ, ÷ĺ čńęŕňĺ äŕ ńĺ îňęŕ÷čňĺ?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Îňęŕ÷ŕíĺ", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Îňęŕç", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ńŕěîçŕďóńęŕíĺ" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Čçáĺđĺňĺ âčä ńúäúđćŕíčĺ, ńëĺä ňîâŕ čçáĺđĺňĺ äĺéńňâčĺ, ęîĺňî äŕ čçâúđřâŕ ĐĺŕęňÎŃ, ęîăŕňî ňîçč âčä ńĺ čçďîëçâŕ â óńňđîéńňâîňî:", 1000, 7, 2, 215, 24 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Äĺéńňâč˙", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Čçáĺđĺňĺ &äĺéńňâčĺ:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Âńĺęč ďúň ďčňŕíĺ çŕ &čçáîđ íŕ äĺéńňâčĺ", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Âđúůŕíĺ íŕ ďîä&đŕçáčđŕíčňĺ", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ńěĺńĺíî ńúäúđćŕíčĺ" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Íŕ ňîçč íîńčňĺë čěŕ ďîâĺ÷ĺ îň ĺäčí âčä ńúäúđćŕíčĺ.", 1001, 32, 7, 191, 20 + LTEXT "Ęŕęâî čńęŕňĺ äŕ íŕďđŕâč ĐĺŕęňÎŃ?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "Äîáđĺ", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Îňęŕç", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ńěĺńĺíî ńúäúđćŕíčĺ" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 2, 21, 24 + LTEXT "ĐĺŕęňÎŃ ěîćĺ äŕ čçâúđřâŕ ńúůîňî äĺéńňâčĺ ďđč âń˙ęî ďîńňŕâ˙íĺ íŕ íîńčňĺë čëč ńâúđçâŕíĺ íŕ óńňđîéńňâî ń ňŕęúâ âčä ôŕéë:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Ęŕęâî äŕ íŕďđŕâč ĐĺŕęňÎŃ?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Âčíŕăč ďđŕâč čçáđŕíîňî.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "Äîáđĺ", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Îňęŕç", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ńŕěîçŕďóńęŕíĺ" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ĐĺŕęňÎŃ ěîćĺ äŕ čçâúđřâŕ ńúůîňî äĺéńňâčĺ ďđč âń˙ęî ńâúđçâŕíĺ íŕ ňîâŕ óńňđîéńňâî.", 1001, 32, 7, 190, 22 + LTEXT "&Ęŕęâî äŕ íŕďđŕâč ĐĺŕęňÎŃ?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "Čçâúđřâŕíĺ íŕ čçáđŕíîňî äĺéńňâčĺ &âńĺęč ďúň", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "Äîáđĺ", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Îňęŕç", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Čçęëţ÷âŕíĺ íŕ ĐĺŕęňÎŃ" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Ęŕęâî čńęŕňĺ äŕ íŕďđŕâč ęîěďţňúđŕ?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Ďîääúđćŕ çŕí˙ňčĺňî âč, ęŕňî äúđćč ęîěďţňúđŕ íŕ íčńęî ďîňđĺáëĺíčĺ ńúń çŕďŕçĺíč â ďŕěĺňňŕ äŕííč. Ęîěďţňúđúň ńĺ ńúáóćäŕ ďđč íŕňčńęŕíĺ íŕ ęëŕâčř čëč ďđĺěĺńňâŕíĺ íŕ ěčřęŕňŕ", 8225, 37, 40, 167, 40 + DEFPUSHBUTTON "Äîáđĺ", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Îňęŕç", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "Ďîěî&ů", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Îđŕçěĺđ˙âŕíĺ (ôîđěŕňčđŕíĺ)" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Íŕ÷ŕëî", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Çŕňâŕđ˙íĺ", IDCANCEL, 118, 198, 60, 14 + LTEXT "&Îáĺě:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Ôŕéëîâŕ óđĺäáŕ", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Đŕçěĺđ íŕ đŕçďđĺäĺëĺíčňĺ ó÷ŕńňúöč", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Ĺňčęĺň íŕ& ňîěŕ:", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "&Âúçěîćíîńňč çŕ îđŕçěĺđ˙âŕíĺ", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Áúđçî îđŕçěĺđ˙âŕíĺ", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Čçďîëçâŕíĺ íŕ óďëúňí˙âŕíĺ", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 244, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ďđîâĺđęŕ íŕ äčńęŕ" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Íŕ÷ŕëî", IDOK, 53, 100, 60, 14 + GROUPBOX "Íŕńňđîéęč çŕ ďđîâĺđęŕňŕ", -1, 7, 6, 229, 50 + PUSHBUTTON "Îňęŕç", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Ńŕěîďîďđŕâ˙íĺ íŕ ńčńňĺěíčňĺ ăđĺřęč íŕ ôŕéëîâĺňĺ", 14000, 16, 15, 210, 10 + AUTOCHECKBOX "Îá&őîćäŕíĺ č îďčň çŕ âúçńňŕíîâ˙âŕíĺ íŕ ëîřčňĺ ńĺęňîđč", 14001, 16, 30, 210, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 42, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ńě˙íŕ íŕ çíŕ÷ĺ" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Ôŕéëîâ čěĺ:", -1, 7, 14, 208, 10 + PUSHBUTTON "Îáçîđ...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Çíŕ÷ĺňŕ:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "Äîáđĺ",IDOK, 107, 181,50, 14 + PUSHBUTTON "Îňęŕç",IDCANCEL, 167, 181, 50, 14 +END + + +STRINGTABLE DISCARDABLE +BEGIN + // columns in the shellview + IDS_SHV_COLUMN1 "Ôŕéë" + IDS_SHV_COLUMN2 "Đŕçěĺđ" + IDS_SHV_COLUMN3 "Âčä" + IDS_SHV_COLUMN4 "Ďđîěĺíĺí" + IDS_SHV_COLUMN5 "Ďđčçíŕę" + IDS_SHV_COLUMN6 "Đŕçěĺđ" + IDS_SHV_COLUMN7 "Íŕëč÷ĺí đŕçěĺđ" + IDS_SHV_COLUMN8 "Čěĺ" + IDS_SHV_COLUMN9 "Çŕáĺëĺćęč" + IDS_SHV_COLUMN10 "Ńîáńňâĺíčę" + IDS_SHV_COLUMN11 "Ăđóďŕ" + IDS_SHV_COLUMN12 "Ôŕéëîâî čěĺ" + IDS_SHV_COLUMN13 "Đŕçäĺë" + IDS_SHV_COLUMN_DELFROM "Ďúđâîíŕ÷ŕëíî ě˙ńňî" + IDS_SHV_COLUMN_DELDATE "Äŕňŕ íŕ čçňđčâŕíĺ" + IDS_SHV_COLUMN_FONTTYPE "Âčä řđčôň" + IDS_SHV_COLUMN_WORKGROUP "Đŕáîňíŕ ăđóďŕ" + IDS_SHV_NETWORKLOCATION "Ě˙ńňî â ěđĺćŕňŕ" + IDS_SHV_COLUMN_DOCUMENTS "Ęíčćŕ" + IDS_SHV_COLUMN_STATUS "Ńúńňî˙íčĺ" + IDS_SHV_COLUMN_COMMENTS "Çŕáĺëĺćęč" + IDS_SHV_COLUMN_LOCATION "Ě˙ńňî" + IDS_SHV_COLUMN_MODEL "Ěîäĺë" + + // special folders + IDS_DESKTOP "Đŕáîňíŕ ďëîů" + IDS_MYCOMPUTER "Ěî˙ň ęîěďţňúđ" + IDS_RECYCLEBIN_FOLDER_NAME "Ęîř÷ĺ" + IDS_CONTROLPANEL "Ęđčëî çŕ óďđŕâëĺíčĺ" + IDS_ADMINISTRATIVETOOLS "Óďđŕâíč÷ĺńęč ńđĺäńňâŕ" + + // context menus + IDS_VIEW_LARGE "&Ăîëĺěč çíŕ÷ĺňŕ" + IDS_VIEW_SMALL "&Ěŕëęč çíŕ÷ĺňŕ" + IDS_VIEW_LIST "&Ńďčńúę" + IDS_VIEW_DETAILS "&Ďîäđîáĺí" + IDS_SELECT "Čçáîđ" + IDS_OPEN "Îňâŕđ˙íĺ" + IDS_CREATELINK "Ńúçäŕâŕíĺ íŕ &âđúçęŕ" + IDS_COPY "Çŕ&ďîěí˙íĺ" + IDS_DELETE "Čç&ňđčâŕíĺ" + IDS_PROPERTIES "&Ńâîéńňâŕ" + IDS_CUT "Čç&đ˙çâŕíĺ" + IDS_RESTORE "Âúçâđúůŕíĺ" + IDS_FORMATDRIVE "Îđŕçěĺđ˙âŕíĺ..." + IDS_RENAME "Ďđĺčěĺíóâŕíĺ" + IDS_INSERT "Âěúęâŕíĺ" + + IDS_CREATEFOLDER_DENIED "Ńúçäŕâŕíĺňî íŕ íîâŕ ďŕďęŕ ĺ íĺâúçěîćíî: íĺäîńňŕňú÷íč ďđŕâŕ." + IDS_CREATEFOLDER_CAPTION "Ăđĺřęŕ ďđč ńúçäŕâŕíĺ íŕ íîâŕ ďŕďęŕ" + IDS_DELETEITEM_CAPTION "Ďîňâúđäĺňĺ čçňđčâŕíĺ íŕ ôŕéëŕ" + IDS_DELETEFOLDER_CAPTION "Ďîňâúđäĺňĺ čçňđčâŕíĺ íŕ ďŕďęŕňŕ" + IDS_DELETEITEM_TEXT "Ńčăóđĺí ëč ńňĺ, ÷ĺ čńęŕňĺ äŕ čçňđčĺňĺ '%1'?" + IDS_DELETEMULTIPLE_TEXT "Ńčăóđĺí ëč ńňĺ, ÷ĺ čńęŕňĺ äŕ čçňđčĺňĺ ňĺçč %1 ďđĺäěĺňŕ?" + IDS_DELETESELECTED_TEXT "Äŕ áúäŕň ëč čçňđčňč čçáđŕíčňĺ ôŕéëîâĺ?" + IDS_TRASHITEM_TEXT "Äŕ áúäĺ ëč čçďđŕňĺí '%1' â ęîř÷ĺňî?" + IDS_TRASHFOLDER_TEXT "Äŕ áúäŕň ëč čçďđŕňĺíč '%1' č ńúäúđćŕíčĺňî é â ęîř÷ĺňî?" + IDS_TRASHMULTIPLE_TEXT "Äŕ áúäŕň ëč čçďđŕňĺíč ňĺçč %1 ďđĺäěĺňŕ â ęîř÷ĺňî?" + IDS_CANTTRASH_TEXT "Ďđĺäěĺňúň '%1' íĺ ěîćĺ äŕ áúäĺ čçďđŕňĺí â ęîř÷ĺňî. Čńęŕňĺ ëč íŕďđŕâî äŕ ăî čçňđčĺňĺ?" + IDS_OVERWRITEFILE_TEXT "Ďŕďęŕňŕ âĺ÷ĺ ńúäúđćŕ ôŕéë ń čěĺ '%1'.\n\nČńęŕňĺ ëč äŕ ăî çŕěĺíčňĺ?" + IDS_OVERWRITEFILE_CAPTION "Ďîňâúđćäŕâŕíĺ çŕě˙íŕňŕ íŕ ôŕéëŕ" + IDS_OVERWRITEFOLDER_TEXT "Ňŕçč ďŕďęŕ âĺ÷ĺ ńúäúđćŕ ďŕďęŕ ń čěĺ '%1'.\n\n"\ + "Ŕęî ôŕéëîâĺňĺ â öĺëĺâŕňŕ ďŕďęŕ čěŕň ńúůčňĺ čěĺíŕ ęŕňî ôŕéëîâĺňĺ â\n"\ + "čçáđŕíŕňŕ ďŕďęŕ, ňĺ ůĺ áúäŕň çŕěĺíĺíč. Âńĺ îůĺ ëč čńęŕňĺ äŕ ďđĺěĺńňčňĺ\n"\ + "čëč ďđĺçŕďčřĺňĺ ďŕďęŕňŕ?" + + // message box strings + IDS_RESTART_TITLE "Ďđĺçŕďóńę" + IDS_RESTART_PROMPT "Čńęŕňĺ ëč äŕ ďđĺçŕďóńíĺňĺ ńčńňĺěŕňŕ?" + IDS_SHUTDOWN_TITLE "Čçęëţ÷âŕíĺ" + IDS_SHUTDOWN_PROMPT "Čńęŕňĺ ëč äŕ čçęëţ÷čňĺ ęîěďţňúđŕ?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + // shell folder path default values + IDS_PROGRAMS "Ďóńęîâ čçáîđíčę\\Ďđčëîćĺíč˙" + IDS_PERSONAL "Ęíčćŕ" + IDS_FAVORITES "Ëţáčěęč" + IDS_STARTUP "Ďóńęîâ čçáîđíčę\\Ďđčëîćĺíč˙\\Ńŕěîçŕďóńęŕůč" + IDS_RECENT "Ńęîđîříč" + IDS_SENDTO "Čçďđŕůŕíĺ" + IDS_STARTMENU "Ďóńęîâ čçáîđíčę" + IDS_MYMUSIC "Ěóçčęŕňŕ ěč" + IDS_MYVIDEO "Ëĺíňčňĺ ěč" + IDS_DESKTOPDIRECTORY "Đŕáîňíŕ ďëîů" + IDS_NETHOOD "Ěđĺćîâŕ îęîëíîńň" + IDS_TEMPLATES "Řŕáëîíč" + IDS_APPDATA "Ďđčëîćíč äŕííč" + IDS_PRINTHOOD "Ńúńĺäńęč ďĺ÷ŕňŕ÷č" + IDS_LOCAL_APPDATA "Ěĺńňíč íŕńňđîéęč\\Ďđčëîćíč äŕííč" + IDS_INTERNET_CACHE "Ěĺńňíč íŕńňđîéęč\\Temporary Internet Files" + IDS_COOKIES "Áčńęâčňęč" + IDS_HISTORY "Ěĺńňíč íŕńňđîéęč\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "Ěîčňĺ čçîáđŕćĺíč˙" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Äîęóěĺíňč" + IDS_ADMINTOOLS "Ďóńęîâ čçáîđíčę\\Ďđčëîćĺíč˙\\Óďđŕâíč÷ĺńęč ńđĺäńňâŕ" + IDS_COMMON_MUSIC "Äîęóěĺíňč\\Ěóçčęŕňŕ ěč" + IDS_COMMON_PICTURES "Äîęóěĺíňč\\Đčńóíęčňĺ ěč" + IDS_COMMON_VIDEO "Äîęóěĺíňč\\Ëĺíňčňĺ ěč" + IDS_CDBURN_AREA "Ěĺńňíč íŕńňđîéęč\\Ďđčëîćíč äŕííč\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Ěî˙ňŕ ěđĺćŕ" + + IDS_NEWFOLDER "Íîâŕ ďŕďęŕ" + + IDS_DRIVE_FIXED "Ěĺńňĺí äčńę" + IDS_DRIVE_CDROM "ĘÄ ÷ĺňĺö" + IDS_DRIVE_NETWORK "Ěđĺćîâ äčńę" + + IDS_OPEN_WITH "Îňâŕđ˙íĺ ń" + IDS_OPEN_WITH_CHOOSE "Čçáîđ íŕ ďđčëîćĺíčĺ..." + + IDS_SHELL_ABOUT_AUTHORS "&Ńúçäŕňĺëč" + IDS_SHELL_ABOUT_BACK "< &Íŕçŕä" + FCIDM_SHVIEW_NEW "Íîâč" + FCIDM_SHVIEW_NEWFOLDER "Íîâŕ &ďŕďęŕ" + FCIDM_SHVIEW_NEWLINK "Íîâŕ &âđúçęŕ" + IDS_FOLDER_OPTIONS "Íŕńňđîéęč íŕ ďŕďęčňĺ" + IDS_RECYCLEBIN_LOCATION "Ě˙ńňî íŕ ęîř÷ĺňî" + IDS_RECYCLEBIN_DISKSPACE "Ńâîáîäíî ě˙ńňî" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Čçáĺđĺňĺ çíŕ÷ĺ" + IDS_PICK_ICON_FILTER "Ôŕéëîâĺ ńúń çíŕ÷ĺňŕ(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Čçďúëíčěč ôŕéëîâĺ\0*.exe\0" + IDS_DIRECTORY "Ďŕďęŕ" + IDS_VIRTUAL_DRIVER "Âîäŕ÷ íŕ ďđčâčäíî óńňđîéńňâî" + IDS_BAT_FILE "Ďŕęĺňĺí ôŕéë íŕ ĐĺŕęňÎŃ" + IDS_CMD_FILE "Ďčńŕíčĺ çŕ óďđŕâëĺíčĺ íŕ ĐĺŕęňÎŃ" + IDS_COM_FILE "Ďđčëîćĺíčĺ çŕ ÄÎŃ" + IDS_CPL_FILE "Ďđĺäěĺň îň ęđčëîňî çŕ óďđŕâëĺíčĺ" + IDS_CUR_FILE "Ďîęŕçŕëĺö" + IDS_DLL_FILE "Đŕçřčđĺíčĺ çŕ ďđčëîćĺíč˙" + IDS_DRV_FILE "Âîäŕ÷ŕ íŕ óńňđîéńňâî" + IDS_EXE_FILE "Ďđčëîćĺíčĺ" + IDS_FON_FILE "Řđčôňîâ ôŕéë" + IDS_TTF_FILE "Ôŕéë ń řđčôň TrueType " + IDS_HLP_FILE "Ďîěîůĺí ôŕéë" + IDS_INI_FILE "Íŕńňđîĺ÷ĺí ôŕéë" + IDS_LNK_FILE "Ďđĺďđŕňęŕ" + IDS_SYS_FILE "Ńčńňĺěĺí ôŕéë" + + IDS_OPEN_VERB "Îňâŕđ˙íĺ" + IDS_RUNAS_VERB "Čçďúëí˙âŕíĺ ęŕňî " + IDS_EDIT_VERB "Îáđŕáîňęŕ" + IDS_FIND_VERB "Ňúđńĺíĺ" + IDS_PRINT_VERB "Đŕçďĺ÷ŕňâŕíĺ" + IDS_PLAY_VERB "Âúçďđîčçâĺćäŕíĺ" + IDS_PREVIEW_VERB "Ďđĺăëĺä" + + IDS_FILE_FOLDER "%u ôŕéëŕ, %u ďŕďęč" + IDS_PRINTERS "Ďĺ÷ŕňŕ÷č" + IDS_FONTS "Řđčôňîâĺ" + IDS_INSTALLNEWFONT "Ńëŕăŕíĺ íŕ íîâ řđčôň..." + + IDS_DEFAULT_CLUSTER_SIZE "Ďîäđŕçáčđŕí đŕçďđĺäĺëčňĺëĺí đŕçěĺđ" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END + + + + diff --git a/reactos/dll/win32/shell32_new/lang/ca-ES.rc b/reactos/dll/win32/shell32_new/lang/ca-ES.rc new file mode 100644 index 00000000000..214028e7d8e --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/ca-ES.rc @@ -0,0 +1,756 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_CATALAN, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&View" + BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Arrange &Icons" + BEGIN + MENUITEM "By &Name", 0x30 /* column 0 */ + MENUITEM "By &Type", 0x32 /* column 2 */ + MENUITEM "By &Size", 0x31 /* ... */ + MENUITEM "By &Date", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Auto Arrange", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Icons", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Refresh", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Paste", FCIDM_SHVIEW_INSERT + MENUITEM "Paste as Link", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Open", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ut", FCIDM_SHVIEW_CUT + MENUITEM "&Copy", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Create &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Delete", FCIDM_SHVIEW_DELETE + MENUITEM "&Rename", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Quant a %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "D'Acord", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS ha estat construit per:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18 + LTEXT "&Open:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&Browse...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "File" + IDS_SHV_COLUMN2 "Size" + IDS_SHV_COLUMN3 "Type" + IDS_SHV_COLUMN4 "Modified" + IDS_SHV_COLUMN5 "Attributes" + IDS_SHV_COLUMN6 "Size" + IDS_SHV_COLUMN7 "Size available" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Comments" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "My Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Lar&ge Icons" + IDS_VIEW_SMALL "S&mall Icons" + IDS_VIEW_LIST "&List" + IDS_VIEW_DETAILS "&Details" + IDS_SELECT "Select" + IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Restart" + IDS_RESTART_PROMPT "Do you want to restart the system?" + IDS_SHUTDOWN_TITLE "Shutdown" + IDS_SHUTDOWN_PROMPT "Do you want to shutdown?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "My Documents" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "New" + FCIDM_SHVIEW_NEWFOLDER "New &Folder" + FCIDM_SHVIEW_NEWLINK "New &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/cs-CZ.rc b/reactos/dll/win32/shell32_new/lang/cs-CZ.rc new file mode 100644 index 00000000000..dff2e85bff0 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/cs-CZ.rc @@ -0,0 +1,743 @@ +/* FILE: dll/win32/shell32/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2010-05-25 + * THANKS TO: navaraf, who translated major part of this file + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Vedle sebe", FCIDM_SHVIEW_BIGICON + MENUITEM "&Ikony", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Seznam", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Podrobnosti", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "Z&obrazit" + BEGIN + MENUITEM "&Vedle sebe", FCIDM_SHVIEW_BIGICON + MENUITEM "&Ikony", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Seznam", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Podrobnosti", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Seřadit &ikony" + BEGIN + MENUITEM "Podle &Názvu", 0x30 /* column 0 */ + MENUITEM "Podle &Typu", 0x32 /* column 2 */ + MENUITEM "Podle &Velikosti", 0x31 /* ... */ + MENUITEM "Podle &Data", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Rovnat automaticky", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Zarovnat ikony", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "A&ktualizovat", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "V&ložit", FCIDM_SHVIEW_INSERT + MENUITEM "Vložit zást&upce", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "&Vlastnosti", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "P&rozkoumat", FCIDM_SHVIEW_EXPLORE + MENUITEM "O&tevřít", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "Vyj&mout", FCIDM_SHVIEW_CUT + MENUITEM "&Kopírovat", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Vytvořit zástupc&e", FCIDM_SHVIEW_CREATELINK + MENUITEM "O&dstranit", FCIDM_SHVIEW_DELETE + MENUITEM "&Přejmenovat", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Vlastnosti", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Procházet..." +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Storno", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Procházet pro složku" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Složka:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Vytvořit novou složku", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Storno", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Zpráva" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Ano", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ano &všem", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Ne", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Storno", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "O aplikaci %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Verze " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Tato verze ReactOS je zaregistrována na:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Instalovaná fyzická pamě:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS je dílem:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Zadejte název programu, složky, dokumentu, nebo zdroje v síti Internet a ReactOS jej pro vás otevře.", 12289, 36, 11, 182, 18 + LTEXT "&Otevřít:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Storno", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Procházet...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Zástupce" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Typ cíle:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Umístění cíle:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "&Cíl:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Spustit v:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Klávesová zk&ratka:", 14014, 8, 115, 57, 10 //FIXME: momentalne se zalamuje a druhe slovo neni videt + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Spustit:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "&Komentář:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Najít cíl...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Změnit ikonu...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "R&ozšířené...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Rozšířené vlastnosti" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Zvolte rozšířené vlastnosti, které požadujtete pro tohoto zástupce.", -1, 5, 30, 210, 10 + CHECKBOX "Spustit s jinými pověřeními", 14000, 25, 50, 150, 10 + LTEXT "Tato možnost umožní spustit tohoto zástupce jako jiný uživatel nebo při spuštění se současným uživatelem chránit počítač před nepovolenou aktivitou programu.", -1, 50, 60, 175, 40 + CHECKBOX "Spustit v odděleném paměovém prostoru", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Storno", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Obecné" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Typ souboru:", 14004, 8, 35, 50, 10 + LTEXT "Složka", 14005, 68, 35, 160, 10 + LTEXT "Umístění:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Velikost:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Obsahuje:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Vytvořeno:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Jen pro čtení", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Skrytý", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Obecné" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Typ souboru:", 14004, 8, 35, 50, 10 + LTEXT "Soubor", 14005, 68, 35, 160, 10 + LTEXT "Otevírat v:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Umístění:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Velikost:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Vytvořeno:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Změněno:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Otevřeno:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Atributy:", 14020, 8, 189, 45, 10 + CHECKBOX "&Jen pro čtení", 14021, 58, 189, 67, 10 + CHECKBOX "&Skrytý", 14022, 126, 189, 50, 10 + CHECKBOX "&Archivovat", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Verze" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Verze souboru: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Popis: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Další informace o verzi: ", 14006, 6, 70, 222, 115 + LTEXT "Název položky: ", 14007, 13, 82, 50, 10 + LTEXT "Hodnota: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Obecné" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Typ:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Souborový systém:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Využité místo:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Volné místo:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Kapacita:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Disk %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Vyčištění disku", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Šetřit místo na disku jeho kompresí", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Povolit indexování disku pro rychlejší vyhledávání", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Nástroje" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Kontrola chyb", -1, 5, 5, 230, 60 + LTEXT "Tento nástroj otestuje svazek na chyby.", -1, 40, 25, 160, 20 + PUSHBUTTON "Zkontrolovat...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentace", -1, 5, 65, 230, 60 + LTEXT "Tento nástroj zdefragmentuje soubory na svazku", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragmentovat...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Záloha", -1, 5, 130, 230, 60 + LTEXT "Tímto nástrojem zazálohuje soubory na svazku.", -1, 40, 150, 160, 20 + PUSHBUTTON "Zálohovat...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Spustit jako" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Jaký uživatelský účet chcete použít ke spuštění tohoto programu?", -1, 10, 20, 220, 20 + CHECKBOX "Současný uživatel: %s", 14000, 10, 45, 150, 10 + LTEXT "Chránit počítač a data před nedovolenou aktivitou programu", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Tato volba může zabránit počítačovým virům v poškození vašeho počítače nebo osobních dat, ale její vybrání může způsobit nesprávné fungování programu.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Následující uživatel:", 14002, 10, 100, 90, 10 + LTEXT "Uživatelské jméno:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Heslo:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Storno", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Vlastnosti Koše" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Nastavení pro vybrané umístění", -1, 10, 72, 220, 70 + RADIOBUTTON "&Zvolená velikost:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximální velikost (MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "&Nepřesouvat soubory do Koše, odstraňovat okamžitě při smazání.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "Při mazání souborů žá&dat potvrzení", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Otevřít v..." +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Vyberte program, ve kterém chcete otevřít tento soubor: ", -1, 44, 12, 211, 10 + LTEXT "Soubor: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programy", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Vždy použít vybraný program k otevření tohoto typu souboru", 14003, 20, 193, 225, 10 + PUSHBUTTON "P&rocházet...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Storno", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Obecné" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Úkoly", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Zobrazit běžné operace ve složkách", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Použít klas&ické složky ReactOS", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Procházení složek", -1, 7, 60, 249, 45, WS_TABSTOP | WS_GROUP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Otevírat každou složku ve stejné&m okně", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Ote&vírat každou složku ve svém vlastním okně", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Klikání na položky", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Jedno kliknutí k &otevření položky (vybrat ukázáním)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Podtrhávat názvy ikon podle &nastavení prohlížeče", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Podtrhávat názvy ikon jen &při ukázání na ně", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Dvojkliknutí k otevření položky (vybrat kliknutím)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "O&bnovit výchozí", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Zobrazení" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Zobrazení složky", -1, 7, 10, 249, 60 +//ICON +LTEXT "Zobrazení použité pro tuto složku (jako třeba Podrobnosti nebo Miniatury)\n lze použít pro všechny složky.", -1, 60, 20, 180, 20 +PUSHBUTTON "&Použít pro všechny složky", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "Ob&novit všechny složky", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Pokročilá nastavení:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Obnovit výchozí", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Typy souborů" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registrované &typy souborů:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Nový", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "O&dstranit", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Podrobnosti pro typ souborů '%s'", 14003, 7, 130, 249, 70 +LTEXT "Otevírat v:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Změnit...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Soubory s příponou '%s' jsou typu '%s'. Kliknutím\nna tlačítko Pokročilé lze změnit nastavení pro všechny\nsoubory '%s'.", 14007, 12, 155, 160, 30 +PUSHBUTTON "&Pokročilé", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Potvrdit nahrazení souboru" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Ano", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Ano vš&em", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Ne", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Tato složka již obsahuje soubor s názvem '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Tato složka již obsahuje soubor pouze pro čtení s názvem '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Tato složka již obsahuje systémový soubor s názvem '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Chcete nahradit existující soubor", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(neznámé datum a velikost)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "tímto?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(neznámé datum a velikost)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Odhlásit se ze systému ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Opravdu se chcete odhlásit?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Odhlásit", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Odpojit se od systému ReactOS" //jak to prelozit, kde to v realu uvidim? +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Opravdu se chcete odpojit?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Odpojit", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autopřehrávání" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Vyberte &typ obsahu a akci, kterou systém ReactOS automaticky provede když se v tomto zařízení objeví tento typ obsahu:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Akce", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Zvolte akci, která bude &provedena:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "&Vždy se zeptat se na výběr akce", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Obnovit výchozí", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Smíšený obsah" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Tento disk nebo zařízení obsahuje víc než jeden typ obsahu.", 1001, 32, 7, 191, 20 + LTEXT "Co má systém ReactOS provést?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Smíšený obsah" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS může provést stejnou akci vždy, když vložíte disk či připojíte zařízení s tímto druhem souboru:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Co má systém ReactOS provést?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Zvolenou akci provést vždy.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autopřehrávání" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS může provést stejnou akci vždy, když připojíte toto zařízení.", 1001, 32, 7, 190, 22 + LTEXT "&Co má systém ReactOS provést?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "Zvolenou akci provést &vždy", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Vypnout ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Co má počítač provést?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Uchová toto sezení, počítač poběží se sníženou spotřebou s daty stále v paměti. Probudí se při stisknutí klávesu nebo pohybu myši.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Storno", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Nápověda", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Formátování" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Spustit", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Zavřít", IDCANCEL, 118, 198, 60, 14 + LTEXT "&Kapacita:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Souborový systém", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Velikost alokační jednotky", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Jmenovka svazku", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Možnosti &formátování", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Rychlé formátování", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Aktivovat kompresi", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Zkontrolovat disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Možnosti kontroly disku", -1, 7, 6, 179, 50 + PUSHBUTTON "Storno", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automaticky opravovat chyby souborového systému", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Vyhledat a pokusit se obnovit vadné sektory", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Změnit ikonu" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Název souboru:", -1, 7, 14, 208, 10 + PUSHBUTTON "Procházet...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Ikony:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Storno",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Název" + IDS_SHV_COLUMN2 "Velikost" + IDS_SHV_COLUMN3 "Typ" + IDS_SHV_COLUMN4 "Změněno" + IDS_SHV_COLUMN5 "Atributy" + IDS_SHV_COLUMN6 "Velikost" + IDS_SHV_COLUMN7 "Volné místo" + IDS_SHV_COLUMN8 "Jméno" + IDS_SHV_COLUMN9 "Komentář" + IDS_SHV_COLUMN10 "Vlastník" + IDS_SHV_COLUMN11 "Skupina" + IDS_SHV_COLUMN12 "Název souboru" + IDS_SHV_COLUMN13 "Kategorie" + IDS_SHV_COLUMN_DELFROM "Původní umístění" + IDS_SHV_COLUMN_DELDATE "Odstraněno" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Pracovní skupina" + IDS_SHV_NETWORKLOCATION "Síové umístění" + IDS_SHV_COLUMN_DOCUMENTS "Dokumenty" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Komentáře" + IDS_SHV_COLUMN_LOCATION "Umístění" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Plocha" + IDS_MYCOMPUTER "Tento počítač" + IDS_RECYCLEBIN_FOLDER_NAME "Koš" + IDS_CONTROLPANEL "Ovládací panely" + IDS_ADMINISTRATIVETOOLS "Nástroje správy" + + /* context menus */ + IDS_VIEW_LARGE "&Vedle sebe" + IDS_VIEW_SMALL "&Ikony" + IDS_VIEW_LIST "&Seznam" + IDS_VIEW_DETAILS "&Podrobnosti" + IDS_SELECT "Vybrat" + IDS_OPEN "Otevřít" + IDS_CREATELINK "Vytvořit zástupc&e" + IDS_COPY "&Kopírovat" + IDS_DELETE "O&dstranit" + IDS_PROPERTIES "&Vlastnosti" + IDS_CUT "Vyj&mout" + IDS_RESTORE "Obnovit" + IDS_FORMATDRIVE "Formátovat..." + IDS_RENAME "Přejmenovat" + IDS_INSERT "Vložit" + + IDS_CREATEFOLDER_DENIED "Nelze vytvořit novou složku, protože přístup byl odepřen." + IDS_CREATEFOLDER_CAPTION "Chyba při pokusu vytvořit nový adresář" + IDS_DELETEITEM_CAPTION "Potvrdit odstranění souboru" + IDS_DELETEFOLDER_CAPTION "Potvrdit odstranění adresáře" + IDS_DELETEITEM_TEXT "Opravdu chcete odstranit '%1'?" + IDS_DELETEMULTIPLE_TEXT "Opravdu chcete odstranit těchto %1 položek?" + IDS_DELETESELECTED_TEXT "Opravdu chcete odstranit zvolené položky?" + IDS_TRASHITEM_TEXT "Opravdu chcete přesunout '%1' do Koše?" + IDS_TRASHFOLDER_TEXT "Opravdu chcete přesunout složku '%1' a všechen její obsah do Koše?" + IDS_TRASHMULTIPLE_TEXT "Opravdu chcete přesunout těchto %1 položek do Koše?" + IDS_CANTTRASH_TEXT "Položka '%1' nemůže být přesunuta do Koše. Chcete ji místo toho smazat?" + IDS_OVERWRITEFILE_TEXT "Tato složka již obsahuje soubor s názvem '%1'.\n\nChcete jej přepsat?" + IDS_OVERWRITEFILE_CAPTION "Potvrdit přepsání souboru" + IDS_OVERWRITEFOLDER_TEXT "Tato složka již obsahuje složku s názvem '%1'.\n\n"\ + "Pokud mají soubory v cílové složce stejné názvy jako soubory ve zvolené\n"\ + "složce, budou přepsány. Opravdu chcete přesunout nebo zkopírovat tuto složku?" + + /* message box strings */ + IDS_RESTART_TITLE "Restartovat" + IDS_RESTART_PROMPT "Opravdu chcete restartovat systém?" + IDS_SHUTDOWN_TITLE "Vypnout" + IDS_SHUTDOWN_PROMPT "Opravdu chcete vypnout počítač?" + IDS_LOGOFF_TITLE "Odhlásit se" + IDS_LOGOFF_PROMPT "Opravdu se chcete odhlásit?" + + /* shell folder path default values */ + IDS_PROGRAMS "Nabídka Start\\Programy" + IDS_PERSONAL "Dokumenty" + IDS_FAVORITES "Oblíbené" + IDS_STARTUP "Nabídka Start\\Programy\\Po spuštění" + IDS_RECENT "Poslední dokumenty" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Nabídka Start" + IDS_MYMUSIC "Hudba" + IDS_MYVIDEO "Filmy" + IDS_DESKTOPDIRECTORY "Plocha" + IDS_NETHOOD "Okolní sí" + IDS_TEMPLATES "Šablony" + IDS_APPDATA "Data aplikací" + IDS_PRINTHOOD "Okolní tiskárny" + IDS_LOCAL_APPDATA "Local Settings\\Data aplikací" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "Obrázky" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Dokumenty" + IDS_ADMINTOOLS "Nabídka Start\\Programy\\Nástroje pro správu" + IDS_COMMON_MUSIC "Documents\\Hudba" + IDS_COMMON_PICTURES "Documents\\Obrázky" + IDS_COMMON_VIDEO "Documents\\Filmy" + IDS_CDBURN_AREA "Local Settings\\Data aplikací\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Místa v síti" + + IDS_NEWFOLDER "Nová složka" + + IDS_DRIVE_FIXED "Místní disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Síový Disk" + + IDS_OPEN_WITH "Otevřít v" + IDS_OPEN_WITH_CHOOSE "Zvolit program..." + + IDS_SHELL_ABOUT_AUTHORS "&Autoři" + IDS_SHELL_ABOUT_BACK "< &Zpět" + FCIDM_SHVIEW_NEW "&Nový" + FCIDM_SHVIEW_NEWFOLDER "Nová &složka" + FCIDM_SHVIEW_NEWLINK "Nový &zástupce" + IDS_FOLDER_OPTIONS "Možnosti složky" + IDS_RECYCLEBIN_LOCATION "Umístění koše" + IDS_RECYCLEBIN_DISKSPACE "Dostupné místo" + IDS_EMPTY_BITBUCKET "Vysypat koš" + IDS_PICK_ICON_TITLE "Zvolit ikonu" + IDS_PICK_ICON_FILTER "Soubory ikon (*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Spustitelné soubory\0*.exe\0" + IDS_DIRECTORY "Složka" + IDS_VIRTUAL_DRIVER "Virtuální ovladač zařízení" + IDS_BAT_FILE "ReactOS dávkový soubor" + IDS_CMD_FILE "ReactOS příkazový skript" + IDS_COM_FILE "DOSová aplikace" + IDS_CPL_FILE "Položka Ovládacích panelů" + IDS_CUR_FILE "Kurzor" + IDS_DLL_FILE "Rozšíření aplikace" + IDS_DRV_FILE "Ovladač zařízení" + IDS_EXE_FILE "Aplikace" + IDS_FON_FILE "Soubor písma" + IDS_TTF_FILE "Soubor písma TrueType" + IDS_HLP_FILE "Soubor nápovědy" + IDS_INI_FILE "Konfigurační nastavení" + IDS_LNK_FILE "Zástupce" + IDS_SYS_FILE "Systémový soubor" + + IDS_OPEN_VERB "Otevřít" + IDS_RUNAS_VERB "Spustit jako " + IDS_EDIT_VERB "Upravit" + IDS_FIND_VERB "Najít" + IDS_PRINT_VERB "Tisknout" + IDS_PLAY_VERB "Přehrát" + IDS_PREVIEW_VERB "Náhled" + + IDS_FILE_FOLDER "%u souborů, %u složek" + IDS_PRINTERS "Tiskárny" + IDS_FONTS "Fonty" + IDS_INSTALLNEWFONT "Nainstalovat nový font..." + + IDS_DEFAULT_CLUSTER_SIZE "Výchozí alokační velikost" + IDS_COPY_OF "Kopie " + + IDS_SHLEXEC_NOASSOC "Pro otevření tohoto souboru není nakonfigurován žádný program." +END diff --git a/reactos/dll/win32/shell32_new/lang/da-DK.rc b/reactos/dll/win32/shell32_new/lang/da-DK.rc new file mode 100644 index 00000000000..9ad423c95e4 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/da-DK.rc @@ -0,0 +1,745 @@ +/* PROJECT: ReactOS Shell Library + * FILE: dll/win32/shell32/lang/da-DK.rc + * PURPOSE: Danish resource file + * UPDATED: 01 May 2009 + */ + +LANGUAGE LANG_DANISH, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Sto&re Ikoner", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mĺ Ikoner", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Visning" + BEGIN + MENUITEM "Sto&re Ikoner", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mĺ Ikoner", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Arrangere &Ikoner" + BEGIN + MENUITEM "Efter &Navn", 0x30 /* column 0 */ + MENUITEM "Efter &Type", 0x32 /* column 2 */ + MENUITEM "Efter &Střrrelse", 0x31 /* ... */ + MENUITEM "Efter &Dato", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Arrangere Automatisk", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Ikoner", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Opfrisk", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Indsćt", FCIDM_SHVIEW_INSERT + MENUITEM "Indsćt som Link", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Egenskaber", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Ĺbn", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "K&lip", FCIDM_SHVIEW_CUT + MENUITEM "&Kopiere", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Opret &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Slet", FCIDM_SHVIEW_DELETE + MENUITEM "&Omdřb", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Egenskabe", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Sřg efter Mappe" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Fortryd", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Om %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS havde ikke vćret mulig uden hjćlp fra disse personer:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Run" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Indtast navnet pĺ det program, mappe, dokument, eller Internet Ressourcer, du vil have at ReactOS skal ĺbne for dig.", 12289, 36, 11, 182, 18 + LTEXT "&Ĺbn:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "Fortryd", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&Gennemse...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Ny", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Fil" + IDS_SHV_COLUMN2 "Střrrelse" + IDS_SHV_COLUMN3 "Type" + IDS_SHV_COLUMN4 "Ćndret" + IDS_SHV_COLUMN5 "Attributer" + IDS_SHV_COLUMN6 "Střrrelse" + IDS_SHV_COLUMN7 "Střrrelse tilgćngelig" + IDS_SHV_COLUMN8 "Navn" + IDS_SHV_COLUMN9 "Kommentar" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Skrivebord" + IDS_MYCOMPUTER "Min Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Sto&re Ikoner" + IDS_VIEW_SMALL "S&mĺ Ikoner" + IDS_VIEW_LIST "&Liste" + IDS_VIEW_DETAILS "&Detaljer" + IDS_SELECT "Vćlg" + IDS_OPEN "Ĺbn" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Kan ikke oprette ny mappe: Tilladelse Afvist." + IDS_CREATEFOLDER_CAPTION "Fejl ved oprettelse ad ny mappe" + IDS_DELETEITEM_CAPTION "Bekrćft sletning af fil" + IDS_DELETEFOLDER_CAPTION "Bekrćft sletning af mappe" + IDS_DELETEITEM_TEXT "Er du sikker pĺ du vil slette '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "Overskriv fil %1?" + IDS_OVERWRITEFILE_CAPTION "Bekrćft overskrivelse af fil" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Genstart" + IDS_RESTART_PROMPT "Řnsker du at Genstarte Systemet?" + IDS_SHUTDOWN_TITLE "Luk Ned" + IDS_SHUTDOWN_PROMPT "Řnsker du at Lukke Ned?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programmer" + IDS_PERSONAL "Mine Dokumenter" + IDS_FAVORITES "Favoritter" + IDS_STARTUP "Start Menu\\Programer\\Opstart" + IDS_RECENT "Midlertidige" + IDS_SENDTO "Send Til" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "Mine Dokumenter\\Min Musik" + IDS_MYVIDEO "Mine Dokumenter\\Mine Videoer" + IDS_DESKTOPDIRECTORY "Skrivebord" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Skabeloner" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Lokale Indstillinger\\Application Data" + IDS_INTERNET_CACHE "Midlertidige Internet Filer" + IDS_COOKIES "Cookies" + IDS_HISTORY "Historie" + IDS_PROGRAM_FILES "Programmer" + IDS_MYPICTURES "Mine Dokumenter\\Mine Billeder" + IDS_PROGRAM_FILES_COMMON "Programmer\\Fćlles Filer" + IDS_COMMON_DOCUMENTS "Dokumenter" + IDS_ADMINTOOLS "Start Menu\\Programmer\\Administrative Vćrktřjer" + IDS_COMMON_MUSIC "Dokumenter\\Min Musik" + IDS_COMMON_PICTURES "Dokumenter\\Mine Billeder" + IDS_COMMON_VIDEO "Dokumenter\\Mine Videoer" + IDS_CDBURN_AREA "Lokale Indstillinger\\Application Data\\Microsoft\\CD Brćnding" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "Ny Mappe" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "Ny" + FCIDM_SHVIEW_NEWFOLDER "Ny &Mappe" + FCIDM_SHVIEW_NEWLINK "Nyt &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/de-DE.rc b/reactos/dll/win32/shell32_new/lang/de-DE.rc new file mode 100644 index 00000000000..5610af6fa30 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/de-DE.rc @@ -0,0 +1,760 @@ +/* + * Copyright 1998 Juergen Schmied + * Copyright 2004 Henning Gerhardt + * Copyright 2007 Daniel Reimer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Große Symbole", FCIDM_SHVIEW_BIGICON + MENUITEM "&Kleine Symbole", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Ansicht" + BEGIN + MENUITEM "&Große Symbole", FCIDM_SHVIEW_BIGICON + MENUITEM "&Kleine Symbole", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Symbole anordnen" + BEGIN + MENUITEM "Nach &Name", 0x30 /* column 0 */ + MENUITEM "Nach &Typ", 0x32 /* column 2 */ + MENUITEM "Nach &Größe", 0x31 /* ... */ + MENUITEM "Nach &Datum", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Automatisch anordnen", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Icons anordnen", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Aktualisieren", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Einfügen", FCIDM_SHVIEW_INSERT + MENUITEM "Einfügen als Verweis", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "&Eigenschaften", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplorer", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Öffnen", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "&Ausschneiden", FCIDM_SHVIEW_CUT + MENUITEM "&Kopieren", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "&Verknüpfung erstellen", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Löschen", FCIDM_SHVIEW_DELETE + MENUITEM "&Umbenennen", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Eigenschaften", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Verzeichnis auswählen" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Abbrechen", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Verzeichnis auswählen" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Ordner:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Neuen Ordner erstellen", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Abbrechen", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Meldung" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ja zu &allen", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Nein", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Abbrechen", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Informationen über %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Diese ReactOS-Version wurde registriert auf:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installierter physikalischer Speicher:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS wurde Ihnen zur Verfügung gestellt von:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Ausführen" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Geben Sie den Namen eines Programms, eines Ordners, eines Dokuments oder einer Internetressource an.", 12289, 36, 11, 182, 18 + LTEXT "&Öffnen:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "Abbrechen", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&Durchsuchen...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Verknüpfung" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Zieltyp:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Zielpfad:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Ziel:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Starten in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "&Kurztasten:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Ausführen:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "K&ommentar:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Ziel finden...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "S&ymbol wechseln...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "Er&weitert...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Erweiterte Einstellungen" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Wählen Sie die erweiterten Einstellungen für diese Verknüpfung.", -1, 5, 30, 210, 10 + CHECKBOX "Als anderer Benutzer ausführen", 14000, 25, 50, 150, 10 + LTEXT "Diese Einstellung ermöglicht es, diese Verknüpfung unter einem anderen oder Ihrem eingenen Bentzerkonto auszuführen während der Computer und Ihre Daten vor unauthorisierten Programmaktivitäten geschützt werden können.", -1, 50, 60, 175, 40 + CHECKBOX "In getrenntem Speicherbereich ausführen", 14001, 25, 100, 150, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abbrechen", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Typ:", 14004, 8, 35, 50, 10 + LTEXT "Dateiordner", 14005, 68, 35, 160, 10 + LTEXT "Ort:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Größe:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Inhalt:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Erstellt:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Schreibgeschützt", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Versteckt", 14022, 126, 150, 50, 10 +END + + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Dateityp:", 14004, 8, 35, 50, 10 + LTEXT "Datei", 14005, 68, 35, 160, 10 + LTEXT "Öffnen mit:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Pfad:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Größe:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Erstellt:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Geändert:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Zugegriffen:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attribute:", 14020, 8, 189, 45, 10 + CHECKBOX "&Schreibgeschützt", 14021, 45, 189, 67, 10 + CHECKBOX "&Versteckt", 14022, 126, 189, 50, 10 + CHECKBOX "&Archiv", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Dateiversion: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Beschreibung: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Weitere Versionsinformationen: ", 14006, 6, 70, 222, 115 + LTEXT "Elementname: ", 14007, 13, 82, 50, 10 + LTEXT "Wert: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Typ:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Dateisystem:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Belegter Speicher:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Freier Speicher:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Speicherkapazität:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Laufwerk %s", 14009, 100, 170, 50, 10 + PUSHBUTTON "Bereinigen", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Laufwerk komprimieren, um Speicherplatz zu sparen", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Laufwerk für schnelle Dateisuche indizieren", 14012, 15, 220, 165, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Extras" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Fehlerüberprüfung", -1, 5, 5, 230, 60 + LTEXT "Bei Wahl dieser Option wird das Volume\nauf Fehler überprüft.", -1, 40, 25, 160, 20 + PUSHBUTTON "Jetzt &prüfen...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentierung", -1, 5, 65, 230, 60 + LTEXT "Bei Wahl dieser Option werden die Dateien auf\ndem Volume defragmentiert.", -1, 40, 85, 160, 20 + PUSHBUTTON "Jetzt &defragmentieren...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Sicherung", -1, 5, 130, 230, 60 + LTEXT "Bei Wahl dieser Option werden die auf dem\nVolume gespeicherten Dateien gesichert.", -1, 40, 150, 160, 20 + PUSHBUTTON "Jetzt &sichern...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ausführen als" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Welches Benutzerkonto wollen Sie zum Starten dieser Anwendung verwenden?", -1, 10, 20, 220, 20 + CHECKBOX "Aktueller Benutzer %s", 14000, 10, 45, 150, 10 + LTEXT "Computer vor unauthorisierten Programmaktiviäten schützen", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Diese Einstellung kann Computerviren daran hindern, ihrem Computer oder Ihren persönlichen Daten zu schaden, aber es kann auch Programme daran hindern, ordnungsgemäß zu arbeiten.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Folgender Benutzer:", 14002, 10, 100, 90, 10 + LTEXT "Benutzername:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Passwort:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Abbrechen", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Papierkorb-Einstellungen" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Einstellungen für gewählten Ort", -1, 10, 72, 220, 70 + RADIOBUTTON "&Definierte Größe:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximale Größe (MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Dateien nicht in den Papie&rkorb verschieben, sondern sofort löschen", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "Bestätigungs&dialog nach erfolgreichem Löschvorgang anzeigen", 14004, 20, 155, 215, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Öffnen mit" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Wählen Sie das Programm, das zum Öffnen dieser Datei verwendet werden soll:", -1, 44, 12, 211, 18 + LTEXT "Datei: ", 14001, 44, 30, 188, 10 + GROUPBOX "&Programme", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Dateityp &immer mit dem ausgewählten Programm öffnen", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Durchsuchen...", 14004, 188, 207, 60, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Abbrechen", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Aufgaben", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Allgemeine Aufgaben in Ordnern anzeigen", 14001, 40, 25, 150, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "ReactOS Klassisc&he Ansicht verwenden", 14002, 40, 37, 150, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Ordner durchsuchen", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Jeden Ordner im &selben Fenster öffnen", 14004, 40, 70, 150, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Jeden Ordner im eigenen Fenster öffnen", 14005, 40, 82, 150, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Markieren von Elementen", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Öffnen durch &einfachen Klick (Markieren durch zeigen)", 14007, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Symbolunerschriften wie im Br&owser unterstreichen", 14008, 50, 132, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Symbolunerschriften nur beim Zeigen &unterstreichen", 14009, 50, 144, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Öffnen durch &Doppelklick (Markieren durch einfachen Klick)", 14010, 40, 156, 210, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Wiederherstellen", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Ansicht" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Ordneransicht", -1, 7, 10, 249, 60 + //ICON + LTEXT "Sie können die Ansicht (Details oder Kacheln), die Sie für\ndiesen Ordner verwenden, auf alle Ordner anwenden.", -1, 60, 20, 180, 20 + PUSHBUTTON "Auf a&lle Ordner anwenden", 14001, 60, 50, 90, 14, WS_TABSTOP + PUSHBUTTON "&Alle Ordner zurücksetzen", 14002, 160, 50, 90, 14, WS_TABSTOP + LTEXT "Erweiterte Einstellungen:", -1, 7, 80, 100, 10 + CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 + PUSHBUTTON "&Wiederherstellen", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Dateitypen" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "&Registrierte Dateitypen:", -1, 7, 10, 80, 10 + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 + PUSHBUTTON "&Neu", 14001, 120, 110, 50, 14, WS_TABSTOP + PUSHBUTTON "&Löschen", 14002, 180, 110, 50, 14, WS_TABSTOP + GROUPBOX "Details zum Dateityp '%s'", 14003, 7, 130, 249, 70 + LTEXT "Öffnen mit:", -1, 12, 140, 40, 10 + //ICON + LTEXT "Anwendungsname", 14005, 100, 140, 40, 10 + PUSHBUTTON "Än&dern...", 14006, 180, 140, 50, 14, WS_TABSTOP + LTEXT "Um\ndie Einstellungen, die alle Dateien des Typs '%s' betreffen zu ändern, klicken Sie auf Erweitert.", 14007, 12, 155, 160, 30 + PUSHBUTTON "&Erweitert", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Bestätige Überschreiben der Datei(en)" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Ja", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Ja für &alle", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Nein", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Abbrechen", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Dieser Ordner enthält bereits eine Datei namens '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Dieser Ordner enthält bereits eine schreibgeschützte Datei namens '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Dieser Ordner enthält bereits eine Systemdatei namens '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Wollen Sie die existierende Datei", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(Unbekanntes Datum und Größe)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "durch diese ersetzen?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(Unbekanntes Datum und Größe)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Abmelden" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Sind Sie sicher, dass sie sich abmelden wollen?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Abmelden", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Abbrechen", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ReactOS trennen" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Sind Sie sicher dass Sie die Verbindung trennen wollen?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Trennen", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Abbrechen", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Wä&hlen Sie einen Inhaltstyp und eine Aktion, die durchgeführt werden soll, wenn dieser Typ in dem Gerät verwendet wird:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Aktionen", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "&Durchzuführende Aktion auswählen:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "&Eingabeaufforderung, um Aktion auszuwählen", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Wiederherstellen", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Gemischter Inhalt" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Dieser Datenträger bzw. das Gerät enthält Inhalte verschiedener Typen.", 1001, 32, 7, 191, 20 + LTEXT "&Welche Aktion soll ReactOS durchführen?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Abbrechen", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Gemischter Inhalt" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS kann immer dieselbe Aktion durchführen, wenn ein Datenträger eingelegt wird / ein Gerät angeschlossen wird:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "&Welche Aktion soll ReactOS durchführen?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "&Ausgewählte Aktion immer durchführen", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Abbrechen", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Bei jeder Verbindungsherstellung mit dem Gerät kann ReactOS dieselbe Aktion durchführen.", 1001, 32, 7, 190, 22 + LTEXT "&Welche Aktion soll ReactOS durchführen?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Ausgewählte Aktion immer durchführen", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Abbrechen", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ReactOS herunterfahren" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Welcher Vorgang soll durchgeführt werden?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Behält die Sitzung bei, speichert die Daten im Arbeitsspeicher und schaltet den Computer in den Energiesparmodus. Der Computer wird reaktiviert, sobald die Tastatur bzw. die Maus betätigt wird.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Abbrechen", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Hilfe", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Formatieren von" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Starten", IDOK, 53, 198, 60, 14 + PUSHBUTTON "S&chließen", IDCANCEL, 118, 198, 60, 14 + LTEXT "S&peicherkapazität:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Dateisystem", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Größe der Zuordnungseinheiten", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume&bezeichnung", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "&Formatierungsoptionen", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "Sch&nellformatierung", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Komprimierung aktivieren", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Überprüfen des Datenträgers" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Starten", IDOK, 53, 100, 60, 14 + GROUPBOX "Optionen für die Datenträgerprüfung", -1, 7, 6, 179, 50 + PUSHBUTTON "S&chließen", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "&Dateisystemfehler automatisch korrigieren", 14000, 16, 15, 165, 10 + AUTOCHECKBOX "&Fehlerhafte Sektoren suchen/wiederherstellen", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 0, 7, 60, 179, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Anderes Symbol" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Dateiname:", -1, 7, 14, 208, 10 + PUSHBUTTON "Durchsuchen...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Symbole:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Abbrechen",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Datei" + IDS_SHV_COLUMN2 "Größe" + IDS_SHV_COLUMN3 "Typ" + IDS_SHV_COLUMN4 "Geändert" + IDS_SHV_COLUMN5 "Attribute" + IDS_SHV_COLUMN6 "Gesamtgröße" + IDS_SHV_COLUMN7 "Freier Speicher" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Kommentar" + IDS_SHV_COLUMN10 "Besitzer" + IDS_SHV_COLUMN11 "Gruppe" + IDS_SHV_COLUMN12 "Dateinamen" + IDS_SHV_COLUMN13 "Kategorie" + IDS_SHV_COLUMN_DELFROM "Ursprung" + IDS_SHV_COLUMN_DELDATE "Gelöscht am" + IDS_SHV_COLUMN_FONTTYPE "Schriftartentyp" + IDS_SHV_COLUMN_WORKGROUP "Arbeitsgruppe" + IDS_SHV_NETWORKLOCATION "Netzwerkstandort" + IDS_SHV_COLUMN_DOCUMENTS "Dokumente" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Kommentare" + IDS_SHV_COLUMN_LOCATION "Ort" + IDS_SHV_COLUMN_MODEL "Model" + + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "Arbeitsplatz" + IDS_RECYCLEBIN_FOLDER_NAME "Papierkorb" + IDS_CONTROLPANEL "Systemsteuerung" + IDS_ADMINISTRATIVETOOLS "Verwaltung" + + /* context menus */ + IDS_VIEW_LARGE "&Große Symbole" + IDS_VIEW_SMALL "&Kleine Symbole" + IDS_VIEW_LIST "&Liste" + IDS_VIEW_DETAILS "&Details" + IDS_SELECT "Auswählen" + IDS_OPEN "Öffnen" + IDS_CREATELINK "&Verknüpfung erstellen" + IDS_COPY "Kopieren" + IDS_DELETE "Löschen" + IDS_PROPERTIES "Eigenschaften" + IDS_CUT "Ausschneiden" + IDS_RESTORE "Wiederherstellen" + IDS_FORMATDRIVE "Formatieren..." + IDS_RENAME "Umbenennen" + IDS_INSERT "Einfügen" + + IDS_CREATEFOLDER_DENIED "Es konnte kein neues Verzeichnis erstellt werden: Zugriff verweigert." + IDS_CREATEFOLDER_CAPTION "Es trat ein Fehler beim Erstellen eines neuen Verzeichnisses auf." + IDS_DELETEITEM_CAPTION "Bestätigung: Objekt löschen" + IDS_DELETEFOLDER_CAPTION "Bestätigung: Verzeichnis löschen" + IDS_DELETEITEM_TEXT "Sind Sie sich sicher, dass Sie '%1' löschen möchten?" + IDS_DELETEMULTIPLE_TEXT "Sind Sie sich sicher, dass Sie diese %1 Objekte löschen möchten?" + IDS_DELETESELECTED_TEXT "Sind Sie sich sicher, dass Sie die ausgewählten Objekte löschen möchten?" + IDS_TRASHITEM_TEXT "Sind Sie sich sicher, dass Sie '%1' in den Papierkorb verschieben möchten?" + IDS_TRASHFOLDER_TEXT "Sind Sie sich sicher, dass Sie '%1' und seinen Inhalt in den Papierkorb verschieben möchten?" + IDS_TRASHMULTIPLE_TEXT "Sind Sie sich sicher, dass Sie diese %1 Dateien in den Papierkorb verschieben möchten?" + IDS_CANTTRASH_TEXT "Das Objekt '%1' kann nicht in den Papierkorb verschoben werden. Möchten Sie es stattdessen löschen?" + IDS_OVERWRITEFILE_TEXT "Dieser Ordner enthält bereits eine Datei namens '%1'.\n\nWollen Sie diese überschreiben?" + IDS_OVERWRITEFILE_CAPTION "Bestätigung: Datei überschreiben" + IDS_OVERWRITEFOLDER_TEXT "Dieser Ordner enthält bereits einen Ordner namens '%1'.\n\n"\ + "Wenn Dateien im Zielordner die gleichen Namen haben, wie Dateien\n"\ + "im gewählten Ordner, werden diese ersetzt. Soll der Vorgang fortgesetzt werden?" + + /* message box strings */ + IDS_RESTART_TITLE "Neu starten" + IDS_RESTART_PROMPT "Möchten Sie das System neu starten?" + IDS_SHUTDOWN_TITLE "Herunterfahren" + IDS_SHUTDOWN_PROMPT "Möchten Sie das System herunterfahren?" + IDS_LOGOFF_TITLE "Ausloggen" + IDS_LOGOFF_PROMPT "Möchten Sie sich ausloggen?" + + /* shell folder path default values */ + IDS_PROGRAMS "Startmenü\\Programme" + IDS_PERSONAL "Eigene Dateien" + IDS_FAVORITES "Favoriten" + IDS_STARTUP "Startmenü\\Programme\\Autostart" + IDS_RECENT "Dokumente" + IDS_SENDTO "Senden an" + IDS_STARTMENU "Startmenü" + IDS_MYMUSIC "Meine Musik" + IDS_MYVIDEO "Meine Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "Netzwerkumgebung" + IDS_TEMPLATES "Vorlagen" + IDS_APPDATA "Anwendungsdaten" + IDS_PRINTHOOD "Druckumgebung" + IDS_LOCAL_APPDATA "Lokale Einstellungen\\Anwendungsdaten" + IDS_INTERNET_CACHE "Lokale Einstellungen\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Lokale Einstellungen\\Verlauf" + IDS_PROGRAM_FILES "Programme" + IDS_MYPICTURES "Eigene Bilder" + IDS_PROGRAM_FILES_COMMON "Programme\\Gemeinsame Dateien" + IDS_COMMON_DOCUMENTS "Dokumente" + IDS_ADMINTOOLS "Startmenü\\Programme\\Verwaltung" + IDS_COMMON_MUSIC "Dokumente\\Eigene Musik" + IDS_COMMON_PICTURES "Dokumente\\Eigene Bilder" + IDS_COMMON_VIDEO "Dokumente\\Eigene Videos" + IDS_CDBURN_AREA "Lokale Einstellungen\\Anwendungsdaten\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Netzwerkumgebung" + + IDS_NEWFOLDER "Neuer Ordner" + + IDS_DRIVE_FIXED "Lokaler Datenträger" + IDS_DRIVE_CDROM "CD-Laufwerk" + IDS_DRIVE_NETWORK "Netzlaufwerk" + + IDS_OPEN_WITH "Öffnen &mit..." + IDS_OPEN_WITH_CHOOSE "Programm wählen..." + + IDS_SHELL_ABOUT_AUTHORS "&Autoren" + IDS_SHELL_ABOUT_BACK "< &Zurück" + FCIDM_SHVIEW_NEW "Neu" + FCIDM_SHVIEW_NEWFOLDER "Neues Ver&zeichnis" + FCIDM_SHVIEW_NEWLINK "Neuer Ver&weis" + IDS_FOLDER_OPTIONS "Ordneroptionen" + IDS_RECYCLEBIN_LOCATION "Papierkorbpfad" + IDS_RECYCLEBIN_DISKSPACE "freier Speicher" + IDS_EMPTY_BITBUCKET "Papierkorb leeren" + IDS_PICK_ICON_TITLE "Symbol auswählen" + IDS_PICK_ICON_FILTER "Symboldateien(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Programme\0*.exe\0" + IDS_DIRECTORY "Dateiordner" + IDS_VIRTUAL_DRIVER "Virtueller Gerätetreiber" + IDS_BAT_FILE "ReactOS-Stapelverarbeitungsdatei" + IDS_CMD_FILE "ReactOS-Befehlsskript" + IDS_COM_FILE "Dos Anwendung" + IDS_CPL_FILE "Systemsteuerungselement" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Programmbibliothek" + IDS_DRV_FILE "Gerätetreiber" + IDS_EXE_FILE "Anwendung" + IDS_FON_FILE "Schriftartendatei" + IDS_TTF_FILE "TrueType-Schriftartendatei" + IDS_HLP_FILE "Hilfedatei" + IDS_INI_FILE "Konfigurationseinstellungen" + IDS_LNK_FILE "Verknüpfung" + IDS_SYS_FILE "Systemdatei" + + IDS_OPEN_VERB "Öffnen" + IDS_RUNAS_VERB "Ausführen als " + IDS_EDIT_VERB "Bearbeiten" + IDS_FIND_VERB "Finden" + IDS_PRINT_VERB "Drucken" + IDS_PLAY_VERB "Abspielen" + IDS_PREVIEW_VERB "Vorschau" + + IDS_FILE_FOLDER "%u Dateien, %u Ordner" + IDS_PRINTERS "Drucker" + IDS_FONTS "Schriftarten" + IDS_INSTALLNEWFONT "Neue Schriftart installieren..." + + IDS_DEFAULT_CLUSTER_SIZE "Standardgröße" + IDS_COPY_OF "Kopie von" + + IDS_SHLEXEC_NOASSOC "Es ist kein Programm mit diesem Dateityp verknüpft." +END diff --git a/reactos/dll/win32/shell32_new/lang/el-GR.rc b/reactos/dll/win32/shell32_new/lang/el-GR.rc new file mode 100644 index 00000000000..a269d68ed2f --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/el-GR.rc @@ -0,0 +1,757 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_GREEK, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&ĚĺăÜëá ĺéęďíßäéá", FCIDM_SHVIEW_BIGICON + MENUITEM "Ě&éęńÜ ĺéęďíßäéá", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Ëßóôá", FCIDM_SHVIEW_LISTVIEW + MENUITEM "Ë&ĺđôďěÝńĺéĺň", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&ĐńďâďëŢ" + BEGIN + MENUITEM "&ĚĺăÜëá ĺéęďíßäéá", FCIDM_SHVIEW_BIGICON + MENUITEM "Ě&éęńÜ ĺéęďíßäéá", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Ëßóôá", FCIDM_SHVIEW_LISTVIEW + MENUITEM "Ë&ĺđôďěÝńĺéĺň", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "&Ôáęôďđďßçóç ĺéęďíéäßůí" + BEGIN + MENUITEM "ĘáôÜ ü&íďěá", 0x30 /* column 0 */ + MENUITEM "ĘáôÜ &ôýđď", 0x32 /* column 2 */ + MENUITEM "ĘáôÜ &ěÝăĺčďň", 0x31 /* ... */ + MENUITEM "ĘáôÜ &çěĺńďěçíßá", 0x33 + MENUITEM SEPARATOR + MENUITEM "Áőôüěáôç ôáęôďđďßçóç", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "ĹőčőăńÜěěéóç ĺéęďíéäßůí", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "ÁíáíÝůóç", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Ĺđéęüëçóç", FCIDM_SHVIEW_INSERT + MENUITEM "Ĺđéęüëçóç óőíôüěĺőóçň", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Éäéüôçôĺň", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Ĺîĺńĺýíçóç", FCIDM_SHVIEW_EXPLORE + MENUITEM "&˘íďéăěá", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "Á&đďęďđŢ", FCIDM_SHVIEW_CUT + MENUITEM "Á&íôéăńáöŢ", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Äçěéďőńăßá &óőíôüěĺőóçň", FCIDM_SHVIEW_CREATELINK + MENUITEM "&ÄéáăńáöŢ", FCIDM_SHVIEW_DELETE + MENUITEM "&Ěĺôďíďěáóßá", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Éäéüôçôĺň", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "ÁíáćŢôçóç öáęÝëďő" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "˘ęőńď", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "ÁíáćŢôçóç öáęÝëďő" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "ÖÜęĺëďň:", IDD_FOLDER, 10, 156, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Äçěéďőńăßá öáęÝëďő", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "˘ęőńď", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Ěýíçěá" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Íáé", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Íáé óĺ ü&ëá", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ź&÷é", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "˘&ęőńď", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +SHELL_ABOUT_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Đëçńďöďńßĺň: %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "¸ęäďóç " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "ÁőôŢ ç Ýęäďóç ôďő ReactOS ĺßíáé ęáôá÷ůńçěÝíç óôďí :", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "ĹăęáôĺóôçěÝíç öőóéęŢ ěíŢěç:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Ôď ReactOS óáň äüčçęĺ áđü:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "ĐëçęôńďëďăŢóôĺ ôď üíďěá ĺíüň đńďăńÜěěáôďň, öáęÝëďő, ĺăăńÜöďő, Ţ đüńďő ôďő äéáäőęôßďő, ęáé ôď ReactOS čá ôď áíďßîĺé.", 12289, 36, 4, 182, 25 + LTEXT "˘&íďéăěá:", 12305, 5, 39, 31, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "˘ęőńď", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&ÁíáćŢôçóç...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Óőíôüěĺőóç" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE + LTEXT "Ôýđďň đńďďńéóěďý:", 14004, 10, 25, 50, 15 + LTEXT "", 14005, 70, 30, 150, 10 + LTEXT "ČÝóç đńďďńéóěďý:", 14006, 10, 40, 70, 10 + LTEXT "", 14007, 70, 40, 150, 10 + LTEXT "Đńďďńéóěüň:", 14008, 10, 55, 45, 10 + EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT | ES_AUTOHSCROLL + LTEXT "&Ĺęęßíçóç óôď:",14010, 10, 65, 57, 10 + EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT | ES_AUTOHSCROLL + LTEXT "ĐëŢęôńď óőíôüěĺőóçň:", 14014, 10, 75, 60, 15 + EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT + LTEXT "ĹęôÝëĺóç:", 14016, 10, 90, 57, 10 + EDITTEXT 14017, 70, 90, 150, 10, ES_AUTOHSCROLL + LTEXT "&Ó÷üëéá:", 14018, 10, 100, 57, 10 + EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT | ES_AUTOHSCROLL + PUSHBUTTON "&Ĺýńĺóç đńďďńéóěďý...", 14020, 10, 115, 71, 14, ES_LEFT + PUSHBUTTON "&ÁëëáăŢ ĺéęďíéäßďő...", 14021, 83, 115, 71, 14, ES_LEFT + PUSHBUTTON "&Ăéá đńď÷ůńçěÝíďőň...", 14022, 156, 115, 71, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Đńüóčĺôĺň éäéüôçôĺň" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "ĹđéëÝîôĺ ôéň đńüóčĺôĺň éäéüôçôĺň đďő čÝëĺôĺ ăéá áőôŢí ôçí óőíôüěĺőóç.", -1, 5, 30, 210, 20 + CHECKBOX "ĹęôÝëĺóç ěĺ äéáöďńĺôéęÜ đéóôďđďéçôéęÜ", 14000, 25, 50, 150, 10 + LTEXT "ÁőôŢ ç ĺđéëďăŢ čá óáň ĺđéôńÝřĺé íá ĺęôĺëÝóĺôĺ ôçí óőíôüěĺőóç ůň äéáöďńĺôéęüň ÷ńŢóôçň Ţ ůň ĺóĺßň ď ßäéďň đńďóôáôĺýďíôáň ôďí őđďëďăéóôŢ óáň áđü ěç ĺîďőóéďäďôçěÝíĺň ĺíÝńăĺéĺň đńďăńáěěÜôůí.", -1, 50, 60, 175, 40 + CHECKBOX "ĹęôÝëĺóç óĺ äéáöďńĺôéęŢ đĺńéď÷Ţ ěíŢěçň", 14001, 25, 100, 150, 10, WS_DISABLED + PUSHBUTTON "OK", IDOK, 25, 120, 50, 15, WS_VISIBLE + PUSHBUTTON "˘ęőńď", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ĂĺíéęÜ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ĂĺíéęÜ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY + LTEXT "Ôýđďň áń÷ĺßďő:", 14004, 10, 30, 50, 10 + LTEXT "Áń÷ĺßď", 14005, 70, 30, 150, 10 + LTEXT "Áíďßăĺé ěĺ:", 14006, 10, 40, 50, 10 + LTEXT "", 14007, 70, 40, 150, 10 + LTEXT "ČÝóç:", 14008, 10, 55, 45, 10 + LTEXT "", 14009, 70, 55, 200, 10 + LTEXT "ĚÝăĺčďň:",14010, 10, 65, 45, 10 + LTEXT "", 14011, 70, 65, 150, 10 + LTEXT "ÄçěéďőńăŢčçęĺ:", 14014, 10, 80, 65, 10 + LTEXT "", 14015, 70, 80, 150, 10 + LTEXT "ÔńďđďđďéŢčçęĺ:", 14016, 10, 90, 65, 10 + LTEXT "", 14017, 70, 90, 150, 10 + LTEXT "ĐńďóđĺëÜóôçęĺ:", 14018, 10, 100, 65, 10 + LTEXT "", 14019, 70, 100, 150, 10 + LTEXT "×áńáęôçńéóôéęÜ:", 14020, 10, 115, 70, 10 + CHECKBOX "&Ěüíď ăéá áíÜăíůóç", 14021, 70, 115, 75, 10 + CHECKBOX "&Ęńőöü", 14022, 150, 115, 50, 10 + CHECKBOX "&Archive", 14023, 190, 115, 45, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "¸ęäďóç" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "¸ęäďóç áń÷ĺßďő: ", 14000, 10, 10, 60, 10 + LTEXT "", 14001, 80, 10, 160, 10 + LTEXT "ĐĺńéăńáöŢ: ", 14002, 10, 20, 60, 10 + LTEXT "", 14003, 80, 20, 160, 10 + LTEXT "ĐíĺőěáôéęÜ äéęáéţěáôá: ", 14004, 10, 30, 70, 10 + LTEXT "", 14005, 80, 30, 160, 10 + GROUPBOX "˘ëëĺň đëçńďöďńßĺň: ", 14006, 10, 45, 220, 90 + LTEXT "źíďěá óôďé÷ĺßďő: ", 14007, 20, 55, 60, 10 + LTEXT "ÔéěŢ: ", 14008, 130, 55, 45, 10 + LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ĂĺíéęÜ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Ôýđďň:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Óýóôçěá áń÷ĺßůí:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "ÄĺóěĺőěÝíďň ÷ţńďň:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Ĺëĺýčĺńďň ÷ţńďň:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "×ůńçôéęüôçôá:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Äßóęďň %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "ĹęęáčÜńéóç äßóęďő", 14010, 160, 175, 70, 15, WS_TABSTOP + CHECKBOX "Óőěđßĺóç äßóęďő ăéá ĺîďéęďíüěçóç ÷ţńďő", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Äçěéďőńăßá ĺőńĺôçńßďő ăéá ăńçăďńüôĺńç áíáćŢôçóç", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ĺńăáëĺßá" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "¸ëĺă÷ďň óöáëěÜôůí", -1, 5, 5, 230, 60 + LTEXT "ÁőôŢ ç ĺđéëďăŢ čá ĺëÝăîĺé ôďí\nôüěď ăéá óöÜëěáôá.", -1, 40, 25, 160, 20 + PUSHBUTTON "¸&ëĺă÷ďň...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Áíáóőăęńüôçóç", -1, 5, 65, 230, 60 + LTEXT "ÁőôŢ ç ĺđéëďăŢ čá áíáóőăęńďôŢóĺé ôá\náń÷ĺßá óĺ áőôüí ôďí ôüěď", -1, 40, 85, 160, 20 + PUSHBUTTON "&Áíáóőăęńüôçóç...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Áíôßăńáöá áóöáëĺßáň", -1, 5, 130, 230, 60 + LTEXT "ÁőôŢ ç ĺđéëďăŢ čá äçěéďőńăŢóĺé áíôßăńáöá\nóöáëĺßáň ăéá ôá áń÷ĺßá áőôďý ôďő ôüěďő.", -1, 40, 150, 160, 20 + PUSHBUTTON "Áíôßăńáöá áóöáëĺßáň...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Őëéęü" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ĹęôÝëĺóç ţň" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "ĹđéëÝîôĺ đďéüň ëďăáńéáóěüň ÷ńŢóôç čÝëĺôĺ íá ôńÝîĺé áőôü ôď đńüăńáěěá", -1, 10, 20, 220, 20 + CHECKBOX "ÔńÝ÷ďí ÷ńŢóôçň %s", 14000, 10, 45, 150, 10 + LTEXT "Đńďóôáóßá ôďő őđďëďăéóôŢ áđď ěç ĺîďőóéďäďôçěÝíĺň ĺíÝńăĺéĺň đńďăńáěěÜôůí", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "ÁőôŢ ç ĺđéëďăŢ ěđďńĺß íá áđďôńÝřĺé éďýň íá âëÜřďőí ôďí őđďëďăéóôŢ óáň áëëÜ ĺđéëÝăďíôÜň ôď ěđďńĺß íá ęÜíĺé ęÜđďéá đńďăńÜěěáôá íá ěçí ëĺéôďőńăďýí óůóôÜ.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Ď đáńáęÜôů ÷ńŢóôçň:", 14002, 10, 100, 90, 10 + LTEXT "źíďěá ÷ńŢóôç:", -1, 20, 115, 60, 10 + COMBOBOX 14003, 70, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 10, WS_TABSTOP + LTEXT "Ęůäéęüň đńüóâáóçň:", -1, 20, 140, 60, 10 + EDITTEXT 14005, 70, 140, 100, 10, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 10, WS_TABSTOP + PUSHBUTTON "OK", 14007, 70, 170, 60, 15, WS_TABSTOP + PUSHBUTTON "˘ęőńď", 14008, 140, 170, 60, 15, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Éäéüôçôĺň ęÜäďő áíáęýęëůóçň" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Ńőčěßóĺéň ăéá ôďí ĺđéëĺăěÝíď đńďďńéóěü", -1, 10, 80, 220, 70 + RADIOBUTTON "&ĐńďóáńěďóěÝíď ěÝăĺčďň:", 14001, 20, 90, 90, 10 + EDITTEXT 14002, 110, 90, 50, 10, WS_TABSTOP | ES_NUMBER + LTEXT "ĚÝăéóôď ěÝăĺčďň (MB):", -1, 20, 100, 100, 10 + RADIOBUTTON "Íá ěçí ěĺôáęéíďýíôáé ôá áń÷ĺßá óôďí ęÜäď áíáęőęëůóçň. Íá ęáôáńăďýíôáé ôá áń÷ĺßá ěüëéň äéáăńÜöďíôáé.", 14003, 20, 115, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&ĹěöÜíéóç đáńáčýńďő ăéá ĺđéâĺâáßůóç äéáăńáöţí", 14004, 20, 155, 155, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "˘íďéăěá ěĺ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "ĹđéëÝîôĺ ôď đńüăńáěěá ěĺ ôď ďđďßď čÝëĺôĺ íá áíďßîĺôĺ áőôü ôď áń÷ĺßď:", -1, 44, 12, 211, 10 + LTEXT "Áń÷ĺßď: %s", 14001, 44, 25, 188, 10 + GROUPBOX "ĐńďăńÜěěáôá", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + CHECKBOX "&˘íďéăěá áőôďý ôďő ĺßäďőň áń÷ĺßďő, đÜíôá ěĺ ôď ĺđéëĺăěÝíď đńüăńáěěá", 14003, 20, 193, 225, 10 + PUSHBUTTON "&ÁíáćŢôçóç...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "˘ęőńď", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Áń÷ĺßď" + IDS_SHV_COLUMN2 "ĚÝăĺčďň" + IDS_SHV_COLUMN3 "Ôýđďň" + IDS_SHV_COLUMN4 "Ôńďđďđďßçóç" + IDS_SHV_COLUMN5 "×áńáęôçńéóôéęÜ" + IDS_SHV_COLUMN6 "ĚÝăĺčďň" + IDS_SHV_COLUMN7 "Ĺëĺýčĺńďň ÷ţńďň" + IDS_SHV_COLUMN8 "źíďěá" + IDS_SHV_COLUMN9 "Ó÷üëéá" + IDS_SHV_COLUMN10 "ĘÜôď÷ďň" + IDS_SHV_COLUMN11 "ĎěÜäá" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Áń÷éęŢ čÝóç" + IDS_SHV_COLUMN_DELDATE "Çěĺńďěçíßá äéáăńáöŢň" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "ĹđéöÜíĺéá ĺńăáóßáň" + IDS_MYCOMPUTER "Ď őđďëďăéóôŢň ěďő" + IDS_RECYCLEBIN_FOLDER_NAME "ĘÜäďň áíáęýęëůóçň" + IDS_CONTROLPANEL "Đßíáęáň ĺëÝă÷ďő" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "&ĚĺăÜëá ĺéęďíßäéá" + IDS_VIEW_SMALL "Ě&éęńÜ ĺéęďíßäéá" + IDS_VIEW_LIST "&Ëßóôá" + IDS_VIEW_DETAILS "Ë&ĺđôďěÝńĺéĺň" + IDS_SELECT "ĹđéëďăŢ" + IDS_OPEN "˘íďéăěá" + IDS_CREATELINK "Äçěéďőńăßá &óőíôüěĺőóçň" + IDS_COPY "Á&íôéăńáöŢ" + IDS_DELETE "&ÄéáăńáöŢ" + IDS_PROPERTIES "&Éäéüôçôĺň" + IDS_CUT "Á&đďęďđŢ" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Äĺí Ţôáí äőíáôŢ ç äçěéďőńăßá ôďő öáęÝëďő: Äĺí ĺđéôńÝđĺôáé ç đńüóâáóç." + IDS_CREATEFOLDER_CAPTION "ÓöÜëěá ęáôÜ ôçí äçěéďőńăßá íÝďő öáęÝëďő" + IDS_DELETEITEM_CAPTION "Ĺđéâĺâáßůóç äéáăńáöŢň áń÷ĺßďő" + IDS_DELETEFOLDER_CAPTION "Ĺđéâĺâáßůóç äéáăńáöŢň öáęÝëďő" + IDS_DELETEITEM_TEXT "Ĺßóôĺ âÝâáéďé üôé čÝëĺôĺ íá äéáăńÜřĺôĺ ôď óôďé÷ĺßď '%1';" + IDS_DELETEMULTIPLE_TEXT "Ĺúóôĺ âÝâáéďé üôé čÝëĺôĺ íá äéáăńÜřĺôĺ áőôÜ ôá %1 óôďé÷ĺß´;" + IDS_DELETESELECTED_TEXT "Ĺßóôĺ óßăďőńďé üôé čÝëĺôĺ íá äéáăńÜřĺôĺ ôá ĺđéëĺăěÝíá óôďé÷ĺßá;" + IDS_TRASHITEM_TEXT "Ĺßóôĺ óßăďőńďé üôé čÝëĺôĺ íá óôĺßëĺôĺ óôďí ęÜäď áíáęýęëůóçň ôď '%1' ;" + IDS_TRASHFOLDER_TEXT "Ĺßóôĺ óßăďőńďé üôé čÝëĺôĺ íá óôĺßëĺôĺ ôď '%1' ęáé üëá ôá đĺńéĺ÷üěĺíÜ ôďő óôďí ęÜäď áíáęýęëůóçň;" + IDS_TRASHMULTIPLE_TEXT "Ĺßóôĺ óßăďőńďé üôé čÝëĺôĺ íá óôĺßëĺôĺ áőôÜ ôá %1 óôďé÷ĺßá óôďí ęÜäď áíáęýęëůóçň;" + IDS_CANTTRASH_TEXT "Ôď óôďé÷ĺßď '%1' äĺí ěđďńĺß íá ěĺôáöĺńčĺß óôďí ęÜäď áíáęýęëůóçň. ČÝëĺôĺ íá ôď äéáăńÜřĺôĺ;" + IDS_OVERWRITEFILE_TEXT "Áőôüň ď öÜęĺëďň đĺńéÝ÷ĺé Ţäç Ýíá áń÷ĺßď ěĺ ôď üíďěá '%1'.\n\nČÝëĺôĺ íá ôď áíôéęáôáóôŢóĺôĺ;" + IDS_OVERWRITEFILE_CAPTION "Ĺđéâĺâáßůóç äéáăńáöŢň áń÷ĺßďő" + IDS_OVERWRITEFOLDER_TEXT "Áőôüň ď öÜęĺëďň đĺńéÝ÷ĺé Ţäç Ýíáí öÜęĺëď ed '%1'.\n\n"\ + "Áí ôá áń÷ĺßá óôďí öÜęĺëď đńďďńéóěďý Ý÷ďőí ßäéá ďíüěáôá ěĺ ôá áń÷ĺßá óôďí\n"\ + "ĺđéëĺăěÝíď öÜęĺëď čá áíôéęáôáóôáčďýí. Ĺßóôĺ óßăďőńďé üôé čÝëĺôĺ íá óőíĺ÷ßóĺôĺ;\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Ĺđáíĺęęßíçóç" + IDS_RESTART_PROMPT "Ĺßóôĺ óßăďőńďé üôé čÝëĺôĺ íá ĺđáíĺęęéíŢóĺôĺ ôďí őđďëďăéóôŢ óáň;" + IDS_SHUTDOWN_TITLE "Áđĺíĺńăďđďßçóç" + IDS_SHUTDOWN_PROMPT "Ĺßóôĺ óßăďőńďé üôé čÝëĺôĺ íá áđĺíĺńăďđďéŢóĺôĺ ôďí őđďëďăéóôŢ óáň;" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "Ôá ÝăăńáöÜ ěďő" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Ôďđéęüň äßóęďň" + IDS_DRIVE_CDROM "ĚďíÜäá CD" + IDS_DRIVE_NETWORK "Äßóęďň äéęôýďő" + + IDS_OPEN_WITH "˘íďéăěá ěĺ" + IDS_OPEN_WITH_CHOOSE "ĹđéëďăŢ đńďăńÜěěáôďň..." + + IDS_SHELL_ABOUT_AUTHORS "&ĐńďăńáěěáôéóôÝň" + IDS_SHELL_ABOUT_BACK "< &ĹđéóôńďöŢ" + FCIDM_SHVIEW_NEW "Äçěéďőńăßá" + FCIDM_SHVIEW_NEWFOLDER "ÍÝďň &ÖÜęĺëďň" + FCIDM_SHVIEW_NEWLINK "ÍÝá &Óőíôüěĺőóç" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/en-GB.rc b/reactos/dll/win32/shell32_new/lang/en-GB.rc new file mode 100644 index 00000000000..5d8f02c9a47 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/en-GB.rc @@ -0,0 +1,756 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&View" + BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Arrange &Icons" + BEGIN + MENUITEM "By &Name", 0x30 /* column 0 */ + MENUITEM "By &Type", 0x32 /* column 2 */ + MENUITEM "By &Size", 0x31 /* ... */ + MENUITEM "By &Date", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Auto Arrange", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Icons", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Refresh", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Paste", FCIDM_SHVIEW_INSERT + MENUITEM "Paste as Link", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Open", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ut", FCIDM_SHVIEW_CUT + MENUITEM "&Copy", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Create &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Delete", FCIDM_SHVIEW_DELETE + MENUITEM "&Rename", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was brought to you by:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Run" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18 + LTEXT "&Open:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&Browse...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "File" + IDS_SHV_COLUMN2 "Size" + IDS_SHV_COLUMN3 "Type" + IDS_SHV_COLUMN4 "Modified" + IDS_SHV_COLUMN5 "Attributes" + IDS_SHV_COLUMN6 "Size" + IDS_SHV_COLUMN7 "Size available" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Comments" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "My Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Recycle Bin" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Lar&ge Icons" + IDS_VIEW_SMALL "S&mall Icons" + IDS_VIEW_LIST "&List" + IDS_VIEW_DETAILS "&Details" + IDS_SELECT "Select" + IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "&Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "C&ut" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Recycle Bin?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Recycle Bin?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Recycle Bin?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Recycle Bin. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Restart" + IDS_RESTART_PROMPT "Do you want to restart the system?" + IDS_SHUTDOWN_TITLE "Shutdown" + IDS_SHUTDOWN_PROMPT "Do you want to shutdown?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "My Documents" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "New" + FCIDM_SHVIEW_NEWFOLDER "New &Folder" + FCIDM_SHVIEW_NEWLINK "New &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/en-US.rc b/reactos/dll/win32/shell32_new/lang/en-US.rc new file mode 100644 index 00000000000..04df98d1e60 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/en-US.rc @@ -0,0 +1,767 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&View" + BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Arrange &Icons" + BEGIN + MENUITEM "By &Name", 0x30 /* column 0 */ + MENUITEM "By &Type", 0x32 /* column 2 */ + MENUITEM "By &Size", 0x31 /* ... */ + MENUITEM "By &Date", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Auto Arrange", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Icons", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Refresh", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Paste", FCIDM_SHVIEW_INSERT + MENUITEM "Paste as Link", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Open", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ut", FCIDM_SHVIEW_CUT + MENUITEM "&Copy", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Create &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Delete", FCIDM_SHVIEW_DELETE + MENUITEM "&Rename", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was brought to you by:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Run" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18 + LTEXT "&Open:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&Browse...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +IDD_SH_FILE_COPY DIALOGEX 0, 0, 264, 45 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Copying..." +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + PUSHBUTTON "Cancel", 14002, 195, 14, 60, 16 + CONTROL "", 14000, "MSCTLS_PROGRESS32", 0, 8, 20, 170, 10 + LTEXT "File", 14001, 8, 6, 169, 10 +END + + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "File" + IDS_SHV_COLUMN2 "Size" + IDS_SHV_COLUMN3 "Type" + IDS_SHV_COLUMN4 "Modified" + IDS_SHV_COLUMN5 "Attributes" + IDS_SHV_COLUMN6 "Size" + IDS_SHV_COLUMN7 "Size available" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Comments" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "My Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Lar&ge Icons" + IDS_VIEW_SMALL "S&mall Icons" + IDS_VIEW_LIST "&List" + IDS_VIEW_DETAILS "&Details" + IDS_SELECT "Select" + IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "&Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "C&ut" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Restart" + IDS_RESTART_PROMPT "Do you want to restart the system?" + IDS_SHUTDOWN_TITLE "Shutdown" + IDS_SHUTDOWN_PROMPT "Do you want to shutdown?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "My Documents" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "New" + FCIDM_SHVIEW_NEWFOLDER "New &Folder" + FCIDM_SHVIEW_NEWLINK "New &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/es-ES.rc b/reactos/dll/win32/shell32_new/lang/es-ES.rc new file mode 100644 index 00000000000..c619493d3f2 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/es-ES.rc @@ -0,0 +1,769 @@ +/* + * Copyright 1998 Juergen Schmied + * Copyright 2003,2004 José Manuel Ferrer Ortiz + * Actualizado Victor Martinez 2008 + * Actualizado Javier Remacha 2009 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Iconos &grandes", FCIDM_SHVIEW_BIGICON + MENUITEM "Iconos &pequeńos", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detalles", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Ver" + BEGIN + MENUITEM "Iconos &grandes", FCIDM_SHVIEW_BIGICON + MENUITEM "Iconos &pequeńos", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detalles", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Ordenar &iconos" + BEGIN + MENUITEM "Por &nombre", 0x30 /* column 0 */ + MENUITEM "Por &tipo", 0x32 /* column 2 */ + MENUITEM "Por t&amańo", 0x31 /* ... */ + MENUITEM "Por &fecha", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Ordenar automáticamente", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Alinear iconos", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Actualizar", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Pegar", FCIDM_SHVIEW_INSERT + MENUITEM "Pegar acceso directo", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Propiedades", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplorar", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Abrir", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ortar", FCIDM_SHVIEW_CUT + MENUITEM "&Copiar", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "C&rear acceso directo", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Eliminar", FCIDM_SHVIEW_DELETE + MENUITEM "Re&nombrar", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Propiedades", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Explorar carpeta" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Aceptar", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Buscar carpeta" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Carpeta:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Crear nueva carpeta", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Aceptar", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Mensaje" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Si", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Si &a todo", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancelar", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Acerca de %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Versión " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Esta versión de ReactOS está registrada a:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Memoria física instalada:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "Aceptar", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS está disponible gracias a:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Ejecutar" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Introduzca el nombre de un programa, carpeta, documento o recurso de Internet, y ReactOS lo abrirá para usted.", 12289, 36, 11, 182, 24 + LTEXT "&Abrir:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "Aceptar", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Examinar...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Acceso directo" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Tipo de destino:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Ubicación de destino:", 14006, 8, 54, 64, 14 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "&Destino:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "I&niciar en:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "&Tecla de método abreviado:", 14014, 8, 111, 57, 14 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "&Ejecutar:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omentario:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Buscar destino...", 14020, 9, 172, 62, 14, ES_LEFT + PUSHBUTTON "Cambiar &icono...", 14021, 76, 172, 62, 14, ES_LEFT + PUSHBUTTON "Propiedades avan&zadas...", 14022, 144, 172, 85, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Propiedades avanzadas" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Elija las propiedades avanzadas que desee para este acceso directo.", -1, 5, 25, 210, 14 + CHECKBOX "Ejecutar con credenciales diferentes", 14000, 25, 50, 150, 10 + LTEXT "Esta opción puede permitirle ejecutar este acceso directo como otro usuario, o continuar como usted mismo mientras protege su equipo y datos de una actividad de programa no autorizada.", -1, 50, 60, 175, 40 + CHECKBOX "Ejecutar en otro espacio de memoria", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "Aceptar", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Cancelar", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Tipo:", 14004, 8, 35, 50, 10 + LTEXT "Carpeta de archivos", 14005, 68, 35, 160, 10 + LTEXT "Ubicación:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Tamańo:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contiene:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Creado:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Sólo lectura", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Oculto", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Tipo de archivo:", 14004, 8, 35, 55, 10 + LTEXT "Archivo", 14005, 68, 35, 160, 10 + LTEXT "Se abre con:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Ubicación:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Tamańo:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Creado:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modificado:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Último acceso:", 14018, 8, 160, 55, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Atributos:", 14020, 8, 189, 45, 10 + CHECKBOX "&Sólo lectura", 14021, 58, 189, 67, 10 + CHECKBOX "&Oculto", 14022, 126, 189, 50, 10 + CHECKBOX "&Archivo", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Versión" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Versión del archivo: ", 14000, 10, 10, 62, 14 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Descripción: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Más información de la versión: ", 14006, 6, 70, 222, 115 + LTEXT "Nombre del elemento:", 14007, 13, 82, 65, 10 + LTEXT "Valor: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Tipo:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Sistema de archivos:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Espacio ocupado:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Espacio libre:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacidad:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Unidad %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Liberar espacio en disco", 14010, 160, 175, 80, 15, WS_TABSTOP + CHECKBOX "Comprimir contenido para ahorrar espacio en disco", 14011, 5, 205, 180, 10, WS_DISABLED + CHECKBOX "Permitir a Index Server indizar el disco para acelerar la búsqueda", 14012, 5, 220, 220, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Herramientas" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Comprobación de errores ", -1, 5, 5, 230, 60 + LTEXT "Esta opción comprobará los errores en la\nunidad.", -1, 40, 25, 160, 20 + PUSHBUTTON "Comprobar ahora...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Desfragmentación ", -1, 5, 65, 230, 60 + LTEXT "Esta opción desfragmentará los archivos en esta\nunidad.", -1, 40, 85, 160, 20 + PUSHBUTTON "Desfragmentar ahora...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Copia de seguridad ", -1, 5, 130, 230, 60 + LTEXT "Esta opción realizará una copia de seguridad de\nlos archivos almacenados en la unidad.", -1, 40, 150, 160, 20 + PUSHBUTTON "Realizar copia de seguridad ahora...", 14002, 90, 170, 130, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ejecutar como" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "żQué cuenta de usuario desea usar para ejecutar este programa?", -1, 10, 20, 220, 20 + CHECKBOX "Usuario actual %s", 14000, 10, 45, 150, 10 + LTEXT "Protejer mi equipo y mis datos contra la actividad de programas sin autorización", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Esta opción puede impedir que virus informáticos dańen su equipo o sus datos personales, pero si la selecciona es posible que el programa no funcione correctamente.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "El siguiente usuario:", 14002, 10, 100, 90, 10 + LTEXT "Usuario:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Contraseńa:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "Aceptar", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancelar", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Propiedades de Papelera de reciclaje" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Configuración para la unidad seleccionada ", -1, 10, 72, 220, 70 + RADIOBUTTON "Tamańo &Personalizado:", 14001, 20, 90, 88, 10, WS_TABSTOP + EDITTEXT 14002, 120, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "&Tamańo máximo(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "&No mover archivos a la Papelera de reciclaje. Quitar los archivos inmediatamente al eliminarlos.", 14003, 20, 117, 185, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Mostrar cuadro de diálogo para confirmar la eliminación", 14004, 20, 155, 200, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 284, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Abrir con" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Elija el programa que desea usar para abrir el siguiente archivo:", -1, 44, 12, 211, 10 + LTEXT "Archivo: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programas ", -1, 7, 42, 269, 187 + LISTBOX 14002, 16 ,57, 250, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "Utilizar &siempre el programa seleccionado para abrir este tipo de archivos", 14003, 15, 193, 250, 10 + PUSHBUTTON "&Examinar...", 14004, 218, 207, 50, 14 + PUSHBUTTON "Aceptar", 14005, 170, 236, 50, 14 + PUSHBUTTON "Cancelar", 14006, 226, 236, 50, 14 +END + +IDD_SH_FILE_COPY DIALOGEX 0, 0, 264, 45 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Copiando..." +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + PUSHBUTTON "Cancelar", 14002, 195, 14, 60, 16 + CONTROL "", 14000, "MSCTLS_PROGRESS32", 0, 8, 20, 170, 10 + LTEXT "Archivo", 14001, 8, 6, 169, 10 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 294, 240 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tareas", -1, 7, 10, 279, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "M&ostrar tareas comunes en las carpetas", 14001, 40, 25, 160, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Utilizar las carpetas clá&sicas de ReactOS", 14002, 40, 37, 160, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Examinar carpetas ", -1, 7, 60, 279, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Abrir todas las carpetas en la &misma ventana", 14004, 40, 75, 160, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Abrir cada carpeta ventanas di&ferentes", 14005, 40, 87, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Hacer clic en los elementos como se indica ", -1, 7, 110, 279, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Un solo clic para abrir elemento (seleccionar al seńalar)", 14007, 40, 120, 190, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Subrayar los títulos de iconos que coincidan con el e&xplorador", 14008, 50, 132, 220, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Subrayar &los títulos de iconos cuando yo los seńale", 14009, 50, 144, 190, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Doble clic para abrir elemento (seleccionar con un clic)", 14010, 40, 156, 190, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restaurar valores predeterminados", 14011, 146, 180, 140, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 294, 240 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Ver" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Vistas de carpeta", -1, 7, 10, 279, 60 +//ICON +LTEXT "Puede aplicar la vista que está usando con esta carpeta para el resto (como Detalles o Mosaicos).", -1, 60, 20, 200, 20 +PUSHBUTTON "A&plicar a todas las carpetas", 14001, 60, 50, 100, 14, WS_TABSTOP +PUSHBUTTON "R&estaurar todas las carpetas", 14002, 165, 50, 100, 14, WS_TABSTOP +LTEXT "Configuración avanzada:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 279, 120 +PUSHBUTTON "&Restaurar valores predeterminados", 14004, 156, 220, 130, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 294, 240 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Tipos de Archivo" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "&Tipos de archivo registrados:", -1, 7, 10, 120, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 279, 80 +PUSHBUTTON "&Nueva", 14001, 170, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "Eli&minar", 14002, 230, 110, 50, 14, WS_TABSTOP +GROUPBOX "Detalles para el tipo de archivo '%s'", 14003, 7, 130, 279, 100 +LTEXT "Se abre con:", -1, 12, 140, 50, 10 +//ICON +LTEXT "Aplicación", 14005, 100, 140, 40, 10 +PUSHBUTTON "Cam&biar...", 14006, 230, 140, 50, 14, WS_TABSTOP +LTEXT "Archivos con extensión '%s' son del tipo '%s'. Para cambiar la configuración de los archivos '%s', haga clic en Opciones avanzadas.", 14007, 12, 165, 220, 30 +PUSHBUTTON "Opciones avanza&das", 14008, 190, 213, 90, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirmar el reemplazo de archivo" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Sí", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Sí a &todo", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Esta carpeta ya contiene un archivo con el nombre '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Esta carpeta ya contiene un archivo de sólo lectura con el nombre '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Esta carpeta ya contiene un archivo de sistema con el nombre '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Desea reemplazar el archivo existente", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(tamańo y fecha desconocidos)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "por este otro?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(tamańo y fecha desconocidos)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Cerrar sesión ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "żEsta seguro de que quiere cerrar la sesión?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Cerrar sesión", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Desconectar ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "żEstá seguro que desea desconectar?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Desconectar", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Reproducción automática" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Seleccione un tipo de contenido y elija una acción para que ReactOS la realice automáticamente cuando ese tipo se use en este dispositivo:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Acciones ", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Seleccionar la &acción que desea ejecutar:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "&Preguntarme siempre que elija una acción", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restaurar valores predeterminados", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Contenido mixto" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Este disco o dispositivo contiene más de un tipo de contenido.", 1001, 32, 7, 191, 20 + LTEXT "żQué desea que haga ReactOS?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "Aceptar", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Contenido mixto" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS puede realizar la misma acción cada vez que inserte un disco o conecte un dispositivo con este tipo de archivos:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "żQué desea que haga ReactOS?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Realizar siempre la acción seleccionada.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "Aceptar", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Reproducción automática" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS puede realizar la misma acción cada vez que conecte este dispositivo.", 1001, 32, 7, 190, 22 + LTEXT "ż&Qué desea que haga ReactOS?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Realizar siempre la acción seleccionada", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "Aceptar", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Apagar ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "żQue quieres que haga el equipo?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Mantener su sesión, manteniendo el equipo en bajo consumo con los datos aún en memoria. El equipo se restaura cuando presione una tecla o mueva el ratón.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "Aceptar", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancelar", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Ayuda", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Formatear" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Iniciar", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Cerrar", IDCANCEL, 118, 198, 60, 14 + LTEXT "C&apacidad:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Sistema de archivos", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Tamańo de unidad de asignación", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Etiqueta del volumen", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "&Opciones de formato ", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "Formato &rápido", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Habilitar compresión", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 240, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Comprobar disco" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Iniciar", IDOK, 53, 100, 60, 14 + GROUPBOX "Opciones de comprobación de disco ", -1, 7, 6, 225, 50 + PUSHBUTTON "Cancelar", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Reparar &automáticamente errores en el sistema de archivos", 14000, 16, 15, 200, 10 + AUTOCHECKBOX "&Examinar e intentar recuperar los sectores defectuosos", 14001, 16, 30, 200, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 225, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Cambiar Icono" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Archivo:", -1, 7, 14, 208, 10 + PUSHBUTTON "Examinar...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Iconos:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "Aceptar",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancelar",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Archivo" + IDS_SHV_COLUMN2 "Tamańo" + IDS_SHV_COLUMN3 "Tipo" + IDS_SHV_COLUMN4 "Modificado" + IDS_SHV_COLUMN5 "Atributos" + IDS_SHV_COLUMN6 "Tamańo" + IDS_SHV_COLUMN7 "Tamańo disponible" + IDS_SHV_COLUMN8 "Nombre" + IDS_SHV_COLUMN9 "Comentarios" + IDS_SHV_COLUMN10 "Propietario" + IDS_SHV_COLUMN11 "Grupo" + IDS_SHV_COLUMN12 "Nombre del archivo" + IDS_SHV_COLUMN13 "Categoría" + IDS_SHV_COLUMN_DELFROM "Ubicación original" + IDS_SHV_COLUMN_DELDATE "Fecha de eliminación" + IDS_SHV_COLUMN_FONTTYPE "Tipo de fuente" + IDS_SHV_COLUMN_WORKGROUP "Grupo de trabajo" + IDS_SHV_NETWORKLOCATION "Ubicación en red" + IDS_SHV_COLUMN_DOCUMENTS "Documentos" + IDS_SHV_COLUMN_STATUS "Estado" + IDS_SHV_COLUMN_COMMENTS "Comentarios" + IDS_SHV_COLUMN_LOCATION "Ubicación" + IDS_SHV_COLUMN_MODEL "Modelo" + + /* special folders */ + IDS_DESKTOP "Escritorio" + IDS_MYCOMPUTER "Mi PC" + IDS_RECYCLEBIN_FOLDER_NAME "Papelera de reciclaje" + IDS_CONTROLPANEL "Panel de control" + IDS_ADMINISTRATIVETOOLS "Herramientas Administrativas" + + /* context menus */ + IDS_VIEW_LARGE "Iconos &grandes" + IDS_VIEW_SMALL "Iconos &pequeńos" + IDS_VIEW_LIST "&Lista" + IDS_VIEW_DETAILS "&Detalles" + IDS_SELECT "Seleccionar" + IDS_OPEN "Abrir" + IDS_CREATELINK "C&rear acceso directo" + IDS_COPY "&Copiar" + IDS_DELETE "&Eliminar" + IDS_PROPERTIES "&Propiedades" + IDS_CUT "C&ortar" + IDS_RESTORE "Restaurar" + IDS_FORMATDRIVE "Formatear..." + IDS_RENAME "Renombrar" + IDS_INSERT "Insertar" + + IDS_CREATEFOLDER_DENIED "No se puede crear una nueva carpeta: Permiso denegado." + IDS_CREATEFOLDER_CAPTION "Error durante la creación de una nueva carpeta" + IDS_DELETEITEM_CAPTION "Confirmar eliminación de archivos" + IDS_DELETEFOLDER_CAPTION "Confirmar eliminación de carpetas" + IDS_DELETEITEM_TEXT "żSeguro que desea eliminar '%1'?" + IDS_DELETEMULTIPLE_TEXT "żSeguro que desea eliminar estos %1 elementos?" + IDS_DELETESELECTED_TEXT "żConfirma que desea borrar el elemento(s) seleccionado(s)?" + IDS_TRASHITEM_TEXT "żConfirma que desea enviar '%1' a la Papelera de reciclaje?" + IDS_TRASHFOLDER_TEXT "żConfirma que desea enviar '%1' y todo su contenido a la Papelera de reciclaje?" + IDS_TRASHMULTIPLE_TEXT "żConfirma que desea enviar %1 elementos a la Papelera de reciclaje?" + IDS_CANTTRASH_TEXT "El elemento '%1' no puede ser enviado a la Papelera de reciclaje. żEn vez de ello żDesea borrarlo?" + IDS_OVERWRITEFILE_TEXT "Esta carpeta ya contiene un archivo con el nombre '%1'.\n\nżDesea reemplazar el archivo existente?" + IDS_OVERWRITEFILE_CAPTION "Confirmar el reemplazo de archivo" + IDS_OVERWRITEFOLDER_TEXT "Esta carpeta ya contiene una carpeta con el nombre '%1'.\n\n"\ + "Si los archivos de la carpeta existente tienen el mismo nombre que los\n"\ + "archivos de la carpeta que está moviendo o copiando, serán\n"\ + "reemplazados. żDesea mover o copiar la carpeta de todas formas?" + + /* message box strings */ + IDS_RESTART_TITLE "Reiniciar" + IDS_RESTART_PROMPT "żDesea reiniciar el equipo?" + IDS_SHUTDOWN_TITLE "Apagar" + IDS_SHUTDOWN_PROMPT "żDesea apagar el equipo?" + IDS_LOGOFF_TITLE "Cerrar sesión" + IDS_LOGOFF_PROMPT "żDesea cerrar la sesión?" + + /* shell folder path default values */ + IDS_PROGRAMS "Menú Inicio\\Programas" + IDS_PERSONAL "Mis documentos" + IDS_FAVORITES "Favoritos" + IDS_STARTUP "Menú Inicio\\Programas\\Inicio" + IDS_RECENT "Reciente" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Menú Inicio" + IDS_MYMUSIC "Mis documentos\\Mi música" + IDS_MYVIDEO "Mis documentos\\Mis vídeos" + IDS_DESKTOPDIRECTORY "Escritorio" + IDS_NETHOOD "Entorno de red" + IDS_TEMPLATES "Plantillas" + IDS_APPDATA "Datos de Programa" + IDS_PRINTHOOD "Impresoras" + IDS_LOCAL_APPDATA "Configuración local\\Datos de programa" + IDS_INTERNET_CACHE "Configuración local\\Archivos temporales de Internet" + IDS_COOKIES "Cookies" + IDS_HISTORY "Configuración local\\Historial" + IDS_PROGRAM_FILES "Archivos de programa" + IDS_MYPICTURES "Mis imágenes" + IDS_PROGRAM_FILES_COMMON "Archivos de programa\\Archivos comunes" + IDS_COMMON_DOCUMENTS "Documentos" + IDS_ADMINTOOLS "Menú Inicio\\Programas\\Accesorios\\Herramientas del sistema" + IDS_COMMON_MUSIC "Documentos\\Mi música" + IDS_COMMON_PICTURES "Documentos\\Mis imágenes" + IDS_COMMON_VIDEO "Documentos\\Mis vídeos" + IDS_CDBURN_AREA "Configuración local\\Datos de programa\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Mis sitios de red" + + IDS_NEWFOLDER "Nueva carpeta" + + IDS_DRIVE_FIXED "Disco Local" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Unidad de red" + + IDS_OPEN_WITH "Abrir con" + IDS_OPEN_WITH_CHOOSE "Elegir programa..." + + IDS_SHELL_ABOUT_AUTHORS "&Autores" + IDS_SHELL_ABOUT_BACK "< A&trás" + FCIDM_SHVIEW_NEW "Nuevo" + FCIDM_SHVIEW_NEWFOLDER "Nueva &carpeta" + FCIDM_SHVIEW_NEWLINK "Nuevo &acceso directo" + IDS_FOLDER_OPTIONS "Opciones de carpetas" + IDS_RECYCLEBIN_LOCATION "Ubicación de la Papelera de reciclaje" + IDS_RECYCLEBIN_DISKSPACE "Espacio disponible" + IDS_EMPTY_BITBUCKET "Vaciar Papelera de reciclaje" + IDS_PICK_ICON_TITLE "Seleccione un icono" + IDS_PICK_ICON_FILTER "Archivos de iconos(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Programas\0*.exe\0" + IDS_DIRECTORY "Directorio" + IDS_VIRTUAL_DRIVER "Controlador de dispositivo virtual" + IDS_BAT_FILE "Archivo por lotes ReactOS" + IDS_CMD_FILE "Script de comandos ReactOS" + IDS_COM_FILE "Aplicación DOS" + IDS_CPL_FILE "Elemento del Panel de Control" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Extensión de la aplicación" + IDS_DRV_FILE "Controlador de dispositivo" + IDS_EXE_FILE "Aplicación" + IDS_FON_FILE "Archivo de fuente" + IDS_TTF_FILE "Archivo de fuente TrueType" + IDS_HLP_FILE "Archivo de ayuda" + IDS_INI_FILE "Opciones de configuración" + IDS_LNK_FILE "Acceso directo" + IDS_SYS_FILE "Archivo del sistema" + + IDS_OPEN_VERB "Abrir" + IDS_RUNAS_VERB "Ejecutar como ..." + IDS_EDIT_VERB "Editar" + IDS_FIND_VERB "Buscar" + IDS_PRINT_VERB "Imprimir" + IDS_PLAY_VERB "Reproducir" + IDS_PREVIEW_VERB "Vista previa" + + IDS_FILE_FOLDER "%u Archivos, %u Carpetas" + IDS_PRINTERS "Impresoras" + IDS_FONTS "Fuentes" + IDS_INSTALLNEWFONT "Instalar Nueva Fuente..." + + IDS_DEFAULT_CLUSTER_SIZE "Tamańo asignado por defecto" + IDS_COPY_OF "Copia de" + + IDS_SHLEXEC_NOASSOC "No hay ningún programa configurado en ReactOS para abrir este tipo de archivo." +END diff --git a/reactos/dll/win32/shell32_new/lang/fi-FI.rc b/reactos/dll/win32/shell32_new/lang/fi-FI.rc new file mode 100644 index 00000000000..6469ce1b7b5 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/fi-FI.rc @@ -0,0 +1,756 @@ +/* + * Copyright 2005 Kimmo Myllyvirta + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Suuret Kuvakkeet", FCIDM_SHVIEW_BIGICON + MENUITEM "&Pienet Kuvakkeet", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Tiedot", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Näkymä" + BEGIN + MENUITEM "&Pienet Kuvakkeet", FCIDM_SHVIEW_BIGICON + MENUITEM "&Suuret Kuvakkeet", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Tiedot", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "&Järjestä Kuvakkeet" + BEGIN + MENUITEM "&Nimen mukaan", 0x30 /* column 0 */ + MENUITEM "&Tyypin mukaan", 0x32 /* column 2 */ + MENUITEM "&Koon mukaan", 0x31 /* ... */ + MENUITEM "&Päivämäärän mukaan", 0x33 + MENUITEM SEPARATOR + MENUITEM "Järjestä &Automaattisesti", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Järjestä kuvakkeet riviin", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Päivitä", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Liitä", FCIDM_SHVIEW_INSERT + MENUITEM "Liitä Linkiksi", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Ominaisuudet", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Selaa", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Avaa", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "&Leikkaa", FCIDM_SHVIEW_CUT + MENUITEM "&Kopioi", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Lu&o Linkki", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Poista", FCIDM_SHVIEW_DELETE + MENUITEM "&Nimeä Uudelleen", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Ominaisuudet", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Valitse Kansio" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Peruuta", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Tietoja %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS:n toi Sinulle:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Anna ohjelma, dokumentti, tai Internet -ressurssi, ja ReactOS avaa sen Sinulle.", 12289, 36, 11, 182, 18 + LTEXT "&Avaa:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Peruuta", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Selaa...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Tiedosto" + IDS_SHV_COLUMN2 "Koko" + IDS_SHV_COLUMN3 "Tyyppi" + IDS_SHV_COLUMN4 "Muokattu" + IDS_SHV_COLUMN5 "Ominaisuudet" + IDS_SHV_COLUMN6 "Koko" + IDS_SHV_COLUMN7 "Tilaa jäljellä" + IDS_SHV_COLUMN8 "Nimi" + IDS_SHV_COLUMN9 "Kommentit" + IDS_SHV_COLUMN10 "Omistaja" + IDS_SHV_COLUMN11 "Ryhmä" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Työpöytä" + IDS_MYCOMPUTER "Oma Tietokone" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "&Suuret Kuvakkeet" + IDS_VIEW_SMALL "&Pienet Kuvakkeet" + IDS_VIEW_LIST "&Lista" + IDS_VIEW_DETAILS "&Tiedot" + IDS_SELECT "Valitse" + IDS_OPEN "Avaa" + IDS_CREATELINK "Lu&o Linkki" + IDS_COPY "&Kopioi" + IDS_DELETE "&Poista" + IDS_PROPERTIES "&Ominaisuudet" + IDS_CUT "&Leikkaa" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Uutta kansiota ei voitu luoda: Oikeudet eivät riitä." + IDS_CREATEFOLDER_CAPTION "Virhe luotaessa uutta kansiota" + IDS_DELETEITEM_CAPTION "Vahvista tiedoston tuhoaminen" + IDS_DELETEFOLDER_CAPTION "Vahvista kansion tuhoaminen" + IDS_DELETEITEM_TEXT "Haluatko varmasti tuhota '%1':n?" + IDS_DELETEMULTIPLE_TEXT "Haluatko varmasti tuhota nämä %1?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Vahvista Tiedoston Ylikirjoitus" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Käynnistä uudestaan" + IDS_RESTART_PROMPT "Haluatko simuloida Windows:n uudelleenkäynnistämistä?" + IDS_SHUTDOWN_TITLE "Sammuta" + IDS_SHUTDOWN_PROMPT "Haluatko lopettaa Wine:n istunnon?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Käynnistä\\Ohjelmat" + IDS_PERSONAL "Omat tiedostot" + IDS_FAVORITES "Suosikit" + IDS_STARTUP "Käynnistä\\Ohjelmat\\Käynnistys" + IDS_RECENT "Äskettäin käytetyt" + IDS_SENDTO "Lähetä" + IDS_STARTMENU "Käynnistä" + IDS_MYMUSIC "Omat musiikkitiedostot" + IDS_MYVIDEO "Omat videotiedostot" + IDS_DESKTOPDIRECTORY "Työpöytä" + IDS_NETHOOD "Verkkoympäristö" + IDS_TEMPLATES "Mallit" + IDS_APPDATA "Ohjelmien Tiedot" + IDS_PRINTHOOD "Tulostinympäristö" + IDS_LOCAL_APPDATA "Paikalliset Asetukset\\Ohjelmien Tiedot" + IDS_INTERNET_CACHE "Paikalliset Asetukset\\Väliaikaiset Internet-tiedostot" + IDS_COOKIES "Evästeet" + IDS_HISTORY "Paikalliset Asetukset\\Historia" + IDS_PROGRAM_FILES "Ohjelmat" + IDS_MYPICTURES "Omat kuvatiedostot" + IDS_PROGRAM_FILES_COMMON "Ohjelmat\\Yhteiset Tiedostot" + IDS_COMMON_DOCUMENTS "Dokumentit" + IDS_ADMINTOOLS "Käynnistys\\Ohjauspaneeli\\Administrative Tools" + IDS_COMMON_MUSIC "Dokumentit\\Omat musiikkitiedostot" + IDS_COMMON_PICTURES "Dokumentit\\Omat kuvatiedostot" + IDS_COMMON_VIDEO "Dokumentit\\Omat videotiedostot" + IDS_CDBURN_AREA "Paikalliset Asetukset\\Ohjelmien Tiedot\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "Uusi" + FCIDM_SHVIEW_NEWFOLDER "Uusi &Kansio" + FCIDM_SHVIEW_NEWLINK "Uusi &Linkki" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/fr-FR.rc b/reactos/dll/win32/shell32_new/lang/fr-FR.rc new file mode 100644 index 00000000000..0ba3b4473f2 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/fr-FR.rc @@ -0,0 +1,760 @@ +/* + * Shell32 + * French language support + * + * Copyright 1998 Juergen Schmied + * 2007-2008 Pierre Schweitzer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Grandes icônes", FCIDM_SHVIEW_BIGICON + MENUITEM "&Petites icônes", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Détails", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Affichage" + BEGIN + MENUITEM "&Grandes icônes", FCIDM_SHVIEW_BIGICON + MENUITEM "&Petites icônes", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Détails", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Trier les &icônes" + BEGIN + MENUITEM "Par &nom", 0x30 /* column 0 */ + MENUITEM "Par &type", 0x32 /* column 2 */ + MENUITEM "Par t&aille", 0x31 /* ... */ + MENUITEM "Par &date", 0x33 + MENUITEM SEPARATOR + MENUITEM "T&ri automatique", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Aligner les icônes", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Rafraîchir", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Coller", FCIDM_SHVIEW_INSERT + MENUITEM "Coller comme un lien", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Propriétés", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplorer", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Ouvrir", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ouper", FCIDM_SHVIEW_CUT + MENUITEM "&Copier", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Créer un &lien", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Supprimer", FCIDM_SHVIEW_DELETE + MENUITEM "&Renommer", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Propriétés", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Parcourir" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Annuler", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Rechercher un dossier" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Dossier :", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Créer un nouveau dossier", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Annuler", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Oui", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Oui pour tous", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Non", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Annuler", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Ŕ propos de %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Cette version de ReactOS est enregistrée ŕ:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Mémoire physique installée:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS est une réalisation de:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Entrez le nom d'un programme, d'un dossier, d'un document ou d'une ressource Internet, et ReactOS l'ouvrira pour vous.", 12289, 36, 11, 182, 18 + LTEXT "&Ouvrir :", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Annuler", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Parcourir...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Raccourci" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Type de la cible :", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Localisation de la cible :", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Cible :", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "Démarrer dans :", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Touche de raccourci :", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Exécuter :", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&ommentaire :", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "Trouver la cible...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Changer d'icône...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&vancé...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Propriétés étendues" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choisissez la propriété étendue que vous voulez pour ce raccourci.", -1, 5, 30, 210, 10 + CHECKBOX "Exécuter avec des droits différents", 14000, 25, 50, 150, 10 + LTEXT "Cette option peut vous permettre d'utiliser ce raccourci en tant qu'autre utilisateur ou de continuer vous-męme en protégeant votre ordinateur et vos données des activés de programme non autorisées.", -1, 50, 60, 175, 40 + CHECKBOX "Lancer dans un espace mémoire séparé", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Annuler", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Général" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type de fichier :", 14004, 8, 35, 50, 10 + LTEXT "Dossier", 14005, 68, 35, 160, 10 + LTEXT "Localisation :", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Taille :", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contient :", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Créé :", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "Lectu&re-seule", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "Cac&hé", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Général" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type de fichier :", 14004, 8, 35, 50, 10 + LTEXT "Fichier", 14005, 68, 35, 160, 10 + LTEXT "Ouvrir avec :", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Localisation :", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Taille :", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Créé :", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modifié :", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accédé :", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributs :", 14020, 8, 189, 45, 10 + CHECKBOX "Lectu&re-seule", 14021, 58, 189, 67, 10 + CHECKBOX "Cac&hé", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Version du fichier : ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description : ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright : ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Autres informations de version : ", 14006, 6, 70, 222, 115 + LTEXT "Nom de l'élément : ", 14007, 13, 82, 50, 10 + LTEXT "Valeur : ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Général" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type :", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Systčme de fichiers :", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Espace utilisé :", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Espace libre :", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacité :", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Lecteur %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Nettoyage de disque", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compresser le lecteur pour gagner de l'espace disque", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Autoriser le service d'indexation ŕ indexer ce disque pour une recherche rapide de fichiers", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Outils" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Vérification d'erreurs", -1, 5, 5, 230, 60 + LTEXT "Cette option vérifiera le volume pour éviter les\nerreurs.", -1, 40, 25, 160, 20 + PUSHBUTTON "Vérifier maintenant...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Défragmentation", -1, 5, 65, 230, 60 + LTEXT "Cette option va défragmenter les fichiers sur ce volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Défragmenter maintenant...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Sauvegarde", -1, 5, 130, 230, 60 + LTEXT "Cette option va sauvegarder les fichiers sur le volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Sauvegarder maintenant...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Matériel" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Lancer en tant que" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Quel compte d'utilisateur désirez-vous utiliser pour lancer ce programme?", -1, 10, 20, 220, 20 + CHECKBOX "Utilisateur actuel %s", 14000, 10, 45, 150, 10 + LTEXT "Protéger mon ordinateur et mes données des activités des programmes non autorisés", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Cette option peut empęcher les virus d'ordinateur d'endommager votre ordinateur ou vos données personnelles, néanmoins sélectionner cette option pourrait empęcher le programme de fonctionner correctement.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "L'utilisateur suivant :", 14002, 10, 100, 90, 10 + LTEXT "Nom d'utilisateur :", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Mot de passe :", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Annuler", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Propriétés de la corbeille" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Paramčtres pour la localisation sélectionnée", -1, 10, 72, 220, 70 + RADIOBUTTON "Taille personnalisée :", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "T&aille maximale (MO) :", -1, 20, 105, 70, 10 + RADIOBUTTON "Ne pas déplacer les fichie&rs vers la Corbeille. Effacer les fichiers immédiatement lors de la suppression.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "Afficher une fenętre de confirmation d'effacement", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Ouvrir avec" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choisissez le programme que vous désirez utiliser pour ouvrir ce fichier :", -1, 44, 12, 211, 10 + LTEXT "Fichier : ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programmes", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "Toujours utiliser le progr&amme sélectionné pour ouvrir ce type de fichier", 14003, 20, 193, 225, 10 + PUSHBUTTON "Parcourir...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Annuler", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Général" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tâches", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Afficher les tâches habituelles dans les dossiers", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Utiliser les dossiers ReactOS class&iques", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Parcourir les dossiers", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Ouvrir tous les dossiers dans la &męme fenętre", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Ouvrir chaque dossier dans sa propre fenętre", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Cliquer sur les éléments de la façon suivante", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Clic unique pour ouvrir un élément (pointer pour sélectionner)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Toujours souligner les titres des icônes comme dans le navigateur", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Souligner les titres des icônes seulement quand je les &pointe", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-cliquer pour ouvrir un élément (clic unique pour le sélectionner)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "Pa&ramčtres par défaut", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Affichage" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Affichage des dossiers", -1, 7, 10, 249, 60 +//ICON +LTEXT "Vous pouvez appliquer l'affichage (tel que Détails ou Miniatures) que\nvous utilisez pour ce dossier ŕ tous les dossiers.", -1, 60, 20, 180, 20 +PUSHBUTTON "Appliquer ŕ tous les dossiers", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Réinitialiser tous les dossiers", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Paramčtres avancés :", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Paramčtres par &défaut", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Types de fichiers" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "&Types de fichiers enregistrés :", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Nouveau", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "Supprimer", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Détails concernant l'extension '%s'", 14003, 7, 130, 249, 70 +LTEXT "Ouvrir avec :", -1, 12, 140, 40, 10 +//ICON +LTEXT "Nom de l'application", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Modifier...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Les fichiers avec l'extension '%s' sont de type '%s'. Pour\nmodifier les paramčtres qui concernent tous les fichiers '%s', cliquez\nsur Avancé.", 14007, 12, 155, 160, 30 +PUSHBUTTON "A&vancé", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirmer le remplacement de fichier" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Oui", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Oui pour tous", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Non", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Annuler", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ce dossier contient déjŕ un fichier nommé '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Ce dossier contient déjŕ un fichier en lecture-seule nommé '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Ce dossier contient déjŕ un fichier systčme nommé '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Désirez-vous remplacer le fichier existant", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(date et taille inconnues)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "par celui-ci ?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(date et taille inconnues)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Fermer ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ętes-vous sűr de vouloir fermer ReactOS ?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "Fermer", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Annuler", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Déconnecter ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ętes-vous sűr de vouloir vous déconnecter ?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Déconnecter", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Annuler", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Exécution automatique" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sélectionnez un type de contenu, puis choisissez une action que ReactOS réalisera automatiquement quand ce type sera utilisé dans ce périphérique :", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Sélectionnez une action ŕ réaliser :", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "M'interroger ŕ chaque fois pour &choisir une action", 1006, 14, 177, 202, 10 + PUSHBUTTON "Pa&ramčtres par défaut", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Contenu mixte" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Ce disque ou dispositif contient plus d'un type de fichiers.", 1001, 32, 7, 191, 20 + LTEXT "Que voulez-vous que ReactOS fasse ?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Annuler", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Contenu mixte" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS peut réaliser la męme action chaque fois que vous insérez un disque ou connectez un dispositif avec ce type de fichiers :", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Que voulez-vous que ReactOS fasse ?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Toujours réaliser l'action sélectionnée.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Annuler", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Exécution automatique" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS peut réaliser la męme action chaque fois que vous connectez ce dispositif.", 1001, 32, 7, 190, 22 + LTEXT "Que voulez-vous que ReactOS fasse ?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "Toujours réaliser l'action sélectionnée", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Annuler", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Fermer ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Que voulez-vous que l'ordinateur fasse ?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintenir votre session, garder votre ordinateur lancé avec peu d'énergie et les données toujours en mémoire. L'ordinateur se réveille lorsque vous pressez une touche ou que vous bougez la souris.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Annuler", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "Aide", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Formater" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Démarrer", IDOK, 53, 198, 60, 14 + PUSHBUTTON "Fermer", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacité :", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Systčme de fichiers", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "Taille d'unité d'&allocation", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Nom du volume", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "&Options de formatage", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "Formatage rapide", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "Activer la compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Vérifier le disque" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Démarrer", IDOK, 53, 100, 60, 14 + GROUPBOX "Options de vérification", -1, 7, 6, 179, 50 + PUSHBUTTON "Annuler", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Réparer automatiquement les erreurs du systčme de fichiers", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scanner pour rechercher et réparer les secteurs défectueux", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Changer l'icône" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Nom de fichier :", -1, 7, 14, 208, 10 + PUSHBUTTON "Parcourir...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icônes :", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Annuler",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Fichier" + IDS_SHV_COLUMN2 "Taille" + IDS_SHV_COLUMN3 "Type" + IDS_SHV_COLUMN4 "Modifié" + IDS_SHV_COLUMN5 "Attributs" + IDS_SHV_COLUMN6 "Capacité" + IDS_SHV_COLUMN7 "Espace disponible" + IDS_SHV_COLUMN8 "Nom" + IDS_SHV_COLUMN9 "Commentaires" + IDS_SHV_COLUMN10 "Propriétaire" + IDS_SHV_COLUMN11 "Groupe" + IDS_SHV_COLUMN12 "Nom de fichier" + IDS_SHV_COLUMN13 "Catégorie" + IDS_SHV_COLUMN_DELFROM "Localisation d'origine" + IDS_SHV_COLUMN_DELDATE "Date de suppression" + IDS_SHV_COLUMN_FONTTYPE "Type de police" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Emplacement réseau" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "État" + IDS_SHV_COLUMN_COMMENTS "Commentaires" + IDS_SHV_COLUMN_LOCATION "Emplacement" + IDS_SHV_COLUMN_MODEL "Modčle" + + /* special folders */ + IDS_DESKTOP "Bureau" + IDS_MYCOMPUTER "Poste de travail" + IDS_RECYCLEBIN_FOLDER_NAME "Corbeille" + IDS_CONTROLPANEL "Panneau de configuration" + IDS_ADMINISTRATIVETOOLS "Outils d'administration" + + /* context menus */ + IDS_VIEW_LARGE "&Grandes icônes" + IDS_VIEW_SMALL "&Petites icônes" + IDS_VIEW_LIST "&Liste" + IDS_VIEW_DETAILS "&Détails" + IDS_SELECT "Sélectionner" + IDS_OPEN "Ouvrir" + IDS_CREATELINK "Créer un &lien" + IDS_COPY "&Copier" + IDS_DELETE "&Supprimer" + IDS_PROPERTIES "&Propriétés" + IDS_CUT "C&ouper" + IDS_RESTORE "Res&taurer" + IDS_FORMATDRIVE "Formater..." + IDS_RENAME "Renommer" + IDS_INSERT "Insérer" + + IDS_CREATEFOLDER_DENIED "Impossible de créer le nouveau dossier : permission refusée." + IDS_CREATEFOLDER_CAPTION "Erreur lors de la création du nouveau dossier" + IDS_DELETEITEM_CAPTION "Confirmer la suppression du fichier" + IDS_DELETEFOLDER_CAPTION "Confirmer la suppression du dossier" + IDS_DELETEITEM_TEXT "Ętes-vous sűr de vouloir supprimer '%1' ?" + IDS_DELETEMULTIPLE_TEXT "Ętes-vous sűr de vouloir supprimer ces %1 éléments ?" + IDS_DELETESELECTED_TEXT "Ętes-vous sűr de vouloir supprimer l(es) élement(s) sélectionné(s) ?" + IDS_TRASHITEM_TEXT "Ętes-vous sűr de vouloir envoyer '%1' ŕ la Corbeille ?" + IDS_TRASHFOLDER_TEXT "Ętes-vous sűr de vouloir envoyer '%1' et tout ce qu'il contient ŕ la Corbeille ?" + IDS_TRASHMULTIPLE_TEXT "Ętes-vous sűr de vouloir envoyer ces %1 éléments ŕ la Corbeille ?" + IDS_CANTTRASH_TEXT "L'élément '%1' ne peut ętre envoyé ŕ la Corbeille. Voulez-vous le supprimer ?" + IDS_OVERWRITEFILE_TEXT "Ce dossier contient déjŕ un fichier nommé '%1'.\n\nVoulez-vous le remplacer ?" + IDS_OVERWRITEFILE_CAPTION "Confirmer l'écrasement du fichier" + IDS_OVERWRITEFOLDER_TEXT "Ce dossier contient déjŕ un dossier nommé '%1'.\n\n"\ + "Si les fichiers dans le dossier de destination ont les męmes noms que ceux dans le\n"\ + "dossier sélectionné, ils seront remplacés. Voulez-vous toujours déplacer ou copier\n"\ + "le dossier?" + + /* message box strings */ + IDS_RESTART_TITLE "Redémarrer" + IDS_RESTART_PROMPT "Voulez-vous redémarrer votre ordinateur ?" + IDS_SHUTDOWN_TITLE "Arręter" + IDS_SHUTDOWN_PROMPT "Voulez-vous fermer la session ReactOS ?" + IDS_LOGOFF_TITLE "Se déconnecter" + IDS_LOGOFF_PROMPT "Voulez-vous vous déconnecter ?" + + /* shell folder path default values */ + IDS_PROGRAMS "Menu Démarrer\\Programmes" + IDS_PERSONAL "Mes documents" + IDS_FAVORITES "Favoris" + IDS_STARTUP "Menu Démarrer\\Programmes\\Démarrage" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Menu Démarrer" + IDS_MYMUSIC "Ma musique" + IDS_MYVIDEO "Mes vidéos" + IDS_DESKTOPDIRECTORY "Bureau" + IDS_NETHOOD "Voisinage Réseau" + IDS_TEMPLATES "Modčles" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "Voisinage d'impression" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\Historique" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "Mes images" + IDS_PROGRAM_FILES_COMMON "Program Files\\Fichiers communs" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Menu Démarrer\\Programmes\\Outils d'administration" + IDS_COMMON_MUSIC "Documents\\Ma musique" + IDS_COMMON_PICTURES "Documents\\Mes images" + IDS_COMMON_VIDEO "Documents\\Mes vidéos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Mes emplacements réseau" + + IDS_NEWFOLDER "Nouveau dossier" + + IDS_DRIVE_FIXED "Disque local" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Disque réseau" + + IDS_OPEN_WITH "Ouvrir avec" + IDS_OPEN_WITH_CHOOSE "Choisir le programme..." + + IDS_SHELL_ABOUT_AUTHORS "&Auteurs" + IDS_SHELL_ABOUT_BACK "< Précédent" + FCIDM_SHVIEW_NEW "Nouveau" + FCIDM_SHVIEW_NEWFOLDER "Nouveau d&ossier" + FCIDM_SHVIEW_NEWLINK "Nouveau &lien" + IDS_FOLDER_OPTIONS "Options du dossier" + IDS_RECYCLEBIN_LOCATION "Emplacement de la corbeille" + IDS_RECYCLEBIN_DISKSPACE "Espace disponible" + IDS_EMPTY_BITBUCKET "Vider la Corbeille" + IDS_PICK_ICON_TITLE "Choisir une icône" + IDS_PICK_ICON_FILTER "Fichiers d'icônes (*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Fichiers exécutables\0*.exe\0" + IDS_DIRECTORY "Dossier" + IDS_VIRTUAL_DRIVER "Pilote de périphérique virtuel" + IDS_BAT_FILE "Fichier Batch ReactOS" + IDS_CMD_FILE "Script de commandes ReactOS" + IDS_COM_FILE "Application DOS" + IDS_CPL_FILE "Elément du panneau de contrôle" + IDS_CUR_FILE "Curseur" + IDS_DLL_FILE "Extension d'application" + IDS_DRV_FILE "Pilote de périphérique" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Fichier police" + IDS_TTF_FILE "Fichier police TrueType" + IDS_HLP_FILE "Fichier d'aide" + IDS_INI_FILE "Fichier de configuration" + IDS_LNK_FILE "Raccourci" + IDS_SYS_FILE "Fichier systčme" + + IDS_OPEN_VERB "Ouvrir" + IDS_RUNAS_VERB "Lancer en tant que " + IDS_EDIT_VERB "Éditer" + IDS_FIND_VERB "Chercher" + IDS_PRINT_VERB "Imprimer" + IDS_PLAY_VERB "Lire" + IDS_PREVIEW_VERB "Apercevoir" + + IDS_FILE_FOLDER "%u fichiers, %u répertoires" + IDS_PRINTERS "Imprimantes" + IDS_FONTS "Polices" + IDS_INSTALLNEWFONT "Installer une nouvelle police..." + + IDS_DEFAULT_CLUSTER_SIZE "Taille d'allocation par défaut" + IDS_COPY_OF "Copie de" + + IDS_SHLEXEC_NOASSOC "Aucun programme Windows n'est configuré pour ouvrir ce type de fichier." +END diff --git a/reactos/dll/win32/shell32_new/lang/hu-HU.rc b/reactos/dll/win32/shell32_new/lang/hu-HU.rc new file mode 100644 index 00000000000..e45819a2d47 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/hu-HU.rc @@ -0,0 +1,759 @@ +/* + * Hungarian resources for shell32 + * + * Copyright 1998 Juergen Schmied + * Copyright 2005 Robert Horvath - Hungarian translation - talley at cubeclub.hu + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Nagy képek", FCIDM_SHVIEW_BIGICON + MENUITEM "Kis képek", FCIDM_SHVIEW_SMALLICON + MENUITEM "Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "Részletek", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Nézet" + BEGIN + MENUITEM "Nagy képek", FCIDM_SHVIEW_BIGICON + MENUITEM "Kis képek", FCIDM_SHVIEW_SMALLICON + MENUITEM "Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "Részletek", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Ikonok rendezése" + BEGIN + MENUITEM "&Név szerint", 0x30 /* column 0 */ + MENUITEM "&Típus szerint", 0x32 /* column 2 */ + MENUITEM "&Méret szerint", 0x31 /* ... */ + MENUITEM "&Létrehozás ideje szerint", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Automatikus elrendezés", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Ikonok igazitása", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Frissítés", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Beillesztés", FCIDM_SHVIEW_INSERT + MENUITEM "Parancsikon beillesztése", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Beállítások", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "B&öngész", FCIDM_SHVIEW_EXPLORE + MENUITEM "Megnyit", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "Kivágás", FCIDM_SHVIEW_CUT + MENUITEM "Másolás", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Parancsikon létrehozása", FCIDM_SHVIEW_CREATELINK + MENUITEM "Törlés", FCIDM_SHVIEW_DELETE + MENUITEM "Átnevezés", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "Tulajdonságok", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Mappák böngészése" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Mégse", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "A ReactOS készítői:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Írd be a program nevét, egy mappáét, dokumentumét, vagy egy Internet címet, és a ReactOS megnyitja.", 12289, 36, 11, 182, 18 + LTEXT "&Megnyitás:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Mégse", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Böngészés...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Állomány" + IDS_SHV_COLUMN2 "Méret" + IDS_SHV_COLUMN3 "Típus" + IDS_SHV_COLUMN4 "Módosítva" + IDS_SHV_COLUMN5 "Attribútumok" + IDS_SHV_COLUMN6 "Méret" + IDS_SHV_COLUMN7 "Rendelkezésre álló hely" + IDS_SHV_COLUMN8 "Név" + IDS_SHV_COLUMN9 "Megjegyzések" + IDS_SHV_COLUMN10 "Tulajdonos" + IDS_SHV_COLUMN11 "Csoport" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Asztal" + IDS_MYCOMPUTER "Számítógép" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Nagy képek" + IDS_VIEW_SMALL "Kis képek" + IDS_VIEW_LIST "Lista" + IDS_VIEW_DETAILS "Részletek" + IDS_SELECT "Kiválaszt" + IDS_OPEN "Megnyit" + IDS_CREATELINK "Parancsikon létrehozása" + IDS_COPY "Másolás" + IDS_DELETE "Törlés" + IDS_PROPERTIES "Tulajdonságok" + IDS_CUT "Kivágás" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Nem hozható létre új mappa: Nincs hozzá engedélyed." + IDS_CREATEFOLDER_CAPTION "Hiba a mappa létrehozásakor" + IDS_DELETEITEM_CAPTION "Állomány törlése" + IDS_DELETEFOLDER_CAPTION "Mappa törlése" + IDS_DELETEITEM_TEXT "Biztosan törölni szeretnéd?: '%1'?" + IDS_DELETEMULTIPLE_TEXT "Biztosan törölni szeretnéd ezt a(z) %1 elemet?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Állomány felülírása" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Újraindítás" + IDS_RESTART_PROMPT "Újra szeretnéd indítani a rendszert?" + IDS_SHUTDOWN_TITLE "Kikapcsolás" + IDS_SHUTDOWN_PROMPT "Kiakarod kapcsolni számítógépét?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "Dokumentumok" + IDS_FAVORITES "Kedvencek" + IDS_STARTUP "Start Menu\\Programs\\Automatikus indítás" /* MS style: Indítópult */ + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Asztal" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "Képek" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Dokumentumok" + IDS_ADMINTOOLS "Start Menu\\Programs\\Felügyeleti eszközök" + IDS_COMMON_MUSIC "Dokumentumok\\My Music" + IDS_COMMON_PICTURES "Dokumentumok\\Képek" + IDS_COMMON_VIDEO "Dokumentumok\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "Ú&j" + FCIDM_SHVIEW_NEWFOLDER "&Mappa" + FCIDM_SHVIEW_NEWLINK "&Parancsikon" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/it-IT.rc b/reactos/dll/win32/shell32_new/lang/it-IT.rc new file mode 100644 index 00000000000..824eb22a88e --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/it-IT.rc @@ -0,0 +1,767 @@ +/* + * Copyright 1998 Juergen Schmied + * Copyright 2003-2004 Puoti + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Icone Grandi", FCIDM_SHVIEW_BIGICON + MENUITEM "&Icone Piccole", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Dettagli", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Visualizza" + BEGIN + MENUITEM "&Icone Grandi", FCIDM_SHVIEW_BIGICON + MENUITEM "&Icone Piccole", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Dettagli", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Disponi &Icone" + BEGIN + MENUITEM "Per &Nome", 0x30 /* column 0 */ + MENUITEM "Per &Tipo", 0x32 /* column 2 */ + MENUITEM "Per &Dimensione", 0x31 /* ... */ + MENUITEM "Per &Data", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Disponi Automaticamente", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Allinea Icone", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Aggiorna", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Incolla", FCIDM_SHVIEW_INSERT + MENUITEM "Crea Collegamento", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Proprietŕ", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&splora", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Apri", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "&Taglia", FCIDM_SHVIEW_CUT + MENUITEM "&Copia", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "&Crea Collegamento", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Cancella", FCIDM_SHVIEW_DELETE + MENUITEM "&Rinomina", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Proprietŕ", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Sfoglia Cartella" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Annulla", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Selezione cartella" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Cartella:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Crea una nuova cartella", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Annulla", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Messaggi" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Si", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Si a &tutti", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Annulla", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Informazioni su %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Versione " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Questa versione di ReactOS č registrata da:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Memoria fisica installata:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS č disponibile grazie a:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Digitare il nome del programma, della cartella, del documento o della risorsa internet, e ReactOS la aprirŕ.", 12289, 36, 11, 182, 18 + LTEXT "&Apri:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Annulla", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Esplora...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Collegamento" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Tipo:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Posizione:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Nome:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Eseguito in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "&Tasto per il collegamento:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Esecuzione:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&ommento:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Trova...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Cambia icona...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&vanzate...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Proprietŕ avanzate" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Scegliere le impostazioni avanzate per questo collegamento.", -1, 5, 30, 210, 10 + CHECKBOX "Eseguire con credenziali diverse", 14000, 25, 50, 150, 10 + LTEXT "Questa opzione permette l'esecuzione del collegamento come se si fosse un altro utente o di proteggere il computer e i dati da attivitŕ non autorizzate del programma.", -1, 50, 60, 175, 40 + CHECKBOX "Eseguire in uno spazio di memoria separato", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Annulla", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generale" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Tipo del file:", 14004, 8, 35, 50, 10 + LTEXT "Cartella", 14005, 68, 35, 160, 10 + LTEXT "Posizione:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Dimensione:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contenente:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Creato:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Sola lettura", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Nascosto", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generale" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Tipo del file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Si apre con:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Posizione:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Dimensione:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Creato:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modificato:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Letto:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributi:", 14020, 8, 189, 45, 10 + CHECKBOX "&Sola lettura", 14021, 58, 189, 67, 10 + CHECKBOX "&Nascosto", 14022, 126, 189, 50, 10 + CHECKBOX "&Archivio", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Versione" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Versione: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Descrizione: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Altre informazioni sulla versione: ", 14006, 6, 70, 222, 115 + LTEXT "Nome dell'elemento: ", 14007, 13, 82, 50, 10 + LTEXT "Valore: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generale" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Tipo:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Spazio usato:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Spazio libero:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacitŕ:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Disco %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Pulitura disco", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Comprimere il disco per recuperare dello spazio", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Permettere di indicizzare questo disco al servizio di indicizzazione per avere ricerche dei file piů rapide", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Strumenti" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Controllo errori", -1, 5, 5, 230, 60 + LTEXT "Questa opzione controllerŕ questo volume\nper verificare l'assenza di errori.", -1, 40, 25, 160, 20 + PUSHBUTTON "Controlla...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Deframmentazione", -1, 5, 65, 230, 60 + LTEXT "Questa opzione deframmenterŕ i file di questo volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Deframmenta...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Salvataggio", -1, 5, 130, 230, 60 + LTEXT "Questa opzione effettuerŕ un salvataggio dei file del volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Salvataggio...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Esegui come" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Quale utente volete utilizzare per l'esecuzione di questo programma?", -1, 10, 20, 220, 20 + CHECKBOX "Utente attuale %s", 14000, 10, 45, 150, 10 + LTEXT "Proteggere il computer e i dati da attivitŕ del programma non autorizzate", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Questa opzione puň prevenire i danni causati da virus del computer ma potrebbe impedire il corretto funzionamento del programma.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "L'utente seguente:", 14002, 10, 100, 90, 10 + LTEXT "Utente:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Annulla", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Proprietŕ del cestino" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Impostazioni per la posizione indicata", -1, 10, 72, 220, 70 + RADIOBUTTON "&Dimensione personalizzata:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "Dimensione &massima(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "&Non spostare i file nel cestino. I file verranno rimossi immediatamente.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Visualizzare un messaggio di richiesta di conferma della cancellazione", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Apri con" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Scegliere il programma che volete usare per aprire questo file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programmi", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Usare sempre il programma selezionato per aprire questo tipo di file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Sfoglia...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Annulla", 14006, 206, 236, 50, 14 +END + +IDD_SH_FILE_COPY DIALOGEX 0, 0, 264, 45 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Copia in corso..." +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + PUSHBUTTON "Annulla", 14002, 195, 14, 60, 16 + CONTROL "", 14000, "MSCTLS_PROGRESS32", 0, 8, 20, 170, 10 + LTEXT "File", 14001, 8, 6, 169, 10 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Generale" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Attivitŕ", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Mostrare le attivitŕ comuni nelle cartelle", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Utilizzare le cartelle nella forma 'ReactOS class&ic' ", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Sfoglia cartelle", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Aprire ogni cartella nella stessa finestra", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Aprire ogni cartella in una nuova finestra", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click sugli elementi come segue", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Click singolo per aprire un elemento (seleziona ed apre)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Sottolinea i titoli delle icone in modo coerente con il &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Sottolinea i titoli delle icone solo se &selezionate", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Doppio click per aprire un elemento (click singolo per selezionare)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Ripristina le impostazioni predefinite", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Visualizzazione" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Vista delle cartelle", -1, 7, 10, 249, 60 +//ICON +LTEXT "Potete applicare la modalitŕ di visualizzazione attuale\na tutte le cartelle.", -1, 60, 20, 180, 20 +PUSHBUTTON "Applicare a &tutte le cartelle", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Ripristina tutte le cartelle", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Impostazioni avanzate:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Ripristina come predefinite", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Tipi dei File" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "&Tipi di file Registrati:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Nuovo", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Cancella", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Dettagli per l'estensione '%s'", 14003, 7, 130, 249, 70 +LTEXT "Si apre con:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Nome", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Cambia...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "I files con estensione '%s' sono di tipo '%s'.\nPer cambiare le impostazioni che influenzano tutti i file '%s', cliccare\nAvanzate.", 14007, 12, 155, 160, 30 +PUSHBUTTON "A&vanzate", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Conferma della sovrascrittura dei file" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Sě", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Sě &tutti", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Annulla", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Questa cartella contiene giŕ un file con nome '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Questa cartella contiene un file a solo lettura con nome '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Questa cartella contiene un file di sistema con nome '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Volete sostituire il file esistente", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(data e dimensione sconosciuti)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "con questo?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(data e dimensione sconosciuti)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Chiudi sessione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Siete sicuro di voler Chiudere la sessione?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Chiudi sessione", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Annulla", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Scollega ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Siete sicuro di volervi scollegare?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Scollega", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Annulla", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Partenza automatica" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Selezionate un tipo di contenuto e poi un tipo di azione che ReactOS deve eseguire automaticamente quando quel tipo č usato in questo dispositivo:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Azioni", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Selezionare una azione da &eseguire:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "&Chiedere ogni volta quale azione eseguire", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Ripristina le impostazioni predefinite", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Contenuti misti" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Questo disco o dispositivo contiene piů di un tipo di contenuto.", 1001, 32, 7, 191, 20 + LTEXT "Cosa volete che faccia ReactOS?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Annulla", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Contenuti misti" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS puň eseguire la stessa azione ogni volta che viene inserito un disco o connesso un dispositivo con questo tipo di file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Cosa volete che faccia ReactOS?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Esegui sempre l'azione selezionata.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Annulla", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Esecuzione automatica" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS puň eseguire la stessa azione ogni volta che collegate questo dispositivo.", 1001, 32, 7, 190, 22 + LTEXT "&Cosa volete che faccia ReactOS?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Esegui sempre l'azione selezionata", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Annulla", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Spegnimento di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Cosa volete che faccia ReactOS?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Mantenere la vostra sessione, il computer acceso a bassa potenza con i dati in memoria. Il computer si riattiverŕ quando č premuto un taso o mosso il mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Annulla", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Aiuto", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Formattazione" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Inizia", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Chiudi", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacitŕ:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "Dimensione dell'unitŕ di &allocazione", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Etichetta del Volume", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Opzioni di &formattazione", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "Formattazione &rapida", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "Abilita la &compressione", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Inizia", IDOK, 53, 100, 60, 14 + GROUPBOX "Opzioni per la verifica del disco", -1, 7, 6, 179, 50 + PUSHBUTTON "Annulla", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Correggi automaticamente gli errori", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Ricerca dei settori difettosi e tentativo di correzione", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Cambia icona" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Nome del file:", -1, 7, 14, 208, 10 + PUSHBUTTON "Sfoglia...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icone:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Annulla",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "File" + IDS_SHV_COLUMN2 "Dimensione" + IDS_SHV_COLUMN3 "Tipo" + IDS_SHV_COLUMN4 "Modificato" + IDS_SHV_COLUMN5 "Attributi" + IDS_SHV_COLUMN6 "Dimensione" + IDS_SHV_COLUMN7 "Dimensione disponibile" + IDS_SHV_COLUMN8 "Nome" + IDS_SHV_COLUMN9 "Commenti" + IDS_SHV_COLUMN10 "Proprietario" + IDS_SHV_COLUMN11 "Gruppo" + IDS_SHV_COLUMN12 "Nome file" + IDS_SHV_COLUMN13 "Categoria" + IDS_SHV_COLUMN_DELFROM "Posizione originale" + IDS_SHV_COLUMN_DELDATE "Data di cancellazione" + IDS_SHV_COLUMN_FONTTYPE "Tipo di font" + IDS_SHV_COLUMN_WORKGROUP "Gruppo di lavoro" + IDS_SHV_NETWORKLOCATION "Posizione in rete" + IDS_SHV_COLUMN_DOCUMENTS "Documenti" + IDS_SHV_COLUMN_STATUS "Stato" + IDS_SHV_COLUMN_COMMENTS "Commenti" + IDS_SHV_COLUMN_LOCATION "Posizione" + IDS_SHV_COLUMN_MODEL "Modello" + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "Risorse del Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Cestino" + IDS_CONTROLPANEL "Pannello di controllo" + IDS_ADMINISTRATIVETOOLS "Strumenti di amministrazione" + + /* context menus */ + IDS_VIEW_LARGE "&Icone Grandi" + IDS_VIEW_SMALL "I&cone Piccole" + IDS_VIEW_LIST "&Lista" + IDS_VIEW_DETAILS "&Dettagli" + IDS_SELECT "Selezione" + IDS_OPEN "Apri" + IDS_CREATELINK "&Crea Collegamento" + IDS_COPY "&Copia" + IDS_DELETE "&Cancella" + IDS_PROPERTIES "&Proprietŕ" + IDS_CUT "&Taglia" + IDS_RESTORE "Ripristina" + IDS_FORMATDRIVE "Formatta..." + IDS_RENAME "Rinomina" + IDS_INSERT "Inserisci" + + IDS_CREATEFOLDER_DENIED "Impossibile creare la cartella: Accesso negato." + IDS_CREATEFOLDER_CAPTION "Errore durante la creazione della cartella" + IDS_DELETEITEM_CAPTION "Confermare la cancellazione del file" + IDS_DELETEFOLDER_CAPTION "Confermare la cancellazione della cartella" + IDS_DELETEITEM_TEXT "Sei sicuro di voler cancellare '%1'?" + IDS_DELETEMULTIPLE_TEXT "Sei sicuro di voler cancellare questi %1 elementi?" + IDS_DELETESELECTED_TEXT "Sei sicuro di voler cancellare gli elementi selezionati?" + IDS_TRASHITEM_TEXT "Sei sicuro di voler spostare '%1' Nel cestino?" + IDS_TRASHFOLDER_TEXT "Sei sicuro di voler spostare '%1' e tutto il suo contenuto nel cestino?" + IDS_TRASHMULTIPLE_TEXT "Sei sicuro di voler spostare %1 elementi nel cestino?" + IDS_CANTTRASH_TEXT "L'elemento '%1' non puň essere spostato nel cestino. Volete cancellarlo?" + IDS_OVERWRITEFILE_TEXT "Questa cartella contiene giŕ un file con nome '%1'.\n\nVolete sostituirlo?" + IDS_OVERWRITEFILE_CAPTION "Confermare la sovrascrittura del File" + IDS_OVERWRITEFOLDER_TEXT "Questa cartella contiene giŕ una cartella con nome '%1'.\n\n"\ + "Se i file nella cartella di destinazione hanno gli stessi nomi di quelli della \n"\ + "cartella selezionata saranno sovrascritti. Volete procedere comunque?\n"\ + "" + + /* message box strings */ + IDS_RESTART_TITLE "Riavvia" + IDS_RESTART_PROMPT "Volete riavviare il sistema?" + IDS_SHUTDOWN_TITLE "Arresta sistema" + IDS_SHUTDOWN_PROMPT "Volete arrestare il sistema?" + IDS_LOGOFF_TITLE "Disconnetti" + IDS_LOGOFF_PROMPT "Volete disconnettervi?" + + /* shell folder path default values */ + IDS_PROGRAMS "Menu Avvio\\Programmi" + IDS_PERSONAL "Documenti Personali" + IDS_FAVORITES "Preferiti" + IDS_STARTUP "Menu Avvio\\Programmi\\AvvioAutomatico" + IDS_RECENT "Recenti" + IDS_SENDTO "Invia A" + IDS_STARTMENU "Menu Avvio" + IDS_MYMUSIC "Musica" + IDS_MYVIDEO "Video" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "Rete" + IDS_TEMPLATES "Modelli" + IDS_APPDATA "DatiApplicazioni" + IDS_PRINTHOOD "Stampanti" + IDS_LOCAL_APPDATA "Impostazioni locali\\Dati Applicazioni" + IDS_INTERNET_CACHE "Impostazioni locali\\File Temporanei di Internet" + IDS_COOKIES "Cookies" + IDS_HISTORY "Impostazioni locali\\Storia" + IDS_PROGRAM_FILES "Programmi" + IDS_MYPICTURES "Foto" + IDS_PROGRAM_FILES_COMMON "Programmi\\File Comuni" + IDS_COMMON_DOCUMENTS "Documenti" + IDS_ADMINTOOLS "Menu Avvio\\Programmi\\Strumenti di Amministrazione" + IDS_COMMON_MUSIC "Documenti\\Musica" + IDS_COMMON_PICTURES "Documenti\\Foto" + IDS_COMMON_VIDEO "Documenti\\Video" + IDS_CDBURN_AREA "Impostazioni Locali\\Dati Applicazioni\\Microsoft\\Masterizza CD" + IDS_NETWORKPLACE "Risorse di rete" + + IDS_NEWFOLDER "Nuova cartella" + + IDS_DRIVE_FIXED "Disco locale" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Disco di Rete" + + IDS_OPEN_WITH "Apri con" + IDS_OPEN_WITH_CHOOSE "Scegliere un programma..." + + IDS_SHELL_ABOUT_AUTHORS "&Autori" + IDS_SHELL_ABOUT_BACK "< &Indietro" + FCIDM_SHVIEW_NEW "Nuovo" + FCIDM_SHVIEW_NEWFOLDER "Nuova &Cartella" + FCIDM_SHVIEW_NEWLINK "Nuovo &Collegamento" + IDS_FOLDER_OPTIONS "Opzioni della cartella" + IDS_RECYCLEBIN_LOCATION "Posizione del Cestino" + IDS_RECYCLEBIN_DISKSPACE "Spazio disponibile" + IDS_EMPTY_BITBUCKET "Svuota cestino" + IDS_PICK_ICON_TITLE "Scegliere un icona" + IDS_PICK_ICON_FILTER "Icone(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "File eseguibili\0*.exe\0" + IDS_DIRECTORY "Cartella" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Applicazione Dos" + IDS_CPL_FILE "Elemento del pannello di controllo" + IDS_CUR_FILE "Cursore" + IDS_DLL_FILE "Estensione di applicazione" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Applicazione" + IDS_FON_FILE "Font" + IDS_TTF_FILE "TrueType Font" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Impostazioni di configurazione" + IDS_LNK_FILE "Collegamento" + IDS_SYS_FILE "File di sistema" + + IDS_OPEN_VERB "Apri" + IDS_RUNAS_VERB "Eseguire come " + IDS_EDIT_VERB "Modifica" + IDS_FIND_VERB "Cerca" + IDS_PRINT_VERB "Stampa" + IDS_PLAY_VERB "Mostra" + IDS_PREVIEW_VERB "Anteprima" + + IDS_FILE_FOLDER "%u File, %u Cartelle" + IDS_PRINTERS "Stampanti" + IDS_FONTS "Font" + IDS_INSTALLNEWFONT "Installazione nuovi Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Dimensione predefinita di allocazione" + IDS_COPY_OF "Copia di" + + IDS_SHLEXEC_NOASSOC "Non c'č un programma configurato per aprire questo tipo di file." +END diff --git a/reactos/dll/win32/shell32_new/lang/ja-JP.rc b/reactos/dll/win32/shell32_new/lang/ja-JP.rc new file mode 100644 index 00000000000..c09ba106660 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/ja-JP.rc @@ -0,0 +1,755 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "‘傍‚˘ƒAƒCƒRƒ“(&G)", FCIDM_SHVIEW_BIGICON + MENUITEM "Ź‚ł‚˘ƒAƒCƒRƒ“(&M)", FCIDM_SHVIEW_SMALLICON + MENUITEM "ˆę——(&L)", FCIDM_SHVIEW_LISTVIEW + MENUITEM "Ú×(&D)", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "•\\ŽŚ(&V)" + BEGIN + MENUITEM "‘傍‚˘ƒAƒCƒRƒ“(&G)", FCIDM_SHVIEW_BIGICON + MENUITEM "Ź‚ł‚˘ƒAƒCƒRƒ“(&M)", FCIDM_SHVIEW_SMALLICON + MENUITEM "ˆę——(&L)", FCIDM_SHVIEW_LISTVIEW + MENUITEM "Ú×(&D)", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "ƒAƒCƒRƒ“‚ĚŽ—ń(&I)" + BEGIN + MENUITEM "–ź‘O‡(&N)", 0x30 /* column 0 */ + MENUITEM "Ží—ޏ‡(&T)", 0x32 /* column 2 */ + MENUITEM "ƒTƒCƒY‡(&S)", 0x31 /* ... */ + MENUITEM "“ú•t‡(&D)", 0x33 + MENUITEM SEPARATOR + MENUITEM "ƒAƒCƒRƒ“‚ĚŽŠ“ŽŽ—ń(&A)", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "“™ŠÔŠu‚ɐޗń", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "ĹV‚̏î•ń‚ɍXV", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "“\\‚č•t‚Ż", FCIDM_SHVIEW_INSERT + MENUITEM "ƒVƒ‡[ƒgƒJƒbƒg‚Ě“\\‚č•t‚Ż", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "ƒvƒƒpƒeƒB", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "ƒGƒNƒXƒvƒ[ƒ‰(&X)", FCIDM_SHVIEW_EXPLORE + MENUITEM "ŠJ‚­(&O)", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "Ř‚čŽć‚č(&U)", FCIDM_SHVIEW_CUT + MENUITEM "ƒRƒs[(&C)", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "ƒVƒ‡[ƒgƒJƒbƒg‚̍쐬(&L)", FCIDM_SHVIEW_CREATELINK + MENUITEM "íœ(&D)", FCIDM_SHVIEW_DELETE + MENUITEM "–ź‘O‚Ě•ĎX(&R)", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "ƒvƒƒpƒeƒB(&P)", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "ƒtƒHƒ‹ƒ_‚ĚŽQĆ" +FONT 9, "MS UI Gothic" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "ƒtƒHƒ‹ƒ_‚ĚŽQĆ" +FONT 9, "MS UI Gothic" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "ƒtƒHƒ‹ƒ_:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "V‚ľ‚˘ƒtƒHƒ‹ƒ_‚̍쐬(&M)", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "ƒƒbƒZ[ƒW" +FONT 9, "MS UI Gothic" +BEGIN + DEFPUSHBUTTON "‚Í‚˘(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "‚ˇ‚ׂĂ͂˘(&A)", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "‚˘‚˘‚Ś(&N)", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹(&C)", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "%s ‚ɂ‚˘‚Ä" +FONT 9, "MS UI Gothic" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "ƒo[ƒWƒ‡ƒ“ " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "‚ą‚ĚReactOS‚Ěƒo[ƒWƒ‡ƒ“‚ÍŽŸ‚Ě•ű‚É“o˜^‚ł‚ę‚Ä‚˘‚Ü‚ˇ:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "“‹Ú‚ł‚ę‚Ä‚˘‚镨—ƒƒ‚ƒŠ—e—Ę:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 9, "MS UI Gothic" +BEGIN + LTEXT "ReactOS‚ÍŽŸ‚Ě•űX‚É‚ć‚Á‚Ä’ń‹Ÿ‚ł‚ę‚Ä‚˘‚Ü‚ˇ:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 9, "MS UI Gothic" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "ŽŔs‚ˇ‚éƒvƒƒOƒ‰ƒ€–źA‚Ü‚˝‚ÍŠJ‚­ƒtƒHƒ‹ƒ_‚╜‘–źAƒCƒ“ƒ^[ƒlƒbƒg ƒŠƒ\\[ƒX–ź‚đ“ü—Í‚ľ‚Ä‚­‚ž‚ł‚˘B", 12289, 36, 11, 182, 18 + LTEXT "–ź‘O(&O):", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "ŽQĆ(&B)...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ƒVƒ‡[ƒgƒJƒbƒg" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "‘ÎŰ‚ĚŽí—Ţ:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "‘ÎŰ‚ĚęŠ:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "‘ΏŰ:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "ŽŔsŒł(&S):", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "ƒVƒ‡[ƒgƒJƒbƒgƒL[(&K):", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "ŽŔsó‘Ô:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "ƒRƒƒ“ƒg(&O):", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "‘ÎŰ‚ĚŒŸő(&F)...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "ƒAƒCƒRƒ“‚Ě•ĎX(&C)...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "Ú×Ý’č(&D)...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Šg’ŁƒvƒƒpƒeƒB" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + LTEXT "‚ą‚ĚƒVƒ‡[ƒgƒJƒbƒg‚ÉŽg—p‚ˇ‚éŠg’ŁƒvƒƒpƒeƒB‚đ‘I‘đ‚ľ‚Ä‚­‚ž‚ł‚˘B", -1, 5, 30, 210, 10 + CHECKBOX "ˆŮ‚Č‚él•¨Ř–žî•ń‚ĹŽŔs‚ˇ‚é", 14000, 25, 50, 150, 10 + LTEXT "‚ą‚ĚƒIƒvƒVƒ‡ƒ“‚đŽg—p‚ˇ‚é‚Ć‚ą‚ĚƒVƒ‡[ƒgƒJƒbƒg‚đ•Ę‚Ěƒ†[ƒU[‚Ć‚ľ‚ÄŽŔs‚Ĺ‚Ť‚Ü‚ˇB‚Ü‚˝AŽŠ•ŞŽŠg‚ĹŽŔs‚ˇ‚éę‡A‹–‰Â‚ł‚ę‚Ä‚˘‚Č‚˘ƒvƒƒOƒ‰ƒ€‚ĚŠˆ“ނЂçƒRƒ“ƒsƒ…[ƒ^‚Ćƒf[ƒ^‚đ•ŰŒě‚Ĺ‚Ť‚Ü‚ˇB", -1, 50, 60, 175, 40 + CHECKBOX "•Ę‚Ěƒƒ‚ƒŠ—Ěˆć‚ĹŽŔs‚ˇ‚é", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "’†Ž~", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "‘S”Ę" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "ƒtƒ@ƒCƒ‹‚ĚŽí—Ţ:", 14004, 8, 35, 50, 10 + LTEXT "ƒtƒHƒ‹ƒ_", 14005, 68, 35, 160, 10 + LTEXT "ęŠ:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "ƒTƒCƒY:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Žű—eƒTƒCƒY:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "ěŹ“úŽž:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "“ǂݎć‚čę—p(&R)", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "‰B‚ľƒtƒ@ƒCƒ‹(&H)", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "‘S”Ę" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "ƒtƒ@ƒCƒ‹‚ĚŽí—Ţ:", 14004, 8, 35, 50, 10 + LTEXT "ƒtƒ@ƒCƒ‹", 14005, 68, 35, 160, 10 + LTEXT "ŽŔsƒvƒƒOƒ‰ƒ€:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "ęŠ:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "ƒTƒCƒY:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "ěŹ“úŽž:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "•ύX“úŽž:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "ƒAƒNƒZƒX“úŽž:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "‘ސŤ:", 14020, 8, 189, 45, 10 + CHECKBOX "“ǂݎć‚čę—p(&R)", 14021, 58, 189, 67, 10 + CHECKBOX "‰B‚ľƒtƒ@ƒCƒ‹(&H)", 14022, 126, 189, 50, 10 + CHECKBOX "ƒA[ƒJƒCƒu(&A)", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ƒo[ƒWƒ‡ƒ“" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + LTEXT "ƒtƒ@ƒCƒ‹ƒo[ƒWƒ‡ƒ“: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "ŕ–ž: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "’˜ěŒ : ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "‚ť‚Ě‘ź‚Ěƒo[ƒWƒ‡ƒ“î•ń: ", 14006, 6, 70, 222, 115 + LTEXT "€–Ú–ź: ", 14007, 13, 82, 50, 10 + LTEXT "’l: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "‘S”Ę" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Ží—Ţ:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "ƒtƒ@ƒCƒ‹ƒVƒXƒeƒ€:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Žg—p—Ěˆć:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "‹ó‚Ť—Ěˆć:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "—e—Ę:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "ƒhƒ‰ƒCƒu %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "ƒfƒBƒXƒN‚ĚƒNƒŠ[ƒ“ƒAƒbƒv", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "ƒhƒ‰ƒCƒu‚đˆłk‚ľ‚ăfƒBƒXƒN—Ěˆć‚đŠm•Ű‚ˇ‚é", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "‚ą‚ĚƒfƒBƒXƒN‚ɃCƒ“ƒfƒbƒNƒX‚đ•t‚Ż‚Äƒtƒ@ƒCƒ‹ŒŸő‚𑏂­‚ˇ‚éB", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ƒc[ƒ‹" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + GROUPBOX "ƒGƒ‰[ƒ`ƒFƒbƒN", -1, 5, 5, 230, 60 + LTEXT "‚ą‚ĚƒIƒvƒVƒ‡ƒ“‚̓{ƒŠƒ…[ƒ€ƒGƒ‰[‚đƒ`ƒFƒbƒN‚ľ‚Ü‚ˇB", -1, 40, 25, 160, 20 + PUSHBUTTON "‚ˇ‚Ž‚Éƒ`ƒFƒbƒN...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Ĺ“K‰ť", -1, 5, 65, 230, 60 + LTEXT "‚ą‚ĚƒIƒvƒVƒ‡ƒ“‚Í‚ą‚Ěƒ{ƒŠƒ…[ƒ€‚Ěƒtƒ@ƒCƒ‹‚đĹ“K‰ť‚ľ‚Ü‚ˇ", -1, 40, 85, 160, 20 + PUSHBUTTON "‚ˇ‚Ž‚ÉĹ“K‰ť...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "ƒoƒbƒNƒAƒbƒv", -1, 5, 130, 230, 60 + LTEXT "‚ą‚ĚƒIƒvƒVƒ‡ƒ“‚Í‚ą‚Ěƒ{ƒŠƒ…[ƒ€‚Ěƒtƒ@ƒCƒ‹‚đƒoƒbƒNƒAƒbƒv‚ľ‚Ü‚ˇB", -1, 40, 150, 160, 20 + PUSHBUTTON "‚ˇ‚Ž‚ÉƒoƒbƒNƒAƒbƒv...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ƒn[ƒhƒEƒFƒA" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "•Ę‚Ěƒ†[ƒU[‚Ć‚ľ‚ÄŽŔs" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + LTEXT "‚ą‚ĚƒvƒƒOƒ‰ƒ€‚đŽŔs‚ˇ‚郆[ƒU[ƒAƒJƒEƒ“ƒg‚đ‘I‘đ‚ľ‚Ä‚­‚ž‚ł‚˘", -1, 10, 20, 220, 20 + CHECKBOX "ŒťÝ‚Ěƒ†[ƒU[ (%s)", 14000, 10, 45, 150, 10 + LTEXT "‹–‰Â‚ł‚ę‚Ä‚˘‚Č‚˘ƒvƒƒOƒ‰ƒ€‚ĚŠˆ“ނЂçƒRƒ“ƒsƒ…[ƒ^‚Ćƒf[ƒ^‚đ•ŰŒě‚ˇ‚é", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "‚ą‚ĚƒIƒvƒVƒ‡ƒ“‚̓Rƒ“ƒsƒ…[ƒ^‚âŒÂlƒf[ƒ^‚ÉŠëŠQ‚đ‚ŕ‚˝‚炡ƒRƒ“ƒsƒ…[ƒ^ƒEƒCƒ‹ƒX‚𖢑R‚É–hŽ~‚ˇ‚邹‚Ć‚Ş‚Ĺ‚Ť‚Ü‚ˇB‚˝‚ž‚ľA‚ą‚ĚƒIƒvƒVƒ‡ƒ“‚đ‘I‘đ‚ˇ‚é‚ĆƒvƒƒOƒ‰ƒ€‚ސłí‚É‹@”\\‚ľ‚Č‚­‚Č‚é‰Â”\\Ť‚Ş‚ ‚č‚Ü‚ˇB", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "ŽŸ‚Ěƒ†[ƒU[:", 14002, 10, 100, 90, 10 + LTEXT "ƒ†[ƒU[–ź:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "ƒpƒXƒ[ƒh:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "‚˛‚Ý” ‚ĚƒvƒƒpƒeƒB" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "‘I‘đ‚ł‚ę‚˝ęŠ‚̐ݒč", -1, 10, 72, 220, 70 + RADIOBUTTON "ƒJƒXƒ^ƒ€ƒTƒCƒY(&C):", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "Ĺ‘ĺƒTƒCƒY(MB)(&A):", -1, 20, 105, 70, 10 + RADIOBUTTON "ƒtƒ@ƒCƒ‹‚đ‚˛‚Ý” ‚ÉˆÚ“Ž‚š‚¸‚É‚ˇ‚Ž‚Éíœ‚ˇ‚éB(&R)", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "íœ‚ĚŠm”Fƒ_ƒCƒAƒƒO‚đ•\\ŽŚ‚ˇ‚é(&D)", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ŠJ‚­ƒvƒƒOƒ‰ƒ€" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "‚ą‚Ěƒtƒ@ƒCƒ‹‚đŠJ‚­‚˝‚߂Ɏg—p‚ˇ‚éƒvƒƒOƒ‰ƒ€‚đ‘I‘đ‚ľ‚Ä‚­‚ž‚ł‚˘:", -1, 44, 12, 211, 10 + LTEXT "ƒtƒ@ƒCƒ‹: ", 14001, 44, 25, 188, 10 + GROUPBOX "ƒvƒƒOƒ‰ƒ€‚Ěˆę——(&P)", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "‚ą‚ĚŽí—Ţ‚Ěƒtƒ@ƒCƒ‹‚đŠJ‚­‚Ć‚Ť‚́Aí‚É‘I‘đ‚ľ‚˝ƒvƒƒOƒ‰ƒ€‚đŽg—p‚ˇ‚é(&A)", 14003, 20, 193, 225, 10 + PUSHBUTTON "ŽQĆ(&B)...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "‘S”Ę" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN + GROUPBOX "ƒ^ƒXƒN", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "ƒtƒHƒ‹ƒ_‚É‹¤’Ę‚Ěƒ^ƒXƒN‚đ•\\ŽŚ‚ˇ‚é(&F)", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "ReactOS ƒNƒ‰ƒVƒbƒN ƒtƒHƒ‹ƒ_‚đŽg—p‚ˇ‚é(&I)", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "ƒtƒHƒ‹ƒ_‚ĚŽQĆ", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "“Ż‚śƒEƒBƒ“ƒhƒE‚ĹƒtƒHƒ‹ƒ_‚đŠJ‚­(&M)", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "ƒtƒHƒ‹ƒ_‚˛‚Ć‚ÉˆŮ‚Č‚éƒEƒBƒ“ƒhƒE‚ĹŠJ‚­(&W)", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "€–Ú‚ĚƒNƒŠƒbƒN•ű–@", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "ƒVƒ“ƒOƒ‹ƒNƒŠƒbƒN‚ō€–Ú‚đŠJ‚­(ƒ|ƒCƒ“ƒg‚Ĺ‘I‘đ) (&S)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "ƒuƒ‰ƒEƒU‚ɍ‡‚킚‚ăAƒCƒRƒ“ƒ^ƒCƒgƒ‹‚ɉşü‚đˆř‚­(&B)", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "ƒ|ƒCƒ“ƒg‚ľ‚˝‚Ć‚Ť‚Ě‚ÝƒAƒCƒRƒ“ƒ^ƒCƒgƒ‹‚ɉşü‚đˆř‚­(&P)", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "ƒ_ƒuƒ‹ƒNƒŠƒbƒN‚ō€–Ú‚đŠJ‚­(ƒVƒ“ƒOƒ‹ƒNƒŠƒbƒN‚Ĺ‘I‘đ)(&D)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "ƒfƒtƒHƒ‹ƒg‚É–ß‚ˇ(&R)", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "•\\ŽŚ" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN +GROUPBOX "ƒtƒHƒ‹ƒ_‚Ě•\\ŽŚ•ű–@", -1, 7, 10, 249, 60 +//ICON +LTEXT "‚ą‚ĚƒtƒHƒ‹ƒ_‚ÉŽg—p‚ľ‚Ä‚˘‚é•\\ŽŚ•ű–@(Ú×•\\ŽŚ‚â•Ŕ‚ׂĕ\\ŽŚ‚Č‚Ç)\n‚đ‚ˇ‚×‚Ä‚ĚƒtƒHƒ‹ƒ_‚É“K—p‚Ĺ‚Ť‚Ü‚ˇB", -1, 60, 20, 180, 20 +PUSHBUTTON "‚ˇ‚×‚Ä‚ĚƒtƒHƒ‹ƒ_‚É“K—p(&L)", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "‚ˇ‚×‚Ä‚ĚƒtƒHƒ‹ƒ_‚đƒŠƒZƒbƒg(&R)", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Ú×Ý’č:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "ƒfƒtƒHƒ‹ƒg‚É–ß‚ˇ(&D)", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "ƒtƒ@ƒCƒ‹‚ĚŽí—Ţ" +FONT 9, "MS UI Gothic", 0, 0, 0x0 +BEGIN +LTEXT "“o˜^‚ł‚ę‚Ä‚˘‚éƒtƒ@ƒCƒ‹‚ĚŽí—Ţ(&T):", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "V‹K(&N)", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "íœ(&D)", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Šg’ŁŽq '%s' ‚̏ڍ×", 14003, 7, 130, 249, 70 +LTEXT "ŠJ‚­ƒvƒƒOƒ‰ƒ€:", -1, 12, 140, 40, 10 +//ICON +LTEXT "ƒAƒvƒŠ–ź", 14005, 100, 140, 40, 10 +PUSHBUTTON "•ύX(&C)...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Šg’ŁŽq '%s' ‚Ěƒtƒ@ƒCƒ‹‚ĚŽí—Ţ‚Í'%s'‚Ĺ‚ˇB\n'%s' ‚Ěƒtƒ@ƒCƒ‹‚ˇ‚ׂĂɑ΂ˇ‚éÝ’č‚đ•ύX‚ˇ‚é‚É‚Í\nÚ×Ý’č‚đƒNƒŠƒbƒN‚ľ‚Ä‚­‚ž‚ł‚˘B", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ú×Ý’č(&V)", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ƒtƒ@ƒCƒ‹‚Ě’u‚ŤŠˇ‚Ś‚ĚŠm”F" +FONT 9, "MS UI Gothic" +BEGIN + DEFPUSHBUTTON "‚Í‚˘(&Y)", IDYES, 20, 122, 60, 14 + PUSHBUTTON "‚ˇ‚ׂĂ͂˘(&A)", 12807, 85, 122, 60, 14 + PUSHBUTTON "‚˘‚˘‚Ś(&N)", IDNO, 150, 122, 60, 14 + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "‚ą‚ĚƒtƒHƒ‹ƒ_‚ɂ͊ů‚Ƀtƒ@ƒCƒ‹'%2'‚Ş‘śÝ‚ľ‚Ü‚ˇB", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "‚ą‚ĚƒtƒHƒ‹ƒ_‚ɂ͊ů‚ɓǂݎć‚čę—pƒtƒ@ƒCƒ‹'%2'‚Ş‘śÝ‚ľ‚Ü‚ˇB", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "‚ą‚ĚƒtƒHƒ‹ƒ_‚ɂ͊ů‚ɃVƒXƒeƒ€ƒtƒ@ƒCƒ‹'%2'‚Ş‘śÝ‚ľ‚Ü‚ˇB", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Šů‘ś‚Ěƒtƒ@ƒCƒ‹", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(“ú•t‚ĆƒTƒCƒY•s–ž)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "‚Ć‚ą‚Ěƒtƒ@ƒCƒ‹‚đ’u‚ŤŠˇ‚ڂĂŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(“ú•t‚ĆƒTƒCƒY•s–ž)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ReactOS‚ĚƒƒOƒIƒt" +FONT 9, "MS UI Gothic" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "ƒƒOƒIƒt‚ľ‚Ä‚ŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "ƒƒOƒIƒt(&L)", IDOK, 57, 40, 60, 14 + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ReactOS‚̐ؒf" +FONT 9, "MS UI Gothic" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ř’f‚ľ‚Ä‚ŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "Ř’f(&D)", IDOK, 57, 40, 60, 14 + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "ŽŠ“ŽÄś" +FONT 9, "MS UI Gothic" +BEGIN + LTEXT "ƒRƒ“ƒeƒ“ƒc‚ĚŽí—Ţ‚đ‘I‚ń‚ŁA‚ť‚ĚŽí—Ţ‚Ş‚ą‚ĚƒfƒoƒCƒX‚ĹŽg—p‚ł‚ę‚é‚Ć‚Ť‚ÉReactOS‚ŞŽŠ“Ž“I‚ÉŽŔs‚ˇ‚铎ě‚đ‘I‘đ‚ľ‚Ä‚­‚ž‚ł‚˘(&S):", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "“Žě", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "ŽŔs‚ˇ‚铎ě‚đ‘I‘đ(&P):", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "“Žě‚đ–ˆ‰ń‘I‘đ‚ˇ‚é‚悤‚ɑقˇ(&C)", 1006, 14, 177, 202, 10 + PUSHBUTTON "ƒfƒtƒHƒ‹ƒg‚É–ß‚ˇ(&R)", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "ŹÝ‚ľ‚˝ƒRƒ“ƒeƒ“ƒc" +FONT 9, "MS UI Gothic" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "‚ą‚ĚƒfƒBƒXƒN‚ŕ‚ľ‚­‚̓fƒoƒCƒX‚ɂ͕Ą”‚ĚŽí—Ţ‚ĚƒRƒ“ƒeƒ“ƒc‚ފ܂܂ę‚Ä‚˘‚Ü‚ˇB", 1001, 32, 7, 191, 20 + LTEXT "ReactOS ‚ŞŽŔs‚ˇ‚铎ě‚đ‘I‘đ‚ľ‚Ä‚­‚ž‚ł‚˘", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "ŹÝ‚ľ‚˝ƒRƒ“ƒeƒ“ƒc" +FONT 9, "MS UI Gothic" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS ‚̓fƒBƒXƒN‚Ş‘}“ü‚ł‚ę‚éA‚ŕ‚ľ‚­‚Í‚ą‚Ěƒtƒ@ƒCƒ‹‚ĚŽí—Ţ‚ĚƒfƒoƒCƒX‚ŞÚ‘ą‚ł‚ę‚˝‚Ć‚Ť–ˆ‰ń“Ż‚ś“Žě‚Ş‰Â”\\‚Ĺ‚ˇ:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "ReactOS ‚ŞŽŔs‚ˇ‚铎ě‚đ‘I‘đ‚ľ‚Ä‚­‚ž‚ł‚˘", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "í‚É‘I‘đ‚ľ‚˝“Žě‚đs‚¤B", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "ŽŠ“ŽÄś" +FONT 9, "MS UI Gothic" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS ‚Í‚ą‚ĚƒfƒoƒCƒX‚ŞÚ‘ą‚ł‚ę‚˝‚Ć‚Ť–ˆ‰ń“Ż‚ś“Žě‚Ş‰Â”\\‚Ĺ‚ˇB", 1001, 32, 7, 190, 22 + LTEXT "ReactOS ‚ŞŽŔs‚ˇ‚铎ě‚đ‘I‘đ‚ľ‚Ä‚­‚ž‚ł‚˘(&W)", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "í‚É‘I‘đ‚ľ‚˝“Žě‚đs‚¤(&A)", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ReactOS‚ĚƒVƒƒƒbƒgƒ_ƒEƒ“" +FONT 9, "MS UI Gothic" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "ƒRƒ“ƒsƒ…[ƒ^‚Ě“Žě‚đ‘I‘đ‚ľ‚Ä‚­‚ž‚ł‚˘", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "ƒƒ‚ƒŠ‚Ƀf[ƒ^‚Ş‚ ‚éó‘Ô‚ĹƒZƒbƒVƒ‡ƒ“‚đˆŰŽ‚ľA’á“d—Í‚ĹƒRƒ“ƒsƒ…[ƒ^‚đŽŔs‚ľ‘ą‚Ż‚Ü‚ˇBƒL[‚đ‰Ÿ‚ľ‚˝‚čAƒ}ƒEƒX‚đ“Ž‚Š‚ľ‚˝‚股‚é‚ƁAƒRƒ“ƒsƒ…[ƒ^‚Í“Ž‚Ťo‚ľ‚Ü‚ˇB", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "ƒwƒ‹ƒv(&H)", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ƒtƒH[ƒ}ƒbƒg" +FONT 9, "MS UI Gothic" +BEGIN + DEFPUSHBUTTON "ŠJŽn(&S)", IDOK, 53, 198, 60, 14 + PUSHBUTTON "•‚ś‚é(&C)", IDCANCEL, 118, 198, 60, 14 + LTEXT "—e—Ę(&P):", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "ƒtƒ@ƒCƒ‹ƒVƒXƒeƒ€(&F)", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "ƒAƒƒP[ƒVƒ‡ƒ“ƒ†ƒjƒbƒgƒTƒCƒY(&A)", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "ƒ{ƒŠƒ…[ƒ€ƒ‰ƒxƒ‹(&L)", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "ƒtƒH[ƒ}ƒbƒg ƒIƒvƒVƒ‡ƒ“(&O)", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "ƒNƒCƒbƒN ƒtƒH[ƒ}ƒbƒg(&Q)", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "ˆłk‚đ—LŒř‚É‚ˇ‚é(&E)", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ƒ`ƒFƒbƒNƒfƒBƒXƒN" +FONT 9, "MS UI Gothic" +BEGIN + DEFPUSHBUTTON "ŠJŽn", IDOK, 53, 100, 60, 14 + GROUPBOX "ƒ`ƒFƒbƒNƒfƒBƒXƒNƒIƒvƒVƒ‡ƒ“", -1, 7, 6, 179, 50 + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "ŽŠ“Ž“I‚Ƀtƒ@ƒCƒ‹ƒVƒXƒeƒ€‚ĚƒGƒ‰[‚đC•œ‚ˇ‚é", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "ƒoƒbƒhƒZƒNƒ^‚đƒXƒLƒƒƒ“‚ľ‰ń•œ‚đŽŽ‚Ý‚é(&S)", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ƒAƒCƒRƒ“‚Ě•ĎX" +FONT 9, "MS UI Gothic", 400, 0, 0x1 +BEGIN + LTEXT "ƒtƒ@ƒCƒ‹–ź:", -1, 7, 14, 208, 10 + PUSHBUTTON "ŽQĆ...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "ƒAƒCƒRƒ“:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "–ź‘O" + IDS_SHV_COLUMN2 "ƒTƒCƒY" + IDS_SHV_COLUMN3 "Ží—Ţ" + IDS_SHV_COLUMN4 "XV“úŽž" + IDS_SHV_COLUMN5 "‘ސŤ" + IDS_SHV_COLUMN6 "‡ŒvƒTƒCƒY" + IDS_SHV_COLUMN7 "‹ó‚Ť—e—Ę" + IDS_SHV_COLUMN8 "ěŹŽŇ" + IDS_SHV_COLUMN9 "ƒRƒƒ“ƒg" + IDS_SHV_COLUMN10 "Š—LŽŇ" + IDS_SHV_COLUMN11 "ƒOƒ‹[ƒv" + IDS_SHV_COLUMN12 "ƒtƒ@ƒCƒ‹–ź" + IDS_SHV_COLUMN13 "ƒJƒeƒSƒŠ" + IDS_SHV_COLUMN_DELFROM "Œł‚̏ꏩ" + IDS_SHV_COLUMN_DELDATE "íœ“ú" + IDS_SHV_COLUMN_FONTTYPE "ƒtƒHƒ“ƒg‚ĚŽí—Ţ" + IDS_SHV_COLUMN_WORKGROUP "ƒ[ƒNƒOƒ‹[ƒv" + IDS_SHV_NETWORKLOCATION "ƒlƒbƒgƒ[ƒN‚̏ꏩ" + IDS_SHV_COLUMN_DOCUMENTS "ƒhƒLƒ…ƒƒ“ƒg" + IDS_SHV_COLUMN_STATUS "ó‘Ô" + IDS_SHV_COLUMN_COMMENTS "ƒRƒƒ“ƒg" + IDS_SHV_COLUMN_LOCATION "ęŠ" + IDS_SHV_COLUMN_MODEL "ƒ‚ƒfƒ‹" + + /* special folders */ + IDS_DESKTOP "ƒfƒXƒNƒgƒbƒv" + IDS_MYCOMPUTER "ƒ}ƒC ƒRƒ“ƒsƒ…[ƒ^" + IDS_RECYCLEBIN_FOLDER_NAME "‚˛‚Ý” " + IDS_CONTROLPANEL "ƒRƒ“ƒgƒ[ƒ‹ ƒpƒlƒ‹" + IDS_ADMINISTRATIVETOOLS "ŠÇ—ƒc[ƒ‹" + + /* context menus */ + IDS_VIEW_LARGE "‘傍‚˘ƒAƒCƒRƒ“(&G)" + IDS_VIEW_SMALL "Ź‚ł‚˘ƒAƒCƒRƒ“(&M)" + IDS_VIEW_LIST "ˆę——(&L)" + IDS_VIEW_DETAILS "Ú×(&D)" + IDS_SELECT "‘I‘đ" + IDS_OPEN "ŠJ‚­" + IDS_CREATELINK "ƒVƒ‡[ƒgƒJƒbƒg‚̍쐬(&L)" + IDS_COPY "ƒRƒs[(&C)" + IDS_DELETE "íœ" + IDS_PROPERTIES "ƒvƒƒpƒeƒB" + IDS_CUT "Ř‚čŽć‚č(&U)" + IDS_RESTORE "Œł‚É–ß‚ˇ" + IDS_FORMATDRIVE "ƒtƒH[ƒ}ƒbƒg..." + IDS_RENAME "–ź‘O‚Ě•ĎX" + IDS_INSERT "‘}“ü" + + IDS_CREATEFOLDER_DENIED "V‚ľ‚˘ƒtƒHƒ‹ƒ_‚đěŹ‚Ĺ‚Ť‚Ü‚š‚ń‚Ĺ‚ľ‚˝: ƒAƒNƒZƒXŒ ‚Ş‚ ‚č‚Ü‚š‚ńB" + IDS_CREATEFOLDER_CAPTION "V‚ľ‚˘ƒtƒHƒ‹ƒ_‚̍쐬’†‚ɃGƒ‰[‚Ş”­ś‚ľ‚Ü‚ľ‚˝" + IDS_DELETEITEM_CAPTION "ƒtƒ@ƒCƒ‹íœ‚ĚŠm”F" + IDS_DELETEFOLDER_CAPTION "ƒtƒHƒ‹ƒ_íœ‚ĚŠm”F" + IDS_DELETEITEM_TEXT "'%1' ‚đíœ‚ľ‚Ä‚ŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?" + IDS_DELETEMULTIPLE_TEXT "‚ą‚ę‚ç %1 ŒÂ‚̍€–Ú‚đíœ‚ľ‚Ä‚ŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?" + IDS_DELETESELECTED_TEXT "‘I‘đ‚ł‚ę‚˝€–Ú‚đíœ‚ľ‚Ä‚ŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?" + IDS_TRASHITEM_TEXT "'%1' ‚đ‚˛‚Ý” ‚É‘—‚Á‚Ä‚ŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?" + IDS_TRASHFOLDER_TEXT "'%1'‚Ć‚ť‚ę‚Ɋ܂܂ę‚é‚ŕ‚Ě‚ˇ‚×‚Ä‚đ‚˛‚Ý” ‚É‘—‚Á‚Ä‚ŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?" + IDS_TRASHMULTIPLE_TEXT "%1 ŒÂ‚̍€–Ú‚đ‚˛‚Ý” ‚É‘—‚Á‚Ä‚ŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?" + IDS_CANTTRASH_TEXT "€–Ú '%1' ‚Í‚˛‚Ý” ‚É‘—‚ę‚Ü‚š‚ńB ‘ă‚í‚č‚ɍ폜‚ľ‚Ä‚ŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?" + IDS_OVERWRITEFILE_TEXT "‚ą‚ĚƒtƒHƒ‹ƒ_‚ɂ͊ů‚Ƀtƒ@ƒCƒ‹'%1'‚ފ܂܂ę‚Ä‚˘‚Ü‚ˇB\n\n’u‚ŤŠˇ‚ڂĂŕ‚ć‚낾‚˘‚Ĺ‚ˇ‚Š?" + IDS_OVERWRITEFILE_CAPTION "ƒtƒ@ƒCƒ‹ă‘‚Ť‚ĚŠm”F" + IDS_OVERWRITEFOLDER_TEXT "‚ą‚ĚƒtƒHƒ‹ƒ_‚ɂ͊ů‚ɃtƒHƒ‹ƒ_'%1'‚ފ܂܂ę‚Ä‚˘‚Ü‚ˇB\n\n"\ + "ƒfƒBƒŒƒNƒgƒŠƒtƒHƒ‹ƒ_“ŕ‚Ěƒtƒ@ƒCƒ‹–ź‚Ş‘I‘đ‚ł‚ę‚˝ƒtƒHƒ‹ƒ_“ŕ‚Ěƒtƒ@ƒCƒ‹–ź\n"\ + "‚Ó݂śŽž‚Í’u‚ŤŠˇ‚Ś‚ç‚ę‚Ü‚ˇB‚ť‚ę‚Ĺ‚ŕAƒtƒHƒ‹ƒ_‚đˆÚ“ނ܂˝‚Í\n"\ + "ƒRƒs[‚ľ‚Ü‚ˇ‚Š?" + + /* message box strings */ + IDS_RESTART_TITLE "Ä‹N“Ž" + IDS_RESTART_PROMPT "ƒVƒXƒeƒ€‚đÄ‹N“Ž‚ľ‚Ü‚ˇ‚Š?" + IDS_SHUTDOWN_TITLE "ƒVƒƒƒbƒgƒ_ƒEƒ“" + IDS_SHUTDOWN_PROMPT "ƒVƒƒƒbƒgƒ_ƒEƒ“‚ľ‚Ü‚ˇ‚Š?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "ƒXƒ^[ƒg ƒƒjƒ…[\\ƒvƒƒOƒ‰ƒ€" + IDS_PERSONAL "My Documents" + IDS_FAVORITES "Favorites" + IDS_STARTUP "ƒXƒ^[ƒg ƒƒjƒ…[\\ƒvƒƒOƒ‰ƒ€\\ƒXƒ^[ƒgƒAƒbƒv" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "ƒXƒ^[ƒg ƒƒjƒ…[" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "ƒfƒXƒNƒgƒbƒv" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "ƒXƒ^[ƒg ƒƒjƒ…[\\ƒvƒƒOƒ‰ƒ€\\ŠÇ—ƒc[ƒ‹" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "ƒ}ƒC ƒlƒbƒgƒ[ƒN" + + IDS_NEWFOLDER "V‚ľ‚˘ƒtƒHƒ‹ƒ_" + + IDS_DRIVE_FIXED "ƒ[ƒJƒ‹ ƒfƒBƒXƒN" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "ƒlƒbƒgƒ[ƒN ƒfƒBƒXƒN" + + IDS_OPEN_WITH "ƒvƒƒOƒ‰ƒ€‚Š‚çŠJ‚­" + IDS_OPEN_WITH_CHOOSE "ƒvƒƒOƒ‰ƒ€‚Ě‘I‘đ..." + + IDS_SHELL_ABOUT_AUTHORS "§ěŽŇ(&A)" + IDS_SHELL_ABOUT_BACK "< –ß‚é(&B)" + FCIDM_SHVIEW_NEW "V‹KěŹ" + FCIDM_SHVIEW_NEWFOLDER "ƒtƒHƒ‹ƒ_(&F)" + FCIDM_SHVIEW_NEWLINK "ƒVƒ‡[ƒgƒJƒbƒg(&L)" + IDS_FOLDER_OPTIONS "ƒtƒHƒ‹ƒ_ ƒIƒvƒVƒ‡ƒ“" + IDS_RECYCLEBIN_LOCATION "‚˛‚Ý” ‚̏ꏩ" + IDS_RECYCLEBIN_DISKSPACE "—˜—p‚Ĺ‚Ť‚é—Ěˆć" + IDS_EMPTY_BITBUCKET "‚˛‚Ý” ‚đ‹ó‚É‚ˇ‚é" + IDS_PICK_ICON_TITLE "ƒAƒCƒRƒ“‚Ě‘I‘đ" + IDS_PICK_ICON_FILTER "ƒAƒCƒRƒ“ƒtƒ@ƒCƒ‹(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "ŽŔs‰Â”\\ ƒtƒ@ƒCƒ‹\0*.exe\0" + IDS_DIRECTORY "ƒtƒHƒ‹ƒ_" + IDS_VIRTUAL_DRIVER "‰ź‘z ƒfƒoƒCƒX ƒhƒ‰ƒCƒo" + IDS_BAT_FILE "ReactOS ƒoƒbƒ` ƒtƒ@ƒCƒ‹" + IDS_CMD_FILE "ReactOS ƒRƒ}ƒ“ƒh ƒXƒNƒŠƒvƒg" + IDS_COM_FILE "Dos ƒAƒvƒŠƒP[ƒVƒ‡ƒ“" + IDS_CPL_FILE "ƒRƒ“ƒgƒ[ƒ‹ ƒpƒlƒ‹‚̍€–Ú" + IDS_CUR_FILE "ƒJ[ƒ\\ƒ‹" + IDS_DLL_FILE "ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ Šg’Ł" + IDS_DRV_FILE "ƒfƒoƒCƒX ƒhƒ‰ƒCƒo" + IDS_EXE_FILE "ƒAƒvƒŠƒP[ƒVƒ‡ƒ“" + IDS_FON_FILE "ƒtƒHƒ“ƒg ƒtƒ@ƒCƒ‹" + IDS_TTF_FILE "TrueType ƒtƒHƒ“ƒg ƒtƒ@ƒCƒ‹" + IDS_HLP_FILE "ƒwƒ‹ƒv ƒtƒ@ƒCƒ‹" + IDS_INI_FILE "\\ŹÝ’č" + IDS_LNK_FILE "ƒVƒ‡[ƒgƒJƒbƒg" + IDS_SYS_FILE "ƒVƒXƒeƒ€ ƒtƒ@ƒCƒ‹" + + IDS_OPEN_VERB "ŠJ‚­" + IDS_RUNAS_VERB "•Ę‚Ěƒ†[ƒU[‚Ć‚ľ‚ÄŽŔs " + IDS_EDIT_VERB "•ҏW" + IDS_FIND_VERB "ŒŸő" + IDS_PRINT_VERB "ˆóü" + IDS_PLAY_VERB "Äś" + IDS_PREVIEW_VERB "ƒvƒŒƒrƒ…[" + + IDS_FILE_FOLDER "%u ŒÂ‚Ěƒtƒ@ƒCƒ‹A %u ŒÂ‚ĚƒtƒHƒ‹ƒ_" + IDS_PRINTERS "ƒvƒŠƒ“ƒ^" + IDS_FONTS "ƒtƒHƒ“ƒg" + IDS_INSTALLNEWFONT "V‚ľ‚˘ƒtƒHƒ“ƒg‚ĚƒCƒ“ƒXƒg[ƒ‹..." + + IDS_DEFAULT_CLUSTER_SIZE "ƒfƒtƒHƒ‹ƒg ƒAƒƒP[ƒVƒ‡ƒ“ ƒTƒCƒY" + IDS_COPY_OF "ƒRƒs[ `" + +END diff --git a/reactos/dll/win32/shell32_new/lang/ko-KR.rc b/reactos/dll/win32/shell32_new/lang/ko-KR.rc new file mode 100644 index 00000000000..98981f74213 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/ko-KR.rc @@ -0,0 +1,756 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&View" + BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Arrange &Icons" + BEGIN + MENUITEM "By &Name", 0x30 /* column 0 */ + MENUITEM "By &Type", 0x32 /* column 2 */ + MENUITEM "By &Size", 0x31 /* ... */ + MENUITEM "By &Date", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Auto Arrange", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Icons", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Refresh", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Paste", FCIDM_SHVIEW_INSERT + MENUITEM "Paste as Link", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Open", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ut", FCIDM_SHVIEW_CUT + MENUITEM "&Copy", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Create &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Delete", FCIDM_SHVIEW_DELETE + MENUITEM "&Rename", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "žŢœĂÁö" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "żš(&Y)", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "žđľÎ żš(&A)", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON " ŸĆŽĎżŔ(&N)", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ĂëŒŇ(&C)", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "%sżĄ °üÇĎżŠ" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "ČŽŔÎ", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was brought to you by:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18 + LTEXT "&Open:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&Browse...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "File" + IDS_SHV_COLUMN2 "Size" + IDS_SHV_COLUMN3 "Type" + IDS_SHV_COLUMN4 "Modified" + IDS_SHV_COLUMN5 "Attributes" + IDS_SHV_COLUMN6 "Size" + IDS_SHV_COLUMN7 "Size available" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Comments" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "My Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Lar&ge Icons" + IDS_VIEW_SMALL "S&mall Icons" + IDS_VIEW_LIST "&List" + IDS_VIEW_DETAILS "&Details" + IDS_SELECT "Select" + IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Restart" + IDS_RESTART_PROMPT "Do you want to restart the system?" + IDS_SHUTDOWN_TITLE "Shutdown" + IDS_SHUTDOWN_PROMPT "Do you want to shutdown?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "My Documents" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "New" + FCIDM_SHVIEW_NEWFOLDER "New &Folder" + FCIDM_SHVIEW_NEWLINK "New &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/nl-NL.rc b/reactos/dll/win32/shell32_new/lang/nl-NL.rc new file mode 100644 index 00000000000..1689e2a3bae --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/nl-NL.rc @@ -0,0 +1,756 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&View" + BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Arrange &Icons" + BEGIN + MENUITEM "By &Name", 0x30 /* column 0 */ + MENUITEM "By &Type", 0x32 /* column 2 */ + MENUITEM "By &Size", 0x31 /* ... */ + MENUITEM "By &Date", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Auto Arrange", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Icons", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Refresh", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Paste", FCIDM_SHVIEW_INSERT + MENUITEM "Paste as Link", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Open", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ut", FCIDM_SHVIEW_CUT + MENUITEM "&Copy", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Create &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Delete", FCIDM_SHVIEW_DELETE + MENUITEM "&Rename", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Info %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS is geschreven door:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Geef de naam van een programma, map, document, of Internet-adres op. Wine zal het vervolgens openen.", 12289, 36, 11, 182, 18 + LTEXT "&Openen:", 12305, 7, 39, 28, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Annuleren", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Bladeren...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "File" + IDS_SHV_COLUMN2 "Size" + IDS_SHV_COLUMN3 "Type" + IDS_SHV_COLUMN4 "Modified" + IDS_SHV_COLUMN5 "Attributes" + IDS_SHV_COLUMN6 "Size" + IDS_SHV_COLUMN7 "Size available" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Comments" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "My Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Lar&ge Icons" + IDS_VIEW_SMALL "S&mall Icons" + IDS_VIEW_LIST "&List" + IDS_VIEW_DETAILS "&Details" + IDS_SELECT "Select" + IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Restart" + IDS_RESTART_PROMPT "Do you want to restart the system?" + IDS_SHUTDOWN_TITLE "Shutdown" + IDS_SHUTDOWN_PROMPT "Do you want to shutdown?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "My Documents" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "New" + FCIDM_SHVIEW_NEWFOLDER "New &Folder" + FCIDM_SHVIEW_NEWLINK "New &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "Er is geen Windows-programma geconfigureerd om dit soort bestanden te openen." +END diff --git a/reactos/dll/win32/shell32_new/lang/no-NO.rc b/reactos/dll/win32/shell32_new/lang/no-NO.rc new file mode 100644 index 00000000000..f02aa64fecd --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/no-NO.rc @@ -0,0 +1,759 @@ +/* + * Copyright 2005-2007 Alexander N. Sřrnes + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Store ikoner", FCIDM_SHVIEW_BIGICON + MENUITEM "&Smĺ ikoner", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Vis" + BEGIN + MENUITEM "&Store ikoner", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mĺ ikoner", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Ordne &ikoner" + BEGIN + MENUITEM "Etter &navn", 0x30 /* column 0 */ + MENUITEM "Etter &type", 0x32 /* column 2 */ + MENUITEM "Etter &střrrelse", 0x31 /* ... */ + MENUITEM "Etter &dato", 0x33 + MENUITEM SEPARATOR + MENUITEM "Ordne &automatisk", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Still opp ikoner", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Oppdater", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Lim inn", FCIDM_SHVIEW_INSERT + MENUITEM "Lim inn som snarvei", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Egenskaper", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Utforsk", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Ĺpne", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "Klipp &ut", FCIDM_SHVIEW_CUT + MENUITEM "&Kopier", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "&Opprett snarvei", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Slett", FCIDM_SHVIEW_DELETE + MENUITEM "&Gi nytt navn", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "Egenska&per", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Bla etter mappe" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Avbryt", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Bla etter mappe" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Mappe:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Lag en ny mappe", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Meldings" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ja til &alt", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Nei", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Avbry&t", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Om %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Versjon " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Denne ReactOS versjonen er registert til:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Fysisk minne tilgjengelig:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS ble laget av:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Kjřr" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Skriv inn navnet pĺ programmet, mappen, dokumentet etter Internett-ressursen du řnsker ĺ ĺpne.", 12289, 36, 11, 182, 18 + LTEXT "&Ĺpne:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Bla gjennom .", 12288, 170, 63, 54, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Snarvei" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE + LTEXT "Plasseringstype:", 14004, 10, 30, 50, 10 + LTEXT "", 14005, 70, 30, 150, 10 + LTEXT "Plasseringssted:", 14006, 10, 40, 70, 10 + LTEXT "", 14007, 70, 40, 150, 10 + LTEXT "Plassering:", 14008, 10, 55, 45, 10 + EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT | ES_AUTOHSCROLL + LTEXT "&Start i:",14010, 10, 65, 57, 10 + EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT | ES_AUTOHSCROLL + LTEXT "Snarvei &nřkkel:", 14014, 10, 80, 57, 10 + EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT + LTEXT "Kjřr:", 14016, 10, 90, 57, 10 + EDITTEXT 14017, 70, 90, 150, 10, ES_AUTOHSCROLL + LTEXT "K&ommentar:", 14018, 10, 100, 57, 10 + EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT | ES_AUTOHSCROLL + PUSHBUTTON "&Finn mĺl...", 14020, 10, 115, 63, 14, ES_LEFT + PUSHBUTTON "&Endre ikon...", 14021, 83, 115, 63, 14, ES_LEFT + PUSHBUTTON "A&vansert...", 14022, 156, 115, 63, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Avanserte egenskaper" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Velg avansert egenskaper som du vil for denne snarveien.", -1, 5, 30, 210, 10 + CHECKBOX "Kjřr som administrator", 14000, 25, 50, 150, 10 + LTEXT "Med dette valget kan du kjřre denne snarveien med som en administrator, mens du beskytter din datamaskin og data fra uautorisert program aktivitet.", -1, 50, 60, 175, 40 + CHECKBOX "Kjřr i seperat minneplass", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", IDOK, 25, 120, 50, 15, WS_VISIBLE + PUSHBUTTON "Avbryt", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Filtype:", 14004, 8, 35, 50, 10 + LTEXT "Mappe", 14005, 68, 35, 160, 10 + LTEXT "Lokalisjon:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Střrrelse:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Inneholder:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Opprettet:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Bare-lesbar", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Skjult", 14022, 126, 150, 50, 10 +END + + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Filtype:", 14004, 8, 35, 50, 10 + LTEXT "Fil", 14005, 68, 35, 160, 10 + LTEXT "Ĺpne med:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Lokalisjon:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Střrrelse:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Opprettet:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modifisert:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Ĺpnet:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Rettigheter:", 14020, 8, 189, 45, 10 + CHECKBOX "&Bare-lesbar", 14021, 58, 189, 67, 10 + CHECKBOX "&Skjult", 14022, 126, 189, 50, 10 + CHECKBOX "&Arkiv", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Versjon" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Filversjon: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Beskrivelse: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Enerett: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Annet versjon informasjon: ", 14006, 6, 70, 222, 115 + LTEXT "Enhetsnavn: ", 14007, 13, 82, 50, 10 + LTEXT "Verdi: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Filsystem:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Brukt plass:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Ledig plass:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Kapasitet:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Stasjon %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Diskoppryding", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Komprimer denne stasjonen for ĺ frigjřre diskplass", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Indekser denne stasjonen for raskere sřking", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Verktřy" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Feilsřking", -1, 5, 5, 230, 60 + LTEXT "Dette alternativet vil kontrollere volumet for \nfeil.", -1, 40, 25, 160, 20 + PUSHBUTTON "Kontroller nĺ...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentering", -1, 5, 65, 230, 60 + LTEXT "Dette alternativet defragmenterer filene pĺ volumet.", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragmenter nĺ...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Sikkerhetskopi", -1, 5, 130, 230, 60 + LTEXT "Dette alternativet tar sikkerhetskopi av filene pĺ volumet.", -1, 40, 150, 160, 20 + PUSHBUTTON "Ta sikkerhetskopi...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Maskinvare" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Kjřr som" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Hvilken brukerkonto vil du bruke for ĺ kjřre dette programmet?", -1, 10, 20, 220, 20 + CHECKBOX "Fřlgende bruker %s", 14000, 10, 45, 150, 10 + LTEXT "Beskytt min datamaskin og data fra uautorisert program aktivitet", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Dette valget kan forebygge data virus fra ĺ uskadeliggjřre din datamaskin eller personlige data, men utvelging det skulle kanskje forĺrsake program til funksjon formatfeil.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Fřlgende bruker:", 14002, 10, 100, 90, 10 + LTEXT "Brukernavn:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Passord:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Avbryt", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Papirkurv egenskaper" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Innstilling for valgte sted", -1, 10, 72, 220, 70 + RADIOBUTTON "&Tilpasse střrrelse:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aksimalt střrrelse (MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Ikke flytt filer til &Papirkurven. Slett filene umiddelbart nĺr de slettes.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Vis slettet bekreftelse dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Ĺpne med" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Velg programmet du vil bruke for ĺ ĺpne denne filen:", -1, 44, 12, 211, 10 + LTEXT "Fil: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Program", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Alltid bruk valgte program for ĺ ĺpne denne filtypen", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Utforsk...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Avbryt", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Oppgaver", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Vis felles oppgaver i &mapper", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Bruk ReactOS klass&isk mapper", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Utforsk mapper", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Ĺpne hver mapper i sa&mme vindu", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Ĺpne hver mapper i sitt egen &vindu", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Klikk enheter som fřlgende", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Enkelt-klikk for ĺ ĺpne en enhet (peker for ĺ velge)", 14007, 40, 120, 190, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Understrek ikon titteler konsekvent med min &utforsker", 14008, 50, 132, 190, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Understrek ikon titteler bare mens jeg &peker pĺ dem", 14009, 50, 144, 190, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Dobbelt klikk for ĺ ĺpne enheten (Enkelt-klikk for ĺ velge)", 14010, 40, 156, 194, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Bruk standard", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Vis" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Mappe visning", -1, 7, 10, 249, 60 +//ICON +LTEXT "Du kan bruke visning (slik som detalj eller Tiles) som\ndu bruker for denne mappen til alle mappene.", -1, 60, 20, 180, 20 +PUSHBUTTON "Bruk til a&lle mappene", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Gjenopprett alle mapper", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Avanserte innstillinger:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Gjenopprett &standard", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Filtyper" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registerert fil&typer:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Ny", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Slett", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Detailjer for '%s' utvidelser", 14003, 7, 130, 249, 70 +LTEXT "Ĺpne med:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Endre...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Filer med utvidelser '%s' er av typen '%s'. For ĺ\nendre innstillingene som er av filen '%s', trykk pĺ\navansert.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Av&ansert", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Bekrefte fil erstattning" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Ja", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Ja for &Alt", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Nei", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Denne mappen inneholder allerede en fil som heter '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Denne mappen inneholder allerede en bare-lesbar fil som heter '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Denne mappen inneholder allerede en systemfil som heter '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Vil du overskrive eksisterende fil", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(ukjent dato og střrrelse)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "med denne ene?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(ukjent dato og střrrelse)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Logg av ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Er du sikker pĺ at du vil logge av?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Logg av", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble fra ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Er du sikker pĺ du vil koble fra?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Koble fra", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autostart" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Velg en innhold type, ogsĺ velg en handling for ReactOS for ĺ gjennomfřre automatisk nĺr denne type er brukt til denne enheten:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Handlinger", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Velg en handling for ĺ &utfřre:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Velg denne handlingen hver gang jeg &utfřrer denne handlingen", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Gjenopprett standard", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mikset innhold" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Denne disken eller enheten inneholder mere enn en type med innhold.", 1001, 32, 7, 191, 20 + LTEXT "Hva vil du at ReactOS skal gjřre?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mikset innhold" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS kan gjřre den samme handlingen hver gang du setter inn en disk eller kobler til en enhet med denne filtypen:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Hva vil du at ReactOS skal gjřre?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Gjřr alltid den valgte handlingen.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autostart" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS kan gjřre den samme handlingen hver gang du kobler til en enhet.", 1001, 32, 7, 190, 22 + LTEXT "&Hva vil du at ReactOS skal gjřre?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Alltid utfřr den valgte handlingen", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Slĺ av ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Hva vil du at datamaskinen skal gjřre?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Behandle din sesjon, din datamaskin bruker lite strřm nĺr data er i minnet. Datamaskinen vil vĺkne hvis du trykker pĺ en tast eller beveger pĺ musen.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Hjelp", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Lukk", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ka&pasitet:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Filsystem", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Střrrelse pĺ tildelingsenheten", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volum&navn", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Formatterings &valg", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Rask formattering", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Utfřr komprimering", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Kontroller disken" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Alternativer for diskkontroll", -1, 7, 6, 179, 50 + PUSHBUTTON "Avbryt", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Reparer feil i filsysten automatisk", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Sřk etter og forsřk ĺ reparere skadet sektorer", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Endre ikon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filnavn:", -1, 7, 14, 208, 10 + PUSHBUTTON "Utforsk...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Avbryt",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Fil" + IDS_SHV_COLUMN2 "Střrrelse" + IDS_SHV_COLUMN3 "Type" + IDS_SHV_COLUMN4 "Endret" + IDS_SHV_COLUMN5 "Egenskaper" + IDS_SHV_COLUMN6 "Střrrelse" + IDS_SHV_COLUMN7 "Ledig plass" + IDS_SHV_COLUMN8 "Navn" + IDS_SHV_COLUMN9 "Kommentarer" + IDS_SHV_COLUMN10 "Eier" + IDS_SHV_COLUMN11 "Gruppe" + IDS_SHV_COLUMN12 "Filnavn" + IDS_SHV_COLUMN13 "Kategori" + IDS_SHV_COLUMN_DELFROM "Opprinnelig plassering" + IDS_SHV_COLUMN_DELDATE "Dato slettet" + IDS_SHV_COLUMN_FONTTYPE "Skrifttype" + IDS_SHV_COLUMN_WORKGROUP "Arbeidsgruppe" + IDS_SHV_NETWORKLOCATION "Nettverksplassering" + IDS_SHV_COLUMN_DOCUMENTS "Dokumenter" + + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Kommentarer" + IDS_SHV_COLUMN_LOCATION "Plassering" + IDS_SHV_COLUMN_MODEL "Modell" + + /* special folders */ + IDS_DESKTOP "Skrivebord" + IDS_MYCOMPUTER "Min datamaskin" + IDS_RECYCLEBIN_FOLDER_NAME "Papirkurv" + IDS_CONTROLPANEL "Kontrollpanel" + IDS_ADMINISTRATIVETOOLS "Administrative verktřy" + + /* context menus */ + IDS_VIEW_LARGE "&Store ikoner" + IDS_VIEW_SMALL "S&mĺ ikoner" + IDS_VIEW_LIST "&Liste" + IDS_VIEW_DETAILS "&Detaljer" + IDS_SELECT "Velg" + IDS_OPEN "Ĺpne" + IDS_CREATELINK "&Opprett snarvei" + IDS_COPY "Kopier" + IDS_DELETE "Slett" + IDS_PROPERTIES "Egenskaper" + IDS_CUT "Klipp ut" + IDS_RESTORE "Gjenopprett" + IDS_FORMATDRIVE "Formatering..." + IDS_RENAME "Endre navn" + IDS_INSERT "Sett inn" + + IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet." + IDS_CREATEFOLDER_CAPTION "Klarte ikke opprette ny mappe" + IDS_DELETEITEM_CAPTION "Bekreft filsletting" + IDS_DELETEFOLDER_CAPTION "Bekreft sletting av mappe" + IDS_DELETEITEM_TEXT "Virkelig slette Ť%1ť?" + IDS_DELETEMULTIPLE_TEXT "Virkelig slette disse %1 elementene?" + IDS_DELETESELECTED_TEXT "Virkelig slette valgte element(er)??" + IDS_TRASHITEM_TEXT "Virkelig legge Ť%1ť i papirkurven?" + IDS_TRASHFOLDER_TEXT "Virkelig legge Ť%1ť og alt innholdet i papirkurven?" + IDS_TRASHMULTIPLE_TEXT "Virkelig legge disse %1 valgte elementene i papirkurven?" + IDS_CANTTRASH_TEXT "Elementet Ť%1ť kan ikke legges i papirkurven. Vil du slette det i stedet?" + IDS_OVERWRITEFILE_TEXT "Denne mapppen innholder allerede en fil som heter '%1'.\n\nVil du overskrive denne?" + IDS_OVERWRITEFILE_CAPTION "Bekreft overskriving av fil" + IDS_OVERWRITEFOLDER_TEXT "Denne mappen inneholder allerede en mappe som heter '%1'.\n\n"\ + "Hvis filene i destinasjon mappen har samme navn filer i \n"\ + "valgte mapper her vil bli overskrevet. Řnsker du fortsatt ĺ flytte eller kopiere \n"\ + "denne mappen?" + + /* message box strings */ + IDS_RESTART_TITLE "Starte pĺ nytt" + IDS_RESTART_PROMPT "Vil du starte datamaskinen pĺ nytt?" + IDS_SHUTDOWN_TITLE "Avslutt" + IDS_SHUTDOWN_PROMPT "Vil du slĺ av datamaskinen?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start-meny\\Programmer" + IDS_PERSONAL "Mine dokumenter" + IDS_FAVORITES "Favoritter" + IDS_STARTUP "Start-meny\\Programmer\\Oppstart" + IDS_RECENT "Siste" + IDS_SENDTO "Sendtil" + IDS_STARTMENU "Start-meny" + IDS_MYMUSIC "Min musikk" + IDS_MYVIDEO "Mine videoklipp" + IDS_DESKTOPDIRECTORY "Skrivebord" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Maler" + IDS_APPDATA "Programdata" + IDS_PRINTHOOD "Skrivere" + IDS_LOCAL_APPDATA "Lokale innstillinger\\Programdata" + IDS_INTERNET_CACHE "Lokale innstillinger\\Midligtidig internett filer" + IDS_COOKIES "Informasjonskapsel" + IDS_HISTORY "Lokale innstillinger\\Logg" + IDS_PROGRAM_FILES "Programfiler" + IDS_MYPICTURES "Mine bilder" + IDS_PROGRAM_FILES_COMMON "Programfiler\\Fellesfiler" + IDS_COMMON_DOCUMENTS "Dokumenter" + IDS_ADMINTOOLS "Start-meny\\Programmer\\Administrative verktřy" + IDS_COMMON_MUSIC "Dokumenter\\Min musikk" + IDS_COMMON_PICTURES "Dokumenter\\Mine bilder" + IDS_COMMON_VIDEO "Dokumenter\\Mine videoklipp" + IDS_CDBURN_AREA "Lokale innstillinger\\Programdata\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Mine nettverkssteder" + + IDS_NEWFOLDER "Ny mappe" + + IDS_DRIVE_FIXED "Lokal Disk" + IDS_DRIVE_CDROM "CD stasjon" + IDS_DRIVE_NETWORK "Nettverk disk" + + IDS_OPEN_WITH "Ĺpne med" + IDS_OPEN_WITH_CHOOSE "Velg program..." + + IDS_SHELL_ABOUT_AUTHORS "&Forfatter" + IDS_SHELL_ABOUT_BACK "< &Tilbake" + FCIDM_SHVIEW_NEW "Ny" + FCIDM_SHVIEW_NEWFOLDER "Ny &mappe" + FCIDM_SHVIEW_NEWLINK "Ny &snarvei" + IDS_FOLDER_OPTIONS "Mappe valg" + IDS_RECYCLEBIN_LOCATION "Papirkurv plassering" + IDS_RECYCLEBIN_DISKSPACE "Ledig plass" + IDS_EMPTY_BITBUCKET "Třm papirkurven" + IDS_PICK_ICON_TITLE "Velg Ikon" + IDS_PICK_ICON_FILTER "Ikon Fil(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Kjřrbare filer\0*.exe\0" + IDS_DIRECTORY "Mappe" + IDS_VIRTUAL_DRIVER "Virtuell enhetdriver" + IDS_BAT_FILE "ReactOS Batch fil" + IDS_CMD_FILE "ReactOS Kommando skript" + IDS_COM_FILE "Dos applikasjon" + IDS_CPL_FILE "Kontrollpanel enhet" + IDS_CUR_FILE "Markřr" + IDS_DLL_FILE "Applikasjon utvidelse" + IDS_DRV_FILE "Enhet driver" + IDS_EXE_FILE "Applikasjon" + IDS_FON_FILE "Skrift fil" + IDS_TTF_FILE "TrueType skrift fil" + IDS_HLP_FILE "Hjelp fil" + IDS_INI_FILE "Konfigurasjon innstilling" + IDS_LNK_FILE "Snarvei" + IDS_SYS_FILE "Systemfil" + + IDS_OPEN_VERB "Ĺpne" + IDS_RUNAS_VERB "Kjřr som" + IDS_EDIT_VERB "Rediger" + IDS_FIND_VERB "Finn" + IDS_PRINT_VERB "Skriv ut" + IDS_PLAY_VERB "Spill" + IDS_PREVIEW_VERB "Forhĺndsvis" + + IDS_FILE_FOLDER "%u filer, %u mapper" + IDS_PRINTERS "Skrivere" + IDS_FONTS "Skrifttyper" + IDS_INSTALLNEWFONT "Installere nye skrifttyper..." + + IDS_DEFAULT_CLUSTER_SIZE "Standard tildelingsstřrrelse" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "Intet Windows-program er satt opp til ĺ ĺpne denne filtypen." +END diff --git a/reactos/dll/win32/shell32_new/lang/pl-PL.rc b/reactos/dll/win32/shell32_new/lang/pl-PL.rc new file mode 100644 index 00000000000..c9a4d40a48b --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/pl-PL.rc @@ -0,0 +1,763 @@ +/* + * Copyright 1998 Juergen Schmied + * Copyright 2004 Piotr Caban + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * ReactOS shell32 fork translation updated by Caemyr - + * - Olaf Siejka (Jan,Mar,Apr,Jul, Aug 2008; Apr, 2010) + * Use ReactOS forum PM or IRC to contact me + * http://www.reactos.org + * IRC: irc.freenode.net #reactos-pl; + */ + +LANGUAGE LANG_POLISH, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Duże Ikony", FCIDM_SHVIEW_BIGICON + MENUITEM "&Małe Ikony", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Szczegóły", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Widok" + BEGIN + MENUITEM "&Duże Ikony", FCIDM_SHVIEW_BIGICON + MENUITEM "&Małe Ikony", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Szczegóły", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Rozmieœć &ikony według" + BEGIN + MENUITEM "&Nazwy", 0x30 /* column 0 */ + MENUITEM "&Typu", 0x32 /* column 2 */ + MENUITEM "&Wielkoœci", 0x31 /* ... */ + MENUITEM "&Daty", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Autorozmieszczanie", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "&Wyrównaj ikony", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "&Odœwież", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "W&klej", FCIDM_SHVIEW_INSERT + MENUITEM "Wklej s&krót", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Właœciwoœci", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Eksploruj", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Otwórz", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "&Wytnij", FCIDM_SHVIEW_CUT + MENUITEM "&Kopiuj", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Utwórz &Skrót", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Usuń", FCIDM_SHVIEW_DELETE + MENUITEM "&Zmień nazwę", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "Wł&aœciwoœci", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Wybierz folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Anuluj", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Wybierz katalog" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Katalog:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Utwórz katalog", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Anuluj", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Komunikat" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Tak", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Tak na &wszystkie", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Anuluj", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "O %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Wersja " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Ta kopia ReactOS jest zarejestrowna na:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Zainstalowana pamięć fizyczna:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS powstał dzięki:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Wpisz nazwę programu, katalogu, dokumentu, a ReactOS otworzy go dla ciebie.", 12289, 36, 11, 182, 18 + LTEXT "&Otwórz:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Anuluj", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Przeglšdaj...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Skrót" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Typ docelowy:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Lokalizacja:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Element docelowy:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Uruchom w:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Skrót &klawiszowy:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Uruchom:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "K&omentarz:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&ZnajdŸ element docelowy", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "Zmień &ikonę", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "Z&aawansowane", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Właœciwoœci zaawansowane" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Wybierz właœciwoœci zaawansowane dla tego skrótu.", -1, 5, 30, 210, 10 + CHECKBOX "Uruchom z innym Użytkownikiem", 14000, 25, 50, 150, 10 + LTEXT "Ta opcja pozwoli ci na uruchomienie skrótu jako inny użytkownik, do ochrony twoich danych przed niepowołanym dostępem.", -1, 50, 60, 175, 40 + CHECKBOX "Uruchom w osobnym przedziale pamięci", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Przerwij", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ogólne" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Rozszerzenie:", 14004, 8, 35, 50, 10 + LTEXT "Katalog", 14005, 68, 35, 160, 10 + LTEXT "Lokalizacja:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Rozmiar:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Zawiera:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Utworzony:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Tylko-do-odczytu", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Ukryty", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ogólne" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Typ pliku:", 14004, 8, 35, 50, 10 + LTEXT "Plik", 14005, 68, 35, 160, 10 + LTEXT "Otwierany za pomocš:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Lokalizacja:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Rozmiar:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Utworzony:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Zmodyfikowany:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Ostatnio użyty:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Atrybuty:", 14020, 8, 189, 45, 10 + CHECKBOX "&Tylko do odczytu", 14021, 58, 189, 67, 10 + CHECKBOX "&Ukryty", 14022, 126, 189, 50, 10 + CHECKBOX "&Archiwum", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Wersja" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Wersja pliku: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Opis: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Prawa autorskie: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Pozostałe informacje o wersji: ", 14006, 6, 70, 222, 115 + LTEXT "Nazwa: ", 14007, 13, 82, 50, 10 + LTEXT "Wartoœć: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ogólne" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Typ:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "System plików:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Zajęte miejsce:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Wolne miejsce:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Pojemnoœć:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Napęd %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Czyszczenie dysku", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Kompresja danych na dysku", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Zezwól Usłudze Indeksowania na zaindeksowanie tego dysku (szybkie przeszukiwanie plików)", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Narzędzia" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Sprawdzanie błędów", -1, 5, 5, 230, 60 + LTEXT "Ta opcja sprawdzi wolumin w poszukiwaniu błędów.", -1, 40, 25, 160, 20 + PUSHBUTTON "SprawdŸ", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentacja", -1, 5, 65, 230, 60 + LTEXT "Ta opcja zdefragmentuje pliki na woluminie", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragmentuj", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Kopia zapasowa", -1, 5, 130, 230, 60 + LTEXT "Ta opcja wykona kopię zapasowš plików na woluminie.", -1, 40, 150, 160, 20 + PUSHBUTTON "Stwórz kopię", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Sprzęt" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Uruchom jako" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Które konto użytkownika chcesz użyć do uruchomienia tego programu?", -1, 10, 20, 220, 20 + CHECKBOX "Bieżšcy użytkownik %s", 14000, 10, 45, 150, 10 + LTEXT "Zabezpiecz mój komputer i dane przed nieautoryzowanym działaniem programów", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Ta opcja może zabezpieczyć twój komputer lub dane na nim przed szkodliwymi programami, ale użycie jej może spowodować nieprawidłowe działanie programów.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Następujšcy użytkownik:", 14002, 10, 100, 90, 10 + LTEXT "Nazwa użytkownika:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Hasło:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Anuluj", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Właœciwoœci Kosza" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Ustawienia wybranej lokalizacji", -1, 10, 72, 220, 70 + RADIOBUTTON "&Własny rozmiar:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "&Maksymalny rozmiar(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Nie przenoœ plików do &Kosza, tylko od razu usuwaj.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Wyœwietl dialog z potwierdzeniem usuwania", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Otwórz za pomocš" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Wybierz program, którego chcesz użyć do otwarcia tego pliku:", -1, 44, 12, 211, 10 + LTEXT "Plik: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programy", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Zawsze używaj danego programu do otwierania tego typu plików", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Przeglšdaj", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Anuluj", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Ogólne" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Zadania", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Pokaż podstawowe zadania w &katalogach", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Użyj klasycznych katalogów &ReactOS", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Przeglšdaj katalogi", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Otwórz każdy katalog w tym &samym oknie", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Otwórz każdy katalog w &osobnym oknie", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Działanie przycisków myszki", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Pojedyncze kliknięcie by otworzyć cel (najechanie by wskazać)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Podkreœ&laj tytuły ikon tak jak w przeglšdarce", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Podkreœlaj &tytuły ikon tylko po najechaniu na nie kursorem", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Po&dwójne kliknięcie by otworzyć (pojedyncze kliknięcie by wskazać)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Ustawienia domyœlne", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Podglšd" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Podglšd folderów", -1, 7, 10, 249, 60 +//ICON +LTEXT "Możesz użyć podglšdów (takich jak Detale lub Tytuły) które\nsš ustawione dla tego katalogu, dla pozostałych.", -1, 60, 20, 180, 20 +PUSHBUTTON "Zastosuj do w&szystkich Katalogów", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "Z&resetuj ustawienia", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Zaawansowane:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Odtwórz &domyœlne", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Typy plików" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Zarejestruj &typy plików:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Nowy", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Skasuj", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Szczegóły dla rozszerzenia '%s'", 14003, 7, 130, 249, 70 +LTEXT "Otwiera z:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Nazwa Aplikacji", 14005, 100, 140, 40, 10 +PUSHBUTTON "Z&mień", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Pliki z rozszerzeniem '%s' należš do typu: '%s'. Aby\nzmienić ustawienia dotyczšce wszystkich plików '%s', wybierz\nZaawansowane.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Zaawa&nsowane", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "PotwierdŸ zastšpienie pliku" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Tak", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Tak na &Wszystkie", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Nie", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Anuluj", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ten katalog już zawiera plik o nazwie '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Ten katalog już zawiera plik tylko do odczytu, o nazwie '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Ten katalog już zawiera plik systemowy o nazwie '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Czy chciałbyœ zastšpić istniejšcy plik?", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(data i rozmiar nieznane)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "nowym plikiem?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(data i rozmiar nieznane)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Wyloguj się z ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Czy na pewno chcesz się wylogować?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Wyloguj", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Anuluj", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Rozłšczenie z ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Czy na pewno chcesz się rozłšczyć?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Rozłšcz", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Anuluj", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoodtwarzanie" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Wybierz rodzaj danych, a następnie czynnoœć, którš ReactOS ma wykonać automagicznie, gdy ten rodzaj danych pojawia się w urzšdzeniu:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Akcje", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Wybierz akcję do &wykonania:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Zapytaj mnie każdorazowo o w&ybór akcji", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Odtwórz Domyœlne", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Dane mieszane" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Ten dysk albo urzšdzenie zawiera dane więcej niż jednego rodzaju.", 1001, 32, 7, 191, 20 + LTEXT "Co chcesz by ReactOS zrobił?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Anuluj", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Dane mieszane" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS może wykonać tš samš czynnoœć za każdym razem kiedy odczytujesz dysk albo podłšczasz urzšdzenie z tymi rodzajami plików:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Co chcesz by ReactOS zrobił?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Zawsze wykonuj wybranš czynnoœć.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoodtwarzanie" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS może wykonać tš samš czynnoœć za każdym razem kiedy podłšczasz to urzšdzenie.", 1001, 32, 7, 190, 22 + LTEXT "&Co chcesz by ReactOS zrobił?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Zawsze wykonuj wybranš czynnoœć", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Anuluj", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Zamknij ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Co chcesz by komputer zrobił?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Zachowuje sesje, utrzymujšc komputer w ruchu na małym stopniu zasilania, z danymi wcišż w pamięci. Komputer wróci do normalnego trybu pracy przy poruszeniu myszki albo naciœnięciu klawisza.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Anuluj", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Pomoc", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Formatowanie" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Rozpocznij", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Zamknij", IDCANCEL, 118, 198, 60, 14 + LTEXT "&Pojemnoœć:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&System plików", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "R&ozmiar jednostki alokacji", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Etykieta woluminu", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "&Opcje", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "Szy&bkie formatowanie", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Włšcz kompresję", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Sprawdzanie dysków" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Opcje sprawdzania dysków", -1, 7, 6, 179, 50 + PUSHBUTTON "Anuluj", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatycznie naprawiaj błędy systemu plików", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Szukaj i próbuj odzyskać uszkodzone sektory", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Zmiana Ikony" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Plik:", -1, 7, 14, 208, 10 + PUSHBUTTON "Przeglšdaj...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Ikony:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Anuluj",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Plik" + IDS_SHV_COLUMN2 "Wielkoœć" + IDS_SHV_COLUMN3 "Typ" + IDS_SHV_COLUMN4 "Modyfikacja" + IDS_SHV_COLUMN5 "Atrybuty" + IDS_SHV_COLUMN6 "Wielkoœć" + IDS_SHV_COLUMN7 "Dostępna wielkoœć" + IDS_SHV_COLUMN8 "Nazwa" + IDS_SHV_COLUMN9 "Komentarz" + IDS_SHV_COLUMN10 "Właœciciel" + IDS_SHV_COLUMN11 "Grupa" + IDS_SHV_COLUMN12 "Nazwa pliku" + IDS_SHV_COLUMN13 "Kategoria" + IDS_SHV_COLUMN_DELFROM "Lokalizacja oryginalna" + IDS_SHV_COLUMN_DELDATE "Data usunięcia" + IDS_SHV_COLUMN_FONTTYPE "Czcionka" + IDS_SHV_COLUMN_WORKGROUP "Grupa Robocza" + IDS_SHV_NETWORKLOCATION "Lokalizacja Sieciowa" + IDS_SHV_COLUMN_DOCUMENTS "Dokumenty" + IDS_SHV_COLUMN_STATUS "Stan" + IDS_SHV_COLUMN_COMMENTS "Komentarze" + IDS_SHV_COLUMN_LOCATION "Lokalizacja" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Pulpit" + IDS_MYCOMPUTER "Mój komputer" + IDS_RECYCLEBIN_FOLDER_NAME "Kosz" + IDS_CONTROLPANEL "Panel Sterowania" + IDS_ADMINISTRATIVETOOLS "Narzędzia Administracyjne" + + /* context menus */ + IDS_VIEW_LARGE "&Duże Ikony" + IDS_VIEW_SMALL "&Małe Ikony" + IDS_VIEW_LIST "&Lista" + IDS_VIEW_DETAILS "&Szczegóły" + IDS_SELECT "Zaznacz" + IDS_OPEN "Otwórz" + IDS_CREATELINK "Utwórz &Skrót" + IDS_COPY "Kopiuj" + IDS_DELETE "Usuń" + IDS_PROPERTIES "Właœciwoœci" + IDS_CUT "Wytnij" + IDS_RESTORE "Przywróć" + IDS_FORMATDRIVE "Formatuj..." + IDS_RENAME "Zmień nazwę" + IDS_INSERT "Włóż" + + IDS_CREATEFOLDER_DENIED "Nie mogę utworzyć nowego katalogu: Brak dostępu." + IDS_CREATEFOLDER_CAPTION "Błšd przy tworzeniu nowego katalogu." + IDS_DELETEITEM_CAPTION "PotwierdŸ usunięcia pliku" + IDS_DELETEFOLDER_CAPTION "PotwierdŸ usunięcie katalogu" + IDS_DELETEITEM_TEXT "Czy jesteœ pewien, że chcesz usunšć '%1'?" + IDS_DELETEMULTIPLE_TEXT "Czy jesteœ pewien, że chcesz usunšć te %1 pliki?" + IDS_DELETESELECTED_TEXT "Czy jesteœ pewien, że chcesz usunšć wybrane elementy?" + IDS_TRASHITEM_TEXT "Czy jesteœ pewien, że chcesz umieœcić plik '%1' w Koszu?" + IDS_TRASHFOLDER_TEXT "Czy jesteœ pewien, że chcesz umieœcić folder '%1' i całš jego zawartoœć w koszu" + IDS_TRASHMULTIPLE_TEXT "Elementów: %1 - czy na pewno chcesz je umieœcić w Koszu?" + IDS_CANTTRASH_TEXT "Nie mogę przenieœć elementu '%1' do Kosza. Czy chcesz go zamiast tego usunšć?" + IDS_OVERWRITEFILE_TEXT "Ten folder już zawiera plik o nazwie '%1'.\n\nCzy chcesz go zastšpić?" + IDS_OVERWRITEFILE_CAPTION "PotwierdŸ zastšpienie pliku" + IDS_OVERWRITEFOLDER_TEXT "Ten folder już zawiera folder o nazwie '%1'.\n\n"\ + "Jeżeli w docelowym folderze wystšpiš pliki o takich samych nazwach jak\n"\ + "w wybranym folderze, to zostanš one zastšpione. Czy chcesz mimo to przenieœć\n"\ + "lub skopiować folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Uruchom ponownie" + IDS_RESTART_PROMPT "Czy chcesz zrestartować system?" + IDS_SHUTDOWN_TITLE "Wyłšcz" + IDS_SHUTDOWN_PROMPT "Czy chcesz wyłšczyć system?" + IDS_LOGOFF_TITLE "Wyloguj" + IDS_LOGOFF_PROMPT "Czy chcesz się wylogować z systemu?" + + /* shell folder path default values */ + IDS_PROGRAMS "Menu Start\\Programy" + IDS_PERSONAL "Moje dokumenty" + IDS_FAVORITES "Ulubione" + IDS_STARTUP "Menu Start\\Programy\\AutoStart" + IDS_RECENT "Ostatnie" + IDS_SENDTO "Wyœlij do" + IDS_STARTMENU "Menu" + IDS_MYMUSIC "Moja muzyka" + IDS_MYVIDEO "Moje wideo" + IDS_DESKTOPDIRECTORY "Pulpit" + IDS_NETHOOD "Sieci" + IDS_TEMPLATES "Szablony" + IDS_APPDATA "Dane aplikacji" + IDS_PRINTHOOD "Drukarki" + IDS_LOCAL_APPDATA "Ustawienia lokalne\\Dane aplikacji" + IDS_INTERNET_CACHE "Ustawienia lokalne\\Temporary Internet Files" + IDS_COOKIES "Ciasteczka" + IDS_HISTORY "Ustawienia Lokalne\\Historia" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "Moje obrazy" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Dokumenty" + IDS_ADMINTOOLS "Menu Start\\Programy\\Narzędzia administracyjne" + IDS_COMMON_MUSIC "Dokumenty\\Moja muzyka" + IDS_COMMON_PICTURES "Dokumenty\\Moje obrazy" + IDS_COMMON_VIDEO "Dokumenty\\Moje wideo" + IDS_CDBURN_AREA "Ustawienia lokalne\\Dane aplikacji\\Microsoft\\Nagrywanie dysków CD" + IDS_NETWORKPLACE "Moja sieć" + + IDS_NEWFOLDER "Nowy katalog" + + IDS_DRIVE_FIXED "Dysk lokalny" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Dysk sieciowy" + + IDS_OPEN_WITH "Otwórz z" + IDS_OPEN_WITH_CHOOSE "Wybierz program..." + + IDS_SHELL_ABOUT_AUTHORS "&Autorzy" + IDS_SHELL_ABOUT_BACK "< &Wstecz" + FCIDM_SHVIEW_NEW "&Nowy" + FCIDM_SHVIEW_NEWFOLDER "&Folder" + FCIDM_SHVIEW_NEWLINK "&Skrót" + IDS_FOLDER_OPTIONS "Opcje katalogów" + IDS_RECYCLEBIN_LOCATION "Lokalizacja kosza" + IDS_RECYCLEBIN_DISKSPACE "Pozostało wolnego miejsca" + IDS_EMPTY_BITBUCKET "Opróżnij Kosz" + IDS_PICK_ICON_TITLE "Wybierz ikonę" + IDS_PICK_ICON_FILTER "Pliki ikon(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Programy\0*.exe\0" + IDS_DIRECTORY "Katalog" + IDS_VIRTUAL_DRIVER "Sterownik urzšdzenia wirtualnego" + IDS_BAT_FILE "Plik wsadowy ReactOS" + IDS_CMD_FILE "Skrypt konsoli ReactOS" + IDS_COM_FILE "Aplikacja DOS" + IDS_CPL_FILE "Element Panelu sterowania" + IDS_CUR_FILE "Kursor" + IDS_DLL_FILE "Rozszerzenie aplikacji" + IDS_DRV_FILE "Sterownik urzšdzenia" + IDS_EXE_FILE "Program" + IDS_FON_FILE "Plik czcionki" + IDS_TTF_FILE "Plik czcionki TrueType" + IDS_HLP_FILE "Plik pomocy" + IDS_INI_FILE "Ustawienia konfiguracji" + IDS_LNK_FILE "Skrót" + IDS_SYS_FILE "Plik systemowy" + + IDS_OPEN_VERB "Otwórz" + IDS_RUNAS_VERB "Uruchom jako " + IDS_EDIT_VERB "Edytuj" + IDS_FIND_VERB "Wyszukaj" + IDS_PRINT_VERB "Drukuj" + IDS_PLAY_VERB "Odtwórz" + IDS_PREVIEW_VERB "Podglšd" + + IDS_FILE_FOLDER "%u Plików, %u Katalogów" + IDS_PRINTERS "Drukarki" + IDS_FONTS "Czcionki" + IDS_INSTALLNEWFONT "Zainstaluj Nowš Czcionkę..." + + IDS_DEFAULT_CLUSTER_SIZE "Domyœlny rozmiar jednostki alokacji" + IDS_COPY_OF "Kopia" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/pt-BR.rc b/reactos/dll/win32/shell32_new/lang/pt-BR.rc new file mode 100644 index 00000000000..7679014ff37 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/pt-BR.rc @@ -0,0 +1,758 @@ +/* + * Copyright 1998 Juergen Schmied + * Copyright 2003 Marcelo Duarte + * Copyright 2006-2007 Américo José Melo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Ícones &grandes", FCIDM_SHVIEW_BIGICON + MENUITEM "Ícones &pequenos", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detalhes", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Exibir" + BEGIN + MENUITEM "Ícones &grandes", FCIDM_SHVIEW_BIGICON + MENUITEM "Ícones &pequenos", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detalhes", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "O&rganizar ícones" + BEGIN + MENUITEM "Por &nome", 0x30 /* column 0 */ + MENUITEM "Por &tipo", 0x32 /* column 2 */ + MENUITEM "Por ta&manho", 0x31 /* ... */ + MENUITEM "Por &data", 0x33 + MENUITEM SEPARATOR + MENUITEM "Auto organi&zar", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Alin&har ícones", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "&Atualizar", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Co&lar", FCIDM_SHVIEW_INSERT + MENUITEM "Colar a&talho", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Propriedades", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Explorar", FCIDM_SHVIEW_EXPLORE + MENUITEM "A&brir", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ortar", FCIDM_SHVIEW_CUT + MENUITEM "&Copiar", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Criar a&talho", FCIDM_SHVIEW_CREATELINK + MENUITEM "E&xcluir", FCIDM_SHVIEW_DELETE + MENUITEM "&Renomear", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Propriedades", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Procurar pasta" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Sobre %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS foi disponibilizado por:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, que o Wine irá abrí-lo para vocę.", 12289, 36, 11, 182, 18 + LTEXT "&Abrir:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Procurar...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Arquivo" + IDS_SHV_COLUMN2 "Tamanho" + IDS_SHV_COLUMN3 "Tipo" + IDS_SHV_COLUMN4 "Modificado" + IDS_SHV_COLUMN5 "Atributos" + IDS_SHV_COLUMN6 "Tamanho" + IDS_SHV_COLUMN7 "Disponível" + IDS_SHV_COLUMN8 "Nome" + IDS_SHV_COLUMN9 "Comentários" + IDS_SHV_COLUMN10 "Dono" + IDS_SHV_COLUMN11 "Grupo" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Área de trabalho" + IDS_MYCOMPUTER "Meu computador" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Ícones &grandes" + IDS_VIEW_SMALL "Ícones &pequenos" + IDS_VIEW_LIST "&Lista" + IDS_VIEW_DETAILS "&Detalhes" + IDS_SELECT "Selecionar" + IDS_OPEN "Abrir" + IDS_CREATELINK "Criar a&talho" + IDS_COPY "&Copiar" + IDS_DELETE "E&xcluir" + IDS_PROPERTIES "Propriedades" + IDS_CUT "C&ortar" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Năo pode criar nova pasta: Permissăo negada." + IDS_CREATEFOLDER_CAPTION "Erro durante a criaçăo da nova pasta" + IDS_DELETEITEM_CAPTION "Confirmar exclusăo de arquivo" + IDS_DELETEFOLDER_CAPTION "Confirmar exclusăo de pasta" + IDS_DELETEITEM_TEXT "Vocę tem certeza que deseja excluir '%1'?" + IDS_DELETEMULTIPLE_TEXT "Vocę tem certeza que deseja excluir estes %1 itens?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirmar sobreescrever arquivo" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Reiniciar" + IDS_RESTART_PROMPT "Vocę quer simular a reinicializaçăo do Windows?" + IDS_SHUTDOWN_TITLE "Desligar" + IDS_SHUTDOWN_PROMPT "Vocę quer finalizar a sessăo no Wine?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Menu Iniciar\\Programas" + IDS_PERSONAL "Meus Documentos" + IDS_FAVORITES "Favoritos" + IDS_STARTUP "Menu Iniciar\\Programas\\Iniciar" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Menu Iniciar" + IDS_MYMUSIC "Minhas Músicas" + IDS_MYVIDEO "Meus Vídeos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Configuraçőes locais\\Dados de aplicativos" + IDS_INTERNET_CACHE "Configuraçőes locais\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Configuraçőes locais\\Histórico" + IDS_PROGRAM_FILES "Arquivos de programas" + IDS_MYPICTURES "Minhas Imagens" + IDS_PROGRAM_FILES_COMMON "Arquivos de programas\\Arquivos comuns" + IDS_COMMON_DOCUMENTS "Documentos" + IDS_ADMINTOOLS "Menu Iniciar\\Programas\\Ferramentas Administrativas" + IDS_COMMON_MUSIC "Documentos\\Minhas Músicas" + IDS_COMMON_PICTURES "Documentos\\Minhas Imagens" + IDS_COMMON_VIDEO "Documentos\\Meus Vídeos" + IDS_CDBURN_AREA "Configuraçőes locais\\Dados de aplicativos\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "Novo" + FCIDM_SHVIEW_NEWFOLDER "&Pasta" + FCIDM_SHVIEW_NEWLINK "&Atalho" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "Nici un program Windows nu este configurat sa deschida fi?iere de acest tip." +END diff --git a/reactos/dll/win32/shell32_new/lang/pt-PT.rc b/reactos/dll/win32/shell32_new/lang/pt-PT.rc new file mode 100644 index 00000000000..2d99ca47e97 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/pt-PT.rc @@ -0,0 +1,759 @@ +/* + * Copyright 1998 Juergen Schmied + * Copyright 2003 Marcelo Duarte + * Copyright 2006-2007 Américo José Melo + * Copyright 2010 Manuel D V Silva + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Ícones &grandes", FCIDM_SHVIEW_BIGICON + MENUITEM "Ícones &pequenos", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detalhes", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Mostrar" + BEGIN + MENUITEM "Ícones &grandes", FCIDM_SHVIEW_BIGICON + MENUITEM "Ícones &pequenos", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detalhes", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "O&rganizar ícones" + BEGIN + MENUITEM "Por &nome", 0x30 /* column 0 */ + MENUITEM "Por &tipo", 0x32 /* column 2 */ + MENUITEM "Por ta&manho", 0x31 /* ... */ + MENUITEM "Por &data", 0x33 + MENUITEM SEPARATOR + MENUITEM "Auto organi&zar", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Alin&har ícones", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "&Actualizar", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Co&lar", FCIDM_SHVIEW_INSERT + MENUITEM "Colar a&talho", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Propriedades", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplorador", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Abrir", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ortar", FCIDM_SHVIEW_CUT + MENUITEM "&Copiar", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Criar &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Apagar", FCIDM_SHVIEW_DELETE + MENUITEM "&Renomear", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Propriadades", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Procurar Pastas" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Procurar Pastas" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Pasta:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Criar Nova Pasta", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Mensagem" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Sim", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Sim para &todos", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Năo", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancelar", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Acerca do %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Versăo " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Esta versăo do ReactOS é registado a:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Memória física instalada:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS disponibilizado por:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, que o ReactOS irá abrí-lo.", 12289, 36, 11, 182, 18 + LTEXT "&Abrir:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Procurar...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Atalho" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Tipo de destino:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Localizaçăo do destino:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Destino:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Iniciar em:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "&Tecla de Atalho:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Executar:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omemntário:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Localizar Destino...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Trocar Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&vançado...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Propriedades Avançadas" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Escolha as propriedades avançadas que quer para este atalho.", -1, 5, 30, 210, 10 + CHECKBOX "Executar com diferentes credenciais", 14000, 25, 50, 150, 10 + LTEXT "Esta opçăo permite executar este atalho como outro utilizador, ou continue com a sua conta enquanto protege o seu computador e dados contra actividade de programas năo autorizados.", -1, 50, 60, 175, 40 + CHECKBOX "Executar num espaço de memória separada", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abortar", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Geral" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Tipo de ficheiro:", 14004, 8, 35, 50, 10 + LTEXT "Pasta", 14005, 68, 35, 160, 10 + LTEXT "Localizaçăo:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Tamanho:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contém:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Criado:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Sómente de Leitura", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Escondido", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "geral" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Tipo de Ficheiro:", 14004, 8, 35, 50, 10 + LTEXT "Ficheiro", 14005, 68, 35, 160, 10 + LTEXT "Abre com::", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Localizaçăo:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Tamanho:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Criado:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modificado:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Acedido:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "propriedades:", 14020, 8, 189, 45, 10 + CHECKBOX "&Somente de Leitura", 14021, 58, 189, 67, 10 + CHECKBOX "&Oculto", 14022, 126, 189, 50, 10 + CHECKBOX "&Arquivo", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Versăo" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Versăo do Ficheiro: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Descriçăo: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Outras informaçőes da versăo: ", 14006, 6, 70, 222, 115 + LTEXT "Nome do Item: ", 14007, 13, 82, 50, 10 + LTEXT "Valor: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Geral" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Tipo:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Sistema de Ficheiros:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Espaço utilizado:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Espaço livre:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacidade:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Disco %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Limpeza do Disco", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Comprimir unidade para libertar espaço no disco", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "permitir indexar este disco para acelerar a procura de ficheiros", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ferramentas" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Verificar por erros...", -1, 5, 5, 230, 60 + LTEXT "Esta opçăo vai verificar o volume por erros.", -1, 40, 25, 160, 20 + PUSHBUTTON "Verificar agora...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Desfragmentaçăo", -1, 5, 65, 230, 60 + LTEXT "Esta opçăo vai desfragmentar os ficheiros no volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragmentar Agora...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Cópia de segurança", -1, 5, 130, 230, 60 + LTEXT "Esta opçăo vai criar os ficheiros do volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Executar Cópia de Segurança...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Executar Como..." +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Que conta de utilizador quer utilizar para executar este programa?", -1, 10, 20, 220, 20 + CHECKBOX "Utilizador actual %s", 14000, 10, 45, 150, 10 + LTEXT "Proteger o meu computador e dados de actividade de programas năo autoridados.", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Esta opçăo pode prevenir a acçăo de virus no computador,mas seleccionando-a pode levar a que alguns programas funcionem incorrectamente.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "O seguinte utilizador:", 14002, 10, 100, 90, 10 + LTEXT "Nome do utilizador:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Palavra-passe:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancelar", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "propriedades da Reciclagem" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "propriedades para as localizaçőes seleccionadas", -1, 10, 72, 220, 70 + RADIOBUTTON "&Tamanho personalizado:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "Tamanho M&áximo(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Năo mover os ficheiros para a &Reciclagem. Apagá-los definitivamente.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Mostrar ecrân de confirmaçăo de eliminaçăo", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Abre com..." +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Escolha o programa que quer utilizar para abrir este ficheiro:", -1, 44, 12, 211, 10 + LTEXT "Ficheiro: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programas", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Utilizar sempre o programa seleccionado para abrir este tipo de ficheiros", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Seleccione...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancelar", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Geral" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tarefas", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Mostrar tarefas comuns nas &pastas", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Utilizar pastas class&icas ReactOS", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Procurar pastas", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Abrir cada pasta na &mesma janela", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Abrir cada pasta na sua &janela", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Seleccione a seguinte opçăo", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Click simples para abrir um item", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Sublinhar os títulos dos ícones mantendo o aspecto do &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Sublinhar os títulos dos ícones apenas quando &aponto para eles", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Duplo-click para abrir um item (um click para seleccionar)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restaurar valores por defeito", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Ver" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Vistas das Pastas", -1, 7, 10, 249, 60 +//ICON +LTEXT "Pode aplicar a vista (como detalhes ou títulos) que\nestá a usar para esta pasta para todas as pastas.", -1, 60, 20, 180, 20 +PUSHBUTTON "Applicar a T&odas as Pastas", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reiniciar todas as Pastas", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Definiçőes avançadas:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restaurar valores por &Defeito", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Tipos de Ficheiros" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "&Tipos de ficheiros registados:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Novo", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Apagar", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Detalhes para '%s' extensăo", 14003, 7, 130, 249, 70 +LTEXT "Abre com:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appnome", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Mudar...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Ficheiros com extensăo '%s' săo do tipo '%s'. Para\nmudar definiçőes que afectam todos '%s' ficheiros, click\nAvançado.", 14007, 12, 155, 160, 30 +PUSHBUTTON "A&vançado", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirmar Substituiçăo de Ficheiros" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Sim", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Sim para &Todos", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Năo", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Esta pasta já contém um ficheiro com o nome '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Esta pasta já contém um ficheiro sómente de leitura com o nome '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Esta pasta já contém um ficheiro de sistema com o nome '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "pretende substituir o ficheiro existente", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(data e tamanho desconhecido)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "por este?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(data e tamanho desconhecido)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Terminar sessăo ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Tem a certeza que quer terminar a sessăo?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Terminar a sessăo", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Encerrar ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Tem a certeza que quer encerrar?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Encerrar", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Seleccione o tipo de conteúdo, depois escolha uma acçăo para o RactOS executar automáticamente quando este tipo for usado neste dispositivo:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Acçőes", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Seleccione uma acçăo para &executar:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "pergunte-me sempre para escolher uma &acçăo", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restaurar valores por defeito", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Conteúdos mistos" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Este disco ou dispositivo contém mais de um tipo de conteúdo.", 1001, 32, 7, 191, 20 + LTEXT "O que pretende que o ReactOS faça?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Conteúdo misto" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS pode executar a mesma acçăo de cada vez que inserir um disco ou um dispositivo com este tipo de ficheiro:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "O que pretende que o ReactOS faça?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Executar sempre a acçăo seleccionada.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS pode executar sempre mesma acçăo de cada vez que inserir um disco ou um dispositivo.", 1001, 32, 7, 190, 22 + LTEXT "&O que pretende que o ReactOS faça?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Executar sempre a acçăo seleccionada", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancelar", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Encerrar ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "O que pretende aue o computador faça?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Manter a sessăo, deixando o computador a correr em baixa energia. O computador arranca quando tocar numa tecla ou mover o rato.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancelar", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Ajuda", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Formatar" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Iniciar", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Fechar", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacidade:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Sistema de Ficheiros", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Tamanho da unidade de alocaçăo", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Nome do Volume ", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "&Opçőes", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "Formataçăo &Rápida", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Permitir Compressăo", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Verificar Disco" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Iniciar", IDOK, 53, 100, 60, 14 + GROUPBOX "Opçőes verificaçăo do disco", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancelar", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Reparar automáticamente erros nos ficheiros do sistema", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Procurar e tentar reparar sectores danificados", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Trocar Icone" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Nome do ficheiro:", -1, 7, 14, 208, 10 + PUSHBUTTON "procurar...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancelar",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Ficheiro" + IDS_SHV_COLUMN2 "Tamanho" + IDS_SHV_COLUMN3 "Tipo" + IDS_SHV_COLUMN4 "Modificado" + IDS_SHV_COLUMN5 "propriedades" + IDS_SHV_COLUMN6 "Tamanho" + IDS_SHV_COLUMN7 "Disponível" + IDS_SHV_COLUMN8 "Nome" + IDS_SHV_COLUMN9 "Comentários" + IDS_SHV_COLUMN10 "Dono" + IDS_SHV_COLUMN11 "Grupo" + IDS_SHV_COLUMN12 "Nome do ficheiro" + IDS_SHV_COLUMN13 "Categoria" + IDS_SHV_COLUMN_DELFROM "Localizaçăo original" + IDS_SHV_COLUMN_DELDATE "Data da eliminaçăo" + IDS_SHV_COLUMN_FONTTYPE "Tipo de letra" + IDS_SHV_COLUMN_WORKGROUP "Grupo de trabalho" + IDS_SHV_NETWORKLOCATION "localizaçőes na rede" + IDS_SHV_COLUMN_DOCUMENTS "Documentos" + IDS_SHV_COLUMN_STATUS "Estado" + IDS_SHV_COLUMN_COMMENTS "Commentários" + IDS_SHV_COLUMN_LOCATION "Localizaçăo" + IDS_SHV_COLUMN_MODEL "Modelo" + + /* special folders */ + IDS_DESKTOP "Ambiente de trabalho" + IDS_MYCOMPUTER "O Meu Computador" + IDS_RECYCLEBIN_FOLDER_NAME "Reciclagem" + IDS_CONTROLPANEL "Painel de Controlo" + IDS_ADMINISTRATIVETOOLS "Ferramentas Administrativas" + + /* context menus */ + IDS_VIEW_LARGE "Ícones &grandes" + IDS_VIEW_SMALL "Ícones &pequenos" + IDS_VIEW_LIST "&Lista" + IDS_VIEW_DETAILS "&Detalhes" + IDS_SELECT "Seleccionar" + IDS_OPEN "Abrir" + IDS_CREATELINK "Criar &Atalho" + IDS_COPY "Copiar" + IDS_DELETE "Apagar" + IDS_PROPERTIES "Propriedades" + IDS_CUT "Cortar" + IDS_RESTORE "Restaurar" + IDS_FORMATDRIVE "Formatar..." + IDS_RENAME "Renaomear" + IDS_INSERT "Inserir" + + IDS_CREATEFOLDER_DENIED "Năo é possível criar nova pasta: Permissăo negada." + IDS_CREATEFOLDER_CAPTION "Erro durante a criaçăo da nova pasta" + IDS_DELETEITEM_CAPTION "Confirmar exclusăo do ficheiro" + IDS_DELETEFOLDER_CAPTION "Confirmar exclusăo da pasta" + IDS_DELETEITEM_TEXT "Tem certeza que deseja excluir '%1'?" + IDS_DELETEMULTIPLE_TEXT "Tem certeza que deseja excluir estes %1 itens?" + IDS_DELETESELECTED_TEXT "Tem a certeza que quer eliminar os item(s) seleccionado(s)?" + IDS_TRASHITEM_TEXT "Tem a certeza que quer enviar '%1' para a reciclagem?" + IDS_TRASHFOLDER_TEXT "Tem a certeza que quer enviar '%1' e todo o seu conteúdo para a reciclagem?" + IDS_TRASHMULTIPLE_TEXT "Tem a certeza que quer enviar este '%1' item para a reciclagem?" + IDS_CANTTRASH_TEXT "O item '%1' năo pode ser enviado para a reciclagem. Em vez disso pretende eliminá-lo?" + IDS_OVERWRITEFILE_TEXT "Esta pasta já contém um ficheiro com o nome '%1'.\n\npretende substituí-lo?" + IDS_OVERWRITEFILE_CAPTION "Confirmar substituiçăo de ficheiro" + IDS_OVERWRITEFOLDER_TEXT "Esta pasta já contém uma pasta com o nome '%1'.\n\n"\ + "Se os ficheiros na pasta de destino tiverem o mesmo nome dos ficheiros na\n"\ + "pasta seleccionada, serăo substituídos. Ainda assim pretende mover ou copiar\n"\ + "a pasta?" + + /* message box strings */ + IDS_RESTART_TITLE "Reiniciar" + IDS_RESTART_PROMPT "Deseja simular a reinicializaçăo do Windows?" + IDS_SHUTDOWN_TITLE "Desligar" + IDS_SHUTDOWN_PROMPT "Deseja finalizar esta sessăo do ReactOS?" + IDS_LOGOFF_TITLE "Terminar a sessăo" + IDS_LOGOFF_PROMPT "Pretende terminar a sessăo?" + + /* shell folder path default values */ + IDS_PROGRAMS "Menu Iniciar\\Programas" + IDS_PERSONAL "OS Meus Documentos" + IDS_FAVORITES "Favoritos" + IDS_STARTUP "Menu Iniciar\\Programas\\Iniciar" + IDS_RECENT "Recentes" + IDS_SENDTO "Enviar Para" + IDS_STARTMENU "Menu Iniciar" + IDS_MYMUSIC "As Minhas Músicas" + IDS_MYVIDEO "Os Meus Vídeos" + IDS_DESKTOPDIRECTORY "Ambiente de Trabalho" + IDS_NETHOOD "Visinhança na rede" + IDS_TEMPLATES "Modelos" + IDS_APPDATA "Dados de Aplicaçăo" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Definiçőes locais\\Dados de Aplicaçăo" + IDS_INTERNET_CACHE "Definiçőes locais\\Ficheiros Temporários da Internet" + IDS_COOKIES "Cookies" + IDS_HISTORY "Definiçőes locais\\Histórico" + IDS_PROGRAM_FILES "Programas" + IDS_MYPICTURES "As Minhas Imagens" + IDS_PROGRAM_FILES_COMMON "Programas\\Ficheiros comuns" + IDS_COMMON_DOCUMENTS "Os Meus Documentos" + IDS_ADMINTOOLS "Menu Iniciar\\Programas\\Ferramentas Administrativas" + IDS_COMMON_MUSIC "Os Meus Documentos\\As Minhas Músicas" + IDS_COMMON_PICTURES "Os Meus Documentos\\As Minhas Imagens" + IDS_COMMON_VIDEO "Os Meus Documentos\\Os Meus Vídeos" + IDS_CDBURN_AREA "Definiçőes locais\\Dados de Aplicaçăo\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Os Meus Locais da Rede" + + IDS_NEWFOLDER "Nova Pasta" + + IDS_DRIVE_FIXED "Disco Local" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Disco de Rede" + + IDS_OPEN_WITH "Abre com..." + IDS_OPEN_WITH_CHOOSE "Escolha Programa..." + + IDS_SHELL_ABOUT_AUTHORS "&Autores" + IDS_SHELL_ABOUT_BACK "< &Trás" + FCIDM_SHVIEW_NEW "Novo" + FCIDM_SHVIEW_NEWFOLDER "&Pasta" + FCIDM_SHVIEW_NEWLINK "&Atalho" + IDS_FOLDER_OPTIONS "Opçőes das Pastas" + IDS_RECYCLEBIN_LOCATION "Localizaçăo da Reciclagem" + IDS_RECYCLEBIN_DISKSPACE "Espaço Disponível" + IDS_EMPTY_BITBUCKET "Esvaziar Reciclagem" + IDS_PICK_ICON_TITLE "Escolha Ícone" + IDS_PICK_ICON_FILTER "Ficheiros de Ícones(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Ficheiros Executáveis\0*.exe\0" + IDS_DIRECTORY "Pasta" + IDS_VIRTUAL_DRIVER "Driver de Dispositivo Virtual" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Aplicaçăo Dos" + IDS_CPL_FILE "Item do Painel de Controle" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Extensăo da Aplicaçăo" + IDS_DRV_FILE "Driver do Dispositivo" + IDS_EXE_FILE "Aplicaçăo" + IDS_FON_FILE "Ficheiro de tipo de letra" + IDS_TTF_FILE "Tipo de letra TrueType" + IDS_HLP_FILE "Ficheiro de Ajuda" + IDS_INI_FILE "Definiçőes" + IDS_LNK_FILE "Atalho" + IDS_SYS_FILE "Ficheiro de Sistema" + + IDS_OPEN_VERB "Abrir" + IDS_RUNAS_VERB "Executar como " + IDS_EDIT_VERB "Editar" + IDS_FIND_VERB "Procurar" + IDS_PRINT_VERB "Imprimir" + IDS_PLAY_VERB "Reproduzir" + IDS_PREVIEW_VERB "Previzualizar" + + IDS_FILE_FOLDER "%u Ficheiros, %u Pastas" + IDS_PRINTERS "Impressoras" + IDS_FONTS "Tipos de Letras" + IDS_INSTALLNEWFONT "Instalar novo tipo de letra..." + + IDS_DEFAULT_CLUSTER_SIZE "Tamanho da unidade de atribuiçăo" + IDS_COPY_OF "Cópia de" + + IDS_SHLEXEC_NOASSOC "Năo existe um programa Windows configurado para abrir este tipo de ficheiro." +END diff --git a/reactos/dll/win32/shell32_new/lang/ro-RO.rc b/reactos/dll/win32/shell32_new/lang/ro-RO.rc new file mode 100644 index 00000000000..fb24c2ba437 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/ro-RO.rc @@ -0,0 +1,760 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL + +#pragma code_page(65001) + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Pictograme& mari", FCIDM_SHVIEW_BIGICON + MENUITEM "Pictograme &mici", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Listă", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detalii", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Vizualizare" + BEGIN + MENUITEM "Pictograme& mari", FCIDM_SHVIEW_BIGICON + MENUITEM "Pictograme &mici", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Listă", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detailii", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Aranjare &pictograme" + BEGIN + MENUITEM "După &nume", 0x30 /* column 0 */ + MENUITEM "După &tip", 0x32 /* column 2 */ + MENUITEM "După &mărime", 0x31 /* ... */ + MENUITEM "După &dată", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Aranjare automată", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Aranjare ĂŽn grilă", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "ReĂŽmprospătare", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Lipire", FCIDM_SHVIEW_INSERT + MENUITEM "Lipire ca scurtătură", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Proprietăți", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplorare", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Deschidere", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "D&ecupare", FCIDM_SHVIEW_CUT + MENUITEM "&Copiere", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Creare scurtătură", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Ștergere", FCIDM_SHVIEW_DELETE + MENUITEM "&Redenumire", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Proprietăți", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Răsfoire după dosar" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Anulare", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Răsfoire după dosar" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Dosar:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Creare dosar nou", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Anulare", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Mesaj" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Da", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Da pentru &toate", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Nu", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Anulare", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Despre %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Versiune " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Versiune de ReactOS ĂŽnregistrată pentru:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Memorie fizică instalată:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS v-a fost adus de:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Rulare" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Scrieți numele unui program, dosar, document sau a unei resurse de Internet iar ReactOS le va deschide imediat.", 12289, 36, 11, 182, 18 + LTEXT "&Deschidere:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "Anulare", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&Răsfoire...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Scurtătură" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Tip țintă:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Locație țintă:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Țintă:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Pornire ĂŽn:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Taste rapide:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Executare:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omentariu:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Găsire țintă...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Pictogramă...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&vansat...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Proprietăți extinse" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Alegeți proprietăți avansate pentru această scurtătură.", -1, 5, 30, 210, 10 + CHECKBOX "Rulare ca alt utilizator", 14000, 25, 50, 150, 10 + LTEXT "Această opțiune vă permite să rulați scurtătura ca alt utilizator sau să continuați să folosiți scurtătura dvs protejând computerul de activități neautorizate.", -1, 50, 60, 175, 40 + CHECKBOX "Rulare ĂŽn spațiu de memorie separat", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Anulare", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Tip fișier:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Locație:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Mărime:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Conține:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Creat:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Doar-ĂŽn-citire", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Ascuns", 14022, 126, 150, 50, 10 +END + + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Tip fișier:", 14004, 8, 35, 50, 10 + LTEXT "Fișier", 14005, 68, 35, 160, 10 + LTEXT "Se deschide cu:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Locație:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Mărime:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Creat:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modificat:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accesat:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Atribute:", 14020, 8, 189, 45, 10 + CHECKBOX "&Doar-ĂŽn-citire", 14021, 58, 189, 67, 10 + CHECKBOX "&Ascuns", 14022, 126, 189, 50, 10 + CHECKBOX "&Arhivă", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Versiune" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Versiune fișier: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Descriere: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Drept de autor: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Alte informații versiune", 14006, 6, 70, 222, 115 + LTEXT "Nume element: ", 14007, 13, 82, 50, 10 + LTEXT "Valoare: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Tip:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Sistem de fișiere:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Spațiu folosit:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Spațiu liber:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacitate:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Partiție %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Curățire disc", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Comprimare pentru a salva spațiu", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Permitere Serviciu de Indexare pentru căutare rapidă", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Unelte" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Verificare pentru erori", -1, 5, 5, 230, 60 + LTEXT "Această opțiune va verifica\npartiția pentru erori.", -1, 40, 25, 160, 20 + PUSHBUTTON "Verificare acum...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentare", -1, 5, 65, 230, 60 + LTEXT "Această opțiune va defragmenta fișierele de pe partiție.", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragmentare acum...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Copie de siguranță", -1, 5, 130, 230, 60 + LTEXT "Această opțiune va crea o copie de siguranță a fișierelor.", -1, 40, 150, 160, 20 + PUSHBUTTON "Creare copie de siguranță...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Rulare ca" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Ce cont vreți să folosiți pentru a rula acest program?", -1, 10, 20, 220, 20 + CHECKBOX "Utilizator curent: %s", 14000, 10, 45, 150, 10 + LTEXT "Protejare computer de activiăți neautorizate", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Această opțiune vă poate proteja computerul de activități care pot fi dăunătoare dar pot duce la funcționarea incorectă a programului.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Utilizator curent:", 14002, 10, 100, 90, 10 + LTEXT "Nume utilizator:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Parolă:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Anulare", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Proprietăți pentru Coșul de gunoi" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Setări pentru locația aleasă", -1, 10, 72, 220, 70 + RADIOBUTTON "&Mărime particul.:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&ărime maximă(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Nu se vor muta fișierele ĂŽn &Coșul de gunoi, ci se vor elimina direct.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Afișare dialog de confirmare ștergere", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Alegeți programul pe care vreți să ĂŽl folosiți la deschiderea acestui fișier:", -1, 44, 12, 211, 10 + LTEXT "Fișier: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programe", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + AUTOCHECKBOX "&Folosire mereu această aplicație", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Răsfoire...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Anulare", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Activități", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Afișare activiăți comune ĂŽn &dosare", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Folosire dosare &clasice ReactOS", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Răsfoire dosare", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Deschidere &dosare ĂŽn fereastră comună", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Deschidere dosare ĂŽn &fereastră proprie", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Selectare elemente astfel", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Clic pentru deschidere (cursor deasupra pt. a selecta)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Subliniere titluri pictograme precum ĂŽn navigatorul meu", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Subliniere titluri când țin cursorul deasupra", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Dublu-clic pentru a deschide (clic pt. a selecta)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restabilire implicite", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Vizualizare" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Vizualizări dosar", -1, 7, 10, 249, 60 +//ICON +LTEXT "Puteți aplica vizualizarea (precum Detalii sau Pictogramem mari)\npe care o folosiți la acest dosar pt. toate dosarele.", -1, 60, 20, 180, 20 +PUSHBUTTON "Aplicare la &Toate", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Resetare &Toate", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Setări avansate:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restabilire &implicite", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Tipuri fișier" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Tipuri fișier ĂŽnregistrate:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Nou", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Eliminare", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Detalii pentru extensia '%s'", 14003, 7, 130, 249, 70 +LTEXT "Deschidere cu:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Nume ap.", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Schimbare", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Fișierele cu extensia '%s' sunt de tipul '%s'. \nPentru a schimbat setări care vor afecta\ntoate fișierele '%s', clic pe Avansat.", 14007, 12, 155, 160, 30 +PUSHBUTTON "A&vansat", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirmare ĂŽnlocuire fișier" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Da", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Da la &Toate", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Nu", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Anulare", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Dosarul curent deja conține un fișier cu numele '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Dosarul curent deja conține un fișier doar-ĂŽn-citire cu numele '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Dosarul curent deja conține un fișier de sistem cu numele '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Doriți să ĂŽnlocuiți fișierul acesta", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(mărime/dată necunoscută)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "cu acesta?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(mărime/dată necunoscută)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log off din ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Sigur vreți să ieșiți din ReactOS ?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Anulare", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Deconectare ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Sigur vreți să vă deconectați?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Deconectare", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Anulare", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoRulare" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Alegeți un tip de conținut și acțiunea pe care ReactOS să o ĂŽndeplinească:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Acțiuni", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Alegeți o acțiune:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Vreau să fiu ĂŽntrebat mereu", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restabilire implicite", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Conținut mixt" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Acest disc sau dispozitiv conține mai mult de un tip de conținut.", 1001, 32, 7, 191, 20 + LTEXT "Ce vreți să facă ReactOS?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Anulare", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Conținut mixt" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS poate executa aceeași acțiune de fiecare dată când introduceți un disc sau conectați un dispozitiv cu acest conținut pe el:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Ce vreți să facă ReactOS?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Efectuare mereu aceeși acțiune", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Anulare", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autorulare" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS poate executa aceeași acțiune de fiecare dată când conectați acest dispozitiv.", 1001, 32, 7, 190, 22 + LTEXT "&Ce vreți să facă ReactOS?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Efectuare mereu aceeași acțiune", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Anulare", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Închidere ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Ce vreți să facă computerul?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Menține sesiunea de lucru, lasă computerul pe consum redus dar menține toate datele ĂŽn memorie. Computerul își va reveni când apăsați o tastă sau mișcați mausul.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Anulare", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Ajutor", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Formatare" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Începere", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Închidere", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacitate:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Sistem de fișiere", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Mărime unități de alocare", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Nume &volum", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Opțiuni &formatare", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "Formatare r&apidă", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Compresie", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Verificare disc" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Începere", IDOK, 53, 100, 60, 14 + GROUPBOX "Verificare opțiuni disc", -1, 7, 6, 179, 50 + PUSHBUTTON "Anulare", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Reparare automată erori", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scanare și reparare ĂŽnregistrări eronate", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Schimbare pictogramă" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Nume fișier:", -1, 7, 14, 208, 10 + PUSHBUTTON "Răsfoire...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Anulare",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Fișier" + IDS_SHV_COLUMN2 "Mărime" + IDS_SHV_COLUMN3 "Tip" + IDS_SHV_COLUMN4 "Modificat" + IDS_SHV_COLUMN5 "Atribute" + IDS_SHV_COLUMN6 "Mărime" + IDS_SHV_COLUMN7 "Mărime disponibilă" + IDS_SHV_COLUMN8 "Nume" + IDS_SHV_COLUMN9 "Comentarii" + IDS_SHV_COLUMN10 "Posesor" + IDS_SHV_COLUMN11 "Grup" + IDS_SHV_COLUMN12 "Nume fișier" + IDS_SHV_COLUMN13 "Categorie" + IDS_SHV_COLUMN_DELFROM "Locație originală" + IDS_SHV_COLUMN_DELDATE "Data ștergerii" + IDS_SHV_COLUMN_FONTTYPE "Tip font" + IDS_SHV_COLUMN_WORKGROUP "Grup de lucru" + IDS_SHV_NETWORKLOCATION "Locație rețea" + IDS_SHV_COLUMN_DOCUMENTS "Documente" + IDS_SHV_COLUMN_STATUS "Stare" + IDS_SHV_COLUMN_COMMENTS "Comentarii" + IDS_SHV_COLUMN_LOCATION "Locație" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Spațiu de lucru" + IDS_MYCOMPUTER "Computerul meu" + IDS_RECYCLEBIN_FOLDER_NAME "Coș de gunoi" + IDS_CONTROLPANEL "Panou de control" + IDS_ADMINISTRATIVETOOLS "Unelte administrative" + + /* context menus */ + IDS_VIEW_LARGE "Pictograme &mari" + IDS_VIEW_SMALL "Pictograme m&ici" + IDS_VIEW_LIST "&Listă" + IDS_VIEW_DETAILS "&Detalii" + IDS_SELECT "Selectare" + IDS_OPEN "Deschidere" + IDS_CREATELINK "Creare &scurtătură" + IDS_COPY "Copiere" + IDS_DELETE "Ștergere" + IDS_PROPERTIES "Proprietăți" + IDS_CUT "Decupare" + IDS_RESTORE "Restabilire" + IDS_FORMATDRIVE "Formatare..." + IDS_RENAME "Redenumire" + IDS_INSERT "Inserare" + + IDS_CREATEFOLDER_DENIED "Nu s-a putut crea dosar nou: Eroare de permisiune." + IDS_CREATEFOLDER_CAPTION "Eroare ĂŽn timpul creării unui nou dosar" + IDS_DELETEITEM_CAPTION "Confirmare ștergere fișier" + IDS_DELETEFOLDER_CAPTION "Confirmare ștergere dosar" + IDS_DELETEITEM_TEXT "Sigur vreți să ștergeți '%1'?" + IDS_DELETEMULTIPLE_TEXT "Sigur vreți să ștergeți aceste %1 elemente?" + IDS_DELETESELECTED_TEXT "Sigur vreți să ștergeți elementul/elementele selectat(e)?" + IDS_TRASHITEM_TEXT "Sigur vreți să trimiteți '%1' ĂŽn Coșul de gunoi?" + IDS_TRASHFOLDER_TEXT "Sigur vreți să trimiteți dosarul '%1' și tot conținutul său ĂŽn Coșul de gunoi?" + IDS_TRASHMULTIPLE_TEXT "Sigur vreți să trimiteți aceste %1 elemente la Coșul de gunoi?" + IDS_CANTTRASH_TEXT "Elementul '%1' nu poate fi trimit la gunoi. Vreți să ĂŽl ștergeți definitiv ĂŽn schimb?" + IDS_OVERWRITEFILE_TEXT "Acest dosar deja conține un fișier numit '%1'.\n\nVreți să ĂŽl ĂŽnlocuiți" + IDS_OVERWRITEFILE_CAPTION "Confirmare ĂŽnlocuire fișier" + IDS_OVERWRITEFOLDER_TEXT "Acest dosar deja conține un sub-dosar cu numele '%1'.\n\n"\ + "Dacă fișierele din dosarul de destinație au același nume ca cele din\n"\ + "dosarul selectat, ele vor fi ĂŽnlocuite. Sigur vreți să copiați sau\n"\ + "mutați dosarul?" + + /* message box strings */ + IDS_RESTART_TITLE "Repornire" + IDS_RESTART_PROMPT "Vreți să reporniți sistemul?" + IDS_SHUTDOWN_TITLE "Închidere" + IDS_SHUTDOWN_PROMPT "Vreți să ĂŽnchideți computerul?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Meniu Start\\Programe" + IDS_PERSONAL "Documentele mele" + IDS_FAVORITES "Favorite" + IDS_STARTUP "Meniu Start\\Programe\\StartUp" + IDS_RECENT "Recente" + IDS_SENDTO "TrimitereLa" + IDS_STARTMENU "Meniu Start" + IDS_MYMUSIC "Muzica mea" + IDS_MYVIDEO "Filmele Mele" + IDS_DESKTOPDIRECTORY "Spațiu de lucru" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Modele" + IDS_APPDATA "Date Aplicații" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Setări locale\\Date Aplicații" + IDS_INTERNET_CACHE "Setări locale\\Fișiere internet temporare" + IDS_COOKIES "Cookie-uri" + IDS_HISTORY "Setări locale\\Istoric" + IDS_PROGRAM_FILES "Fișiere Program" + IDS_MYPICTURES "Fotografiile mele" + IDS_PROGRAM_FILES_COMMON "Fișiere Program\\Fișiere Comune" + IDS_COMMON_DOCUMENTS "Documente" + IDS_ADMINTOOLS "Meniu Start\\Programe\\Unelte administrative" + IDS_COMMON_MUSIC "Documente\\Muzica mea" + IDS_COMMON_PICTURES "Documente\\Fotografiile mele" + IDS_COMMON_VIDEO "Documente\\Filmele mele" + IDS_CDBURN_AREA "Setări locale\\Date Aplicații\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Locațiile mele ĂŽn rețea" + + IDS_NEWFOLDER "Dosar nou" + + IDS_DRIVE_FIXED "Disc local" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Disc de rețea" + + IDS_OPEN_WITH "Deschidere cu" + IDS_OPEN_WITH_CHOOSE "Alegere program..." + + IDS_SHELL_ABOUT_AUTHORS "&Autori" + IDS_SHELL_ABOUT_BACK "< &Înapoi" + FCIDM_SHVIEW_NEW "Nou" + FCIDM_SHVIEW_NEWFOLDER "Dosar" + FCIDM_SHVIEW_NEWLINK "Scurtătur&ă" + IDS_FOLDER_OPTIONS "Opțiuni dosar" + IDS_RECYCLEBIN_LOCATION "Locație Coș de gunoi" + IDS_RECYCLEBIN_DISKSPACE "Spațiu disponibil" + IDS_EMPTY_BITBUCKET "Golire Coș de gunoi" + IDS_PICK_ICON_TITLE "Alegere pictogramă" + IDS_PICK_ICON_FILTER "Fișiere pictogramă (*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Fișiere executabile\0*.exe\0" + IDS_DIRECTORY "Dosar" + IDS_VIRTUAL_DRIVER "Driver dispozitiv virtual" + IDS_BAT_FILE "Fișier serie de comenzi ReactOS" + IDS_CMD_FILE "Scriptură de comenzi ReactOS" + IDS_COM_FILE "Aplicație DOS" + IDS_CPL_FILE "Element Panou de Control" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Extensie aplicație" + IDS_DRV_FILE "Driver dispozitiv" + IDS_EXE_FILE "Aplicație" + IDS_FON_FILE "Fișier font" + IDS_TTF_FILE "Fișier font TrueType" + IDS_HLP_FILE "Fișier ajutor" + IDS_INI_FILE "Fișier setări" + IDS_LNK_FILE "Scurtătură" + IDS_SYS_FILE "Fișier de sistem" + + IDS_OPEN_VERB "Deschidere" + IDS_RUNAS_VERB "Rulare ca " + IDS_EDIT_VERB "Editare" + IDS_FIND_VERB "Căutare" + IDS_PRINT_VERB "Imprimare" + IDS_PLAY_VERB "Redare" + IDS_PREVIEW_VERB "Previzualizare" + + IDS_FILE_FOLDER "%u fișiere, %u dosare" + IDS_PRINTERS "Imprimante" + IDS_FONTS "Fonturi" + IDS_INSTALLNEWFONT "Instalare font nou..." + + IDS_DEFAULT_CLUSTER_SIZE "Mărime de alocare implicită" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END + +#pragma code_page(default) diff --git a/reactos/dll/win32/shell32_new/lang/ru-RU.rc b/reactos/dll/win32/shell32_new/lang/ru-RU.rc new file mode 100644 index 00000000000..daf4f2ce16b --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/ru-RU.rc @@ -0,0 +1,755 @@ +/* + * Copyright 1998 Juergen Schmied + * Copyright 2006 Vitaliy Margolen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Áîëüřčĺ çíŕ÷ęč", FCIDM_SHVIEW_BIGICON + MENUITEM "&Ěĺëęčĺ çíŕ÷ęč", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Ńďčńîę", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Ďîäđîáíî", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Ďđîńěîňđ" + BEGIN + MENUITEM "&Áîëüřčĺ çíŕ÷ęč", FCIDM_SHVIEW_BIGICON + MENUITEM "&Ěĺëęčĺ çíŕ÷ęč", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Ńďčńîę", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Ďîäđîáíî", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Óďîđ˙äî÷čňü &çíŕ÷ęč" + BEGIN + MENUITEM "Ďî &čěĺíč", 0x30 /* column 0 */ + MENUITEM "Ďî &ňčďó", 0x32 /* column 2 */ + MENUITEM "Ďî &đŕçěĺđó", 0x31 /* ... */ + MENUITEM "Ďî &äŕňĺ", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Ŕâňîěŕňč÷ĺńęč", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Â&űđîâí˙ňü çíŕ÷ęč", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Î&áíîâčňü", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "&Âńňŕâčňü", FCIDM_SHVIEW_INSERT + MENUITEM "Âńňŕâčňü &˙đëűę", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Ńâî&éńňâŕ", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Ďđîâîäíčę", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Îňęđűňü", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "&Âűđĺçŕňü", FCIDM_SHVIEW_CUT + MENUITEM "&Ęîďčđîâŕňü", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Ńîçäŕňü &˙đëűę", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Óäŕëčňü", FCIDM_SHVIEW_DELETE + MENUITEM "Ďĺđĺč&ěĺíîâŕňü", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "Ńâî&éńňâŕ", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Îáçîđ" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Îňěĺíŕ", 2, 134, 174, 50, 14, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Îáçîđ" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Ďŕďęŕ:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Ńîçäŕňü ďŕďęó", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Îňěĺíčňü", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Óâĺäîěëĺíčĺ" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Äŕ", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ä&ŕ äë˙ âńĺő", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Íĺň", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Îňěĺíŕ", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Î %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Âĺđńč˙ " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Äŕííŕ˙ âĺđńč˙ ReactOS çŕđĺăčńňđčđîâŕíŕ íŕ:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Äîńňóďíŕ˙ ôčçč÷ĺńęŕ˙ ďŕě˙ňü:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Đŕçđŕáîň÷čęč ReactOS:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Ââĺäčňĺ čě˙ ďđîăđŕěěű, ďŕďęč, äîęóěĺíňŕ čëč đĺńóđń Číňĺđíĺňŕ, č ReactOS îňęđîĺň čő.", 12289, 36, 11, 182, 18 + LTEXT "&Îňęđűňü:", 12305, 5, 39, 34, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 40, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Îá&çîđ...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ßđëűę" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Ňčď îáúĺęňŕ:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Đŕçěĺůĺíčĺ:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Îáúĺęň:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Đŕáî÷ŕ˙ ďŕďęŕ:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Á&űńňđűé âűçîâ:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Îęíî:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "&Ęîěĺíňŕđčé:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Íŕéňč îáúĺęň...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "Ńě&ĺíčňü çíŕ÷îę...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Äîďîëíčňĺëüíî...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Äîďîëíčňĺëüíűĺ ńâîéńňâŕ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Óńňŕíîâčňĺ íóćíűĺ ńâîéńňâŕ äë˙ ýňîăî ˙đëűęŕ.", -1, 5, 30, 210, 10 + CHECKBOX "Çŕďóńęŕňü ń äđóăčěč ó÷ĺňíűěč äŕííűěč", 14000, 25, 50, 150, 10 + LTEXT "Ďîçâîë˙ĺň čńďîëüçîâŕňü ýňîň ˙đëűę äë˙ çŕďóńęŕ ďđîăđŕěěű îň &čěĺíč ŕäěčíčńňđŕňîđŕ, â ňî ćĺ âđĺě˙ ďđîäîëćŕ˙ đŕáîňó îň ńâîĺăî čěĺíč, ÷ňî çŕůčůŕĺň ęîěďüţňĺđ îň íĺńŕíęöčîíčđîâŕííűő äĺéńňâčé äđóăčő ďđîăđŕěě.", -1, 50, 60, 175, 40 + CHECKBOX "Çŕďóń&ęŕňü â îňäĺëüíîé îáëŕńňč ďŕě˙ňč", 14001, 25, 104, 160, 10, WS_DISABLED + PUSHBUTTON "OK", IDOK, 54, 123, 50, 14, WS_VISIBLE + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 120, 123, 50, 14, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Îáůčĺ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Ňčď ôŕéëŕ:", 14004, 8, 35, 50, 10 + LTEXT "Ďŕďęŕ", 14005, 68, 35, 160, 10 + LTEXT "Đŕńďîëîćĺíčĺ:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Đŕçěĺđ:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Ńîäĺđćčň:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Ńîçäŕíî:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Ňîëüęî ÷ňĺíčĺ", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Ńęđűňî", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Îáůčĺ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Ňčď ôŕéëŕ:", 14004, 8, 35, 50, 10 + LTEXT "ôŕéë", 14005, 68, 35, 160, 10 + LTEXT "Ďđčëîćĺíčĺ:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Đŕçěĺůĺíčĺ:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Đŕçěĺđ:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Ńîçäŕí:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Čçěĺíĺí:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Îňęđűň:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Ŕňđčáóňű:", 14020, 8, 189, 45, 10 + CHECKBOX "Ňîëüęî &÷ňĺíčĺ", 14021, 58, 189, 67, 10 + CHECKBOX "Ńęđ&űňűé", 14022, 126, 189, 50, 10 + CHECKBOX "&Ŕđőčâíűé", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Âĺđńč˙" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Âĺđńč˙ ôŕéëŕ: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Îďčńŕíčĺ: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Ŕâňîđńęčĺ ďđŕâŕ: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Äîďîëíčňĺëüíűĺ ńâĺäĺíč˙: ", 14006, 6, 70, 222, 115 + LTEXT "Čě˙ ýëĺěĺíňŕ: ", 14007, 13, 82, 63, 10 + LTEXT "Çíŕ÷ĺíčĺ: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Îáůčĺ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Ňčď:", -1, 15, 49, 40, 10 + LTEXT "", 14001, 110, 49, 100, 10 + + LTEXT "Ôŕéëîâŕ˙ ńčńňĺěŕ:", -1, 15, 68, 86, 10 + LTEXT "", 14002, 110, 68, 100, 10 + + CONTROL "", 14013, "STATIC", SS_OWNERDRAW | SS_NOTIFY | SS_SUNKEN, 5, 90, 10, 10 + LTEXT "Çŕí˙ňî:", -1, 25, 90, 78, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "STATIC", SS_OWNERDRAW | SS_NOTIFY | SS_SUNKEN, 5, 105, 10, 10 + LTEXT "Ńâîáîäíî:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Ĺěęîńňü:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "STATIC", SS_OWNERDRAW | SS_NOTIFY | SS_SUNKEN, 20, 140, 200, 20 + + LTEXT "Äčńę %s", 14009, 100, 170, 52, 10 + PUSHBUTTON "Î÷čńňęŕ äčńęŕ", 14010, 166, 175, 64, 15, WS_TABSTOP + CHECKBOX "&Ńćčěŕňü äë˙ ýęîíîěčč ěĺńňŕ", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Đŕçđĺřčňü &číäĺęńčđîâŕíčĺ äčńęŕ äë˙ áűńňđîăî ďîčńęŕ", 14012, 15, 220, 216, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ńĺđâčń" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Ďđîâĺđęŕ äčńęŕ", -1, 5, 5, 230, 60 + LTEXT "Ďđîâĺđęŕ ňîěŕ íŕ íŕëč÷čĺ îřčáîę.", -1, 40, 25, 160, 20 + PUSHBUTTON "Âűďîëíčňü &ďđîâĺđęó...", 14000, 116, 45, 112, 15, WS_TABSTOP + GROUPBOX "Äĺôđŕăěĺíňŕöč˙ äčńęŕ", -1, 5, 65, 230, 60 + LTEXT "Äĺôđŕăěĺíňŕöč˙ ôŕéëîâ, őđŕí˙ůčőń˙ íŕ ýňîě ňîěĺ.", -1, 40, 85, 160, 20 + PUSHBUTTON "Âűďîëíčňü ä&ĺôđŕăěĺíňŕöčţ...", 14001, 116, 105, 112, 15, WS_TABSTOP + GROUPBOX "Ŕđőčâŕöč˙", -1, 5, 130, 230, 60 + LTEXT "Ŕđőčâŕöč˙ ôŕéëîâ, őđŕí˙ůčőń˙ íŕ ýňîě ňîěĺ.", -1, 40, 150, 160, 20 + PUSHBUTTON "Âűďîëíčňü &ŕđőčâŕöčţ...", 14002, 116, 170, 112, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Îáîđóäîâŕíčĺ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 252, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Çŕďóńę îň äđóăîăî čěĺíč" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Îň čěĺíč ęŕęîăî ďîëüçîâŕňĺë˙ âű őîňčňĺ çŕďóńňčňü ďđîăđŕěěó?", -1, 10, 19, 230, 20 + CHECKBOX "Ňĺęóůčé ďîëüçîâŕňĺëü %s", 14000, 10, 42, 210, 10 + LTEXT "Çŕůčňčňü ěîé ęîěďüţňĺđ č ěîč äŕííűĺ îň íĺńŕíęöčîíčđîâŕííîé äĺ˙ňĺëüíîńňč ďđîăđŕěě.", -1, 21, 57, 225, 20, WS_DISABLED + CHECKBOX "Äŕííŕ˙ îďöč˙ ěîćĺň çŕůčňčňü âŕř ęîěďüţňĺđ č äŕííűĺ îň âčđóńîâ, íî ďđîăđŕěěŕ ěîćĺň đŕáîňŕňü íĺďđŕâčëüíî", 14001, 25, 79, 221, 24, BS_MULTILINE | WS_DISABLED + CHECKBOX "Çŕďóńňčňü îň čěĺíč ńëĺäóţůĺăî ďîëüçîâŕňĺë˙:", 14002, 10, 110, 187, 10 + LTEXT "Čě˙ ďîëüçîâŕňĺë˙:", -1, 16, 133, 54, 10 + COMBOBOX 14003, 76, 130, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "...", 14004, 180, 130, 30, 14, WS_TABSTOP + LTEXT "Ďŕđîëü:", -1, 16, 152, 60, 10 + EDITTEXT 14005, 76, 148, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 148, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 59, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Îňěĺíŕ", 14008, 125, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ńâîéńňâŕ: Ęîđçčíŕ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Óńňŕíîâęč äë˙ âűáđŕííîăî đŕńďîëîćĺíč˙", -1, 10, 66, 220, 73 + RADIOBUTTON "&Äđóăîé đŕçěĺđ:", 14001, 17, 80, 80, 10, NOT WS_TABSTOP + EDITTEXT 14002, 100, 78, 65, 14, WS_TABSTOP | ES_NUMBER + LTEXT "&Ěŕęńčěŕëüíűé đŕçěĺđ(Ěá):", -1, 17, 95, 102, 10 + RADIOBUTTON "&Óíč÷ňîćŕňü ôŕéëű ńđŕçó ďîńëĺ óäŕëĺíč˙, íĺ ďîěĺůŕ˙ čő â ęîđçčíó.", 14003, 17, 108, 206, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Çŕďđŕřčâŕňü ďîäňâĺđćäĺíčĺ íŕ óäŕëĺíčĺ", 14004, 20, 145, 176, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Âűáîđ ďđîăđŕěěű" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Âűáĺđčňĺ ďđîăđŕěěó äë˙ îňęđűňč˙ ýňîăî ôŕéëŕ.", -1, 44, 12, 211, 10 + LTEXT "Ôŕéë: ", 14001, 44, 25, 188, 10 + GROUPBOX "Ďđîăđŕěěű", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Čńďîëüçîâŕňü ĺĺ äë˙ âńĺő ôŕéëîâ ňŕęîăî ňčďŕ", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Îáçîđ...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Îňěĺíŕ", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 238 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Îáůčĺ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Çŕäŕ÷č", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 24, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Îňîáđŕ&ćĺíčĺ ńďčńęŕ ňčďč÷íűő çŕäŕ÷ â ďŕďęŕő", 14001, 40, 24, 185, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Čńďîëüçîâŕňü îáű&÷íűĺ ďŕďęč ReactOS", 14002, 40, 36, 185, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Îáçîđ ďŕďîę", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 75, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Îňęđűâŕňü ďŕďęč â îäíîě č ňîě ćĺ îęíĺ", 14004, 40, 75, 185, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Î&ňęđűâŕňü ęŕćäóţ ďŕďęó â îňäĺëüíîě îęíĺ", 14005, 40, 87, 185, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Ůĺë÷ęč ěűřüţ", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Îň&ęđűâŕňü îäíčě ůĺë÷ęîě, âűäĺë˙ňü óęŕçŕňĺëĺě", 14007, 40, 120, 200, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Ďîä÷ĺđęčâ&ŕňü ďîäďčńč çíŕ÷ęîâ", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Ďîä÷ĺđęčâŕňü ďîäďčńč ç&íŕ÷ęîâ ďđč íŕâĺäĺíčč", 14009, 50, 144, 185, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Îňęđ&űâŕňü äâîéíűě, ŕ âűäĺë˙ňü îäíčě ůĺë÷ęîě", 14010, 40, 156, 195, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Âîńńňŕíîâčňü óěîë÷ŕíč˙", 14011, 148, 180, 104, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 238 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Âčä" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Ďđĺäńňŕâëĺíčĺ ďŕďîę", -1, 7, 10, 249, 60 +//ICON +LTEXT "Ěîćíî ďđčěĺíčňü âčä, âűáđŕííűé äë˙ ýňîé ďŕďęč, íŕďđčěĺđ, ""Ňŕáëčöŕ"" čëč ""Ďëčňęŕ"", ęî âńĺě ďŕďęŕě.", -1, 60, 24, 180, 20 +PUSHBUTTON "&Ďđčěĺíčňü ęî âńĺě ďŕďęŕě", 14001, 60, 50, 100, 14, WS_TABSTOP +PUSHBUTTON "&Ńáđîń äë˙ âńĺő ďŕďîę", 14002, 164, 50, 80, 14, WS_TABSTOP +LTEXT "Äîďîëíčňĺëüíűĺ ďŕđŕěĺňđű:", -1, 9, 78, 120, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "&Âîńńňŕíîâčňü óěîë÷ŕíč˙", 14004, 156, 216, 101, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 238 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Ňčďű ôŕéëîâ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "&Çŕđĺăčńňđčđîâŕííűĺ ňčďű ôŕéëîâ:", -1, 9, 7, 133, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Ńîçäŕňü", 14001, 147, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Óäŕëčňü", 14002, 202, 110, 50, 14, WS_TABSTOP +GROUPBOX "Îďčńŕíčĺ đŕńřčđĺíč˙ '%s'", 14003, 7, 130, 249, 70 +LTEXT "Îňęđűâŕňü â:", -1, 12, 142, 54, 10 +//ICON +LTEXT "Ďđčëîćĺíčĺ:", 14005, 100, 142, 54, 10 +PUSHBUTTON "&Čçěĺíčňü...", 14006, 180, 140, 63, 14, WS_TABSTOP +LTEXT "Ôŕéëű ń đŕńřčđĺíčĺě '%s' čěĺţň ňčď '%s'. Äë˙ čçěĺíĺíč˙ ďŕđŕěĺňđîâ âńĺő ôŕéëîâ '%s', íŕćěčňĺ ""Äîďîëíčňĺëüíî"".", 14007, 12, 155, 162, 36 +PUSHBUTTON "Äî&ďîëíčňĺëüíî", 14008, 180, 175, 63, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ďîäňâĺđćäĺíčĺ çŕěĺíű ôŕéëŕ" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Äŕ", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Äŕ - äë˙ &âńĺő", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Íĺň", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ďŕďęŕ óćĺ ńîäĺđćčň ôŕéë ""%2"".", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Ďŕďęŕ óćĺ ńîäĺđćčň äîńňóďíűé ňîëüęî äë˙ ÷ňĺíč˙ ôŕéë ""%2"".", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Ďŕďęŕ óćĺ ńîäĺđćčň ńčńňĺěíűé ôŕéë ""%2"".", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Çŕěĺíčňü čěĺţůčéń˙ ôŕéë", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(äŕňŕ č đŕçěĺđ íĺčçâĺńňíű)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "ńëĺäóţůčě ôŕéëîě?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(äŕňŕ č đŕçěĺđ íĺčçâĺńňíű)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Âűőîä čç ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Âű äĺéńňâčňĺëüíî őîňčňĺ âűéňč čç ńčńňĺěű?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "Â&űőîä", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Îňęëţ÷ĺíčĺ ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Âű äĺéńňâčňĺëüíî őîňčňĺ âűďîëíčňü îňęëţ÷ĺíčĺ?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "Îňęëţ&÷ĺíčĺ", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ŕâňîçŕďóńę" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Âűáĺđčňĺ &ňčď ńîäĺđćčěîăî, ŕ çŕňĺě äĺéńňâčĺ, ŕâňîěŕňč÷ĺńęč âűďîëí˙ĺěîĺ ďđč ĺăî îáíŕđóćĺíčč â ýňîě óńňđîéńňâĺ:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Äĺéńňâč˙", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "&Âűáĺđčňĺ âűďîëí˙ĺěîĺ äĺéńňâčĺ:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Âűäŕâŕňü &çŕďđîń íŕ âűáîđ âűďîëí˙ĺěîăî äĺéńňâč˙", 1006, 14, 177, 202, 10 + PUSHBUTTON "Âîńńňŕíîâčňü óěîë&÷ŕíč˙", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ńěĺřŕííîĺ ńîäĺđćčěîĺ" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Íŕ ýňîě äčńęĺ čëč óńňđîéńňâĺ őđŕíčňń˙ ńîäĺđćčěîĺ đŕçëč÷íűő ňčďîâ.", 1001, 32, 7, 191, 20 + LTEXT "Ęŕęîĺ äĺéńňâčĺ ńëĺäóĺň âűďîëí˙ňü ReactOS?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ńěĺřŕííîĺ ńîäĺđćčěîĺ" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS ěîćĺň âńĺăäŕ âűďîëí˙ňü îäíî č ňî ćĺ äĺéńňâčĺ, ęîăäŕ âű âńňŕâë˙ĺňĺ äčńę čëč ďîäęëţ÷ŕĺňĺ óńňđîéńňâî ń ôŕéëŕěč ńëĺäóţůĺăî ňčďŕ:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Ęŕęîĺ äĺéńňâčĺ ńëĺäóĺň âűďîëí˙ňü ReactOS?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Âńĺăäŕ âűďîëí˙ňü âűáđŕííîĺ äĺéńňâčĺ.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ŕâňîçŕďóńę" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS ěîćĺň âűďîëí˙ňü îäíî č ňî ćĺ äĺéńňâčĺ ďđč ęŕćäîě ďîäęëţ÷ĺíčč ýňîăî óńňđîéńňâŕ.", 1001, 32, 7, 190, 22 + LTEXT "&Ęŕęîĺ äĺéńňâčĺ ńëĺäóĺň âűďîëí˙ňü ReactOS?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Âńĺăäŕ âűďîëí˙ňü âűáđŕííîĺ äĺéńňâčĺ", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Çŕâĺđřĺíčĺ đŕáîňű ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Âűáĺđčňĺ ćĺëŕĺěîĺ äĺéńňâčĺ.", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Ńîőđŕíčňü ńĺŕíń, îáĺńďĺ÷čâŕ˙ đŕáîňó ęîěďüţňĺđŕ â ńď˙ůĺě đĺćčěĺ č äŕííűěč â ďŕě˙ňč. Ďđč íŕćŕňčč íŕ ëţáóţ ęëŕâčřó čëč ďĺđĺäâčćĺíčč ěűřč ęîěďüţňĺđ âîçâđŕňčňń˙ â îáű÷íűé đĺćčě.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Ńďđŕâęŕ", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ôîđěŕňčđîâŕíčĺ" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Íŕ÷ŕňü", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Çŕęđűňü", IDCANCEL, 118, 198, 60, 14 + LTEXT "&Ĺěęîńňü:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Ôŕéëîâŕ˙ ńčńňĺěŕ:", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Đŕçěĺđ ęëŕńňĺđŕ:", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Ěĺňęŕ ňîěŕ:", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "&Ńďîńîáű ôîđěŕňčđîâŕíč˙:", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Áűńňđîĺ (î÷čńňęŕ îăëŕâëĺíč˙)", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Čńďîëüçîâŕňü ńćŕňčĺ", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 232, 111 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ďđîâĺđęŕ äčńęŕ" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Çŕďóńę", IDOK, 101, 91, 60, 14 + GROUPBOX "Ďŕđŕěĺňđű ďđîâĺđęč äčńęŕ", -1, 7, 5, 218, 50 + PUSHBUTTON "Îňěĺíŕ", IDCANCEL, 165, 91, 60, 14 + AUTOCHECKBOX "&Ŕâňîěŕňč÷ĺńęč čńďđŕâë˙ňü ńčńňĺěíűĺ îřčáęč", 14000, 16, 19, 178, 10 + AUTOCHECKBOX "&Ďđîâĺđ˙ňü č âîńňŕíŕâëčâŕňü ďîâđĺćäĺííűĺ ńĺęňîđŕ", 14001, 16, 35, 200, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 218, 8 + LTEXT "", 14003, 7, 75, 218, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Čçěĺíĺíčĺ çíŕ÷ęŕ" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Čě˙ ôŕéëŕ:", -1, 7, 14, 208, 10 + PUSHBUTTON "Îáçîđ...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Çíŕ÷ęč:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Îňěĺíŕ",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Čě˙" + IDS_SHV_COLUMN2 "Đŕçěĺđ" + IDS_SHV_COLUMN3 "Ňčď" + IDS_SHV_COLUMN4 "Čçěĺí¸í" + IDS_SHV_COLUMN5 "Ŕňđčáóňű" + IDS_SHV_COLUMN6 "Ďîëíűé îáú¸ě" + IDS_SHV_COLUMN7 "Ńâîáîäíî" + IDS_SHV_COLUMN8 "Čě˙" + IDS_SHV_COLUMN9 "Ęîěěĺíňŕđčé" + IDS_SHV_COLUMN10 "Âëŕäĺëĺö" + IDS_SHV_COLUMN11 "Ăđóďďŕ" + IDS_SHV_COLUMN12 "Čě˙ ôŕéëŕ" + IDS_SHV_COLUMN13 "Ęŕňĺăîđč˙" + IDS_SHV_COLUMN_DELFROM "Čçíŕ÷ŕëüíîĺ đŕńďîëîćĺíčĺ" + IDS_SHV_COLUMN_DELDATE "Äŕňŕ óäŕëĺíč˙" + IDS_SHV_COLUMN_FONTTYPE "Ňčď řđčôňŕ" + IDS_SHV_COLUMN_WORKGROUP "Đŕáî÷ŕ˙ ăđóďďŕ" + IDS_SHV_NETWORKLOCATION "Ńĺňĺâîĺ đŕńďîëîćĺíčĺ" + IDS_SHV_COLUMN_DOCUMENTS "Äîęóěĺíňű" + IDS_SHV_COLUMN_STATUS "Ńîńňî˙íčĺ" + IDS_SHV_COLUMN_COMMENTS "Ęîěĺíňŕđčč" + IDS_SHV_COLUMN_LOCATION "Đŕńďîëîćĺíčĺ" + IDS_SHV_COLUMN_MODEL "Ěîäĺëü" + + /* special folders */ + IDS_DESKTOP "Đŕáî÷čé ńňîë" + IDS_MYCOMPUTER "Ěîé ęîěďüţňĺđ" + IDS_RECYCLEBIN_FOLDER_NAME "Ęîđçčíŕ" + IDS_CONTROLPANEL "Ďŕíĺëü óďđŕâëĺíč˙" + IDS_ADMINISTRATIVETOOLS "Ŕäěčíčńňđčđîâŕíčĺ" + + /* context menus */ + IDS_VIEW_LARGE "&Áîëüřčĺ çíŕ÷ęč" + IDS_VIEW_SMALL "&Ěĺëęčĺ çíŕ÷ęč" + IDS_VIEW_LIST "&Ńďčńîę" + IDS_VIEW_DETAILS "&Ďîäđîáíî" + IDS_SELECT "&Âűáđŕňü" + IDS_OPEN "&Îňęđűňü" + IDS_CREATELINK "Ńîçäŕňü &˙đëűę" + IDS_COPY "Ęîďčđîâŕňü" + IDS_DELETE "Óäŕëčňü" + IDS_PROPERTIES "Ńâîéńňâŕ" + IDS_CUT "Âűđĺçŕňü" + IDS_RESTORE "Âîńňŕíîâčňü" + IDS_FORMATDRIVE "Ôîđěŕňčđîâŕňü..." + IDS_RENAME "Ďĺđĺčěĺíîâŕňü" + IDS_INSERT "Âńňŕâčňü" + + IDS_CREATEFOLDER_DENIED "Íĺâîçěîćíî ńîçäŕňü ďŕďęó - íĺň ďîëíîěî÷čé." + IDS_CREATEFOLDER_CAPTION "Îřčáęŕ âî âđĺě˙ ńîçäŕíč˙ ďŕďęč" + IDS_DELETEITEM_CAPTION "Ďîäňâĺđćäĺíčĺ óäŕëĺíč˙ ôŕéëŕ" + IDS_DELETEFOLDER_CAPTION "Ďîäňâĺđćäĺíčĺ óäŕëĺíč˙ ďŕďęč" + IDS_DELETEITEM_TEXT "Óäŕëčňü '%1'?" + IDS_DELETEMULTIPLE_TEXT "Óäŕëčňü ýňč îáüĺęňű (%1?" + IDS_DELETESELECTED_TEXT "Âű äĺéńňâčňĺëüíî őîňčňĺ óäŕëčňü âűáđŕííűé ýëĺěĺíňű(ű)?" + IDS_TRASHITEM_TEXT "Âű äĺéńňâčëüíî őîňčňĺ ďîěĺńňčňü '%1' â Ęîđçčíó?" + IDS_TRASHFOLDER_TEXT "Âű äĺéńňâčňĺëüíî őîňčňĺ ďîěĺńňčňü '%1' č âńĺ ńîäĺđćŕůčĺń˙ ôŕéëű â Ęîđçčíó?" + IDS_TRASHMULTIPLE_TEXT "Âű äĺéńňâčňĺëüíî őîňčňĺ ďĺđĺěĺńňčňü ýëĺěĺíňű %1 â Ęîđçčíó?" + IDS_CANTTRASH_TEXT "Ôŕéë '%1' íĺ ěîćĺň áűňü ďîěĺůĺí â Ęîđçčíó. Óäŕëčňü áĺçâîçâđŕňíî?" + IDS_OVERWRITEFILE_TEXT " ýňîé ďŕďęĺ óćĺ čěĺĺňń˙ ýëĺěĺíň '%1'.\n\nÇŕěĺíčňü ĺăî?" + IDS_OVERWRITEFILE_CAPTION "Ďîäňâĺđćäĺíčĺ çŕěĺíű ôŕéëŕ" + IDS_OVERWRITEFOLDER_TEXT "Ýňŕ ďŕďęŕ óćĺ ńîäĺđćčň ďŕďęó ń čěĺíĺě '%1'.\n\n"\ + "Ĺńëč â ďŕďęĺ ńîäĺđćŕňń˙ ôŕéëű ń îäčíŕęîâűěč čěĺíŕěč, ňî îíč ňŕę ćĺ áóäóň\n"\ + "çĺěĺíĺíű. Ďđîäîëćčňü?" + + /* message box strings */ + IDS_RESTART_TITLE "Ďĺđĺçŕăđóçčňü" + IDS_RESTART_PROMPT "Âű äĺéńňâčňĺëüíî őîňčňĺ ďĺđĺçŕăđóçčňü ReactOS?" + IDS_SHUTDOWN_TITLE "Âűęëţ÷čňü ďčňŕíčĺ" + IDS_SHUTDOWN_PROMPT "Çŕęîí÷čňü đŕáîňó ń ReactOS?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Ăëŕâíîĺ ěĺíţ\\Ďđîăđŕěěű" + IDS_PERSONAL "Ěîč äîęóěĺíňű" + IDS_FAVORITES "Čçáđŕííîĺ" + IDS_STARTUP "Ăëŕâíîĺ ěĺíţ\\Ďđîăđŕěěű\\Ŕâňîçŕăđóçęŕ" + IDS_RECENT "Íĺäŕâíĺĺ" + IDS_SENDTO "Îňďđŕâčňü" + IDS_STARTMENU "Ăëŕâíîĺ ěĺíţ" + IDS_MYMUSIC "Ěî˙ ěóçűęŕ" + IDS_MYVIDEO "Ěîč ôčëüěű" + IDS_DESKTOPDIRECTORY "Đŕáî÷čé ńňîë" + IDS_NETHOOD "Ńĺňĺâîĺ îęđóćĺíčĺ" + IDS_TEMPLATES "Řŕáëîíű" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "Ďđčíňĺđű" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "Ěîč đčńóíęč" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Îáůčĺ äîęóěĺíňű" + IDS_ADMINTOOLS "Ăëŕâíîĺ ěĺíţ\\Ďđîăđŕěěű\\Ŕäěčíčńňđčđîâŕíčĺ" + IDS_COMMON_MUSIC "Îáůčĺ äîęóěĺíňű\\Ěî˙ ěóçűęŕ" + IDS_COMMON_PICTURES "Îáůčĺ äîęóěĺíňű\\Ěîč đčńóíęč" + IDS_COMMON_VIDEO "Îáůčĺ äîęóěĺíňű\\Ěîč ôčëüěű" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Ńĺňĺâîĺ îęđóćĺíčĺ" + + IDS_NEWFOLDER "Íîâŕ˙ ďŕďęŕ" + + IDS_DRIVE_FIXED "Ëîęŕëüíűé äčńę" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Ńĺňĺâîé äčńę" + + IDS_OPEN_WITH "Îňęđűňü ń ďîěîůüţ" + IDS_OPEN_WITH_CHOOSE "Âűáđŕňü ďđîăđŕěěó..." + + IDS_SHELL_ABOUT_AUTHORS "&Ŕâňîđű" + IDS_SHELL_ABOUT_BACK "< &Íŕçŕä" + FCIDM_SHVIEW_NEW "Ńîçäŕňü" + FCIDM_SHVIEW_NEWFOLDER "&Ďŕďęŕ" + FCIDM_SHVIEW_NEWLINK "&ßđëűę" + IDS_FOLDER_OPTIONS "Ńâîéńňâŕ ďŕďęč" + IDS_RECYCLEBIN_LOCATION "Đŕńďîëîćĺíčĺ Ęîđçčíű" + IDS_RECYCLEBIN_DISKSPACE "Äîńňóďíîĺ ďđîńňđŕíńňâî" + IDS_EMPTY_BITBUCKET "Î÷čńňčňü ęîđçčíó" + IDS_PICK_ICON_TITLE "Âűáđŕňü çíŕ÷îę" + IDS_PICK_ICON_FILTER "Ôŕéëű çíŕ÷ęîâ(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Čńďîëí˙ĺěűĺ ôŕéëű\0*.exe\0" + IDS_DIRECTORY "Ďŕďęŕ" + IDS_VIRTUAL_DRIVER "Äđŕéâĺđ âčđňóŕëüíîăî óńňđîéńňâŕ" + IDS_BAT_FILE "Ďŕęĺňíűé ôŕéë ReactOS" + IDS_CMD_FILE "Ęîěŕíäíűé ńęđčďň ReactOS" + IDS_COM_FILE "Ďđčëîćĺíčĺ Dos" + IDS_CPL_FILE "Ŕďëĺň ďŕíĺëč óďđŕâëĺíč˙" + IDS_CUR_FILE "Ęóđńîđ" + IDS_DLL_FILE "Đŕńřčđĺíčĺ ďđčëîćĺíč˙" + IDS_DRV_FILE "Äđŕéâĺđ óńňđîéńňâŕ" + IDS_EXE_FILE "Ďđčëîćĺíčĺ" + IDS_FON_FILE "Ôŕéë řđčôňŕ" + IDS_TTF_FILE "Ôŕéë řđčôňŕ TrueType" + IDS_HLP_FILE "Ôŕéë ńďđŕâęč" + IDS_INI_FILE "Ôŕéë ęîíôčăóđŕöčč" + IDS_LNK_FILE "ßđëűę" + IDS_SYS_FILE "Ńčńňĺěíűé ôŕéë" + + IDS_OPEN_VERB "Îňęđűňü" + IDS_RUNAS_VERB "Çŕďóńňčňü ęŕę " + IDS_EDIT_VERB "Čçěĺíčňü" + IDS_FIND_VERB "Ďîčńę" + IDS_PRINT_VERB "Ďĺ÷ŕňü" + IDS_PLAY_VERB "Âîńďđîčçâĺńňč" + IDS_PREVIEW_VERB "Ďđĺäďđîńěîňđ" + + IDS_FILE_FOLDER "%u ôŕéëîâ, %u ďŕďîę" + IDS_PRINTERS "Ďđčíňĺđű" + IDS_FONTS "Řđčôňű" + IDS_INSTALLNEWFONT "Óńňŕíîâčňü íîâűé řđčôň..." + + IDS_DEFAULT_CLUSTER_SIZE "Âűäĺë˙ĺěűé ďî óěîë÷ŕíčţ đŕçěĺđ" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/sk-SK.rc b/reactos/dll/win32/shell32_new/lang/sk-SK.rc new file mode 100644 index 00000000000..848d343ecdd --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/sk-SK.rc @@ -0,0 +1,764 @@ +/* TRANSLATOR : Mário Kačmár /Mario Kacmar/ aka Kario (kario@szm.sk) + * NOTE : partially translated + * TRANSLATED : 26-12-2007 + * LAST CHANGE: 31-05-2010 + */ + +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Vežké ikony", FCIDM_SHVIEW_BIGICON + MENUITEM "&Malé ikony", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Zoznam", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Podrobnosti", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Zobrazi" + BEGIN + MENUITEM "&Vežké ikony", FCIDM_SHVIEW_BIGICON + MENUITEM "&Malé ikony", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Zoznam", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Podrobnosti", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "&Usporiada ikony" + BEGIN + MENUITEM "&Názov", 0x30 /* column 0 */ + MENUITEM "&Typ", 0x32 /* column 2 */ + MENUITEM "&Vežkos", 0x31 /* ... */ + MENUITEM "&Zmenené", 0x33 + MENUITEM SEPARATOR + MENUITEM "Usporiada &automaticky", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Zarovna ikony", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "&Obnovi", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "&Prilepi", FCIDM_SHVIEW_INSERT + MENUITEM "Prilepi od&kaz", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Vl&astnosti", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Preskúma", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Otvori", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "&Vystrihnú", FCIDM_SHVIEW_CUT + MENUITEM "&Kopírova", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Vytvori o&dkaz", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Odstráni", FCIDM_SHVIEW_DELETE + MENUITEM "Pre&menova", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "Vl&astnosti", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Vyhžada priečinok" //Browse for Folder +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Zruši", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Vyhžada priečinok" //Browse for Folder +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Priečinok:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Vytvori nový priečinok", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Zruši", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Správa" //Message +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Án&o", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Áno pre &všetky", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Zruši", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Čo je %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Verzia " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Táto verzia systému ReactOS je registrovaná pre:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Nainštalovaná fyzická pamä:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Systém ReactOS pre Vám pripravili:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Spustenie" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Zadajte názov programu, priečinka, dokumentu alebo internetového zdroja a systém ReactOS ho otvorí.", 12289, 36, 11, 182, 18 + LTEXT "&Otvori:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "Zruši", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&Prehžadáva...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Odkaz" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Typ cieža:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Umiestnenie cieža:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "&Ciež:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "Z&ača v priečinku:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "&Klávesová skratka:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Sp&usti:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "Pozná&mka:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Hžada ciež...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Zmeni ikonu...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Spresni...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Rozšírené vlastnosti" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Vyberte rozšírené vlastnosti určené pre tento odkaz.", -1, 5, 30, 210, 10 + CHECKBOX "&Spusti s inými povereniami", 14000, 25, 50, 150, 10 + LTEXT "Táto možnos umožňuje spusti tento odkaz ako iný používatež, alebo pokračova so svojím používatežským oprávnením, ale s ochranou počítača a údajov pred neoprávnenými aktivitami programu.", -1, 50, 60, 170, 40 + CHECKBOX "Spusti v oddelenom pa&mäovom priestore", 14001, 25, 100, 190, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Preruši", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Všeobecné" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Typ:", 14004, 8, 35, 50, 10 + LTEXT "Priečinok", 14005, 68, 35, 160, 10 + LTEXT "Umiestnenie:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Vežkos:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Obsahuje:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Vytvorený:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Iba na čítanie", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Skrytý", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Všeobecné" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Typ súboru:", 14004, 8, 35, 50, 10 + LTEXT "Súbor", 14005, 68, 35, 160, 10 + LTEXT "Otvori programom:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Umiestnenie:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Vežkos:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Vytvorený:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Zmenený:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Otvorený:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Atribúty:", 14020, 8, 189, 45, 10 + CHECKBOX "&Iba na čítanie", 14021, 58, 189, 67, 10 + CHECKBOX "&Skrytý", 14022, 126, 189, 50, 10 + CHECKBOX "&Archívny", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Verzia" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Verzia súboru: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Popis: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Autorské práva: ", 14004, 10, 46, 66, 10 //Copyright + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Iné informácie o verzii: ", 14006, 6, 70, 222, 115 + LTEXT "Názov položky: ", 14007, 13, 82, 50, 10 + LTEXT "Hodnota: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Všeobecné" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Typ:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Systém súborov:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Využité miesto:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Vožné miesto:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Kapacita:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Jednotka %s", 14009, 100, 170, 45, 10 + PUSHBUTTON "&Čistenie disku", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Ušetri miesto na disku &kompresiou jednotky", 14011, 10, 205, 180, 10, WS_DISABLED + CHECKBOX "&Povoli indexovanie pre tento disk, a zrýchli tak hžadanie súborov", 14012, 10, 220, 225, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Nástroje" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Kontrola chýb", -1, 5, 5, 230, 60 + LTEXT "Umožňuje nájs chyby na zväzku.", -1, 40, 25, 160, 20 + PUSHBUTTON "&Skontrolova...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentácia", -1, 5, 65, 230, 60 + LTEXT "Defragmentuje súbory na zväzku.", -1, 40, 85, 160, 20 + PUSHBUTTON "&Defragmentova...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Zálohovanie", -1, 5, 130, 230, 60 + LTEXT "Zálohuje súbory na zväzku.", -1, 40, 150, 160, 20 + PUSHBUTTON "&Zálohova...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardvér" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Spusti ako" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Ktoré používatežské konto chcete použi k spusteniu tohto programu?", -1, 10, 20, 220, 20 + CHECKBOX "Aktuálny používatež %s", 14000, 10, 45, 150, 10 + LTEXT "Chráni počítač a údaje pred neoprávnenými aktivitami programu", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Nasledujúci používatež:", 14002, 10, 100, 90, 10 + LTEXT "Meno používateža:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Heslo:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Zruši", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Kôš - vlastnosti" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Nastavenia pre zvolené umiestnenie", -1, 10, 72, 220, 70 + RADIOBUTTON "&Vlastná vežkos:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "&Maximálna vežkos (MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Súbory nepremiestňova do &koša. Zmazané súbory hneď odstráni.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "Zobrazova &dialógové okno potvrdenia odstránenia", 14004, 20, 155, 196, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Otvori v programe" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Vyberte program, v ktorom sa má otvori tento súbor:", -1, 44, 12, 211, 10 + LTEXT "Súbor: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programy", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "N&a otvorenie týchto súborov vždy použi vybratý program", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Prehžadáva...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Zruši", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Všeobecné" //General +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Úlohy", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Zobrazi" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Typy súborov" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registrované &typy súborov:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Nový", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "O&dstráni", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Podrobnosti o prípone '%s'", 14003, 7, 130, 249, 70 //Details for '%s' extension +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Zmeni...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Potvrdenie nahradenia súboru" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Án&o", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Áno pre &všetky", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Nie", IDNO, 150, 122, 60, 14 + PUSHBUTTON "&Zruši", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Tento priečinok už obsahuje súbor s názvom '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Tento priečinok už obsahuje súbor s názvom '%2', ktorý je určený iba na čítanie.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Tento priečinok už obsahuje systémový súbor s názvom '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Chcete nahradi existujúci súbor", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(neznámy dátum a vežkos)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "týmto súborom?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(neznámy dátum a vežkos)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Odhlási ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ste si istý, že sa chcete odhlási?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "O&dhlási", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Zruši", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Odpoji ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Určite chcete odpoji?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Odpoji", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Zruši", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Zmiešaný obsah" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Tento disk alebo zariadenie obsahuje viac ako len jeden typ obsahu.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Zruši", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Zmiešaný obsah" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Čo má systém ReactOS urobi?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Vždy vykona zvolenú akciu.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Zruši", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Automatické prehrávanie" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "Čo má systém ReactOS &urobi?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Vždy vykona zvolenú akciu.", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Zruši", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Vypnutie systému ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Čo chcete aby počítač urobil?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Zruši", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Pomocník", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Formát" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Spusti", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Zavrie", IDCANCEL, 118, 198, 60, 14 + LTEXT "&Kapacita:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Súborový systé&m:", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Vežkos alokačnej jednotky:", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Názov zväzku", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Možnosti &formátovania", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Rýchle formátovanie", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "Z&apnú kompresiu", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Kontrola disku" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Spusti", IDOK, 53, 100, 60, 14 + GROUPBOX "Možnosti kontroly disku", -1, 7, 6, 179, 50 + PUSHBUTTON "Zruši", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "&Automaticky opravi chyby v systéme súborov", 14000, 16, 15, 165, 10 + AUTOCHECKBOX "Vy&hžada a pokúsi sa obnovi chybné sektory", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Zmena ikony" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Názov súboru:", -1, 7, 14, 208, 10 + PUSHBUTTON "&Prehžadáva...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Ikony:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Zruši",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Súbor" + IDS_SHV_COLUMN2 "Vežkos" + IDS_SHV_COLUMN3 "Typ" + IDS_SHV_COLUMN4 "Modifikovaný" + IDS_SHV_COLUMN5 "Atribúty" + IDS_SHV_COLUMN6 "Vežkos" + IDS_SHV_COLUMN7 "Vežkos k dispozícii" + IDS_SHV_COLUMN8 "Názov" //Name + IDS_SHV_COLUMN9 "Poznámky" //Comments + IDS_SHV_COLUMN10 "Vlastník" + IDS_SHV_COLUMN11 "Skupina" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Kategória" + IDS_SHV_COLUMN_DELFROM "Pôvod" //Pôvodné umiestnenie + IDS_SHV_COLUMN_DELDATE "Odstránený" //Dátum zmazania + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Dokumenty" + IDS_SHV_COLUMN_STATUS "Stav" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Pracovná plocha" + IDS_MYCOMPUTER "Tento počítač" + IDS_RECYCLEBIN_FOLDER_NAME "Kôš" + IDS_CONTROLPANEL "Ovládací panel" + IDS_ADMINISTRATIVETOOLS "Nástroje na správu" + + /* context menus */ + IDS_VIEW_LARGE "&Vežké ikony" + IDS_VIEW_SMALL "&Malé ikony" + IDS_VIEW_LIST "&Zoznam" + IDS_VIEW_DETAILS "&Podrobnosti" + IDS_SELECT "Vybra" + IDS_OPEN "&Otvori" + IDS_CREATELINK "Vytvori o&dkaz" + IDS_COPY "&Kopírova" + IDS_DELETE "Odstráni" + IDS_PROPERTIES "Vl&astnosti" + IDS_CUT "&Vystrihnú" + IDS_RESTORE "&Obnovi" + IDS_FORMATDRIVE "Formátova..." + IDS_RENAME "Premenova" + IDS_INSERT "Vloži" + + IDS_CREATEFOLDER_DENIED "Nie je možné vytvori nový priečinok: Prístup zamietnutý." + IDS_CREATEFOLDER_CAPTION "Chyba počas vytvárania nového priečinka" + IDS_DELETEITEM_CAPTION "Potvrdenie odstránenia súboru" + IDS_DELETEFOLDER_CAPTION "Potvrdenie odstránenia priečinka" + IDS_DELETEITEM_TEXT "Naozaj chcete vymaza '%1'?" + IDS_DELETEMULTIPLE_TEXT "Naozaj chcete vymaza tieto %1 položky?" + IDS_DELETESELECTED_TEXT "Naozaj chcete vymaza vybranú/é položku/y?" + IDS_TRASHITEM_TEXT "Naozaj chcete odosla '%1' do koša?" + IDS_TRASHFOLDER_TEXT "Naozaj chcete odosla '%1' a všetko čo obsahuje do koša?" + IDS_TRASHMULTIPLE_TEXT "Naozaj chcete odosla tieto %1 položky do koša?" + IDS_CANTTRASH_TEXT "Položka '%1' nemôže by odoslaná do koša. Chcete ju namiesto toho vymaza?" + IDS_OVERWRITEFILE_TEXT "Tento priečinok už obsahuje súbor s názvom '%1'.\n\nChcete ho nahradi?" + IDS_OVERWRITEFILE_CAPTION "Potvrdenie prepísania súboru" + IDS_OVERWRITEFOLDER_TEXT "Tento priečinok už obsahuje priečinok s názvom '%1'.\n\n"\ + "Ak budú ma súbory v ciežovom priečinku rovnaké názvy ako súbory\n"\ + "vo vybranom priečinku, tak budú nahradené. Stále chcete presunú\n"\ + "alebo skopírova priečinok?" + + /* message box strings */ + IDS_RESTART_TITLE "Reštartova" + IDS_RESTART_PROMPT "Naozaj chcete reštartova systém?" + IDS_SHUTDOWN_TITLE "Vypnú" + IDS_SHUTDOWN_PROMPT "Naozaj chcete vypnú počítač?" + IDS_LOGOFF_TITLE "Odhlási" + IDS_LOGOFF_PROMPT "Naozaj sa chcete odhlási?" + + /* shell folder path default values */ + IDS_PROGRAMS "Ponuka Štart\\Programy" + IDS_PERSONAL "Moje dokumenty" + IDS_FAVORITES "Obžúbené položky" + IDS_STARTUP "Ponuka Štart\\Programy\\Po spustení" + IDS_RECENT "Recent" + IDS_SENDTO "Odosla do" + IDS_STARTMENU "Ponuka Štart" + IDS_MYMUSIC "Hudba" + IDS_MYVIDEO "Videá" + IDS_DESKTOPDIRECTORY "Pracovná plocha" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "Obrázky" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Ponuka Štart\\Programy\\Nástroje na správu" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Miesta v sieti" + + IDS_NEWFOLDER "Nový priečinok" + + IDS_DRIVE_FIXED "Lokálny disk" + IDS_DRIVE_CDROM "Jednotka CD" + IDS_DRIVE_NETWORK "Sieový disk" + + IDS_OPEN_WITH "Otvori v progra&me" + IDS_OPEN_WITH_CHOOSE "&Vybra program..." + + IDS_SHELL_ABOUT_AUTHORS "&Autori" + IDS_SHELL_ABOUT_BACK "< &Spä" + FCIDM_SHVIEW_NEW "&Nový" + FCIDM_SHVIEW_NEWFOLDER "&Priečinok" + FCIDM_SHVIEW_NEWLINK "&Odkaz" + IDS_FOLDER_OPTIONS "Možnosti priečinka" + IDS_RECYCLEBIN_LOCATION "Umiestnenia Koša" //Recycle Bin Location + IDS_RECYCLEBIN_DISKSPACE "Dostupné miesto" + IDS_EMPTY_BITBUCKET "Vyprázdni Kôš" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Súbory ikon(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Spustitežné súbory\0*.exe\0" + IDS_DIRECTORY "Priečinok" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "Dávkový súbor systému ReactOS" + IDS_CMD_FILE "Príkazový skript systému ReactOS" + IDS_COM_FILE "DOS aplikácia" + IDS_CPL_FILE "Položka ovládacieho panela" + IDS_CUR_FILE "Kurzor" + IDS_DLL_FILE "Rozšírenie aplikácie" + IDS_DRV_FILE "Ovládač zariadenia" + IDS_EXE_FILE "Aplikácia" + IDS_FON_FILE "Súbor písma" + IDS_TTF_FILE "Súbor písma TrueType" + IDS_HLP_FILE "Súbor pomocníka" + IDS_INI_FILE "Konfiguračné nastavenia" + IDS_LNK_FILE "Odkaz" + IDS_SYS_FILE "Systémový súbor" + + IDS_OPEN_VERB "Otvori" + IDS_RUNAS_VERB "Spusti ako " + IDS_EDIT_VERB "Upravi" + IDS_FIND_VERB "Find" //Nájs, Hžada, Vyhžada ??? + IDS_PRINT_VERB "Tlači" + IDS_PLAY_VERB "Prehra" + IDS_PREVIEW_VERB "Preview" //Náhžad, Ukážka, Prezrie ??? + + IDS_FILE_FOLDER "súbory: %u, priečinky: %u" + IDS_PRINTERS "Tlačiarne" + IDS_FONTS "Písma" + IDS_INSTALLNEWFONT "&Nainštalova nové písmo..." + + IDS_DEFAULT_CLUSTER_SIZE "Predvolená alokačná vežkos" //Default allocation size + IDS_COPY_OF "Kópia" //Copy of + + // There is no Windows program configured to open this type of file. + IDS_SHLEXEC_NOASSOC "Neexistuje žiadny program nakonfigurovaný tak, aby otváral tento typ súborov." + // Na otváranie tohto typu súboru nie je nakonfigurovaný žiadny program systému Windows. +END diff --git a/reactos/dll/win32/shell32_new/lang/sl-SI.rc b/reactos/dll/win32/shell32_new/lang/sl-SI.rc new file mode 100644 index 00000000000..9789ec3841c --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/sl-SI.rc @@ -0,0 +1,756 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&View" + BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Arrange &Icons" + BEGIN + MENUITEM "By &Name", 0x30 /* column 0 */ + MENUITEM "By &Type", 0x32 /* column 2 */ + MENUITEM "By &Size", 0x31 /* ... */ + MENUITEM "By &Date", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Auto Arrange", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Icons", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Refresh", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Paste", FCIDM_SHVIEW_INSERT + MENUITEM "Paste as Link", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Open", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ut", FCIDM_SHVIEW_CUT + MENUITEM "&Copy", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Create &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Delete", FCIDM_SHVIEW_DELETE + MENUITEM "&Rename", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "O %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "V redu", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS so ustvarili:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Vnesite ime programa, mape, dokumenta ali spletne strani, in Wine ga (jo) bo odprl.", 12289, 36, 11, 182, 18 + LTEXT "&Odpri:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "V redu", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Prekliči", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Pre&brskaj", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Datoteka" + IDS_SHV_COLUMN2 "Velikost" + IDS_SHV_COLUMN3 "Vrsta" + IDS_SHV_COLUMN4 "Spremenjena" + IDS_SHV_COLUMN5 "Atributi" + IDS_SHV_COLUMN6 "Točna velikost" + IDS_SHV_COLUMN7 "Prosto" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Comments" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "My Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Lar&ge Icons" + IDS_VIEW_SMALL "S&mall Icons" + IDS_VIEW_LIST "&List" + IDS_VIEW_DETAILS "&Details" + IDS_SELECT "Select" + IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Restart" + IDS_RESTART_PROMPT "Do you want to restart the system?" + IDS_SHUTDOWN_TITLE "Shutdown" + IDS_SHUTDOWN_PROMPT "Do you want to shutdown?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "My Documents" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Select Program" + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "New" + FCIDM_SHVIEW_NEWFOLDER "New &Folder" + FCIDM_SHVIEW_NEWLINK "New &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "Noben Okenski program ni nastavljen, da bi odpiral ta tip datotek." +END diff --git a/reactos/dll/win32/shell32_new/lang/sv-SE.rc b/reactos/dll/win32/shell32_new/lang/sv-SE.rc new file mode 100644 index 00000000000..4ddd5c36520 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/sv-SE.rc @@ -0,0 +1,756 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&View" + BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Arrange &Icons" + BEGIN + MENUITEM "By &Name", 0x30 /* column 0 */ + MENUITEM "By &Type", 0x32 /* column 2 */ + MENUITEM "By &Size", 0x31 /* ... */ + MENUITEM "By &Date", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Auto Arrange", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Icons", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Refresh", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Paste", FCIDM_SHVIEW_INSERT + MENUITEM "Paste as Link", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Open", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ut", FCIDM_SHVIEW_CUT + MENUITEM "&Copy", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Create &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Delete", FCIDM_SHVIEW_DELETE + MENUITEM "&Rename", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Om %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS hade inte varit möjligt utan dessa personer:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Skriv namnet pĺ ett program, en mapp eller ett dokument och wine kommer att öppna det för dig.", 12289, 36, 11, 182, 18 + LTEXT "&Öppna:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Bläddra...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "File" + IDS_SHV_COLUMN2 "Size" + IDS_SHV_COLUMN3 "Type" + IDS_SHV_COLUMN4 "Modified" + IDS_SHV_COLUMN5 "Attributes" + IDS_SHV_COLUMN6 "Size" + IDS_SHV_COLUMN7 "Size available" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Comments" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "My Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Lar&ge Icons" + IDS_VIEW_SMALL "S&mall Icons" + IDS_VIEW_LIST "&List" + IDS_VIEW_DETAILS "&Details" + IDS_SELECT "Select" + IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Restart" + IDS_RESTART_PROMPT "Do you want to restart the system?" + IDS_SHUTDOWN_TITLE "Shutdown" + IDS_SHUTDOWN_PROMPT "Do you want to shutdown?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "My Documents" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Select Program" + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "New" + FCIDM_SHVIEW_NEWFOLDER "New &Folder" + FCIDM_SHVIEW_NEWLINK "New &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/tr-TR.rc b/reactos/dll/win32/shell32_new/lang/tr-TR.rc new file mode 100644 index 00000000000..633936f625a --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/tr-TR.rc @@ -0,0 +1,756 @@ +/* + * Copyright 2006 Fatih Aţýcý + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Bü&yük Simgeler", FCIDM_SHVIEW_BIGICON + MENUITEM "Kü&çük Simgeler", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Ayrýntýlý", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Görünüm" + BEGIN + MENUITEM "Bü&yük Simgeler", FCIDM_SHVIEW_BIGICON + MENUITEM "Kü&çük Simgeler", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Ayrýntýlý", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "&Simgeleri Düzenle" + BEGIN + MENUITEM "&Ada Göre", 0x30 /* column 0 */ + MENUITEM "&Türe Göre", 0x32 /* column 2 */ + MENUITEM "&Boyuta Göre", 0x31 /* ... */ + MENUITEM "&Zamana Göre", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Otomatik Düzenle", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Izgaraya Uydur", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Yenile", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Yapýţtýr", FCIDM_SHVIEW_INSERT + MENUITEM "Kýsayol Yapýţtýr", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Özellikler", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "A&raţtýr", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Aç", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "&Kes", FCIDM_SHVIEW_CUT + MENUITEM "K&opyala", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Kýsayol O&luţtur", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Sil", FCIDM_SHVIEW_DELETE + MENUITEM "&Yeniden Adlandýr", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Özellikler", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Dizine Gözat" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Tamam", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ýptal", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Dizine Gözat" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Tamam", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ýptal", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "%s Hakkýnda" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "Tamam", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS'ý size sunan geliţtiriciler:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Herhangi bir program, dizin, belge veya Internet kaynađý seçin ve Wine sizin için açsýn.", 12289, 36, 11, 182, 18 + LTEXT "&Aç:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "Tamam", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Ýptal", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Gözat...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Dosya" + IDS_SHV_COLUMN2 "Boyut" + IDS_SHV_COLUMN3 "Tür" + IDS_SHV_COLUMN4 "Düzenlenme" + IDS_SHV_COLUMN5 "Öznitelikler" + IDS_SHV_COLUMN6 "Boyut" + IDS_SHV_COLUMN7 "Kullanýlabilir Alan" + IDS_SHV_COLUMN8 "Ad" + IDS_SHV_COLUMN9 "Açýklamalar" + IDS_SHV_COLUMN10 "Sahip" + IDS_SHV_COLUMN11 "Grup" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Özgün konum" + IDS_SHV_COLUMN_DELDATE "Silinme tarihi" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Masaüstü" + IDS_MYCOMPUTER "Bilgisayarým" + IDS_RECYCLEBIN_FOLDER_NAME "Çöp" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Bü&yük Simgeler" + IDS_VIEW_SMALL "Kü&çük Simgeler" + IDS_VIEW_LIST "&Liste" + IDS_VIEW_DETAILS "&Ayrýntýlý" + IDS_SELECT "Seç" + IDS_OPEN "Aç" + IDS_CREATELINK "Kýsayol O&luţtur" + IDS_COPY "K&opyala" + IDS_DELETE "&Sil" + IDS_PROPERTIES "&Özellikler" + IDS_CUT "&Kes" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Yeni dizin oluţturulamýyor: Eriţim engellendi." + IDS_CREATEFOLDER_CAPTION "Dizin oluţturma sýrasýnda hata" + IDS_DELETEITEM_CAPTION "Dosya silmeyi onayla" + IDS_DELETEFOLDER_CAPTION "Dizin silmeyi onayla" + IDS_DELETEITEM_TEXT "'%1' öđesini silmek istediđinizden emin misiniz?" + IDS_DELETEMULTIPLE_TEXT "Bu %1 öđeyi silmek istediđinizden emin misiniz?" + IDS_DELETESELECTED_TEXT "Seçili öđeleri silmek istediđinizden emin misiniz?" + IDS_TRASHITEM_TEXT "'%1' adlý öđeyi çöpe göndermek istediđinizden emin misiniz?" + IDS_TRASHFOLDER_TEXT "'%1' adlý öđeyi ve tüm içeriđini çöpe göndermek istediđinizden emin misiniz?" + IDS_TRASHMULTIPLE_TEXT "Bu %1 öđeyi çöpe göndermek istediđinizden emin misiniz?" + IDS_CANTTRASH_TEXT "'%1' adlý öđe çöpe gönderilemiyor. Tamamen silmek ister misiniz?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Dosya Üzerine Yazmayý Onayla" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Yeniden Baţlat" + IDS_RESTART_PROMPT "Do you want to restart the system?" + IDS_SHUTDOWN_TITLE "Oturumu Kapat" + IDS_SHUTDOWN_PROMPT "Do you want to shutdown?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programlar" + IDS_PERSONAL "Belgelerim" + IDS_FAVORITES "Sýk Kullanýlanlar" + IDS_STARTUP "Start Menu\\Programlar\\Baţlangýç" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "Belgelerim\\Müziđim" + IDS_MYVIDEO "Belgelerim\\Vidyolarým" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "Belgelerim\\Resimlerim" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Belgeler" + IDS_ADMINTOOLS "Start Menu\\Programlar\\Yönetimsel Araçlar" + IDS_COMMON_MUSIC "Belgeler\\Müziđim" + IDS_COMMON_PICTURES "Belgeler\\Resimlerim" + IDS_COMMON_VIDEO "Belgeler\\Videolarým" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Select Program" + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "Yeni" + FCIDM_SHVIEW_NEWFOLDER "Yeni &Dizin" + FCIDM_SHVIEW_NEWLINK "Yeni &Kýsayol" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END diff --git a/reactos/dll/win32/shell32_new/lang/uk-UA.rc b/reactos/dll/win32/shell32_new/lang/uk-UA.rc new file mode 100644 index 00000000000..571581510bf --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/uk-UA.rc @@ -0,0 +1,769 @@ +/* + * Copyright 2004 Ilya Korniyko + * 2007-2008 Artem Reznikov + * 2010 Igor Paliychuk + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "&Âĺëčęł çíŕ÷ęč", FCIDM_SHVIEW_BIGICON + MENUITEM "&Äđłáíł çíŕ÷ęč", FCIDM_SHVIEW_SMALLICON + MENUITEM "Ńďčń&îę", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Ďîäđîáčöł", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&Âčăë˙ä" + BEGIN + MENUITEM "&Âĺëčęł çíŕ÷ęč", FCIDM_SHVIEW_BIGICON + MENUITEM "&Äđłáíł çíŕ÷ęč", FCIDM_SHVIEW_SMALLICON + MENUITEM "Ńďčń&îę", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Ďîäđîáčöł", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "&Óďîđ˙äęóâŕňč çíŕ÷ęč" + BEGIN + MENUITEM "çŕ &łě'˙ě", 0x30 /* column 0 */ + MENUITEM "çŕ &ňčďîě", 0x32 /* column 2 */ + MENUITEM "çŕ &đîçěłđîě", 0x31 /* ... */ + MENUITEM "çŕ &äŕňîţ", 0x33 + MENUITEM SEPARATOR + MENUITEM "&ŕâňîěŕňč÷íî", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Âčđłâí˙ňč çíŕ÷ęč", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Îíîâčňč", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Âńňŕâčňč", FCIDM_SHVIEW_INSERT + MENUITEM "Âńňŕâčňč ˙đëčę", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Âëŕńňčâîńňł", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Ďđîâłäíčę", FCIDM_SHVIEW_EXPLORE + MENUITEM "Â&łäęđčňč", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "&Âčđłçŕňč", FCIDM_SHVIEW_CUT + MENUITEM "&Ęîďłţâŕňč", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Ńňâîđčňč &˙đëčę", FCIDM_SHVIEW_CREATELINK + MENUITEM "Â&čäŕëčňč", FCIDM_SHVIEW_DELETE + MENUITEM "Ďĺđĺé&ěĺíóâŕňč", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "Â&ëŕńňčâîńňł", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Îăë˙ä ňĺę" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ńęŕńóâŕňč", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Îăë˙ä ňĺę" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Ňĺęŕ:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ńňâîđčňč &ňĺęó", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Ďîâłäîěëĺíí˙" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Ňŕę", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ňŕę äë˙ &âńłő", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Íł", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Ńęŕńóâŕňč", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Ďđî %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Âĺđńł˙ " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "Ö˙ âĺđńł˙ ReactOS çŕđĺşńňđîâŕíŕ íŕ:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Äîńňóďíŕ ôłçč÷íŕ ďŕě'˙ňü:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Đîçđîáíčęč ReactOS:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Âčęîíŕňč" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Ââĺäłňü łě'˙ ďđîăđŕěč, ňĺęč, äîęóěĺíňŕ ŕáî đĺńóđńó ˛íňĺđíĺňó, ł ReactOS âłäęđčş żő.", 12289, 36, 11, 182, 18 + LTEXT "&Âłäęđčňč:", 12305, 3, 39, 29, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "Î&ăë˙ä...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ßđëčę" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Ňčď îá'şęňŕ:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Đîçňŕřóâŕíí˙:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Î&á'şęň:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Đîáî÷ŕ ďŕďęŕ:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "&Řâčäęčé âčęëčę:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "&Âłęíî:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "&Ďđčěłňęŕ:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "Ç&íŕéňč îá'şęň...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Çěłíčňč çíŕ÷îę...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Äîäŕňęîâî...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Äîäŕňęîâł âëŕńňčâîńňł" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Âčáĺđłňü ďîňđłáíł âëŕńňčâîńňł äë˙ öüîăî ˙đëčęŕ.", -1, 5, 30, 210, 10 + CHECKBOX "Çŕďóńęŕňč ç łířčěč îáëłęîâčěč äŕíčěč", 14000, 25, 50, 150, 10 + LTEXT "Öĺé ďŕđŕěĺňđ äîçâîë˙ş âčęîđčńňîâóâŕňč öĺé ˙đëčę âłä łěĺíł łířîăî ęîđčńňóâŕ÷ŕ ŕáî ďđîäîâćóâŕňč đîáîňó âłä ńâîăî łěĺíł, ůî çŕőčůŕş ęîěď'ţňĺđ é äŕíł âłä íĺńŕíęöłîíîâŕíčő äłé ďđîăđŕěč.", -1, 50, 60, 175, 40 + CHECKBOX "Çŕďóńęŕňč â îęđĺěłé îáëŕńňł ďŕě'˙ňł", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Ńęŕńóâŕňč", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Çŕăŕëüíł" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Ňčď ôŕéëó:", 14004, 8, 35, 50, 10 + LTEXT "Ňĺęŕ", 14005, 68, 35, 160, 10 + LTEXT "Đîçňŕřóâŕíí˙:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Đîçěłđ:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Ěłńňčňü:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Ńňâîđĺíî:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "Ëčřĺ &÷čňŕíí˙", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "Ďđč&őîâŕíŕ", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Çŕăŕëüíł" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Ňčď ôŕéëó:", 14004, 8, 35, 50, 10 + LTEXT "Ôŕéë", 14005, 68, 35, 160, 10 + LTEXT "Äîäŕňîę:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Đîçňŕřóâŕíí˙:", 14008, 8, 72, 50, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Đîçěłđ:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Ńňâîđĺíî:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Çěłíĺíî:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Âłäęđčňî:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Ŕňđčáóňč:", 14020, 8, 189, 45, 10 + CHECKBOX "Ëčřĺ &÷čňŕíí˙", 14021, 58, 189, 67, 10 + CHECKBOX "Ďđč&őîâŕíčé", 14022, 126, 189, 50, 10 + CHECKBOX "&Ŕđőłâíčé", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Âĺđńł˙" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Âĺđńł˙ ôŕéëó: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Îďčń: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Ŕâňîđńüęł ďđŕâŕ: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Äîäŕňęîâł âłäîěîńňł: ", 14006, 6, 70, 222, 115 + LTEXT "˛ě'˙ ĺëĺěĺíňŕ: ", 14007, 13, 82, 50, 10 + LTEXT "Çíŕ÷ĺíí˙: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Çŕăŕëüíł" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Ňčď:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "Ôŕéëîâŕ ńčńňĺěŕ:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Çŕéí˙ňî:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Äîńňóďíî:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Ěłńňęłńňü:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Äčńę %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Î÷čůĺíí˙ äčńęó", 14010, 178, 175, 60, 15, WS_TABSTOP + CHECKBOX "Ńňčńęŕňč äčńę äë˙ çŕîůŕäćĺíí˙ ěłńö˙", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Äîçâîëčňč łíäĺęńóâŕíí˙ äčńęó äë˙ ďđčńęîđĺíí˙ ďîřóęó", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ńĺđâłń" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Ďĺđĺâłđęŕ äčńęó", -1, 5, 5, 230, 60 + LTEXT "Ďĺđĺâłđęŕ ňîěó íŕ íŕ˙âíłńňü ďîěčëîę.", -1, 40, 25, 160, 20 + PUSHBUTTON "Âčęîíŕňč ďĺđĺâłđęó...", 14000, 125, 45, 100, 15, WS_TABSTOP + GROUPBOX "Äĺôđŕăěĺíňŕöł˙ äčńęó", -1, 5, 65, 230, 60 + LTEXT "Äĺôđŕăěĺíňŕöł˙ ôŕéëłâ íŕ öüîěó ňîěł", -1, 40, 85, 160, 20 + PUSHBUTTON "Âčęîíŕňč äĺôđŕăěĺíňŕöłţ...", 14001, 125, 105, 100, 15, WS_TABSTOP + GROUPBOX "Ŕđőłâŕöł˙", -1, 5, 130, 230, 60 + LTEXT "Đĺçĺđâíĺ ęîďłţâŕíí˙ ôŕéëłâ íŕ öüîěó ňîěł.", -1, 40, 150, 160, 20 + PUSHBUTTON "Âčęîíŕňč ŕđőłâŕöłţ...", 14002, 125, 170, 100, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Îáëŕäíŕíí˙" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Çŕďóńę âłä łěĺíł łířîăî ęîđčńňóâŕ÷ŕ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "×čé îáëłęîâčé çŕďčń âčęîđčńňîâóâŕňč äë˙ çŕďóńęó öłşż ďđîăđŕěč?", -1, 10, 20, 220, 20 + CHECKBOX "Ďîňî÷íčé ęîđčńňóâŕ÷ %s", 14000, 10, 45, 150, 10 + LTEXT "Çŕőčńňčňč ěłé ęîěď'ţňĺđ ł ěîż äŕíł âłä íĺńŕíęöłîíîâŕíîż äł˙ëüíîńňł ďđîăđŕě", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Öĺé đĺćčě ěîćĺ çŕőčńňčňč âŕř ęîěď'ţňĺđ ł äŕíł âłä âłđóńłâ, ŕëĺ ďđîăđŕěŕ ěîćĺ ďđŕöţâŕňč íĺďđŕâčëüíî.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Óęŕçŕíčé ęîđčńňóâŕ÷:", 14002, 10, 100, 90, 10 + LTEXT "˛ě'˙ ęîđčńňóâŕ÷ŕ:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Ďŕđîëü:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Ńęŕńóâŕňč", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Âëŕńňčâîńňł Ęîřčęŕ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Íŕëŕřňóâŕíí˙ äë˙ âčáđŕíîăî đîçňŕřóâŕíí˙", -1, 10, 72, 220, 70 + RADIOBUTTON "&Îńîáëčâčé đîçěłđ:", 14001, 20, 90, 92, 10, WS_TABSTOP + EDITTEXT 14002, 120, 100, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "&Ěŕęńčěŕëüíčé đîçěłđ(Ěá):", -1, 20, 105, 100, 10 + RADIOBUTTON "Íĺ ďĺđĺěłů&óâŕňč ôŕéëč äî ęîřčęŕ, ŕ âčäŕë˙ňč żő îńňŕňî÷íî âłäđŕçó", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "Ďîęŕ&çóâŕňč äłŕëîă ďłäňâĺđäćĺíí˙ âčäŕëĺíí˙", 14004, 20, 155, 165, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Âčáłđ ďđîăđŕěč" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Âčáĺđłňü ďđîăđŕěó, çŕ äîďîěîăîţ ˙ęîż ńëłä âłäęđčňč öĺé ôŕéë.", -1, 44, 12, 234, 10 + LTEXT "Ôŕéë: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Ďđîăđŕěč", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "Çŕâćä&č âčęîđčńňîâóâŕňč öţ ďđîăđŕěó äë˙ ôŕéëłâ öüîăî ňčďó", 14003, 20, 193, 225, 10 + PUSHBUTTON "Î&ăë˙ä...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Ńęŕńóâŕňč", 14006, 206, 236, 50, 14 +END + +IDD_SH_FILE_COPY DIALOGEX 0, 0, 264, 45 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Ęîďłţâŕíí˙..." +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + PUSHBUTTON "Ńęŕńóâŕňč", 14002, 195, 14, 60, 16 + CONTROL "", 14000, "MSCTLS_PROGRESS32", 0, 8, 20, 170, 10 + LTEXT "Ôŕéë", 14001, 8, 6, 169, 10 +END + + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Çŕăŕëüíł" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Çŕâäŕíí˙", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Ďîęŕçóâŕňč ńďčńîę ňčďîâčő çŕâäŕíü ó ňĺęŕő", 14001, 40, 25, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Âčęîđčńňîâóâŕňč çâč&÷ŕéíł ňĺęč ReactOS", 14002, 40, 37, 149, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Îăë˙ä ňĺę", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Âłäęđčâŕňč ďŕďęč â ňî&ěó ńŕěîěó âłęíł", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Âłäęđčâŕ&ňč ęîćíó ďŕďęó â îęđĺěîěó âłęíł", 14005, 40, 82, 155, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Ęëŕöŕíí˙ ěčřĺţ", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Âłä&ęđčâŕňč îäčíî÷íčě, âčäłë˙ňč âęŕçłâíčęîě", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Ďłäęđĺńë&ţâŕňč ďłäďčńč çíŕ÷ęłâ", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Ďłäęđ&ĺńëţâŕňč ëčřĺ ďđč íŕâĺäĺííł", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Âłäęđčâ&ŕňč ďîäâłéíčě, âčäłë˙ňč îäčíî÷íčě", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Ńňŕíäŕđňíî", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Âčăë˙ä" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Âčăë˙ä ňĺę", -1, 7, 10, 249, 60 +//ICON +LTEXT "Ěîćíŕ çŕńňîńóâŕňč âčăë˙ä, ˙ęčé âčęîđčńňîâóşňüń˙ äë˙ öłşż ňĺęč (íŕďđčęëŕä, ""Ňŕáëčö˙"" ŕáî ""Ďëčňęŕ""), äî âńłő ňĺę.", -1, 60, 20, 180, 23 +PUSHBUTTON "&Çŕńňîńóâŕňč äî âńłő ňĺę", 14001, 58, 50, 84, 14, WS_TABSTOP +PUSHBUTTON "&Ńęčä äë˙ âńłő ňĺę", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Äîäŕňęîâł ďŕđŕěĺňđč:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "&Ńňŕíäŕđňíî", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Ňčďč ôŕéëłâ" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Çŕđĺşńňđîâŕíł &ňčďč ôŕéëłâ:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&Ńňâîđčňč", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "Â&čäŕëčňč", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Ďîäđîáčöł äë˙ đîçřčđĺíí˙ '%s'", 14003, 7, 130, 249, 70 +LTEXT "Âłäęđčâŕňč ó:", -1, 12, 140, 48, 10 +//ICON +LTEXT "Äîäŕňîę", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Çěłíčňč...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Ôŕéëč ç đîçřčđĺíí˙ě '%s' ěŕţňü ňčď '%s'.\nŮîá çěłíčňč ďŕđŕěĺňđč, ˙ęł âďëčâŕňčěóňü\níŕ âńł ôŕéëč '%s', íŕňčńíłňü ęíîďęó ""Äîäŕňęîâî"".", 14007, 12, 155, 160, 30 +PUSHBUTTON "&Äîäŕňęîâî", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ďłäňâĺđäćĺíí˙ çŕěłíč ôŕéëó" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Ňŕę", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Ňŕę äë˙ &âńłő", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Íł", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Ö˙ ďŕďęŕ âćĺ ěłńňčňü ôŕéë ç łě'˙ě '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Ö˙ ďŕďęŕ âćĺ ěłńňčňü äîńňóďíčé ëčřĺ äë˙ ÷čňŕíí˙ ôŕéë ç łě'˙ě '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Ö˙ ďŕďęŕ âćĺ ěłńňčňü ńčńňĺěíčé ôŕéë ç łě'˙ě '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Çŕěłíčňč íŕ˙âíčé ôŕéë", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(äŕňŕ é đîçěłđ íĺâłäîěł)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "íŕ öĺé ôŕéë?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(äŕňŕ é đîçěłđ íĺâłäîěł)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Âčőłä łç ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Âč äłéńíî áŕćŕşňĺ âčéňč łç ńčńňĺěč?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "Â&čőłä", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Âčěęíĺíí˙ ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Âč äłéńíî áŕćŕşňĺ âłäęëţ÷čňčń˙?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Âčěęíĺíí˙", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ŕâňîçŕďóńę" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Âčáĺđł&ňü ňčď âěłńňó, ŕ ďîňłě äłţ, ˙ęŕ ŕâňîěŕňč÷íî âčęîíóâŕňčěĺňüń˙ â đŕçł âčęîđčńňŕíí˙ ňŕęîăî âěłńňó â öüîěó ďđčńňđîż:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Äłż", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Âčáĺđłňü âčęîíóâŕíó &äłţ:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Ęîćíîăî đŕ&çó ďđîďîíóâŕňč âčáłđ äłż", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Âłäíîâčňč", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ěłřŕíčé âěłńň" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "Íŕ öüîěó äčńęó ŕáî ďđčńňđîż çáĺđłăŕşňüń˙ âěłńň äĺęłëüęîő ňčďłâ.", 1001, 32, 7, 191, 20 + LTEXT "ßęó äłţ ńëłä âčęîíóâŕňč ReactOS?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ěłřŕíčé âěłńň" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS ěîćĺ âčęîíóâŕňč îäíó é ňó ńŕěó äłţ ęîćíîăî đŕçó, ęîëč âč âńňŕâë˙şňĺ äčńę ŕáî ďłä'şäíóşňĺ ďđčńňđłé łç ôŕéëŕěč öüîăî ňčďó:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "ßęó äłţ ńëłä âčęîíóâŕňč ReactOS?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Çŕâćäč âčęîíóâŕňč âčáđŕíó äłţ.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Ŕâňîçŕďóńę" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS ěîćĺ âčęîíóâŕňč îäíó é ňó ńŕěó äłţ ęîćíîăî đŕçó, ęîëč âč ďłä'şäíóşňĺ öĺé ďđčńňđłé.", 1001, 32, 7, 190, 22 + LTEXT "&ßęó äłţ ńëłä âčęîíóâŕňč ReactOS?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Çŕâćäč âčęîíóâŕňč âčáđŕíó äłţ", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Çŕâĺđřĺíí˙ đîáîňč ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "Âčáĺđłňü îäíó ç ňŕęčő ěîćëčâîńňĺé?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Çáĺđĺćĺíí˙ ńĺŕíńó ç ďĺđĺâĺäĺíí˙ě ęîěď'ţňĺđŕ äî đĺćčěó íčçüęîăî ĺíĺđăîńďîćčâŕíí˙ çł çáĺđĺćĺíí˙ě äŕíčő ó ďŕě'˙ňł. ßęůî íŕňčńíóňč áóäü-˙ęó ęëŕâłřó ŕáî ďĺđĺńóíóňč ěčřó, ęîěď'ţňĺđ ďîâĺđíĺňüń˙ äî çâč÷ŕéíîăî đĺćčěó.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Äîâłäęŕ", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ôîđěŕňóâŕíí˙" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Ďî÷ŕňč", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Çŕęđčňč", IDCANCEL, 118, 198, 60, 14 + LTEXT "&Ěłńňęłńňü:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Ôŕéëîâŕ ńčńňĺěŕ", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Đîçěłđ ęëŕńňĺđŕ", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Ěł&ňęŕ ňîěó", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "&Ńďîńîáč ôîđěŕňóâŕíí˙", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Řâčäęĺ (î÷čůĺíí˙ çěłńňó)", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Âčęîđčńňîâóâŕňč ńňčńęŕíí˙", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Ďĺđĺâłđęŕ äčńęó" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Ďî÷ŕňč", IDOK, 53, 100, 60, 14 + GROUPBOX "Îďöłż ďĺđĺâłđęč äčńęó", -1, 7, 6, 179, 50 + PUSHBUTTON "Ńęŕńóâŕňč", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Âčďđŕâčňč ďîěčëęč ôŕéëîâîż ńčńňĺěč", 14000, 16, 15, 165, 10 + AUTOCHECKBOX "&Ńďđîáóâŕňč âłäíîâčňč ďîăŕíł ńĺęňîđč", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Çěłíŕ çíŕ÷ęŕ" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "˛ě'˙ ôŕéëŕ:", -1, 7, 14, 208, 10 + PUSHBUTTON "Î&ăë˙ä...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Çíŕ÷ęč:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Ńęŕńóâŕňč",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "Ôŕéë" + IDS_SHV_COLUMN2 "Đîçěłđ" + IDS_SHV_COLUMN3 "Ňčď" + IDS_SHV_COLUMN4 "Çěłíĺíî" + IDS_SHV_COLUMN5 "Ŕňđčáóňč" + IDS_SHV_COLUMN6 "Đîçěłđ" + IDS_SHV_COLUMN7 "Âłëüíčé Đîçěłđ" + IDS_SHV_COLUMN8 "˛ě'˙" + IDS_SHV_COLUMN9 "Ďđčěłňęŕ" + IDS_SHV_COLUMN10 "Âëŕńíčę" + IDS_SHV_COLUMN11 "Ăđóďŕ" + IDS_SHV_COLUMN12 "˛ě'˙ ôŕéëŕ" + IDS_SHV_COLUMN13 "Ęŕňĺăîđł˙" + IDS_SHV_COLUMN_DELFROM "Âčőłäíĺ đîçňŕřóâŕíí˙" + IDS_SHV_COLUMN_DELDATE "Äŕňŕ âčäŕëĺíí˙" + IDS_SHV_COLUMN_FONTTYPE "Ňčď řđčôňó" + IDS_SHV_COLUMN_WORKGROUP "Đîáî÷ŕ ăđóďŕ" + IDS_SHV_NETWORKLOCATION "Ěĺđĺćíĺ đîçňŕřóâŕíí˙" + IDS_SHV_COLUMN_DOCUMENTS "Äîęóěĺíňč" + IDS_SHV_COLUMN_STATUS "Ńňŕí" + IDS_SHV_COLUMN_COMMENTS "Ďđčěłňęč" + IDS_SHV_COLUMN_LOCATION "Đîçňŕřóâŕíí˙" + IDS_SHV_COLUMN_MODEL "Ěîäĺëü" + + /* special folders */ + IDS_DESKTOP "Đîáî÷čé ńňłë" + IDS_MYCOMPUTER "Ěłé Ęîěď'ţňĺđ" + IDS_RECYCLEBIN_FOLDER_NAME "Ęîřčę" + IDS_CONTROLPANEL "Ďŕíĺëü ęĺđóâŕíí˙" + IDS_ADMINISTRATIVETOOLS "Ŕäěłíłńňđóâŕíí˙" + + /* context menus */ + IDS_VIEW_LARGE "&Âĺëčęł çíŕ÷ęč" + IDS_VIEW_SMALL "&Äđłáíł çíŕ÷ęč" + IDS_VIEW_LIST "Ńďčń&îę" + IDS_VIEW_DETAILS "&Ďîäđîáčöł" + IDS_SELECT "Âč&áđŕňč" + IDS_OPEN "Âł&äęđčňč" + IDS_CREATELINK "Ńňâîđčňč &˙đëčę" + IDS_COPY "&Ęîďłţâŕňč" + IDS_DELETE "Â&čäŕëčňč" + IDS_PROPERTIES "Â&ëŕńňčâîńňł" + IDS_CUT "&Âčđłçŕňč" + IDS_RESTORE "Âłäíîâčňč" + IDS_FORMATDRIVE "Ôîđěŕňóâŕňč..." + IDS_RENAME "Ďĺđĺéěĺíóâŕňč" + IDS_INSERT "Âńňŕâčňč" + + IDS_CREATEFOLDER_DENIED "Íĺ âäŕëîń˙ ńňâîđčňč íîâó ďŕďęó: Âłäěîâŕ ó äîńňóďł." + IDS_CREATEFOLDER_CAPTION "Ďîěčëęŕ ďđč ńňâîđĺííł íîâîż ďŕďęč" + IDS_DELETEITEM_CAPTION "Ďłäňâĺđäćĺíí˙ âčëó÷ĺíí˙ ôŕéëó" + IDS_DELETEFOLDER_CAPTION "Ďłäňâĺđäćĺíí˙ âčëó÷ĺíí˙ ďŕďęč" + IDS_DELETEITEM_TEXT "Âč äłéńíî áŕćŕşňĺ âčäŕëčňč '%1'?" + IDS_DELETEMULTIPLE_TEXT "Âč äłéńíî áŕćŕşňĺ âčäŕëčňč öł %1 îá'şęňč(łâ)?" + IDS_DELETESELECTED_TEXT "Âč äłéńíî áŕćŕşňĺ âčäŕëčňč öł îá'şęňč?" + IDS_TRASHITEM_TEXT "Âč äłéńíî áŕćŕşňĺ ďĺđĺěłńňčňč '%1' äî ęîřčęŕ?" + IDS_TRASHFOLDER_TEXT "Âč äłéńíî áŕćŕşňĺ ďĺđĺěłńňčňč '%1' ł âĺńü żż âěłńň äî ęîřčęŕ?" + IDS_TRASHMULTIPLE_TEXT "Âč äłéńíî áŕćŕşňĺ ďĺđĺěłńňčňč öł îá'şęňč (%1 řň.) äî ęîřčęŕ?" + IDS_CANTTRASH_TEXT "Îá'şęň '%1' íĺ ěîćíŕ ďĺđĺěłńňčňč äî ęîřčęŕ. Áŕćŕşňĺ âčäŕëčňč éîăî?" + IDS_OVERWRITEFILE_TEXT "Ö˙ ďŕďęŕ âćĺ ěłńňčňü ôŕéë ç łě'˙ě '%1'.\n\nÁŕćŕşňĺ çŕěłíčňč éîăî?" + IDS_OVERWRITEFILE_CAPTION "Ďłäňâĺđäćĺíí˙ Ďĺđĺçŕďčńó Ôŕéëó" + IDS_OVERWRITEFOLDER_TEXT "Ö˙ ďŕďęŕ âćĺ ěłńňčňü ďŕďęó ç łě'˙ě '%1'.\n\n"\ + "ßęůî ôŕéëč â ďŕďöł ďđčçíŕ÷ĺíí˙ ěŕţňü ňł ć łěĺíŕ, ůî ôŕéëč ó âčáđŕíłé ďŕďöł,\n"\ + "âîíč áóäóňü çŕěłíĺíł. Âč âńĺ ůĺ áŕćŕşňĺ ďĺđĺěłńňčňč ŕáî\n"\ + "ńęîďłţâŕňč ďŕďęó?" + + /* message box strings */ + IDS_RESTART_TITLE "Ďĺđĺçŕâŕíňŕćčňč" + IDS_RESTART_PROMPT "Âč őî÷ĺňĺ ďĺđĺçŕâŕíňŕćčňč ńčńňĺěó?" + IDS_SHUTDOWN_TITLE "Âčěęíóňč" + IDS_SHUTDOWN_PROMPT "Âč őî÷ĺňĺ âčěęíóňč ęîěď'ţňĺđ?" + IDS_LOGOFF_TITLE "Âčőłä ç ńčńňĺěč" + IDS_LOGOFF_PROMPT "Âč őî÷ĺňĺ âčéňč ç ńčńňĺěč?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "Ěîż äîęóěĺíňč" + IDS_FAVORITES "Îáđŕíĺ" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "Íŕäłńëŕňč" + IDS_STARTMENU "Ăîëîâíĺ ěĺíţ" + IDS_MYMUSIC "Ěî˙ ěóçčęŕ" + IDS_MYVIDEO "Ěîż âłäĺîçŕďčńč" + IDS_DESKTOPDIRECTORY "Đîáî÷čé ńňłë" + IDS_NETHOOD "Ěĺđĺćíĺ îňî÷ĺíí˙" + IDS_TEMPLATES "Řŕáëîíč" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "Ďđčíňĺđč" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "Ěîż ěŕëţíęč" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Çŕăŕëüíł äîęóěĺíňč" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Çŕăŕëüíł äîęóěĺíňč\\Ěî˙ ěóçčęŕ" + IDS_COMMON_PICTURES "Çŕăŕëüíł äîęóěĺíňč\\Ěîż ěŕëţíęč" + IDS_COMMON_VIDEO "Çŕăŕëüíł äîęóěĺíňč\\Ěîż âłäĺîçŕďčńč" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "Ěĺđĺćíĺ îňî÷ĺíí˙" + + IDS_NEWFOLDER "Íîâŕ ďŕďęŕ" + + IDS_DRIVE_FIXED "Ëîęŕëüíčé äčńę" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Ěĺđĺćíčé äčńę" + + IDS_OPEN_WITH "Âłäęđčňč çŕ äîďîěîăîţ" + IDS_OPEN_WITH_CHOOSE "Âčáđŕňč ďđîăđŕěó..." + + IDS_SHELL_ABOUT_AUTHORS "&Ŕâňîđč" + IDS_SHELL_ABOUT_BACK "< &Íŕçŕä" + FCIDM_SHVIEW_NEW "Ńňâîđčňč" + FCIDM_SHVIEW_NEWFOLDER "&Ďŕďęó" + FCIDM_SHVIEW_NEWLINK "&ßđëčę" + IDS_FOLDER_OPTIONS "Âëŕńňčâîńňł ňĺęč" + IDS_RECYCLEBIN_LOCATION "Đîçňŕřóâŕíí˙ Ęîřčęŕ" + IDS_RECYCLEBIN_DISKSPACE "Äîńňóďíčé ďđîńňłđ" + IDS_EMPTY_BITBUCKET "Î÷čńňčňč Ęîřčę" + IDS_PICK_ICON_TITLE "Âčáđŕňč çíŕ÷îę" + IDS_PICK_ICON_FILTER "Ôŕéëč çíŕ÷ęłâ(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Âčęîíóâŕíł ôŕéëč\0*.exe\0" + IDS_DIRECTORY "Ďŕďęŕ" + IDS_VIRTUAL_DRIVER "Äđŕéâĺđ âłđňóŕëüíîăî ďđčńňđîţ" + IDS_BAT_FILE "Ďŕęĺňíčé ôŕéë ReactOS" + IDS_CMD_FILE "Ęîěŕíäíčé ńęđčďň ReactOS" + IDS_COM_FILE "Äîäŕňîę Dos" + IDS_CPL_FILE "Ĺëĺěĺíň ďŕíĺëł ęĺđóâŕíí˙" + IDS_CUR_FILE "Ęóđńîđ" + IDS_DLL_FILE "Đîçřčđĺíí˙ äîäŕňęó" + IDS_DRV_FILE "Äđŕéâĺđ ďđčńňđîţ" + IDS_EXE_FILE "Äîäŕňîę" + IDS_FON_FILE "Ôŕéë řđčôňó" + IDS_TTF_FILE "Ôŕéë řđčôňó TrueType" + IDS_HLP_FILE "Ôŕéë äîâłäęč" + IDS_INI_FILE "Ôŕéë íŕëŕřňóâŕíü" + IDS_LNK_FILE "ßđëčę" + IDS_SYS_FILE "Ńčńňĺěíčé ôŕéë" + + IDS_OPEN_VERB "Âłäęđčňč" + IDS_RUNAS_VERB "Çŕďóńňčňč ˙ę " + IDS_EDIT_VERB "Çěłíčňč" + IDS_FIND_VERB "Ďîřóę" + IDS_PRINT_VERB "Äđóę" + IDS_PLAY_VERB "Âłäňâîđčňč" + IDS_PREVIEW_VERB "Ďĺđĺăë˙ä" + + IDS_FILE_FOLDER "%u ôŕéëłâ, %u ďŕďîę" + IDS_PRINTERS "Ďđčíňĺđč" + IDS_FONTS "Řđčôňč" + IDS_INSTALLNEWFONT "˛íńňŕëţâŕňč íîâčé řđčôň..." + + IDS_DEFAULT_CLUSTER_SIZE "Đîçěłđ ęëŕńňĺđŕ çŕ çŕěîâ÷óâŕíí˙ě" + IDS_COPY_OF "Ęîďł˙" + + IDS_SHLEXEC_NOASSOC "Íĺěŕş ďđîăđŕěč Windows, ńęîíôłăóđîâŕíîż äë˙ âłäęđčňň˙ öüîăî ňčďó ôŕéëłâ." +END diff --git a/reactos/dll/win32/shell32_new/lang/zh-CN.rc b/reactos/dll/win32/shell32_new/lang/zh-CN.rc new file mode 100644 index 00000000000..aa54e3eecb6 --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/zh-CN.rc @@ -0,0 +1,745 @@ +/* + * (Simplified Chinese resources) + * (źňĚĺÖĐÎÄ×ĘÔ´) + * by zhangbing 2008 + */ + +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED + + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "´óÍźąę(&G)", FCIDM_SHVIEW_BIGICON + MENUITEM "ĐĄÍźąę(&M)", FCIDM_SHVIEW_SMALLICON + MENUITEM "ÁĐąí(&L)", FCIDM_SHVIEW_LISTVIEW + MENUITEM "ĎęϸĐĹϢ(&D)", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "˛éż´(&V)" + BEGIN + MENUITEM "´óÍźąę(&G)", FCIDM_SHVIEW_BIGICON + MENUITEM "ĐĄÍźąę(&M)", FCIDM_SHVIEW_SMALLICON + MENUITEM "ÁĐąí(&L)", FCIDM_SHVIEW_LISTVIEW + MENUITEM "ĎęϸĐĹϢ(&D)", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "ĹĹÁĐÍźąę(&I)" + BEGIN + MENUITEM "ĂűłĆ(&N)", 0x30 /* column 0 */ + MENUITEM "ŔŕĐÍ(&T)", 0x32 /* column 2 */ + MENUITEM "´óĐĄ(&S)", 0x31 /* ... */ + MENUITEM "Đ޸ÄĘąźä(&D)", 0x33 + MENUITEM SEPARATOR + MENUITEM "×ÔśŻĹĹÁĐ(&D)", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "ĹĹÁĐÍźąę", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "ˢĐÂ", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "ŐłĚů", FCIDM_SHVIEW_INSERT + MENUITEM "ŐłĚůżě˝Ýˇ˝Ę˝", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "ĘôĐÔ", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "´ňżŞ(&O)", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "źôÇĐ(&U)", FCIDM_SHVIEW_CUT + MENUITEM "¸´ÖĆ(&C)", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "´´˝¨żě˝Ýˇ˝Ę˝(&L)", FCIDM_SHVIEW_CREATELINK + MENUITEM "Éžłý(&D)", FCIDM_SHVIEW_DELETE + MENUITEM "ÖŘĂüĂű(&R)", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "ĘôĐÔ(&P)", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "ȡś¨", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "ČĄĎű", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "ȡś¨", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "ČĄĎű", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "šŘÓÚ %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "ȡś¨", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was brought to you by:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "ĘäČëłĚĐňŁŹÄżÂźŁŹÎÄźţťňŐßInternet×ĘÔ´ĂűŁŹReactOS˝ŤÎŞÄú´ňżŞËüĄŁ", 12289, 36, 11, 182, 18 + LTEXT "´ňżŞ(&O):", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "ȡś¨", IDOK, 62, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "ČĄĎű", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "äŻŔŔ(&B)...", 12288, 170, 63, 50, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "ȡś¨", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "ȡś¨", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "ČĄĎű", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "ȡś¨", 14005, 150, 236, 50, 14 + PUSHBUTTON "ČĄĎű", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "ČĄĎű", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "ČĄĎű", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "ČĄĎű", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "ȡś¨", IDOK, 96, 186, 60, 14 + PUSHBUTTON "ČĄĎű", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "ȡś¨", IDOK, 96, 185, 60, 14 + PUSHBUTTON "ČĄĎű", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "ȡś¨", IDOK, 94, 160, 60, 14 + PUSHBUTTON "ČĄĎű", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "ȡś¨", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "ČĄĎű", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "¸ńĘ˝ťŻ" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "żŞĘź(&S)", IDOK, 53, 198, 60, 14 + PUSHBUTTON "šŘąŐ(&C)", IDCANCEL, 118, 198, 60, 14 + LTEXT "ČÝÁż(&P):", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "ÎÄźţϾͳ(&F)", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "ˇÖĹ侼Ԫ´óĐĄ(&A)", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "žíąę(&L)", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "¸ńĘ˝ťŻŃĄĎî(&O)", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "żěËٸńĘ˝ťŻ(&Q)", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "ĆôÓĂŃšËő(&E)", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "¸ü¸ÄÍźąę" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "ÎÄźţĂű:", -1, 7, 14, 208, 10 + PUSHBUTTON "äŻŔŔ...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "ȡś¨",IDOK, 107, 181,50, 14 + PUSHBUTTON "ČĄĎű",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "ÎÄźţ" + IDS_SHV_COLUMN2 "´óĐĄ" + IDS_SHV_COLUMN3 "ŔŕĐÍ" + IDS_SHV_COLUMN4 "Đ޸Ä" + IDS_SHV_COLUMN5 "ĘôĐÔ" + IDS_SHV_COLUMN6 "ĘšÓĂżŐźä" + IDS_SHV_COLUMN7 "ĘŁÓŕżŐźä" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Comments" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "×ŔĂć" + IDS_MYCOMPUTER "ÎҾľçÄÔ" + IDS_RECYCLEBIN_FOLDER_NAME "ťŘĘŐŐž" + IDS_CONTROLPANEL "żŘÖĆĂć°ĺ" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "´óÍźąę(&G)" + IDS_VIEW_SMALL "ĐĄÍźąę(&M)" + IDS_VIEW_LIST "ÁĐąí(&L)" + IDS_VIEW_DETAILS "ĎęϸĐĹϢ(&D)" + IDS_SELECT "Select" + IDS_OPEN "Open" + IDS_CREATELINK "´´˝¨żě˝Ýˇ˝Ę˝(&L)" + IDS_COPY "¸´ÖĆ(&C)" + IDS_DELETE "Éžłý(&D)" + IDS_PROPERTIES "ĘôĐÔ(&P)" + IDS_CUT "źôÇĐ(&U)" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "ÖŘĐÂĆôśŻ" + IDS_RESTART_PROMPT "ĘǡńÖŘĐÂĆôśŻĎľÍł?" + IDS_SHUTDOWN_TITLE "šŘťú" + IDS_SHUTDOWN_PROMPT "ĘǡńšŘąŐϾͳ?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "ÎŇľÄÎÄľľ" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "ÍřÉĎÁÚžÓ" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "´ňżŞˇ˝Ę˝" + IDS_OPEN_WITH_CHOOSE "ŃĄÔńłĚĐň" + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "Đ½¨" + FCIDM_SHVIEW_NEWFOLDER "ÎÄźţźĐ(&F)" + FCIDM_SHVIEW_NEWLINK "żě˝Ýˇ˝Ę˝(&L)" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END + diff --git a/reactos/dll/win32/shell32_new/lang/zh-TW.rc b/reactos/dll/win32/shell32_new/lang/zh-TW.rc new file mode 100644 index 00000000000..fcf7abf9f7b --- /dev/null +++ b/reactos/dll/win32/shell32_new/lang/zh-TW.rc @@ -0,0 +1,759 @@ +/* + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL +#pragma code_page(936) /* FIXME: default for CHINESE_TRADITIONAL is 950 */ + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "&View" + BEGIN + MENUITEM "Lar&ge Icons", FCIDM_SHVIEW_BIGICON + MENUITEM "S&mall Icons", FCIDM_SHVIEW_SMALLICON + MENUITEM "&List", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "Arrange &Icons" + BEGIN + MENUITEM "By &Name", 0x30 /* column 0 */ + MENUITEM "By &Type", 0x32 /* column 2 */ + MENUITEM "By &Size", 0x31 /* ... */ + MENUITEM "By &Date", 0x33 + MENUITEM SEPARATOR + MENUITEM "&Auto Arrange", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Icons", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "Refresh", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "Paste", FCIDM_SHVIEW_INSERT + MENUITEM "Paste as Link", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "E&xplore", FCIDM_SHVIEW_EXPLORE + MENUITEM "&Open", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "C&ut", FCIDM_SHVIEW_CUT + MENUITEM "&Copy", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "Create &Link", FCIDM_SHVIEW_CREATELINK + MENUITEM "&Delete", FCIDM_SHVIEW_DELETE + MENUITEM "&Rename", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "&Properties", FCIDM_SHVIEW_PROPERTIES + END +END + +SHBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDD_TITLE, 4, 4, 180, 12 + LTEXT "", IDD_STATUS, 4, 25, 180, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Browse for Folder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDD_TITLE, 10, 8, 198, 24 + LTEXT "", IDD_STATUS, 10, 25, 198, 12 + LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Message" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDD_ICON, 10, 10, 16, 16 + LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_SHELL_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "ęPěś %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 + LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "´_ś¨", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_SHELL_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was brought to you by:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +SHELL_RUN_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18 + LTEXT "&Open:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "OK", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&Browse...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Shortcut" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE + LTEXT "Target type:", 14004, 8, 38, 64, 10 + LTEXT "", 14005, 78, 38, 142, 10 + LTEXT "Target location:", 14006, 8, 58, 64, 10 + LTEXT "", 14007, 79, 58, 141, 10 + LTEXT "Target:", 14008, 8, 77, 45, 10 + EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL + LTEXT "&Start in:", 14010, 8, 96, 57, 10 + EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL + LTEXT "Shortcut &key:", 14014, 8, 115, 57, 10 + EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT + LTEXT "Run:", 14016, 8, 134, 57, 10 + EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL + LTEXT "C&omment:", 14018, 8, 152, 57, 10 + EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Find Target...", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Change Icon...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "A&dvanced...", 14022, 159, 172, 70, 14, ES_LEFT +END + +SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Extended Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "OK", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE +END + +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + +SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "File", 14005, 68, 35, 160, 10 + LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 160, 10 + LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "", 14017, 68, 140, 160, 10 + LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "", 14019, 68, 160, 160, 10 + LTEXT "Attributes:", 14020, 8, 189, 45, 10 + CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 + CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 + CHECKBOX "&Archive", 14023, 181, 189, 49, 10 +END + +SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Version" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "", 14001, 77, 10, 152, 10 + LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "", 14003, 77, 27, 152, 10 + LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "", 14005, 77, 46, 152, 10 + GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 + LTEXT "Item name: ", 14007, 13, 82, 50, 10 + LTEXT "Value: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + EDITTEXT 14000, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP + LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "", 14001, 110, 55, 100, 10 + + LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "", 14002, 110, 70, 100, 10 + + CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 + LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "", 14003, 110, 90, 120, 10 + LTEXT "", 14004, 200, 90, 40, 10 + + CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 + LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "", 14005, 110, 105, 120, 10 + LTEXT "", 14006, 200, 105, 40, 10 + + LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "", 14007, 110, 125, 120, 10 + LTEXT "", 14008, 200, 125, 40, 10 + + CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 + + LTEXT "Drive %s", 14009, 100, 170, 40, 10 + PUSHBUTTON "Disk Cleanup", 14010, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Compress drive to save disk space", 14011, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED +END + +DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tools" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Error-checking", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Backup", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hardware" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Run As" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "The following user:", 14002, 10, 100, 90, 10 + LTEXT "User name:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "Password:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Recycle Bin Properties" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 + RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Open With" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "File: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + PUSHBUTTON "OK", 14005, 150, 236, 50, 14 + PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 +END + +FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Tasks", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +LOGOFF_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +FORMAT_DLG DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "™n°¸" + IDS_SHV_COLUMN2 "´óĐĄ" + IDS_SHV_COLUMN3 "îĐÍ" + IDS_SHV_COLUMN4 "ŇŃĐ޸Ä" + IDS_SHV_COLUMN5 "ŒŮĐÔ" + IDS_SHV_COLUMN6 "ĘšÓĂżŐég" + IDS_SHV_COLUMN7 "ĘŁđNżŐég" + IDS_SHV_COLUMN8 "Name" + IDS_SHV_COLUMN9 "Comments" + IDS_SHV_COLUMN10 "Owner" + IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + + /* special folders */ + IDS_DESKTOP "Desktop" + IDS_MYCOMPUTER "My Computer" + IDS_RECYCLEBIN_FOLDER_NAME "Trash" + IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" + + /* context menus */ + IDS_VIEW_LARGE "Lar&ge Icons" + IDS_VIEW_SMALL "S&mall Icons" + IDS_VIEW_LIST "&List" + IDS_VIEW_DETAILS "&Details" + IDS_SELECT "Select" + IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" + IDS_FORMATDRIVE "Format..." + IDS_RENAME "Rename" + IDS_INSERT "Insert" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ + "If the files in the destination folder have the same names as files in the\n"\ + "selected folder they will be replaced. Do you still want to move or copy\n"\ + "the folder?" + + /* message box strings */ + IDS_RESTART_TITLE "Restart" + IDS_RESTART_PROMPT "Do you want to restart the system?" + IDS_SHUTDOWN_TITLE "Shutdown" + IDS_SHUTDOWN_PROMPT "Do you want to shutdown?" + IDS_LOGOFF_TITLE "Log Off" + IDS_LOGOFF_PROMPT "Do you want to log off?" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "My Documents" + IDS_FAVORITES "Favorites" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Start Menu" + IDS_MYMUSIC "My Music" + IDS_MYVIDEO "My Videos" + IDS_DESKTOPDIRECTORY "Desktop" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "Cookies" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "My Pictures" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "Documents" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "My Network Places" + + IDS_NEWFOLDER "New Folder" + + IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "Network Disk" + + IDS_OPEN_WITH "Open With" + IDS_OPEN_WITH_CHOOSE "Select Program" + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "New" + FCIDM_SHVIEW_NEWFOLDER "New &Folder" + FCIDM_SHVIEW_NEWLINK "New &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." +END + +#pragma code_page(default) diff --git a/reactos/dll/win32/shell32_new/menuband.cpp b/reactos/dll/win32/shell32_new/menuband.cpp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/menuband.h b/reactos/dll/win32/shell32_new/menuband.h new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/menubandsite.cpp b/reactos/dll/win32/shell32_new/menubandsite.cpp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/menubandsite.h b/reactos/dll/win32/shell32_new/menubandsite.h new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/menudeskbar.cpp b/reactos/dll/win32/shell32_new/menudeskbar.cpp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/menudeskbar.h b/reactos/dll/win32/shell32_new/menudeskbar.h new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/pidl.cpp b/reactos/dll/win32/shell32_new/pidl.cpp new file mode 100644 index 00000000000..c034f13ac3a --- /dev/null +++ b/reactos/dll/win32/shell32_new/pidl.cpp @@ -0,0 +1,2411 @@ +/* + * pidl Handling + * + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * NOTES + * a pidl == NULL means desktop and is legal + * + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(pidl); +WINE_DECLARE_DEBUG_CHANNEL(shell); + +/* from comctl32.dll */ +EXTERN_C LPVOID WINAPI Alloc(INT); +EXTERN_C BOOL WINAPI Free(LPVOID); + +static LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl); +static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl); + +/************************************************************************* + * ILGetDisplayNameExA [SHELL32.186] + * + * Retrieves the display name of an ItemIDList + * + * PARAMS + * psf [I] Shell Folder to start with, if NULL the desktop is used + * pidl [I] ItemIDList relative to the psf to get the display name for + * path [O] Filled in with the display name, assumed to be at least MAX_PATH long + * type [I] Type of display name to retrieve + * 0 = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR uses always the desktop as root + * 1 = SHGDN_NORMAL relative to the root folder + * 2 = SHGDN_INFOLDER relative to the root folder, only the last name + * + * RETURNS + * True if the display name could be retrieved successfully, False otherwise + */ +static BOOL ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type) +{ + BOOL ret = FALSE; + WCHAR wPath[MAX_PATH]; + + TRACE("%p %p %p %d\n", psf, pidl, path, type); + + if (!pidl || !path) + return FALSE; + + ret = ILGetDisplayNameExW(psf, pidl, wPath, type); + WideCharToMultiByte(CP_ACP, 0, wPath, -1, path, MAX_PATH, NULL, NULL); + TRACE("%p %p %s\n", psf, pidl, debugstr_a(path)); + + return ret; +} + +BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type) +{ + CComPtr psfParent; + LPSHELLFOLDER lsf = psf; + HRESULT ret = NO_ERROR; + LPCITEMIDLIST pidllast; + STRRET strret; + DWORD flag; + + TRACE("%p %p %p %d\n", psf, pidl, path, type); + + if (!pidl || !path) + return FALSE; + + if (!lsf) + { + ret = SHGetDesktopFolder(&lsf); + if (FAILED(ret)) + return FALSE; + } + + if (type <= 2) + { + switch (type) + { + case ILGDN_FORPARSING: + flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR; + break; + case ILGDN_NORMAL: + flag = SHGDN_NORMAL; + break; + case ILGDN_INFOLDER: + flag = SHGDN_INFOLDER; + break; + default: + FIXME("Unknown type parameter = %x\n", type); + flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR; + break; + } + if (!*(const WORD*)pidl || type == ILGDN_FORPARSING) + { + ret = lsf->GetDisplayNameOf(pidl, flag, &strret); + if (SUCCEEDED(ret)) + { + if(!StrRetToStrNW(path, MAX_PATH, &strret, pidl)) + ret = E_FAIL; + } + } + else + { + ret = SHBindToParent(pidl, IID_IShellFolder, (LPVOID*)&psfParent, &pidllast); + if (SUCCEEDED(ret)) + { + ret = psfParent->GetDisplayNameOf(pidllast, flag, &strret); + if (SUCCEEDED(ret)) + { + if(!StrRetToStrNW(path, MAX_PATH, &strret, pidllast)) + ret = E_FAIL; + } + } + } + } + + TRACE("%p %p %s\n", psf, pidl, debugstr_w(path)); + + if (!psf) + lsf->Release(); + return SUCCEEDED(ret); +} + +/************************************************************************* + * ILGetDisplayNameEx [SHELL32.186] + */ +BOOL WINAPI ILGetDisplayNameEx(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type) +{ + TRACE_(shell)("%p %p %p %d\n", psf, pidl, path, type); + + if (SHELL_OsIsUnicode()) + return ILGetDisplayNameExW(psf, pidl, (LPWSTR)path, type); + return ILGetDisplayNameExA(psf, pidl, (LPSTR)path, type); +} + +/************************************************************************* + * ILGetDisplayName [SHELL32.15] + */ +BOOL WINAPI ILGetDisplayName(LPCITEMIDLIST pidl, LPVOID path) +{ + TRACE_(shell)("%p %p\n", pidl, path); + + if (SHELL_OsIsUnicode()) + return ILGetDisplayNameExW(NULL, pidl, (LPWSTR)path, ILGDN_FORPARSING); + return ILGetDisplayNameExA(NULL, pidl, (LPSTR)path, ILGDN_FORPARSING); +} + +/************************************************************************* + * ILFindLastID [SHELL32.16] + * + * NOTES + * observed: pidl=Desktop return=pidl + */ +LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl) +{ + LPCITEMIDLIST pidlLast = pidl; + + TRACE("(pidl=%p)\n",pidl); + + if (!pidl) + return NULL; + + while (pidl->mkid.cb) + { + pidlLast = pidl; + pidl = ILGetNext(pidl); + } + return (LPITEMIDLIST)pidlLast; +} + +/************************************************************************* + * ILRemoveLastID [SHELL32.17] + * + * NOTES + * when pidl=Desktop return=FALSE + */ +BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl) +{ + TRACE_(shell)("pidl=%p\n",pidl); + + if (!pidl || !pidl->mkid.cb) + return 0; + ILFindLastID(pidl)->mkid.cb = 0; + return 1; +} + +/************************************************************************* + * ILClone [SHELL32.18] + * + * NOTES + * duplicate an idlist + */ +LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl) +{ + DWORD len; + LPITEMIDLIST newpidl; + + if (!pidl) + return NULL; + + len = ILGetSize(pidl); + newpidl = (LPITEMIDLIST)SHAlloc(len); + if (newpidl) + memcpy(newpidl,pidl,len); + + TRACE("pidl=%p newpidl=%p\n",pidl, newpidl); + pdump(pidl); + + return newpidl; +} + +/************************************************************************* + * ILCloneFirst [SHELL32.19] + * + * NOTES + * duplicates the first idlist of a complex pidl + */ +LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl) +{ + DWORD len; + LPITEMIDLIST pidlNew = NULL; + + TRACE("pidl=%p\n", pidl); + pdump(pidl); + + if (pidl) + { + len = pidl->mkid.cb; + pidlNew = (LPITEMIDLIST)SHAlloc(len+2); + if (pidlNew) + { + memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop pidl */ + + if (len) + ILGetNext(pidlNew)->mkid.cb = 0x00; + } + } + TRACE("-- newpidl=%p\n",pidlNew); + + return pidlNew; +} + +/************************************************************************* + * ILLoadFromStream (SHELL32.26) + * + * NOTES + * the first two bytes are the len, the pidl is following then + */ +HRESULT WINAPI ILLoadFromStream (IStream * pStream, LPITEMIDLIST * ppPidl) +{ + WORD wLen = 0; + DWORD dwBytesRead; + HRESULT ret = E_FAIL; + + + TRACE_(shell)("%p %p\n", pStream , ppPidl); + + SHFree(*ppPidl); + *ppPidl = NULL; + + pStream->AddRef (); + + if (SUCCEEDED(pStream->Read(&wLen, 2, &dwBytesRead))) + { + TRACE("PIDL length is %d\n", wLen); + if (wLen != 0) + { + *ppPidl = (LPITEMIDLIST)SHAlloc(wLen); + if (SUCCEEDED(pStream->Read(*ppPidl , wLen, &dwBytesRead))) + { + TRACE("Stream read OK\n"); + ret = S_OK; + } + else + { + WARN("reading pidl failed\n"); + SHFree(*ppPidl); + *ppPidl = NULL; + } + } + else + { + *ppPidl = NULL; + ret = S_OK; + } + } + + /* we are not yet fully compatible */ + if (*ppPidl && !pcheck(*ppPidl)) + { + WARN("Check failed\n"); + SHFree(*ppPidl); + *ppPidl = NULL; + } + + pStream->Release (); + TRACE("done\n"); + return ret; +} + +/************************************************************************* + * ILSaveToStream (SHELL32.27) + * + * NOTES + * the first two bytes are the len, the pidl is following then + */ +HRESULT WINAPI ILSaveToStream (IStream * pStream, LPCITEMIDLIST pPidl) +{ + WORD wLen = 0; + HRESULT ret = E_FAIL; + + TRACE_(shell)("%p %p\n", pStream, pPidl); + + pStream->AddRef (); + + wLen = ILGetSize(pPidl); + + if (SUCCEEDED(pStream->Write(&wLen, 2, NULL))) + { + if (SUCCEEDED(pStream->Write(pPidl, wLen, NULL))) + ret = S_OK; + } + pStream->Release (); + + return ret; +} + +/************************************************************************* + * SHILCreateFromPath [SHELL32.28] + * + * Create an ItemIDList from a path + * + * PARAMS + * path [I] + * ppidl [O] + * attributes [I/O] requested attributes on call and actual attributes when + * the function returns + * + * RETURNS + * NO_ERROR if successful, or an OLE errer code otherwise + * + * NOTES + * Wrapper for IShellFolder_ParseDisplayName(). + */ +HRESULT WINAPI SHILCreateFromPathA(LPCSTR path, LPITEMIDLIST * ppidl, DWORD * attributes) +{ + WCHAR lpszDisplayName[MAX_PATH]; + + TRACE_(shell)("%s %p 0x%08x\n", path, ppidl, attributes ? *attributes : 0); + + if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH)) + lpszDisplayName[MAX_PATH-1] = 0; + + return SHILCreateFromPathW(lpszDisplayName, ppidl, attributes); +} + +HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST * ppidl, DWORD * attributes) +{ + CComPtr sf; + DWORD pchEaten; + HRESULT ret = E_FAIL; + + TRACE_(shell)("%s %p 0x%08x\n", debugstr_w(path), ppidl, attributes ? *attributes : 0); + + if (SUCCEEDED (SHGetDesktopFolder(&sf))) + ret = sf->ParseDisplayName(0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes); + return ret; +} + +EXTERN_C HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST * ppidl, DWORD * attributes) +{ + if ( SHELL_OsIsUnicode()) + return SHILCreateFromPathW ((LPCWSTR)path, ppidl, attributes); + return SHILCreateFromPathA ((LPCSTR)path, ppidl, attributes); +} + +/************************************************************************* + * SHCloneSpecialIDList [SHELL32.89] + * + * Create an ItemIDList to one of the special folders. + + * PARAMS + * hwndOwner [in] + * nFolder [in] CSIDL_xxxxx + * fCreate [in] Create folder if it does not exist + * + * RETURNS + * Success: The newly created pidl + * Failure: NULL, if inputs are invalid. + * + * NOTES + * exported by ordinal. + * Caller is responsible for deallocating the returned ItemIDList with the + * shells IMalloc interface, aka ILFree. + */ +LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, int nFolder, BOOL fCreate) +{ + LPITEMIDLIST ppidl; + TRACE_(shell)("(hwnd=%p,csidl=0x%x,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F"); + + if (fCreate) + nFolder |= CSIDL_FLAG_CREATE; + + SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl); + return ppidl; +} + +/************************************************************************* + * ILGlobalClone [SHELL32.20] + * + * Clones an ItemIDList using Alloc. + * + * PARAMS + * pidl [I] ItemIDList to clone + * + * RETURNS + * Newly allocated ItemIDList. + * + * NOTES + * exported by ordinal. + */ +LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl) +{ + DWORD len; + LPITEMIDLIST newpidl; + + if (!pidl) + return NULL; + + len = ILGetSize(pidl); + newpidl = (LPITEMIDLIST)Alloc(len); + if (newpidl) + memcpy(newpidl,pidl,len); + + TRACE("pidl=%p newpidl=%p\n",pidl, newpidl); + pdump(pidl); + + return newpidl; +} + +/************************************************************************* + * ILIsEqual [SHELL32.21] + * + */ +BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + char szData1[MAX_PATH]; + char szData2[MAX_PATH]; + + LPCITEMIDLIST pidltemp1 = pidl1; + LPCITEMIDLIST pidltemp2 = pidl2; + + TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2); + + /* + * Explorer reads from registry directly (StreamMRU), + * so we can only check here + */ + if (!pcheck(pidl1) || !pcheck (pidl2)) + return FALSE; + + pdump (pidl1); + pdump (pidl2); + + if (!pidl1 || !pidl2) + return FALSE; + + while (pidltemp1->mkid.cb && pidltemp2->mkid.cb) + { + _ILSimpleGetText(pidltemp1, szData1, MAX_PATH); + _ILSimpleGetText(pidltemp2, szData2, MAX_PATH); + + if (strcmp( szData1, szData2 )) + return FALSE; + + pidltemp1 = ILGetNext(pidltemp1); + pidltemp2 = ILGetNext(pidltemp2); + } + + if (!pidltemp1->mkid.cb && !pidltemp2->mkid.cb) + return TRUE; + + return FALSE; +} + +/************************************************************************* + * ILIsParent [SHELL32.23] + * + * Verifies that pidlParent is indeed the (immediate) parent of pidlChild. + * + * PARAMS + * pidlParent [I] + * pidlChild [I] + * bImmediate [I] only return true if the parent is the direct parent + * of the child + * + * RETURNS + * True if the parent ItemIDlist is a complete part of the child ItemIdList, + * False otherwise. + * + * NOTES + * parent = a/b, child = a/b/c -> true, c is in folder a/b + * child = a/b/c/d -> false if bImmediate is true, d is not in folder a/b + * child = a/b/c/d -> true if bImmediate is false, d is in a subfolder of a/b + */ +BOOL WINAPI ILIsParent(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL bImmediate) +{ + char szData1[MAX_PATH]; + char szData2[MAX_PATH]; + LPCITEMIDLIST pParent = pidlParent; + LPCITEMIDLIST pChild = pidlChild; + + TRACE("%p %p %x\n", pidlParent, pidlChild, bImmediate); + + if (!pParent || !pChild) + return FALSE; + + while (pParent->mkid.cb && pChild->mkid.cb) + { + _ILSimpleGetText(pParent, szData1, MAX_PATH); + _ILSimpleGetText(pChild, szData2, MAX_PATH); + + if (strcmp( szData1, szData2 )) + return FALSE; + + pParent = ILGetNext(pParent); + pChild = ILGetNext(pChild); + } + + /* child shorter or has equal length to parent */ + if (pParent->mkid.cb || !pChild->mkid.cb) + return FALSE; + + /* not immediate descent */ + if ( ILGetNext(pChild)->mkid.cb && bImmediate) + return FALSE; + + return TRUE; +} + +/************************************************************************* + * ILFindChild [SHELL32.24] + * + * Compares elements from pidl1 and pidl2. + * + * PARAMS + * pidl1 [I] + * pidl2 [I] + * + * RETURNS + * pidl1 is desktop pidl2 + * pidl1 shorter pidl2 pointer to first different element of pidl2 + * if there was at least one equal element + * pidl2 shorter pidl1 0 + * pidl2 equal pidl1 pointer to last 0x00-element of pidl2 + * + * NOTES + * exported by ordinal. + */ +LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + char szData1[MAX_PATH]; + char szData2[MAX_PATH]; + + LPCITEMIDLIST pidltemp1 = pidl1; + LPCITEMIDLIST pidltemp2 = pidl2; + LPCITEMIDLIST ret=NULL; + + TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2); + + /* explorer reads from registry directly (StreamMRU), + so we can only check here */ + if ((!pcheck (pidl1)) || (!pcheck (pidl2))) + return FALSE; + + pdump (pidl1); + pdump (pidl2); + + if (_ILIsDesktop(pidl1)) + { + ret = pidl2; + } + else + { + while (pidltemp1->mkid.cb && pidltemp2->mkid.cb) + { + _ILSimpleGetText(pidltemp1, szData1, MAX_PATH); + _ILSimpleGetText(pidltemp2, szData2, MAX_PATH); + + if (strcmp(szData1,szData2)) + break; + + pidltemp1 = ILGetNext(pidltemp1); + pidltemp2 = ILGetNext(pidltemp2); + ret = pidltemp2; + } + + if (pidltemp1->mkid.cb) + ret = NULL; /* elements of pidl1 left*/ + } + TRACE_(shell)("--- %p\n", ret); + return (LPITEMIDLIST)ret; /* pidl 1 is shorter */ +} + +/************************************************************************* + * ILCombine [SHELL32.25] + * + * Concatenates two complex ItemIDLists. + * + * PARAMS + * pidl1 [I] first complex ItemIDLists + * pidl2 [I] complex ItemIDLists to append + * + * RETURNS + * if both pidl's == NULL NULL + * if pidl1 == NULL cloned pidl2 + * if pidl2 == NULL cloned pidl1 + * otherwise new pidl with pidl2 appended to pidl1 + * + * NOTES + * exported by ordinal. + * Does not destroy the passed in ItemIDLists! + */ +LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + DWORD len1,len2; + LPITEMIDLIST pidlNew; + + TRACE("pidl=%p pidl=%p\n",pidl1,pidl2); + + if (!pidl1 && !pidl2) return NULL; + + pdump (pidl1); + pdump (pidl2); + + if (!pidl1) + { + pidlNew = ILClone(pidl2); + return pidlNew; + } + + if (!pidl2) + { + pidlNew = ILClone(pidl1); + return pidlNew; + } + + len1 = ILGetSize(pidl1)-2; + len2 = ILGetSize(pidl2); + pidlNew = (LPITEMIDLIST)SHAlloc(len1+len2); + + if (pidlNew) + { + memcpy(pidlNew,pidl1,len1); + memcpy(((BYTE *)pidlNew)+len1,pidl2,len2); + } + + /* TRACE(pidl,"--new pidl=%p\n",pidlNew);*/ + return pidlNew; +} + +/************************************************************************* + * SHGetRealIDL [SHELL32.98] + * + * NOTES + */ +HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST *pidlReal) +{ + CComPtr pDataObj; + HRESULT hr; + + hr = lpsf->GetUIObjectOf(0, 1, &pidlSimple, + IID_IDataObject, 0, (LPVOID*)&pDataObj); + if (SUCCEEDED(hr)) + { + STGMEDIUM medium; + FORMATETC fmt; + + fmt.cfFormat = RegisterClipboardFormatW(CFSTR_SHELLIDLIST); + fmt.ptd = NULL; + fmt.dwAspect = DVASPECT_CONTENT; + fmt.lindex = -1; + fmt.tymed = TYMED_HGLOBAL; + + hr = pDataObj->GetData(&fmt, &medium); + + if (SUCCEEDED(hr)) + { + /*assert(pida->cidl==1);*/ + LPIDA pida = (LPIDA)GlobalLock(medium.hGlobal); + + LPCITEMIDLIST pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]); + LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]); + + *pidlReal = ILCombine(pidl_folder, pidl_child); + + if (!*pidlReal) + hr = E_OUTOFMEMORY; + + GlobalUnlock(medium.hGlobal); + GlobalFree(medium.hGlobal); + } + } + + return hr; +} + +/************************************************************************* + * SHLogILFromFSIL [SHELL32.95] + * + * NOTES + * pild = CSIDL_DESKTOP ret = 0 + * pild = CSIDL_DRIVES ret = 0 + */ +EXTERN_C LPITEMIDLIST WINAPI SHLogILFromFSIL(LPITEMIDLIST pidl) +{ + FIXME("(pidl=%p)\n",pidl); + + pdump(pidl); + + return 0; +} + +/************************************************************************* + * ILGetSize [SHELL32.152] + * + * Gets the byte size of an ItemIDList including zero terminator + * + * PARAMS + * pidl [I] ItemIDList + * + * RETURNS + * size of pidl in bytes + * + * NOTES + * exported by ordinal + */ +UINT WINAPI ILGetSize(LPCITEMIDLIST pidl) +{ + LPCSHITEMID si = &(pidl->mkid); + UINT len=0; + + if (pidl) + { + while (si->cb) + { + len += si->cb; + si = (LPCSHITEMID)(((const BYTE*)si)+si->cb); + } + len += 2; + } + TRACE("pidl=%p size=%u\n",pidl, len); + return len; +} + +/************************************************************************* + * ILGetNext [SHELL32.153] + * + * Gets the next ItemID of an ItemIDList + * + * PARAMS + * pidl [I] ItemIDList + * + * RETURNS + * null -> null + * desktop -> null + * simple pidl -> pointer to 0x0000 element + * + * NOTES + * exported by ordinal. + */ +LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl) +{ + WORD len; + + TRACE("%p\n", pidl); + + if (pidl) + { + len = pidl->mkid.cb; + if (len) + { + pidl = (LPCITEMIDLIST) (((const BYTE*)pidl)+len); + TRACE("-- %p\n", pidl); + return (LPITEMIDLIST)pidl; + } + } + return NULL; +} + +/************************************************************************* + * ILAppend [SHELL32.154] + * + * Adds the single ItemID item to the ItemIDList indicated by pidl. + * If bEnd is FALSE, inserts the item in the front of the list, + * otherwise it adds the item to the end. (???) + * + * PARAMS + * pidl [I] ItemIDList to extend + * item [I] ItemID to prepend/append + * bEnd [I] Indicates if the item should be appended + * + * NOTES + * Destroys the passed in idlist! (???) + */ +EXTERN_C LPITEMIDLIST WINAPI ILAppend(LPITEMIDLIST pidl, LPCITEMIDLIST item, BOOL bEnd) +{ + LPITEMIDLIST idlRet; + + WARN("(pidl=%p,pidl=%p,%08u)semi-stub\n",pidl,item,bEnd); + + pdump (pidl); + pdump (item); + + if (_ILIsDesktop(pidl)) + { + idlRet = ILClone(item); + SHFree (pidl); + return idlRet; + } + + if (bEnd) + idlRet = ILCombine(pidl, item); + else + idlRet = ILCombine(item, pidl); + + SHFree(pidl); + return idlRet; +} + +/************************************************************************* + * ILFree [SHELL32.155] + * + * Frees memory (if not NULL) allocated by SHMalloc allocator + * + * PARAMS + * pidl [I] + * + * RETURNS + * Nothing + * + * NOTES + * exported by ordinal + */ +void WINAPI ILFree(LPITEMIDLIST pidl) +{ + TRACE("(pidl=%p)\n",pidl); + SHFree(pidl); +} + +/************************************************************************* + * ILGlobalFree [SHELL32.156] + * + * Frees memory (if not NULL) allocated by Alloc allocator + * + * PARAMS + * pidl [I] + * + * RETURNS + * Nothing + * + * NOTES + * exported by ordinal. + */ +void WINAPI ILGlobalFree( LPITEMIDLIST pidl) +{ + TRACE("%p\n", pidl); + + Free(pidl); +} + +/************************************************************************* + * ILCreateFromPathA [SHELL32.189] + * + * Creates a complex ItemIDList from a path and returns it. + * + * PARAMS + * path [I] + * + * RETURNS + * the newly created complex ItemIDList or NULL if failed + * + * NOTES + * exported by ordinal. + */ +LPITEMIDLIST WINAPI ILCreateFromPathA (LPCSTR path) +{ + LPITEMIDLIST pidlnew = NULL; + + TRACE_(shell)("%s\n", debugstr_a(path)); + + if (SUCCEEDED(SHILCreateFromPathA(path, &pidlnew, NULL))) + return pidlnew; + return NULL; +} + +/************************************************************************* + * ILCreateFromPathW [SHELL32.190] + * + * See ILCreateFromPathA. + */ +LPITEMIDLIST WINAPI ILCreateFromPathW (LPCWSTR path) +{ + LPITEMIDLIST pidlnew = NULL; + + TRACE_(shell)("%s\n", debugstr_w(path)); + + if (SUCCEEDED(SHILCreateFromPathW(path, &pidlnew, NULL))) + return pidlnew; + return NULL; +} + +/************************************************************************* + * ILCreateFromPath [SHELL32.157] + */ +EXTERN_C LPITEMIDLIST WINAPI ILCreateFromPathAW (LPCVOID path) +{ + if ( SHELL_OsIsUnicode()) + return ILCreateFromPathW ((LPCWSTR)path); + return ILCreateFromPathA ((LPCSTR)path); +} + +/************************************************************************* + * _ILParsePathW [internal] + * + * Creates an ItemIDList from a path and returns it. + * + * PARAMS + * path [I] path to parse and convert into an ItemIDList + * lpFindFile [I] pointer to buffer to initialize the FileSystem + * Bind Data object with + * bBindCtx [I] indicates to create a BindContext and assign a + * FileSystem Bind Data object + * ppidl [O] the newly create ItemIDList + * prgfInOut [I/O] requested attributes on input and actual + * attributes on return + * + * RETURNS + * NO_ERROR on success or an OLE error code + * + * NOTES + * If either lpFindFile is non-NULL or bBindCtx is TRUE, this function + * creates a BindContext object and assigns a FileSystem Bind Data object + * to it, passing the BindContext to IShellFolder_ParseDisplayName. Each + * IShellFolder uses that FileSystem Bind Data object of the BindContext + * to pass data about the current path element to the next object. This + * is used to avoid having to verify the current path element on disk, so + * that creating an ItemIDList from a nonexistent path still can work. + */ +static HRESULT _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile, + BOOL bBindCtx, LPITEMIDLIST *ppidl, LPDWORD prgfInOut) +{ + CComPtr pSF; + CComPtr pBC; + HRESULT ret; + + TRACE("%s %p %d (%p)->%p (%p)->0x%x\n", debugstr_w(path), lpFindFile, bBindCtx, + ppidl, ppidl ? *ppidl : NULL, + prgfInOut, prgfInOut ? *prgfInOut : 0); + + ret = SHGetDesktopFolder(&pSF); + if (FAILED(ret)) + return ret; + + if (lpFindFile || bBindCtx) + ret = IFileSystemBindData_Constructor(lpFindFile, &pBC); + + if (SUCCEEDED(ret)) + { + ret = pSF->ParseDisplayName(0, pBC, (LPOLESTR)path, NULL, ppidl, prgfInOut); + } + + if (FAILED(ret) && ppidl) + *ppidl = NULL; + + TRACE("%s %p 0x%x\n", debugstr_w(path), ppidl ? *ppidl : NULL, prgfInOut ? *prgfInOut : 0); + + return ret; +} + +/************************************************************************* + * SHSimpleIDListFromPath [SHELL32.162] + * + * Creates a simple ItemIDList from a path and returns it. This function + * does not fail on nonexistent paths. + * + * PARAMS + * path [I] path to parse and convert into an ItemIDList + * + * RETURNS + * the newly created simple ItemIDList + * + * NOTES + * Simple in the name does not mean a relative ItemIDList but rather a + * fully qualified list, where only the file name is filled in and the + * directory flag for those ItemID elements this is known about, eg. + * it is not the last element in the ItemIDList or the actual directory + * exists on disk. + * exported by ordinal. + */ +LPITEMIDLIST WINAPI SHSimpleIDListFromPathA(LPCSTR lpszPath) +{ + LPITEMIDLIST pidl = NULL; + LPWSTR wPath = NULL; + int len; + + TRACE("%s\n", debugstr_a(lpszPath)); + + if (lpszPath) + { + len = MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, NULL, 0); + wPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, wPath, len); + } + + _ILParsePathW(wPath, NULL, TRUE, &pidl, NULL); + + HeapFree(GetProcessHeap(), 0, wPath); + TRACE("%s %p\n", debugstr_a(lpszPath), pidl); + return pidl; +} + +LPITEMIDLIST WINAPI SHSimpleIDListFromPathW(LPCWSTR lpszPath) +{ + LPITEMIDLIST pidl = NULL; + + TRACE("%s\n", debugstr_w(lpszPath)); + + _ILParsePathW(lpszPath, NULL, TRUE, &pidl, NULL); + TRACE("%s %p\n", debugstr_w(lpszPath), pidl); + return pidl; +} + +EXTERN_C LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW(LPCVOID lpszPath) +{ + if ( SHELL_OsIsUnicode()) + return SHSimpleIDListFromPathW ((LPCWSTR)lpszPath); + return SHSimpleIDListFromPathA ((LPCSTR)lpszPath); +} + +/************************************************************************* + * SHGetDataFromIDListA [SHELL32.247] + * + * NOTES + * the pidl can be a simple one. since we can't get the path out of the pidl + * we have to take all data from the pidl + */ +HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, + int nFormat, LPVOID dest, int len) +{ + LPSTR filename, shortname; + WIN32_FIND_DATAA * pfd; + + TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len); + + pdump(pidl); + if (!psf || !dest) + return E_INVALIDARG; + + switch (nFormat) + { + case SHGDFIL_FINDDATA: + pfd = (WIN32_FIND_DATAA *)dest; + + if (_ILIsDrive(pidl) || _ILIsSpecialFolder(pidl)) + return E_INVALIDARG; + + if (len < (int)sizeof(WIN32_FIND_DATAA)) + return E_INVALIDARG; + + ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA)); + _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime)); + pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0); + pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0); + + filename = _ILGetTextPointer(pidl); + shortname = _ILGetSTextPointer(pidl); + + if (filename) + lstrcpynA(pfd->cFileName, filename, sizeof(pfd->cFileName)); + else + pfd->cFileName[0] = '\0'; + + if (shortname) + lstrcpynA(pfd->cAlternateFileName, shortname, sizeof(pfd->cAlternateFileName)); + else + pfd->cAlternateFileName[0] = '\0'; + return NOERROR; + + case SHGDFIL_NETRESOURCE: + case SHGDFIL_DESCRIPTIONID: + FIXME_(shell)("SHGDFIL %i stub\n", nFormat); + break; + + default: + ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat); + } + + return E_INVALIDARG; +} + +/************************************************************************* + * SHGetDataFromIDListW [SHELL32.248] + * + */ +HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, + int nFormat, LPVOID dest, int len) +{ + LPSTR filename, shortname; + WIN32_FIND_DATAW * pfd = (WIN32_FIND_DATAW *)dest; + + TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len); + + pdump(pidl); + + if (!psf || !dest) + return E_INVALIDARG; + + switch (nFormat) + { + case SHGDFIL_FINDDATA: + pfd = (WIN32_FIND_DATAW *)dest; + + if (_ILIsDrive(pidl)) + return E_INVALIDARG; + + if (len < (int)sizeof(WIN32_FIND_DATAW)) + return E_INVALIDARG; + + ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA)); + _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime)); + pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0); + pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0); + + filename = _ILGetTextPointer(pidl); + shortname = _ILGetSTextPointer(pidl); + + if (!filename) + pfd->cFileName[0] = '\0'; + else if (!MultiByteToWideChar(CP_ACP, 0, filename, -1, pfd->cFileName, MAX_PATH)) + pfd->cFileName[MAX_PATH-1] = 0; + + if (!shortname) + pfd->cAlternateFileName[0] = '\0'; + else if (!MultiByteToWideChar(CP_ACP, 0, shortname, -1, pfd->cAlternateFileName, 14)) + pfd->cAlternateFileName[13] = 0; + return NOERROR; + + case SHGDFIL_NETRESOURCE: + case SHGDFIL_DESCRIPTIONID: + FIXME_(shell)("SHGDFIL %i stub\n", nFormat); + break; + + default: + ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat); + } + + return E_INVALIDARG; +} + +/************************************************************************* + * SHGetPathFromIDListA [SHELL32.@][NT 4.0: SHELL32.220] + * + * PARAMETERS + * pidl, [IN] pidl + * pszPath [OUT] path + * + * RETURNS + * path from a passed PIDL. + * + * NOTES + * NULL returns FALSE + * desktop pidl gives path to desktop directory back + * special pidls returning FALSE + */ +BOOL WINAPI SHGetPathFromIDListA(LPCITEMIDLIST pidl, LPSTR pszPath) +{ + WCHAR wszPath[MAX_PATH]; + BOOL bSuccess; + + bSuccess = SHGetPathFromIDListW(pidl, wszPath); + WideCharToMultiByte(CP_ACP, 0, wszPath, -1, pszPath, MAX_PATH, NULL, NULL); + + return bSuccess; +} + +/************************************************************************* + * SHGetPathFromIDListW [SHELL32.@] + * + * See SHGetPathFromIDListA. + */ +BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath) +{ + HRESULT hr; + LPCITEMIDLIST pidlLast; + CComPtr psfFolder; + DWORD dwAttributes; + STRRET strret; + + TRACE_(shell)("(pidl=%p,%p)\n", pidl, pszPath); + pdump(pidl); + + *pszPath = '\0'; + if (!pidl) + return FALSE; + + hr = SHBindToParent(pidl, IID_IShellFolder, (VOID**)&psfFolder, &pidlLast); + if (FAILED(hr)) return FALSE; + + dwAttributes = SFGAO_FILESYSTEM; + hr = psfFolder->GetAttributesOf(1, &pidlLast, &dwAttributes); + if (FAILED(hr) || !(dwAttributes & SFGAO_FILESYSTEM)) { + return FALSE; + } + + hr = psfFolder->GetDisplayNameOf(pidlLast, SHGDN_FORPARSING, &strret); + if (FAILED(hr)) return FALSE; + + hr = StrRetToBufW(&strret, pidlLast, pszPath, MAX_PATH); + + TRACE_(shell)("-- %s, 0x%08x\n",debugstr_w(pszPath), hr); + return SUCCEEDED(hr); +} + +/************************************************************************* + * SHBindToParent [shell version 5.0] + */ +HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast) +{ + CComPtr psfDesktop; + HRESULT hr=E_FAIL; + + TRACE_(shell)("pidl=%p\n", pidl); + pdump(pidl); + + if (!pidl || !ppv) + return E_INVALIDARG; + + *ppv = NULL; + if (ppidlLast) + *ppidlLast = NULL; + + hr = SHGetDesktopFolder(&psfDesktop); + if (FAILED(hr)) + return hr; + + if (_ILIsPidlSimple(pidl)) + { + /* we are on desktop level */ + hr = psfDesktop->QueryInterface(riid, ppv); + } + else + { + LPITEMIDLIST pidlParent = ILClone(pidl); + ILRemoveLastID(pidlParent); + hr = psfDesktop->BindToObject(pidlParent, NULL, riid, ppv); + SHFree (pidlParent); + } + + if (SUCCEEDED(hr) && ppidlLast) + *ppidlLast = ILFindLastID(pidl); + + TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr); + return hr; +} + +/************************************************************************** + * + * internal functions + * + * ### 1. section creating pidls ### + * + ************************************************************************* + */ + +/* Basic PIDL constructor. Allocates size + 5 bytes, where: + * - two bytes are SHITEMID.cb + * - one byte is PIDLDATA.type + * - two bytes are the NULL PIDL terminator + * Sets type of the returned PIDL to type. + */ +static LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size) +{ + LPITEMIDLIST pidlOut = NULL; + + pidlOut = (LPITEMIDLIST)SHAlloc(size + 5); + if(pidlOut) + { + LPPIDLDATA pData; + LPITEMIDLIST pidlNext; + + ZeroMemory(pidlOut, size + 5); + pidlOut->mkid.cb = size + 3; + + pData = _ILGetDataPointer(pidlOut); + if (pData) + pData->type = type; + + pidlNext = ILGetNext(pidlOut); + if (pidlNext) + pidlNext->mkid.cb = 0x00; + TRACE("-- (pidl=%p, size=%u)\n", pidlOut, size); + } + + return pidlOut; +} + +LPITEMIDLIST _ILCreateDesktop(void) +{ + LPITEMIDLIST ret; + + TRACE("()\n"); + ret = (LPITEMIDLIST)SHAlloc(2); + if (ret) + ret->mkid.cb = 0; + return ret; +} + +LPITEMIDLIST _ILCreateMyComputer(void) +{ + TRACE("()\n"); + return _ILCreateGuid(PT_GUID, CLSID_MyComputer); +} + +LPITEMIDLIST _ILCreateMyDocuments(void) +{ + TRACE("()\n"); + return _ILCreateGuid(PT_GUID, CLSID_MyDocuments); +} + +LPITEMIDLIST _ILCreateIExplore(void) +{ + TRACE("()\n"); + return _ILCreateGuid(PT_GUID, CLSID_Internet); +} + +LPITEMIDLIST _ILCreateControlPanel(void) +{ + LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, CLSID_MyComputer), ret = NULL; + + TRACE("()\n"); + if (parent) + { + LPITEMIDLIST cpl = _ILCreateGuid(PT_SHELLEXT, CLSID_ControlPanel); + + if (cpl) + { + ret = ILCombine(parent, cpl); + SHFree(cpl); + } + SHFree(parent); + } + return ret; +} + +LPITEMIDLIST _ILCreatePrinters(void) +{ + LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, CLSID_MyComputer), ret = NULL; + + TRACE("()\n"); + if (parent) + { + LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, CLSID_Printers); + + if (printers) + { + ret = ILCombine(parent, printers); + SHFree(printers); + } + SHFree(parent); + } + return ret; +} + +LPITEMIDLIST _ILCreateNetwork(void) +{ + TRACE("()\n"); + return _ILCreateGuid(PT_GUID, CLSID_NetworkPlaces); +} + +LPITEMIDLIST _ILCreateBitBucket(void) +{ + TRACE("()\n"); + return _ILCreateGuid(PT_GUID, CLSID_RecycleBin); +} + +LPITEMIDLIST _ILCreateAdminTools(void) +{ + TRACE("()\n"); + return _ILCreateGuid(PT_GUID, CLSID_AdminFolderShortcut); //FIXME +} + +LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid) +{ + LPITEMIDLIST pidlOut; + + if (type == PT_SHELLEXT || type == PT_GUID || type == PT_YAGUID) + { + pidlOut = _ILAlloc(type, sizeof(GUIDStruct)); + if (pidlOut) + { + LPPIDLDATA pData = _ILGetDataPointer(pidlOut); + + pData->u.guid.guid = guid; + TRACE("-- create GUID-pidl %s\n", + debugstr_guid(&(pData->u.guid.guid))); + } + } + else + { + WARN("%d: invalid type for GUID\n", type); + pidlOut = NULL; + } + return pidlOut; +} + +LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID) +{ + IID iid; + + if (FAILED(SHCLSIDFromStringA(szGUID, &iid))) + { + ERR("%s is not a GUID\n", szGUID); + return NULL; + } + return _ILCreateGuid(PT_GUID, iid); +} + +LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID) +{ + IID iid; + + if (FAILED(CLSIDFromString((LPOLESTR)szGUID, &iid))) + { + ERR("%s is not a GUID\n", debugstr_w(szGUID)); + return NULL; + } + return _ILCreateGuid(PT_GUID, iid); +} + +LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd ) +{ + char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */ + DWORD len, len1, wlen, alen; + LPITEMIDLIST pidl; + PIDLTYPE type; + + if (!wfd) + return NULL; + + TRACE("(%s, %s)\n",debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName)); + + /* prepare buffer with both names */ + len = WideCharToMultiByte(CP_ACP,0,wfd->cFileName,-1,buff,MAX_PATH,NULL,NULL); + len1 = WideCharToMultiByte(CP_ACP,0,wfd->cAlternateFileName,-1, buff+len, sizeof(buff)-len, NULL, NULL); + alen = len + len1; + + type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE; + + wlen = wcslen(wfd->cFileName) + 1; + pidl = _ILAlloc(type, sizeof(FileStruct) + (alen + (alen & 1)) + + sizeof(FileStructW) + wlen * sizeof(WCHAR) + sizeof(WORD)); + if (pidl) + { + LPPIDLDATA pData = _ILGetDataPointer(pidl); + FileStruct *fs = &pData->u.file; + FileStructW *fsw; + WORD *pOffsetW; + + FileTimeToDosDateTime( &wfd->ftLastWriteTime, &fs->uFileDate, &fs->uFileTime); + fs->dwFileSize = wfd->nFileSizeLow; + fs->uFileAttribs = wfd->dwFileAttributes; + memcpy(fs->szNames, buff, alen); + + fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1)); + fsw->cbLen = sizeof(FileStructW) + wlen * sizeof(WCHAR) + sizeof(WORD); + FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime); + FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime); + memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR)); + + pOffsetW = (WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD)); + *pOffsetW = (LPBYTE)fsw - (LPBYTE)pidl; + TRACE("-- Set Value: %s\n",debugstr_w(fsw->wszName)); + } + return pidl; + +} + +HRESULT _ILCreateFromPathW(LPCWSTR szPath, LPITEMIDLIST* ppidl) +{ + HANDLE hFile; + WIN32_FIND_DATAW stffile; + + if (!ppidl) + return E_INVALIDARG; + + hFile = FindFirstFileW(szPath, &stffile); + if (hFile == INVALID_HANDLE_VALUE) + return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); + + FindClose(hFile); + + *ppidl = _ILCreateFromFindDataW(&stffile); + + return *ppidl ? S_OK : E_OUTOFMEMORY; +} + +LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew) +{ + LPITEMIDLIST pidlOut; + + TRACE("(%s)\n",debugstr_w(lpszNew)); + + pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct)); + if (pidlOut) + { + LPSTR pszDest; + + pszDest = _ILGetTextPointer(pidlOut); + if (pszDest) + { + strcpy(pszDest, "x:\\"); + pszDest[0]=towupper(lpszNew[0]); + TRACE("-- create Drive: %s\n", debugstr_a(pszDest)); + } + } + return pidlOut; +} + +/************************************************************************** + * _ILGetDrive() + * + * Gets the text for the drive eg. 'c:\' + * + * RETURNS + * strlen (lpszText) + */ +DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize) +{ + TRACE("(%p,%p,%u)\n",pidl,pOut,uSize); + + if(_ILIsMyComputer(pidl)) + pidl = ILGetNext(pidl); + + if (pidl && _ILIsDrive(pidl)) + return _ILSimpleGetText(pidl, pOut, uSize); + + return 0; +} + +/************************************************************************** + * + * ### 2. section testing pidls ### + * + ************************************************************************** + * _ILIsUnicode() + * _ILIsDesktop() + * _ILIsMyComputer() + * _ILIsSpecialFolder() + * _ILIsDrive() + * _ILIsFolder() + * _ILIsValue() + * _ILIsPidlSimple() + */ +BOOL _ILIsUnicode(LPCITEMIDLIST pidl) +{ + LPPIDLDATA lpPData = _ILGetDataPointer(pidl); + + TRACE("(%p)\n",pidl); + + return (pidl && lpPData && PT_VALUEW == lpPData->type); +} + +BOOL _ILIsDesktop(LPCITEMIDLIST pidl) +{ + TRACE("(%p)\n",pidl); + + return pidl && pidl->mkid.cb ? 0 : 1; +} + +BOOL _ILIsMyDocuments(LPCITEMIDLIST pidl) +{ + IID *iid = _ILGetGUIDPointer(pidl); + + TRACE("(%p)\n",pidl); + + if (iid) + return IsEqualIID(*iid, CLSID_MyDocuments); + return FALSE; +} + +BOOL _ILIsControlPanel(LPCITEMIDLIST pidl) +{ + IID *iid = _ILGetGUIDPointer(pidl); + + TRACE("(%p)\n",pidl); + + if (iid) + return IsEqualIID(*iid, CLSID_ControlPanel); + return FALSE; +} + +BOOL _ILIsNetHood(LPCITEMIDLIST pidl) +{ + IID *iid = _ILGetGUIDPointer(pidl); + + TRACE("(%p)\n",pidl); + + if (iid) + return IsEqualIID(*iid, CLSID_NetworkPlaces); + return FALSE; +} + + +LPITEMIDLIST _ILCreateNetHood(void) +{ + return _ILCreateGuid(PT_GUID, CLSID_NetworkPlaces); +} + +LPITEMIDLIST _ILCreateFont(void) +{ + return _ILCreateGuid(PT_GUID, CLSID_FontsFolderShortcut); +} + +BOOL _ILIsMyComputer(LPCITEMIDLIST pidl) +{ + IID *iid = _ILGetGUIDPointer(pidl); + + TRACE("(%p)\n",pidl); + + if (iid) + return IsEqualIID(*iid, CLSID_MyComputer); + return FALSE; +} + +BOOL _ILIsPrinter(LPCITEMIDLIST pidl) +{ + IID *iid = _ILGetGUIDPointer(pidl); + + TRACE("(%p)\n",pidl); + + if (iid) + return IsEqualIID(*iid, CLSID_Printers); + return FALSE; +} + +BOOL _ILIsBitBucket(LPCITEMIDLIST pidl) +{ + IID *iid = _ILGetGUIDPointer(pidl); + + TRACE("(%p)\n",pidl); + + if (iid) + return IsEqualIID(*iid, CLSID_RecycleBin); + return FALSE; +} + +BOOL _ILIsAdminTools(LPCITEMIDLIST pidl) +{ + IID *iid = _ILGetGUIDPointer(pidl); + + TRACE("(%p)\n",pidl); + + if (iid) + return IsEqualIID(*iid, CLSID_AdminFolderShortcut); + else + return FALSE; +} + +BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl) +{ + LPPIDLDATA lpPData = _ILGetDataPointer(pidl); + + TRACE("(%p)\n",pidl); + + return (pidl && ( (lpPData && (PT_GUID== lpPData->type || PT_SHELLEXT== lpPData->type || PT_YAGUID == lpPData->type)) || + (pidl && pidl->mkid.cb == 0x00) + )); +} + +BOOL _ILIsDrive(LPCITEMIDLIST pidl) +{ + LPPIDLDATA lpPData = _ILGetDataPointer(pidl); + + TRACE("(%p)\n",pidl); + + return (pidl && lpPData && (PT_DRIVE == lpPData->type || + PT_DRIVE1 == lpPData->type || + PT_DRIVE2 == lpPData->type || + PT_DRIVE3 == lpPData->type)); +} + +BOOL _ILIsFolder(LPCITEMIDLIST pidl) +{ + LPPIDLDATA lpPData = _ILGetDataPointer(pidl); + + TRACE("(%p)\n",pidl); + + return (pidl && lpPData && (PT_FOLDER == lpPData->type || PT_FOLDER1 == lpPData->type)); +} + +BOOL _ILIsValue(LPCITEMIDLIST pidl) +{ + LPPIDLDATA lpPData = _ILGetDataPointer(pidl); + + TRACE("(%p)\n",pidl); + + return (pidl && lpPData && PT_VALUE == lpPData->type); +} + +BOOL _ILIsCPanelStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA lpPData = _ILGetDataPointer(pidl); + + TRACE("(%p)\n",pidl); + + return (pidl && lpPData && (lpPData->type == 0)); +} + +/************************************************************************** + * _ILIsPidlSimple + */ +BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl) +{ + BOOL ret = TRUE; + + if(! _ILIsDesktop(pidl)) /* pidl=NULL or mkid.cb=0 */ + { + WORD len = pidl->mkid.cb; + LPCITEMIDLIST pidlnext = (LPCITEMIDLIST) (((const BYTE*)pidl) + len ); + + if (pidlnext->mkid.cb) + ret = FALSE; + } + + TRACE("%s\n", ret ? "Yes" : "No"); + return ret; +} + +/************************************************************************** + * + * ### 3. section getting values from pidls ### + */ + + /************************************************************************** + * _ILSimpleGetText + * + * gets the text for the first item in the pidl (eg. simple pidl) + * + * returns the length of the string + */ +DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize) +{ + DWORD dwReturn=0; + LPSTR szSrc; + LPWSTR szSrcW; + GUID const * riid; + char szTemp[MAX_PATH]; + + TRACE("(%p %p %x)\n",pidl,szOut,uOutSize); + + if (!pidl) + return 0; + + if (szOut) + *szOut = 0; + + if (_ILIsDesktop(pidl)) + { + /* desktop */ + if (HCR_GetClassNameA(CLSID_ShellDesktop, szTemp, MAX_PATH)) + { + if (szOut) + lstrcpynA(szOut, szTemp, uOutSize); + + dwReturn = strlen (szTemp); + } + } + else if (( szSrc = _ILGetTextPointer(pidl) )) + { + /* filesystem */ + if (szOut) + lstrcpynA(szOut, szSrc, uOutSize); + + dwReturn = strlen(szSrc); + } + else if (( szSrcW = _ILGetTextPointerW(pidl) )) + { + /* unicode filesystem */ + WideCharToMultiByte(CP_ACP,0,szSrcW, -1, szTemp, MAX_PATH, NULL, NULL); + + if (szOut) + lstrcpynA(szOut, szTemp, uOutSize); + + dwReturn = strlen (szTemp); + } + else if (( riid = _ILGetGUIDPointer(pidl) )) + { + /* special folder */ + if (HCR_GetClassNameA(*riid, szTemp, MAX_PATH) ) + { + if (szOut) + lstrcpynA(szOut, szTemp, uOutSize); + + dwReturn = strlen (szTemp); + } + } + else + { + ERR("-- no text\n"); + } + + TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_a(szOut),dwReturn); + return dwReturn; +} + + /************************************************************************** + * _ILSimpleGetTextW + * + * gets the text for the first item in the pidl (eg. simple pidl) + * + * returns the length of the string + */ +DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize) +{ + DWORD dwReturn; + FileStructW *pFileStructW = _ILGetFileStructW(pidl); + + TRACE("(%p %p %x)\n",pidl,szOut,uOutSize); + + if (pFileStructW) { + lstrcpynW(szOut, pFileStructW->wszName, uOutSize); + dwReturn = wcslen(pFileStructW->wszName); + } else { + GUID const * riid; + WCHAR szTemp[MAX_PATH]; + LPSTR szSrc; + LPWSTR szSrcW; + dwReturn=0; + + if (!pidl) + return 0; + + if (szOut) + *szOut = 0; + + if (_ILIsDesktop(pidl)) + { + /* desktop */ + if (HCR_GetClassNameW(CLSID_ShellDesktop, szTemp, MAX_PATH)) + { + if (szOut) + lstrcpynW(szOut, szTemp, uOutSize); + + dwReturn = wcslen (szTemp); + } + } + else if (( szSrcW = _ILGetTextPointerW(pidl) )) + { + /* unicode filesystem */ + if (szOut) + lstrcpynW(szOut, szSrcW, uOutSize); + + dwReturn = wcslen(szSrcW); + } + else if (( szSrc = _ILGetTextPointer(pidl) )) + { + /* filesystem */ + MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, MAX_PATH); + + if (szOut) + lstrcpynW(szOut, szTemp, uOutSize); + + dwReturn = wcslen (szTemp); + } + else if (( riid = _ILGetGUIDPointer(pidl) )) + { + /* special folder */ + if ( HCR_GetClassNameW(*riid, szTemp, MAX_PATH) ) + { + if (szOut) + lstrcpynW(szOut, szTemp, uOutSize); + + dwReturn = wcslen (szTemp); + } + } + else + { + ERR("-- no text\n"); + } + } + + TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_w(szOut),dwReturn); + return dwReturn; +} + +/************************************************************************** + * + * ### 4. getting pointers to parts of pidls ### + * + ************************************************************************** + * _ILGetDataPointer() + */ +LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl) +{ + if(pidl && pidl->mkid.cb != 0x00) + return (LPPIDLDATA)pidl->mkid.abID; + return NULL; +} + +/************************************************************************** + * _ILGetTextPointerW() + * gets a pointer to the unicode long filename string stored in the pidl + */ +static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl) +{ + /* TRACE(pidl,"(pidl%p)\n", pidl);*/ + + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (!pdata) + return NULL; + + switch (pdata->type) + { + case PT_GUID: + case PT_SHELLEXT: + case PT_YAGUID: + return NULL; + + case PT_DRIVE: + case PT_DRIVE1: + case PT_DRIVE2: + case PT_DRIVE3: + /*return (LPSTR)&(pdata->u.drive.szDriveName);*/ + return NULL; + + case PT_FOLDER: + case PT_FOLDER1: + case PT_VALUE: + case PT_IESPECIAL1: + case PT_IESPECIAL2: + /*return (LPSTR)&(pdata->u.file.szNames);*/ + return NULL; + + case PT_WORKGRP: + case PT_COMP: + case PT_NETWORK: + case PT_NETPROVIDER: + case PT_SHARE: + /*return (LPSTR)&(pdata->u.network.szNames);*/ + return NULL; + + case PT_VALUEW: + return (LPWSTR)pdata->u.file.szNames; + } + return NULL; +} + + +/************************************************************************** + * _ILGetTextPointer() + * gets a pointer to the long filename string stored in the pidl + */ +LPSTR _ILGetTextPointer(LPCITEMIDLIST pidl) +{ + /* TRACE(pidl,"(pidl%p)\n", pidl);*/ + + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (!pdata) + return NULL; + + switch (pdata->type) + { + case PT_GUID: + case PT_SHELLEXT: + case PT_YAGUID: + return NULL; + + case PT_DRIVE: + case PT_DRIVE1: + case PT_DRIVE2: + case PT_DRIVE3: + return pdata->u.drive.szDriveName; + + case PT_FOLDER: + case PT_FOLDER1: + case PT_VALUE: + case PT_IESPECIAL1: + case PT_IESPECIAL2: + return pdata->u.file.szNames; + + case PT_WORKGRP: + case PT_COMP: + case PT_NETWORK: + case PT_NETPROVIDER: + case PT_SHARE: + return pdata->u.network.szNames; + } + return NULL; +} + +/************************************************************************** + * _ILGetSTextPointer() + * gets a pointer to the short filename string stored in the pidl + */ +static LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl) +{ + /* TRACE(pidl,"(pidl%p)\n", pidl); */ + + LPPIDLDATA pdata =_ILGetDataPointer(pidl); + + if (!pdata) + return NULL; + + switch (pdata->type) + { + case PT_FOLDER: + case PT_VALUE: + case PT_IESPECIAL1: + case PT_IESPECIAL2: + return pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1; + + case PT_WORKGRP: + return pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1; + } + return NULL; +} + +/************************************************************************** + * _ILGetGUIDPointer() + * + * returns reference to guid stored in some pidls + */ +IID* _ILGetGUIDPointer(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata =_ILGetDataPointer(pidl); + + TRACE("%p\n", pidl); + + if (!pdata) + return NULL; + + TRACE("pdata->type 0x%04x\n", pdata->type); + switch (pdata->type) + { + case PT_SHELLEXT: + case PT_GUID: + case PT_YAGUID: + return &(pdata->u.guid.guid); + + default: + TRACE("Unknown pidl type 0x%04x\n", pdata->type); + break; + } + return NULL; +} + +/****************************************************************************** + * _ILGetFileStructW [Internal] + * + * Get pointer the a SHITEMID's FileStructW field if present + * + * PARAMS + * pidl [I] The SHITEMID + * + * RETURNS + * Success: Pointer to pidl's FileStructW field. + * Failure: NULL + */ +FileStructW* _ILGetFileStructW(LPCITEMIDLIST pidl) { + FileStructW *pFileStructW; + WORD cbOffset; + + if (!(_ILIsValue(pidl) || _ILIsFolder(pidl))) + return NULL; + + cbOffset = *(const WORD *)((const BYTE *)pidl + pidl->mkid.cb - sizeof(WORD)); + pFileStructW = (FileStructW*)((LPBYTE)pidl + cbOffset); + + /* Currently I don't see a fool prove way to figure out if a pidl is for sure of WinXP + * style with a FileStructW member. If we switch all our shellfolder-implementations to + * the new format, this won't be a problem. For now, we do as many sanity checks as possible. */ + if (cbOffset & 0x1 || /* FileStructW member is word aligned in the pidl */ + /* FileStructW is positioned after FileStruct */ + cbOffset < sizeof(pidl->mkid.cb) + sizeof(PIDLTYPE) + sizeof(FileStruct) || + /* There has to be enough space at cbOffset in the pidl to hold FileStructW and cbOffset */ + cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) || + pidl->mkid.cb != cbOffset + pFileStructW->cbLen) + { + WARN("Invalid pidl format (cbOffset = %d)!\n", cbOffset); + return NULL; + } + + return pFileStructW; +} + +/************************************************************************* + * _ILGetFileDateTime + * + * Given the ItemIdList, get the FileTime + * + * PARAMS + * pidl [I] The ItemIDList + * pFt [I] the resulted FILETIME of the file + * + * RETURNS + * True if Successful + * + * NOTES + * + */ +BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (!pdata) + return FALSE; + + switch (pdata->type) + { + case PT_FOLDER: + case PT_VALUE: + DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt); + break; + default: + return FALSE; + } + return TRUE; +} + +BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +{ + FILETIME ft,lft; + SYSTEMTIME time; + BOOL ret; + + if (_ILGetFileDateTime( pidl, &ft )) + { + FileTimeToLocalFileTime(&ft, &lft); + FileTimeToSystemTime (&lft, &time); + + ret = GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&time, NULL, pOut, uOutSize); + if (ret) + { + /* Append space + time without seconds */ + pOut[ret-1] = ' '; + GetTimeFormatA(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, &pOut[ret], uOutSize - ret); + } + } + else + { + pOut[0] = '\0'; + ret = FALSE; + } + return ret; +} + +/************************************************************************* + * _ILGetFileSize + * + * Given the ItemIdList, get the FileSize + * + * PARAMS + * pidl [I] The ItemIDList + * pOut [I] The buffer to save the result + * uOutsize [I] The size of the buffer + * + * RETURNS + * The FileSize + * + * NOTES + * pOut can be null when no string is needed + * + */ +DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + DWORD dwSize; + + if (!pdata) + return 0; + + switch (pdata->type) + { + case PT_VALUE: + dwSize = pdata->u.file.dwFileSize; + if (pOut) + StrFormatKBSizeA(dwSize, pOut, uOutSize); + return dwSize; + } + if (pOut) + *pOut = 0x00; + return 0; +} + +BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +{ + char szTemp[MAX_PATH]; + const char * pPoint; + LPCITEMIDLIST pidlTemp=pidl; + + TRACE("pidl=%p\n",pidl); + + if (!pidl) + return FALSE; + + pidlTemp = ILFindLastID(pidl); + + if (!_ILIsValue(pidlTemp)) + return FALSE; + if (!_ILSimpleGetText(pidlTemp, szTemp, MAX_PATH)) + return FALSE; + + pPoint = PathFindExtensionA(szTemp); + + if (!*pPoint) + return FALSE; + + pPoint++; + lstrcpynA(pOut, pPoint, uOutSize); + TRACE("%s\n",pOut); + + return TRUE; +} + +/************************************************************************* + * _ILGetFileType + * + * Given the ItemIdList, get the file type description + * + * PARAMS + * pidl [I] The ItemIDList (simple) + * pOut [I] The buffer to save the result + * uOutsize [I] The size of the buffer + * + * RETURNS + * nothing + * + * NOTES + * This function copies as much as possible into the buffer. + */ +void _ILGetFileType(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +{ + char sType[64]; + + if(_ILIsValue(pidl)) + { + char sTemp[64]; + + if(uOutSize > 0) + pOut[0] = 0; + if (_ILGetExtension (pidl, sType, 64)) + { + if (HCR_MapTypeToValueA(sType, sTemp, 64, TRUE)) + { + /* retrieve description */ + if(HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE )) + return; + } + /* display Ext-file as description */ + strcpy(pOut, sType); + _strupr(pOut); + /* load localized file string */ + sTemp[0] = '\0'; + if(LoadStringA(shell32_hInstance, IDS_SHV_COLUMN1, sTemp, 64)) + { + sTemp[63] = '\0'; + strcat(pOut, "-"); + strcat(pOut, sTemp); + } + } + } + else + { + pOut[0] = '\0'; + LoadStringA(shell32_hInstance, IDS_DIRECTORY, pOut, uOutSize); + /* make sure its null terminated */ + pOut[uOutSize-1] = '\0'; + } +} + +/************************************************************************* + * _ILGetFileAttributes + * + * Given the ItemIdList, get the Attrib string format + * + * PARAMS + * pidl [I] The ItemIDList + * pOut [I] The buffer to save the result + * uOutsize [I] The size of the Buffer + * + * RETURNS + * Attributes + * + * FIXME + * return value 0 in case of error is a valid return value + * + */ +DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +{ + LPPIDLDATA pData = _ILGetDataPointer(pidl); + WORD wAttrib = 0; + int i; + + if (!pData) + return 0; + + switch(pData->type) + { + case PT_FOLDER: + case PT_VALUE: + wAttrib = pData->u.file.uFileAttribs; + break; + } + + if(uOutSize >= 6) + { + i=0; + if(wAttrib & FILE_ATTRIBUTE_READONLY) + pOut[i++] = 'R'; + if(wAttrib & FILE_ATTRIBUTE_HIDDEN) + pOut[i++] = 'H'; + if(wAttrib & FILE_ATTRIBUTE_SYSTEM) + pOut[i++] = 'S'; + if(wAttrib & FILE_ATTRIBUTE_ARCHIVE) + pOut[i++] = 'A'; + if(wAttrib & FILE_ATTRIBUTE_COMPRESSED) + pOut[i++] = 'C'; + pOut[i] = 0x00; + } + return wAttrib; +} + +/************************************************************************* + * ILFreeaPidl + * + * free a aPidl struct + */ +void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl) +{ + UINT i; + + if (apidl) + { + for (i = 0; i < cidl; i++) + SHFree(apidl[i]); + SHFree(apidl); + } +} + +/************************************************************************* + * ILCopyaPidl + * + * copies an aPidl struct + */ +LPITEMIDLIST* _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl) +{ + UINT i; + LPITEMIDLIST *apidldest; + + apidldest = (LPITEMIDLIST *)SHAlloc(cidl * sizeof(LPITEMIDLIST)); + if (!apidlsrc) + return NULL; + + for (i = 0; i < cidl; i++) + apidldest[i] = ILClone(apidlsrc[i]); + + return apidldest; +} + +/************************************************************************* + * _ILCopyCidaToaPidl + * + * creates aPidl from CIDA + */ +LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida) +{ + UINT i; + LPITEMIDLIST *dst; + + dst = (LPITEMIDLIST *)SHAlloc(cida->cidl * sizeof(LPITEMIDLIST)); + if (!dst) + return NULL; + + if (pidl) + *pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]])); + + for (i = 0; i < cida->cidl; i++) + dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]])); + + return dst; +} diff --git a/reactos/dll/win32/shell32_new/pidl.h b/reactos/dll/win32/shell32_new/pidl.h new file mode 100644 index 00000000000..2ba343c5da6 --- /dev/null +++ b/reactos/dll/win32/shell32_new/pidl.h @@ -0,0 +1,309 @@ +/* + * internal pidl functions + * + * Copyright 1998 Juergen Schmied + * Copyright 2004 Juan Lang + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * NOTES: + * + * DO NOT use this definitions outside the shell32.dll ! + * + * The contents of a pidl should never used from a application + * directly. + * + * Undocumented: + * MS says: the abID of SHITEMID should be treated as binary data and not + * be interpreted by applications. Applies to everyone but MS itself. + * Word95 interprets the contents of abID (Filesize/Date) so we have to go + * for binary compatibility here. + */ + +#ifndef __WINE_PIDL_H +#define __WINE_PIDL_H + +#include + +#include +#include +#include +#include + +/* +* the pidl does cache fileattributes to speed up SHGetAttributes when +* displaying a big number of files. +* +* a pidl of NULL means the desktop +* +* The structure of the pidl seems to be a union. The first byte of the +* PIDLDATA describes the type of pidl. +* +* object ! first byte / ! format ! living space +* ! size +* ---------------------------------------------------------------- +* my computer 0x1F/20 guid (2) (usual) +* network 0x1F guid +* bitbucket 0x1F guid +* drive 0x23/25 drive (usual) +* drive 0x25/25 drive (lnk/persistent) +* drive 0x29/25 drive +* shell extension 0x2E guid +* drive 0x2F drive (lnk/persistent) +* folder/file 0x30 folder/file (1) (lnk/persistent) +* folder 0x31 folder (usual) +* valueA 0x32 file (ANSI file name) +* valueW 0x34 file (Unicode file name) +* workgroup 0x41 network (3) +* computer 0x42 network (4) +* net provider 0x46 network +* whole network 0x47 network (5) +* MSITStore 0x61 htmlhlp (7) +* printers/ras connections 0x70 guid +* history/favorites 0xb1 file +* share 0xc3 network (6) +* +* guess: the persistent elements are non tracking +* +* (1) dummy byte is used, attributes are empty +* (2) IID_MyComputer = 20D04FE0L-3AEA-1069-A2D8-08002B30309D +* (3) two strings "workgroup" "Microsoft Network" +* (4) two strings "\\sirius" "Microsoft Network" +* (5) one string "Entire Network" +* (6) two strings "\\sirius\c" "Microsoft Network" +* (7) contains string "mk:@MSITStore:C:\path\file.chm::/path/filename.htm" +* GUID 871C5380-42A0-1069-A2EA-08002B30309D +*/ + +#define PT_CPLAPPLET 0x00 +#define PT_GUID 0x1F +#define PT_DRIVE 0x23 +#define PT_DRIVE2 0x25 +#define PT_DRIVE3 0x29 +#define PT_SHELLEXT 0x2E +#define PT_DRIVE1 0x2F +#define PT_FOLDER1 0x30 +#define PT_FOLDER 0x31 +#define PT_VALUE 0x32 +#define PT_VALUEW 0x34 +#define PT_WORKGRP 0x41 +#define PT_COMP 0x42 +#define PT_NETPROVIDER 0x46 +#define PT_NETWORK 0x47 +#define PT_IESPECIAL1 0x61 +#define PT_YAGUID 0x70 /* yet another guid.. */ +#define PT_IESPECIAL2 0xb1 +#define PT_SHARE 0xc3 + +#include "pshpack1.h" +typedef BYTE PIDLTYPE; + +typedef struct tagPIDLCPanelStruct +{ + BYTE dummy; /*01 is 0x00 */ + DWORD iconIdx; /*02 negative icon ID */ + WORD offsDispName; /*06*/ + WORD offsComment; /*08*/ + CHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */ +} PIDLCPanelStruct; + +typedef struct tagPIDLFontStruct +{ + BYTE dummy; + WORD offsFile; + WCHAR szName[1]; +} PIDLFontStruct; + +typedef struct tagPIDLPrinterStruct +{ + BYTE dummy; + DWORD Attributes; + WORD offsServer; + WCHAR szName[1]; +}PIDLPrinterStruct; + +typedef struct tagPIDLRecycleStruct +{ + FILETIME LastModification; + FILETIME DeletionTime; + ULARGE_INTEGER FileSize; + ULARGE_INTEGER PhysicalFileSize; + DWORD Attributes; + WCHAR szName[1]; +}PIDLRecycleStruct; + +typedef struct tagGUIDStruct +{ + BYTE dummy; /* offset 01 is unknown */ + GUID guid; /* offset 02 */ +} GUIDStruct; + +typedef struct tagDriveStruct +{ + CHAR szDriveName[20]; /*01*/ + WORD unknown; /*21*/ +} DriveStruct; + +typedef struct tagFileStruct +{ + BYTE dummy; /*01 is 0x00 for files or dirs */ + DWORD dwFileSize; /*02*/ + WORD uFileDate; /*06*/ + WORD uFileTime; /*08*/ + WORD uFileAttribs; /*10*/ + CHAR szNames[0]; /*12*/ + /* Here are coming two strings. The first is the long name. + The second the dos name when needed or just 0x00 */ +} FileStruct; + +/* At least on WinXP, this struct is appended with 2-byte-alignment to FileStruct. There follows + * a WORD member after the wszName string, which gives the offset from the beginning of the PIDL + * to the FileStructW member. */ +typedef struct tagFileStructW { + WORD cbLen; + BYTE dummy1[6]; + WORD uCreationDate; + WORD uCreationTime; + WORD uLastAccessDate; + WORD uLastAccessTime; + BYTE dummy2[4]; + WCHAR wszName[0]; +} FileStructW; + +typedef struct tagValueW +{ + WCHAR name[1]; +} ValueWStruct; + +typedef struct tagPIDLDATA +{ PIDLTYPE type; /*00*/ + union + { + struct tagGUIDStruct guid; + struct tagDriveStruct drive; + struct tagFileStruct file; + struct + { WORD dummy; /*01*/ + CHAR szNames[1]; /*03*/ + } network; + struct + { WORD dummy; /*01*/ + DWORD dummy1; /*02*/ + CHAR szName[1]; /*06*/ /* terminated by 0x00 0x00 */ + } htmlhelp; + struct tagPIDLCPanelStruct cpanel; + struct tagValueW valueW; + struct tagPIDLFontStruct cfont; + struct tagPIDLPrinterStruct cprinter; + struct tagPIDLRecycleStruct crecycle; + }u; +} PIDLDATA, *LPPIDLDATA; +#include "poppack.h" + +/* + * getting special values from simple pidls + */ +DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); +DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize); +BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); +DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); +BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); +void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); +DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); + +BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft); +DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT); + +/* + * testing simple pidls + */ +BOOL _ILIsUnicode (LPCITEMIDLIST pidl); +BOOL _ILIsDesktop (LPCITEMIDLIST pidl); +BOOL _ILIsMyComputer (LPCITEMIDLIST pidl); +BOOL _ILIsPrinter (LPCITEMIDLIST pidl); +BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl); +BOOL _ILIsControlPanel (LPCITEMIDLIST pidl); +BOOL _ILIsBitBucket (LPCITEMIDLIST pidl); +BOOL _ILIsAdminTools (LPCITEMIDLIST pidl); +BOOL _ILIsNetHood (LPCITEMIDLIST pidl); +BOOL _ILIsDrive (LPCITEMIDLIST pidl); +BOOL _ILIsFolder (LPCITEMIDLIST pidl); +BOOL _ILIsValue (LPCITEMIDLIST pidl); +BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl); +BOOL _ILIsPidlSimple (LPCITEMIDLIST pidl); +BOOL _ILIsCPanelStruct (LPCITEMIDLIST pidl); +static BOOL __inline _ILIsEqualSimple (LPCITEMIDLIST pidlA, LPCITEMIDLIST pidlB) +{ + return (pidlA->mkid.cb > 0 && !memcmp(pidlA, pidlB, pidlA->mkid.cb)) || + (!pidlA->mkid.cb && !pidlB->mkid.cb); +} +static +BOOL __inline _ILIsEmpty (LPCITEMIDLIST pidl) { return _ILIsDesktop(pidl); } + +/* + * simple pidls + */ + +/* Creates a PIDL with guid format and type type, which must be one of PT_GUID, + * PT_SHELLEXT, or PT_YAGUID. + */ +LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid); + +/* Like _ILCreateGuid, but using the string szGUID. */ +LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID); +LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID); + +/* Commonly used PIDLs representing file system objects. */ +LPITEMIDLIST _ILCreateDesktop (void); +LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile); +HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST* ppidl); + +/* Other helpers */ +LPITEMIDLIST _ILCreateMyComputer (void); +LPITEMIDLIST _ILCreateMyDocuments (void); +LPITEMIDLIST _ILCreateIExplore (void); +LPITEMIDLIST _ILCreateControlPanel (void); +LPITEMIDLIST _ILCreatePrinters (void); +LPITEMIDLIST _ILCreateNetwork (void); +LPITEMIDLIST _ILCreateNetHood (void); +LPITEMIDLIST _ILCreateAdminTools (void); +LPITEMIDLIST _ILCreateFont (void); +LPITEMIDLIST _ILCreateBitBucket (void); +LPITEMIDLIST _ILCreateDrive (LPCWSTR); + +/* + * helper functions (getting struct-pointer) + */ +LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST); +LPSTR _ILGetTextPointer (LPCITEMIDLIST); +IID *_ILGetGUIDPointer (LPCITEMIDLIST pidl); +FileStructW *_ILGetFileStructW (LPCITEMIDLIST pidl); + +/* + * debug helper + */ +void pdump (LPCITEMIDLIST pidl); +BOOL pcheck (LPCITEMIDLIST pidl); + +/* + * aPidl helper + */ +void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl); +LPITEMIDLIST * _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl); +LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida); + +BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type); + +#endif diff --git a/reactos/dll/win32/shell32_new/precomp.h b/reactos/dll/win32/shell32_new/precomp.h new file mode 100644 index 00000000000..a9bc7a39af3 --- /dev/null +++ b/reactos/dll/win32/shell32_new/precomp.h @@ -0,0 +1,67 @@ +#ifndef _PRECOMP_H__ +#define _PRECOMP_H__ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include + +#define WIN32_NO_STATUS +#define NTOS_MODE_USER +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "base/shell/explorer-new/todo.h" +#include "dlgs.h" +#include "pidl.h" +#include "debughlp.h" +#include "undocshell.h" +#include "shell32_main.h" +#include "shresdef.h" +#include "cpanel.h" +#include "enumidlist.h" +#include "shfldr.h" +#include "version.h" +#include "shellfolder.h" +#include "xdg.h" +#include "shellapi.h" + +#include "wine/debug.h" +#include "wine/unicode.h" + +#endif diff --git a/reactos/dll/win32/shell32_new/regsvr.cpp b/reactos/dll/win32/shell32_new/regsvr.cpp new file mode 100644 index 00000000000..4567aff5d2f --- /dev/null +++ b/reactos/dll/win32/shell32_new/regsvr.cpp @@ -0,0 +1,798 @@ +/* + * self-registerable dll functions for shell32.dll +* + * Copyright (C) 2003 John K. Hohm + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ +#include + + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/* + * Near the bottom of this file are the exported DllRegisterServer and + * DllUnregisterServer, which make all this worthwhile. + */ + +/*********************************************************************** + * interface for self-registering + */ +struct regsvr_interface +{ + IID const *iid; /* NULL for end of list */ + LPCSTR name; /* can be NULL to omit */ + IID const *base_iid; /* can be NULL to omit */ + int num_methods; /* can be <0 to omit */ + CLSID const *ps_clsid; /* can be NULL to omit */ + CLSID const *ps_clsid32; /* can be NULL to omit */ +}; + +static HRESULT register_interfaces(struct regsvr_interface const *list); +static HRESULT unregister_interfaces(struct regsvr_interface const *list); + +struct regsvr_coclass +{ + CLSID const *clsid; /* NULL for end of list */ + LPCSTR name; /* can be NULL to omit */ + UINT idName; /* can be 0 to omit */ + LPCSTR ips; /* can be NULL to omit */ + LPCSTR ips32; /* can be NULL to omit */ + LPCSTR ips32_tmodel; /* can be NULL to omit */ + DWORD flags; + DWORD dwAttributes; + DWORD dwCallForAttributes; + LPCSTR clsid_str; /* can be NULL to omit */ + LPCSTR progid; /* can be NULL to omit */ + UINT idDefaultIcon; /* can be 0 to omit */ +// CLSID const *clsid_menu; /* can be NULL to omit */ +}; + +/* flags for regsvr_coclass.flags */ +#define SHELLEX_MAYCHANGEDEFAULTMENU 0x00000001 +#define SHELLFOLDER_WANTSFORPARSING 0x00000002 +#define SHELLFOLDER_ATTRIBUTES 0x00000004 +#define SHELLFOLDER_CALLFORATTRIBUTES 0x00000008 +#define SHELLFOLDER_WANTSFORDISPLAY 0x00000010 +#define SHELLFOLDER_HIDEASDELETEPERUSER 0x00000020 + +static HRESULT register_coclasses(struct regsvr_coclass const *list); +static HRESULT unregister_coclasses(struct regsvr_coclass const *list); + +struct regsvr_namespace +{ + CLSID const *clsid; /* CLSID of the namespace extension. NULL for end of list */ + LPCWSTR parent; /* Mount point (MyComputer, Desktop, ..). */ + LPCWSTR value; /* Display name of the extension. */ +}; + +static HRESULT register_namespace_extensions(struct regsvr_namespace const *list); +static HRESULT unregister_namespace_extensions(struct regsvr_namespace const *list); + +/*********************************************************************** + * static helper functions + */ +static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid); +static LONG register_key_defvalueW(HKEY base, WCHAR const *name, + WCHAR const *value); +static LONG register_key_defvalueA(HKEY base, WCHAR const *name, + char const *value); + +/*********************************************************************** + * register_interfaces + */ +static HRESULT register_interfaces(struct regsvr_interface const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY interface_key; + + res = RegCreateKeyExW(HKEY_CLASSES_ROOT, L"Interface", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &interface_key, NULL); + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->iid; ++list) { + WCHAR buf[39]; + HKEY iid_key; + + StringFromGUID2(*list->iid, buf, 39); + res = RegCreateKeyExW(interface_key, buf, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &iid_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_interface_key; + + if (list->name) { + res = RegSetValueExA(iid_key, NULL, 0, REG_SZ, + (CONST BYTE*)(list->name), + strlen(list->name) + 1); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (list->base_iid) { + res = register_key_guid(iid_key, L"BaseInterface", list->base_iid); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (0 <= list->num_methods) { + static WCHAR const fmt[3] = { '%', 'd', 0 }; + HKEY key; + + res = RegCreateKeyExW(iid_key, L"NumMethods", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &key, NULL); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + + swprintf(buf, fmt, list->num_methods); + res = RegSetValueExW(key, NULL, 0, REG_SZ, + (CONST BYTE*)buf, + (wcslen(buf) + 1) * sizeof(WCHAR)); + RegCloseKey(key); + + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (list->ps_clsid) { + res = register_key_guid(iid_key, L"ProxyStubClsid", list->ps_clsid); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (list->ps_clsid32) { + res = register_key_guid(iid_key, L"ProxyStubClsid32", list->ps_clsid32); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + error_close_iid_key: + RegCloseKey(iid_key); + } + +error_close_interface_key: + RegCloseKey(interface_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * unregister_interfaces + */ +static HRESULT unregister_interfaces(struct regsvr_interface const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY interface_key; + + res = RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Interface", 0, + KEY_READ | KEY_WRITE, &interface_key); + if (res == ERROR_FILE_NOT_FOUND) return S_OK; + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->iid; ++list) { + WCHAR buf[39]; + + StringFromGUID2(*list->iid, buf, 39); + res = RegDeleteTreeW(interface_key, buf); + if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; + } + + RegCloseKey(interface_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * register_coclasses + */ +static HRESULT register_coclasses(struct regsvr_coclass const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY coclass_key; + + res = RegCreateKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &coclass_key, NULL); + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->clsid; ++list) { + WCHAR buf[39]; + HKEY clsid_key; + + StringFromGUID2(*list->clsid, buf, 39); + res = RegCreateKeyExW(coclass_key, buf, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + + if (list->name) { + res = RegSetValueExA(clsid_key, NULL, 0, REG_SZ, + (CONST BYTE*)(list->name), + strlen(list->name) + 1); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->idName) { + char buffer[64]; + sprintf(buffer, "@shell32.dll,-%u", list->idName); + res = RegSetValueExA(clsid_key, "LocalizedString", 0, REG_SZ, + (CONST BYTE*)(buffer), strlen(buffer)+1); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->idDefaultIcon) { + HKEY icon_key; + char buffer[64]; + + res = RegCreateKeyExW(clsid_key, L"DefaultIcon", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &icon_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + sprintf(buffer, "shell32.dll,-%u", list->idDefaultIcon); + res = RegSetValueExA(icon_key, NULL, 0, REG_SZ, + (CONST BYTE*)(buffer), strlen(buffer)+1); + RegCloseKey(icon_key); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->ips) { + res = register_key_defvalueA(clsid_key, L"InProcServer", list->ips); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->ips32) { + HKEY ips32_key; + + res = RegCreateKeyExW(clsid_key, L"InProcServer32", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, + &ips32_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + res = RegSetValueExA(ips32_key, NULL, 0, REG_SZ, + (CONST BYTE*)list->ips32, + lstrlenA(list->ips32) + 1); + if (res == ERROR_SUCCESS && list->ips32_tmodel) + res = RegSetValueExA(ips32_key, "ThreadingModel", 0, REG_SZ, + (CONST BYTE*)list->ips32_tmodel, + strlen(list->ips32_tmodel) + 1); + RegCloseKey(ips32_key); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->flags & SHELLEX_MAYCHANGEDEFAULTMENU) { + HKEY shellex_key, mcdm_key; + + res = RegCreateKeyExW(clsid_key, L"shellex", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, + &shellex_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + res = RegCreateKeyExW(shellex_key, L"MayChangeDefaultMenu", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, + &mcdm_key, NULL); + RegCloseKey(shellex_key); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + RegCloseKey(mcdm_key); + } + + if (list->flags & + (SHELLFOLDER_WANTSFORPARSING|SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES|SHELLFOLDER_WANTSFORDISPLAY|SHELLFOLDER_HIDEASDELETEPERUSER)) + { + HKEY shellfolder_key; + + res = RegCreateKeyExW(clsid_key, L"ShellFolder", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, + &shellfolder_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + if (list->flags & SHELLFOLDER_WANTSFORPARSING) + res = RegSetValueExA(shellfolder_key, "WantsFORPARSING", 0, REG_SZ, (const BYTE *)"", 1); + if (list->flags & SHELLFOLDER_ATTRIBUTES) + res = RegSetValueExA(shellfolder_key, "Attributes", 0, REG_DWORD, + (const BYTE *)&list->dwAttributes, sizeof(DWORD)); + if (list->flags & SHELLFOLDER_CALLFORATTRIBUTES) + res = RegSetValueExA(shellfolder_key, "CallForAttributes", 0, REG_DWORD, + (const BYTE *)&list->dwCallForAttributes, sizeof(DWORD)); + if (list->flags & SHELLFOLDER_WANTSFORDISPLAY) + res = RegSetValueExA(shellfolder_key, "WantsFORDISPLAY", 0, REG_SZ, (const BYTE *)"", 1); + if (list->flags & SHELLFOLDER_HIDEASDELETEPERUSER) + res = RegSetValueExA(shellfolder_key, "HideAsDeletePerUser", 0, REG_SZ, (const BYTE *)"", 1); + RegCloseKey(shellfolder_key); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->clsid_str) { + res = register_key_defvalueA(clsid_key, L"CLSID", + list->clsid_str); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->progid) { + HKEY progid_key; + + res = register_key_defvalueA(clsid_key, L"ProgID", + list->progid); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + res = RegCreateKeyExA(HKEY_CLASSES_ROOT, list->progid, 0, + NULL, 0, KEY_READ | KEY_WRITE, NULL, + &progid_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + res = register_key_defvalueW(progid_key, L"CLSID", buf); + RegCloseKey(progid_key); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + if (IsEqualIID(list->clsid, CLSID_RecycleBin)) {//if (list->clsid_menu) { + HKEY shellex_key, cmenu_key, menuhandler_key; + res = RegCreateKeyExW(clsid_key, L"shellex", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, + &shellex_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + res = RegCreateKeyExW(shellex_key, L"ContextMenuHandlers", 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, + &cmenu_key, NULL); + if (res != ERROR_SUCCESS) { + RegCloseKey(shellex_key); + goto error_close_clsid_key; + } + + StringFromGUID2(*list->clsid, buf, 39); //clsid_menu + res = RegCreateKeyExW(cmenu_key, buf, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, + &menuhandler_key, NULL); + RegCloseKey(menuhandler_key); + RegCloseKey(cmenu_key); + RegCloseKey(shellex_key); + } + + error_close_clsid_key: + RegCloseKey(clsid_key); + } + +error_close_coclass_key: + RegCloseKey(coclass_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * unregister_coclasses + */ +static HRESULT unregister_coclasses(struct regsvr_coclass const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY coclass_key; + + res = RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, + KEY_READ | KEY_WRITE, &coclass_key); + if (res == ERROR_FILE_NOT_FOUND) return S_OK; + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->clsid; ++list) { + WCHAR buf[39]; + + StringFromGUID2(*list->clsid, buf, 39); + res = RegDeleteTreeW(coclass_key, buf); + if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + + if (list->progid) { + res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->progid); + if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + } + } + +error_close_coclass_key: + RegCloseKey(coclass_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/********************************************************************** + * register_namespace_extensions + */ +static WCHAR *get_namespace_key(struct regsvr_namespace const *list) { + static const WCHAR wszExplorerKey[] = { + 'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\', + 'W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\', + 'E','x','p','l','o','r','e','r','\\',0 }; + static const WCHAR wszNamespace[] = { '\\','N','a','m','e','s','p','a','c','e','\\',0 }; + WCHAR *pwszKey, *pwszCLSID; + + pwszKey = (WCHAR *)HeapAlloc(GetProcessHeap(), 0, sizeof(wszExplorerKey)+sizeof(wszNamespace)+ + sizeof(WCHAR)*(wcslen(list->parent)+CHARS_IN_GUID)); + if (!pwszKey) + return NULL; + + wcscpy(pwszKey, wszExplorerKey); + wcscat(pwszKey, list->parent); + wcscat(pwszKey, wszNamespace); + if (FAILED(StringFromCLSID(*list->clsid, &pwszCLSID))) { + HeapFree(GetProcessHeap(), 0, pwszKey); + return NULL; + } + wcscat(pwszKey, pwszCLSID); + CoTaskMemFree(pwszCLSID); + + return pwszKey; +} + +static HRESULT register_namespace_extensions(struct regsvr_namespace const *list) { + WCHAR *pwszKey; + HKEY hKey; + + for (; list->clsid; list++) { + pwszKey = get_namespace_key(list); + + /* Create the key and set the value. */ + if (pwszKey && ERROR_SUCCESS == + RegCreateKeyExW(HKEY_LOCAL_MACHINE, pwszKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL)) + { + RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE *)list->value, sizeof(WCHAR)*(wcslen(list->value)+1)); + RegCloseKey(hKey); + } + + HeapFree(GetProcessHeap(), 0, pwszKey); + } + return S_OK; +} + +static HRESULT unregister_namespace_extensions(struct regsvr_namespace const *list) { + WCHAR *pwszKey; + + for (; list->clsid; list++) { + pwszKey = get_namespace_key(list); + RegDeleteKeyW(HKEY_LOCAL_MACHINE, pwszKey); + HeapFree(GetProcessHeap(), 0, pwszKey); + } + return S_OK; +} + +/*********************************************************************** + * regsvr_key_guid + */ +static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) +{ + WCHAR buf[39]; + + StringFromGUID2(*guid, buf, 39); + return register_key_defvalueW(base, name, buf); +} + +/*********************************************************************** + * regsvr_key_defvalueW + */ +static LONG register_key_defvalueW( + HKEY base, + WCHAR const *name, + WCHAR const *value) +{ + LONG res; + HKEY key; + + res = RegCreateKeyExW(base, name, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &key, NULL); + if (res != ERROR_SUCCESS) return res; + res = RegSetValueExW(key, NULL, 0, REG_SZ, (CONST BYTE*)value, + (wcslen(value) + 1) * sizeof(WCHAR)); + RegCloseKey(key); + return res; +} + +/*********************************************************************** + * regsvr_key_defvalueA + */ +static LONG register_key_defvalueA( + HKEY base, + WCHAR const *name, + char const *value) +{ + LONG res; + HKEY key; + + res = RegCreateKeyExW(base, name, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &key, NULL); + if (res != ERROR_SUCCESS) return res; + res = RegSetValueExA(key, NULL, 0, REG_SZ, (CONST BYTE*)value, + lstrlenA(value) + 1); + RegCloseKey(key); + return res; +} + +/*********************************************************************** + * coclass list + */ +static GUID const CLSID_Desktop = { + 0x00021400, 0x0000, 0x0000, {0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46} }; + +static GUID const CLSID_Shortcut = { + 0x00021401, 0x0000, 0x0000, {0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46} }; + +static struct regsvr_coclass const coclass_list[] = { + { + &CLSID_Desktop, + "Desktop", + IDS_DESKTOP, + NULL, + "shell32.dll", + "Apartment" + }, + { + &CLSID_ControlPanel, + "Shell Control Panel Folder", + IDS_CONTROLPANEL, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_WANTSFORDISPLAY|SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_HIDEASDELETEPERUSER, + SFGAO_FOLDER|SFGAO_HASSUBFOLDER, + 0, + NULL, + NULL, + IDI_SHELL_CONTROL_PANEL1 + }, + { + &CLSID_DragDropHelper, + "Shell Drag and Drop Helper", + 0, + NULL, + "shell32.dll", + "Apartment" + }, + { + &CLSID_Printers, + "Printers & Fax", + IDS_PRINTERS, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_PRINTERS_FOLDER + }, + { + &CLSID_MyComputer, + "My Computer", + IDS_MYCOMPUTER, + NULL, + "shell32.dll", + "Apartment" + }, + { + &CLSID_NetworkPlaces, + "My Network Places", + IDS_NETWORKPLACE, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES, + SFGAO_FOLDER|SFGAO_HASPROPSHEET, + 0, + NULL, + NULL, + IDI_SHELL_MY_NETWORK_PLACES + }, + { + &CLSID_FontsFolderShortcut, + "Fonts", + IDS_FONTS, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_FONTS_FOLDER + }, + { + &CLSID_AdminFolderShortcut, + "Administrative Tools", + IDS_ADMINISTRATIVETOOLS, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_ADMINTOOLS //FIXME + }, + { + &CLSID_Shortcut, + "Shortcut", + 0, + NULL, + "shell32.dll", + "Apartment", + SHELLEX_MAYCHANGEDEFAULTMENU + }, + { + &CLSID_AutoComplete, + "AutoComplete", + 0, + NULL, + "shell32.dll", + "Apartment", + }, + { + &CLSID_FolderShortcut, + "Foldershortcut", + 0, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES, + SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_LINK, + SFGAO_HASSUBFOLDER|SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR + }, + { + &CLSID_MyDocuments, + "My Documents", + IDS_PERSONAL, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_WANTSFORPARSING|SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES, + SFGAO_FILESYSANCESTOR|SFGAO_FOLDER|SFGAO_HASSUBFOLDER, + SFGAO_FILESYSTEM + }, + { + &CLSID_RecycleBin, + "Trash", + IDS_RECYCLEBIN_FOLDER_NAME, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES, + SFGAO_FOLDER|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET, + 0, + NULL, + NULL, + IDI_SHELL_FULL_RECYCLE_BIN +// &CLSID_RecycleBin + }, + { + &CLSID_ShellFSFolder, + "Shell File System Folder", + 0, + NULL, + "shell32.dll", + "Apartment" + }, + { + &CLSID_ShellFolderViewOC, + "Microsoft Shell Folder View Router", + 0, + NULL, + "shell32.dll", + "Apartment" + }, + { + &CLSID_StartMenu, + "Start Menu", + 0, + NULL, + "shell32.dll", + "Apartment" + }, + { + &CLSID_MenuBandSite, + "Menu Site", + 0, + NULL, + "shell32.dll", + "Apartment" + }, + { NULL } /* list terminator */ +}; + +/*********************************************************************** + * interface list + */ + +static struct regsvr_interface const interface_list[] = { + { NULL } /* list terminator */ +}; + +/*********************************************************************** + * namespace extensions list + */ +static const WCHAR wszDesktop[] = { 'D','e','s','k','t','o','p',0 }; +static const WCHAR wszSlash[] = { '/', 0 }; +static const WCHAR wszMyDocuments[] = { 'M','y',' ','D','o','c','u','m','e','n','t','s', 0 }; +static const WCHAR wszRecycleBin[] = { 'T','r','a','s','h', 0 }; +static const WCHAR wszMyComputer[] = { 'M','y','C','o','m','p','u','t','e','r',0 }; +static const WCHAR wszControlPanel[] = { 'C','o','n','t','r','o','l','P','a','n','e','l',0 }; +static const WCHAR wszFolderOptions[] = { 'F','o','l','d','e','r',' ','O','p','t','i','o','n','s',0 }; +static const WCHAR wszNethoodFolder[] = { 'N','e','t','h','o','o','d',' ','f','o','l','d','e','r',0}; +static const WCHAR wszPrinters[] = { 'P','r','i','n','t','e','r','s',0 }; +static const WCHAR wszFonts[] = { 'F','o','n','t','s',0 }; +static const WCHAR wszAdminTools[] = { 'A','d','m','i','n','T','o','o','l','s',0 }; + +static struct regsvr_namespace const namespace_extensions_list[] = { + { + &CLSID_MyDocuments, + L"Desktop", + L"My Documents" + }, + { + &CLSID_NetworkPlaces, + L"Desktop", + L"Nethood folder" + }, + { + &CLSID_RecycleBin, + L"Desktop", + L"Trash" + }, + { + &CLSID_ControlPanel, + L"MyComputer", + L"ControlPanel" + }, + { + &CLSID_FolderOptions, + L"ControlPanel" + L"Folder Options" + }, + { + &CLSID_FontsFolderShortcut, + L"ControlPanel" + L"Fonts" + }, + { + &CLSID_Printers, + L"ControlPanel" + L"Printers" + }, + { + &CLSID_AdminFolderShortcut, + L"ControlPanel" + L"AdminTools" + }, + { NULL } +}; + +/*********************************************************************** + * DllRegisterServer (SHELL32.@) + */ +EXTERN_C HRESULT WINAPI DllRegisterServer(void) +{ + HRESULT hr; + + TRACE("\n"); + + hr = register_coclasses(coclass_list); + if (SUCCEEDED(hr)) + hr = register_interfaces(interface_list); + if (SUCCEEDED(hr)) + hr = SHELL_RegisterShellFolders(); + if (SUCCEEDED(hr)) + hr = register_namespace_extensions(namespace_extensions_list); + return hr; +} + +/*********************************************************************** + * DllUnregisterServer (SHELL32.@) + */ +EXTERN_C HRESULT WINAPI DllUnregisterServer(void) +{ + HRESULT hr; + + TRACE("\n"); + + hr = unregister_coclasses(coclass_list); + if (SUCCEEDED(hr)) + hr = unregister_interfaces(interface_list); + if (SUCCEEDED(hr)) + hr = unregister_namespace_extensions(namespace_extensions_list); + return hr; +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/adminfoldershortcut.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/adminfoldershortcut.rgs new file mode 100644 index 00000000000..5b031a8692b --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/adminfoldershortcut.rgs @@ -0,0 +1,56 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {D20EA4E1-3957-11d2-A40B-0C5020524153} = s 'Administrative Tools' + { + val '{305CA226-D286-468e-B848-2B2E8E697B74} 2' = d '5' + val InfoTip = s '@%SystemRoot%\system32\SHELL32.dll,-22921' + val LocalizedString = s '@%SystemRoot%\system32\SHELL32.dll,-22982' + DefaultIcon = s '%SystemRoot%\system32\main.cpl,10' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + Instance + { + val CLSID = s '{0AFACED1-E828-11D1-9187-B532F1E9575D}' + InitPropertyBag + { + val Attributes = s '0x00000011' + val TargetSpecialFolder = s '0x002f' + } + } + 'ShellFolder' + { + val Attributes = d '&H60000100' + val WantsFORPARSING = s '' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + ControlPanel + { + NameSpace + { + '{D20EA4E1-3957-11d2-A40B-0C5020524153}' = s 'Administrative Tools' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/autocomplete.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/autocomplete.rgs new file mode 100644 index 00000000000..9afd9d5cb86 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/autocomplete.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {00BB2763-6A77-11D0-A535-00C04FD7D062} = s 'Shell ReactOS AutoComplete' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/controlpanel.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/controlpanel.rgs new file mode 100644 index 00000000000..5164a1e3dea --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/controlpanel.rgs @@ -0,0 +1,52 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {21EC2020-3AEA-1069-A2DD-08002B30309D} + { + val InfoTip = s '@%SystemRoot%\system32\SHELL32.dll,-31361' + DefaultIcon = s '%SystemRoot%\System32\shell32.dll,-137' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + ShellFolder + { + val Attributes = d '0' + val HideAsDeletePerUser = s '' + val WantsFORDISPLAY = s '' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + ControlPanel + { + NameSpace + { + } + } + MyComputer + { + NameSpace + { + Controls = s '{21EC2020-3AEA-1069-A2DD-08002B30309D}' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/dragdrophelper.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/dragdrophelper.rgs new file mode 100644 index 00000000000..25d710d188c --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/dragdrophelper.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {4657278A-411B-11d2-839A-00C04FD918D0} = s 'Shell Drag and Drop helper' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/folderoptions.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/folderoptions.rgs new file mode 100644 index 00000000000..51010436450 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/folderoptions.rgs @@ -0,0 +1,56 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {6DFD7C5C-2451-11d3-A299-00C04F8EF6AF} = s 'Folder Options' + { + val '{305CA226-D286-468e-B848-2B2E8E697B74} 2' = d '1' + val InfoTip = s '@%SystemRoot%\system32\SHELL32.dll,-22924' + val LocalizedString = s '@%SystemRoot%\system32\SHELL32.dll,-22985' + DefaultIcon = s '%SystemRoot%\system32\SHELL32.dll,-210' + Shell + { + Open + { + Command = s 'rundll32.exe shell32.dll,Options_RunDLL 0' + } + RunAs + { + Command = s 'rundll32.exe shell32.dll,Options_RunDLL 0' + { + val Extended = s '' + } + } + } + ShellFolder + { + val Attributes = d '0' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + Desktop + { + NameSpace + { + '{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}' = s 'Folder Options' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/foldershortcut.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/foldershortcut.rgs new file mode 100644 index 00000000000..9df72086aed --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/foldershortcut.rgs @@ -0,0 +1,23 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {0AFACED1-E828-11D1-9187-B532F1E9575D} = s 'Folder Shortcut' + { + val Details = s 'prop:Name;LinkTarget' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'shellex' + { + IconHandler = s '{0AFACED1-E828-11D1-9187-B532F1E9575D}' + } + 'ShellFolder' + { + val Attributes = d '&H60410137' + val CallForAttributes = d '&Hf0000000' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/fontsfoldershortcut.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/fontsfoldershortcut.rgs new file mode 100644 index 00000000000..bc13f13c548 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/fontsfoldershortcut.rgs @@ -0,0 +1,56 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {D20EA4E1-3957-11d2-A40B-0C5020524152} = s 'Fonts' + { + val '{305CA226-D286-468e-B848-2B2E8E697B74} 2' = d '&Hffffffff' + val InfoTip = s '@%SystemRoot%\system32\SHELL32.dll,-22920' + val LocalizedString = s '@%SystemRoot%\system32\SHELL32.dll,-22981' + DefaultIcon = s '%SystemRoot%\system32\main.cpl,9' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + Instance + { + val CLSID = s '{0AFACED1-E828-11D1-9187-B532F1E9575D}' + InitPropertyBag + { + val Attributes = s '0x00000015' + val TargetSpecialFolder = s '0x0014' + } + } + 'ShellFolder' + { + val Attributes = d '&H60000100' + val WantsFORPARSING = s '' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + ControlPanel + { + NameSpace + { + '{D20EA4E1-3957-11d2-A40B-0C5020524152}' = s 'Fonts' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/menubandsite.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/menubandsite.rgs new file mode 100644 index 00000000000..c597e873135 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/menubandsite.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {E13EF4E4-D2F2-11d0-9816-00C04FD91972} = s 'Menu Site' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/mycomputer.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/mycomputer.rgs new file mode 100644 index 00000000000..6b60091ef8f --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/mycomputer.rgs @@ -0,0 +1,63 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {20D04FE0-3AEA-1069-A2D8-08002B30309D} = s 'My Computer' + { + val 'InfoTip' = s '@%SystemRoot%\system32\SHELL32.dll,-22913' + val 'IntroText' = s '@%SystemRoot%\system32\SHELL32.dll,-31751' + val 'LocalizedString' = s '@%SystemRoot%\system32\SHELL32.dll,-9216' + DefaultIcon = s '%SystemRoot%\Explorer.exe,0' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'ShellFolder' + { + val 'HideOnDesktopPerUser' = s '' + } + 'shell' + { + 'find' = s '@%SystemRoot%\system32\SHELL32.dll,-8503' + { + val 'SuppressionPolicy' = d '&H00000080' + 'command' = s '%SystemRoot%\Explorer.exe' + 'ddeexec' = s '[FindFolder("%l", %I)]' + { + 'application' = s 'Folders' + 'topic' = s 'AppProperties' + } + } + 'Manage' + { + 'command' = s '%windir%\system32\mmc.exe /s %windir%\system32\compmgmt.msc' + val 'SuppressionPolicy' = d '&H4000003c' + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + MyComputer + { + NameSpace + { + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/mydocuments.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/mydocuments.rgs new file mode 100644 index 00000000000..8b57afe0d85 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/mydocuments.rgs @@ -0,0 +1,67 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {450D8FBA-AD25-11D0-98A8-0800361B1103} + { + val 'InfoTip' = s '@%SystemRoot%\system32\SHELL32.dll,-22914' + val 'SortOrderIndex' = d '&H00000048' + val 'LocalizedString' = s '@%SystemRoot%\system32\SHELL32.dll,-9227' + DefaultIcon = s '%SystemRoot%\system32\SHELL32.dll,-235' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + val LoadWithoutCOM = s '' + } + 'ShellFolder' + { + val 'Attributes' = d '&Hf080013d' + val 'CallForAttributes' = d '&H00020040' + val 'HideOnDesktopPerUser' = s '' + val 'QueryForOverlay' = s '' + val 'WantsFORPARSING' = s '' + } + 'shell' + { + 'find' = s '@%SystemRoot%\system32\SHELL32.dll,-29188' + { + val 'SuppressionPolicy' = d '&H00000080' + 'command' = s '%SystemRoot%\Explorer.exe' + 'ddeexec' = s '[FindFolder("%l", %I)]' + { + 'application' = s 'Folders' + 'topic' = s 'AppProperties' + } + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + Desktop + { + NameSpace + { + '{450D8FBA-AD25-11D0-98A8-0800361B1103}' + { + val 'Removal Message' = s '@mydocs.dll,-900' + } + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/networkplaces.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/networkplaces.rgs new file mode 100644 index 00000000000..8ca1c84e583 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/networkplaces.rgs @@ -0,0 +1,58 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {208D2C60-3AEA-1069-A2D7-08002B30309D} = s 'My Network Places' + { + val 'InfoTip' = s '@%SystemRoot%\system32\SHELL32.dll,-22912' + val 'IntroText' = s '@%SystemRoot%\system32\SHELL32.dll,-31749' + val 'LocalizedString' = s '@%SystemRoot%\system32\SHELL32.dll,-9217' + DefaultIcon = s '%SystemRoot%\system32\SHELL32.dll,17' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'ShellFolder' + { + val 'HideOnDesktopPerUser' = s '' + } + 'shell' + { + 'find' = s '@%SystemRoot%\system32\SHELL32.dll,-29188' + { + val 'SuppressionPolicy' = d '&H00000080' + 'command' = s '%SystemRoot%\Explorer.exe' + 'ddeexec' = s '[FindFolder("%l", %I)]' + { + 'application' = s 'Folders' + 'topic' = s 'AppProperties' + } + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + NetworkNeighborhood + { + NameSpace + { + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/newmenu.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/newmenu.rgs new file mode 100644 index 00000000000..b3a6cab8f49 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/newmenu.rgs @@ -0,0 +1,14 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {D969A300-E7FF-11d0-A93B-00A0C90F2719} = s 'ReactOS New Object Service' + { + val flags = d '0' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/printers.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/printers.rgs new file mode 100644 index 00000000000..722170a8c71 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/printers.rgs @@ -0,0 +1,53 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {2227A280-3AEA-1069-A2DE-08002B30309D} = s 'Printers and Faxes' + { + val '{305CA226-D286-468e-B848-2B2E8E697B74} 2' = d '2' + val 'InfoTip' = s '@%SystemRoot%\system32\SHELL32.dll,-12696' + val 'IntroText' = s '@%SystemRoot%\system32\SHELL32.dll,-31757' + val 'LocalizedString' = s '@%SystemRoot%\system32\SHELL32.dll,-9319' + DefaultIcon = s '%SystemRoot%\System32\shell32.dll,-138' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'ShellFolder' + { + val 'Attributes' = d '&H20000004' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + Desktop + { + NameSpace + { + Printers = s '{2227A280-3AEA-1069-A2DE-08002B30309D}' + { + val 'IconIndex' = d '&H0000012C' + val 'Info' = s 'Adds, removes and changes settings for printers.' + val 'Module' = s '%SystemRoot%\system32\main.cpl' + val 'Name' = s 'Printers and Faxes' + } + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/recyclebin.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/recyclebin.rgs new file mode 100644 index 00000000000..dff8257e045 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/recyclebin.rgs @@ -0,0 +1,59 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {645FF040-5081-101B-9F08-00AA002F954E} + { + val 'InfoTip' = s '@%SystemRoot%\system32\SHELL32.dll,-22915' + val 'IntroText' = d '@%SystemRoot%\system32\SHELL32.dll,-31748' + val 'LocalizedString' = s '@%SystemRoot%\system32\SHELL32.dll,-8964' + DefaultIcon = s '%SystemRoot%\System32\shell32.dll,31' + { + val Empty = s '%SystemRoot%\System32\shell32.dll,31' + val Full = s '%SystemRoot%\System32\shell32.dll,32' + } + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'ShellFolder' + { + val 'Attributes' = b '&H40 &H01 &H00 &H20' + val 'CallForAttributes' = d '&H00000040' + } + 'shellex' + { + 'find' = s '@%SystemRoot%\system32\SHELL32.dll,-29188' + { + 'ContextMenuHandlers' + 'PropertySheetHandlers' + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + Desktop + { + NameSpace + { + '{645FF040-5081-101B-9F08-00AA002F954E}' = s 'Recycle Bin' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/shelldesktop.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/shelldesktop.rgs new file mode 100644 index 00000000000..f421c430cc2 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/shelldesktop.rgs @@ -0,0 +1,45 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {00021400-0000-0000-C000-000000000046} = s 'Desktop' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + shellex + { + ExtShellFolderViews + { + {5984FFE0-28D4-11CF-AE66-08002B2E1262} + val PersistMoniker = s 'file://%userappdata%\Microsoft\Internet Explorer\Desktop.htt' + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + Desktop + { + NameSpace + { + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/shellfsfolder.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/shellfsfolder.rgs new file mode 100644 index 00000000000..00d9daee97b --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/shellfsfolder.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {F3364BA0-65B9-11CE-A9BA-00AA004AE837} = s 'Shell File System Folder' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/shelllink.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/shelllink.rgs new file mode 100644 index 00000000000..a5972a70f9f --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/shelllink.rgs @@ -0,0 +1,23 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {00021401-0000-0000-C000-000000000046} = s 'Shortcut' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + PersistentAddinsRegistered + { + {89BCB740-6119-101A-BCB7-00DD010655AF} = s '{00021401-0000-0000-C000-000000000046}' + } + PersistentHandler = s '{00021401-0000-0000-C000-000000000046}' + ProgID = s 'lnkfile' + shellex + { + MayChangeDefaultMenu = s '' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/Copy of rgs/startmenu.rgs b/reactos/dll/win32/shell32_new/res/Copy of rgs/startmenu.rgs new file mode 100644 index 00000000000..a91a3464ec2 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/Copy of rgs/startmenu.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {4622AD11-FF23-11d0-8D34-00A0C90F2719} = s 'Start Menu' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/avis/160+161+167+168.avi b/reactos/dll/win32/shell32_new/res/avis/160+161+167+168.avi new file mode 100644 index 00000000000..a3c995a1397 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/avis/160+161+167+168.avi differ diff --git a/reactos/dll/win32/shell32_new/res/avis/162.avi b/reactos/dll/win32/shell32_new/res/avis/162.avi new file mode 100644 index 00000000000..847b9e6a5bc Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/avis/162.avi differ diff --git a/reactos/dll/win32/shell32_new/res/avis/163.avi b/reactos/dll/win32/shell32_new/res/avis/163.avi new file mode 100644 index 00000000000..feff442394f Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/avis/163.avi differ diff --git a/reactos/dll/win32/shell32_new/res/avis/164+169.avi b/reactos/dll/win32/shell32_new/res/avis/164+169.avi new file mode 100644 index 00000000000..f1f781bd85e Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/avis/164+169.avi differ diff --git a/reactos/dll/win32/shell32_new/res/avis/170.avi b/reactos/dll/win32/shell32_new/res/avis/170.avi new file mode 100644 index 00000000000..3fd91c87b6a Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/avis/170.avi differ diff --git a/reactos/dll/win32/shell32_new/res/avis/Licence/COPYING b/reactos/dll/win32/shell32_new/res/avis/Licence/COPYING new file mode 100644 index 00000000000..e709d0c050b --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/avis/Licence/COPYING @@ -0,0 +1,67 @@ +Creative Commons Attribution-ShareAlike 2.5 License Agreement + +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + 1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. + 2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License. + 3. "Licensor" means the individual or entity that offers the Work under the terms of this License. + 4. "Original Author" means the individual or entity who created the Work. + 5. "Work" means the copyrightable work of authorship offered under the terms of this License. + 6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + 7. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. + +2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + 1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works; + 2. to create and reproduce Derivative Works; + 3. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works; + 4. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works. + 5. + + For the avoidance of doubt, where the work is a musical composition: + 1. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work. + 2. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights society or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions). + 6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions). + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + 1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by clause 4(c), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by clause 4(c), as requested. + 2. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-ShareAlike 2.5 Japan). You must include a copy of, or the Uniform Resource Identifier for, this License or other license specified in the previous sentence with every copy or phonorecord of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Derivative Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Derivative Work itself to be made subject to the terms of this License. + 3. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + 1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + 2. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + +Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + +Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. + +Creative Commons may be contacted at http://creativecommons.org/. diff --git a/reactos/dll/win32/shell32_new/res/avis/Licence/Tango.txt b/reactos/dll/win32/shell32_new/res/avis/Licence/Tango.txt new file mode 100644 index 00000000000..642b2937a84 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/avis/Licence/Tango.txt @@ -0,0 +1,10 @@ +The following avi's use icons from the Tango project and are +released under Creative Commons Attribution-ShareAlike 2.5 License. +Please see COPYING for details + +160+161+167+168.avi +162.avi +163.avi +164+169.avi +170.avi + diff --git a/reactos/dll/win32/shell32_new/res/bitmaps/204.bmp b/reactos/dll/win32/shell32_new/res/bitmaps/204.bmp new file mode 100644 index 00000000000..f6647a5e4bd Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/bitmaps/204.bmp differ diff --git a/reactos/dll/win32/shell32_new/res/bitmaps/205.bmp b/reactos/dll/win32/shell32_new/res/bitmaps/205.bmp new file mode 100644 index 00000000000..445357ddf02 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/bitmaps/205.bmp differ diff --git a/reactos/dll/win32/shell32_new/res/bitmaps/206.bmp b/reactos/dll/win32/shell32_new/res/bitmaps/206.bmp new file mode 100644 index 00000000000..32b385dcef4 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/bitmaps/206.bmp differ diff --git a/reactos/dll/win32/shell32_new/res/bitmaps/207.bmp b/reactos/dll/win32/shell32_new/res/bitmaps/207.bmp new file mode 100644 index 00000000000..b401b0c9340 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/bitmaps/207.bmp differ diff --git a/reactos/dll/win32/shell32_new/res/bitmaps/225.bmp b/reactos/dll/win32/shell32_new/res/bitmaps/225.bmp new file mode 100644 index 00000000000..17bb5271d71 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/bitmaps/225.bmp differ diff --git a/reactos/dll/win32/shell32_new/res/bitmaps/226.bmp b/reactos/dll/win32/shell32_new/res/bitmaps/226.bmp new file mode 100644 index 00000000000..d067e61e41b Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/bitmaps/226.bmp differ diff --git a/reactos/dll/win32/shell32_new/res/bitmaps/227.bmp b/reactos/dll/win32/shell32_new/res/bitmaps/227.bmp new file mode 100644 index 00000000000..031b38ed775 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/bitmaps/227.bmp differ diff --git a/reactos/dll/win32/shell32_new/res/bitmaps/228.bmp b/reactos/dll/win32/shell32_new/res/bitmaps/228.bmp new file mode 100644 index 00000000000..5a10acb43e8 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/bitmaps/228.bmp differ diff --git a/reactos/dll/win32/shell32_new/res/bitmaps/shell_about_logo_24bpp.bmp b/reactos/dll/win32/shell32_new/res/bitmaps/shell_about_logo_24bpp.bmp new file mode 100644 index 00000000000..335383f3f1d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/bitmaps/shell_about_logo_24bpp.bmp differ diff --git a/reactos/dll/win32/shell32_new/res/icons/1.ico b/reactos/dll/win32/shell32_new/res/icons/1.ico new file mode 100644 index 00000000000..baae0b125b3 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/1.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/10.ico b/reactos/dll/win32/shell32_new/res/icons/10.ico new file mode 100644 index 00000000000..3e74ff6db78 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/10.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/1001.ico b/reactos/dll/win32/shell32_new/res/icons/1001.ico new file mode 100644 index 00000000000..e7b9f8c1f33 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/1001.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/1004.ico b/reactos/dll/win32/shell32_new/res/icons/1004.ico new file mode 100644 index 00000000000..6008790389d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/1004.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/11.ico b/reactos/dll/win32/shell32_new/res/icons/11.ico new file mode 100644 index 00000000000..34dfaadec3a Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/11.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/12.ico b/reactos/dll/win32/shell32_new/res/icons/12.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/12.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/13.ico b/reactos/dll/win32/shell32_new/res/icons/13.ico new file mode 100644 index 00000000000..bcafb16a18c Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/13.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/134.ico b/reactos/dll/win32/shell32_new/res/icons/134.ico new file mode 100644 index 00000000000..a35009600a0 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/134.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/135.ico b/reactos/dll/win32/shell32_new/res/icons/135.ico new file mode 100644 index 00000000000..a35009600a0 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/135.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/137.ico b/reactos/dll/win32/shell32_new/res/icons/137.ico new file mode 100644 index 00000000000..634e6d877ba Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/137.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/138.ico b/reactos/dll/win32/shell32_new/res/icons/138.ico new file mode 100644 index 00000000000..c4fbdb0502c Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/138.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/14.ico b/reactos/dll/win32/shell32_new/res/icons/14.ico new file mode 100644 index 00000000000..558df85c00e Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/14.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/15.ico b/reactos/dll/win32/shell32_new/res/icons/15.ico new file mode 100644 index 00000000000..ebc40a9a86c Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/15.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/151.ico b/reactos/dll/win32/shell32_new/res/icons/151.ico new file mode 100644 index 00000000000..5d68e40db91 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/151.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/152.ico b/reactos/dll/win32/shell32_new/res/icons/152.ico new file mode 100644 index 00000000000..82ac3f48df4 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/152.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/153.ico b/reactos/dll/win32/shell32_new/res/icons/153.ico new file mode 100644 index 00000000000..93ebc0c6687 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/153.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/154.ico b/reactos/dll/win32/shell32_new/res/icons/154.ico new file mode 100644 index 00000000000..9ac408daeb2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/154.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/155.ico b/reactos/dll/win32/shell32_new/res/icons/155.ico new file mode 100644 index 00000000000..c0b4b751e82 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/155.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/156.ico b/reactos/dll/win32/shell32_new/res/icons/156.ico new file mode 100644 index 00000000000..c0b4b751e82 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/156.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/157.ico b/reactos/dll/win32/shell32_new/res/icons/157.ico new file mode 100644 index 00000000000..c0b4b751e82 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/157.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/16.ico b/reactos/dll/win32/shell32_new/res/icons/16.ico new file mode 100644 index 00000000000..56edfcbb2af Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/16.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/160.ico b/reactos/dll/win32/shell32_new/res/icons/160.ico new file mode 100644 index 00000000000..5120bcfe6ff Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/160.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/161.ico b/reactos/dll/win32/shell32_new/res/icons/161.ico new file mode 100644 index 00000000000..706daeffdab Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/161.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/16710.ico b/reactos/dll/win32/shell32_new/res/icons/16710.ico new file mode 100644 index 00000000000..706daeffdab Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/16710.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/16715.ico b/reactos/dll/win32/shell32_new/res/icons/16715.ico new file mode 100644 index 00000000000..706daeffdab Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/16715.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/16717.ico b/reactos/dll/win32/shell32_new/res/icons/16717.ico new file mode 100644 index 00000000000..706daeffdab Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/16717.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/16718.ico b/reactos/dll/win32/shell32_new/res/icons/16718.ico new file mode 100644 index 00000000000..706daeffdab Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/16718.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/16721.ico b/reactos/dll/win32/shell32_new/res/icons/16721.ico new file mode 100644 index 00000000000..706daeffdab Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/16721.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/17.ico b/reactos/dll/win32/shell32_new/res/icons/17.ico new file mode 100644 index 00000000000..af2d0a6eecf Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/17.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/1700.ico b/reactos/dll/win32/shell32_new/res/icons/1700.ico new file mode 100644 index 00000000000..4f8775c069a Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/1700.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/172.ico b/reactos/dll/win32/shell32_new/res/icons/172.ico new file mode 100644 index 00000000000..cf3a1413d1d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/172.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/173.ico b/reactos/dll/win32/shell32_new/res/icons/173.ico new file mode 100644 index 00000000000..b905ef563b6 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/173.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/18.ico b/reactos/dll/win32/shell32_new/res/icons/18.ico new file mode 100644 index 00000000000..7b760add407 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/18.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/182.ico b/reactos/dll/win32/shell32_new/res/icons/182.ico new file mode 100644 index 00000000000..56c8f24b994 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/182.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/183.ico b/reactos/dll/win32/shell32_new/res/icons/183.ico new file mode 100644 index 00000000000..5f3251917ba Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/183.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/184.ico b/reactos/dll/win32/shell32_new/res/icons/184.ico new file mode 100644 index 00000000000..5eee0af44ec Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/184.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/185.ico b/reactos/dll/win32/shell32_new/res/icons/185.ico new file mode 100644 index 00000000000..6b4dc9303e5 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/185.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/186.ico b/reactos/dll/win32/shell32_new/res/icons/186.ico new file mode 100644 index 00000000000..d09411113a0 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/186.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/187.ico b/reactos/dll/win32/shell32_new/res/icons/187.ico new file mode 100644 index 00000000000..38b924da89a Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/187.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/19.ico b/reactos/dll/win32/shell32_new/res/icons/19.ico new file mode 100644 index 00000000000..7b760add407 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/19.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/191.ico b/reactos/dll/win32/shell32_new/res/icons/191.ico new file mode 100644 index 00000000000..2a5bf8d0004 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/191.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/192.ico b/reactos/dll/win32/shell32_new/res/icons/192.ico new file mode 100644 index 00000000000..5276b06bd97 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/192.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/2.ico b/reactos/dll/win32/shell32_new/res/icons/2.ico new file mode 100644 index 00000000000..55a02a01558 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/2.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/20.ico b/reactos/dll/win32/shell32_new/res/icons/20.ico new file mode 100644 index 00000000000..4174b5fb88f Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/20.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/21.ico b/reactos/dll/win32/shell32_new/res/icons/21.ico new file mode 100644 index 00000000000..7b94e13a1ed Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/21.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/210.ico b/reactos/dll/win32/shell32_new/res/icons/210.ico new file mode 100644 index 00000000000..76edaedc60a Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/210.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/22.ico b/reactos/dll/win32/shell32_new/res/icons/22.ico new file mode 100644 index 00000000000..634e6d877ba Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/22.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/220.ico b/reactos/dll/win32/shell32_new/res/icons/220.ico new file mode 100644 index 00000000000..7135f45b32f Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/220.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/221.ico b/reactos/dll/win32/shell32_new/res/icons/221.ico new file mode 100644 index 00000000000..d67ed7a6909 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/221.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/222.ico b/reactos/dll/win32/shell32_new/res/icons/222.ico new file mode 100644 index 00000000000..06c5be54099 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/222.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/224.ico b/reactos/dll/win32/shell32_new/res/icons/224.ico new file mode 100644 index 00000000000..65f1ab9c47f Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/224.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/225.ico b/reactos/dll/win32/shell32_new/res/icons/225.ico new file mode 100644 index 00000000000..cbf02e26652 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/225.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/226.ico b/reactos/dll/win32/shell32_new/res/icons/226.ico new file mode 100644 index 00000000000..4045c348bc4 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/226.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/228.ico b/reactos/dll/win32/shell32_new/res/icons/228.ico new file mode 100644 index 00000000000..879feb09624 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/228.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/23.ico b/reactos/dll/win32/shell32_new/res/icons/23.ico new file mode 100644 index 00000000000..5048fa745de Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/23.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/233.ico b/reactos/dll/win32/shell32_new/res/icons/233.ico new file mode 100644 index 00000000000..25869af9b88 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/233.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/235.ico b/reactos/dll/win32/shell32_new/res/icons/235.ico new file mode 100644 index 00000000000..e2e6a9b6bcf Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/235.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/236.ico b/reactos/dll/win32/shell32_new/res/icons/236.ico new file mode 100644 index 00000000000..59b8aef43ab Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/236.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/237.ico b/reactos/dll/win32/shell32_new/res/icons/237.ico new file mode 100644 index 00000000000..38f4843bc95 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/237.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/238.ico b/reactos/dll/win32/shell32_new/res/icons/238.ico new file mode 100644 index 00000000000..6acb384ab57 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/238.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/24.ico b/reactos/dll/win32/shell32_new/res/icons/24.ico new file mode 100644 index 00000000000..6008790389d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/24.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/240.ico b/reactos/dll/win32/shell32_new/res/icons/240.ico new file mode 100644 index 00000000000..5276b06bd97 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/240.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/245.ico b/reactos/dll/win32/shell32_new/res/icons/245.ico new file mode 100644 index 00000000000..af2d0a6eecf Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/245.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/246.ico b/reactos/dll/win32/shell32_new/res/icons/246.ico new file mode 100644 index 00000000000..9293575f57b Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/246.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/248.ico b/reactos/dll/win32/shell32_new/res/icons/248.ico new file mode 100644 index 00000000000..edfdd35a26d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/248.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/249.ico b/reactos/dll/win32/shell32_new/res/icons/249.ico new file mode 100644 index 00000000000..9aecb582b81 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/249.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/25.ico b/reactos/dll/win32/shell32_new/res/icons/25.ico new file mode 100644 index 00000000000..fe9d4a9e052 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/25.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/250.ico b/reactos/dll/win32/shell32_new/res/icons/250.ico new file mode 100644 index 00000000000..82a414dba52 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/250.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/252.ico b/reactos/dll/win32/shell32_new/res/icons/252.ico new file mode 100644 index 00000000000..af2d0a6eecf Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/252.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/254.ico b/reactos/dll/win32/shell32_new/res/icons/254.ico new file mode 100644 index 00000000000..92a024a5319 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/254.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/255.ico b/reactos/dll/win32/shell32_new/res/icons/255.ico new file mode 100644 index 00000000000..70cff6abd09 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/255.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/263.ico b/reactos/dll/win32/shell32_new/res/icons/263.ico new file mode 100644 index 00000000000..6008790389d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/263.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/265.ico b/reactos/dll/win32/shell32_new/res/icons/265.ico new file mode 100644 index 00000000000..f4eb7b9cad8 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/265.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/268.ico b/reactos/dll/win32/shell32_new/res/icons/268.ico new file mode 100644 index 00000000000..b0565ca436b Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/268.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/269.ico b/reactos/dll/win32/shell32_new/res/icons/269.ico new file mode 100644 index 00000000000..7135f45b32f Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/269.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/270.ico b/reactos/dll/win32/shell32_new/res/icons/270.ico new file mode 100644 index 00000000000..e62cf47237d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/270.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/271.ico b/reactos/dll/win32/shell32_new/res/icons/271.ico new file mode 100644 index 00000000000..350486328aa Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/271.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/277.ico b/reactos/dll/win32/shell32_new/res/icons/277.ico new file mode 100644 index 00000000000..5cda537e17a Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/277.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/279.ico b/reactos/dll/win32/shell32_new/res/icons/279.ico new file mode 100644 index 00000000000..7135f45b32f Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/279.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/28.ico b/reactos/dll/win32/shell32_new/res/icons/28.ico new file mode 100644 index 00000000000..d67ed7a6909 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/28.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/289.ico b/reactos/dll/win32/shell32_new/res/icons/289.ico new file mode 100644 index 00000000000..6008790389d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/289.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/29.ico b/reactos/dll/win32/shell32_new/res/icons/29.ico new file mode 100644 index 00000000000..f33ac25e692 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/29.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/290.ico b/reactos/dll/win32/shell32_new/res/icons/290.ico new file mode 100644 index 00000000000..5aa5db9b758 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/290.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/291.ico b/reactos/dll/win32/shell32_new/res/icons/291.ico new file mode 100644 index 00000000000..06c5be54099 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/291.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/292.ico b/reactos/dll/win32/shell32_new/res/icons/292.ico new file mode 100644 index 00000000000..879feb09624 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/292.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/293.ico b/reactos/dll/win32/shell32_new/res/icons/293.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/293.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/294.ico b/reactos/dll/win32/shell32_new/res/icons/294.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/294.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/295.ico b/reactos/dll/win32/shell32_new/res/icons/295.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/295.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/296.ico b/reactos/dll/win32/shell32_new/res/icons/296.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/296.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/297.ico b/reactos/dll/win32/shell32_new/res/icons/297.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/297.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/298.ico b/reactos/dll/win32/shell32_new/res/icons/298.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/298.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/299.ico b/reactos/dll/win32/shell32_new/res/icons/299.ico new file mode 100644 index 00000000000..7d431941278 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/299.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/3.ico b/reactos/dll/win32/shell32_new/res/icons/3.ico new file mode 100644 index 00000000000..5e86a5895dd Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/3.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/30.ico b/reactos/dll/win32/shell32_new/res/icons/30.ico new file mode 100644 index 00000000000..3a8081fdb37 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/30.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/302.ico b/reactos/dll/win32/shell32_new/res/icons/302.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/302.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/304.ico b/reactos/dll/win32/shell32_new/res/icons/304.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/304.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/305.ico b/reactos/dll/win32/shell32_new/res/icons/305.ico new file mode 100644 index 00000000000..25869af9b88 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/305.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/309.ico b/reactos/dll/win32/shell32_new/res/icons/309.ico new file mode 100644 index 00000000000..edfdd35a26d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/309.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/315.ico b/reactos/dll/win32/shell32_new/res/icons/315.ico new file mode 100644 index 00000000000..631a88c90cf Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/315.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/317.ico b/reactos/dll/win32/shell32_new/res/icons/317.ico new file mode 100644 index 00000000000..6dbf966031f Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/317.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/318.ico b/reactos/dll/win32/shell32_new/res/icons/318.ico new file mode 100644 index 00000000000..94a2e1e67b2 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/318.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/319.ico b/reactos/dll/win32/shell32_new/res/icons/319.ico new file mode 100644 index 00000000000..a3324fe62e1 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/319.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/32.ico b/reactos/dll/win32/shell32_new/res/icons/32.ico new file mode 100644 index 00000000000..578ab0123af Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/32.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/322.ico b/reactos/dll/win32/shell32_new/res/icons/322.ico new file mode 100644 index 00000000000..b905ef563b6 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/322.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/323.ico b/reactos/dll/win32/shell32_new/res/icons/323.ico new file mode 100644 index 00000000000..5048fa745de Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/323.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/324.ico b/reactos/dll/win32/shell32_new/res/icons/324.ico new file mode 100644 index 00000000000..6008790389d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/324.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/325.ico b/reactos/dll/win32/shell32_new/res/icons/325.ico new file mode 100644 index 00000000000..e9fb7ce061d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/325.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/326.ico b/reactos/dll/win32/shell32_new/res/icons/326.ico new file mode 100644 index 00000000000..0d901c550d4 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/326.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/327.ico b/reactos/dll/win32/shell32_new/res/icons/327.ico new file mode 100644 index 00000000000..4dbf5fbe83e Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/327.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/328.ico b/reactos/dll/win32/shell32_new/res/icons/328.ico new file mode 100644 index 00000000000..fe9d4a9e052 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/328.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/329.ico b/reactos/dll/win32/shell32_new/res/icons/329.ico new file mode 100644 index 00000000000..d67ed7a6909 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/329.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/33.ico b/reactos/dll/win32/shell32_new/res/icons/33.ico new file mode 100644 index 00000000000..df31dc28d1b Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/33.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/330.ico b/reactos/dll/win32/shell32_new/res/icons/330.ico new file mode 100644 index 00000000000..634e6d877ba Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/330.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/35.ico b/reactos/dll/win32/shell32_new/res/icons/35.ico new file mode 100644 index 00000000000..bea093df6f6 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/35.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/36.ico b/reactos/dll/win32/shell32_new/res/icons/36.ico new file mode 100644 index 00000000000..634e6d877ba Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/36.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/37.ico b/reactos/dll/win32/shell32_new/res/icons/37.ico new file mode 100644 index 00000000000..f5953fe9a32 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/37.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/38.ico b/reactos/dll/win32/shell32_new/res/icons/38.ico new file mode 100644 index 00000000000..c4fbdb0502c Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/38.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/39.ico b/reactos/dll/win32/shell32_new/res/icons/39.ico new file mode 100644 index 00000000000..ca7cee5d158 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/39.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/4.ico b/reactos/dll/win32/shell32_new/res/icons/4.ico new file mode 100644 index 00000000000..429df441149 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/4.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/40.ico b/reactos/dll/win32/shell32_new/res/icons/40.ico new file mode 100644 index 00000000000..cee50eed7e8 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/40.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/41.ico b/reactos/dll/win32/shell32_new/res/icons/41.ico new file mode 100644 index 00000000000..879feb09624 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/41.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/44.ico b/reactos/dll/win32/shell32_new/res/icons/44.ico new file mode 100644 index 00000000000..b905ef563b6 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/44.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/45.ico b/reactos/dll/win32/shell32_new/res/icons/45.ico new file mode 100644 index 00000000000..e9fb7ce061d Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/45.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/46.ico b/reactos/dll/win32/shell32_new/res/icons/46.ico new file mode 100644 index 00000000000..bc5711c71a0 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/46.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/47.ico b/reactos/dll/win32/shell32_new/res/icons/47.ico new file mode 100644 index 00000000000..10cea4e3f84 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/47.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/48.ico b/reactos/dll/win32/shell32_new/res/icons/48.ico new file mode 100644 index 00000000000..f1f858eb2c0 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/48.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/5.ico b/reactos/dll/win32/shell32_new/res/icons/5.ico new file mode 100644 index 00000000000..7fd4302eb78 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/5.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/54.ico b/reactos/dll/win32/shell32_new/res/icons/54.ico new file mode 100644 index 00000000000..edc0315f3fd Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/54.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/6.ico b/reactos/dll/win32/shell32_new/res/icons/6.ico new file mode 100644 index 00000000000..25869af9b88 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/6.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/7.ico b/reactos/dll/win32/shell32_new/res/icons/7.ico new file mode 100644 index 00000000000..25869af9b88 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/7.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/8.ico b/reactos/dll/win32/shell32_new/res/icons/8.ico new file mode 100644 index 00000000000..25869af9b88 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/8.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/8240.ico b/reactos/dll/win32/shell32_new/res/icons/8240.ico new file mode 100644 index 00000000000..d67ed7a6909 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/8240.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/9.ico b/reactos/dll/win32/shell32_new/res/icons/9.ico new file mode 100644 index 00000000000..a7aa955e875 Binary files /dev/null and b/reactos/dll/win32/shell32_new/res/icons/9.ico differ diff --git a/reactos/dll/win32/shell32_new/res/icons/Icon_Licence/COPYING b/reactos/dll/win32/shell32_new/res/icons/Icon_Licence/COPYING new file mode 100644 index 00000000000..e709d0c050b --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/icons/Icon_Licence/COPYING @@ -0,0 +1,67 @@ +Creative Commons Attribution-ShareAlike 2.5 License Agreement + +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + 1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. + 2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License. + 3. "Licensor" means the individual or entity that offers the Work under the terms of this License. + 4. "Original Author" means the individual or entity who created the Work. + 5. "Work" means the copyrightable work of authorship offered under the terms of this License. + 6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + 7. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. + +2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + 1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works; + 2. to create and reproduce Derivative Works; + 3. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works; + 4. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works. + 5. + + For the avoidance of doubt, where the work is a musical composition: + 1. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work. + 2. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights society or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions). + 6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions). + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + 1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by clause 4(c), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by clause 4(c), as requested. + 2. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-ShareAlike 2.5 Japan). You must include a copy of, or the Uniform Resource Identifier for, this License or other license specified in the previous sentence with every copy or phonorecord of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Derivative Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Derivative Work itself to be made subject to the terms of this License. + 3. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + 1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + 2. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + +Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + +Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. + +Creative Commons may be contacted at http://creativecommons.org/. diff --git a/reactos/dll/win32/shell32_new/res/icons/Icon_Licence/Tango.txt b/reactos/dll/win32/shell32_new/res/icons/Icon_Licence/Tango.txt new file mode 100644 index 00000000000..796417a0820 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/icons/Icon_Licence/Tango.txt @@ -0,0 +1,127 @@ +The following icons are the property of the Tango project and are +released under Creative Commons Attribution-ShareAlike 2.5 License. +Please see COPYING for details + +1.ico +2.ico +3.ico +4.ico +5.ico +6.ico +7.ico +8.ico +9.ico +10.ico +11.ico +12.ico +13.ico +14.ico +15.ico +16.ico +17.ico +18.ico +19.ico +20.ico +21.ico +22.ico +23.ico +24.ico +25.ico +28.ico +29.ico +30.ico +32.ico +33.ico +35.ico +36.ico +37.ico +38.ico +39.ico +41.ico +44.ico +45.ico +46.ico +47.ico +48.ico +54.ico +137.ico +138.ico +151.ico +152.ico +153.ico +154.ico +155.ico +156.ico +157.ico +160.ico +161.ico +172.ico +173.ico +191.ico +192.ico +210.ico +220.ico +221.ico +222.ico +224.ico +225.ico +226.ico +228.ico +233.ico +235.ico +236.ico +237.ico +238.ico +240.ico +245.ico +246.ico +248.ico +249.ico +250.ico +252.ico +254.ico +255.ico +263.ico +265.ico +268.ico +269.ico +270.ico +271.ico +277.ico +279.ico +289.ico +290.ico +291.ico +292.ico +293.ico +294.ico +295.ico +296.ico +297.ico +298.ico +299.ico +302.ico +304.ico +305.ico +309.ico +315.ico +317.ico +318.ico +319.ico +322.ico +323.ico +324.ico +325.ico +326.ico +327.ico +328.ico +329.ico +330.ico +1001.ico +1004.ico +8240.ico +16710.ico +16715.ico +16717.ico +16718.ico +16721.ico \ No newline at end of file diff --git a/reactos/dll/win32/shell32_new/res/rgs/adminfoldershortcut.rgs b/reactos/dll/win32/shell32_new/res/rgs/adminfoldershortcut.rgs new file mode 100644 index 00000000000..bc66450a2af --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/adminfoldershortcut.rgs @@ -0,0 +1,56 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {D20EA4E1-3957-11d2-A40B-0C5020524153} = s 'Administrative Tools' + { + val '{305CA226-D286-468e-B848-2B2E8E697B74} 2' = d '5' + val InfoTip = e '@%%SystemRoot%%\system32\SHELL32.dll,-22921' + val LocalizedString = e '@%%SystemRoot%%\system32\SHELL32.dll,-22982' + DefaultIcon = e '%%SystemRoot%%\system32\main.cpl,10' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + Instance + { + val CLSID = s '{0AFACED1-E828-11D1-9187-B532F1E9575D}' + InitPropertyBag + { + val Attributes = s '0x00000011' + val TargetSpecialFolder = s '0x002f' + } + } + 'ShellFolder' + { + val Attributes = d '&H60000100' + val WantsFORPARSING = s '' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + NoRemove ControlPanel + { + NoRemove NameSpace + { + '{D20EA4E1-3957-11d2-A40B-0C5020524153}' = s 'Administrative Tools' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/autocomplete.rgs b/reactos/dll/win32/shell32_new/res/rgs/autocomplete.rgs new file mode 100644 index 00000000000..9afd9d5cb86 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/autocomplete.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {00BB2763-6A77-11D0-A535-00C04FD7D062} = s 'Shell ReactOS AutoComplete' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/controlpanel.rgs b/reactos/dll/win32/shell32_new/res/rgs/controlpanel.rgs new file mode 100644 index 00000000000..298ff87c917 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/controlpanel.rgs @@ -0,0 +1,52 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {21EC2020-3AEA-1069-A2DD-08002B30309D} + { + val InfoTip = e '@%%SystemRoot%%\system32\SHELL32.dll,-31361' + DefaultIcon = e '%%SystemRoot%%\System32\shell32.dll,-137' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + ShellFolder + { + val Attributes = d '0' + val HideAsDeletePerUser = s '' + val WantsFORDISPLAY = s '' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + ControlPanel + { + NameSpace + { + } + } + NoRemove MyComputer + { + NoRemove NameSpace + { + Controls = s '{21EC2020-3AEA-1069-A2DD-08002B30309D}' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/dragdrophelper.rgs b/reactos/dll/win32/shell32_new/res/rgs/dragdrophelper.rgs new file mode 100644 index 00000000000..25d710d188c --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/dragdrophelper.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {4657278A-411B-11d2-839A-00C04FD918D0} = s 'Shell Drag and Drop helper' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/folderoptions.rgs b/reactos/dll/win32/shell32_new/res/rgs/folderoptions.rgs new file mode 100644 index 00000000000..eead3b603a6 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/folderoptions.rgs @@ -0,0 +1,56 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {6DFD7C5C-2451-11d3-A299-00C04F8EF6AF} = s 'Folder Options' + { + val '{305CA226-D286-468e-B848-2B2E8E697B74} 2' = d '1' + val InfoTip = e '@%%SystemRoot%%\system32\SHELL32.dll,-22924' + val LocalizedString = e '@%%SystemRoot%%\system32\SHELL32.dll,-22985' + DefaultIcon = e '%%SystemRoot%%\system32\SHELL32.dll,-210' + Shell + { + Open + { + Command = s 'rundll32.exe shell32.dll,Options_RunDLL 0' + } + RunAs + { + Command = s 'rundll32.exe shell32.dll,Options_RunDLL 0' + { + val Extended = s '' + } + } + } + ShellFolder + { + val Attributes = d '0' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + NoRemove ControlPanel + { + NoRemove NameSpace + { + '{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}' = s 'Folder Options' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/foldershortcut.rgs b/reactos/dll/win32/shell32_new/res/rgs/foldershortcut.rgs new file mode 100644 index 00000000000..9df72086aed --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/foldershortcut.rgs @@ -0,0 +1,23 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {0AFACED1-E828-11D1-9187-B532F1E9575D} = s 'Folder Shortcut' + { + val Details = s 'prop:Name;LinkTarget' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'shellex' + { + IconHandler = s '{0AFACED1-E828-11D1-9187-B532F1E9575D}' + } + 'ShellFolder' + { + val Attributes = d '&H60410137' + val CallForAttributes = d '&Hf0000000' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/fontsfoldershortcut.rgs b/reactos/dll/win32/shell32_new/res/rgs/fontsfoldershortcut.rgs new file mode 100644 index 00000000000..69591c6644f --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/fontsfoldershortcut.rgs @@ -0,0 +1,56 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {D20EA4E1-3957-11d2-A40B-0C5020524152} = s 'Fonts' + { + val '{305CA226-D286-468e-B848-2B2E8E697B74} 2' = d '&Hffffffff' + val InfoTip = e '@%%SystemRoot%%\system32\SHELL32.dll,-22920' + val LocalizedString = e '@%%SystemRoot%%\system32\SHELL32.dll,-22981' + DefaultIcon = e '%%SystemRoot%%\system32\main.cpl,9' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + Instance + { + val CLSID = s '{0AFACED1-E828-11D1-9187-B532F1E9575D}' + InitPropertyBag + { + val Attributes = s '0x00000015' + val TargetSpecialFolder = s '0x0014' + } + } + 'ShellFolder' + { + val Attributes = d '&H60000100' + val WantsFORPARSING = s '' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + NoRemove ControlPanel + { + NoRemove NameSpace + { + '{D20EA4E1-3957-11d2-A40B-0C5020524152}' = s 'Fonts' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/menubandsite.rgs b/reactos/dll/win32/shell32_new/res/rgs/menubandsite.rgs new file mode 100644 index 00000000000..c597e873135 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/menubandsite.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {E13EF4E4-D2F2-11d0-9816-00C04FD91972} = s 'Menu Site' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/mycomputer.rgs b/reactos/dll/win32/shell32_new/res/rgs/mycomputer.rgs new file mode 100644 index 00000000000..85aa1496c1f --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/mycomputer.rgs @@ -0,0 +1,63 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {20D04FE0-3AEA-1069-A2D8-08002B30309D} = s 'My Computer' + { + val 'InfoTip' = e '@%%SystemRoot%%\system32\SHELL32.dll,-22913' + val 'IntroText' = e '@%%SystemRoot%%\system32\SHELL32.dll,-31751' + val 'LocalizedString' = e '@%%SystemRoot%%\system32\SHELL32.dll,-9216' + DefaultIcon = e '%%SystemRoot%%\Explorer.exe,0' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'ShellFolder' + { + val 'HideOnDesktopPerUser' = s '' + } + 'shell' + { + 'find' = e '@%%SystemRoot%%\system32\SHELL32.dll,-8503' + { + val 'SuppressionPolicy' = d '&H00000080' + 'command' = e '%%SystemRoot%%\Explorer.exe' + 'ddeexec' = s '[FindFolder("%%l", %%I)]' + { + 'application' = s 'Folders' + 'topic' = s 'AppProperties' + } + } + 'Manage' + { + 'command' = e '%%windir%%\system32\mmc.exe /s %%windir%%\system32\compmgmt.msc' + val 'SuppressionPolicy' = d '&H4000003c' + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + MyComputer + { + NameSpace + { + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/mydocuments.rgs b/reactos/dll/win32/shell32_new/res/rgs/mydocuments.rgs new file mode 100644 index 00000000000..9b65a9ad09e --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/mydocuments.rgs @@ -0,0 +1,67 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {450D8FBA-AD25-11D0-98A8-0800361B1103} + { + val 'InfoTip' = e '@%%SystemRoot%%\system32\SHELL32.dll,-22914' + val 'SortOrderIndex' = d '&H00000048' + val 'LocalizedString' = e '@%%SystemRoot%%\system32\SHELL32.dll,-9227' + DefaultIcon = e '%%SystemRoot%%\system32\SHELL32.dll,-235' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + val LoadWithoutCOM = s '' + } + 'ShellFolder' + { + val 'Attributes' = d '&Hf080013d' + val 'CallForAttributes' = d '&H00020040' + val 'HideOnDesktopPerUser' = s '' + val 'QueryForOverlay' = s '' + val 'WantsFORPARSING' = s '' + } + 'shell' + { + 'find' = e '@%%SystemRoot%%\system32\SHELL32.dll,-29188' + { + val 'SuppressionPolicy' = d '&H00000080' + 'command' = e '%%SystemRoot%%\Explorer.exe' + 'ddeexec' = s '[FindFolder("%%l", %%I)]' + { + 'application' = s 'Folders' + 'topic' = s 'AppProperties' + } + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + NoRemove Desktop + { + NoRemove NameSpace + { + '{450D8FBA-AD25-11D0-98A8-0800361B1103}' + { + val 'Removal Message' = s '@mydocs.dll,-900' + } + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/networkplaces.rgs b/reactos/dll/win32/shell32_new/res/rgs/networkplaces.rgs new file mode 100644 index 00000000000..da25a52dc2b --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/networkplaces.rgs @@ -0,0 +1,58 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {208D2C60-3AEA-1069-A2D7-08002B30309D} = s 'My Network Places' + { + val 'InfoTip' = e '@%%SystemRoot%%\system32\SHELL32.dll,-22912' + val 'IntroText' = e '@%%SystemRoot%%\system32\SHELL32.dll,-31749' + val 'LocalizedString' = e '@%%SystemRoot%%\system32\SHELL32.dll,-9217' + DefaultIcon = e '%%SystemRoot%%\system32\SHELL32.dll,17' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'ShellFolder' + { + val 'HideOnDesktopPerUser' = s '' + } + 'shell' + { + 'find' = e '@%%SystemRoot%%\system32\SHELL32.dll,-29188' + { + val 'SuppressionPolicy' = d '&H00000080' + 'command' = e '%%SystemRoot%%\Explorer.exe' + 'ddeexec' = s '[FindFolder("%%l", %%I)]' + { + 'application' = s 'Folders' + 'topic' = s 'AppProperties' + } + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + NetworkNeighborhood + { + NameSpace + { + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/newmenu.rgs b/reactos/dll/win32/shell32_new/res/rgs/newmenu.rgs new file mode 100644 index 00000000000..b3a6cab8f49 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/newmenu.rgs @@ -0,0 +1,14 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {D969A300-E7FF-11d0-A93B-00A0C90F2719} = s 'ReactOS New Object Service' + { + val flags = d '0' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/printers.rgs b/reactos/dll/win32/shell32_new/res/rgs/printers.rgs new file mode 100644 index 00000000000..9277ae3b128 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/printers.rgs @@ -0,0 +1,53 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {2227A280-3AEA-1069-A2DE-08002B30309D} = s 'Printers and Faxes' + { + val '{305CA226-D286-468e-B848-2B2E8E697B74} 2' = d '2' + val 'InfoTip' = e '@%%SystemRoot%%\system32\SHELL32.dll,-12696' + val 'IntroText' = e '@%%SystemRoot%%\system32\SHELL32.dll,-31757' + val 'LocalizedString' = e '@%%SystemRoot%%\system32\SHELL32.dll,-9319' + DefaultIcon = e '%%SystemRoot%%\System32\shell32.dll,-138' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'ShellFolder' + { + val 'Attributes' = d '&H20000004' + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + NoRemove Desktop + { + NoRemove NameSpace + { + Printers = s '{2227A280-3AEA-1069-A2DE-08002B30309D}' + { + val 'IconIndex' = d '&H0000012C' + val 'Info' = s 'Adds, removes and changes settings for printers.' + val 'Module' = e '%%SystemRoot%%\system32\main.cpl' + val 'Name' = s 'Printers and Faxes' + } + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/recyclebin.rgs b/reactos/dll/win32/shell32_new/res/rgs/recyclebin.rgs new file mode 100644 index 00000000000..b84d0db826c --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/recyclebin.rgs @@ -0,0 +1,59 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {645FF040-5081-101B-9F08-00AA002F954E} + { + val 'InfoTip' = e '@%%SystemRoot%%\system32\SHELL32.dll,-22915' + val 'IntroText' = e '@%%SystemRoot%%\system32\SHELL32.dll,-31748' + val 'LocalizedString' = e '@%%SystemRoot%%\system32\SHELL32.dll,-8964' + DefaultIcon = e '%%SystemRoot%%\System32\shell32.dll,31' + { + val Empty = e '%%SystemRoot%%\System32\shell32.dll,31' + val Full = e '%%SystemRoot%%\System32\shell32.dll,32' + } + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + 'ShellFolder' + { + val 'Attributes' = b '40010020' + val 'CallForAttributes' = d '&H00000040' + } + 'shellex' + { + 'find' = e '@%%SystemRoot%%\system32\SHELL32.dll,-29188' + { + 'ContextMenuHandlers' + 'PropertySheetHandlers' + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + NoRemove Desktop + { + NoRemove NameSpace + { + '{645FF040-5081-101B-9F08-00AA002F954E}' = s 'Recycle Bin' + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/shelldesktop.rgs b/reactos/dll/win32/shell32_new/res/rgs/shelldesktop.rgs new file mode 100644 index 00000000000..476fecab80f --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/shelldesktop.rgs @@ -0,0 +1,45 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {00021400-0000-0000-C000-000000000046} = s 'Desktop' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + shellex + { + ExtShellFolderViews + { + {5984FFE0-28D4-11CF-AE66-08002B2E1262} + val PersistMoniker = s 'file://%%userappdata%%\Microsoft\Internet Explorer\Desktop.htt' + } + } + } + } +} +HKLM +{ + NoRemove Software + { + NoRemove Microsoft + { + NoRemove Windows + { + NoRemove CurrentVersion + { + NoRemove Explorer + { + Desktop + { + NameSpace + { + } + } + } + } + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/shellfsfolder.rgs b/reactos/dll/win32/shell32_new/res/rgs/shellfsfolder.rgs new file mode 100644 index 00000000000..00d9daee97b --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/shellfsfolder.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {F3364BA0-65B9-11CE-A9BA-00AA004AE837} = s 'Shell File System Folder' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/shelllink.rgs b/reactos/dll/win32/shell32_new/res/rgs/shelllink.rgs new file mode 100644 index 00000000000..a5972a70f9f --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/shelllink.rgs @@ -0,0 +1,23 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {00021401-0000-0000-C000-000000000046} = s 'Shortcut' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + PersistentAddinsRegistered + { + {89BCB740-6119-101A-BCB7-00DD010655AF} = s '{00021401-0000-0000-C000-000000000046}' + } + PersistentHandler = s '{00021401-0000-0000-C000-000000000046}' + ProgID = s 'lnkfile' + shellex + { + MayChangeDefaultMenu = s '' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/res/rgs/startmenu.rgs b/reactos/dll/win32/shell32_new/res/rgs/startmenu.rgs new file mode 100644 index 00000000000..a91a3464ec2 --- /dev/null +++ b/reactos/dll/win32/shell32_new/res/rgs/startmenu.rgs @@ -0,0 +1,13 @@ +HKCR +{ + NoRemove CLSID + { + ForceRemove {4622AD11-FF23-11d0-8D34-00A0C90F2719} = s 'Start Menu' + { + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/reactos/dll/win32/shell32_new/rgs_res.rc b/reactos/dll/win32/shell32_new/rgs_res.rc new file mode 100644 index 00000000000..6a37542b463 --- /dev/null +++ b/reactos/dll/win32/shell32_new/rgs_res.rc @@ -0,0 +1,22 @@ +///////////////////////////////////////////////////////////////////////////// +// +// REGISTRY +// +IDR_ADMINFOLDERSHORTCUT REGISTRY "res\\rgs\\adminfoldershortcut.rgs" +IDR_AUTOCOMPLETE REGISTRY "res\\rgs\\autocomplete.rgs" +IDR_CONTROLPANEL REGISTRY "res\\rgs\\controlpanel.rgs" +IDR_DRAGDROPHELPER REGISTRY "res\\rgs\\dragdrophelper.rgs" +IDR_FOLDEROPTIONS REGISTRY "res\\rgs\\folderoptions.rgs" +IDR_FOLDERSHORTCUT REGISTRY "res\\rgs\\foldershortcut.rgs" +IDR_FONTSFOLDERSHORTCUT REGISTRY "res\\rgs\\fontsfoldershortcut.rgs" +IDR_MENUBANDSITE REGISTRY "res\\rgs\\menubandsite.rgs" +IDR_MYCOMPUTER REGISTRY "res\\rgs\\mycomputer.rgs" +IDR_MYDOCUMENTS REGISTRY "res\\rgs\\mydocuments.rgs" +IDR_NETWORKPLACES REGISTRY "res\\rgs\\networkplaces.rgs" +IDR_NEWMENU REGISTRY "res\\rgs\\newmenu.rgs" +IDR_PRINTERS REGISTRY "res\\rgs\\printers.rgs" +IDR_RECYCLEBIN REGISTRY "res\\rgs\\recyclebin.rgs" +IDR_SHELLDESKTOP REGISTRY "res\\rgs\\shelldesktop.rgs" +IDR_SHELLFSFOLDER REGISTRY "res\\rgs\\shellfsfolder.rgs" +IDR_SHELLLINK REGISTRY "res\\rgs\\shelllink.rgs" +IDR_STARTMENU REGISTRY "res\\rgs\\startmenu.rgs" diff --git a/reactos/dll/win32/shell32_new/ros-systray.cpp b/reactos/dll/win32/shell32_new/ros-systray.cpp new file mode 100644 index 00000000000..f560b498e03 --- /dev/null +++ b/reactos/dll/win32/shell32_new/ros-systray.cpp @@ -0,0 +1,73 @@ +/* + * Copyright 2004 Martin Fuchs + * + * Pass on icon notification messages to the systray implementation + * in the currently running shell. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + + /* copy data structure for tray notifications */ +typedef struct TrayNotifyCDS_Dummy { + DWORD cookie; + DWORD notify_code; + DWORD nicon_data[1]; // placeholder for NOTIFYICONDATA structure +} TrayNotifyCDS_Dummy; + + /* The only difference between Shell_NotifyIconA and Shell_NotifyIconW is the call to SendMessageA/W. */ +static BOOL SHELL_NotifyIcon(DWORD dwMessage, void* pnid, HWND nid_hwnd, int nid_size, BOOL unicode) +{ + HWND hwnd; + COPYDATASTRUCT data; + + BOOL ret = FALSE; + int len = sizeof(TrayNotifyCDS_Dummy)-sizeof(DWORD)+nid_size; + + TrayNotifyCDS_Dummy* pnotify_data = (TrayNotifyCDS_Dummy*) alloca(len); + + pnotify_data->cookie = 1; + pnotify_data->notify_code = dwMessage; + memcpy(&pnotify_data->nicon_data, pnid, nid_size); + + data.dwData = 1; + data.cbData = len; + data.lpData = pnotify_data; + + for(hwnd=0; (hwnd=FindWindowExW(0, hwnd, L"Shell_TrayWnd", NULL)); ) + if ((unicode?SendMessageW:SendMessageA)(hwnd, WM_COPYDATA, (WPARAM)nid_hwnd, (LPARAM)&data)) + ret = TRUE; + + return ret; +} + + +/************************************************************************* + * Shell_NotifyIcon [SHELL32.296] + * Shell_NotifyIconA [SHELL32.297] + */ +BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA pnid) +{ + return SHELL_NotifyIcon(dwMessage, pnid, pnid->hWnd, pnid->cbSize, FALSE); +} + +/************************************************************************* + * Shell_NotifyIconW [SHELL32.298] + */ +BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW pnid) +{ + return SHELL_NotifyIcon(dwMessage, pnid, pnid->hWnd, pnid->cbSize, TRUE); +} diff --git a/reactos/dll/win32/shell32_new/she_ocmenu.cpp b/reactos/dll/win32/shell32_new/she_ocmenu.cpp new file mode 100644 index 00000000000..2cf5ec99def --- /dev/null +++ b/reactos/dll/win32/shell32_new/she_ocmenu.cpp @@ -0,0 +1,1139 @@ +/* + * Open With Context Menu extension + * + * Copyright 2007 Johannes Anderwald + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "she_ocmenu.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/// +/// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system] +/// "NoInternetOpenWith"=dword:00000001 +/// + +// TODO +// implement duplicate checks in list box +// implement duplicate checks for MRU! +// implement owner drawn menu + +typedef struct +{ + BOOL bMenu; + HMENU hMenu; + HWND hDlgCtrl; + UINT Count; + BOOL NoOpen; + UINT idCmdFirst; +}OPEN_WITH_CONTEXT, *POPEN_WITH_CONTEXT; + +#define MANUFACTURER_NAME_SIZE 100 + +typedef struct +{ + HICON hIcon; + WCHAR szAppName[MAX_PATH]; + WCHAR szManufacturer[MANUFACTURER_NAME_SIZE]; +}OPEN_ITEM_CONTEXT, *POPEN_ITEM_CONTEXT; + + +typedef struct _LANGANDCODEPAGE_ + { + WORD lang; + WORD code; +} LANGANDCODEPAGE, *LPLANGANDCODEPAGE; + +HANDLE OpenMRUList(HKEY hKey); + +void LoadItemFromHKCU(POPEN_WITH_CONTEXT pContext, const WCHAR * szExt); +void LoadItemFromHKCR(POPEN_WITH_CONTEXT pContext, const WCHAR * szExt); +void InsertOpenWithItem(POPEN_WITH_CONTEXT pContext, WCHAR * szAppName); + +COpenWithMenu::COpenWithMenu() +{ +} + +COpenWithMenu::~COpenWithMenu() +{ + TRACE(" destroying IContextMenu(%p)\n", this); +} + +VOID +AddItem(HMENU hMenu, UINT idCmdFirst) +{ + MENUITEMINFOW mii; + WCHAR szBuffer[MAX_PATH]; + static const WCHAR szChoose[] = { 'C','h','o','o','s','e',' ','P','r','o','g','r','a','m','.','.','.',0 }; + + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_TYPE | MIIM_ID; + mii.fType = MFT_SEPARATOR; + mii.wID = -1; + InsertMenuItemW(hMenu, -1, TRUE, &mii); + + if (!LoadStringW(shell32_hInstance, IDS_OPEN_WITH_CHOOSE, szBuffer, sizeof(szBuffer) / sizeof(WCHAR))) + wcscpy(szBuffer, szChoose); + + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + + mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE; + mii.fType = MFT_STRING; + mii.fState = MFS_ENABLED; + mii.wID = idCmdFirst; + mii.dwTypeData = (LPWSTR)szBuffer; + mii.cch = wcslen(szBuffer); + + InsertMenuItemW(hMenu, -1, TRUE, &mii); +} + +static +void +LoadOWItems(POPEN_WITH_CONTEXT pContext, LPCWSTR szName) +{ + const WCHAR * szExt; + WCHAR szPath[100]; + DWORD dwPath; + + szExt = wcsrchr(szName, '.'); + if (!szExt) + { + /* FIXME + * show default list of available programs + */ + return; + } + + /* load programs directly associated from HKCU */ + LoadItemFromHKCU(pContext, szExt); + + /* load programs associated from HKCR\Extension */ + LoadItemFromHKCR(pContext, szExt); + + /* load programs referenced from HKCR\ProgId */ + dwPath = sizeof(szPath); + szPath[0] = 0; + if (RegGetValueW(HKEY_CLASSES_ROOT, szExt, NULL, RRF_RT_REG_SZ, NULL, szPath, &dwPath) == ERROR_SUCCESS) + { + szPath[(sizeof(szPath)/sizeof(WCHAR))-1] = L'\0'; + LoadItemFromHKCR(pContext, szPath); + } +} + + + +HRESULT WINAPI COpenWithMenu::QueryContextMenu( + HMENU hmenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + MENUITEMINFOW mii; + WCHAR szBuffer[100] = {0}; + INT pos; + HMENU hSubMenu = NULL; + OPEN_WITH_CONTEXT Context; + + if (LoadStringW(shell32_hInstance, IDS_OPEN_WITH, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)) < 0) + { + TRACE("failed to load string\n"); + return E_FAIL; + } + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + + hSubMenu = CreatePopupMenu(); + + /* set up context */ + ZeroMemory(&Context, sizeof(OPEN_WITH_CONTEXT)); + Context.bMenu = TRUE; + Context.Count = 0; + Context.hMenu = hSubMenu; + Context.idCmdFirst = idCmdFirst; + /* load items */ + LoadOWItems(&Context, szPath); + if (!Context.Count) + { + DestroyMenu(hSubMenu); + hSubMenu = NULL; + wId = 0; + count = 0; + } + else + { + AddItem(hSubMenu, Context.idCmdFirst++); + count = Context.idCmdFirst - idCmdFirst; + /* verb start at index zero */ + wId = count -1; + hSubMenu = hSubMenu; + } + + pos = GetMenuDefaultItem(hmenu, TRUE, 0) + 1; + + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE; + if (hSubMenu) + { + mii.fMask |= MIIM_SUBMENU; + mii.hSubMenu = hSubMenu; + } + mii.dwTypeData = (LPWSTR) szBuffer; + mii.fState = MFS_ENABLED; + if (!pos) + { + mii.fState |= MFS_DEFAULT; + } + + mii.wID = Context.idCmdFirst; + mii.fType = MFT_STRING; + if (InsertMenuItemW( hmenu, pos, TRUE, &mii)) + Context.Count++; + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Context.Count); +} + +void +FreeListItems(HWND hwndDlg) +{ + HWND hList; + LRESULT iIndex, iCount; + POPEN_ITEM_CONTEXT pContext; + + hList = GetDlgItem(hwndDlg, 14002); + iCount = SendMessageW(hList, LB_GETCOUNT, 0, 0); + if (iCount == LB_ERR) + return; + + for (iIndex = 0; iIndex < iCount; iIndex++) + { + pContext = (POPEN_ITEM_CONTEXT)SendMessageW(hList, LB_GETITEMDATA, iIndex, 0); + if (pContext) + { + DestroyIcon(pContext->hIcon); + SendMessageW(hList, LB_SETITEMDATA, iIndex, (LPARAM)0); + HeapFree(GetProcessHeap(), 0, pContext); + } + } +} + +BOOL HideApplicationFromList(WCHAR * pFileName) +{ + WCHAR szBuffer[100] = {'A','p','p','l','i','c','a','t','i','o','n','s','\\',0}; + DWORD dwSize = 0; + LONG result; + + if (wcslen(pFileName) > (sizeof(szBuffer)/sizeof(WCHAR)) - 14) + { + ERR("insufficient buffer\n"); + return FALSE; + } + wcscpy(&szBuffer[13], pFileName); + + result = RegGetValueW(HKEY_CLASSES_ROOT, szBuffer, L"NoOpenWith", RRF_RT_REG_SZ, NULL, NULL, &dwSize); + + TRACE("result %d szBuffer %s\n", result, debugstr_w(szBuffer)); + + if (result == ERROR_SUCCESS) + return TRUE; + else + return FALSE; +} + +VOID +WriteStaticShellExtensionKey(HKEY hRootKey, const WCHAR * pVerb, WCHAR *pFullPath) +{ + HKEY hShell; + LONG result; + WCHAR szBuffer[MAX_PATH+10] = {'s','h','e','l','l','\\', 0 }; + + if (wcslen(pVerb) > (sizeof(szBuffer)/sizeof(WCHAR)) - 15 || + wcslen(pFullPath) > (sizeof(szBuffer)/sizeof(WCHAR)) - 4) + { + ERR("insufficient buffer\n"); + return; + } + + /* construct verb reg path */ + wcscpy(&szBuffer[6], pVerb); + wcscat(szBuffer, L"\\command"); + + /* create verb reg key */ + if (RegCreateKeyExW(hRootKey, szBuffer, 0, NULL, 0, KEY_WRITE, NULL, &hShell, NULL) != ERROR_SUCCESS) + return; + + /* build command buffer */ + wcscpy(szBuffer, pFullPath); + wcscat(szBuffer, L" %1"); + + result = RegSetValueExW(hShell, NULL, 0, REG_SZ, (const BYTE*)szBuffer, (wcslen(szBuffer)+1)* sizeof(WCHAR)); + RegCloseKey(hShell); +} + +VOID +StoreNewSettings(LPCWSTR szFileName, WCHAR *szAppName) +{ + WCHAR szBuffer[100] = { L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\"}; + const WCHAR * pFileExt; + HKEY hKey; + LONG result; + HANDLE hList; + + /* get file extension */ + pFileExt = wcsrchr(szFileName, L'.'); + if (wcslen(pFileExt) > (sizeof(szBuffer)/sizeof(WCHAR)) - 60) + { + ERR("insufficient buffer\n"); + return; + } + wcscpy(&szBuffer[60], pFileExt); + /* open base key for this file extension */ + if (RegCreateKeyExW(HKEY_CURRENT_USER, szBuffer, 0, NULL, 0, KEY_WRITE | KEY_READ, NULL, &hKey, NULL) != ERROR_SUCCESS) + return; + + /* open mru list */ + hList = OpenMRUList(hKey); + + if (!hList) + { + RegCloseKey(hKey); + return; + } + + /* insert the entry */ + result = AddMRUStringW(hList, szAppName); + + /* close mru list */ + FreeMRUList(hList); + /* create mru list key */ + RegCloseKey(hKey); +} + +VOID +SetProgrammAsDefaultHandler(LPCWSTR szFileName, WCHAR * szAppName) +{ + HKEY hKey; + HKEY hAppKey; + DWORD dwDisposition; + WCHAR szBuffer[100]; + DWORD dwSize; + BOOL result; + const WCHAR * pFileExt; + WCHAR * pFileName; + + /* extract file extension */ + pFileExt = wcsrchr(szFileName, L'.'); + if (!pFileExt) + return; + + /* create file extension key */ + if (RegCreateKeyExW(HKEY_CLASSES_ROOT, pFileExt, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) + return; + + if (dwDisposition & REG_CREATED_NEW_KEY) + { + /* a new entry was created create the prog key id */ + wcscpy(szBuffer, &pFileExt[1]); + wcscat(szBuffer, L"_auto_file"); + if (RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE*)szBuffer, (wcslen(szBuffer)+1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return; + } + } + else + { + /* entry already exists fetch prog key id */ + dwSize = sizeof(szBuffer); + if (RegGetValueW(hKey, NULL, NULL, RRF_RT_REG_SZ, NULL, szBuffer, &dwSize) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return; + } + } + /* close file extension key */ + RegCloseKey(hKey); + + /* create prog id key */ + if (RegCreateKeyExW(HKEY_CLASSES_ROOT, szBuffer, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) + return; + + + /* check if there already verbs existing for that app */ + pFileName = wcsrchr(szAppName, L'\\'); + wcscpy(szBuffer, L"Classes\\Applications\\"); + wcscat(szBuffer, pFileName); + wcscat(szBuffer, L"\\shell"); + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szBuffer, 0, KEY_READ, &hAppKey) == ERROR_SUCCESS) + { + /* copy static verbs from Classes\Applications key */ + HKEY hTemp; + if (RegCreateKeyExW(hKey, L"shell", 0, NULL, 0, KEY_READ | KEY_WRITE, NULL, &hTemp, &dwDisposition) == ERROR_SUCCESS) + { + result = RegCopyTreeW(hAppKey, NULL, hTemp); + RegCloseKey(hTemp); + if (result == ERROR_SUCCESS) + { + /* copied all subkeys, we are done */ + RegCloseKey(hKey); + RegCloseKey(hAppKey); + return; + } + } + RegCloseKey(hAppKey); + } + /* write standard static shell extension */ + WriteStaticShellExtensionKey(hKey, L"open", szAppName); + RegCloseKey(hKey); +} + +void +BrowseForApplication(HWND hwndDlg) +{ + WCHAR szBuffer[30] = {0}; + WCHAR szFilter[30] = {0}; + WCHAR szPath[MAX_PATH]; + OPENFILENAMEW ofn; + OPEN_WITH_CONTEXT Context; + INT count; + + /* load resource open with */ + if (LoadStringW(shell32_hInstance, IDS_OPEN_WITH, szBuffer, sizeof(szBuffer) / sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + ofn.lpstrTitle = szBuffer; + ofn.nMaxFileTitle = wcslen(szBuffer); + } + + ZeroMemory(&ofn, sizeof(OPENFILENAMEW)); + ofn.lStructSize = sizeof(OPENFILENAMEW); + ofn.hInstance = shell32_hInstance; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; + ofn.nMaxFile = (sizeof(szPath) / sizeof(WCHAR)); + ofn.lpstrFile = szPath; + + /* load the filter resource string */ + if (LoadStringW(shell32_hInstance, IDS_OPEN_WITH_FILTER, szFilter, sizeof(szFilter) / sizeof(WCHAR))) + { + szFilter[(sizeof(szFilter)/sizeof(WCHAR))-1] = 0; + ofn.lpstrFilter = szFilter; + } + ZeroMemory(szPath, sizeof(szPath)); + + /* call openfilename */ + if (!GetOpenFileNameW(&ofn)) + return; + + /* setup context for insert proc */ + ZeroMemory(&Context, sizeof(OPEN_WITH_CONTEXT)); + Context.hDlgCtrl = GetDlgItem(hwndDlg, 14002); + count = SendMessage(Context.hDlgCtrl, LB_GETCOUNT, 0, 0); + InsertOpenWithItem(&Context, szPath); + /* select new item */ + SendMessage(Context.hDlgCtrl, LB_SETCURSEL, count, 0); +} + +POPEN_ITEM_CONTEXT +GetCurrentOpenItemContext(HWND hwndDlg) +{ + LRESULT result; + + /* get current item */ + result = SendDlgItemMessage(hwndDlg, 14002, LB_GETCURSEL, 0, 0); + if(result == LB_ERR) + return NULL; + + /* get item context */ + result = SendDlgItemMessage(hwndDlg, 14002, LB_GETITEMDATA, result, 0); + if (result == LB_ERR) + return NULL; + + return (POPEN_ITEM_CONTEXT)result; +} + +void +ExecuteOpenItem(POPEN_ITEM_CONTEXT pItemContext, LPCWSTR FileName) +{ + STARTUPINFOW si; + PROCESS_INFORMATION pi; + WCHAR szPath[(MAX_PATH * 2)]; + + /* setup path with argument */ + ZeroMemory(&si, sizeof(STARTUPINFOW)); + si.cb = sizeof(STARTUPINFOW); + wcscpy(szPath, pItemContext->szAppName); + wcscat(szPath, L" "); + wcscat(szPath, FileName); + + ERR("path %s\n", debugstr_w(szPath)); + + if (CreateProcessW(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + { + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + SHAddToRecentDocs(SHARD_PATHW, FileName); + } +} + + +static INT_PTR CALLBACK OpenWithProgrammDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LPMEASUREITEMSTRUCT lpmis; + LPDRAWITEMSTRUCT lpdis; + INT index; + WCHAR szBuffer[MAX_PATH + 30] = { 0 }; + OPENASINFO *poainfo; + TEXTMETRIC mt; + COLORREF preColor, preBkColor; + POPEN_ITEM_CONTEXT pItemContext; + LONG YOffset; + OPEN_WITH_CONTEXT Context; + + poainfo = (OPENASINFO*) GetWindowLongPtr(hwndDlg, DWLP_USER); + + switch(uMsg) + { + case WM_INITDIALOG: + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG)lParam); + poainfo = (OPENASINFO*)lParam; + if (!(poainfo->oaifInFlags & OAIF_ALLOW_REGISTRATION)) + EnableWindow(GetDlgItem(hwndDlg, 14003), FALSE); + if (poainfo->oaifInFlags & OAIF_FORCE_REGISTRATION) + SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_CHECKED, 0); + if (poainfo->oaifInFlags & OAIF_HIDE_REGISTRATION) + ShowWindow(GetDlgItem(hwndDlg, 14003), SW_HIDE); + if (poainfo->pcszFile) + { + szBuffer[0] = L'\0'; + SendDlgItemMessageW(hwndDlg, 14001, WM_GETTEXT, sizeof(szBuffer), (LPARAM)szBuffer); + index = wcslen(szBuffer); + if (index + wcslen(poainfo->pcszFile) + 1 < sizeof(szBuffer)/sizeof(szBuffer[0])) + wcscat(szBuffer, poainfo->pcszFile); + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + SendDlgItemMessageW(hwndDlg, 14001, WM_SETTEXT, 0, (LPARAM)szBuffer); + ZeroMemory(&Context, sizeof(OPEN_WITH_CONTEXT)); + Context.hDlgCtrl = GetDlgItem(hwndDlg, 14002); + LoadOWItems(&Context, poainfo->pcszFile); + SendMessage(Context.hDlgCtrl, LB_SETCURSEL, 0, 0); + } + return TRUE; + case WM_MEASUREITEM: + lpmis = (LPMEASUREITEMSTRUCT) lParam; + lpmis->itemHeight = 64; + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case 14004: /* browse */ + BrowseForApplication(hwndDlg); + return TRUE; + case 14002: + if (HIWORD(wParam) == LBN_SELCHANGE) + InvalidateRect((HWND)lParam, NULL, TRUE); // FIXME USE UPDATE RECT + break; + case 14005: /* ok */ + pItemContext = GetCurrentOpenItemContext(hwndDlg); + if (pItemContext) + { + /* store settings in HKCU path */ + StoreNewSettings(poainfo->pcszFile, pItemContext->szAppName); + + if (SendDlgItemMessage(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + { + /* set programm as default handler */ + SetProgrammAsDefaultHandler(poainfo->pcszFile, pItemContext->szAppName); + } + + if (poainfo->oaifInFlags & OAIF_EXEC) + ExecuteOpenItem(pItemContext, poainfo->pcszFile); + } + FreeListItems(hwndDlg); + EndDialog(hwndDlg, 1); + return TRUE; + case 14006: /* cancel */ + FreeListItems(hwndDlg); + EndDialog(hwndDlg, 0); + return TRUE; + default: + break; + } + break; + case WM_DRAWITEM: + lpdis = (LPDRAWITEMSTRUCT) lParam; + if ((int)lpdis->itemID == -1) + break; + + switch (lpdis->itemAction) + { + case ODA_SELECT: + case ODA_DRAWENTIRE: + index = SendMessageW(lpdis->hwndItem, LB_GETCURSEL, 0, 0); + pItemContext =(POPEN_ITEM_CONTEXT)SendMessage(lpdis->hwndItem, LB_GETITEMDATA, lpdis->itemID, (LPARAM) 0); + + if ((int)lpdis->itemID == index) + { + /* paint focused item with standard background colour */ + HBRUSH hBrush; + hBrush = CreateSolidBrush(RGB(46, 104, 160)); + FillRect(lpdis->hDC, &lpdis->rcItem, hBrush); + DeleteObject(hBrush); + preBkColor = SetBkColor(lpdis->hDC, RGB(46, 104, 160)); + } + else + { + /* paint non focused item with white background */ + HBRUSH hBrush; + hBrush = CreateSolidBrush(RGB(255, 255, 255)); + FillRect(lpdis->hDC, &lpdis->rcItem, hBrush); + DeleteObject(hBrush); + preBkColor = SetBkColor(lpdis->hDC, RGB(255, 255, 255)); + } + + SendMessageW(lpdis->hwndItem, LB_GETTEXT, lpdis->itemID, (LPARAM) szBuffer); + /* paint the icon */ + DrawIconEx(lpdis->hDC, lpdis->rcItem.left,lpdis->rcItem.top, pItemContext->hIcon, 0, 0, 0, NULL, DI_NORMAL); + /* get text size */ + GetTextMetrics(lpdis->hDC, &mt); + /* paint app name */ + YOffset = lpdis->rcItem.top + mt.tmHeight/2; + TextOutW(lpdis->hDC, 45, YOffset, szBuffer, wcslen(szBuffer)); + /* paint manufacturer description */ + YOffset += mt.tmHeight + 2; + preColor = SetTextColor(lpdis->hDC, RGB(192, 192, 192)); + if (pItemContext->szManufacturer[0]) + TextOutW(lpdis->hDC, 45, YOffset, pItemContext->szManufacturer, wcslen(pItemContext->szManufacturer)); + else + TextOutW(lpdis->hDC, 45, YOffset, pItemContext->szAppName, wcslen(pItemContext->szAppName)); + SetTextColor(lpdis->hDC, preColor); + SetBkColor(lpdis->hDC, preBkColor); + break; + } + break; + case WM_CLOSE: + FreeListItems(hwndDlg); + EndDialog(hwndDlg, 0); + return TRUE; + default: + break; + } + return FALSE; +} + +void +FreeMenuItemContext(HMENU hMenu) +{ + INT Count; + INT Index; + MENUITEMINFOW mii; + + /* get item count */ + Count = GetMenuItemCount(hMenu); + if (Count == -1) + return; + + /* setup menuitem info */ + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_DATA | MIIM_FTYPE; + + for(Index = 0; Index < Count; Index++) + { + if (GetMenuItemInfoW(hMenu, Index, TRUE, &mii)) + { + if ((mii.fType & MFT_SEPARATOR) || mii.dwItemData == 0) + continue; + HeapFree(GetProcessHeap(), 0, (LPVOID)mii.dwItemData); + } + } +} + + +HRESULT WINAPI +COpenWithMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici ) +{ + MENUITEMINFOW mii; + + ERR("This %p wId %x count %u verb %x\n", this, wId, count, LOWORD(lpici->lpVerb)); + + if (wId < LOWORD(lpici->lpVerb)) + return E_FAIL; + + if (wId == LOWORD(lpici->lpVerb)) + { + OPENASINFO info; + + info.pcszFile = szPath; + info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_REGISTER_EXT | OAIF_EXEC; + info.pcszClass = NULL; + FreeMenuItemContext(hSubMenu); + return SHOpenWithDialog(lpici->hwnd, &info); + } + + /* retrieve menu item info */ + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_DATA | MIIM_FTYPE; + + if (GetMenuItemInfoW(hSubMenu, LOWORD(lpici->lpVerb), TRUE, &mii)) + { + POPEN_ITEM_CONTEXT pItemContext = (POPEN_ITEM_CONTEXT)mii.dwItemData; + if (pItemContext) + { + /* launch item with specified app */ + ExecuteOpenItem(pItemContext, szPath); + } + } + /* free menu item context */ + FreeMenuItemContext(hSubMenu); + return S_OK; +} + +HRESULT WINAPI +COpenWithMenu::GetCommandString(UINT_PTR idCmd, UINT uType, + UINT* pwReserved, LPSTR pszName, UINT cchMax ) +{ + FIXME("%p %lu %u %p %p %u\n", this, + idCmd, uType, pwReserved, pszName, cchMax ); + + return E_NOTIMPL; +} + +HRESULT WINAPI COpenWithMenu::HandleMenuMsg( + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + TRACE("This %p uMsg %x\n",this, uMsg); + + return E_NOTIMPL; +} + +VOID +GetManufacturer(WCHAR * szAppName, POPEN_ITEM_CONTEXT pContext) +{ + UINT VerSize; + DWORD DummyHandle; + LPVOID pBuf; + WORD lang = 0; + WORD code = 0; + LPLANGANDCODEPAGE lplangcode; + WCHAR szBuffer[100]; + WCHAR * pResult; + BOOL bResult; + + static const WCHAR wFormat[] = L"\\StringFileInfo\\%04x%04x\\CompanyName"; + static const WCHAR wTranslation[] = L"VarFileInfo\\Translation"; + + /* query version info size */ + VerSize = GetFileVersionInfoSizeW(szAppName, &DummyHandle); + if (!VerSize) + { + pContext->szManufacturer[0] = 0; + return; + } + + /* allocate buffer */ + pBuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, VerSize); + if (!pBuf) + { + pContext->szManufacturer[0] = 0; + return; + } + + /* query version info */ + if(!GetFileVersionInfoW(szAppName, 0, VerSize, pBuf)) + { + pContext->szManufacturer[0] = 0; + HeapFree(GetProcessHeap(), 0, pBuf); + return; + } + + /* query lang code */ + if(VerQueryValueW(pBuf, const_cast(wTranslation), (LPVOID *)&lplangcode, &VerSize)) + { + /* FIXME find language from current locale / if not available, + * default to english + * for now default to first available language + */ + lang = lplangcode->lang; + code = lplangcode->code; + } + /* set up format */ + swprintf(szBuffer, wFormat, lang, code); + /* query manufacturer */ + pResult = NULL; + bResult = VerQueryValueW(pBuf, szBuffer, (LPVOID *)&pResult, &VerSize); + + if (VerSize && bResult && pResult) + wcscpy(pContext->szManufacturer, pResult); + else + pContext->szManufacturer[0] = 0; + HeapFree(GetProcessHeap(), 0, pBuf); +} + + + + +void +InsertOpenWithItem(POPEN_WITH_CONTEXT pContext, WCHAR * szAppName) +{ + MENUITEMINFOW mii; + POPEN_ITEM_CONTEXT pItemContext; + LRESULT index; + WCHAR * Offset; + WCHAR Buffer[_MAX_FNAME]; + + pItemContext = (OPEN_ITEM_CONTEXT *)HeapAlloc(GetProcessHeap(), 0, sizeof(OPEN_ITEM_CONTEXT)); + if (!pItemContext) + return; + + /* store app path */ + wcscpy(pItemContext->szAppName, szAppName); + /* null terminate it */ + pItemContext->szAppName[MAX_PATH-1] = 0; + /* extract path name */ + _wsplitpath(szAppName, NULL, NULL, Buffer, NULL); + Offset = wcsrchr(Buffer, '.'); + if (Offset) + Offset[0] = L'\0'; + Buffer[0] = towupper(Buffer[0]); + + if (pContext->bMenu) + { + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA; + mii.fType = MFT_STRING; //MFT_OWNERDRAW; + mii.fState = MFS_ENABLED; + mii.wID = pContext->idCmdFirst; + mii.dwTypeData = Buffer; + mii.cch = wcslen(Buffer); + mii.dwItemData = (ULONG_PTR)pItemContext; + wcscpy(pItemContext->szManufacturer, Buffer); + if (InsertMenuItemW(pContext->hMenu, -1, TRUE, &mii)) + { + pContext->idCmdFirst++; + pContext->Count++; + } + } + else + { + /* get default icon */ + pItemContext->hIcon = ExtractIconW(shell32_hInstance, szAppName, 0); + /* get manufacturer */ + GetManufacturer(pItemContext->szAppName, pItemContext); + index = SendMessageW(pContext->hDlgCtrl, LB_ADDSTRING, 0, (LPARAM)Buffer); + if (index != LB_ERR) + SendMessageW(pContext->hDlgCtrl, LB_SETITEMDATA, index, (LPARAM)pItemContext); + } +} + +void +AddItemFromProgIDList(POPEN_WITH_CONTEXT pContext, HKEY hKey) +{ + FIXME("implement me :)))\n"); +} + +HANDLE +OpenMRUList(HKEY hKey) +{ + CREATEMRULISTW info; + + /* initialize mru list info */ + info.cbSize = sizeof(info); + info.nMaxItems = 32; + info.dwFlags = MRU_STRING; + info.hKey = hKey; + info.lpszSubKey = L"OpenWithList"; + info.lpfnCompare = NULL; + + /* load list */ + return CreateMRUListW(&info); +} + +void +AddItemFromMRUList(POPEN_WITH_CONTEXT pContext, HKEY hKey) +{ + HANDLE hList; + int nItem, nCount, nResult; + WCHAR szBuffer[MAX_PATH]; + + /* open mru list */ + hList = OpenMRUList(hKey); + if (!hList) + return; + + /* get list count */ + nCount = EnumMRUListW(hList, -1, NULL, 0); + + for(nItem = 0; nItem < nCount; nItem++) + { + nResult = EnumMRUListW(hList, nItem, szBuffer, MAX_PATH); + if (nResult <= 0) + continue; + /* make sure its zero terminated */ + szBuffer[min(MAX_PATH-1, nResult)] = '\0'; + /* insert item */ + if (!HideApplicationFromList(szBuffer)) + InsertOpenWithItem(pContext, szBuffer); + } + + /* free the mru list */ + FreeMRUList(hList); +} + + + +void +LoadItemFromHKCR(POPEN_WITH_CONTEXT pContext, const WCHAR * szExt) +{ + HKEY hKey; + HKEY hSubKey; + WCHAR szBuffer[MAX_PATH+10]; + WCHAR szResult[100]; + DWORD dwSize; + + static const WCHAR szOpenWithList[] = L"OpenWithList"; + static const WCHAR szOpenWithProgIds[] = L"OpenWithProgIDs"; + static const WCHAR szPerceivedType[] = L"PerceivedType"; + static const WCHAR szSysFileAssoc[] = L"SystemFileAssociations\\%s"; + + /* check if extension exists */ + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szExt, 0, KEY_READ | KEY_WRITE, &hKey) != ERROR_SUCCESS) + return; + + if (RegGetValueW(hKey, NULL, L"NoOpen", RRF_RT_REG_SZ, NULL, NULL, &dwSize) == ERROR_SUCCESS) + { + /* display warning dialog */ + pContext->NoOpen = TRUE; + } + + /* check if there is a directly available execute key */ + if (RegOpenKeyExW(hKey, L"shell\\open\\command", 0, KEY_READ, &hSubKey) == ERROR_SUCCESS) + { + DWORD dwBuffer = sizeof(szBuffer); + + if (RegGetValueW(hSubKey, NULL, NULL, RRF_RT_REG_SZ, NULL, (PVOID)szBuffer, &dwBuffer) == ERROR_SUCCESS) + { + WCHAR * Ext = wcsrchr(szBuffer, ' '); + if (Ext) + { + /* erase %1 or extra arguments */ + Ext[0] = 0; + } + if(!HideApplicationFromList(szBuffer)) + InsertOpenWithItem(pContext, szBuffer); + } + RegCloseKey(hSubKey); + } + + /* load items from HKCR\Ext\OpenWithList */ + if (RegOpenKeyExW(hKey, szOpenWithList, 0, KEY_READ | KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS) + { + AddItemFromMRUList(pContext, hKey); + RegCloseKey(hSubKey); + } + + /* load items from HKCR\Ext\OpenWithProgIDs */ + if (RegOpenKeyExW(hKey, szOpenWithProgIds, 0, KEY_READ | KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS) + { + AddItemFromProgIDList(pContext, hSubKey); + RegCloseKey(hSubKey); + } + + /* load items from SystemFileAssociations\Ext key */ + swprintf(szResult, szSysFileAssoc, szExt); + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szResult, 0, KEY_READ | KEY_WRITE, &hSubKey) == ERROR_SUCCESS) + { + AddItemFromMRUList(pContext, hSubKey); + RegCloseKey(hSubKey); + } + + /* load additional items from referenced PerceivedType*/ + dwSize = sizeof(szBuffer); + if (RegGetValueW(hKey, NULL, szPerceivedType, RRF_RT_REG_SZ, NULL, szBuffer, &dwSize) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return; + } + RegCloseKey(hKey); + + /* terminate it explictely */ + szBuffer[29] = 0; + swprintf(szResult, szSysFileAssoc, szBuffer); + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szResult, 0, KEY_READ | KEY_WRITE, &hSubKey) == ERROR_SUCCESS) + { + AddItemFromMRUList(pContext, hSubKey); + RegCloseKey(hSubKey); + } +} + +void +LoadItemFromHKCU(POPEN_WITH_CONTEXT pContext, const WCHAR * szExt) +{ + WCHAR szBuffer[MAX_PATH]; + HKEY hKey; + + static const WCHAR szOpenWithProgIDs[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\%s\\OpenWithProgIDs"; + static const WCHAR szOpenWithList[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\%s"; + + /* handle first progid lists */ + swprintf(szBuffer, szOpenWithProgIDs, szExt); + if (RegOpenKeyExW(HKEY_CURRENT_USER, szBuffer, 0, KEY_READ | KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) + { + AddItemFromProgIDList(pContext, hKey); + RegCloseKey(hKey); + } + + /* now handle mru lists */ + swprintf(szBuffer, szOpenWithList, szExt); + if (RegOpenKeyExW(HKEY_CURRENT_USER, szBuffer, 0, KEY_READ | KEY_WRITE, &hKey) == ERROR_SUCCESS) + { + AddItemFromMRUList(pContext, hKey); + RegCloseKey(hKey); + } +} + +HRESULT +COpenWithMenu::SHEOW_LoadOpenWithItems(IDataObject *pdtobj) +{ + STGMEDIUM medium; + FORMATETC fmt; + HRESULT hr; + LPIDA pida; + LPCITEMIDLIST pidl_folder; + LPCITEMIDLIST pidl_child; + LPCITEMIDLIST pidl; + DWORD dwPath; + LPWSTR szPtr; + static const WCHAR szShortCut[] = { '.','l','n','k', 0 }; + + fmt.cfFormat = RegisterClipboardFormatW(CFSTR_SHELLIDLIST); + fmt.ptd = NULL; + fmt.dwAspect = DVASPECT_CONTENT; + fmt.lindex = -1; + fmt.tymed = TYMED_HGLOBAL; + + hr = pdtobj->GetData(&fmt, &medium); + + if (FAILED(hr)) + { + ERR("IDataObject_GetData failed with 0x%x\n", hr); + return hr; + } + + /*assert(pida->cidl==1);*/ + pida = (LPIDA)GlobalLock(medium.hGlobal); + + pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]); + pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]); + + pidl = ILCombine(pidl_folder, pidl_child); + + GlobalUnlock(medium.hGlobal); + GlobalFree(medium.hGlobal); + + if (!pidl) + { + ERR("no mem\n"); + return E_OUTOFMEMORY; + } + if (_ILIsDesktop(pidl_child) || _ILIsMyDocuments(pidl_child) || _ILIsControlPanel(pidl_child) || _ILIsNetHood(pidl_child) || + _ILIsBitBucket(pidl_child) || _ILIsDrive(pidl_child) || _ILIsCPanelStruct(pidl_child) || _ILIsFolder(pidl_child) || _ILIsControlPanel(pidl_folder)) + { + TRACE("pidl is a folder\n"); + SHFree((void*)pidl); + return E_FAIL; + } + + if (!SHGetPathFromIDListW(pidl, szPath)) + { + SHFree((void*)pidl); + ERR("SHGetPathFromIDListW failed\n"); + return E_FAIL; + } + + SHFree((void*)pidl); + TRACE("szPath %s\n", debugstr_w(szPath)); + + if (GetBinaryTypeW(szPath, &dwPath)) + { + TRACE("path is a executable %x\n", dwPath); + return E_FAIL; + } + + szPtr = wcsrchr(szPath, '.'); + if (szPtr) + { + if (!_wcsicmp(szPtr, szShortCut)) + { + FIXME("pidl is a shortcut\n"); + return E_FAIL; + } + } + return S_OK; +} + +HRESULT WINAPI +COpenWithMenu::Initialize(LPCITEMIDLIST pidlFolder, + IDataObject *pdtobj, HKEY hkeyProgID ) +{ + TRACE("This %p\n", this); + + if (pdtobj == NULL) + return E_INVALIDARG; + return SHEOW_LoadOpenWithItems(pdtobj); +} + +HRESULT WINAPI SHOpenWithDialog( + HWND hwndParent, + const OPENASINFO *poainfo +) +{ + MSG msg; + BOOL bRet; + HWND hwnd; + + if (poainfo->pcszClass == NULL && poainfo->pcszFile == NULL) + return E_FAIL; + + + hwnd = CreateDialogParam(shell32_hInstance, MAKEINTRESOURCE(OPEN_WITH_PROGRAMM_DLG), hwndParent, OpenWithProgrammDlg, (LPARAM)poainfo); + if (hwnd == NULL) + { + ERR("Failed to create dialog\n"); + return E_FAIL; + } + ShowWindow(hwnd, SW_SHOWNORMAL); + + while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) + { + if (!IsWindow(hwnd) || !IsDialogMessage(hwnd, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/she_ocmenu.h b/reactos/dll/win32/shell32_new/she_ocmenu.h new file mode 100644 index 00000000000..f4cf23b3b7a --- /dev/null +++ b/reactos/dll/win32/shell32_new/she_ocmenu.h @@ -0,0 +1,65 @@ +/* + * Open With Context Menu extension + * + * Copyright 2007 Johannes Anderwald + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _SHE_OCMENU_H_ +#define _SHE_OCMENU_H_ + +class COpenWithMenu : + public CComCoClass, + public CComObjectRootEx, + public IContextMenu2, + public IShellExtInit +{ +private: + LONG wId; + BOOL NoOpen; + UINT count; + WCHAR szPath[MAX_PATH]; + HMENU hSubMenu; +public: + COpenWithMenu(); + ~COpenWithMenu(); + HRESULT SHEOW_LoadOpenWithItems(IDataObject *pdtobj); + + // IContextMenu + virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); + virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); + virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen); + + // IContextMenu2 + virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); + + // IShellExtInit + virtual HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID); + +DECLARE_NO_REGISTRY() +DECLARE_NOT_AGGREGATABLE(COpenWithMenu) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(COpenWithMenu) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit) +END_COM_MAP() +}; + +#endif // _SHE_OCMENU_H_ diff --git a/reactos/dll/win32/shell32_new/shell.cpp b/reactos/dll/win32/shell32_new/shell.cpp new file mode 100644 index 00000000000..71761fc49ad --- /dev/null +++ b/reactos/dll/win32/shell32_new/shell.cpp @@ -0,0 +1,33 @@ +/* + * Shell Library Functions + * + * Copyright 1998 Marcus Meissner + * Copyright 2000 Juergen Schmied + * Copyright 2002 Eric Pouech + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include +#include + + + + diff --git a/reactos/dll/win32/shell32_new/shell32.rbuild b/reactos/dll/win32/shell32_new/shell32.rbuild new file mode 100644 index 00000000000..c3c83da7432 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shell32.rbuild @@ -0,0 +1,90 @@ + + + + + . + . + include/reactos/wine + . + + + + + + 0x600 + wine + uuid + recyclebin + ntdll + advapi32 + gdi32 + user32 + comctl32 + comdlg32 + shlwapi + ole32 + version + devmgr + winspool + winmm + msvcrt + atlnew + precomp.h + authors.cpp + autocomplete.cpp + brsfolder.cpp + changenotify.cpp + classes.cpp + clipboard.cpp + control.cpp + dataobject.cpp + dde.cpp + debughlp.cpp + desktop.cpp + dialogs.cpp + dragdrophelper.cpp + enumidlist.cpp + extracticon.cpp + folders.cpp + iconcache.cpp + pidl.cpp + shell32_main.cpp + shellitem.cpp + shelllink.cpp + shellole.cpp + shellord.cpp + shellpath.cpp + shellreg.cpp + shellstring.cpp + shfldr_desktop.cpp + shfldr_fs.cpp + shfldr_mycomp.cpp + shfldr_mydocuments.cpp + shfldr_printers.cpp + shfldr_admintools.cpp + shfldr_netplaces.cpp + shfldr_fonts.cpp + shfldr_cpanel.cpp + shfldr_recyclebin.cpp + shlexec.cpp + shlfileop.cpp + shlfolder.cpp + shlfsbind.cpp + shlmenu.cpp + shlview.cpp + shpolicy.cpp + shv_def_cmenu.cpp + startmenu.cpp + stubs.cpp + ros-systray.cpp + fprop.cpp + drive.cpp + she_ocmenu.cpp + shv_item_new.cpp + folder_options.cpp + shell32.rc + + + shobjidl_local.idl + + diff --git a/reactos/dll/win32/shell32_new/shell32.rbuild.bak b/reactos/dll/win32/shell32_new/shell32.rbuild.bak new file mode 100644 index 00000000000..d871af6daab --- /dev/null +++ b/reactos/dll/win32/shell32_new/shell32.rbuild.bak @@ -0,0 +1,90 @@ + + + + + . + . + include/reactos/wine + . + + + + + + 0x600 + wine + uuid + recyclebin + ntdll + advapi32 + gdi32 + user32 + comctl32 + comdlg32 + shlwapi + ole32 + version + devmgr + winspool + winmm + msvcrt + atlnew + precomp.h + authors.cpp + autocomplete.cpp + brsfolder.cpp + changenotify.cpp + classes.cpp + clipboard.cpp + control.cpp + dataobject.cpp + dde.cpp + debughlp.cpp + desktop.cpp + dialogs.cpp + dragdrophelper.cpp + enumidlist.cpp + extracticon.cpp + folders.cpp + iconcache.cpp + pidl.cpp + shell32_main.cpp + shellitem.cpp + shelllink.cpp + shellole.cpp + shellord.cpp + shellpath.cpp + shellreg.cpp + shellstring.cpp + shfldr_desktop.cpp + shfldr_fs.cpp + shfldr_mycomp.cpp + shfldr_mydocuments.cpp + shfldr_printers.cpp + shfldr_admintools.cpp + shfldr_netplaces.cpp + shfldr_fonts.cpp + shfldr_cpanel.cpp + shfldr_recyclebin.cpp + shlexec.cpp + shlfileop.cpp + shlfolder.cpp + shlfsbind.cpp + shlmenu.cpp + shlview.cpp + shpolicy.cpp + shv_def_cmenu.cpp + startmenu.cpp + stubs.cpp + ros-systray.cpp + fprop.cpp + drive.cpp + she_ocmenu.cpp + shv_item_new.cpp + folder_options.cpp + shell32.rc + + + shobjidl_local.idl + + diff --git a/reactos/dll/win32/shell32_new/shell32.rc b/reactos/dll/win32/shell32_new/shell32.rc new file mode 100644 index 00000000000..5fc578b5334 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shell32.rc @@ -0,0 +1,79 @@ +/* + * Top level resource file for shell stuff + * + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include "shlobj.h" +#include "shresdef.h" + +#include "version.rc" + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +shv_accel ACCELERATORS +BEGIN + VK_F5, FCIDM_SHVIEW_REFRESH, VIRTKEY +END + +/* + * This include a set of Shell32 icons, + * bitmaps and avi files. Licence's can be + * found in the corresponding directorys + */ +#include "icon_res.rc" +#include "bitmap_res.rc" +#include "avi_res.rc" +#include "rgs_res.rc" + +/* + * Everything specific to any language goes + * in one of the specific files. + * Note that you can and may override resources + * which also have a neutral version. This is to + * get localized bitmaps for example. + */ +#include "lang/bg-BG.rc" +#include "lang/ca-ES.rc" +#include "lang/cs-CZ.rc" +#include "lang/da-DK.rc" +#include "lang/de-DE.rc" +#include "lang/el-GR.rc" +#include "lang/en-GB.rc" +#include "lang/en-US.rc" +#include "lang/es-ES.rc" +#include "lang/fi-FI.rc" +#include "lang/fr-FR.rc" +#include "lang/hu-HU.rc" +#include "lang/it-IT.rc" +#include "lang/ja-JP.rc" +#include "lang/ko-KR.rc" +#include "lang/nl-NL.rc" +#include "lang/no-NO.rc" +#include "lang/pl-PL.rc" +#include "lang/pt-BR.rc" +#include "lang/pt-PT.rc" +#include "lang/ro-RO.rc" +#include "lang/ru-RU.rc" +#include "lang/sl-SI.rc" +#include "lang/sk-SK.rc" +#include "lang/sv-SE.rc" +#include "lang/tr-TR.rc" +#include "lang/uk-UA.rc" +#include "lang/zh-CN.rc" +#include "lang/zh-TW.rc" diff --git a/reactos/dll/win32/shell32_new/shell32.spec b/reactos/dll/win32/shell32_new/shell32.spec new file mode 100644 index 00000000000..e8d0064e182 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shell32.spec @@ -0,0 +1,505 @@ +# Functions exported by the WinXP SP3 shell32.dll (6.0.2900.5686) +2 stdcall SHChangeNotifyRegister(long long long long long ptr) +3 stdcall SHDefExtractIconA(str long long ptr ptr long) +4 stdcall SHChangeNotifyDeregister(long) +5 stdcall -noname SHChangeNotifyUpdateEntryList(long long long long) +6 stdcall SHDefExtractIconW(wstr long long ptr ptr long) +7 stdcall -noname SHLookupIconIndexA(str long long) +8 stdcall -noname SHLookupIconIndexW(wstr long long) +9 stdcall PifMgr_OpenProperties(wstr wstr long long) +10 stdcall PifMgr_GetProperties(ptr wstr ptr long long) +11 stdcall PifMgr_SetProperties(ptr wstr ptr long long) +12 stdcall -noname SHStartNetConnectionDialogA(ptr str long) +13 stdcall PifMgr_CloseProperties(ptr long) +14 stdcall SHStartNetConnectionDialogW(ptr wstr long) +15 stdcall -noname ILGetDisplayName(ptr ptr) +16 stdcall ILFindLastID(ptr) +17 stdcall ILRemoveLastID(ptr) +18 stdcall ILClone(ptr) +19 stdcall ILCloneFirst(ptr) +20 stdcall -noname ILGlobalClone(ptr) +21 stdcall ILIsEqual(ptr ptr) +22 stdcall DAD_DragEnterEx2(ptr long long ptr) +23 stdcall ILIsParent(ptr ptr long) +24 stdcall ILFindChild(ptr ptr) +25 stdcall ILCombine(ptr ptr) +26 stdcall ILLoadFromStream(ptr ptr) +27 stdcall ILSaveToStream(ptr ptr) +28 stdcall SHILCreateFromPath(ptr ptr ptr) SHILCreateFromPathAW +29 stdcall -noname PathIsRoot(ptr) PathIsRootAW +30 stdcall -noname PathBuildRoot(ptr long) PathBuildRootAW +31 stdcall -noname PathFindExtension(wstr) PathFindExtensionW +32 stdcall -noname PathAddBackslash(wstr) PathAddBackslashW +33 stdcall -noname PathRemoveBlanks(wstr) PathRemoveBlanksW +34 stdcall -noname PathFindFileName(wstr) PathFindFileNameW +35 stdcall -noname PathRemoveFileSpec(ptr) PathRemoveFileSpecAW # Fixme +36 stdcall -noname PathAppend(ptr ptr) PathAppendAW # Fixme +37 stdcall -noname PathCombine(wstr wstr wstr) PathCombineW +38 stdcall -noname PathStripPath(wstr) PathStripPathW +39 stdcall -noname PathIsUNC(wstr) PathIsUNCW +40 stdcall -noname PathIsRelative(wstr) PathIsRelativeW +41 stdcall IsLFNDriveA(str) +42 stdcall IsLFNDriveW(wstr) +43 stdcall PathIsExe(ptr) PathIsExeAW +44 stdcall OpenAs_RunDLL(long long str long) OpenAs_RunDLLA +45 stdcall -noname PathFileExists(ptr) PathFileExistsAW # Fixme +46 stdcall -noname PathMatchSpec(wstr wstr) PathMatchSpecW +47 stdcall PathMakeUniqueName(ptr long ptr ptr ptr) PathMakeUniqueNameAW +48 stdcall -noname PathSetDlgItemPath(long long wstr) PathSetDlgItemPathW +49 stdcall PathQualify(ptr) PathQualifyAW +50 stdcall -noname PathStripToRoot(wstr) PathStripToRootW +51 stdcall PathResolve(str long long) PathResolveAW +52 stdcall -noname PathGetArgs(wstr) PathGetArgsW +53 stdcall -noname IsSuspendAllowed() +54 stdcall -noname LogoffWindowsDialog(ptr) +55 stdcall -noname PathQuoteSpaces(wstr) PathQuoteSpacesW +56 stdcall -noname PathUnquoteSpaces(wstr) PathUnquoteSpacesW +57 stdcall -noname PathGetDriveNumber(wstr) PathGetDriveNumberW +58 stdcall -noname ParseField(str long ptr long) ParseFieldAW # Fixme +59 stdcall RestartDialog(long wstr long) +60 stdcall -noname ExitWindowsDialog(long) # Fixme +61 stdcall -noname RunFileDlg(long long long str str long) RunFileDlg # Fixme +62 stdcall PickIconDlg(long long long long) +63 stdcall GetFileNameFromBrowse(long long long long str str str) +64 stdcall DriveType(long) +65 stdcall -noname InvalidateDriveType(long) +66 stdcall IsNetDrive(long) +67 stdcall Shell_MergeMenus(long long long long long long) +68 stdcall SHGetSetSettings(ptr long long) +69 stdcall -noname SHGetNetResource(ptr long ptr long) +70 stdcall -noname SHCreateDefClassObject(long long long long long) +71 stdcall -noname Shell_GetImageLists(ptr ptr) +72 stdcall Shell_GetCachedImageIndex(ptr ptr long) Shell_GetCachedImageIndexAW +73 stdcall SHShellFolderView_Message(long long long) +74 stdcall SHCreateStdEnumFmtEtc(long ptr ptr) +75 stdcall PathYetAnotherMakeUniqueName(ptr wstr wstr wstr) +76 stdcall DragQueryInfo(ptr ptr) +77 stdcall SHMapPIDLToSystemImageListIndex(ptr ptr ptr) +78 stdcall -noname OleStrToStrN(str long wstr long) OleStrToStrNAW # Fixme +79 stdcall -noname StrToOleStrN(wstr long str long) StrToOleStrNAW # Fixme +80 stdcall SHOpenPropSheetW(wstr ptr long ptr ptr ptr wstr) +81 stdcall OpenAs_RunDLLA(long long str long) +82 stdcall -noname DDECreatePostNotify(ptr) +83 stdcall -noname CIDLData_CreateFromIDArray(ptr long ptr ptr) +84 stdcall SHIsBadInterfacePtr(ptr long) # Fixme +85 stdcall OpenRegStream(long str str long) shlwapi.SHOpenRegStreamA +86 stdcall -noname SHRegisterDragDrop(long ptr) +87 stdcall -noname SHRevokeDragDrop(long) +88 stdcall SHDoDragDrop(long ptr ptr long ptr) +89 stdcall SHCloneSpecialIDList(long long long) +90 stdcall SHFindFiles(ptr ptr) +91 stdcall SHFindComputer(ptr ptr) +92 stdcall PathGetShortPath(ptr) PathGetShortPathAW +93 stdcall -noname Win32CreateDirectory(wstr ptr) Win32CreateDirectoryW +94 stdcall -noname Win32RemoveDirectory(wstr) Win32RemoveDirectoryW +95 stdcall -noname SHLogILFromFSIL(ptr) +96 stdcall -noname StrRetToStrN(ptr long ptr ptr) StrRetToStrNAW # Fixme +97 stdcall -noname SHWaitForFileToOpen(long long long) +98 stdcall SHGetRealIDL(ptr ptr ptr) +99 stdcall -noname SetAppStartingCursor(long long) # Fixme +100 stdcall SHRestricted(long) +101 stdcall OpenAs_RunDLLW(long long wstr long) +102 stdcall SHCoCreateInstance(wstr ptr long ptr ptr) +103 stdcall SignalFileOpen(long) +104 stdcall Activate_RunDLL(long ptr ptr ptr) +105 stdcall AppCompat_RunDLLW(ptr ptr wstr long) +106 stdcall CheckEscapesA(str long) +107 stdcall CheckEscapesW(wstr long) +108 stdcall CommandLineToArgvW(wstr ptr) +109 stdcall Control_FillCache_RunDLL(long long long long) Control_FillCache_RunDLLA +110 stdcall Control_FillCache_RunDLLA(long long long long) +111 stdcall Control_FillCache_RunDLLW(long long long long) +112 stdcall Control_RunDLL(ptr ptr str long) Control_RunDLLA +113 stdcall Control_RunDLLA(ptr ptr str long) +114 stdcall Control_RunDLLAsUserW(ptr ptr wstr long) +115 stdcall Control_RunDLLW(ptr ptr wstr long) +116 stdcall DllCanUnloadNow() +117 stdcall DllGetClassObject(ptr ptr ptr) +118 stdcall DllGetVersion(ptr) +119 stdcall IsLFNDrive(ptr) IsLFNDriveAW +120 stdcall DllInstall(long wstr) +121 stdcall SHFlushClipboard() +122 stdcall -noname RunDLL_CallEntry16(long long long str long) # Fixme #name wrong? +123 stdcall -noname SHFreeUnusedLibraries() +124 stdcall DllRegisterServer() +125 stdcall DllUnregisterServer() +126 stdcall -noname SHOutOfMemoryMessageBox(long long long) # Fixme +127 stdcall -noname SHWinHelp(long long long long) +128 stdcall -noname SHDllGetClassObject(ptr ptr ptr) DllGetClassObject +129 stdcall DAD_AutoScroll(long ptr ptr) +130 stdcall -noname DAD_DragEnter(long) +131 stdcall DAD_DragEnterEx(long double) +132 stdcall DAD_DragLeave() +133 stdcall DoEnvironmentSubstA(str str) +134 stdcall DAD_DragMove(double) +135 stdcall DoEnvironmentSubstW(wstr wstr) +136 stdcall DAD_SetDragImage(long long) +137 stdcall DAD_ShowDragImage(long) +138 stdcall DragAcceptFiles(long long) +139 stdcall DragFinish(long) +140 stdcall DragQueryFile(long long ptr long) DragQueryFileA +141 stdcall DragQueryFileA(long long ptr long) +142 stdcall DragQueryFileAorW(ptr long wstr long long long) +143 stdcall DragQueryFileW(long long ptr long) +144 stdcall DragQueryPoint(long ptr) +145 stdcall -noname PathFindOnPath(wstr wstr) PathFindOnPathW +146 stdcall -noname RLBuildListOfPaths() +147 stdcall SHCLSIDFromString(long long) SHCLSIDFromStringAW +148 stdcall SHMapIDListToImageListIndexAsync(ptr ptr ptr long ptr ptr ptr ptr ptr) +149 stdcall SHFind_InitMenuPopup(long long long long) +150 stdcall DuplicateIcon(long long) +151 stdcall SHLoadOLE(long) +152 stdcall ILGetSize(ptr) +153 stdcall ILGetNext(ptr) +154 stdcall ILAppendID(long long long) ILAppend +155 stdcall ILFree(ptr) +156 stdcall -noname ILGlobalFree(ptr) +157 stdcall ILCreateFromPath(ptr) ILCreateFromPathAW +158 stdcall -noname PathGetExtension(wstr long long) SHPathGetExtensionW +159 stdcall -noname PathIsDirectory(wstr) PathIsDirectoryW +160 stdcall SHNetConnectionDialog(ptr wstr long) # Fixme +161 stdcall SHRunControlPanel(long long) +162 stdcall SHSimpleIDListFromPath(ptr) SHSimpleIDListFromPathAW # Fixme +163 stdcall -noname StrToOleStr(wstr str) StrToOleStrAW # Fixme +164 stdcall Win32DeleteFile(wstr) Win32DeleteFileW +165 stdcall SHCreateDirectory(long ptr) +166 stdcall CallCPLEntry16(long long long long long long) +167 stdcall SHAddFromPropSheetExtArray(long long long) +168 stdcall SHCreatePropSheetExtArray(long wstr long) +169 stdcall SHDestroyPropSheetExtArray(long) +170 stdcall SHReplaceFromPropSheetExtArray(long long long long) +171 stdcall PathCleanupSpec(ptr ptr) +172 stdcall -noname SHCreateLinks(long str ptr long ptr) +173 stdcall SHValidateUNC(long long long) +174 stdcall SHCreateShellFolderViewEx(ptr ptr) +175 stdcall -noname SHGetSpecialFolderPath(long long long long) SHGetSpecialFolderPathW +176 stdcall SHSetInstanceExplorer(long) +177 stdcall DAD_SetDragImageFromListView(ptr long long) +178 stdcall SHObjectProperties(long long wstr wstr) +179 stdcall SHGetNewLinkInfoA(str str ptr long long) +180 stdcall SHGetNewLinkInfoW(wstr wstr ptr long long) +181 stdcall -noname RegisterShellHook(long long) +182 varargs ShellMessageBoxA(long long str str long) +183 varargs ShellMessageBoxW(long long wstr wstr long) +184 stdcall -noname ArrangeWindows(long long long long long) +185 stdcall -noname SHHandleDiskFull(ptr long) # Fixme +186 stdcall -noname ILGetDisplayNameEx(ptr ptr ptr long) +187 stdcall -noname ILGetPseudoNameW(ptr ptr wstr long) +188 stdcall -noname ShellDDEInit(long) +189 stdcall ILCreateFromPathA(str) +190 stdcall ILCreateFromPathW(wstr) +191 stdcall SHUpdateImageA(str long long long) +192 stdcall SHUpdateImageW(wstr long long long) +193 stdcall SHHandleUpdateImage(ptr) +194 stdcall -noname SHCreatePropSheetExtArrayEx(long wstr long ptr) +195 stdcall SHFree(ptr) +196 stdcall SHAlloc(long) +197 stdcall -noname SHGlobalDefect(long) +198 stdcall -noname SHAbortInvokeCommand() +199 stdcall ExtractAssociatedIconA(long str ptr) +200 stdcall -noname SHCreateDesktop(ptr) +201 stdcall -noname SHDesktopMessageLoop(ptr) +202 stub -noname DDEHandleViewFolderNotify +203 stdcall -noname AddCommasW(long wstr) +204 stdcall -noname ShortSizeFormatW(double) +205 stdcall Printer_LoadIconsW(wstr ptr ptr) +206 stdcall ExtractAssociatedIconExA(long str long long) +207 stdcall ExtractAssociatedIconExW(long wstr long long) +208 stdcall ExtractAssociatedIconW(long wstr ptr) +209 stdcall -noname Int64ToString(double wstr long long ptr long) # Fixme +210 stdcall -noname LargeIntegerToString(ptr wstr long long ptr long) # Fixme +211 stdcall -noname Printers_GetPidl(ptr str) # Fixme +212 stdcall -noname Printers_AddPrinterPropPages(ptr ptr) +213 stdcall -noname Printers_RegisterWindowW(wstr long ptr ptr) +214 stdcall -noname Printers_UnregisterWindow(long long) +215 stdcall -noname SHStartNetConnectionDialog(long str long) +216 stdcall ExtractIconA(long str long) +217 stdcall ExtractIconEx(ptr long ptr ptr long) ExtractIconExA +218 stdcall ExtractIconExA(str long ptr ptr long) +219 stdcall ExtractIconExW(wstr long ptr ptr long) +220 stdcall ExtractIconResInfoA(ptr str long ptr ptr) +221 stdcall ExtractIconResInfoW(ptr wstr long ptr ptr) +222 stdcall ExtractIconW(long wstr long) +223 stdcall ExtractVersionResource16W(wstr ptr) +224 stdcall FindExeDlgProc(ptr long ptr ptr) +225 stdcall FindExecutableA(str str ptr) +226 stdcall FindExecutableW(wstr wstr ptr) +227 stdcall FreeIconList(long) +228 stdcall InternalExtractIconListA(ptr str ptr) +229 stdcall InternalExtractIconListW(ptr wstr ptr) +230 stdcall -noname FirstUserLogon(wstr wstr) +231 stdcall -noname SHSetFolderPathA(long ptr long str) +232 stdcall -noname SHSetFolderPathW(long ptr long wstr) +233 stdcall -noname SHGetUserPicturePathW(wstr long ptr) +234 stdcall -noname SHSetUserPicturePathW(wstr long ptr) +235 stdcall -noname SHOpenEffectiveToken(ptr) +236 stdcall -noname SHTestTokenPrivilegeW(ptr ptr) +237 stdcall -noname SHShouldShowWizards(ptr) +238 stdcall Options_RunDLL(ptr ptr str long) +239 stdcall PathIsSlowW(wstr long) +240 stdcall PathIsSlowA(str long) +241 stdcall -noname SHGetUserDisplayName(wstr ptr) +242 stdcall -noname SHGetProcessDword(long long) +243 stdcall -noname SHSetShellWindowEx(ptr ptr) user32.SetShellWindowEx +244 stdcall -noname SHInitRestricted(ptr ptr) +245 stdcall SHTestTokenMembership(ptr ptr) +246 stub -noname SHInvokePrivilegedFunctionW +247 stub -noname SHGetActiveConsoleSessionId +248 stdcall -noname SHGetUserSessionId(ptr) # Fixme +249 stdcall -noname PathParseIconLocation(wstr) PathParseIconLocationW +250 stdcall -noname PathRemoveExtension(wstr) PathRemoveExtensionW +251 stdcall -noname PathRemoveArgs(wstr) PathRemoveArgsW +252 stdcall -noname PathIsURL(wstr) shlwapi.PathIsURLW +253 stub -noname SHIsCurrentProcessConsoleSession +254 stub -noname DisconnectWindowsDialog +255 stdcall Options_RunDLLA(ptr ptr str long) +256 stdcall SHCreateShellFolderView(ptr ptr) +257 stdcall -noname SHGetShellFolderViewCB(ptr) +258 stdcall -noname LinkWindow_RegisterClass() +259 stdcall -noname LinkWindow_UnregisterClass() +260 stdcall Options_RunDLLW(ptr ptr wstr long) +261 stdcall PrintersGetCommand_RunDLL(ptr ptr wstr long) +262 stdcall PrintersGetCommand_RunDLLA(ptr ptr str long) +263 stdcall PrintersGetCommand_RunDLLW(ptr ptr wstr long) +264 stdcall RealShellExecuteA(ptr str str str str str str str long ptr) +265 stdcall RealShellExecuteExA(ptr str str str str str str str long ptr long) +266 stdcall RealShellExecuteExW(ptr str str str str str str str long ptr long) +267 stdcall RealShellExecuteW(ptr wstr wstr wstr wstr wstr wstr wstr long ptr) +268 stdcall RegenerateUserEnvironment(ptr long) +269 stdcall SHAddToRecentDocs(long ptr) +270 stdcall SHAppBarMessage(long ptr) +271 stdcall SHBindToParent(ptr ptr ptr ptr) +272 stdcall SHBrowseForFolder(ptr) SHBrowseForFolderA +273 stdcall SHBrowseForFolderA(ptr) +274 stdcall SHBrowseForFolderW(ptr) +275 stdcall SHChangeNotify(long long ptr ptr) +276 stdcall SHChangeNotifySuspendResume(long ptr long long) +277 stdcall SHCreateDirectoryExA(long str ptr) +278 stdcall SHCreateDirectoryExW(long wstr ptr) +279 stub SHCreateLocalServerRunDll +280 stdcall SHCreateProcessAsUserW(ptr) +281 stdcall SHCreateQueryCancelAutoPlayMoniker(ptr) +282 stdcall SHCreateShellItem(ptr ptr ptr ptr) +283 stdcall SHEmptyRecycleBinA(long str long) +284 stdcall SHEmptyRecycleBinW(long wstr long) +285 stub SHEnableServiceObject +286 stub SHEnumerateUnreadMailAccountsW +287 stdcall SHExtractIconsW(wstr long long long ptr ptr long long) user32.PrivateExtractIconsW +288 stdcall SHFileOperation(ptr) SHFileOperationA +289 stdcall SHFileOperationA(ptr) +290 stdcall SHFileOperationW(ptr) +291 stdcall SHFormatDrive(long long long long) +292 stdcall SHFreeNameMappings(ptr) +293 stdcall SHGetDataFromIDListA(ptr ptr long ptr long) +294 stdcall SHGetDataFromIDListW(ptr ptr long ptr long) +295 stdcall SHGetDesktopFolder(ptr) +296 stdcall SHGetDiskFreeSpaceA(str ptr ptr ptr) kernel32.GetDiskFreeSpaceExA +297 stdcall SHGetDiskFreeSpaceExA(str ptr ptr ptr) kernel32.GetDiskFreeSpaceExA +298 stdcall SHGetDiskFreeSpaceExW(wstr ptr ptr ptr) kernel32.GetDiskFreeSpaceExW +299 stdcall SHGetFileInfo(ptr long ptr long long) SHGetFileInfoA +300 stdcall SHGetFileInfoA(ptr long ptr long long) +301 stdcall SHGetFileInfoW(ptr long ptr long long) +302 stdcall SHGetFolderLocation(long long long long ptr) +303 stdcall SHGetFolderPathA(long long long long ptr) +304 stdcall SHGetFolderPathAndSubDirA(long long long long str ptr) +305 stdcall SHGetFolderPathAndSubDirW(long long long long wstr ptr) +306 stdcall SHGetFolderPathW(long long long long ptr) +307 stdcall SHGetIconOverlayIndexA(str long) +308 stdcall SHGetIconOverlayIndexW(wstr long) +309 stdcall SHGetInstanceExplorer(long) +310 stdcall SHGetMalloc(ptr) +311 stdcall SHGetNewLinkInfo(str str ptr long long) SHGetNewLinkInfoA +312 stdcall SHGetPathFromIDList(ptr ptr) SHGetPathFromIDListA +313 stdcall SHGetPathFromIDListA(ptr ptr) +314 stdcall SHGetPathFromIDListW(ptr ptr) +315 stdcall SHGetSettings(ptr long) +316 stdcall SHGetSpecialFolderLocation(long long ptr) +317 stdcall SHGetSpecialFolderPathA(long ptr long long) +318 stdcall SHGetSpecialFolderPathW(long ptr long long) +319 stdcall SHGetUnreadMailCountW(long wstr long ptr wstr long) +320 stdcall SHHelpShortcuts_RunDLL(long long long long) SHHelpShortcuts_RunDLLA +321 stdcall SHHelpShortcuts_RunDLLA(long long long long) +322 stdcall SHHelpShortcuts_RunDLLW(long long long long) +323 stdcall SHInvokePrinterCommandA(ptr long str str long) +324 stdcall SHInvokePrinterCommandW(ptr long wstr wstr long) +325 stdcall SHIsFileAvailableOffline(wstr ptr) +326 stdcall SHLoadInProc(long) +327 stdcall SHLoadNonloadedIconOverlayIdentifiers() +328 stdcall SHOpenFolderAndSelectItems(ptr long ptr long) +329 stdcall SHParseDisplayName(wstr ptr ptr long ptr) +330 stdcall SHPathPrepareForWriteA(long ptr str long) +331 stdcall SHPathPrepareForWriteW(long ptr wstr long) +332 stdcall SHQueryRecycleBinA(str ptr) +333 stdcall SHQueryRecycleBinW(wstr ptr) +334 stdcall SHSetLocalizedName(wstr wstr long) +335 stdcall SHSetUnreadMailCountW(wstr long wstr) +336 stdcall SHUpdateRecycleBinIcon() +337 stdcall SheChangeDirA(str) +338 stdcall SheChangeDirExA(str) +339 stdcall SheChangeDirExW(wstr) +340 stdcall SheChangeDirW(wstr) +341 stdcall SheConvertPathW(wstr wstr long) +342 stdcall SheFullPathA(str long str) +343 stdcall SheFullPathW(wstr long wstr) +344 stdcall SheGetCurDrive() +345 stdcall SheGetDirA(long long) +346 stdcall SheGetDirExW(wstr ptr wstr) +347 stdcall SheGetDirW(long long) +348 stdcall SheGetPathOffsetW(wstr) +349 stdcall SheRemoveQuotesA(str) +350 stdcall SheRemoveQuotesW(wstr) +351 stdcall SheSetCurDrive(long) +352 stdcall SheShortenPathA(str long) +353 stdcall SheShortenPathW(wstr long) +354 stdcall ShellAboutA(long str str long) +355 stdcall ShellAboutW(long wstr wstr long) +356 stdcall ShellExec_RunDLL(ptr ptr wstr long) +357 stdcall ShellExec_RunDLLA(ptr ptr str long) +358 stdcall ShellExec_RunDLLW(ptr ptr wstr long) +359 stdcall ShellExecuteA(long str str str str long) +360 stdcall ShellExecuteEx(long) ShellExecuteExA +361 stdcall ShellExecuteExA (long) +362 stdcall ShellExecuteExW (long) +363 stdcall ShellExecuteW(long wstr wstr wstr wstr long) +364 stdcall ShellHookProc(long ptr ptr) +365 stdcall Shell_NotifyIcon(long ptr) Shell_NotifyIconA +366 stdcall Shell_NotifyIconA(long ptr) +367 stdcall Shell_NotifyIconW(long ptr) +368 stdcall StrChrA(str long) shlwapi.StrChrA +369 stdcall StrChrIA(str long) shlwapi.StrChrIA +370 stdcall StrChrIW(wstr long) shlwapi.StrChrIW +371 stdcall StrChrW(wstr long) shlwapi.StrChrW +372 stdcall StrCmpNA(str str long) shlwapi.StrCmpNA +373 stdcall StrCmpNIA(str str long) shlwapi.StrCmpNIA +374 stdcall StrCmpNIW(wstr wstr long) shlwapi.StrCmpNIW +375 stdcall StrCmpNW(wstr wstr long) shlwapi.StrCmpNW +376 stdcall StrCpyNA (ptr str long) kernel32.lstrcpynA +377 stdcall StrCpyNW(wstr wstr long) shlwapi.StrCpyNW +378 stdcall StrNCmpA(str str long) shlwapi.StrCmpNA +379 stdcall StrNCmpIA(str str long) shlwapi.StrCmpNIA +380 stdcall StrNCmpIW(wstr wstr long) shlwapi.StrCmpNIW +381 stdcall StrNCmpW(wstr wstr long) shlwapi.StrCmpNW +382 stdcall StrNCpyA (ptr str long) kernel32.lstrcpynA +383 stdcall StrNCpyW(wstr wstr long) shlwapi.StrCpyNW +384 stdcall StrRChrA(str str long) shlwapi.StrRChrA +385 stdcall StrRChrIA(str str long) shlwapi.StrRChrIA +386 stdcall StrRChrIW(str str long) shlwapi.StrRChrIW +387 stdcall StrRChrW(wstr wstr long) shlwapi.StrRChrW +388 stdcall StrRStrA(str str str) +389 stdcall StrRStrIA(str str str) shlwapi.StrRStrIA +390 stdcall StrRStrIW(wstr wstr wstr) shlwapi.StrRStrIW +391 stdcall StrRStrW(wstr wstr wstr) +392 stdcall StrStrA(str str) shlwapi.StrStrA +393 stdcall StrStrIA(str str) shlwapi.StrStrIA +394 stdcall StrStrIW(wstr wstr) shlwapi.StrStrIW +395 stdcall StrStrW(wstr wstr) shlwapi.StrStrW +396 stdcall WOWShellExecute(ptr wstr wstr wstr wstr long ptr) +520 stdcall SHAllocShared(ptr long long) +521 stdcall SHLockShared(long long) +522 stdcall SHUnlockShared(ptr) +523 stdcall SHFreeShared(long long) +524 stdcall RealDriveType(long long) +525 stdcall -noname RealDriveTypeFlags(long long) +526 stdcall SHFlushSFCache() +640 stdcall -noname NTSHChangeNotifyRegister(long long long long long long) +641 stdcall -noname NTSHChangeNotifyDeregister(long) +643 stdcall -noname SHChangeNotifyReceive(long long ptr ptr) +644 stdcall SHChangeNotification_Lock(long long ptr ptr) +645 stdcall SHChangeNotification_Unlock(long) +646 stdcall -noname SHChangeRegistrationReceive(ptr long) +648 stdcall -noname SHWaitOp_Operate(ptr long) +650 stdcall -noname PathIsSameRoot(ptr ptr) PathIsSameRootAW # Fixme +651 stdcall -noname OldReadCabinetState(long long) ReadCabinetState +652 stdcall WriteCabinetState(long) +653 stdcall PathProcessCommand(long long long long) PathProcessCommandAW +654 stdcall ReadCabinetState(long long) +660 stdcall -noname FileIconInit(long) +680 stdcall IsUserAnAdmin() +681 stdcall -noname SHGetAppCompatFlags(long) shlwapi.SHGetAppCompatFlags +683 stub -noname SHStgOpenStorageW +684 stub -noname SHStgOpenStorageA +685 stub SHPropStgCreate +688 stub SHPropStgReadMultiple +689 stub SHPropStgWriteMultiple +690 stub -noname SHIsLegacyAnsiProperty +691 stub -noname SHFileSysBindToStorage +700 stdcall CDefFolderMenu_Create(ptr ptr long ptr ptr ptr ptr ptr ptr) +701 stdcall CDefFolderMenu_Create2(ptr ptr long ptr ptr ptr long ptr ptr) +702 stdcall -noname CDefFolderMenu_MergeMenu(ptr long long ptr) +703 stdcall -noname GUIDFromStringA(str ptr) +704 stdcall -noname GUIDFromStringW(wstr ptr) +707 stdcall -noname SHOpenPropSheetA(str ptr long ptr ptr ptr str) +708 stdcall -noname SHGetSetFolderCustomSettingsA(ptr str long) +709 stdcall SHGetSetFolderCustomSettingsW(ptr wstr long) +711 stdcall -noname CheckWinIniForAssocs() +712 stdcall -noname SHCopyMonikerToTemp(ptr wstr wstr long) +713 stdcall -noname PathIsTemporaryA(str) +714 stdcall -noname PathIsTemporaryW(wstr) +715 stdcall -noname SHCreatePropertyBag(ptr ptr) +716 stdcall SHMultiFileProperties(ptr long) +719 stdcall -noname SHParseDarwinIDFromCacheW(wstr wstr) +720 stdcall -noname MakeShellURLFromPathA(str str long) +721 stdcall -noname MakeShellURLFromPathW(wstr wstr long) +722 stub -noname SHCreateInstance +723 stdcall -noname SHCreateSessionKey(long ptr) +724 stdcall -noname SHIsTempDisplayMode() +725 stdcall -noname GetFileDescriptor(ptr long long wstr) +726 stdcall -noname CopyStreamUI(ptr ptr ptr) +727 stdcall SHGetImageList(long ptr ptr) +730 stdcall RestartDialogEx(long wstr long long) +731 stub -noname SHRegisterDarwinLink +732 stdcall -noname SHReValidateDarwinCache() +733 stdcall -noname CheckDiskSpace() +740 stub -noname SHCreateFileDataObject +743 stdcall SHCreateFileExtractIconW(wstr long ptr ptr) +744 stub -noname Create_IEnumUICommand +745 stub -noname Create_IUIElement +747 stdcall SHLimitInputEdit(ptr ptr) +748 stdcall -noname SHLimitInputCombo(ptr ptr) +749 stub SHGetShellStyleHInstance +750 stub SHGetAttributesFromDataObject +751 stub -noname SHSimulateDropOnClsid +752 stub -noname SHGetComputerDisplayNameW +753 stub -noname CheckStagingArea +754 stub -noname SHLimitInputEditWithFlags +755 stdcall -noname PathIsEqualOrSubFolder(wstr wstr) +756 stub -noname DeleteFileThumbnail + +# Functions exported by the WinVista shell32.dll +@ stdcall SHCreateDefaultContextMenu(ptr ptr ptr) +@ stdcall SHCreateDefaultExtractIcon(ptr ptr) + +# Discontinued in version 6.0. Until retired in WinVista and higher +@ stdcall FileMenu_DeleteAllItems(long) +@ stdcall FileMenu_DrawItem(long ptr) +@ stdcall FileMenu_FindSubMenuByPidl(long ptr) +@ stdcall FileMenu_GetLastSelectedItemPidls(long ptr ptr) +@ stdcall FileMenu_HandleMenuChar(long long) +@ stdcall FileMenu_InitMenuPopup(long) +@ stdcall FileMenu_InsertUsingPidl (long long ptr long long ptr) +@ stdcall FileMenu_Invalidate(long) +@ stdcall FileMenu_MeasureItem(long ptr) +@ stdcall FileMenu_ReplaceUsingPidl(long long ptr long ptr) +@ stdcall FileMenu_Create(long long long long long) +@ stdcall FileMenu_AppendItem(long ptr long long long long) FileMenu_AppendItemAW +@ stdcall FileMenu_TrackPopupMenuEx(long long long long long long) +@ stdcall FileMenu_DeleteItemByCmd(long long) +@ stdcall FileMenu_Destroy(long) +@ stdcall FileMenu_AbortInitMenu() +@ stdcall FileMenu_AppendFilesForPidl(long ptr long) +@ stdcall FileMenu_AddFilesForPidl(long long long ptr long long ptr) +@ stdcall FileMenu_DeleteItemByIndex(long long) +@ stdcall FileMenu_DeleteItemByFirstID(long long) +@ stdcall FileMenu_DeleteSeparator(long) +@ stdcall FileMenu_EnableItemByCmd(long long long) +@ stdcall FileMenu_GetItemExtent(long long) + +# 4.0 (NT) and higher. Until discontinued in 5.0 +@ stdcall SHRegCloseKey(long) +@ stdcall SHRegOpenKeyA(long str long) +@ stdcall SHRegOpenKeyW(long wstr long) +@ stdcall SHRegQueryValueA(long str ptr ptr) +@ stdcall SHRegQueryValueExA(long str ptr ptr ptr ptr) +@ stdcall SHRegQueryValueW (long long long long) +@ stdcall SHRegQueryValueExW (long wstr ptr ptr ptr ptr) +@ stdcall SHRegDeleteKeyW(long wstr) diff --git a/reactos/dll/win32/shell32_new/shell32_main.cpp b/reactos/dll/win32/shell32_new/shell32_main.cpp new file mode 100644 index 00000000000..631ef229a0c --- /dev/null +++ b/reactos/dll/win32/shell32_new/shell32_main.cpp @@ -0,0 +1,1478 @@ +/* + * Shell basics + * + * Copyright 1998 Marcus Meissner + * Copyright 1998 Juergen Schmied (jsch) * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include "shfldr_fs.h" +#include "shfldr_mycomp.h" +#include "shfldr_desktop.h" +#include "shellitem.h" +#include "shelllink.h" +#include "dragdrophelper.h" +#include "shfldr_cpanel.h" +#include "autocomplete.h" +#include "shfldr_mydocuments.h" +#include "shfldr_netplaces.h" +#include "shfldr_fonts.h" +#include "shfldr_printers.h" +#include "shfldr_admintools.h" +#include "shfldr_recyclebin.h" +#include "she_ocmenu.h" +#include "shv_item_new.h" +#include "startmenu.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +const char * const SHELL_Authors[] = { "Copyright 1993-2009 WINE team", "Copyright 1998-2009 ReactOS Team", 0 }; + +#define MORE_DEBUG 1 +/************************************************************************* + * CommandLineToArgvW [SHELL32.@] + * + * We must interpret the quotes in the command line to rebuild the argv + * array correctly: + * - arguments are separated by spaces or tabs + * - quotes serve as optional argument delimiters + * '"a b"' -> 'a b' + * - escaped quotes must be converted back to '"' + * '\"' -> '"' + * - an odd number of '\'s followed by '"' correspond to half that number + * of '\' followed by a '"' (extension of the above) + * '\\\"' -> '\"' + * '\\\\\"' -> '\\"' + * - an even number of '\'s followed by a '"' correspond to half that number + * of '\', plus a regular quote serving as an argument delimiter (which + * means it does not appear in the result) + * 'a\\"b c"' -> 'a\b c' + * 'a\\\\"b c"' -> 'a\\b c' + * - '\' that are not followed by a '"' are copied literally + * 'a\b' -> 'a\b' + * 'a\\b' -> 'a\\b' + * + * Note: + * '\t' == 0x0009 + * ' ' == 0x0020 + * '"' == 0x0022 + * '\\' == 0x005c + */ +LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs) +{ + DWORD argc; + LPWSTR *argv; + LPCWSTR cs; + LPWSTR arg,s,d; + LPWSTR cmdline; + int in_quotes,bcount; + + if (*lpCmdline==0) + { + /* Return the path to the executable */ + DWORD len, size=16; + + argv = (LPWSTR *)LocalAlloc(LMEM_FIXED, size); + for (;;) + { + len = GetModuleFileNameW(0, (LPWSTR)(argv+1), (size-sizeof(LPWSTR))/sizeof(WCHAR)); + if (!len) + { + LocalFree(argv); + return NULL; + } + if (len < size) break; + size*=2; + argv = (LPWSTR *)LocalReAlloc(argv, size, 0); + } + argv[0]=(LPWSTR)(argv+1); + if (numargs) + *numargs=1; + + return argv; + } + + /* to get a writable copy */ + argc=0; + bcount=0; + in_quotes=0; + cs=lpCmdline; + while (1) + { + if (*cs==0 || ((*cs==0x0009 || *cs==0x0020) && !in_quotes)) + { + /* space */ + argc++; + /* skip the remaining spaces */ + while (*cs==0x0009 || *cs==0x0020) { + cs++; + } + if (*cs==0) + break; + bcount=0; + continue; + } + else if (*cs==0x005c) + { + /* '\', count them */ + bcount++; + } + else if ((*cs==0x0022) && ((bcount & 1)==0)) + { + /* unescaped '"' */ + in_quotes=!in_quotes; + bcount=0; + } + else + { + /* a regular character */ + bcount=0; + } + cs++; + } + /* Allocate in a single lump, the string array, and the strings that go with it. + * This way the caller can make a single GlobalFree call to free both, as per MSDN. + */ + argv = (LPWSTR *)LocalAlloc(LMEM_FIXED, argc*sizeof(LPWSTR)+(wcslen(lpCmdline)+1)*sizeof(WCHAR)); + if (!argv) + return NULL; + cmdline=(LPWSTR)(argv+argc); + wcscpy(cmdline, lpCmdline); + + argc=0; + bcount=0; + in_quotes=0; + arg=d=s=cmdline; + while (*s) + { + if ((*s==0x0009 || *s==0x0020) && !in_quotes) + { + /* Close the argument and copy it */ + *d=0; + argv[argc++]=arg; + + /* skip the remaining spaces */ + do { + s++; + } while (*s==0x0009 || *s==0x0020); + + /* Start with a new argument */ + arg=d=s; + bcount=0; + } + else if (*s==0x005c) + { + /* '\\' */ + *d++=*s++; + bcount++; + } + else if (*s==0x0022) + { + /* '"' */ + if ((bcount & 1)==0) + { + /* Preceded by an even number of '\', this is half that + * number of '\', plus a quote which we erase. + */ + d-=bcount/2; + in_quotes=!in_quotes; + s++; + } + else + { + /* Preceded by an odd number of '\', this is half that + * number of '\' followed by a '"' + */ + d=d-bcount/2-1; + *d++='"'; + s++; + } + bcount=0; + } + else + { + /* a regular character */ + *d++=*s++; + bcount=0; + } + } + if (*arg) + { + *d='\0'; + argv[argc++]=arg; + } + if (numargs) + *numargs=argc; + + return argv; +} + +static DWORD shgfi_get_exe_type(LPCWSTR szFullPath) +{ + BOOL status = FALSE; + HANDLE hfile; + DWORD BinaryType; + IMAGE_DOS_HEADER mz_header; + IMAGE_NT_HEADERS nt; + DWORD len; + char magic[4]; + + status = GetBinaryTypeW (szFullPath, &BinaryType); + if (!status) + return 0; + if (BinaryType == SCS_DOS_BINARY || BinaryType == SCS_PIF_BINARY) + return 0x4d5a; + + hfile = CreateFileW( szFullPath, GENERIC_READ, FILE_SHARE_READ, + NULL, OPEN_EXISTING, 0, 0 ); + if ( hfile == INVALID_HANDLE_VALUE ) + return 0; + + /* + * The next section is adapted from MODULE_GetBinaryType, as we need + * to examine the image header to get OS and version information. We + * know from calling GetBinaryTypeA that the image is valid and either + * an NE or PE, so much error handling can be omitted. + * Seek to the start of the file and read the header information. + */ + + SetFilePointer( hfile, 0, NULL, SEEK_SET ); + ReadFile( hfile, &mz_header, sizeof(mz_header), &len, NULL ); + + SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET ); + ReadFile( hfile, magic, sizeof(magic), &len, NULL ); + if ( *(DWORD*)magic == IMAGE_NT_SIGNATURE ) + { + SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET ); + ReadFile( hfile, &nt, sizeof(nt), &len, NULL ); + CloseHandle( hfile ); + /* DLL files are not executable and should return 0 */ + if (nt.FileHeader.Characteristics & IMAGE_FILE_DLL) + return 0; + if (nt.OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI) + { + return IMAGE_NT_SIGNATURE | + (nt.OptionalHeader.MajorSubsystemVersion << 24) | + (nt.OptionalHeader.MinorSubsystemVersion << 16); + } + return IMAGE_NT_SIGNATURE; + } + else if ( *(WORD*)magic == IMAGE_OS2_SIGNATURE ) + { + IMAGE_OS2_HEADER ne; + SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET ); + ReadFile( hfile, &ne, sizeof(ne), &len, NULL ); + CloseHandle( hfile ); + if (ne.ne_exetyp == 2) + return IMAGE_OS2_SIGNATURE | (ne.ne_expver << 16); + return 0; + } + CloseHandle( hfile ); + return 0; +} + +/************************************************************************* + * SHELL_IsShortcut [internal] + * + * Decide if an item id list points to a shell shortcut + */ +BOOL SHELL_IsShortcut(LPCITEMIDLIST pidlLast) +{ + char szTemp[MAX_PATH]; + HKEY keyCls; + BOOL ret = FALSE; + + if (_ILGetExtension(pidlLast, szTemp, MAX_PATH) && + HCR_MapTypeToValueA(szTemp, szTemp, MAX_PATH, TRUE)) + { + if (ERROR_SUCCESS == RegOpenKeyExA(HKEY_CLASSES_ROOT, szTemp, 0, KEY_QUERY_VALUE, &keyCls)) + { + if (ERROR_SUCCESS == RegQueryValueExA(keyCls, "IsShortcut", NULL, NULL, NULL, NULL)) + ret = TRUE; + + RegCloseKey(keyCls); + } + } + + return ret; +} + +#define SHGFI_KNOWN_FLAGS \ + (SHGFI_SMALLICON | SHGFI_OPENICON | SHGFI_SHELLICONSIZE | SHGFI_PIDL | \ + SHGFI_USEFILEATTRIBUTES | SHGFI_ADDOVERLAYS | SHGFI_OVERLAYINDEX | \ + SHGFI_ICON | SHGFI_DISPLAYNAME | SHGFI_TYPENAME | SHGFI_ATTRIBUTES | \ + SHGFI_ICONLOCATION | SHGFI_EXETYPE | SHGFI_SYSICONINDEX | \ + SHGFI_LINKOVERLAY | SHGFI_SELECTED | SHGFI_ATTR_SPECIFIED) + +/************************************************************************* + * SHGetFileInfoW [SHELL32.@] + * + */ +DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, + SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags ) +{ + WCHAR szLocation[MAX_PATH], szFullPath[MAX_PATH]; + int iIndex; + DWORD_PTR ret = TRUE; + DWORD dwAttributes = 0; + CComPtr psfParent; + CComPtr pei; + LPITEMIDLIST pidlLast = NULL, pidl = NULL; + HRESULT hr = S_OK; + BOOL IconNotYetLoaded=TRUE; + UINT uGilFlags = 0; + + TRACE("%s fattr=0x%x sfi=%p(attr=0x%08x) size=0x%x flags=0x%x\n", + (flags & SHGFI_PIDL)? "pidl" : debugstr_w(path), dwFileAttributes, + psfi, psfi->dwAttributes, sizeofpsfi, flags); + + if ( (flags & SHGFI_USEFILEATTRIBUTES) && + (flags & (SHGFI_ATTRIBUTES|SHGFI_EXETYPE|SHGFI_PIDL))) + return FALSE; + if (!path) + return FALSE; + + /* windows initializes these values regardless of the flags */ + if (psfi != NULL) + { + psfi->szDisplayName[0] = '\0'; + psfi->szTypeName[0] = '\0'; + psfi->iIcon = 0; + } + + if (!(flags & SHGFI_PIDL)) + { + /* SHGetFileInfo should work with absolute and relative paths */ + if (PathIsRelativeW(path)) + { + GetCurrentDirectoryW(MAX_PATH, szLocation); + PathCombineW(szFullPath, szLocation, path); + } + else + { + lstrcpynW(szFullPath, path, MAX_PATH); + } + } + + if (flags & SHGFI_EXETYPE) + { + if (flags != SHGFI_EXETYPE) + return 0; + return shgfi_get_exe_type(szFullPath); + } + + /* + * psfi is NULL normally to query EXE type. If it is NULL, none of the + * below makes sense anyway. Windows allows this and just returns FALSE + */ + if (psfi == NULL) + return FALSE; + + /* + * translate the path into a pidl only when SHGFI_USEFILEATTRIBUTES + * is not specified. + * The pidl functions fail on not existing file names + */ + + if (flags & SHGFI_PIDL) + { + pidl = ILClone((LPCITEMIDLIST)path); + } + else if (!(flags & SHGFI_USEFILEATTRIBUTES)) + { + hr = SHILCreateFromPathW(szFullPath, &pidl, &dwAttributes); + } + + if ((flags & SHGFI_PIDL) || !(flags & SHGFI_USEFILEATTRIBUTES)) + { + /* get the parent shellfolder */ + if (pidl) + { + hr = SHBindToParent( pidl, IID_IShellFolder, (LPVOID*)&psfParent, + (LPCITEMIDLIST*)&pidlLast ); + if (SUCCEEDED(hr)) + pidlLast = ILClone(pidlLast); + ILFree(pidl); + } + else + { + ERR("pidl is null!\n"); + return FALSE; + } + } + + /* get the attributes of the child */ + if (SUCCEEDED(hr) && (flags & SHGFI_ATTRIBUTES)) + { + if (!(flags & SHGFI_ATTR_SPECIFIED)) + { + psfi->dwAttributes = 0xffffffff; + } + if (psfParent != NULL) + psfParent->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlLast, + &(psfi->dwAttributes) ); + } + + /* get the displayname */ + if (SUCCEEDED(hr) && (flags & SHGFI_DISPLAYNAME)) + { + if (flags & SHGFI_USEFILEATTRIBUTES) + { + wcscpy (psfi->szDisplayName, PathFindFileNameW(szFullPath)); + } + else + { + STRRET str; + hr = psfParent->GetDisplayNameOf(pidlLast, + SHGDN_INFOLDER, &str); + StrRetToStrNW (psfi->szDisplayName, MAX_PATH, &str, pidlLast); + } + } + + /* get the type name */ + if (SUCCEEDED(hr) && (flags & SHGFI_TYPENAME)) + { + static const WCHAR szFile[] = { 'F','i','l','e',0 }; + static const WCHAR szDashFile[] = { '-','f','i','l','e',0 }; + + if (!(flags & SHGFI_USEFILEATTRIBUTES)) + { + char ftype[80]; + + _ILGetFileType(pidlLast, ftype, 80); + MultiByteToWideChar(CP_ACP, 0, ftype, -1, psfi->szTypeName, 80 ); + } + else + { + if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + wcscat (psfi->szTypeName, szFile); + else + { + WCHAR sTemp[64]; + + wcscpy(sTemp,PathFindExtensionW(szFullPath)); + if (!( HCR_MapTypeToValueW(sTemp, sTemp, 64, TRUE) && + HCR_MapTypeToValueW(sTemp, psfi->szTypeName, 80, FALSE ))) + { + lstrcpynW (psfi->szTypeName, sTemp, 64); + wcscat (psfi->szTypeName, szDashFile); + } + } + } + } + + /* ### icons ###*/ + if (flags & SHGFI_OPENICON) + uGilFlags |= GIL_OPENICON; + + if (flags & SHGFI_LINKOVERLAY) + uGilFlags |= GIL_FORSHORTCUT; + else if ((flags&SHGFI_ADDOVERLAYS) || + (flags&(SHGFI_ICON|SHGFI_SMALLICON))==SHGFI_ICON) + { + if (SHELL_IsShortcut(pidlLast)) + uGilFlags |= GIL_FORSHORTCUT; + } + + if (flags & SHGFI_OVERLAYINDEX) + FIXME("SHGFI_OVERLAYINDEX unhandled\n"); + + if (flags & SHGFI_SELECTED) + FIXME("set icon to selected, stub\n"); + + if (flags & SHGFI_SHELLICONSIZE) + FIXME("set icon to shell size, stub\n"); + + /* get the iconlocation */ + if (SUCCEEDED(hr) && (flags & SHGFI_ICONLOCATION )) + { + UINT uDummy,uFlags; + + if (flags & SHGFI_USEFILEATTRIBUTES) + { + if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + wcscpy(psfi->szDisplayName, swShell32Name); + psfi->iIcon = -IDI_SHELL_FOLDER; + } + else + { + WCHAR* szExt; + static const WCHAR p1W[] = {'%','1',0}; + WCHAR sTemp [MAX_PATH]; + + szExt = PathFindExtensionW(szFullPath); + TRACE("szExt=%s\n", debugstr_w(szExt)); + if ( szExt && + HCR_MapTypeToValueW(szExt, sTemp, MAX_PATH, TRUE) && + HCR_GetDefaultIconW(sTemp, sTemp, MAX_PATH, &psfi->iIcon)) + { + if (lstrcmpW(p1W, sTemp)) + wcscpy(psfi->szDisplayName, sTemp); + else + { + /* the icon is in the file */ + wcscpy(psfi->szDisplayName, szFullPath); + } + } + else + ret = FALSE; + } + } + else + { + hr = psfParent->GetUIObjectOf(0, 1, + (LPCITEMIDLIST*)&pidlLast, IID_IExtractIconW, + &uDummy, (LPVOID*)&pei); + if (SUCCEEDED(hr)) + { + hr = pei->GetIconLocation(uGilFlags, + szLocation, MAX_PATH, &iIndex, &uFlags); + + if (uFlags & GIL_NOTFILENAME) + ret = FALSE; + else + { + wcscpy (psfi->szDisplayName, szLocation); + psfi->iIcon = iIndex; + } + } + } + } + + /* get icon index (or load icon)*/ + if (SUCCEEDED(hr) && (flags & (SHGFI_ICON | SHGFI_SYSICONINDEX))) + { + if (flags & SHGFI_USEFILEATTRIBUTES && !(flags & SHGFI_PIDL)) + { + WCHAR sTemp [MAX_PATH]; + WCHAR * szExt; + int icon_idx=0; + + lstrcpynW(sTemp, szFullPath, MAX_PATH); + + if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + psfi->iIcon = SIC_GetIconIndex(swShell32Name, -IDI_SHELL_FOLDER, 0); + else + { + static const WCHAR p1W[] = {'%','1',0}; + + psfi->iIcon = 0; + szExt = PathFindExtensionW(sTemp); + if ( szExt && + HCR_MapTypeToValueW(szExt, sTemp, MAX_PATH, TRUE) && + HCR_GetDefaultIconW(sTemp, sTemp, MAX_PATH, &icon_idx)) + { + if (!lstrcmpW(p1W,sTemp)) /* icon is in the file */ + wcscpy(sTemp, szFullPath); + + if (flags & SHGFI_SYSICONINDEX) + { + psfi->iIcon = SIC_GetIconIndex(sTemp,icon_idx,0); + if (psfi->iIcon == -1) + psfi->iIcon = 0; + } + else + { + UINT ret; + if (flags & SHGFI_SMALLICON) + ret = PrivateExtractIconsW( sTemp,icon_idx, + GetSystemMetrics( SM_CXSMICON ), + GetSystemMetrics( SM_CYSMICON ), + &psfi->hIcon, 0, 1, 0); + else + ret = PrivateExtractIconsW( sTemp, icon_idx, + GetSystemMetrics( SM_CXICON), + GetSystemMetrics( SM_CYICON), + &psfi->hIcon, 0, 1, 0); + if (ret != 0 && ret != 0xFFFFFFFF) + { + IconNotYetLoaded=FALSE; + psfi->iIcon = icon_idx; + } + } + } + } + } + else + { + if (!(PidlToSicIndex(psfParent, pidlLast, !(flags & SHGFI_SMALLICON), + uGilFlags, &(psfi->iIcon)))) + { + ret = FALSE; + } + } + if (ret && (flags & SHGFI_SYSICONINDEX)) + { + if (flags & SHGFI_SMALLICON) + ret = (DWORD_PTR) ShellSmallIconList; + else + ret = (DWORD_PTR) ShellBigIconList; + } + } + + /* icon handle */ + if (SUCCEEDED(hr) && (flags & SHGFI_ICON) && IconNotYetLoaded) + { + if (flags & SHGFI_SMALLICON) + psfi->hIcon = ImageList_GetIcon( ShellSmallIconList, psfi->iIcon, ILD_NORMAL); + else + psfi->hIcon = ImageList_GetIcon( ShellBigIconList, psfi->iIcon, ILD_NORMAL); + } + + if (flags & ~SHGFI_KNOWN_FLAGS) + FIXME("unknown flags %08x\n", flags & ~SHGFI_KNOWN_FLAGS); + + if (hr != S_OK) + ret = FALSE; + + SHFree(pidlLast); + +#ifdef MORE_DEBUG + TRACE ("icon=%p index=0x%08x attr=0x%08x name=%s type=%s ret=0x%08lx\n", + psfi->hIcon, psfi->iIcon, psfi->dwAttributes, + debugstr_w(psfi->szDisplayName), debugstr_w(psfi->szTypeName), ret); +#endif + + return ret; +} + +/************************************************************************* + * SHGetFileInfoA [SHELL32.@] + * + * Note: + * MSVBVM60.__vbaNew2 expects this function to return a value in range + * 1 .. 0x7fff when the function succeeds and flags does not contain + * SHGFI_EXETYPE or SHGFI_SYSICONINDEX (see bug 7701) + */ +DWORD_PTR WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, + SHFILEINFOA *psfi, UINT sizeofpsfi, + UINT flags ) +{ + INT len; + LPWSTR temppath = NULL; + LPCWSTR pathW; + DWORD ret; + SHFILEINFOW temppsfi; + + if (flags & SHGFI_PIDL) + { + /* path contains a pidl */ + pathW = (LPCWSTR)path; + } + else + { + len = MultiByteToWideChar(CP_ACP, 0, path, -1, NULL, 0); + temppath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, path, -1, temppath, len); + pathW = temppath; + } + + if (psfi && (flags & SHGFI_ATTR_SPECIFIED)) + temppsfi.dwAttributes=psfi->dwAttributes; + + if (psfi == NULL) + ret = SHGetFileInfoW(pathW, dwFileAttributes, NULL, sizeof(temppsfi), flags); + else + ret = SHGetFileInfoW(pathW, dwFileAttributes, &temppsfi, sizeof(temppsfi), flags); + + if (psfi) + { + if(flags & SHGFI_ICON) + psfi->hIcon=temppsfi.hIcon; + if(flags & (SHGFI_SYSICONINDEX|SHGFI_ICON|SHGFI_ICONLOCATION)) + psfi->iIcon=temppsfi.iIcon; + if(flags & SHGFI_ATTRIBUTES) + psfi->dwAttributes=temppsfi.dwAttributes; + if(flags & (SHGFI_DISPLAYNAME|SHGFI_ICONLOCATION)) + { + WideCharToMultiByte(CP_ACP, 0, temppsfi.szDisplayName, -1, + psfi->szDisplayName, sizeof(psfi->szDisplayName), NULL, NULL); + } + if(flags & SHGFI_TYPENAME) + { + WideCharToMultiByte(CP_ACP, 0, temppsfi.szTypeName, -1, + psfi->szTypeName, sizeof(psfi->szTypeName), NULL, NULL); + } + } + + HeapFree(GetProcessHeap(), 0, temppath); + + return ret; +} + +/************************************************************************* + * DuplicateIcon [SHELL32.@] + */ +EXTERN_C HICON WINAPI DuplicateIcon( HINSTANCE hInstance, HICON hIcon) +{ + ICONINFO IconInfo; + HICON hDupIcon = 0; + + TRACE("%p %p\n", hInstance, hIcon); + + if (GetIconInfo(hIcon, &IconInfo)) + { + hDupIcon = CreateIconIndirect(&IconInfo); + + /* clean up hbmMask and hbmColor */ + DeleteObject(IconInfo.hbmMask); + DeleteObject(IconInfo.hbmColor); + } + + return hDupIcon; +} + +/************************************************************************* + * ExtractIconA [SHELL32.@] + */ +HICON WINAPI ExtractIconA(HINSTANCE hInstance, LPCSTR lpszFile, UINT nIconIndex) +{ + HICON ret; + INT len = MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, NULL, 0); + LPWSTR lpwstrFile = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + + TRACE("%p %s %d\n", hInstance, lpszFile, nIconIndex); + + MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, lpwstrFile, len); + ret = ExtractIconW(hInstance, lpwstrFile, nIconIndex); + HeapFree(GetProcessHeap(), 0, lpwstrFile); + + return ret; +} + +/************************************************************************* + * ExtractIconW [SHELL32.@] + */ +HICON WINAPI ExtractIconW(HINSTANCE hInstance, LPCWSTR lpszFile, UINT nIconIndex) +{ + HICON hIcon = NULL; + UINT ret; + UINT cx = GetSystemMetrics(SM_CXICON), cy = GetSystemMetrics(SM_CYICON); + + TRACE("%p %s %d\n", hInstance, debugstr_w(lpszFile), nIconIndex); + + if (nIconIndex == 0xFFFFFFFF) + { + ret = PrivateExtractIconsW(lpszFile, 0, cx, cy, NULL, NULL, 0, LR_DEFAULTCOLOR); + if (ret != 0xFFFFFFFF && ret) + return (HICON)(UINT_PTR)ret; + return NULL; + } + else + ret = PrivateExtractIconsW(lpszFile, nIconIndex, cx, cy, &hIcon, NULL, 1, LR_DEFAULTCOLOR); + + if (ret == 0xFFFFFFFF) + return (HICON)1; + else if (ret > 0 && hIcon) + return hIcon; + + return NULL; +} + +/************************************************************************* + * Printer_LoadIconsW [SHELL32.205] + */ +EXTERN_C VOID WINAPI Printer_LoadIconsW(LPCWSTR wsPrinterName, HICON * pLargeIcon, HICON * pSmallIcon) +{ + INT iconindex=IDI_SHELL_PRINTERS_FOLDER; + + TRACE("(%s, %p, %p)\n", debugstr_w(wsPrinterName), pLargeIcon, pSmallIcon); + + /* We should check if wsPrinterName is + 1. the Default Printer or not + 2. connected or not + 3. a Local Printer or a Network-Printer + and use different Icons + */ + if((wsPrinterName != NULL) && (wsPrinterName[0] != 0)) + { + FIXME("(select Icon by PrinterName %s not implemented)\n", debugstr_w(wsPrinterName)); + } + + if(pLargeIcon != NULL) + *pLargeIcon = (HICON)LoadImageW(shell32_hInstance, + (LPCWSTR) MAKEINTRESOURCE(iconindex), IMAGE_ICON, + 0, 0, LR_DEFAULTCOLOR|LR_DEFAULTSIZE); + + if(pSmallIcon != NULL) + *pSmallIcon = (HICON)LoadImageW(shell32_hInstance, + (LPCWSTR) MAKEINTRESOURCE(iconindex), IMAGE_ICON, + 16, 16, LR_DEFAULTCOLOR); +} + +/************************************************************************* + * Printers_RegisterWindowW [SHELL32.213] + * used by "printui.dll": + * find the Window of the given Type for the specific Printer and + * return the already existent hwnd or open a new window + */ +EXTERN_C BOOL WINAPI Printers_RegisterWindowW(LPCWSTR wsPrinter, DWORD dwType, + HANDLE * phClassPidl, HWND * phwnd) +{ + FIXME("(%s, %x, %p (%p), %p (%p)) stub!\n", debugstr_w(wsPrinter), dwType, + phClassPidl, (phClassPidl != NULL) ? *(phClassPidl) : NULL, + phwnd, (phwnd != NULL) ? *(phwnd) : NULL); + + return FALSE; +} + +/************************************************************************* + * Printers_UnregisterWindow [SHELL32.214] + */ +EXTERN_C VOID WINAPI Printers_UnregisterWindow(HANDLE hClassPidl, HWND hwnd) +{ + FIXME("(%p, %p) stub!\n", hClassPidl, hwnd); +} + +/*************************************************************************/ + +typedef struct +{ + LPCWSTR szApp; + LPCWSTR szOtherStuff; + HICON hIcon; +} ABOUT_INFO; + +#define DROP_FIELD_TOP (-15) +#define DROP_FIELD_HEIGHT 15 + +/************************************************************************* + * SHAppBarMessage [SHELL32.@] + */ +UINT_PTR WINAPI SHAppBarMessage(DWORD msg, PAPPBARDATA data) +{ + int width=data->rc.right - data->rc.left; + int height=data->rc.bottom - data->rc.top; + RECT rec=data->rc; + + TRACE("msg=%d, data={cb=%d, hwnd=%p, callback=%x, edge=%d, rc=%s, lparam=%lx}\n", + msg, data->cbSize, data->hWnd, data->uCallbackMessage, data->uEdge, + wine_dbgstr_rect(&data->rc), data->lParam); + + switch (msg) + { + case ABM_GETSTATE: + return ABS_ALWAYSONTOP | ABS_AUTOHIDE; + case ABM_GETTASKBARPOS: + GetWindowRect(data->hWnd, &rec); + data->rc=rec; + return TRUE; + case ABM_ACTIVATE: + SetActiveWindow(data->hWnd); + return TRUE; + case ABM_GETAUTOHIDEBAR: + return 0; /* pretend there is no autohide bar */ + case ABM_NEW: + /* cbSize, hWnd, and uCallbackMessage are used. All other ignored */ + SetWindowPos(data->hWnd,HWND_TOP,0,0,0,0,SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE); + return TRUE; + case ABM_QUERYPOS: + GetWindowRect(data->hWnd, &(data->rc)); + return TRUE; + case ABM_REMOVE: + FIXME("ABM_REMOVE broken\n"); + /* FIXME: this is wrong; should it be DestroyWindow instead? */ + /*CloseHandle(data->hWnd);*/ + return TRUE; + case ABM_SETAUTOHIDEBAR: + SetWindowPos(data->hWnd,HWND_TOP,rec.left+1000,rec.top, + width,height,SWP_SHOWWINDOW); + return TRUE; + case ABM_SETPOS: + data->uEdge=(ABE_RIGHT | ABE_LEFT); + SetWindowPos(data->hWnd,HWND_TOP,data->rc.left,data->rc.top, + width,height,SWP_SHOWWINDOW); + return TRUE; + case ABM_WINDOWPOSCHANGED: + return TRUE; + } + return FALSE; +} + +/************************************************************************* + * SHHelpShortcuts_RunDLLA [SHELL32.@] + * + */ +EXTERN_C DWORD WINAPI SHHelpShortcuts_RunDLLA(DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4) +{ + FIXME("(%x, %x, %x, %x) stub!\n", dwArg1, dwArg2, dwArg3, dwArg4); + return 0; +} + +/************************************************************************* + * SHHelpShortcuts_RunDLLA [SHELL32.@] + * + */ +EXTERN_C DWORD WINAPI SHHelpShortcuts_RunDLLW(DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4) +{ + FIXME("(%x, %x, %x, %x) stub!\n", dwArg1, dwArg2, dwArg3, dwArg4); + return 0; +} + +/************************************************************************* + * SHLoadInProc [SHELL32.@] + * Create an instance of specified object class from within + * the shell process and release it immediately + */ +EXTERN_C HRESULT WINAPI SHLoadInProc (REFCLSID rclsid) +{ + CComPtr ptr; + + TRACE("%s\n", debugstr_guid(&rclsid)); + + CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&ptr); + if (ptr) + return NOERROR; + return DISP_E_MEMBERNOTFOUND; +} + +static VOID SetRegTextData(HWND hWnd, HKEY hKey, LPCWSTR Value, UINT uID) +{ + DWORD dwBufferSize; + DWORD dwType; + LPWSTR lpBuffer; + + if( RegQueryValueExW(hKey, Value, NULL, &dwType, NULL, &dwBufferSize) == ERROR_SUCCESS ) + { + if(dwType == REG_SZ) + { + lpBuffer = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwBufferSize); + + if(lpBuffer) + { + if( RegQueryValueExW(hKey, Value, NULL, &dwType, (LPBYTE)lpBuffer, &dwBufferSize) == ERROR_SUCCESS ) + { + SetDlgItemTextW(hWnd, uID, lpBuffer); + } + + HeapFree(GetProcessHeap(), 0, lpBuffer); + } + } + } +} + +INT_PTR CALLBACK AboutAuthorsDlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) +{ + switch(msg) + { + case WM_INITDIALOG: + { + const char* const *pstr = SHELL_Authors; + + // Add the authors to the list + SendDlgItemMessageW( hWnd, IDC_SHELL_ABOUT_AUTHORS_LISTBOX, WM_SETREDRAW, FALSE, 0 ); + + while (*pstr) + { + WCHAR name[64]; + + /* authors list is in utf-8 format */ + MultiByteToWideChar( CP_UTF8, 0, *pstr, -1, name, sizeof(name)/sizeof(WCHAR) ); + SendDlgItemMessageW( hWnd, IDC_SHELL_ABOUT_AUTHORS_LISTBOX, LB_ADDSTRING, (WPARAM)-1, (LPARAM)name ); + pstr++; + } + + SendDlgItemMessageW( hWnd, IDC_SHELL_ABOUT_AUTHORS_LISTBOX, WM_SETREDRAW, TRUE, 0 ); + + return TRUE; + } + } + + return FALSE; +} +/************************************************************************* + * AboutDlgProc (internal) + */ +INT_PTR CALLBACK AboutDlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) +{ + static DWORD cxLogoBmp; + static DWORD cyLogoBmp; + static HBITMAP hLogoBmp; + static HWND hWndAuthors; + + switch(msg) + { + case WM_INITDIALOG: + { + ABOUT_INFO *info = (ABOUT_INFO *)lParam; + + if (info) + { + const WCHAR szRegKey[] = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; + HKEY hRegKey; + MEMORYSTATUSEX MemStat; + WCHAR szAppTitle[512]; + WCHAR szAppTitleTemplate[512]; + WCHAR szAuthorsText[20]; + + // Preload the ROS bitmap + hLogoBmp = (HBITMAP)LoadImage(shell32_hInstance, MAKEINTRESOURCE(IDB_SHELL_ABOUT_LOGO_24BPP), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); + + if(hLogoBmp) + { + BITMAP bmpLogo; + + GetObject( hLogoBmp, sizeof(BITMAP), &bmpLogo ); + + cxLogoBmp = bmpLogo.bmWidth; + cyLogoBmp = bmpLogo.bmHeight; + } + + // Set App-specific stuff (icon, app name, szOtherStuff string) + SendDlgItemMessageW(hWnd, IDC_SHELL_ABOUT_ICON, STM_SETICON, (WPARAM)info->hIcon, 0); + + GetWindowTextW( hWnd, szAppTitleTemplate, sizeof(szAppTitleTemplate) / sizeof(WCHAR) ); + swprintf( szAppTitle, szAppTitleTemplate, info->szApp ); + SetWindowTextW( hWnd, szAppTitle ); + + SetDlgItemTextW( hWnd, IDC_SHELL_ABOUT_APPNAME, info->szApp ); + SetDlgItemTextW( hWnd, IDC_SHELL_ABOUT_OTHERSTUFF, info->szOtherStuff ); + + // Set the registered user and organization name + if(RegOpenKeyExW( HKEY_LOCAL_MACHINE, szRegKey, 0, KEY_QUERY_VALUE, &hRegKey ) == ERROR_SUCCESS) + { + SetRegTextData( hWnd, hRegKey, L"RegisteredOwner", IDC_SHELL_ABOUT_REG_USERNAME ); + SetRegTextData( hWnd, hRegKey, L"RegisteredOrganization", IDC_SHELL_ABOUT_REG_ORGNAME ); + + RegCloseKey( hRegKey ); + } + + // Set the value for the installed physical memory + MemStat.dwLength = sizeof(MemStat); + if( GlobalMemoryStatusEx(&MemStat) ) + { + WCHAR szBuf[12]; + + if (MemStat.ullTotalPhys > 1024 * 1024 * 1024) + { + double dTotalPhys; + WCHAR szDecimalSeparator[4]; + WCHAR szUnits[3]; + + // We're dealing with GBs or more + MemStat.ullTotalPhys /= 1024 * 1024; + + if (MemStat.ullTotalPhys > 1024 * 1024) + { + // We're dealing with TBs or more + MemStat.ullTotalPhys /= 1024; + + if (MemStat.ullTotalPhys > 1024 * 1024) + { + // We're dealing with PBs or more + MemStat.ullTotalPhys /= 1024; + + dTotalPhys = (double)MemStat.ullTotalPhys / 1024; + wcscpy( szUnits, L"PB" ); + } + else + { + dTotalPhys = (double)MemStat.ullTotalPhys / 1024; + wcscpy( szUnits, L"TB" ); + } + } + else + { + dTotalPhys = (double)MemStat.ullTotalPhys / 1024; + wcscpy( szUnits, L"GB" ); + } + + // We need the decimal point of the current locale to display the RAM size correctly + if( GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, szDecimalSeparator, sizeof(szDecimalSeparator) / sizeof(WCHAR)) > 0) + { + UCHAR uDecimals; + UINT uIntegral; + + uIntegral = (UINT)dTotalPhys; + uDecimals = (UCHAR)((UINT)(dTotalPhys * 100) - uIntegral * 100); + + // Display the RAM size with 2 decimals + swprintf(szBuf, L"%u%s%02u %s", uIntegral, szDecimalSeparator, uDecimals, szUnits); + } + } + else + { + // We're dealing with MBs, don't show any decimals + swprintf( szBuf, L"%u MB", (UINT)MemStat.ullTotalPhys / 1024 / 1024 ); + } + + SetDlgItemTextW( hWnd, IDC_SHELL_ABOUT_PHYSMEM, szBuf); + } + + // Add the Authors dialog + hWndAuthors = CreateDialogW( shell32_hInstance, MAKEINTRESOURCEW(IDD_SHELL_ABOUT_AUTHORS), hWnd, AboutAuthorsDlgProc ); + LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); + SetDlgItemTextW( hWnd, IDC_SHELL_ABOUT_AUTHORS, szAuthorsText ); + } + + return TRUE; + } + + case WM_PAINT: + { + if(hLogoBmp) + { + PAINTSTRUCT ps; + HDC hdc; + HDC hdcMem; + + hdc = BeginPaint(hWnd, &ps); + hdcMem = CreateCompatibleDC(hdc); + + if(hdcMem) + { + SelectObject(hdcMem, hLogoBmp); + BitBlt(hdc, 0, 0, cxLogoBmp, cyLogoBmp, hdcMem, 0, 0, SRCCOPY); + + DeleteDC(hdcMem); + } + + EndPaint(hWnd, &ps); + } + + break; + } + + case WM_COMMAND: + switch(wParam) + { + case IDOK: + case IDCANCEL: + EndDialog(hWnd, TRUE); + return TRUE; + + case IDC_SHELL_ABOUT_AUTHORS: + { + static BOOL bShowingAuthors = FALSE; + WCHAR szAuthorsText[20]; + + if(bShowingAuthors) + { + LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); + ShowWindow( hWndAuthors, SW_HIDE ); + } + else + { + LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_BACK, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); + ShowWindow( hWndAuthors, SW_SHOW ); + } + + SetDlgItemTextW( hWnd, IDC_SHELL_ABOUT_AUTHORS, szAuthorsText ); + bShowingAuthors = !bShowingAuthors; + return TRUE; + } + } + break; + + case WM_CLOSE: + EndDialog(hWnd, TRUE); + break; + } + + return FALSE; +} + + +/************************************************************************* + * ShellAboutA [SHELL32.288] + */ +BOOL WINAPI ShellAboutA( HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon ) +{ + BOOL ret; + LPWSTR appW = NULL, otherW = NULL; + int len; + + if (szApp) + { + len = MultiByteToWideChar(CP_ACP, 0, szApp, -1, NULL, 0); + appW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, szApp, -1, appW, len); + } + if (szOtherStuff) + { + len = MultiByteToWideChar(CP_ACP, 0, szOtherStuff, -1, NULL, 0); + otherW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, szOtherStuff, -1, otherW, len); + } + + ret = ShellAboutW(hWnd, appW, otherW, hIcon); + + HeapFree(GetProcessHeap(), 0, otherW); + HeapFree(GetProcessHeap(), 0, appW); + return ret; +} + + +/************************************************************************* + * ShellAboutW [SHELL32.289] + */ +BOOL WINAPI ShellAboutW( HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, + HICON hIcon ) +{ + ABOUT_INFO info; + HRSRC hRes; + DLGTEMPLATE *DlgTemplate; + BOOL bRet; + + TRACE("\n"); + + // DialogBoxIndirectParamW will be called with the hInstance of the calling application, so we have to preload the dialog template + if(!(hRes = FindResourceW(shell32_hInstance, MAKEINTRESOURCEW(IDD_SHELL_ABOUT), (LPWSTR)RT_DIALOG))) + return FALSE; + if(!(DlgTemplate = (DLGTEMPLATE *)LoadResource(shell32_hInstance, hRes))) + return FALSE; + + info.szApp = szApp; + info.szOtherStuff = szOtherStuff; + info.hIcon = hIcon ? hIcon : LoadIconW( 0, (LPWSTR)IDI_WINLOGO ); + + bRet = DialogBoxIndirectParamW((HINSTANCE)GetWindowLongPtrW( hWnd, GWLP_HINSTANCE ), + DlgTemplate, hWnd, AboutDlgProc, (LPARAM)&info ); + return bRet; +} + +/************************************************************************* + * FreeIconList (SHELL32.@) + */ +EXTERN_C void WINAPI FreeIconList( DWORD dw ) +{ + FIXME("%x: stub\n",dw); +} + +/************************************************************************* + * SHLoadNonloadedIconOverlayIdentifiers (SHELL32.@) + */ +EXTERN_C HRESULT WINAPI SHLoadNonloadedIconOverlayIdentifiers( VOID ) +{ + FIXME("stub\n"); + return S_OK; +} + +class CShell32Module : public CComModule +{ +public: +}; + + +BEGIN_OBJECT_MAP(ObjectMap) +OBJECT_ENTRY(CLSID_ShellFSFolder, CFSFolder) +OBJECT_ENTRY(CLSID_MyComputer, CDrivesFolder) +OBJECT_ENTRY(CLSID_ShellDesktop, CDesktopFolder) +OBJECT_ENTRY(CLSID_ShellItem, ShellItem) +OBJECT_ENTRY(CLSID_ShellLink, ShellLink) +OBJECT_ENTRY(CLSID_DragDropHelper, IDropTargetHelperImpl) +OBJECT_ENTRY(CLSID_ControlPanel, CControlPanelFolder) +OBJECT_ENTRY(CLSID_AutoComplete, CAutoComplete) +OBJECT_ENTRY(CLSID_MyDocuments, CMyDocsFolder) +OBJECT_ENTRY(CLSID_NetworkPlaces, CNetFolder) +OBJECT_ENTRY(CLSID_FontsFolderShortcut, CFontsFolder) +OBJECT_ENTRY(CLSID_Printers, CPrinterFolder) +OBJECT_ENTRY(CLSID_AdminFolderShortcut, CAdminToolsFolder) +OBJECT_ENTRY(CLSID_RecycleBin, CBitBucket) +OBJECT_ENTRY(CLSID_OpenWithMenu, COpenWithMenu) +OBJECT_ENTRY(CLSID_NewMenu, CNewMenu) +OBJECT_ENTRY(CLSID_StartMenu, CStartMenuCallback) +OBJECT_ENTRY(CLSID_MenuBandSite, CMenuBandSite) +END_OBJECT_MAP() + +CShell32Module gModule; + + +/* +static const struct { + REFIID riid; + LPFNCREATEINSTANCE lpfnCI; +} InterfaceTable[] = { + {CLSID_ShellFSFolder, &IFSFolder_Constructor}, + {CLSID_MyComputer, &ISF_MyComputer_Constructor}, + {CLSID_ShellDesktop, &ISF_Desktop_Constructor}, + {CLSID_ShellItem, &IShellItem_Constructor}, + {CLSID_ShellLink, &IShellLink_Constructor}, + {CLSID_DragDropHelper, &IDropTargetHelper_Constructor}, + {CLSID_ControlPanel, &IControlPanel_Constructor}, + {CLSID_AutoComplete, &IAutoComplete_Constructor}, + {CLSID_MyDocuments, &ISF_MyDocuments_Constructor}, + {CLSID_NetworkPlaces, &ISF_NetworkPlaces_Constructor}, + {CLSID_FontsFolderShortcut, &ISF_Fonts_Constructor}, + {CLSID_Printers, &ISF_Printers_Constructor}, + {CLSID_AdminFolderShortcut, &ISF_AdminTools_Constructor}, + {CLSID_RecycleBin, &RecycleBin_Constructor}, + {CLSID_OpenWithMenu, &SHEOW_Constructor}, + {CLSID_NewMenu, &INewItem_Constructor}, + {CLSID_StartMenu, &StartMenu_Constructor}, + {CLSID_MenuBandSite, &MenuBandSite_Constructor}, +}; +*/ + +/*********************************************************************** + * DllGetVersion [SHELL32.@] + * + * Retrieves version information of the 'SHELL32.DLL' + * + * PARAMS + * pdvi [O] pointer to version information structure. + * + * RETURNS + * Success: S_OK + * Failure: E_INVALIDARG + * + * NOTES + * Returns version of a shell32.dll from IE4.01 SP1. + */ + +STDAPI DllGetVersion(DLLVERSIONINFO *pdvi) +{ + /* FIXME: shouldn't these values come from the version resource? */ + if (pdvi->cbSize == sizeof(DLLVERSIONINFO) || + pdvi->cbSize == sizeof(DLLVERSIONINFO2)) + { + pdvi->dwMajorVersion = WINE_FILEVERSION_MAJOR; + pdvi->dwMinorVersion = WINE_FILEVERSION_MINOR; + pdvi->dwBuildNumber = WINE_FILEVERSION_BUILD; + pdvi->dwPlatformID = WINE_FILEVERSION_PLATFORMID; + if (pdvi->cbSize == sizeof(DLLVERSIONINFO2)) + { + DLLVERSIONINFO2 *pdvi2 = (DLLVERSIONINFO2 *)pdvi; + + pdvi2->dwFlags = 0; + pdvi2->ullVersion = MAKEDLLVERULL(WINE_FILEVERSION_MAJOR, + WINE_FILEVERSION_MINOR, + WINE_FILEVERSION_BUILD, + WINE_FILEVERSION_PLATFORMID); + } + TRACE("%u.%u.%u.%u\n", + pdvi->dwMajorVersion, pdvi->dwMinorVersion, + pdvi->dwBuildNumber, pdvi->dwPlatformID); + return S_OK; + } + else + { + WARN("wrong DLLVERSIONINFO size from app\n"); + return E_INVALIDARG; + } +} + +/************************************************************************* + * global variables of the shell32.dll + * all are once per process + * + */ +HINSTANCE shell32_hInstance; +HIMAGELIST ShellSmallIconList = 0; +HIMAGELIST ShellBigIconList = 0; + +void *operator new (size_t, void *buf) +{ + return buf; +} + +/************************************************************************* + * SHELL32 DllMain + * + * NOTES + * calling oleinitialize here breaks sone apps. + */ +STDAPI_(BOOL) DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID fImpLoad) +{ + TRACE("%p 0x%x %p\n", hInstance, dwReason, fImpLoad); + if (dwReason == DLL_PROCESS_ATTACH) + { + /* HACK - the global constructors don't run, so I placement new them here */ + new (&gModule) CShell32Module; + new (&_AtlWinModule) CAtlWinModule; + new (&_AtlBaseModule) CAtlBaseModule; + new (&_AtlComModule) CAtlComModule; + + shell32_hInstance = hInstance; + gModule.Init(ObjectMap, hInstance, NULL); + + DisableThreadLibraryCalls (hInstance); + + /* get full path to this DLL for IExtractIconW_fnGetIconLocation() */ + GetModuleFileNameW(hInstance, swShell32Name, MAX_PATH); + swShell32Name[MAX_PATH - 1] = '\0'; + + InitCommonControlsEx(NULL); + + SIC_Initialize(); + InitChangeNotifications(); + InitIconOverlays(); + } + else if (dwReason == DLL_PROCESS_DETACH) + { + shell32_hInstance = NULL; + SIC_Destroy(); + FreeChangeNotifications(); + gModule.Term(); + } + return TRUE; +} + +/*********************************************************************** + * DllCanUnloadNow (SHELL32.@) + */ +STDAPI DllCanUnloadNow() +{ + return gModule.DllCanUnloadNow(); +} + +/************************************************************************* + * DllGetClassObject [SHELL32.@] + * SHDllGetClassObject [SHELL32.128] + */ +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) +{ + HRESULT hResult; + + TRACE("CLSID:%s,IID:%s\n", shdebugstr_guid(&rclsid), shdebugstr_guid(&riid)); + + hResult = gModule.DllGetClassObject(rclsid, riid, ppv); + TRACE("-- pointer to class factory: %p\n", *ppv); + return hResult; +} + +/*********************************************************************** + * DllRegisterServer (BROWSEUI.@) + */ +STDAPI DllRegisterServer() +{ + return gModule.DllRegisterServer(FALSE); +} + +/*********************************************************************** + * DllUnregisterServer (BROWSEUI.@) + */ +STDAPI DllUnregisterServer() +{ + return gModule.DllUnregisterServer(FALSE); +} + +/************************************************************************* + * DllInstall [SHELL32.@] + * + * PARAMETERS + * + * BOOL bInstall - TRUE for install, FALSE for uninstall + * LPCWSTR pszCmdLine - command line (unused by shell32?) + */ + +HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline) +{ + FIXME("%s %s: stub\n", bInstall ? "TRUE":"FALSE", debugstr_w(cmdline)); + return S_OK; /* indicate success */ +} diff --git a/reactos/dll/win32/shell32_new/shell32_main.h b/reactos/dll/win32/shell32_new/shell32_main.h new file mode 100644 index 00000000000..729e4423a8c --- /dev/null +++ b/reactos/dll/win32/shell32_new/shell32_main.h @@ -0,0 +1,220 @@ +/* + * internal Shell32 Library definitions + * + * Copyright 1998 Marcus Meissner + * Copyright 1998 Juergen Schmied (jsch) * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_SHELL_MAIN_H +#define __WINE_SHELL_MAIN_H + +#include +#include + +/* +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winuser.h" +#include "winnls.h" +#include "commctrl.h" +#include "objbase.h" +#include "docobj.h" +#include "undocshell.h" +#include "shlobj.h" +#include "shellapi.h" +#include "wine/windef16.h" +*/ +#include "wine/unicode.h" + + +/******************************************* +* global SHELL32.DLL variables +*/ +extern HMODULE huser32; +extern HINSTANCE shell32_hInstance; +extern HIMAGELIST ShellSmallIconList; +extern HIMAGELIST ShellBigIconList; + +extern "C" BOOL WINAPI Shell_GetImageLists(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList); + +/* Iconcache */ +#define INVALID_INDEX -1 +BOOL SIC_Initialize(void); +void SIC_Destroy(void); +BOOL PidlToSicIndex (IShellFolder * sh, LPCITEMIDLIST pidl, BOOL bBigIcon, UINT uFlags, int * pIndex); +INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags ); + +/* Classes Root */ +BOOL HCR_MapTypeToValueW(LPCWSTR szExtension, LPWSTR szFileType, LONG len, BOOL bPrependDot); +BOOL HCR_GetDefaultVerbW( HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len ); +BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len ); +BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, int* picon_idx); +BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, int* picon_idx); +BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len); + +/* ANSI versions of above functions, supposed to go away as soon as they are not used anymore */ +BOOL HCR_MapTypeToValueA(LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bPrependDot); +BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, int* picon_idx); +BOOL HCR_GetClassNameA(REFIID riid, LPSTR szDest, DWORD len); + +BOOL HCR_GetFolderAttributes(LPCITEMIDLIST pidlFolder, LPDWORD dwAttributes); + +INT_PTR CALLBACK AboutDlgProc(HWND,UINT,WPARAM,LPARAM); +DWORD WINAPI ParseFieldA(LPCSTR src, DWORD nField, LPSTR dst, DWORD len); +DWORD WINAPI ParseFieldW(LPCWSTR src, DWORD nField, LPWSTR dst, DWORD len); + +/**************************************************************************** + * Class constructors + */ +HRESULT IDataObject_Constructor(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidl, UINT cidl, IDataObject **dataObject); +HRESULT IEnumFORMATETC_Constructor(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **enumerator); + +LPCLASSFACTORY IClassFactory_Constructor(REFCLSID); +IContextMenu2 * ISvItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, const LPCITEMIDLIST *aPidls, UINT uItemCount); +HRESULT WINAPI INewItem_Constructor(IUnknown * pUnkOuter, REFIID riif, LPVOID *ppv); +IContextMenu2 * ISvStaticItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *apidl, UINT cidl, HKEY hKey); +IContextMenu2 * ISvBgCm_Constructor(LPSHELLFOLDER pSFParent, BOOL bDesktop); +HRESULT WINAPI IShellView_Constructor(IShellFolder *pFolder, IShellView **newView); + +HRESULT WINAPI IShellLink_ConstructFromFile(IUnknown * pUnkOuter, REFIID riid, LPCITEMIDLIST pidl, LPVOID * ppv); +HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV); +extern HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST, LPWSTR, UINT, int*); +HRESULT WINAPI CPanel_ExtractIconA(LPITEMIDLIST pidl, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); +HRESULT WINAPI CPanel_ExtractIconW(LPITEMIDLIST pidl, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); + +LPEXTRACTICONA IExtractIconA_Constructor(LPCITEMIDLIST); +LPEXTRACTICONW IExtractIconW_Constructor(LPCITEMIDLIST); + +/* initialisation for FORMATETC */ +#define InitFormatEtc(fe, cf, med) \ + {\ + (fe).cfFormat=cf;\ + (fe).dwAspect=DVASPECT_CONTENT;\ + (fe).ptd=NULL;\ + (fe).tymed=med;\ + (fe).lindex=-1;\ + }; + +#define KeyStateToDropEffect(kst)\ + ((((kst)&(MK_CONTROL|MK_SHIFT))==(MK_CONTROL|MK_SHIFT)) ? DROPEFFECT_LINK :\ + (((kst)&(MK_CONTROL|MK_SHIFT)) ? DROPEFFECT_COPY :\ + DROPEFFECT_MOVE)) + + +HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); +HGLOBAL RenderSHELLIDLIST (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); +HGLOBAL RenderSHELLIDLISTOFFSET (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); +HGLOBAL RenderFILECONTENTS (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); +HGLOBAL RenderFILEDESCRIPTOR (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); +HGLOBAL RenderFILENAMEA (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); +HGLOBAL RenderFILENAMEW (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); +HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags); + +/* Change Notification */ +void InitChangeNotifications(void); +void FreeChangeNotifications(void); +void InitIconOverlays(void); + +/* file operation */ +#define ASK_DELETE_FILE 1 +#define ASK_DELETE_FOLDER 2 +#define ASK_DELETE_MULTIPLE_ITEM 3 +#define ASK_CREATE_FOLDER 4 +#define ASK_OVERWRITE_FILE 5 +#define ASK_DELETE_SELECTED 6 +#define ASK_TRASH_FILE 7 +#define ASK_TRASH_FOLDER 8 +#define ASK_TRASH_MULTIPLE_ITEM 9 +#define ASK_CANT_TRASH_ITEM 10 +#define ASK_OVERWRITE_FOLDER 11 + +BOOL SHELL_DeleteDirectoryW(HWND hwnd, LPCWSTR pwszDir, BOOL bShowUI); +BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir); + +void WINAPI _InsertMenuItemW (HMENU hmenu, UINT indexMenu, BOOL fByPosition, + UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState); + +static BOOL __inline SHELL_OsIsUnicode(void) +{ + /* if high-bit of version is 0, we are emulating NT */ + return !(GetVersion() & 0x80000000); +} + +#define __SHFreeAndNil(ptr) \ + {\ + SHFree(*ptr); \ + *ptr = NULL; \ + }; +static void __inline __SHCloneStrA(char **target, const char *source) +{ + *target = (char *)SHAlloc(strlen(source) + 1); + strcpy(*target, source); +} + +static void __inline __SHCloneStrWtoA(char **target, const WCHAR *source) +{ + int len = WideCharToMultiByte(CP_ACP, 0, source, -1, NULL, 0, NULL, NULL); + *target = (char *)SHAlloc(len); + WideCharToMultiByte(CP_ACP, 0, source, -1, *target, len, NULL, NULL); +} + +static void __inline __SHCloneStrW(WCHAR **target, const WCHAR *source) +{ + *target = (WCHAR *)SHAlloc((lstrlenW(source) + 1) * sizeof(WCHAR) ); + lstrcpyW(*target, source); +} + +static LPWSTR __inline __SHCloneStrAtoW(WCHAR **target, const char *source) +{ + int len = MultiByteToWideChar(CP_ACP, 0, source, -1, NULL, 0); + *target = (WCHAR *)SHAlloc(len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, source, -1, *target, len); + return *target; +} + +/* handle conversions */ +#define HICON_16(h32) (LOWORD(h32)) +#define HICON_32(h16) ((HICON)(ULONG_PTR)(h16)) +#define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16)) +#define HINSTANCE_16(h32) (LOWORD(h32)) + +typedef UINT_PTR (*SHELL_ExecuteW32)(const WCHAR *lpCmd, WCHAR *env, BOOL shWait, + const SHELLEXECUTEINFOW *sei, LPSHELLEXECUTEINFOW sei_out); + +BOOL SHELL_execute(LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc); + +extern WCHAR swShell32Name[MAX_PATH]; + +BOOL UNIXFS_is_rooted_at_desktop(void); +extern const GUID CLSID_UnixFolder; +extern const GUID CLSID_UnixDosFolder; + +/* Default shell folder value registration */ +HRESULT SHELL_RegisterShellFolders(void); + +/* Detect Shell Links */ +BOOL SHELL_IsShortcut(LPCITEMIDLIST); + +INT_PTR CALLBACK SH_FileGeneralDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +INT_PTR CALLBACK SH_FileVersionDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +HPROPSHEETPAGE SH_CreatePropertySheetPage(LPCSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle); +BOOL SH_ShowDriveProperties(WCHAR * drive, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST * apidl); +BOOL SH_ShowRecycleBinProperties(WCHAR sDrive); +BOOL SH_ShowPropertiesDialog(LPWSTR lpf, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST * apidl); +BOOL SH_ShowFolderProperties(LPWSTR pwszFolder, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST * apidl); +#endif diff --git a/reactos/dll/win32/shell32_new/shellfolder.h b/reactos/dll/win32/shell32_new/shellfolder.h new file mode 100644 index 00000000000..7b8bd898271 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shellfolder.h @@ -0,0 +1,69 @@ +/* + * Defines helper functions to manipulate the contents of an IShellFolder + * + * Copyright 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_SHELLFOLDER_HELP_H +#define __WINE_SHELLFOLDER_HELP_H + +#include + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" + +#include "shlobj.h" + +/***************************************************************************** + * Predeclare the interfaces + */ +DEFINE_GUID(IID_ISFHelper, 0x1fe68efbL, 0x1874, 0x9812, 0x56, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); + +/***************************************************************************** + * ISFHelper interface + */ +#undef INTERFACE + +#define INTERFACE ISFHelper +DECLARE_INTERFACE_(ISFHelper,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** ISFHelper methods ***/ + STDMETHOD(GetUniqueName)(THIS_ LPWSTR lpName, UINT uLen) PURE; + STDMETHOD(AddFolder)(THIS_ HWND hwnd, LPCWSTR lpName, LPITEMIDLIST * ppidlOut) PURE; + STDMETHOD(DeleteItems)(THIS_ UINT cidl, LPCITEMIDLIST * apidl) PURE; + STDMETHOD(CopyItems)(THIS_ IShellFolder * pSFFrom, UINT cidl, LPCITEMIDLIST * apidl) PURE; +}; +#undef INTERFACE + +#ifdef COBJMACROS +/*** IUnknown methods ***/ +#define ISFHelper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define ISFHelper_AddRef(p) (p)->lpVtbl->AddRef(p) +#define ISFHelper_Release(p) (p)->lpVtbl->Release(p) +/*** ISFHelper methods ***/ +#define ISFHelper_GetUniqueName(p,a,b) (p)->lpVtbl->GetUniqueName(p,a,b) +#define ISFHelper_AddFolder(p,a,b,c) (p)->lpVtbl->AddFolder(p,a,b,c) +#define ISFHelper_DeleteItems(p,a,b) (p)->lpVtbl->DeleteItems(p,a,b) +#define ISFHelper_CopyItems(p,a,b,c) (p)->lpVtbl->CopyItems(p,a,b,c) +#endif + +#endif /* __WINE_SHELLFOLDER_HELP_H */ diff --git a/reactos/dll/win32/shell32_new/shellitem.cpp b/reactos/dll/win32/shell32_new/shellitem.cpp new file mode 100644 index 00000000000..4a7b52d3383 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shellitem.cpp @@ -0,0 +1,253 @@ +/* + * IShellItem implementation + * + * Copyright 2008 Vincent Povirk for CodeWeavers + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "precomp.h" +#include +#include +#include +#include +#include "shellitem.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +EXTERN_C HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST pidlParent, + IShellFolder *psfParent, LPCITEMIDLIST pidl, IShellItem **ppsi); + +ShellItem::ShellItem() +{ + pidl = NULL; +} + +ShellItem::~ShellItem() +{ + ILFree(pidl); +} + +HRESULT ShellItem::get_parent_pidl(LPITEMIDLIST *parent_pidl) +{ + *parent_pidl = ILClone(pidl); + if (*parent_pidl) + { + if (ILRemoveLastID(*parent_pidl)) + return S_OK; + else + { + ILFree(*parent_pidl); + *parent_pidl = NULL; + return E_INVALIDARG; + } + } + else + { + *parent_pidl = NULL; + return E_OUTOFMEMORY; + } +} + +HRESULT ShellItem::get_parent_shellfolder(IShellFolder **ppsf) +{ + LPITEMIDLIST parent_pidl; + CComPtr desktop; + HRESULT ret; + + ret = get_parent_pidl(&parent_pidl); + if (SUCCEEDED(ret)) + { + ret = SHGetDesktopFolder(&desktop); + if (SUCCEEDED(ret)) + ret = desktop->BindToObject(parent_pidl, NULL, IID_IShellFolder, (void**)ppsf); + ILFree(parent_pidl); + } + + return ret; +} + +HRESULT WINAPI ShellItem::BindToHandler(IBindCtx *pbc, REFGUID rbhid, REFIID riid, void **ppvOut) +{ + FIXME("(%p,%p,%s,%p,%p)\n", this, pbc, shdebugstr_guid(&rbhid), riid, ppvOut); + + *ppvOut = NULL; + + return E_NOTIMPL; +} + +HRESULT WINAPI ShellItem::GetParent(IShellItem **ppsi) +{ + LPITEMIDLIST parent_pidl; + HRESULT ret; + + TRACE("(%p,%p)\n", this, ppsi); + + ret = get_parent_pidl(&parent_pidl); + if (SUCCEEDED(ret)) + { + ret = SHCreateShellItem(NULL, NULL, parent_pidl, ppsi); + ILFree(parent_pidl); + } + + return ret; +} + +HRESULT WINAPI ShellItem::GetDisplayName(SIGDN sigdnName, LPWSTR *ppszName) +{ + FIXME("(%p,%x,%p)\n", this, sigdnName, ppszName); + + *ppszName = NULL; + + return E_NOTIMPL; +} + +HRESULT WINAPI ShellItem::GetAttributes(SFGAOF sfgaoMask, SFGAOF *psfgaoAttribs) +{ + CComPtr parent_folder; + LPITEMIDLIST child_pidl; + HRESULT ret; + + TRACE("(%p,%x,%p)\n", this, sfgaoMask, psfgaoAttribs); + + ret = get_parent_shellfolder(&parent_folder); + if (SUCCEEDED(ret)) + { + child_pidl = ILFindLastID(pidl); + *psfgaoAttribs = sfgaoMask; + ret = parent_folder->GetAttributesOf(1, (LPCITEMIDLIST*)&child_pidl, psfgaoAttribs); + } + + return ret; +} + +HRESULT WINAPI ShellItem::Compare(IShellItem *oth, SICHINTF hint, int *piOrder) +{ + FIXME("(%p,%p,%x,%p)\n", this, oth, hint, piOrder); + + return E_NOTIMPL; +} + +HRESULT WINAPI ShellItem::GetClassID(CLSID *pClassID) +{ + TRACE("(%p,%p)\n", this, pClassID); + + *pClassID = CLSID_ShellItem; + return S_OK; +} + + +HRESULT WINAPI ShellItem::SetIDList(LPCITEMIDLIST pidlx) +{ + LPITEMIDLIST new_pidl; + + TRACE("(%p,%p)\n", this, pidlx); + + new_pidl = ILClone(pidlx); + + if (new_pidl) + { + ILFree(pidl); + pidl = new_pidl; + return S_OK; + } + else + return E_OUTOFMEMORY; +} + +HRESULT WINAPI ShellItem::GetIDList(LPITEMIDLIST *ppidl) +{ + TRACE("(%p,%p)\n", this, ppidl); + + *ppidl = ILClone(pidl); + if (*ppidl) + return S_OK; + else + return E_OUTOFMEMORY; +} + +HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST pidlParent, + IShellFolder *psfParent, LPCITEMIDLIST pidl, IShellItem **ppsi) +{ + IShellItem *newShellItem; + LPITEMIDLIST new_pidl; + CComPtr newPersistIDList; + HRESULT ret; + + TRACE("(%p,%p,%p,%p)\n", pidlParent, psfParent, pidl, ppsi); + + if (!pidl) + { + return E_INVALIDARG; + } + else if (pidlParent || psfParent) + { + LPITEMIDLIST temp_parent=NULL; + if (!pidlParent) + { + CComPtr ppf2Parent; + + if (FAILED(psfParent->QueryInterface(IID_IPersistFolder2, (void**)&ppf2Parent))) + { + FIXME("couldn't get IPersistFolder2 interface of parent\n"); + return E_NOINTERFACE; + } + + if (FAILED(ppf2Parent->GetCurFolder(&temp_parent))) + { + FIXME("couldn't get parent PIDL\n"); + return E_NOINTERFACE; + } + + pidlParent = temp_parent; + } + + new_pidl = ILCombine(pidlParent, pidl); + ILFree(temp_parent); + + if (!new_pidl) + return E_OUTOFMEMORY; + } + else + { + new_pidl = ILClone(pidl); + if (!new_pidl) + return E_OUTOFMEMORY; + } + + ret = ShellItem::_CreatorClass::CreateInstance(NULL, IID_IShellItem, (void**)&newShellItem); + if (FAILED(ret)) + { + *ppsi = NULL; + ILFree(new_pidl); + return ret; + } + ret = newShellItem->QueryInterface(IID_IPersistIDList, (void **)&newPersistIDList); + if (FAILED(ret)) + { + ILFree(new_pidl); + return ret; + } + ret = newPersistIDList->SetIDList(new_pidl); + if (FAILED(ret)) + { + ILFree(new_pidl); + return ret; + } + ILFree(new_pidl); + *ppsi = newShellItem; + return ret; +} diff --git a/reactos/dll/win32/shell32_new/shellitem.h b/reactos/dll/win32/shell32_new/shellitem.h new file mode 100644 index 00000000000..546fb74c44e --- /dev/null +++ b/reactos/dll/win32/shell32_new/shellitem.h @@ -0,0 +1,62 @@ +/* + * IShellItem implementation + * + * Copyright 2008 Vincent Povirk for CodeWeavers + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _SHELLITEM_H_ +#define _SHELLITEM_H_ + +class ShellItem : + public CComCoClass, + public CComObjectRootEx, + public IShellItem, + public IPersistIDList +{ +private: + LPITEMIDLIST pidl; +public: + ShellItem(); + ~ShellItem(); + HRESULT get_parent_pidl(LPITEMIDLIST *parent_pidl); + HRESULT get_parent_shellfolder(IShellFolder **ppsf); + + // IShellItem + virtual HRESULT WINAPI BindToHandler(IBindCtx *pbc, REFGUID rbhid, REFIID riid, void **ppvOut); + virtual HRESULT WINAPI GetParent(IShellItem **ppsi); + virtual HRESULT WINAPI GetDisplayName(SIGDN sigdnName, LPWSTR *ppszName); + virtual HRESULT WINAPI GetAttributes(SFGAOF sfgaoMask, SFGAOF *psfgaoAttribs); + virtual HRESULT WINAPI Compare(IShellItem *oth, SICHINTF hint, int *piOrder); + + // IPersistIDList + virtual HRESULT WINAPI GetClassID(CLSID *pClassID); + virtual HRESULT WINAPI SetIDList(LPCITEMIDLIST pidl); + virtual HRESULT WINAPI GetIDList(LPITEMIDLIST *ppidl); + +DECLARE_NO_REGISTRY() +DECLARE_NOT_AGGREGATABLE(ShellItem) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(ShellItem) + COM_INTERFACE_ENTRY_IID(IID_IShellItem, IShellItem) + COM_INTERFACE_ENTRY_IID(IID_IPersistIDList, IPersistIDList) +END_COM_MAP() +}; + +#endif // _SHELLITEM_H_ diff --git a/reactos/dll/win32/shell32_new/shelllink.cpp b/reactos/dll/win32/shell32_new/shelllink.cpp new file mode 100644 index 00000000000..c7a23451b34 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shelllink.cpp @@ -0,0 +1,2155 @@ +/* + * + * Copyright 1997 Marcus Meissner + * Copyright 1998 Juergen Schmied + * Copyright 2005 Mike McCormack + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * NOTES + * Nearly complete information about the binary formats + * of .lnk files available at http://www.wotsit.org + * + * You can use winedump to examine the contents of a link file: + * winedump lnk sc.lnk + * + * MSI advertised shortcuts are totally undocumented. They provide an + * icon for a program that is not yet installed, and invoke MSI to + * install the program when the shortcut is clicked on. They are + * created by passing a special string to SetPath, and the information + * in that string is parsed an stored. + */ + +#include +#include +#include +#include +#include +#include "shelllink.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +#define SHLINK_LOCAL 0 +#define SHLINK_REMOTE 1 +#define MAX_PROPERTY_SHEET_PAGE 32 + +/* link file formats */ + +#include "pshpack1.h" + +struct LINK_HEADER +{ + DWORD dwSize; /* 0x00 size of the header - 0x4c */ + GUID MagicGuid; /* 0x04 is CLSID_ShellLink */ + DWORD dwFlags; /* 0x14 describes elements following */ + DWORD dwFileAttr; /* 0x18 attributes of the target file */ + FILETIME Time1; /* 0x1c */ + FILETIME Time2; /* 0x24 */ + FILETIME Time3; /* 0x2c */ + DWORD dwFileLength; /* 0x34 File length */ + DWORD nIcon; /* 0x38 icon number */ + DWORD fStartup; /* 0x3c startup type */ + DWORD wHotKey; /* 0x40 hotkey */ + DWORD Unknown5; /* 0x44 */ + DWORD Unknown6; /* 0x48 */ +}; + +struct LOCATION_INFO +{ + DWORD dwTotalSize; + DWORD dwHeaderSize; + DWORD dwFlags; + DWORD dwVolTableOfs; + DWORD dwLocalPathOfs; + DWORD dwNetworkVolTableOfs; + DWORD dwFinalPathOfs; +}; + +struct LOCAL_VOLUME_INFO +{ + DWORD dwSize; + DWORD dwType; + DWORD dwVolSerial; + DWORD dwVolLabelOfs; +}; + +struct volume_info +{ + DWORD type; + DWORD serial; + WCHAR label[12]; /* assume 8.3 */ +}; + +#include "poppack.h" + +/* IShellLink Implementation */ + +static HRESULT ShellLink_UpdatePath(LPCWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath); + +/* strdup on the process heap */ +static LPWSTR __inline HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str) +{ + INT len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 ); + LPWSTR p = (LPWSTR)HeapAlloc( heap, flags, len*sizeof (WCHAR) ); + if( !p ) + return p; + MultiByteToWideChar( CP_ACP, 0, str, -1, p, len ); + return p; +} + +static LPWSTR __inline strdupW( LPCWSTR src ) +{ + LPWSTR dest; + if (!src) return NULL; + dest = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, (wcslen(src)+1)*sizeof(WCHAR) ); + if (dest) + wcscpy(dest, src); + return dest; +} + +ShellLink::ShellLink() +{ + pPidl = NULL; + wHotKey = 0; + memset(&time1, 0, sizeof(time1)); + memset(&time2, 0, sizeof(time2)); + memset(&time3, 0, sizeof(time3)); + iShowCmd = SW_SHOWNORMAL; + sIcoPath = NULL; + iIcoNdx = 0; + sPath = NULL; + sArgs = NULL; + sWorkDir = NULL; + sDescription = NULL; + sPathRel = NULL; + sProduct = NULL; + sComponent = NULL; + memset(&volume, 0, sizeof(volume)); + sLinkPath = NULL; + bRunAs = FALSE; + bDirty = FALSE; + iIdOpen = -1; +} + +ShellLink::~ShellLink() +{ + TRACE("-- destroying IShellLink(%p)\n", this); + + HeapFree(GetProcessHeap(), 0, sIcoPath); + HeapFree(GetProcessHeap(), 0, sArgs); + HeapFree(GetProcessHeap(), 0, sWorkDir); + HeapFree(GetProcessHeap(), 0, sDescription); + HeapFree(GetProcessHeap(), 0, sPath); + HeapFree(GetProcessHeap(), 0, sLinkPath); + + if (pPidl) + ILFree(pPidl); +} + +HRESULT WINAPI ShellLink::GetClassID(CLSID *pclsid ) +{ + TRACE("%p %p\n", this, pclsid); + + if (pclsid == NULL) + return E_POINTER; + *pclsid = CLSID_ShellLink; + return S_OK; +} + +HRESULT WINAPI ShellLink::IsDirty() +{ + TRACE("(%p)\n",this); + + if (bDirty) + return S_OK; + + return S_FALSE; +} + +HRESULT WINAPI ShellLink::Load(LPCOLESTR pszFileName, DWORD dwMode) +{ + HRESULT r; + CComPtr stm; + + TRACE("(%p, %s, %x)\n",this, debugstr_w(pszFileName), dwMode); + + if (dwMode == 0) + dwMode = STGM_READ | STGM_SHARE_DENY_WRITE; + r = SHCreateStreamOnFileW(pszFileName, dwMode, &stm); + if (SUCCEEDED(r)) + { + HeapFree(GetProcessHeap(), 0, sLinkPath); + sLinkPath = strdupW(pszFileName); + r = Load(stm); + ShellLink_UpdatePath(sPathRel, pszFileName, sWorkDir, &sPath); + bDirty = FALSE; + } + TRACE("-- returning hr %08x\n", r); + return r; +} + +static BOOL StartLinkProcessor( LPCOLESTR szLink ) +{ + static const WCHAR szFormat[] = { + 'w','i','n','e','m','e','n','u','b','u','i','l','d','e','r','.','e','x','e', + ' ','-','w',' ','"','%','s','"',0 }; + LONG len; + LPWSTR buffer; + STARTUPINFOW si; + PROCESS_INFORMATION pi; + BOOL ret; + + len = sizeof(szFormat) + wcslen( szLink ) * sizeof(WCHAR); + buffer = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, len ); + if( !buffer ) + return FALSE; + + swprintf( buffer, szFormat, szLink ); + + TRACE("starting %s\n",debugstr_w(buffer)); + + memset(&si, 0, sizeof(si)); + si.cb = sizeof(si); + + ret = CreateProcessW( NULL, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ); + + HeapFree( GetProcessHeap(), 0, buffer ); + + if (ret) + { + CloseHandle( pi.hProcess ); + CloseHandle( pi.hThread ); + } + + return ret; +} + +HRESULT WINAPI ShellLink::Save(LPCOLESTR pszFileName, BOOL fRemember) +{ + HRESULT r; + CComPtr stm; + + TRACE("(%p)->(%s)\n", this, debugstr_w(pszFileName)); + + if (!pszFileName) + return E_FAIL; + + r = SHCreateStreamOnFileW( pszFileName, STGM_READWRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE, &stm ); + if( SUCCEEDED( r ) ) + { + r = Save(stm, FALSE); + + if( SUCCEEDED( r ) ) + { + StartLinkProcessor( pszFileName ); + + bDirty = FALSE; + } + else + { + DeleteFileW( pszFileName ); + WARN("Failed to create shortcut %s\n", debugstr_w(pszFileName) ); + } + } + + return r; +} + +HRESULT WINAPI ShellLink::SaveCompleted(LPCOLESTR pszFileName) +{ + FIXME("(%p)->(%s)\n", this, debugstr_w(pszFileName)); + return NOERROR; +} + +HRESULT WINAPI ShellLink::GetCurFile(LPOLESTR *ppszFileName) +{ + FIXME("(%p)\n", this); + return NOERROR; +} + +/************************************************************************ + * IPersistStream_IsDirty (IPersistStream) + */ + +static HRESULT Stream_LoadString( IStream* stm, BOOL unicode, LPWSTR *pstr ) +{ + DWORD count; + USHORT len; + LPSTR temp; + LPWSTR str; + HRESULT r; + + TRACE("%p\n", stm); + + count = 0; + r = stm->Read(&len, sizeof(len), &count); + if ( FAILED (r) || ( count != sizeof(len) ) ) + return E_FAIL; + + if( unicode ) + len *= sizeof (WCHAR); + + TRACE("reading %d\n", len); + temp = (LPSTR)HeapAlloc(GetProcessHeap(), 0, len+sizeof(WCHAR)); + if( !temp ) + return E_OUTOFMEMORY; + count = 0; + r = stm->Read(temp, len, &count); + if( FAILED (r) || ( count != len ) ) + { + HeapFree( GetProcessHeap(), 0, temp ); + return E_FAIL; + } + + TRACE("read %s\n", debugstr_an(temp,len)); + + /* convert to unicode if necessary */ + if( !unicode ) + { + count = MultiByteToWideChar( CP_ACP, 0, temp, len, NULL, 0 ); + str = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, (count+1)*sizeof (WCHAR) ); + if( !str ) + { + HeapFree( GetProcessHeap(), 0, temp ); + return E_OUTOFMEMORY; + } + MultiByteToWideChar( CP_ACP, 0, temp, len, str, count ); + HeapFree( GetProcessHeap(), 0, temp ); + } + else + { + count /= 2; + str = (LPWSTR)temp; + } + str[count] = 0; + + *pstr = str; + + return S_OK; +} + +static HRESULT Stream_ReadChunk( IStream* stm, LPVOID *data ) +{ + DWORD size; + ULONG count; + HRESULT r; + struct sized_chunk { + DWORD size; + unsigned char data[1]; + } *chunk; + + TRACE("%p\n",stm); + + r = stm->Read(&size, sizeof(size), &count ); + if( FAILED( r ) || count != sizeof(size) ) + return E_FAIL; + + chunk = (sized_chunk *)HeapAlloc( GetProcessHeap(), 0, size ); + if( !chunk ) + return E_OUTOFMEMORY; + + chunk->size = size; + r = stm->Read(chunk->data, size - sizeof(size), &count ); + if( FAILED( r ) || count != (size - sizeof(size)) ) + { + HeapFree( GetProcessHeap(), 0, chunk ); + return E_FAIL; + } + + TRACE("Read %d bytes\n",chunk->size); + + *data = chunk; + + return S_OK; +} + +static BOOL Stream_LoadVolume( LOCAL_VOLUME_INFO *vol, ShellLink::volume_info *volume ) +{ + const int label_sz = sizeof volume->label/sizeof volume->label[0]; + LPSTR label; + int len; + + volume->serial = vol->dwVolSerial; + volume->type = vol->dwType; + + if( !vol->dwVolLabelOfs ) + return FALSE; + if( vol->dwSize <= vol->dwVolLabelOfs ) + return FALSE; + len = vol->dwSize - vol->dwVolLabelOfs; + + label = (LPSTR) vol; + label += vol->dwVolLabelOfs; + MultiByteToWideChar( CP_ACP, 0, label, len, volume->label, label_sz-1); + + return TRUE; +} + +static LPWSTR Stream_LoadPath( LPCSTR p, DWORD maxlen ) +{ + unsigned int len = 0, wlen; + LPWSTR path; + + while( p[len] && (len < maxlen) ) + len++; + + wlen = MultiByteToWideChar(CP_ACP, 0, p, len, NULL, 0); + path = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wlen+1)*sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, p, len, path, wlen); + path[wlen] = 0; + + return path; +} + +static HRESULT Stream_LoadLocation( IStream *stm, + ShellLink::volume_info *volume, LPWSTR *path ) +{ + char *p = NULL; + LOCATION_INFO *loc; + HRESULT r; + DWORD n; + + r = Stream_ReadChunk( stm, (LPVOID*) &p ); + if( FAILED(r) ) + return r; + + loc = (LOCATION_INFO*) p; + if (loc->dwTotalSize < sizeof(LOCATION_INFO)) + { + HeapFree( GetProcessHeap(), 0, p ); + return E_FAIL; + } + + /* if there's valid local volume information, load it */ + if( loc->dwVolTableOfs && + ((loc->dwVolTableOfs + sizeof(LOCAL_VOLUME_INFO)) <= loc->dwTotalSize) ) + { + LOCAL_VOLUME_INFO *volume_info; + + volume_info = (LOCAL_VOLUME_INFO*) &p[loc->dwVolTableOfs]; + Stream_LoadVolume( volume_info, volume ); + } + + /* if there's a local path, load it */ + n = loc->dwLocalPathOfs; + if( n && (n < loc->dwTotalSize) ) + *path = Stream_LoadPath( &p[n], loc->dwTotalSize - n ); + + TRACE("type %d serial %08x name %s path %s\n", volume->type, + volume->serial, debugstr_w(volume->label), debugstr_w(*path)); + + HeapFree( GetProcessHeap(), 0, p ); + return S_OK; +} + +/* + * The format of the advertised shortcut info seems to be: + * + * Offset Description + * ------ ----------- + * + * 0 Length of the block (4 bytes, usually 0x314) + * 4 tag (dword) + * 8 string data in ASCII + * 8+0x104 string data in UNICODE + * + * In the original Win32 implementation the buffers are not initialized + * to zero, so data trailing the string is random garbage. + */ +static HRESULT Stream_LoadAdvertiseInfo( IStream* stm, LPWSTR *str ) +{ + DWORD size; + ULONG count; + HRESULT r; + EXP_DARWIN_LINK buffer; + + TRACE("%p\n",stm); + + r = stm->Read(&buffer.dbh.cbSize, sizeof (DWORD), &count ); + if( FAILED( r ) ) + return r; + + /* make sure that we read the size of the structure even on error */ + size = sizeof buffer - sizeof (DWORD); + if( buffer.dbh.cbSize != sizeof buffer ) + { + ERR("Ooops. This structure is not as expected...\n"); + return E_FAIL; + } + + r = stm->Read(&buffer.dbh.dwSignature, size, &count ); + if( FAILED( r ) ) + return r; + + if( count != size ) + return E_FAIL; + + TRACE("magic %08x string = %s\n", buffer.dbh.dwSignature, debugstr_w(buffer.szwDarwinID)); + + if( (buffer.dbh.dwSignature&0xffff0000) != 0xa0000000 ) + { + ERR("Unknown magic number %08x in advertised shortcut\n", buffer.dbh.dwSignature); + return E_FAIL; + } + + *str = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, + (wcslen(buffer.szwDarwinID)+1) * sizeof(WCHAR) ); + wcscpy( *str, buffer.szwDarwinID ); + + return S_OK; +} + +/************************************************************************ + * IPersistStream_Load (IPersistStream) + */ +HRESULT WINAPI ShellLink::Load(IStream *stm) +{ + LINK_HEADER hdr; + ULONG dwBytesRead; + BOOL unicode; + HRESULT r; + DWORD zero; + + TRACE("%p %p\n", this, stm); + + if (!stm) + return STG_E_INVALIDPOINTER; + + dwBytesRead = 0; + r = stm->Read(&hdr, sizeof(hdr), &dwBytesRead); + if (FAILED(r)) + return r; + + if (dwBytesRead != sizeof(hdr)) + return E_FAIL; + if (hdr.dwSize != sizeof(hdr)) + return E_FAIL; + if (!IsEqualIID(hdr.MagicGuid, CLSID_ShellLink)) + return E_FAIL; + + /* free all the old stuff */ + ILFree(pPidl); + pPidl = NULL; + memset( &volume, 0, sizeof volume ); + HeapFree(GetProcessHeap(), 0, sPath); + sPath = NULL; + HeapFree(GetProcessHeap(), 0, sDescription); + sDescription = NULL; + HeapFree(GetProcessHeap(), 0, sPathRel); + sPathRel = NULL; + HeapFree(GetProcessHeap(), 0, sWorkDir); + sWorkDir = NULL; + HeapFree(GetProcessHeap(), 0, sArgs); + sArgs = NULL; + HeapFree(GetProcessHeap(), 0, sIcoPath); + sIcoPath = NULL; + HeapFree(GetProcessHeap(), 0, sProduct); + sProduct = NULL; + HeapFree(GetProcessHeap(), 0, sComponent); + sComponent = NULL; + + wHotKey = (WORD)hdr.wHotKey; + iIcoNdx = hdr.nIcon; + FileTimeToSystemTime (&hdr.Time1, &time1); + FileTimeToSystemTime (&hdr.Time2, &time2); + FileTimeToSystemTime (&hdr.Time3, &time3); + if (TRACE_ON(shell)) + { + WCHAR sTemp[MAX_PATH]; + GetDateFormatW(LOCALE_USER_DEFAULT,DATE_SHORTDATE, &time1, + NULL, sTemp, sizeof(sTemp)/sizeof(*sTemp)); + TRACE("-- time1: %s\n", debugstr_w(sTemp) ); + GetDateFormatW(LOCALE_USER_DEFAULT,DATE_SHORTDATE, &time2, + NULL, sTemp, sizeof(sTemp)/sizeof(*sTemp)); + TRACE("-- time2: %s\n", debugstr_w(sTemp) ); + GetDateFormatW(LOCALE_USER_DEFAULT,DATE_SHORTDATE, &time3, + NULL, sTemp, sizeof(sTemp)/sizeof(*sTemp)); + TRACE("-- time3: %s\n", debugstr_w(sTemp) ); + } + + /* load all the new stuff */ + if( hdr.dwFlags & SLDF_HAS_ID_LIST ) + { + r = ILLoadFromStream( stm, &pPidl ); + if( FAILED( r ) ) + return r; + } + pdump(pPidl); + + /* load the location information */ + if( hdr.dwFlags & SLDF_HAS_LINK_INFO ) + r = Stream_LoadLocation( stm, &volume, &sPath ); + if( FAILED( r ) ) + goto end; + + unicode = hdr.dwFlags & SLDF_UNICODE; + if( hdr.dwFlags & SLDF_HAS_NAME ) + { + r = Stream_LoadString( stm, unicode, &sDescription ); + TRACE("Description -> %s\n",debugstr_w(sDescription)); + } + if( FAILED( r ) ) + goto end; + + if( hdr.dwFlags & SLDF_HAS_RELPATH ) + { + r = Stream_LoadString( stm, unicode, &sPathRel ); + TRACE("Relative Path-> %s\n",debugstr_w(sPathRel)); + } + if( FAILED( r ) ) + goto end; + + if( hdr.dwFlags & SLDF_HAS_WORKINGDIR ) + { + r = Stream_LoadString( stm, unicode, &sWorkDir ); + TRACE("Working Dir -> %s\n",debugstr_w(sWorkDir)); + } + if( FAILED( r ) ) + goto end; + + if( hdr.dwFlags & SLDF_HAS_ARGS ) + { + r = Stream_LoadString( stm, unicode, &sArgs ); + TRACE("Working Dir -> %s\n",debugstr_w(sArgs)); + } + if( FAILED( r ) ) + goto end; + + if( hdr.dwFlags & SLDF_HAS_ICONLOCATION ) + { + r = Stream_LoadString( stm, unicode, &sIcoPath ); + TRACE("Icon file -> %s\n",debugstr_w(sIcoPath)); + } + if( FAILED( r ) ) + goto end; + +#if (NTDDI_VERSION < NTDDI_LONGHORN) + if( hdr.dwFlags & SLDF_HAS_LOGO3ID ) + { + r = Stream_LoadAdvertiseInfo( stm, &sProduct ); + TRACE("Product -> %s\n",debugstr_w(sProduct)); + } + if( FAILED( r ) ) + goto end; +#endif + + if( hdr.dwFlags & SLDF_HAS_DARWINID ) + { + r = Stream_LoadAdvertiseInfo( stm, &sComponent ); + TRACE("Component -> %s\n",debugstr_w(sComponent)); + } + if( hdr.dwFlags & SLDF_RUNAS_USER ) + { + bRunAs = TRUE; + } + else + { + bRunAs = FALSE; + } + + if( FAILED( r ) ) + goto end; + + r = stm->Read(&zero, sizeof zero, &dwBytesRead); + if( FAILED( r ) || zero || dwBytesRead != sizeof zero ) + ERR("Last word was not zero\n"); + + TRACE("OK\n"); + + pdump (pPidl); + + return S_OK; +end: + return r; +} + +/************************************************************************ + * Stream_WriteString + * + * Helper function for IPersistStream_Save. Writes a unicode string + * with terminating nul byte to a stream, preceded by the its length. + */ +static HRESULT Stream_WriteString( IStream* stm, LPCWSTR str ) +{ + USHORT len = wcslen( str ) + 1; + DWORD count; + HRESULT r; + + r = stm->Write(&len, sizeof(len), &count ); + if( FAILED( r ) ) + return r; + + len *= sizeof(WCHAR); + + r = stm->Write(str, len, &count ); + if( FAILED( r ) ) + return r; + + return S_OK; +} + +/************************************************************************ + * Stream_WriteLocationInfo + * + * Writes the location info to a stream + * + * FIXME: One day we might want to write the network volume information + * and the final path. + * Figure out how Windows deals with unicode paths here. + */ +static HRESULT Stream_WriteLocationInfo( IStream* stm, LPCWSTR path, + ShellLink::volume_info *volume ) +{ + DWORD total_size, path_size, volume_info_size, label_size, final_path_size; + LOCAL_VOLUME_INFO *vol; + LOCATION_INFO *loc; + LPSTR szLabel, szPath, szFinalPath; + ULONG count = 0; + HRESULT hr; + + TRACE("%p %s %p\n", stm, debugstr_w(path), volume); + + /* figure out the size of everything */ + label_size = WideCharToMultiByte( CP_ACP, 0, volume->label, -1, + NULL, 0, NULL, NULL ); + path_size = WideCharToMultiByte( CP_ACP, 0, path, -1, + NULL, 0, NULL, NULL ); + volume_info_size = sizeof *vol + label_size; + final_path_size = 1; + total_size = sizeof *loc + volume_info_size + path_size + final_path_size; + + /* create pointers to everything */ + loc = (LOCATION_INFO *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, total_size); + vol = (LOCAL_VOLUME_INFO*) &loc[1]; + szLabel = (LPSTR) &vol[1]; + szPath = &szLabel[label_size]; + szFinalPath = &szPath[path_size]; + + /* fill in the location information header */ + loc->dwTotalSize = total_size; + loc->dwHeaderSize = sizeof (*loc); + loc->dwFlags = 1; + loc->dwVolTableOfs = sizeof (*loc); + loc->dwLocalPathOfs = sizeof (*loc) + volume_info_size; + loc->dwNetworkVolTableOfs = 0; + loc->dwFinalPathOfs = sizeof (*loc) + volume_info_size + path_size; + + /* fill in the volume information */ + vol->dwSize = volume_info_size; + vol->dwType = volume->type; + vol->dwVolSerial = volume->serial; + vol->dwVolLabelOfs = sizeof (*vol); + + /* copy in the strings */ + WideCharToMultiByte( CP_ACP, 0, volume->label, -1, + szLabel, label_size, NULL, NULL ); + WideCharToMultiByte( CP_ACP, 0, path, -1, + szPath, path_size, NULL, NULL ); + szFinalPath[0] = 0; + + hr = stm->Write(loc, total_size, &count ); + HeapFree(GetProcessHeap(), 0, loc); + + return hr; +} + +static EXP_DARWIN_LINK* shelllink_build_darwinid( LPCWSTR string, DWORD magic ) +{ + EXP_DARWIN_LINK *buffer; + + buffer = (EXP_DARWIN_LINK *)LocalAlloc( LMEM_ZEROINIT, sizeof *buffer ); + buffer->dbh.cbSize = sizeof *buffer; + buffer->dbh.dwSignature = magic; + lstrcpynW( buffer->szwDarwinID, string, MAX_PATH ); + WideCharToMultiByte(CP_ACP, 0, string, -1, buffer->szDarwinID, MAX_PATH, NULL, NULL ); + + return buffer; +} + +static HRESULT Stream_WriteAdvertiseInfo( IStream* stm, LPCWSTR string, DWORD magic ) +{ + EXP_DARWIN_LINK *buffer; + ULONG count; + + TRACE("%p\n",stm); + + buffer = shelllink_build_darwinid( string, magic ); + + return stm->Write(buffer, buffer->dbh.cbSize, &count ); +} + +/************************************************************************ + * IPersistStream_Save (IPersistStream) + * + * FIXME: makes assumptions about byte order + */ +HRESULT WINAPI ShellLink::Save(IStream *stm, BOOL fClearDirty) +{ + LINK_HEADER header; + ULONG count; + DWORD zero; + HRESULT r; + + TRACE("%p %p %x\n", this, stm, fClearDirty); + + memset(&header, 0, sizeof(header)); + header.dwSize = sizeof(header); + header.fStartup = iShowCmd; + header.MagicGuid = CLSID_ShellLink; + + header.wHotKey = wHotKey; + header.nIcon = iIcoNdx; + header.dwFlags = SLDF_UNICODE; /* strings are in unicode */ + if( pPidl ) + header.dwFlags |= SLDF_HAS_ID_LIST; + if( sPath ) + header.dwFlags |= SLDF_HAS_LINK_INFO; + if( sDescription ) + header.dwFlags |= SLDF_HAS_NAME; + if( sWorkDir ) + header.dwFlags |= SLDF_HAS_WORKINGDIR; + if( sArgs ) + header.dwFlags |= SLDF_HAS_ARGS; + if( sIcoPath ) + header.dwFlags |= SLDF_HAS_ICONLOCATION; +#if (NTDDI_VERSION < NTDDI_LONGHORN) + if( sProduct ) + header.dwFlags |= SLDF_HAS_LOGO3ID; +#endif + if( sComponent ) + header.dwFlags |= SLDF_HAS_DARWINID; + if( bRunAs ) + header.dwFlags |= SLDF_RUNAS_USER; + + SystemTimeToFileTime ( &time1, &header.Time1 ); + SystemTimeToFileTime ( &time2, &header.Time2 ); + SystemTimeToFileTime ( &time3, &header.Time3 ); + + /* write the Shortcut header */ + r = stm->Write(&header, sizeof(header), &count ); + if( FAILED( r ) ) + { + ERR("Write failed at %d\n",__LINE__); + return r; + } + + TRACE("Writing pidl\n"); + + /* write the PIDL to the shortcut */ + if( pPidl ) + { + r = ILSaveToStream( stm, pPidl ); + if( FAILED( r ) ) + { + ERR("Failed to write PIDL at %d\n",__LINE__); + return r; + } + } + + if( sPath ) + Stream_WriteLocationInfo( stm, sPath, &volume ); + + if( sDescription ) + r = Stream_WriteString( stm, sDescription ); + + if( sPathRel ) + r = Stream_WriteString( stm, sPathRel ); + + if( sWorkDir ) + r = Stream_WriteString( stm, sWorkDir ); + + if( sArgs ) + r = Stream_WriteString( stm, sArgs ); + + if( sIcoPath ) + r = Stream_WriteString( stm, sIcoPath ); + + if( sProduct ) + r = Stream_WriteAdvertiseInfo( stm, sProduct, EXP_SZ_ICON_SIG ); + + if( sComponent ) + r = Stream_WriteAdvertiseInfo( stm, sComponent, EXP_DARWIN_ID_SIG ); + + /* the last field is a single zero dword */ + zero = 0; + r = stm->Write(&zero, sizeof zero, &count ); + + return S_OK; +} + +/************************************************************************ + * IPersistStream_GetSizeMax (IPersistStream) + */ +HRESULT WINAPI ShellLink::GetSizeMax(ULARGE_INTEGER *pcbSize) +{ + TRACE("(%p)\n", this); + + return E_NOTIMPL; +} + +static BOOL SHELL_ExistsFileW(LPCWSTR path) +{ + if (INVALID_FILE_ATTRIBUTES == GetFileAttributesW(path)) + return FALSE; + return TRUE; +} + +/************************************************************************** + * ShellLink_UpdatePath + * update absolute path in sPath using relative path in sPathRel + */ +static HRESULT ShellLink_UpdatePath(LPCWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath) +{ + if (!path || !psPath) + return E_INVALIDARG; + + if (!*psPath && sPathRel) { + WCHAR buffer[2*MAX_PATH], abs_path[2*MAX_PATH]; + LPWSTR final = NULL; + + /* first try if [directory of link file] + [relative path] finds an existing file */ + + GetFullPathNameW( path, MAX_PATH*2, buffer, &final ); + if( !final ) + final = buffer; + wcscpy(final, sPathRel); + + *abs_path = '\0'; + + if (SHELL_ExistsFileW(buffer)) { + if (!GetFullPathNameW(buffer, MAX_PATH, abs_path, &final)) + wcscpy(abs_path, buffer); + } else { + /* try if [working directory] + [relative path] finds an existing file */ + if (sWorkDir) { + wcscpy(buffer, sWorkDir); + wcscpy(PathAddBackslashW(buffer), sPathRel); + + if (SHELL_ExistsFileW(buffer)) + if (!GetFullPathNameW(buffer, MAX_PATH, abs_path, &final)) + wcscpy(abs_path, buffer); + } + } + + /* FIXME: This is even not enough - not all shell links can be resolved using this algorithm. */ + if (!*abs_path) + wcscpy(abs_path, sPathRel); + + *psPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(abs_path)+1)*sizeof(WCHAR)); + if (!*psPath) + return E_OUTOFMEMORY; + + wcscpy(*psPath, abs_path); + } + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetPath(LPSTR pszFile, INT cchMaxPath, WIN32_FIND_DATAA *pfd, DWORD fFlags) +{ + TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%u)(%s)\n", + this, pszFile, cchMaxPath, pfd, fFlags, debugstr_w(sPath)); + + if (sComponent || sProduct) + return S_FALSE; + + if (cchMaxPath) + pszFile[0] = 0; + if (sPath) + WideCharToMultiByte( CP_ACP, 0, sPath, -1, + pszFile, cchMaxPath, NULL, NULL); + + if (pfd) FIXME("(%p): WIN32_FIND_DATA is not yet filled.\n", this); + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetIDList(LPITEMIDLIST * ppidl) +{ + TRACE("(%p)->(ppidl=%p)\n",this, ppidl); + + if (!pPidl) + { + *ppidl = NULL; + return S_FALSE; + } + *ppidl = ILClone(pPidl); + return S_OK; +} + +HRESULT WINAPI ShellLink::SetIDList(LPCITEMIDLIST pidl) +{ + TRACE("(%p)->(pidl=%p)\n",this, pidl); + + if( pPidl ) + ILFree( pPidl ); + pPidl = ILClone( pidl ); + if( !pPidl ) + return E_FAIL; + + bDirty = TRUE; + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetDescription(LPSTR pszName,INT cchMaxName) +{ + TRACE("(%p)->(%p len=%u)\n",this, pszName, cchMaxName); + + if( cchMaxName ) + pszName[0] = 0; + if( sDescription ) + WideCharToMultiByte( CP_ACP, 0, sDescription, -1, + pszName, cchMaxName, NULL, NULL); + + return S_OK; +} + +HRESULT WINAPI ShellLink::SetDescription(LPCSTR pszName) +{ + TRACE("(%p)->(pName=%s)\n", this, pszName); + + HeapFree(GetProcessHeap(), 0, sDescription); + sDescription = HEAP_strdupAtoW( GetProcessHeap(), 0, pszName); + if ( !sDescription ) + return E_OUTOFMEMORY; + + bDirty = TRUE; + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetWorkingDirectory(LPSTR pszDir,INT cchMaxPath) +{ + TRACE("(%p)->(%p len=%u)\n", this, pszDir, cchMaxPath); + + if( cchMaxPath ) + pszDir[0] = 0; + if( sWorkDir ) + WideCharToMultiByte( CP_ACP, 0, sWorkDir, -1, + pszDir, cchMaxPath, NULL, NULL); + + return S_OK; +} + +HRESULT WINAPI ShellLink::SetWorkingDirectory(LPCSTR pszDir) +{ + TRACE("(%p)->(dir=%s)\n",this, pszDir); + + HeapFree(GetProcessHeap(), 0, sWorkDir); + sWorkDir = HEAP_strdupAtoW( GetProcessHeap(), 0, pszDir); + if ( !sWorkDir ) + return E_OUTOFMEMORY; + + bDirty = TRUE; + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetArguments(LPSTR pszArgs,INT cchMaxPath) +{ + TRACE("(%p)->(%p len=%u)\n", this, pszArgs, cchMaxPath); + + if( cchMaxPath ) + pszArgs[0] = 0; + if( sArgs ) + WideCharToMultiByte( CP_ACP, 0, sArgs, -1, + pszArgs, cchMaxPath, NULL, NULL); + + return S_OK; +} + +HRESULT WINAPI ShellLink::SetArguments(LPCSTR pszArgs) +{ + TRACE("(%p)->(args=%s)\n",this, pszArgs); + + HeapFree(GetProcessHeap(), 0, sArgs); + sArgs = HEAP_strdupAtoW( GetProcessHeap(), 0, pszArgs); + if( !sArgs ) + return E_OUTOFMEMORY; + + bDirty = TRUE; + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetHotkey(WORD *pwHotkey) +{ + TRACE("(%p)->(%p)(0x%08x)\n",this, pwHotkey, wHotKey); + + *pwHotkey = wHotKey; + + return S_OK; +} + +HRESULT WINAPI ShellLink::SetHotkey(WORD wHotkey) +{ + TRACE("(%p)->(hotkey=%x)\n",this, wHotkey); + + wHotKey = wHotkey; + bDirty = TRUE; + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetShowCmd(INT *piShowCmd) +{ + TRACE("(%p)->(%p)\n",this, piShowCmd); + *piShowCmd = iShowCmd; + return S_OK; +} + +HRESULT WINAPI ShellLink::SetShowCmd(INT iShowCmd) +{ + TRACE("(%p) %d\n",this, iShowCmd); + + iShowCmd = iShowCmd; + bDirty = TRUE; + + return NOERROR; +} + +static HRESULT SHELL_PidlGeticonLocationA(IShellFolder* psf, LPCITEMIDLIST pidl, + LPSTR pszIconPath, int cchIconPath, int* piIcon) +{ + LPCITEMIDLIST pidlLast; + + HRESULT hr = SHBindToParent(pidl, IID_IShellFolder, (LPVOID*)&psf, &pidlLast); + + if (SUCCEEDED(hr)) { + CComPtr pei; + + hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_IExtractIconA, NULL, (LPVOID*)&pei); + + if (SUCCEEDED(hr)) { + hr = pei->GetIconLocation(0, pszIconPath, MAX_PATH, piIcon, NULL); + } + + psf->Release(); + } + + return hr; +} + +HRESULT WINAPI ShellLink::GetIconLocation(LPSTR pszIconPath,INT cchIconPath,INT *piIcon) +{ + TRACE("(%p)->(%p len=%u iicon=%p)\n", this, pszIconPath, cchIconPath, piIcon); + + pszIconPath[0] = 0; + *piIcon = iIcoNdx; + + if (sIcoPath) + { + WideCharToMultiByte(CP_ACP, 0, sIcoPath, -1, pszIconPath, cchIconPath, NULL, NULL); + return S_OK; + } + + if (pPidl || sPath) + { + CComPtr pdsk; + + HRESULT hr = SHGetDesktopFolder(&pdsk); + + if (SUCCEEDED(hr)) + { + /* first look for an icon using the PIDL (if present) */ + if (pPidl) + hr = SHELL_PidlGeticonLocationA(pdsk, pPidl, pszIconPath, cchIconPath, piIcon); + else + hr = E_FAIL; + + /* if we couldn't find an icon yet, look for it using the file system path */ + if (FAILED(hr) && sPath) + { + LPITEMIDLIST pidl; + + hr = pdsk->ParseDisplayName(0, NULL, sPath, NULL, &pidl, NULL); + + if (SUCCEEDED(hr)) { + hr = SHELL_PidlGeticonLocationA(pdsk, pidl, pszIconPath, cchIconPath, piIcon); + + SHFree(pidl); + } + } + } + + return hr; + } + return S_OK; +} + +HRESULT WINAPI ShellLink::SetIconLocation(LPCSTR pszIconPath,INT iIcon) +{ + TRACE("(%p)->(path=%s iicon=%u)\n",this, pszIconPath, iIcon); + + HeapFree(GetProcessHeap(), 0, sIcoPath); + sIcoPath = HEAP_strdupAtoW(GetProcessHeap(), 0, pszIconPath); + if ( !sIcoPath ) + return E_OUTOFMEMORY; + + iIcoNdx = iIcon; + bDirty = TRUE; + + return S_OK; +} + +HRESULT WINAPI ShellLink::SetRelativePath(LPCSTR pszPathRel, DWORD dwReserved) +{ + TRACE("(%p)->(path=%s %x)\n",this, pszPathRel, dwReserved); + + HeapFree(GetProcessHeap(), 0, sPathRel); + sPathRel = HEAP_strdupAtoW(GetProcessHeap(), 0, pszPathRel); + bDirty = TRUE; + + return ShellLink_UpdatePath(sPathRel, sPath, sWorkDir, &sPath); +} + +HRESULT WINAPI ShellLink::Resolve(HWND hwnd, DWORD fFlags) +{ + HRESULT hr = S_OK; + BOOL bSuccess; + + TRACE("(%p)->(hwnd=%p flags=%x)\n",this, hwnd, fFlags); + + /*FIXME: use IResolveShellLink interface */ + + if (!sPath && pPidl) { + WCHAR buffer[MAX_PATH]; + + bSuccess = SHGetPathFromIDListW(pPidl, buffer); + + if (bSuccess && *buffer) { + sPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(buffer)+1)*sizeof(WCHAR)); + if (!sPath) + return E_OUTOFMEMORY; + + wcscpy(sPath, buffer); + + bDirty = TRUE; + } else + hr = S_OK; /* don't report an error occurred while just caching information */ + } + + if (!sIcoPath && sPath) { + sIcoPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(sPath)+1)*sizeof(WCHAR)); + if (!sIcoPath) + return E_OUTOFMEMORY; + + wcscpy(sIcoPath, sPath); + iIcoNdx = 0; + + bDirty = TRUE; + } + + return hr; +} + +HRESULT WINAPI ShellLink::SetPath(LPCSTR pszFile) +{ + HRESULT r; + LPWSTR str; + + TRACE("(%p)->(path=%s)\n",this, pszFile); + if (pszFile == NULL) + return E_INVALIDARG; + + str = HEAP_strdupAtoW(GetProcessHeap(), 0, pszFile); + if( !str ) + return E_OUTOFMEMORY; + + r = SetPath(str); + HeapFree( GetProcessHeap(), 0, str ); + + return r; +} + +HRESULT WINAPI ShellLink::GetPath(LPWSTR pszFile,INT cchMaxPath, WIN32_FIND_DATAW *pfd, DWORD fFlags) +{ + TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%u)(%s)\n", + this, pszFile, cchMaxPath, pfd, fFlags, debugstr_w(sPath)); + + if (sComponent || sProduct) + return S_FALSE; + + if (cchMaxPath) + pszFile[0] = 0; + if (sPath) + lstrcpynW( pszFile, sPath, cchMaxPath ); + + if (pfd) FIXME("(%p): WIN32_FIND_DATA is not yet filled.\n", this); + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetDescription(LPWSTR pszName,INT cchMaxName) +{ + TRACE("(%p)->(%p len=%u)\n",this, pszName, cchMaxName); + + pszName[0] = 0; + if( sDescription ) + lstrcpynW( pszName, sDescription, cchMaxName ); + + return S_OK; +} + +HRESULT WINAPI ShellLink::SetDescription(LPCWSTR pszName) +{ + TRACE("(%p)->(desc=%s)\n",this, debugstr_w(pszName)); + + HeapFree(GetProcessHeap(), 0, sDescription); + sDescription = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, + (wcslen( pszName )+1)*sizeof(WCHAR) ); + if ( !sDescription ) + return E_OUTOFMEMORY; + + wcscpy( sDescription, pszName ); + bDirty = TRUE; + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetWorkingDirectory(LPWSTR pszDir,INT cchMaxPath) +{ + TRACE("(%p)->(%p len %u)\n", this, pszDir, cchMaxPath); + + if( cchMaxPath ) + pszDir[0] = 0; + if( sWorkDir ) + lstrcpynW( pszDir, sWorkDir, cchMaxPath ); + + return S_OK; +} + +HRESULT WINAPI ShellLink::SetWorkingDirectory(LPCWSTR pszDir) +{ + TRACE("(%p)->(dir=%s)\n",this, debugstr_w(pszDir)); + + HeapFree(GetProcessHeap(), 0, sWorkDir); + sWorkDir = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, + (wcslen( pszDir )+1)*sizeof (WCHAR) ); + if ( !sWorkDir ) + return E_OUTOFMEMORY; + wcscpy( sWorkDir, pszDir ); + bDirty = TRUE; + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetArguments(LPWSTR pszArgs,INT cchMaxPath) +{ + TRACE("(%p)->(%p len=%u)\n", this, pszArgs, cchMaxPath); + + if( cchMaxPath ) + pszArgs[0] = 0; + if( sArgs ) + lstrcpynW( pszArgs, sArgs, cchMaxPath ); + + return NOERROR; +} + +HRESULT WINAPI ShellLink::SetArguments(LPCWSTR pszArgs) +{ + TRACE("(%p)->(args=%s)\n",this, debugstr_w(pszArgs)); + + HeapFree(GetProcessHeap(), 0, sArgs); + sArgs = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, + (wcslen( pszArgs )+1)*sizeof (WCHAR) ); + if ( !sArgs ) + return E_OUTOFMEMORY; + wcscpy( sArgs, pszArgs ); + bDirty = TRUE; + + return S_OK; +} + +static HRESULT SHELL_PidlGeticonLocationW(IShellFolder* psf, LPCITEMIDLIST pidl, + LPWSTR pszIconPath, int cchIconPath, int* piIcon) +{ + LPCITEMIDLIST pidlLast; + UINT wFlags; + + HRESULT hr = SHBindToParent(pidl, IID_IShellFolder, (LPVOID*)&psf, &pidlLast); + + if (SUCCEEDED(hr)) { + CComPtr pei; + + hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_IExtractIconW, NULL, (LPVOID*)&pei); + + if (SUCCEEDED(hr)) { + hr = pei->GetIconLocation(0, pszIconPath, MAX_PATH, piIcon, &wFlags); + } + + psf->Release(); + } + + return hr; +} + +HRESULT WINAPI ShellLink::GetIconLocation(LPWSTR pszIconPath,INT cchIconPath,INT *piIcon) +{ + TRACE("(%p)->(%p len=%u iicon=%p)\n", this, pszIconPath, cchIconPath, piIcon); + + pszIconPath[0] = 0; + *piIcon = iIcoNdx; + + if (sIcoPath) + { + lstrcpynW(pszIconPath, sIcoPath, cchIconPath); + return S_OK; + } + + if (pPidl || sPath) + { + CComPtr pdsk; + + HRESULT hr = SHGetDesktopFolder(&pdsk); + + if (SUCCEEDED(hr)) + { + /* first look for an icon using the PIDL (if present) */ + if (pPidl) + hr = SHELL_PidlGeticonLocationW(pdsk, pPidl, pszIconPath, cchIconPath, piIcon); + else + hr = E_FAIL; + + /* if we couldn't find an icon yet, look for it using the file system path */ + if (FAILED(hr) && sPath) + { + LPITEMIDLIST pidl; + + hr = pdsk->ParseDisplayName(0, NULL, sPath, NULL, &pidl, NULL); + + if (SUCCEEDED(hr)) + { + hr = SHELL_PidlGeticonLocationW(pdsk, pidl, pszIconPath, cchIconPath, piIcon); + + SHFree(pidl); + } + } + } + return hr; + } + return S_OK; +} + +HRESULT WINAPI ShellLink::SetIconLocation(LPCWSTR pszIconPath,INT iIcon) +{ + TRACE("(%p)->(path=%s iicon=%u)\n",this, debugstr_w(pszIconPath), iIcon); + + HeapFree(GetProcessHeap(), 0, sIcoPath); + sIcoPath = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, + (wcslen( pszIconPath )+1)*sizeof (WCHAR) ); + if ( !sIcoPath ) + return E_OUTOFMEMORY; + wcscpy( sIcoPath, pszIconPath ); + + iIcoNdx = iIcon; + bDirty = TRUE; + + return S_OK; +} + +HRESULT WINAPI ShellLink::SetRelativePath(LPCWSTR pszPathRel, DWORD dwReserved) +{ + TRACE("(%p)->(path=%s %x)\n",this, debugstr_w(pszPathRel), dwReserved); + + HeapFree(GetProcessHeap(), 0, sPathRel); + sPathRel = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, + (wcslen( pszPathRel )+1) * sizeof (WCHAR) ); + if ( !sPathRel ) + return E_OUTOFMEMORY; + wcscpy( sPathRel, pszPathRel ); + bDirty = TRUE; + + return ShellLink_UpdatePath(sPathRel, sPath, sWorkDir, &sPath); +} + +LPWSTR ShellLink::ShellLink_GetAdvertisedArg(LPCWSTR str) +{ + LPWSTR ret; + LPCWSTR p; + DWORD len; + + if( !str ) + return NULL; + + p = wcschr( str, ':' ); + if( !p ) + return NULL; + len = p - str; + ret = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, sizeof(WCHAR)*(len+1)); + if( !ret ) + return ret; + memcpy( ret, str, sizeof(WCHAR)*len ); + ret[len] = 0; + return ret; +} + +HRESULT ShellLink::ShellLink_SetAdvertiseInfo(LPCWSTR str) +{ + LPCWSTR szComponent = NULL, szProduct = NULL, p; + WCHAR szGuid[39]; + HRESULT r; + GUID guid; + int len; + + while( str[0] ) + { + /* each segment must start with two colons */ + if( str[0] != ':' || str[1] != ':' ) + return E_FAIL; + + /* the last segment is just two colons */ + if( !str[2] ) + break; + str += 2; + + /* there must be a colon straight after a guid */ + p = wcschr( str, ':' ); + if( !p ) + return E_FAIL; + len = p - str; + if( len != 38 ) + return E_FAIL; + + /* get the guid, and check it's validly formatted */ + memcpy( szGuid, str, sizeof(WCHAR)*len ); + szGuid[len] = 0; + r = CLSIDFromString( szGuid, &guid ); + if( r != S_OK ) + return r; + str = p + 1; + + /* match it up to a guid that we care about */ + if( IsEqualGUID( guid, SHELL32_AdvtShortcutComponent ) && !szComponent ) + szComponent = str; + else if( IsEqualGUID(guid, SHELL32_AdvtShortcutProduct ) && !szProduct ) + szProduct = str; + else + return E_FAIL; + + /* skip to the next field */ + str = wcschr( str, ':' ); + if( !str ) + return E_FAIL; + } + + /* we have to have a component for an advertised shortcut */ + if( !szComponent ) + return E_FAIL; + + sComponent = ShellLink_GetAdvertisedArg( szComponent ); + sProduct = ShellLink_GetAdvertisedArg( szProduct ); + + TRACE("Component = %s\n", debugstr_w(sComponent)); + TRACE("Product = %s\n", debugstr_w(sProduct)); + + return S_OK; +} + +static BOOL ShellLink_GetVolumeInfo(LPCWSTR path, ShellLink::volume_info *volume) +{ + const int label_sz = sizeof volume->label/sizeof volume->label[0]; + WCHAR drive[4] = { path[0], ':', '\\', 0 }; + BOOL r; + + volume->type = GetDriveTypeW(drive); + r = GetVolumeInformationW(drive, volume->label, label_sz, &volume->serial, NULL, NULL, NULL, 0); + TRACE("r = %d type %d serial %08x name %s\n", r, + volume->type, volume->serial, debugstr_w(volume->label)); + return r; +} + +HRESULT WINAPI ShellLink::SetPath(LPCWSTR pszFile) +{ + WCHAR buffer[MAX_PATH]; + LPWSTR fname, unquoted = NULL; + HRESULT hr = S_OK; + UINT len; + + TRACE("(%p)->(path=%s)\n",this, debugstr_w(pszFile)); + + if (!pszFile) return E_INVALIDARG; + + /* quotes at the ends of the string are stripped */ + len = wcslen(pszFile); + if (pszFile[0] == '"' && pszFile[len-1] == '"') + { + unquoted = strdupW(pszFile); + PathUnquoteSpacesW(unquoted); + pszFile = unquoted; + } + + /* any other quote marks are invalid */ + if (wcschr(pszFile, '"')) + { + HeapFree(GetProcessHeap(), 0, unquoted); + return S_FALSE; + } + + HeapFree(GetProcessHeap(), 0, sPath); + sPath = NULL; + + HeapFree(GetProcessHeap(), 0, sComponent); + sComponent = NULL; + + if (pPidl) + ILFree(pPidl); + pPidl = NULL; + + if (S_OK != ShellLink_SetAdvertiseInfo(pszFile )) + { + if (*pszFile == '\0') + *buffer = '\0'; + else if (!GetFullPathNameW(pszFile, MAX_PATH, buffer, &fname)) + return E_FAIL; + else if(!PathFileExistsW(buffer) && + !SearchPathW(NULL, pszFile, NULL, MAX_PATH, buffer, NULL)) + hr = S_FALSE; + + pPidl = SHSimpleIDListFromPathW(pszFile); + ShellLink_GetVolumeInfo(buffer, &volume); + + sPath = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, + (wcslen( buffer )+1) * sizeof (WCHAR) ); + if (!sPath) + return E_OUTOFMEMORY; + + wcscpy(sPath, buffer); + } + bDirty = TRUE; + HeapFree(GetProcessHeap(), 0, unquoted); + + return hr; +} + +HRESULT WINAPI ShellLink::AddDataBlock(void* pDataBlock ) +{ + FIXME("\n"); + return E_NOTIMPL; +} + +HRESULT WINAPI ShellLink::CopyDataBlock(DWORD dwSig, void** ppDataBlock ) +{ + LPVOID block = NULL; + HRESULT r = E_FAIL; + + TRACE("%p %08x %p\n", this, dwSig, ppDataBlock ); + + switch (dwSig) + { + case EXP_DARWIN_ID_SIG: + if (!sComponent) + break; + block = shelllink_build_darwinid( sComponent, dwSig ); + r = S_OK; + break; + case EXP_SZ_LINK_SIG: + case NT_CONSOLE_PROPS_SIG: + case NT_FE_CONSOLE_PROPS_SIG: + case EXP_SPECIAL_FOLDER_SIG: + case EXP_SZ_ICON_SIG: + FIXME("valid but unhandled datablock %08x\n", dwSig); + break; + default: + ERR("unknown datablock %08x\n", dwSig); + } + *ppDataBlock = block; + return r; +} + +HRESULT WINAPI ShellLink::RemoveDataBlock(DWORD dwSig ) +{ + FIXME("\n"); + return E_NOTIMPL; +} + +HRESULT WINAPI ShellLink::GetFlags(DWORD* pdwFlags ) +{ + DWORD flags = 0; + + FIXME("%p %p\n", this, pdwFlags ); + + /* FIXME: add more */ + if (sArgs) + flags |= SLDF_HAS_ARGS; + if (sComponent) + flags |= SLDF_HAS_DARWINID; + if (sIcoPath) + flags |= SLDF_HAS_ICONLOCATION; +#if (NTDDI_VERSION < NTDDI_LONGHORN) + if (sProduct) + flags |= SLDF_HAS_LOGO3ID; +#endif + if (pPidl) + flags |= SLDF_HAS_ID_LIST; + + *pdwFlags = flags; + + return S_OK; +} + +HRESULT WINAPI ShellLink::SetFlags(DWORD dwFlags ) +{ + FIXME("\n"); + return E_NOTIMPL; +} + +/************************************************************************** + * ShellLink implementation of IShellExtInit::Initialize() + * + * Loads the shelllink from the dataobject the shell is pointing to. + */ +HRESULT WINAPI ShellLink::Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID ) +{ + FORMATETC format; + STGMEDIUM stgm; + UINT count; + HRESULT r = E_FAIL; + + TRACE("%p %p %p %p\n", this, pidlFolder, pdtobj, hkeyProgID ); + + if( !pdtobj ) + return r; + + format.cfFormat = CF_HDROP; + format.ptd = NULL; + format.dwAspect = DVASPECT_CONTENT; + format.lindex = -1; + format.tymed = TYMED_HGLOBAL; + + if( FAILED(pdtobj->GetData(&format, &stgm ) ) ) + return r; + + count = DragQueryFileW((HDROP)stgm.hGlobal, -1, NULL, 0 ); + if( count == 1 ) + { + LPWSTR path; + + count = DragQueryFileW((HDROP)stgm.hGlobal, 0, NULL, 0 ); + count++; + path = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, count*sizeof(WCHAR) ); + if( path ) + { + count = DragQueryFileW((HDROP)stgm.hGlobal, 0, path, count ); + r = Load(path, 0 ); + HeapFree(GetProcessHeap(), 0, path ); + } + } + ReleaseStgMedium(&stgm ); + + return r; +} + +HRESULT WINAPI ShellLink::QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) +{ + WCHAR szOpen[20]; + MENUITEMINFOW mii; + int id = 1; + + TRACE("%p %p %u %u %u %u\n", this, + hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags ); + + if ( !hmenu ) + return E_INVALIDARG; + + if (!LoadStringW(shell32_hInstance, IDS_OPEN_VERB, szOpen, sizeof(szOpen)/sizeof(WCHAR))) + szOpen[0] = L'\0'; + else + szOpen[(sizeof(szOpen)/sizeof(WCHAR))-1] = L'\0'; + + memset( &mii, 0, sizeof(mii) ); + mii.cbSize = sizeof (mii); + mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; + mii.dwTypeData = (LPWSTR)szOpen; + mii.cch = wcslen( mii.dwTypeData ); + mii.wID = idCmdFirst + id++; + mii.fState = MFS_DEFAULT | MFS_ENABLED; + mii.fType = MFT_STRING; + if (!InsertMenuItemW( hmenu, indexMenu, TRUE, &mii )) + return E_FAIL; + iIdOpen = 1; + + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id ); +} + +static LPWSTR +shelllink_get_msi_component_path( LPWSTR component ) +{ + LPWSTR path; + DWORD r, sz = 0; + + r = CommandLineFromMsiDescriptor( component, NULL, &sz ); + if (r != ERROR_SUCCESS) + return NULL; + + sz++; + path = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, sz*sizeof(WCHAR) ); + r = CommandLineFromMsiDescriptor( component, path, &sz ); + if (r != ERROR_SUCCESS) + { + HeapFree( GetProcessHeap(), 0, path ); + path = NULL; + } + + TRACE("returning %s\n", debugstr_w( path ) ); + + return path; +} + +HRESULT WINAPI ShellLink::InvokeCommand(LPCMINVOKECOMMANDINFO lpici) +{ + static const WCHAR szOpen[] = { 'o','p','e','n',0 }; + static const WCHAR szCplOpen[] = { 'c','p','l','o','p','e','n',0 }; + SHELLEXECUTEINFOW sei; + HWND hwnd = NULL; /* FIXME: get using interface set from IObjectWithSite */ + LPWSTR args = NULL; + LPWSTR path = NULL; + HRESULT r; + + TRACE("%p %p\n", this, lpici ); + + if ( lpici->cbSize < sizeof (CMINVOKECOMMANDINFO) ) + return E_INVALIDARG; + + r = Resolve(hwnd, 0 ); + if ( FAILED( r ) ) + { + TRACE("failed to resolve component with error 0x%08x", r); + return r; + } + if ( sComponent ) + { + path = shelllink_get_msi_component_path( sComponent ); + if (!path) + return E_FAIL; + } + else + path = strdupW( sPath ); + + if ( lpici->cbSize == sizeof (CMINVOKECOMMANDINFOEX) && + ( lpici->fMask & CMIC_MASK_UNICODE ) ) + { + LPCMINVOKECOMMANDINFOEX iciex = (LPCMINVOKECOMMANDINFOEX) lpici; + DWORD len = 2; + + if ( sArgs ) + len += wcslen( sArgs ); + if ( iciex->lpParametersW ) + len += wcslen( iciex->lpParametersW ); + + args = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + args[0] = 0; + if ( sArgs ) + wcscat( args, sArgs ); + if ( iciex->lpParametersW ) + { + static const WCHAR space[] = { ' ', 0 }; + wcscat( args, space ); + wcscat( args, iciex->lpParametersW ); + } + } + else if (sArgs != NULL) + { + args = strdupW(sArgs); + } + + memset( &sei, 0, sizeof sei ); + sei.cbSize = sizeof sei; + sei.fMask = SEE_MASK_UNICODE | (lpici->fMask & (SEE_MASK_NOASYNC|SEE_MASK_ASYNCOK|SEE_MASK_FLAG_NO_UI)); + sei.lpFile = path; + sei.nShow = iShowCmd; + sei.lpDirectory = sWorkDir; + sei.lpParameters = args; + sei.lpVerb = szOpen; + + // HACK for ShellExecuteExW + if (!wcsstr(sPath, L".cpl")) + sei.lpVerb = szOpen; + else + sei.lpVerb = szCplOpen; + + if( ShellExecuteExW( &sei ) ) + r = S_OK; + else + r = E_FAIL; + + HeapFree( GetProcessHeap(), 0, args ); + HeapFree( GetProcessHeap(), 0, path ); + + return r; +} + +HRESULT WINAPI ShellLink::GetCommandString(UINT_PTR idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax) +{ + FIXME("%p %lu %u %p %p %u\n", this, idCmd, uType, pwReserved, pszName, cchMax ); + + return E_NOTIMPL; +} + +INT_PTR CALLBACK ExtendedShortcutProc( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + HWND hDlgCtrl; + + switch(uMsg) + { + case WM_INITDIALOG: + if (lParam) + { + hDlgCtrl = GetDlgItem(hwndDlg, 14000); + SendMessage(hDlgCtrl, BM_SETCHECK, BST_CHECKED, 0); + } + return TRUE; + case WM_COMMAND: + hDlgCtrl = GetDlgItem(hwndDlg, 14000); + if (LOWORD(wParam) == IDOK) + { + if ( SendMessage(hDlgCtrl, BM_GETCHECK, 0, 0) == BST_CHECKED ) + EndDialog(hwndDlg, 1); + else + EndDialog(hwndDlg, 0); + } + else if (LOWORD(wParam) == IDCANCEL) + { + EndDialog(hwndDlg, -1); + } + else if (LOWORD(wParam) == 14000) + { + if ( SendMessage(hDlgCtrl, BM_GETCHECK, 0, 0) == BST_CHECKED) + SendMessage(hDlgCtrl, BM_SETCHECK, BST_UNCHECKED, 0); + else + SendMessage(hDlgCtrl, BM_SETCHECK, BST_CHECKED, 0); + + } + } + return FALSE; +} + +/************************************************************************** + * SH_ShellLinkDlgProc + * + * dialog proc of the shortcut property dialog + */ + +INT_PTR CALLBACK ShellLink::SH_ShellLinkDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LPPROPSHEETPAGEW ppsp; + LPPSHNOTIFY lppsn; + ShellLink *pThis; + HWND hDlgCtrl; + WCHAR szBuffer[MAX_PATH]; + WCHAR * ptr; + int IconIndex; + INT_PTR result; + + pThis = (ShellLink *)GetWindowLongPtr(hwndDlg, DWLP_USER); + + switch(uMsg) + { + case WM_INITDIALOG: + ppsp = (LPPROPSHEETPAGEW)lParam; + if (ppsp == NULL) + break; + + TRACE("ShellLink_DlgProc (WM_INITDIALOG hwnd %p lParam %p ppsplParam %x)\n",hwndDlg, lParam, ppsp->lParam); + + pThis = (ShellLink *)ppsp->lParam; + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pThis); + + TRACE("sArgs: %S sComponent: %S sDescription: %S sIcoPath: %S sPath: %S sPathRel: %S sProduct: %S sWorkDir: %S\n", pThis->sArgs, pThis->sComponent, pThis->sDescription, + pThis->sIcoPath, pThis->sPath, pThis->sPathRel, pThis->sProduct, pThis->sWorkDir); + + /* target path */ + hDlgCtrl = GetDlgItem( hwndDlg, 14009 ); + if ( hDlgCtrl != NULL ) + SendMessageW( hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)pThis->sPath ); + + /* working dir */ + hDlgCtrl = GetDlgItem( hwndDlg, 14011 ); + if ( hDlgCtrl != NULL ) + SendMessageW( hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)pThis->sWorkDir ); + + /* description */ + hDlgCtrl = GetDlgItem( hwndDlg, 14019 ); + if ( hDlgCtrl != NULL ) + SendMessageW( hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)pThis->sDescription ); + return TRUE; + case WM_NOTIFY: + lppsn = (LPPSHNOTIFY) lParam; + if ( lppsn->hdr.code == PSN_APPLY ) + { + /* set working directory */ + hDlgCtrl = GetDlgItem( hwndDlg, 14011 ); + SendMessageW( hDlgCtrl, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)szBuffer ); + pThis->SetWorkingDirectory(szBuffer); + /* set link destination */ + hDlgCtrl = GetDlgItem( hwndDlg, 14009 ); + SendMessageW( hDlgCtrl, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)szBuffer); + if ( !SHELL_ExistsFileW(szBuffer) ) + { + //FIXME load localized error msg + MessageBoxW( hwndDlg, L"file not existing", szBuffer, MB_OK ); + SetWindowLongPtr( hwndDlg, DWL_MSGRESULT, PSNRET_INVALID_NOCHANGEPAGE ); + return TRUE; + } + ptr = wcsrchr(szBuffer, L'.'); + if (ptr && !_wcsnicmp(ptr, L".lnk", 4)) + { + // FIXME load localized error msg + MessageBoxW( hwndDlg, L"You cannot create a link to a shortcut", L"Error", MB_ICONERROR ); + SetWindowLongPtr( hwndDlg, DWL_MSGRESULT, PSNRET_INVALID_NOCHANGEPAGE ); + return TRUE; + } + + pThis->SetPath(szBuffer); + + TRACE("This %p sLinkPath %S\n", pThis, pThis->sLinkPath); + pThis->Save(pThis->sLinkPath, TRUE ); + SetWindowLongPtr( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); + return TRUE; + } + break; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case 14020: + /// + /// FIXME + /// open target directory + /// + return TRUE; + case 14021: + if (pThis->sIcoPath) + wcscpy(szBuffer, pThis->sIcoPath); + IconIndex = pThis->iIcoNdx; + if (PickIconDlg(hwndDlg, szBuffer, MAX_PATH, &IconIndex)) + { + pThis->SetIconLocation(szBuffer, IconIndex); + /// + /// FIXME redraw icon + } + return TRUE; + case 14022: + result = DialogBoxParamW(shell32_hInstance, MAKEINTRESOURCEW(SHELL_EXTENDED_SHORTCUT_DLG), hwndDlg, ExtendedShortcutProc, (LPARAM)pThis->bRunAs); + if (result == 1 || result == 0) + { + if (pThis->bRunAs != result ) + { + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + } + + pThis->bRunAs = result; + } + return TRUE; + } + switch(HIWORD(wParam)) + { + case EN_CHANGE: + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + break; + } + break; + default: + break; + } + return FALSE; +} + +/************************************************************************** + * ShellLink_IShellPropSheetExt interface + */ + +HRESULT WINAPI ShellLink::AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam) +{ + HPROPSHEETPAGE hPage; + BOOL bRet; + + hPage = SH_CreatePropertySheetPage("SHELL_GENERAL_SHORTCUT_DLG", SH_ShellLinkDlgProc, (LPARAM)this, NULL); + if (hPage == NULL) + { + ERR("failed to create property sheet page\n"); + return E_FAIL; + } + + bRet = pfnAddPage(hPage, lParam); + if (bRet) + return S_OK; + else + return E_FAIL; +} + +HRESULT WINAPI ShellLink::ReplacePage(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam) +{ + TRACE("(%p) (uPageID %u, pfnReplacePage %p lParam %p\n", this, uPageID, pfnReplacePage, lParam); + return E_NOTIMPL; +} + +HRESULT WINAPI ShellLink::SetSite(IUnknown *punk) +{ + TRACE("%p %p\n", this, punk); + + site = punk; + + return S_OK; +} + +HRESULT WINAPI ShellLink::GetSite(REFIID iid, void ** ppvSite) +{ + TRACE("%p %s %p\n", this, debugstr_guid(&iid), ppvSite ); + + if (site == NULL) + return E_FAIL; + return site->QueryInterface(iid, ppvSite ); +} + +/************************************************************************** + * IShellLink_ConstructFromFile + */ +HRESULT WINAPI IShellLink_ConstructFromFile(IUnknown *pUnkOuter, REFIID riid, LPCITEMIDLIST pidl, LPVOID *ppv) +{ + CComPtr psl; + + HRESULT hr = ShellLink::_CreatorClass::CreateInstance(NULL, riid, (void**)&psl); + + if (SUCCEEDED(hr)) + { + CComPtr ppf; + + *ppv = NULL; + + hr = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); + + if (SUCCEEDED(hr)) + { + WCHAR path[MAX_PATH]; + + if (SHGetPathFromIDListW(pidl, path)) + hr = ppf->Load(path, 0); + else + hr = E_FAIL; + + if (SUCCEEDED(hr)) + *ppv = psl.Detach(); + } + } + + return hr; +} diff --git a/reactos/dll/win32/shell32_new/shelllink.h b/reactos/dll/win32/shell32_new/shelllink.h new file mode 100644 index 00000000000..2005235cc1b --- /dev/null +++ b/reactos/dll/win32/shell32_new/shelllink.h @@ -0,0 +1,182 @@ +/* + * + * Copyright 1997 Marcus Meissner + * Copyright 1998 Juergen Schmied + * Copyright 2005 Mike McCormack + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + */ + +#ifndef _SHELLLINK_H_ +#define _SHELLLINK_H_ + +class ShellLink : + public CComCoClass, + public CComObjectRootEx, + public IShellLinkA, + public IShellLinkW, + public IPersistFile, + public IPersistStream, + public IShellLinkDataList, + public IShellExtInit, + public IContextMenu, + public IObjectWithSite, + public IShellPropSheetExt +{ +public: + /* link file formats */ + + #include "pshpack1.h" + + struct volume_info + { + DWORD type; + DWORD serial; + WCHAR label[12]; /* assume 8.3 */ + }; + + #include "poppack.h" + +private: + /* data structures according to the information in the link */ + LPITEMIDLIST pPidl; + WORD wHotKey; + SYSTEMTIME time1; + SYSTEMTIME time2; + SYSTEMTIME time3; + + DWORD iShowCmd; + LPWSTR sIcoPath; + INT iIcoNdx; + LPWSTR sPath; + LPWSTR sArgs; + LPWSTR sWorkDir; + LPWSTR sDescription; + LPWSTR sPathRel; + LPWSTR sProduct; + LPWSTR sComponent; + volume_info volume; + LPWSTR sLinkPath; + BOOL bRunAs; + BOOL bDirty; + INT iIdOpen; /* id of the "Open" entry in the context menu */ + CComPtr site; +public: + ShellLink(); + ~ShellLink(); + LPWSTR ShellLink_GetAdvertisedArg(LPCWSTR str); + HRESULT ShellLink_SetAdvertiseInfo(LPCWSTR str); + static INT_PTR CALLBACK SH_ShellLinkDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + + // IPersistFile + virtual HRESULT WINAPI GetClassID(CLSID *pclsid); + virtual HRESULT WINAPI IsDirty(); + virtual HRESULT WINAPI Load(LPCOLESTR pszFileName, DWORD dwMode); + virtual HRESULT WINAPI Save(LPCOLESTR pszFileName, BOOL fRemember); + virtual HRESULT WINAPI SaveCompleted(LPCOLESTR pszFileName); + virtual HRESULT WINAPI GetCurFile(LPOLESTR *ppszFileName); + + // IPersistStream +// virtual WINAPI HRESULT GetClassID(CLSID *pclsid); +// virtual HRESULT WINAPI IsDirty(); + virtual HRESULT WINAPI Load(IStream *stm); + virtual HRESULT WINAPI Save(IStream *stm, BOOL fClearDirty); + virtual HRESULT WINAPI GetSizeMax(ULARGE_INTEGER *pcbSize); + + // IShellLinkA + virtual HRESULT WINAPI GetPath(LPSTR pszFile, INT cchMaxPath, WIN32_FIND_DATAA *pfd, DWORD fFlags); + virtual HRESULT WINAPI GetIDList(LPITEMIDLIST * ppidl); + virtual HRESULT WINAPI SetIDList(LPCITEMIDLIST pidl); + virtual HRESULT WINAPI GetDescription(LPSTR pszName,INT cchMaxName); + virtual HRESULT WINAPI SetDescription(LPCSTR pszName); + virtual HRESULT WINAPI GetWorkingDirectory(LPSTR pszDir,INT cchMaxPath); + virtual HRESULT WINAPI SetWorkingDirectory(LPCSTR pszDir); + virtual HRESULT WINAPI GetArguments(LPSTR pszArgs,INT cchMaxPath); + virtual HRESULT WINAPI SetArguments(LPCSTR pszArgs); + virtual HRESULT WINAPI GetHotkey(WORD *pwHotkey); + virtual HRESULT WINAPI SetHotkey(WORD wHotkey); + virtual HRESULT WINAPI GetShowCmd(INT *piShowCmd); + virtual HRESULT WINAPI SetShowCmd(INT iShowCmd); + virtual HRESULT WINAPI GetIconLocation(LPSTR pszIconPath,INT cchIconPath,INT *piIcon); + virtual HRESULT WINAPI SetIconLocation(LPCSTR pszIconPath,INT iIcon); + virtual HRESULT WINAPI SetRelativePath(LPCSTR pszPathRel, DWORD dwReserved); + virtual HRESULT WINAPI Resolve(HWND hwnd, DWORD fFlags); + virtual HRESULT WINAPI SetPath(LPCSTR pszFile); + + // IShellLinkW + virtual HRESULT WINAPI GetPath(LPWSTR pszFile, INT cchMaxPath, WIN32_FIND_DATAW *pfd, DWORD fFlags); +// virtual HRESULT WINAPI GetIDList(LPITEMIDLIST *ppidl); +// virtual HRESULT WINAPI SetIDList(LPCITEMIDLIST pidl); + virtual HRESULT WINAPI GetDescription(LPWSTR pszName, INT cchMaxName); + virtual HRESULT WINAPI SetDescription(LPCWSTR pszName); + virtual HRESULT WINAPI GetWorkingDirectory(LPWSTR pszDir, INT cchMaxPath); + virtual HRESULT WINAPI SetWorkingDirectory(LPCWSTR pszDir); + virtual HRESULT WINAPI GetArguments(LPWSTR pszArgs,INT cchMaxPath); + virtual HRESULT WINAPI SetArguments(LPCWSTR pszArgs); +// virtual HRESULT WINAPI GetHotkey(WORD *pwHotkey); +// virtual HRESULT WINAPI SetHotkey(WORD wHotkey); +// virtual HRESULT WINAPI GetShowCmd(INT *piShowCmd); +// virtual HRESULT WINAPI SetShowCmd(INT iShowCmd); + virtual HRESULT WINAPI GetIconLocation(LPWSTR pszIconPath,INT cchIconPath,INT *piIcon); + virtual HRESULT WINAPI SetIconLocation(LPCWSTR pszIconPath,INT iIcon); + virtual HRESULT WINAPI SetRelativePath(LPCWSTR pszPathRel, DWORD dwReserved); +// virtual HRESULT WINAPI Resolve(HWND hwnd, DWORD fFlags); + virtual HRESULT WINAPI SetPath(LPCWSTR pszFile); + + // IShellLinkDataList + virtual HRESULT WINAPI AddDataBlock(void *pDataBlock); + virtual HRESULT WINAPI CopyDataBlock(DWORD dwSig, void **ppDataBlock); + virtual HRESULT WINAPI RemoveDataBlock(DWORD dwSig); + virtual HRESULT WINAPI GetFlags(DWORD *pdwFlags); + virtual HRESULT WINAPI SetFlags(DWORD dwFlags); + + // IShellExtInit + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID); + + // IContextMenu + virtual HRESULT WINAPI QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); + virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpici); + virtual HRESULT WINAPI GetCommandString(UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax); + + // IShellPropSheetExt + virtual HRESULT WINAPI AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam); + virtual HRESULT WINAPI ReplacePage(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam); + + // IObjectWithSite + virtual HRESULT WINAPI SetSite(IUnknown *punk); + virtual HRESULT WINAPI GetSite(REFIID iid, void **ppvSite); + +DECLARE_REGISTRY_RESOURCEID(IDR_SHELLLINK) +DECLARE_NOT_AGGREGATABLE(ShellLink) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(ShellLink) + COM_INTERFACE_ENTRY2_IID(IID_IPersist, IPersist, IPersistFile) + COM_INTERFACE_ENTRY_IID(IID_IPersistFile, IPersistFile) + COM_INTERFACE_ENTRY_IID(IID_IPersistStream, IPersistStream) + COM_INTERFACE_ENTRY_IID(IID_IShellLinkA, IShellLinkA) + COM_INTERFACE_ENTRY_IID(IID_IShellLinkW, IShellLinkW) + COM_INTERFACE_ENTRY_IID(IID_IShellLinkDataList, IShellLinkDataList) + COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IShellPropSheetExt, IShellPropSheetExt) + COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite) +END_COM_MAP() +}; + +#endif // _SHELLLINK_H_ diff --git a/reactos/dll/win32/shell32_new/shellole.cpp b/reactos/dll/win32/shell32_new/shellole.cpp new file mode 100644 index 00000000000..3c01c0a360d --- /dev/null +++ b/reactos/dll/win32/shell32_new/shellole.cpp @@ -0,0 +1,586 @@ +/* + * handling of SHELL32.DLL OLE-Objects + * + * Copyright 1997 Marcus Meissner + * Copyright 1998 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "shfldr_desktop.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +extern HRESULT WINAPI IFSFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); + +static const WCHAR sShell32[12] = {'S','H','E','L','L','3','2','.','D','L','L','\0'}; + +/************************************************************************** + * Default ClassFactory types + */ +typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObject); +HRESULT IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInst, IClassFactory **theFactory); + +/* FIXME: this should be SHLWAPI.24 since we can't yet import by ordinal */ + +DWORD WINAPI __SHGUIDToStringW (REFGUID guid, LPWSTR str) +{ + WCHAR sFormat[52] = {'{','%','0','8','l','x','-','%','0','4', + 'x','-','%','0','4','x','-','%','0','2', + 'x','%','0','2','x','-','%','0','2','x', + '%','0','2','x','%','0','2','x','%','0', + '2','x','%','0','2','x','%','0','2','x', + '}','\0'}; + + return swprintf ( str, sFormat, + guid.Data1, guid.Data2, guid.Data3, + guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], + guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7] ); + +} + +/************************************************************************* + * SHCoCreateInstance [SHELL32.102] + * + * Equivalent to CoCreateInstance. Under Windows 9x this function could sometimes + * use the shell32 built-in "mini-COM" without the need to load ole32.dll - see + * SHLoadOLE for details. + * + * Under wine if a "LoadWithoutCOM" value is present or the object resides in + * shell32.dll the function will load the object manually without the help of ole32 + * + * NOTES + * exported by ordinal + * + * SEE ALSO + * CoCreateInstace, SHLoadOLE + */ +HRESULT WINAPI SHCoCreateInstance( + LPCWSTR aclsid, + const CLSID *clsid, + LPUNKNOWN pUnkOuter, + REFIID refiid, + LPVOID *ppv) +{ + DWORD hres; + CLSID iid; + const CLSID * myclsid = clsid; + WCHAR sKeyName[MAX_PATH]; + const WCHAR sCLSID[7] = {'C','L','S','I','D','\\','\0'}; + WCHAR sClassID[60]; + const WCHAR sInProcServer32[16] ={'\\','I','n','p','r','o','c','S','e','r','v','e','r','3','2','\0'}; + const WCHAR sLoadWithoutCOM[15] ={'L','o','a','d','W','i','t','h','o','u','t','C','O','M','\0'}; + WCHAR sDllPath[MAX_PATH]; + HKEY hKey; + DWORD dwSize; + BOOLEAN bLoadFromShell32 = FALSE; + BOOLEAN bLoadWithoutCOM = FALSE; + CComPtr pcf; + + if(!ppv) return E_POINTER; + *ppv=NULL; + + /* if the clsid is a string, convert it */ + if (!clsid) + { + if (!aclsid) return REGDB_E_CLASSNOTREG; + CLSIDFromString((LPOLESTR)aclsid, &iid); + myclsid = &iid; + } + + TRACE("(%p,%s,unk:%p,%s,%p)\n", + aclsid, shdebugstr_guid(myclsid), pUnkOuter, shdebugstr_guid(&refiid), ppv); + + /* we look up the dll path in the registry */ + __SHGUIDToStringW(*myclsid, sClassID); + wcscpy(sKeyName, sCLSID); + wcscat(sKeyName, sClassID); + wcscat(sKeyName, sInProcServer32); + + if (ERROR_SUCCESS == RegOpenKeyExW(HKEY_CLASSES_ROOT, sKeyName, 0, KEY_READ, &hKey)) { + dwSize = sizeof(sDllPath); + SHQueryValueExW(hKey, NULL, 0,0, sDllPath, &dwSize ); + + /* if a special registry key is set, we load a shell extension without help of OLE32 */ + bLoadWithoutCOM = (ERROR_SUCCESS == SHQueryValueExW(hKey, sLoadWithoutCOM, 0, 0, 0, 0)); + + /* if the com object is inside shell32, omit use of ole32 */ + bLoadFromShell32 = (0==lstrcmpiW( PathFindFileNameW(sDllPath), sShell32)); + + RegCloseKey (hKey); + } else { + /* since we can't find it in the registry we try internally */ + bLoadFromShell32 = TRUE; + } + + TRACE("WithoutCom=%u FromShell=%u\n", bLoadWithoutCOM, bLoadFromShell32); + + /* now we create an instance */ + if (bLoadFromShell32) { + if (! SUCCEEDED(DllGetClassObject(*myclsid, IID_IClassFactory, (LPVOID*)&pcf))) { + ERR("LoadFromShell failed for CLSID=%s\n", shdebugstr_guid(myclsid)); + } + } else if (bLoadWithoutCOM) { + + /* load an external dll without ole32 */ + HINSTANCE hLibrary; + typedef HRESULT (CALLBACK *DllGetClassObjectFunc)(REFCLSID clsid, REFIID iid, LPVOID *ppv); + DllGetClassObjectFunc DllGetClassObject; + + if ((hLibrary = LoadLibraryExW(sDllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH)) == 0) { + ERR("couldn't load InprocServer32 dll %s\n", debugstr_w(sDllPath)); + hres = E_ACCESSDENIED; + goto end; + } else if (!(DllGetClassObject = (DllGetClassObjectFunc)GetProcAddress(hLibrary, "DllGetClassObject"))) { + ERR("couldn't find function DllGetClassObject in %s\n", debugstr_w(sDllPath)); + FreeLibrary( hLibrary ); + hres = E_ACCESSDENIED; + goto end; + } else if (! SUCCEEDED(hres = DllGetClassObject(*myclsid, IID_IClassFactory, (LPVOID*)&pcf))) { + TRACE("GetClassObject failed 0x%08x\n", hres); + goto end; + } + + } else { + + /* load an external dll in the usual way */ + hres = CoCreateInstance(*myclsid, pUnkOuter, CLSCTX_INPROC_SERVER, refiid, ppv); + goto end; + } + + /* here we should have a ClassFactory */ + if (!pcf) return E_ACCESSDENIED; + + hres = pcf->CreateInstance(pUnkOuter, refiid, ppv); +end: + if(hres!=S_OK) + { + ERR("failed (0x%08x) to create CLSID:%s IID:%s\n", + hres, shdebugstr_guid(myclsid), shdebugstr_guid(&refiid)); + ERR("class not found in registry\n"); + } + + TRACE("-- instance: %p\n",*ppv); + return hres; +} + +/************************************************************************* + * SHCLSIDFromString [SHELL32.147] + * + * Under Windows 9x this was an ANSI version of CLSIDFromString. It also allowed + * to avoid dependency on ole32.dll (see SHLoadOLE for details). + * + * Under Windows NT/2000/XP this is equivalent to CLSIDFromString + * + * NOTES + * exported by ordinal + * + * SEE ALSO + * CLSIDFromString, SHLoadOLE + */ +DWORD WINAPI SHCLSIDFromStringA (LPCSTR clsid, CLSID *id) +{ + WCHAR buffer[40]; + TRACE("(%p(%s) %p)\n", clsid, clsid, id); + if (!MultiByteToWideChar( CP_ACP, 0, clsid, -1, buffer, sizeof(buffer)/sizeof(WCHAR) )) + return CO_E_CLASSSTRING; + return CLSIDFromString( buffer, id ); +} + +DWORD WINAPI SHCLSIDFromStringW (LPCWSTR clsid, CLSID *id) +{ + TRACE("(%p(%s) %p)\n", clsid, debugstr_w(clsid), id); + return CLSIDFromString((LPWSTR)clsid, id); +} + +EXTERN_C DWORD WINAPI SHCLSIDFromStringAW (LPCVOID clsid, CLSID *id) +{ + if (SHELL_OsIsUnicode()) + return SHCLSIDFromStringW ((LPCWSTR)clsid, id); + return SHCLSIDFromStringA ((LPCSTR)clsid, id); +} + +/************************************************************************* + * SHGetMalloc [SHELL32.@] + * + * Equivalent to CoGetMalloc(MEMCTX_TASK, ...). Under Windows 9x this function + * could use the shell32 built-in "mini-COM" without the need to load ole32.dll - + * see SHLoadOLE for details. + * + * PARAMS + * lpmal [O] Destination for IMalloc interface. + * + * RETURNS + * Success: S_OK. lpmal contains the shells IMalloc interface. + * Failure. An HRESULT error code. + * + * SEE ALSO + * CoGetMalloc, SHLoadOLE + */ +HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal) +{ + TRACE("(%p)\n", lpmal); + return CoGetMalloc(MEMCTX_TASK, lpmal); +} + +/************************************************************************* + * SHAlloc [SHELL32.196] + * + * Equivalent to CoTaskMemAlloc. Under Windows 9x this function could use + * the shell32 built-in "mini-COM" without the need to load ole32.dll - + * see SHLoadOLE for details. + * + * NOTES + * exported by ordinal + * + * SEE ALSO + * CoTaskMemAlloc, SHLoadOLE + */ +LPVOID WINAPI SHAlloc(DWORD len) +{ + LPVOID ret; + + ret = CoTaskMemAlloc(len); + TRACE("%u bytes at %p\n",len, ret); + return ret; +} + +/************************************************************************* + * SHFree [SHELL32.195] + * + * Equivalent to CoTaskMemFree. Under Windows 9x this function could use + * the shell32 built-in "mini-COM" without the need to load ole32.dll - + * see SHLoadOLE for details. + * + * NOTES + * exported by ordinal + * + * SEE ALSO + * CoTaskMemFree, SHLoadOLE + */ +void WINAPI SHFree(LPVOID pv) +{ + TRACE("%p\n",pv); + CoTaskMemFree(pv); +} + +/************************************************************************* + * SHGetDesktopFolder [SHELL32.@] + */ +HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf) +{ + HRESULT hres = S_OK; + TRACE("\n"); + + if(!psf) return E_INVALIDARG; + *psf = NULL; + hres = CDesktopFolder::_CreatorClass::CreateInstance(NULL, IID_IShellFolder, (void**)psf); + + TRACE("-- %p->(%p)\n",psf, *psf); + return hres; +} +/************************************************************************** + * Default ClassFactory Implementation + * + * SHCreateDefClassObject + * + * NOTES + * Helper function for dlls without their own classfactory. + * A generic classfactory is returned. + * When the CreateInstance of the cf is called the callback is executed. + */ + +class IDefClFImpl : + public CComObjectRootEx, + public IClassFactory +{ +private: + CLSID *rclsid; + LPFNCREATEINSTANCE lpfnCI; + const IID *riidInst; + LONG *pcRefDll; /* pointer to refcounter in external dll (ugrrr...) */ +public: + IDefClFImpl(); + HRESULT Initialize(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInstx); + + // IClassFactory + virtual HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject); + virtual HRESULT WINAPI LockServer(BOOL fLock); + +BEGIN_COM_MAP(IDefClFImpl) + COM_INTERFACE_ENTRY_IID(IID_IClassFactory, IClassFactory) +END_COM_MAP() +}; + +IDefClFImpl::IDefClFImpl() +{ + lpfnCI = NULL; + riidInst = NULL; + pcRefDll = NULL; +} + +HRESULT IDefClFImpl::Initialize(LPFNCREATEINSTANCE lpfnCIx, PLONG pcRefDllx, const IID *riidInstx) +{ + lpfnCI = lpfnCIx; + riidInst = riidInstx; + pcRefDll = pcRefDllx; + + if (pcRefDll) + InterlockedIncrement(pcRefDll); + + TRACE("(%p)%s\n", this, shdebugstr_guid(riidInst)); + return S_OK; +} + +/****************************************************************************** + * IDefClF_fnCreateInstance + */ +HRESULT WINAPI IDefClFImpl::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject) +{ + TRACE("%p->(%p,%s,%p)\n", this, pUnkOuter, shdebugstr_guid(&riid), ppvObject); + + *ppvObject = NULL; + + if (riidInst == NULL || IsEqualCLSID(riid, *riidInst) || IsEqualCLSID(riid, IID_IUnknown)) + { + return lpfnCI(pUnkOuter, riid, ppvObject); + } + + ERR("unknown IID requested %s\n", shdebugstr_guid(&riid)); + return E_NOINTERFACE; +} + +/****************************************************************************** + * IDefClF_fnLockServer + */ +HRESULT WINAPI IDefClFImpl::LockServer(BOOL fLock) +{ + TRACE("%p->(0x%x), not implemented\n", this, fLock); + return E_NOTIMPL; +} + +/************************************************************************** + * IDefClF_fnConstructor + */ + +HRESULT IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInst, IClassFactory **theFactory) +{ + CComObject *theClassObject; + CComPtr result; + HRESULT hResult; + + if (theFactory == NULL) + return E_POINTER; + *theFactory = NULL; + ATLTRY (theClassObject = new CComObject); + if (theClassObject == NULL) + return E_OUTOFMEMORY; + hResult = theClassObject->QueryInterface (IID_IClassFactory, (void **)&result); + if (FAILED (hResult)) + { + delete theClassObject; + return hResult; + } + hResult = theClassObject->Initialize (lpfnCI, pcRefDll, riidInst); + if (FAILED (hResult)) + return hResult; + *theFactory = result.Detach (); + return S_OK; +} + +/****************************************************************************** + * SHCreateDefClassObject [SHELL32.70] + */ +HRESULT WINAPI SHCreateDefClassObject( + REFIID riid, + LPVOID* ppv, + LPFNCREATEINSTANCE lpfnCI, /* [in] create instance callback entry */ + LPDWORD pcRefDll, /* [in/out] ref count of the dll */ + REFIID riidInst) /* [in] optional interface to the instance */ +{ + IClassFactory *pcf; + HRESULT hResult; + + TRACE("%s %p %p %p %s\n", shdebugstr_guid(&riid), ppv, lpfnCI, pcRefDll, shdebugstr_guid(&riidInst)); + + if (!IsEqualCLSID(riid, IID_IClassFactory)) + return E_NOINTERFACE; + hResult = IDefClF_fnConstructor(lpfnCI, (PLONG)pcRefDll, &riidInst, &pcf); + if (FAILED(hResult)) + return hResult; + *ppv = pcf; + return NOERROR; +} + +/************************************************************************* + * DragAcceptFiles [SHELL32.@] + */ +void WINAPI DragAcceptFiles(HWND hWnd, BOOL b) +{ + LONG exstyle; + + if( !IsWindow(hWnd) ) return; + exstyle = GetWindowLongPtrA(hWnd,GWL_EXSTYLE); + if (b) + exstyle |= WS_EX_ACCEPTFILES; + else + exstyle &= ~WS_EX_ACCEPTFILES; + SetWindowLongPtrA(hWnd,GWL_EXSTYLE,exstyle); +} + +/************************************************************************* + * DragFinish [SHELL32.@] + */ +void WINAPI DragFinish(HDROP h) +{ + TRACE("\n"); + GlobalFree((HGLOBAL)h); +} + +/************************************************************************* + * DragQueryPoint [SHELL32.@] + */ +BOOL WINAPI DragQueryPoint(HDROP hDrop, POINT *p) +{ + DROPFILES *lpDropFileStruct; + BOOL bRet; + + TRACE("\n"); + + lpDropFileStruct = (DROPFILES *) GlobalLock(hDrop); + + *p = lpDropFileStruct->pt; + bRet = lpDropFileStruct->fNC; + + GlobalUnlock(hDrop); + return bRet; +} + +/************************************************************************* + * DragQueryFileA [SHELL32.@] + * DragQueryFile [SHELL32.@] + */ +UINT WINAPI DragQueryFileA( + HDROP hDrop, + UINT lFile, + LPSTR lpszFile, + UINT lLength) +{ + LPSTR lpDrop; + UINT i = 0; + DROPFILES *lpDropFileStruct = (DROPFILES *) GlobalLock(hDrop); + + TRACE("(%p, %x, %p, %u)\n", hDrop,lFile,lpszFile,lLength); + + if(!lpDropFileStruct) goto end; + + lpDrop = (LPSTR) lpDropFileStruct + lpDropFileStruct->pFiles; + + if(lpDropFileStruct->fWide) { + LPWSTR lpszFileW = NULL; + + if(lpszFile) { + lpszFileW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, lLength*sizeof(WCHAR)); + if(lpszFileW == NULL) { + goto end; + } + } + i = DragQueryFileW(hDrop, lFile, lpszFileW, lLength); + + if(lpszFileW) { + WideCharToMultiByte(CP_ACP, 0, lpszFileW, -1, lpszFile, lLength, 0, NULL); + HeapFree(GetProcessHeap(), 0, lpszFileW); + } + goto end; + } + + while (i++ < lFile) + { + while (*lpDrop++); /* skip filename */ + if (!*lpDrop) + { + i = (lFile == 0xFFFFFFFF) ? i : 0; + goto end; + } + } + + i = strlen(lpDrop); + if (!lpszFile ) goto end; /* needed buffer size */ + lstrcpynA (lpszFile, lpDrop, lLength); +end: + GlobalUnlock(hDrop); + return i; +} + +/************************************************************************* + * DragQueryFileW [SHELL32.@] + */ +UINT WINAPI DragQueryFileW( + HDROP hDrop, + UINT lFile, + LPWSTR lpszwFile, + UINT lLength) +{ + LPWSTR lpwDrop; + UINT i = 0; + DROPFILES *lpDropFileStruct = (DROPFILES *) GlobalLock(hDrop); + + TRACE("(%p, %x, %p, %u)\n", hDrop,lFile,lpszwFile,lLength); + + if(!lpDropFileStruct) goto end; + + lpwDrop = (LPWSTR) ((LPSTR)lpDropFileStruct + lpDropFileStruct->pFiles); + + if(lpDropFileStruct->fWide == FALSE) { + LPSTR lpszFileA = NULL; + + if(lpszwFile) { + lpszFileA = (LPSTR)HeapAlloc(GetProcessHeap(), 0, lLength); + if(lpszFileA == NULL) { + goto end; + } + } + i = DragQueryFileA(hDrop, lFile, lpszFileA, lLength); + + if(lpszFileA) { + MultiByteToWideChar(CP_ACP, 0, lpszFileA, -1, lpszwFile, lLength); + HeapFree(GetProcessHeap(), 0, lpszFileA); + } + goto end; + } + + i = 0; + while (i++ < lFile) + { + while (*lpwDrop++); /* skip filename */ + if (!*lpwDrop) + { + i = (lFile == 0xFFFFFFFF) ? i : 0; + goto end; + } + } + + i = wcslen(lpwDrop); + if ( !lpszwFile) goto end; /* needed buffer size */ + lstrcpynW (lpszwFile, lpwDrop, lLength); +end: + GlobalUnlock(hDrop); + return i; +} diff --git a/reactos/dll/win32/shell32_new/shellord.cpp b/reactos/dll/win32/shell32_new/shellord.cpp new file mode 100644 index 00000000000..ff499ea4132 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shellord.cpp @@ -0,0 +1,2281 @@ +/* + * The parameters of many functions changes between different OS versions + * (NT uses Unicode strings, 95 uses ASCII strings) + * + * Copyright 1997 Marcus Meissner + * 1998 Jürgen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ +#include "config.h" + +#include +#include +#include + +#include "winerror.h" +#include "windef.h" +#include "winbase.h" +#include "winreg.h" +#include "wine/debug.h" +#include "winnls.h" +#include "winternl.h" + +#include +#include +#include +#include + +#include "shellapi.h" +#include "objbase.h" +#include "shlguid.h" +#include "wingdi.h" +#include "winuser.h" +#include "shlobj.h" +#include "shell32_main.h" +#include "undocshell.h" +#include "pidl.h" +#include "shlwapi.h" +#include "commdlg.h" +#include "recyclebin.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell); +WINE_DECLARE_DEBUG_CHANNEL(pidl); + +/* FIXME: !!! move CREATEMRULIST and flags to header file !!! */ +/* !!! it is in both here and comctl32undoc.c !!! */ +typedef struct tagCREATEMRULIST +{ + DWORD cbSize; /* size of struct */ + DWORD nMaxItems; /* max no. of items in list */ + DWORD dwFlags; /* see below */ + HKEY hKey; /* root reg. key under which list is saved */ + LPCSTR lpszSubKey; /* reg. subkey */ + PROC lpfnCompare; /* item compare proc */ +} CREATEMRULISTA, *LPCREATEMRULISTA; + +/* dwFlags */ +#define MRUF_STRING_LIST 0 /* list will contain strings */ +#define MRUF_BINARY_LIST 1 /* list will contain binary data */ +#define MRUF_DELAYED_SAVE 2 /* only save list order to reg. is FreeMRUList */ + +EXTERN_C HANDLE WINAPI CreateMRUListA(LPCREATEMRULISTA lpcml); +EXTERN_C DWORD WINAPI FreeMRUList(HANDLE hMRUList); +EXTERN_C INT WINAPI AddMRUData(HANDLE hList, LPCVOID lpData, DWORD cbData); +EXTERN_C INT WINAPI FindMRUData(HANDLE hList, LPCVOID lpData, DWORD cbData, LPINT lpRegNum); +EXTERN_C INT WINAPI EnumMRUListA(HANDLE hList, INT nItemPos, LPVOID lpBuffer, DWORD nBufferSize); + + +/* Get a function pointer from a DLL handle */ +#define GET_FUNC(func, funcType, module, name, fail) \ + do { \ + if (!func) { \ + if (!SHELL32_h##module && !(SHELL32_h##module = LoadLibraryA(#module ".dll"))) return fail; \ + func = (funcType)GetProcAddress(SHELL32_h##module, name); \ + if (!func) return fail; \ + } \ + } while (0) + +/* Function pointers for GET_FUNC macro */ +static HMODULE SHELL32_hshlwapi=NULL; + + +/************************************************************************* + * ParseFieldA [internal] + * + * copies a field from a ',' delimited string + * + * first field is nField = 1 + */ +DWORD WINAPI ParseFieldA( + LPCSTR src, + DWORD nField, + LPSTR dst, + DWORD len) +{ + WARN("(%s,0x%08x,%p,%d) semi-stub.\n",debugstr_a(src),nField,dst,len); + + if (!src || !src[0] || !dst || !len) + return 0; + + /* skip n fields delimited by ',' */ + while (nField > 1) + { + if (*src=='\0') return FALSE; + if (*(src++)==',') nField--; + } + + /* copy part till the next ',' to dst */ + while ( *src!='\0' && *src!=',' && (len--)>0 ) *(dst++)=*(src++); + + /* finalize the string */ + *dst=0x0; + + return TRUE; +} + +/************************************************************************* + * ParseFieldW [internal] + * + * copies a field from a ',' delimited string + * + * first field is nField = 1 + */ +DWORD WINAPI ParseFieldW(LPCWSTR src, DWORD nField, LPWSTR dst, DWORD len) +{ + WARN("(%s,0x%08x,%p,%d) semi-stub.\n", debugstr_w(src), nField, dst, len); + + if (!src || !src[0] || !dst || !len) + return 0; + + /* skip n fields delimited by ',' */ + while (nField > 1) + { + if (*src == 0x0) return FALSE; + if (*src++ == ',') nField--; + } + + /* copy part till the next ',' to dst */ + while ( *src != 0x0 && *src != ',' && (len--)>0 ) *(dst++) = *(src++); + + /* finalize the string */ + *dst = 0x0; + + return TRUE; +} + +/************************************************************************* + * ParseField [SHELL32.58] + */ +EXTERN_C DWORD WINAPI ParseFieldAW(LPCVOID src, DWORD nField, LPVOID dst, DWORD len) +{ + if (SHELL_OsIsUnicode()) + return ParseFieldW((LPCWSTR)src, nField, (LPWSTR)dst, len); + return ParseFieldA((LPCSTR)src, nField, (LPSTR)dst, len); +} + +/************************************************************************* + * GetFileNameFromBrowse [SHELL32.63] + * + */ +BOOL WINAPI GetFileNameFromBrowse( + HWND hwndOwner, + LPWSTR lpstrFile, + UINT nMaxFile, + LPCWSTR lpstrInitialDir, + LPCWSTR lpstrDefExt, + LPCWSTR lpstrFilter, + LPCWSTR lpstrTitle) +{ +typedef BOOL (WINAPI *GetOpenFileNameProc)(OPENFILENAMEW *ofn); + HMODULE hmodule; + GetOpenFileNameProc pGetOpenFileNameW; + OPENFILENAMEW ofn; + BOOL ret; + + TRACE("%p, %s, %d, %s, %s, %s, %s)\n", + hwndOwner, debugstr_w(lpstrFile), nMaxFile, lpstrInitialDir, lpstrDefExt, + lpstrFilter, lpstrTitle); + + hmodule = LoadLibraryW(L"comdlg32.dll"); + if(!hmodule) return FALSE; + pGetOpenFileNameW = (GetOpenFileNameProc)GetProcAddress(hmodule, "GetOpenFileNameW"); + if(!pGetOpenFileNameW) + { + FreeLibrary(hmodule); + return FALSE; + } + + memset(&ofn, 0, sizeof(ofn)); + + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = hwndOwner; + ofn.lpstrFilter = lpstrFilter; + ofn.lpstrFile = lpstrFile; + ofn.nMaxFile = nMaxFile; + ofn.lpstrInitialDir = lpstrInitialDir; + ofn.lpstrTitle = lpstrTitle; + ofn.lpstrDefExt = lpstrDefExt; + ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_FILEMUSTEXIST; + ret = pGetOpenFileNameW(&ofn); + + FreeLibrary(hmodule); + return ret; +} + +/************************************************************************* + * SHGetSetSettings [SHELL32.68] + */ +EXTERN_C VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet) +{ + if(bSet) + { + FIXME("%p 0x%08x TRUE\n", lpss, dwMask); + } + else + { + SHGetSettings((LPSHELLFLAGSTATE)lpss,dwMask); + } +} + +/************************************************************************* + * SHGetSettings [SHELL32.@] + * + * NOTES + * the registry path are for win98 (tested) + * and possibly are the same in nt40 + * + */ +EXTERN_C VOID WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask) +{ + HKEY hKey; + DWORD dwData; + DWORD dwDataSize = sizeof (DWORD); + + TRACE("(%p 0x%08x)\n",lpsfs,dwMask); + + if (RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", + 0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0)) + return; + + if ( (SSF_SHOWEXTENSIONS & dwMask) && !RegQueryValueExA(hKey, "HideFileExt", 0, 0, (LPBYTE)&dwData, &dwDataSize)) + lpsfs->fShowExtensions = ((dwData == 0) ? 0 : 1); + + if ( (SSF_SHOWINFOTIP & dwMask) && !RegQueryValueExA(hKey, "ShowInfoTip", 0, 0, (LPBYTE)&dwData, &dwDataSize)) + lpsfs->fShowInfoTip = ((dwData == 0) ? 0 : 1); + + if ( (SSF_DONTPRETTYPATH & dwMask) && !RegQueryValueExA(hKey, "DontPrettyPath", 0, 0, (LPBYTE)&dwData, &dwDataSize)) + lpsfs->fDontPrettyPath = ((dwData == 0) ? 0 : 1); + + if ( (SSF_HIDEICONS & dwMask) && !RegQueryValueExA(hKey, "HideIcons", 0, 0, (LPBYTE)&dwData, &dwDataSize)) + lpsfs->fHideIcons = ((dwData == 0) ? 0 : 1); + + if ( (SSF_MAPNETDRVBUTTON & dwMask) && !RegQueryValueExA(hKey, "MapNetDrvBtn", 0, 0, (LPBYTE)&dwData, &dwDataSize)) + lpsfs->fMapNetDrvBtn = ((dwData == 0) ? 0 : 1); + + if ( (SSF_SHOWATTRIBCOL & dwMask) && !RegQueryValueExA(hKey, "ShowAttribCol", 0, 0, (LPBYTE)&dwData, &dwDataSize)) + lpsfs->fShowAttribCol = ((dwData == 0) ? 0 : 1); + + if (((SSF_SHOWALLOBJECTS | SSF_SHOWSYSFILES) & dwMask) && !RegQueryValueExA(hKey, "Hidden", 0, 0, (LPBYTE)&dwData, &dwDataSize)) + { if (dwData == 0) + { if (SSF_SHOWALLOBJECTS & dwMask) lpsfs->fShowAllObjects = 0; + if (SSF_SHOWSYSFILES & dwMask) lpsfs->fShowSysFiles = 0; + } + else if (dwData == 1) + { if (SSF_SHOWALLOBJECTS & dwMask) lpsfs->fShowAllObjects = 1; + if (SSF_SHOWSYSFILES & dwMask) lpsfs->fShowSysFiles = 0; + } + else if (dwData == 2) + { if (SSF_SHOWALLOBJECTS & dwMask) lpsfs->fShowAllObjects = 0; + if (SSF_SHOWSYSFILES & dwMask) lpsfs->fShowSysFiles = 1; + } + } + RegCloseKey (hKey); + + TRACE("-- 0x%04x\n", *(WORD*)lpsfs); +} + +/************************************************************************* + * SHShellFolderView_Message [SHELL32.73] + * + * Send a message to an explorer cabinet window. + * + * PARAMS + * hwndCabinet [I] The window containing the shellview to communicate with + * dwMessage [I] The SFVM message to send + * dwParam [I] Message parameter + * + * RETURNS + * fixme. + * + * NOTES + * Message SFVM_REARRANGE = 1 + * + * This message gets sent when a column gets clicked to instruct the + * shell view to re-sort the item list. dwParam identifies the column + * that was clicked. + */ +LRESULT WINAPI SHShellFolderView_Message( + HWND hwndCabinet, + UINT uMessage, + LPARAM lParam) +{ + FIXME("%p %08x %08lx stub\n",hwndCabinet, uMessage, lParam); + return 0; +} + +/************************************************************************* + * RegisterShellHook [SHELL32.181] + * + * Register a shell hook. + * + * PARAMS + * hwnd [I] Window handle + * dwType [I] Type of hook. + * + * NOTES + * Exported by ordinal + */ +BOOL WINAPI RegisterShellHook( + HWND hWnd, + DWORD dwType) +{ + FIXME("(%p,0x%08x):stub.\n",hWnd, dwType); + return TRUE; +} + +/************************************************************************* + * ShellMessageBoxW [SHELL32.182] + * + * See ShellMessageBoxA. + * + * NOTE: + * shlwapi.ShellMessageBoxWrapW is a duplicate of shell32.ShellMessageBoxW + * because we can't forward to it in the .spec file since it's exported by + * ordinal. If you change the implementation here please update the code in + * shlwapi as well. + */ +EXTERN_C int WINAPI ShellMessageBoxW( + HINSTANCE hInstance, + HWND hWnd, + LPCWSTR lpText, + LPCWSTR lpCaption, + UINT uType, + ...) +{ + WCHAR szText[100],szTitle[100]; + LPCWSTR pszText = szText, pszTitle = szTitle; + LPWSTR pszTemp; + va_list args; + int ret; + + va_start(args, uType); + /* wvsprintfA(buf,fmt, args); */ + + TRACE("(%p,%p,%p,%p,%08x)\n", + hInstance,hWnd,lpText,lpCaption,uType); + + if (IS_INTRESOURCE(lpCaption)) + LoadStringW(hInstance, LOWORD(lpCaption), szTitle, sizeof(szTitle)/sizeof(szTitle[0])); + else + pszTitle = lpCaption; + + if (IS_INTRESOURCE(lpText)) + LoadStringW(hInstance, LOWORD(lpText), szText, sizeof(szText)/sizeof(szText[0])); + else + pszText = lpText; + + FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, + pszText, 0, 0, (LPWSTR)&pszTemp, 0, &args); + + va_end(args); + + ret = MessageBoxW(hWnd,pszTemp,pszTitle,uType); + LocalFree(pszTemp); + return ret; +} + +/************************************************************************* + * ShellMessageBoxA [SHELL32.183] + * + * Format and output an error message. + * + * PARAMS + * hInstance [I] Instance handle of message creator + * hWnd [I] Window handle of message creator + * lpText [I] Resource Id of title or LPSTR + * lpCaption [I] Resource Id of title or LPSTR + * uType [I] Type of error message + * + * RETURNS + * A return value from MessageBoxA(). + * + * NOTES + * Exported by ordinal + */ +EXTERN_C int WINAPI ShellMessageBoxA( + HINSTANCE hInstance, + HWND hWnd, + LPCSTR lpText, + LPCSTR lpCaption, + UINT uType, + ...) +{ + char szText[100],szTitle[100]; + LPCSTR pszText = szText, pszTitle = szTitle; + LPSTR pszTemp; + va_list args; + int ret; + + va_start(args, uType); + /* wvsprintfA(buf,fmt, args); */ + + TRACE("(%p,%p,%p,%p,%08x)\n", + hInstance,hWnd,lpText,lpCaption,uType); + + if (IS_INTRESOURCE(lpCaption)) + LoadStringA(hInstance, LOWORD(lpCaption), szTitle, sizeof(szTitle)); + else + pszTitle = lpCaption; + + if (IS_INTRESOURCE(lpText)) + LoadStringA(hInstance, LOWORD(lpText), szText, sizeof(szText)); + else + pszText = lpText; + + FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, + pszText, 0, 0, (LPSTR)&pszTemp, 0, &args); + + va_end(args); + + ret = MessageBoxA(hWnd,pszTemp,pszTitle,uType); + LocalFree(pszTemp); + return ret; +} + +/************************************************************************* + * SHRegisterDragDrop [SHELL32.86] + * + * Probably equivalent to RegisterDragDrop but under Windows 95 it could use the + * shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE + * for details. Under Windows 98 this function initializes the true OLE when called + * the first time, on XP always returns E_OUTOFMEMORY and it got removed from Vista. + * + * + * NOTES + * exported by ordinal + * + * SEE ALSO + * RegisterDragDrop, SHLoadOLE + */ +HRESULT WINAPI SHRegisterDragDrop( + HWND hWnd, + LPDROPTARGET pDropTarget) +{ + FIXME("(%p,%p):stub.\n", hWnd, pDropTarget); + return RegisterDragDrop(hWnd, pDropTarget); +} + +/************************************************************************* + * SHRevokeDragDrop [SHELL32.87] + * + * Probably equivalent to RevokeDragDrop but under Windows 9x it could use the + * shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE + * for details. Function removed from Windows Vista. + * + * NOTES + * exported by ordinal + * + * SEE ALSO + * RevokeDragDrop, SHLoadOLE + */ +HRESULT WINAPI SHRevokeDragDrop(HWND hWnd) +{ + FIXME("(%p):stub.\n",hWnd); + return RevokeDragDrop(hWnd); +} + +/************************************************************************* + * SHDoDragDrop [SHELL32.88] + * + * Probably equivalent to DoDragDrop but under Windows 9x it could use the + * shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE + * for details + * + * NOTES + * exported by ordinal + * + * SEE ALSO + * DoDragDrop, SHLoadOLE + */ +HRESULT WINAPI SHDoDragDrop( + HWND hWnd, + LPDATAOBJECT lpDataObject, + LPDROPSOURCE lpDropSource, + DWORD dwOKEffect, + LPDWORD pdwEffect) +{ + FIXME("(%p %p %p 0x%08x %p):stub.\n", + hWnd, lpDataObject, lpDropSource, dwOKEffect, pdwEffect); + return DoDragDrop(lpDataObject, lpDropSource, dwOKEffect, pdwEffect); +} + +/************************************************************************* + * ArrangeWindows [SHELL32.184] + * + */ +WORD WINAPI ArrangeWindows( + HWND hwndParent, + DWORD dwReserved, + LPCRECT lpRect, + WORD cKids, + CONST HWND * lpKids) +{ + /* Unimplemented in WinXP SP3 */ + TRACE("(%p 0x%08x %p 0x%04x %p):stub.\n", + hwndParent, dwReserved, lpRect, cKids, lpKids); + return 0; +} + +/************************************************************************* + * SignalFileOpen [SHELL32.103] + * + * NOTES + * exported by ordinal + */ +EXTERN_C BOOL WINAPI +SignalFileOpen (LPCITEMIDLIST pidl) +{ + FIXME("(0x%08x):stub.\n", pidl); + + return 0; +} + +/************************************************************************* + * SHADD_get_policy - helper function for SHAddToRecentDocs + * + * PARAMETERS + * policy [IN] policy name (null termed string) to find + * type [OUT] ptr to DWORD to receive type + * buffer [OUT] ptr to area to hold data retrieved + * len [IN/OUT] ptr to DWORD holding size of buffer and getting + * length filled + * + * RETURNS + * result of the SHQueryValueEx call + */ +static INT SHADD_get_policy(LPCSTR policy, LPDWORD type, LPVOID buffer, LPDWORD len) +{ + HKEY Policy_basekey; + INT ret; + + /* Get the key for the policies location in the registry + */ + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, + "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", + 0, KEY_READ, &Policy_basekey)) { + + if (RegOpenKeyExA(HKEY_CURRENT_USER, + "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", + 0, KEY_READ, &Policy_basekey)) { + TRACE("No Explorer Policies location exists. Policy wanted=%s\n", + policy); + *len = 0; + return ERROR_FILE_NOT_FOUND; + } + } + + /* Retrieve the data if it exists + */ + ret = SHQueryValueExA(Policy_basekey, policy, 0, type, buffer, len); + RegCloseKey(Policy_basekey); + return ret; +} + + +/************************************************************************* + * SHADD_compare_mru - helper function for SHAddToRecentDocs + * + * PARAMETERS + * data1 [IN] data being looked for + * data2 [IN] data in MRU + * cbdata [IN] length from FindMRUData call (not used) + * + * RETURNS + * position within MRU list that data was added. + */ +static INT CALLBACK SHADD_compare_mru(LPCVOID data1, LPCVOID data2, DWORD cbData) +{ + return lstrcmpiA((LPCSTR)data1, (LPCSTR)data2); +} + +/************************************************************************* + * SHADD_create_add_mru_data - helper function for SHAddToRecentDocs + * + * PARAMETERS + * mruhandle [IN] handle for created MRU list + * doc_name [IN] null termed pure doc name + * new_lnk_name [IN] null termed path and file name for .lnk file + * buffer [IN/OUT] 2048 byte area to construct MRU data + * len [OUT] ptr to int to receive space used in buffer + * + * RETURNS + * position within MRU list that data was added. + */ +static INT SHADD_create_add_mru_data(HANDLE mruhandle, LPCSTR doc_name, LPCSTR new_lnk_name, + LPSTR buffer, INT *len) +{ + LPSTR ptr; + INT wlen; + + /*FIXME: Document: + * RecentDocs MRU data structure seems to be: + * +0h document file name w/ terminating 0h + * +nh short int w/ size of remaining + * +n+2h 02h 30h, or 01h 30h, or 00h 30h - unknown + * +n+4h 10 bytes zeros - unknown + * +n+eh shortcut file name w/ terminating 0h + * +n+e+nh 3 zero bytes - unknown + */ + + /* Create the MRU data structure for "RecentDocs" + */ + ptr = buffer; + lstrcpyA(ptr, doc_name); + ptr += (lstrlenA(buffer) + 1); + wlen= lstrlenA(new_lnk_name) + 1 + 12; + *((short int*)ptr) = wlen; + ptr += 2; /* step past the length */ + *(ptr++) = 0x30; /* unknown reason */ + *(ptr++) = 0; /* unknown, but can be 0x00, 0x01, 0x02 */ + memset(ptr, 0, 10); + ptr += 10; + lstrcpyA(ptr, new_lnk_name); + ptr += (lstrlenA(new_lnk_name) + 1); + memset(ptr, 0, 3); + ptr += 3; + *len = ptr - buffer; + + /* Add the new entry into the MRU list + */ + return AddMRUData(mruhandle, buffer, *len); +} + +/************************************************************************* + * SHAddToRecentDocs [SHELL32.@] + * + * Modify (add/clear) Shell's list of recently used documents. + * + * PARAMETERS + * uFlags [IN] SHARD_PATHA, SHARD_PATHW or SHARD_PIDL + * pv [IN] string or pidl, NULL clears the list + * + * NOTES + * exported by name + * + * FIXME + * convert to unicode + */ +void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv) +{ +/* If list is a string list lpfnCompare has the following prototype + * int CALLBACK MRUCompareString(LPCSTR s1, LPCSTR s2) + * for binary lists the prototype is + * int CALLBACK MRUCompareBinary(LPCVOID data1, LPCVOID data2, DWORD cbData) + * where cbData is the no. of bytes to compare. + * Need to check what return value means identical - 0? + */ + + + UINT olderrormode; + HKEY HCUbasekey; + CHAR doc_name[MAX_PATH]; + CHAR link_dir[MAX_PATH]; + CHAR new_lnk_filepath[MAX_PATH]; + CHAR new_lnk_name[MAX_PATH]; + CComPtr ppM; + LPITEMIDLIST pidl; + HWND hwnd = 0; /* FIXME: get real window handle */ + INT ret; + DWORD data[64], datalen, type; + + TRACE("%04x %p\n", uFlags, pv); + + /*FIXME: Document: + * RecentDocs MRU data structure seems to be: + * +0h document file name w/ terminating 0h + * +nh short int w/ size of remaining + * +n+2h 02h 30h, or 01h 30h, or 00h 30h - unknown + * +n+4h 10 bytes zeros - unknown + * +n+eh shortcut file name w/ terminating 0h + * +n+e+nh 3 zero bytes - unknown + */ + + /* See if we need to do anything. + */ + datalen = 64; + ret=SHADD_get_policy( "NoRecentDocsHistory", &type, data, &datalen); + if ((ret > 0) && (ret != ERROR_FILE_NOT_FOUND)) { + ERR("Error %d getting policy \"NoRecentDocsHistory\"\n", ret); + return; + } + if (ret == ERROR_SUCCESS) { + if (!( (type == REG_DWORD) || + ((type == REG_BINARY) && (datalen == 4)) )) { + ERR("Error policy data for \"NoRecentDocsHistory\" not formatted correctly, type=%d, len=%d\n", + type, datalen); + return; + } + + TRACE("policy value for NoRecentDocsHistory = %08x\n", data[0]); + /* now test the actual policy value */ + if ( data[0] != 0) + return; + } + + /* Open key to where the necessary info is + */ + /* FIXME: This should be done during DLL PROCESS_ATTACH (or THREAD_ATTACH) + * and the close should be done during the _DETACH. The resulting + * key is stored in the DLL global data. + */ + if (RegCreateKeyExA(HKEY_CURRENT_USER, + "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", + 0, 0, 0, KEY_READ, 0, &HCUbasekey, 0)) { + ERR("Failed to create 'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer'\n"); + return; + } + + /* Get path to user's "Recent" directory + */ + if(SUCCEEDED(SHGetMalloc(&ppM))) { + if (SUCCEEDED(SHGetSpecialFolderLocation(hwnd, CSIDL_RECENT, + &pidl))) { + SHGetPathFromIDListA(pidl, link_dir); + ppM->Free(pidl); + } + else { + /* serious issues */ + link_dir[0] = 0; + ERR("serious issues 1\n"); + } + } + else { + /* serious issues */ + link_dir[0] = 0; + ERR("serious issues 2\n"); + } + TRACE("Users Recent dir %s\n", link_dir); + + /* If no input, then go clear the lists */ + if (!pv) { + /* clear user's Recent dir + */ + + /* FIXME: delete all files in "link_dir" + * + * while( more files ) { + * lstrcpyA(old_lnk_name, link_dir); + * PathAppendA(old_lnk_name, filenam); + * DeleteFileA(old_lnk_name); + * } + */ + FIXME("should delete all files in %s\\\n", link_dir); + + /* clear MRU list + */ + /* MS Bug ?? v4.72.3612.1700 of shell32 does the delete against + * HKEY_LOCAL_MACHINE version of ...CurrentVersion\Explorer + * and naturally it fails w/ rc=2. It should do it against + * HKEY_CURRENT_USER which is where it is stored, and where + * the MRU routines expect it!!!! + */ + RegDeleteKeyA(HCUbasekey, "RecentDocs"); + RegCloseKey(HCUbasekey); + return; + } + + /* Have data to add, the jobs to be done: + * 1. Add document to MRU list in registry "HKCU\Software\ + * Microsoft\Windows\CurrentVersion\Explorer\RecentDocs". + * 2. Add shortcut to document in the user's Recent directory + * (CSIDL_RECENT). + * 3. Add shortcut to Start menu's Documents submenu. + */ + + /* Get the pure document name from the input + */ + switch (uFlags) + { + case SHARD_PIDL: + SHGetPathFromIDListA((LPCITEMIDLIST)pv, doc_name); + break; + + case SHARD_PATHA: + lstrcpynA(doc_name, (LPCSTR)pv, MAX_PATH); + break; + + case SHARD_PATHW: + WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)pv, -1, doc_name, MAX_PATH, NULL, NULL); + break; + + default: + FIXME("Unsupported flags: %u\n", uFlags); + return; + } + + TRACE("full document name %s\n", debugstr_a(doc_name)); + PathStripPathA(doc_name); + TRACE("stripped document name %s\n", debugstr_a(doc_name)); + + + /* *** JOB 1: Update registry for ...\Explorer\RecentDocs list *** */ + + { /* on input needs: + * doc_name - pure file-spec, no path + * link_dir - path to the user's Recent directory + * HCUbasekey - key of ...Windows\CurrentVersion\Explorer" node + * creates: + * new_lnk_name- pure file-spec, no path for new .lnk file + * new_lnk_filepath + * - path and file name of new .lnk file + */ + CREATEMRULISTA mymru; + HANDLE mruhandle; + INT len, pos, bufused, err; + INT i; + DWORD attr; + CHAR buffer[2048]; + CHAR *ptr; + CHAR old_lnk_name[MAX_PATH]; + short int slen; + + mymru.cbSize = sizeof(CREATEMRULISTA); + mymru.nMaxItems = 15; + mymru.dwFlags = MRUF_BINARY_LIST | MRUF_DELAYED_SAVE; + mymru.hKey = HCUbasekey; + mymru.lpszSubKey = "RecentDocs"; + mymru.lpfnCompare = (PROC)SHADD_compare_mru; + mruhandle = CreateMRUListA(&mymru); + if (!mruhandle) { + /* MRU failed */ + ERR("MRU processing failed, handle zero\n"); + RegCloseKey(HCUbasekey); + return; + } + len = lstrlenA(doc_name); + pos = FindMRUData(mruhandle, doc_name, len, 0); + + /* Now get the MRU entry that will be replaced + * and delete the .lnk file for it + */ + if ((bufused = EnumMRUListA(mruhandle, (pos == -1) ? 14 : pos, + buffer, 2048)) != -1) { + ptr = buffer; + ptr += (lstrlenA(buffer) + 1); + slen = *((short int*)ptr); + ptr += 2; /* skip the length area */ + if (bufused >= slen + (ptr-buffer)) { + /* buffer size looks good */ + ptr += 12; /* get to string */ + len = bufused - (ptr-buffer); /* get length of buf remaining */ + if ((lstrlenA(ptr) > 0) && (lstrlenA(ptr) <= len-1)) { + /* appears to be good string */ + lstrcpyA(old_lnk_name, link_dir); + PathAppendA(old_lnk_name, ptr); + if (!DeleteFileA(old_lnk_name)) { + if ((attr = GetFileAttributesA(old_lnk_name)) == INVALID_FILE_ATTRIBUTES) { + if ((err = GetLastError()) != ERROR_FILE_NOT_FOUND) { + ERR("Delete for %s failed, err=%d, attr=%08x\n", + old_lnk_name, err, attr); + } + else { + TRACE("old .lnk file %s did not exist\n", + old_lnk_name); + } + } + else { + ERR("Delete for %s failed, attr=%08x\n", + old_lnk_name, attr); + } + } + else { + TRACE("deleted old .lnk file %s\n", old_lnk_name); + } + } + } + } + + /* Create usable .lnk file name for the "Recent" directory + */ + wsprintfA(new_lnk_name, "%s.lnk", doc_name); + lstrcpyA(new_lnk_filepath, link_dir); + PathAppendA(new_lnk_filepath, new_lnk_name); + i = 1; + olderrormode = SetErrorMode(SEM_FAILCRITICALERRORS); + while (GetFileAttributesA(new_lnk_filepath) != INVALID_FILE_ATTRIBUTES) { + i++; + wsprintfA(new_lnk_name, "%s (%u).lnk", doc_name, i); + lstrcpyA(new_lnk_filepath, link_dir); + PathAppendA(new_lnk_filepath, new_lnk_name); + } + SetErrorMode(olderrormode); + TRACE("new shortcut will be %s\n", new_lnk_filepath); + + /* Now add the new MRU entry and data + */ + pos = SHADD_create_add_mru_data(mruhandle, doc_name, new_lnk_name, + buffer, &len); + FreeMRUList(mruhandle); + TRACE("Updated MRU list, new doc is position %d\n", pos); + } + + /* *** JOB 2: Create shortcut in user's "Recent" directory *** */ + + { /* on input needs: + * doc_name - pure file-spec, no path + * new_lnk_filepath + * - path and file name of new .lnk file + * uFlags[in] - flags on call to SHAddToRecentDocs + * pv[in] - document path/pidl on call to SHAddToRecentDocs + */ + CComPtr psl; + CComPtr pPf; + HRESULT hres; + CHAR desc[MAX_PATH]; + WCHAR widelink[MAX_PATH]; + + CoInitialize(0); + + hres = CoCreateInstance(CLSID_ShellLink, + NULL, + CLSCTX_INPROC_SERVER, + IID_IShellLinkA, + (void **)&psl); + if(SUCCEEDED(hres)) { + + hres = psl->QueryInterface(IID_IPersistFile, + (LPVOID *)&pPf); + if(FAILED(hres)) { + /* bombed */ + ERR("failed QueryInterface for IPersistFile %08x\n", hres); + goto fail; + } + + /* Set the document path or pidl */ + if (uFlags == SHARD_PIDL) { + hres = psl->SetIDList((LPCITEMIDLIST) pv); + } else { + hres = psl->SetPath((LPCSTR) pv); + } + if(FAILED(hres)) { + /* bombed */ + ERR("failed Set{IDList|Path} %08x\n", hres); + goto fail; + } + + lstrcpyA(desc, "Shortcut to "); + lstrcatA(desc, doc_name); + hres = psl->SetDescription(desc); + if(FAILED(hres)) { + /* bombed */ + ERR("failed SetDescription %08x\n", hres); + goto fail; + } + + MultiByteToWideChar(CP_ACP, 0, new_lnk_filepath, -1, + widelink, MAX_PATH); + /* create the short cut */ + hres = pPf->Save(widelink, TRUE); + if(FAILED(hres)) { + /* bombed */ + ERR("failed IPersistFile::Save %08x\n", hres); + goto fail; + } + hres = pPf->SaveCompleted(widelink); + TRACE("shortcut %s has been created, result=%08x\n", + new_lnk_filepath, hres); + } + else { + ERR("CoCreateInstance failed, hres=%08x\n", hres); + } + } + + fail: + CoUninitialize(); + + /* all done */ + RegCloseKey(HCUbasekey); + return; +} + +/************************************************************************* + * SHCreateShellFolderViewEx [SHELL32.174] + * + * Create a new instance of the default Shell folder view object. + * + * RETURNS + * Success: S_OK + * Failure: error value + * + * NOTES + * see IShellFolder::CreateViewObject + */ +HRESULT WINAPI SHCreateShellFolderViewEx( + LPCSFV psvcbi, /* [in] shelltemplate struct */ + IShellView **ppv) /* [out] IShellView pointer */ +{ + IShellView * psf; + HRESULT hRes; + + TRACE("sf=%p pidl=%p cb=%p mode=0x%08x parm=%p\n", + psvcbi->pshf, psvcbi->pidl, psvcbi->pfnCallback, + psvcbi->fvm, psvcbi->psvOuter); + + hRes = IShellView_Constructor(psvcbi->pshf, &psf); + if (FAILED(hRes)) + return hRes; + + if (!psf) + return E_OUTOFMEMORY; + + psf->AddRef(); + hRes = psf->QueryInterface(IID_IShellView, (LPVOID *)ppv); + psf->Release(); + + return hRes; +} +/************************************************************************* + * SHWinHelp [SHELL32.127] + * + */ +EXTERN_C HRESULT WINAPI SHWinHelp (DWORD v, DWORD w, DWORD x, DWORD z) +{ FIXME("0x%08x 0x%08x 0x%08x 0x%08x stub\n",v,w,x,z); + return 0; +} +/************************************************************************* + * SHRunControlPanel [SHELL32.161] + * + */ +EXTERN_C BOOL WINAPI SHRunControlPanel (LPCWSTR lpcszCmdLine, HWND hwndMsgParent) +{ + FIXME("0x%08x 0x%08x stub\n",lpcszCmdLine,hwndMsgParent); + return 0; +} + +static LPUNKNOWN SHELL32_IExplorerInterface=0; +/************************************************************************* + * SHSetInstanceExplorer [SHELL32.176] + * + * NOTES + * Sets the interface + */ +VOID WINAPI SHSetInstanceExplorer (LPUNKNOWN lpUnknown) +{ TRACE("%p\n", lpUnknown); + SHELL32_IExplorerInterface = lpUnknown; +} +/************************************************************************* + * SHGetInstanceExplorer [SHELL32.@] + * + * NOTES + * gets the interface pointer of the explorer and a reference + */ +HRESULT WINAPI SHGetInstanceExplorer (IUnknown **lpUnknown) +{ TRACE("%p\n", lpUnknown); + + *lpUnknown = SHELL32_IExplorerInterface; + + if (!SHELL32_IExplorerInterface) + return E_FAIL; + + SHELL32_IExplorerInterface->AddRef(); + return NOERROR; +} +/************************************************************************* + * SHFreeUnusedLibraries [SHELL32.123] + * + * Probably equivalent to CoFreeUnusedLibraries but under Windows 9x it could use + * the shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE + * for details + * + * NOTES + * exported by ordinal + * + * SEE ALSO + * CoFreeUnusedLibraries, SHLoadOLE + */ +void WINAPI SHFreeUnusedLibraries (void) +{ + FIXME("stub\n"); + CoFreeUnusedLibraries(); +} +/************************************************************************* + * DAD_AutoScroll [SHELL32.129] + * + */ +BOOL WINAPI DAD_AutoScroll(HWND hwnd, AUTO_SCROLL_DATA *samples, const POINT * pt) +{ + FIXME("hwnd = %p %p %p\n",hwnd,samples,pt); + return 0; +} +/************************************************************************* + * DAD_DragEnter [SHELL32.130] + * + */ +BOOL WINAPI DAD_DragEnter(HWND hwnd) +{ + FIXME("hwnd = %p\n",hwnd); + return FALSE; +} +/************************************************************************* + * DAD_DragEnterEx [SHELL32.131] + * + */ +BOOL WINAPI DAD_DragEnterEx(HWND hwnd, POINT p) +{ + FIXME("hwnd = %p (%d,%d)\n",hwnd,p.x,p.y); + return FALSE; +} +/************************************************************************* + * DAD_DragMove [SHELL32.134] + * + */ +BOOL WINAPI DAD_DragMove(POINT p) +{ + FIXME("(%d,%d)\n",p.x,p.y); + return FALSE; +} +/************************************************************************* + * DAD_DragLeave [SHELL32.132] + * + */ +BOOL WINAPI DAD_DragLeave(VOID) +{ + FIXME("\n"); + return FALSE; +} +/************************************************************************* + * DAD_SetDragImage [SHELL32.136] + * + * NOTES + * exported by name + */ +BOOL WINAPI DAD_SetDragImage( + HIMAGELIST himlTrack, + LPPOINT lppt) +{ + FIXME("%p %p stub\n",himlTrack, lppt); + return 0; +} +/************************************************************************* + * DAD_ShowDragImage [SHELL32.137] + * + * NOTES + * exported by name + */ +BOOL WINAPI DAD_ShowDragImage(BOOL bShow) +{ + FIXME("0x%08x stub\n",bShow); + return 0; +} + +static const WCHAR szwCabLocation[] = { + 'S','o','f','t','w','a','r','e','\\', + 'M','i','c','r','o','s','o','f','t','\\', + 'W','i','n','d','o','w','s','\\', + 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\', + 'E','x','p','l','o','r','e','r','\\', + 'C','a','b','i','n','e','t','S','t','a','t','e',0 +}; + +static const WCHAR szwSettings[] = { 'S','e','t','t','i','n','g','s',0 }; + +/************************************************************************* + * ReadCabinetState [SHELL32.651] NT 4.0 + * + */ +BOOL WINAPI ReadCabinetState(CABINETSTATE *cs, int length) +{ + HKEY hkey = 0; + DWORD type, r; + + TRACE("%p %d\n", cs, length); + + if( (cs == NULL) || (length < (int)sizeof(*cs)) ) + return FALSE; + + r = RegOpenKeyW( HKEY_CURRENT_USER, szwCabLocation, &hkey ); + if( r == ERROR_SUCCESS ) + { + type = REG_BINARY; + r = RegQueryValueExW( hkey, szwSettings, + NULL, &type, (LPBYTE)cs, (LPDWORD)&length ); + RegCloseKey( hkey ); + + } + + /* if we can't read from the registry, create default values */ + if ( (r != ERROR_SUCCESS) || (cs->cLength < sizeof(*cs)) || + (cs->cLength != length) ) + { + ERR("Initializing shell cabinet settings\n"); + memset(cs, 0, sizeof(*cs)); + cs->cLength = sizeof(*cs); + cs->nVersion = 2; + cs->fFullPathTitle = FALSE; + cs->fSaveLocalView = TRUE; + cs->fNotShell = FALSE; + cs->fSimpleDefault = TRUE; + cs->fDontShowDescBar = FALSE; + cs->fNewWindowMode = FALSE; + cs->fShowCompColor = FALSE; + cs->fDontPrettyNames = FALSE; + cs->fAdminsCreateCommonGroups = TRUE; + cs->fMenuEnumFilter = 96; + } + + return TRUE; +} + +/************************************************************************* + * WriteCabinetState [SHELL32.652] NT 4.0 + * + */ +BOOL WINAPI WriteCabinetState(CABINETSTATE *cs) +{ + DWORD r; + HKEY hkey = 0; + + TRACE("%p\n",cs); + + if( cs == NULL ) + return FALSE; + + r = RegCreateKeyExW( HKEY_CURRENT_USER, szwCabLocation, 0, + NULL, 0, KEY_ALL_ACCESS, NULL, &hkey, NULL); + if( r == ERROR_SUCCESS ) + { + r = RegSetValueExW( hkey, szwSettings, 0, + REG_BINARY, (LPBYTE) cs, cs->cLength); + + RegCloseKey( hkey ); + } + + return (r==ERROR_SUCCESS); +} + +/************************************************************************* + * FileIconInit [SHELL32.660] + * + */ +BOOL WINAPI FileIconInit(BOOL bFullInit) +{ FIXME("(%s)\n", bFullInit ? "true" : "false"); + return 0; +} + +/************************************************************************* + * IsUserAnAdmin [SHELL32.680] NT 4.0 + * + * Checks whether the current user is a member of the Administrators group. + * + * PARAMS + * None + * + * RETURNS + * Success: TRUE + * Failure: FALSE + */ +BOOL WINAPI IsUserAnAdmin(VOID) +{ + SID_IDENTIFIER_AUTHORITY Authority = {SECURITY_NT_AUTHORITY}; + HANDLE hToken; + DWORD dwSize; + PTOKEN_GROUPS lpGroups; + PSID lpSid; + DWORD i; + BOOL bResult = FALSE; + + TRACE("\n"); + + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) + { + return FALSE; + } + + if (!GetTokenInformation(hToken, TokenGroups, NULL, 0, &dwSize)) + { + if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) + { + CloseHandle(hToken); + return FALSE; + } + } + + lpGroups = (PTOKEN_GROUPS)HeapAlloc(GetProcessHeap(), 0, dwSize); + if (lpGroups == NULL) + { + CloseHandle(hToken); + return FALSE; + } + + if (!GetTokenInformation(hToken, TokenGroups, lpGroups, dwSize, &dwSize)) + { + HeapFree(GetProcessHeap(), 0, lpGroups); + CloseHandle(hToken); + return FALSE; + } + + CloseHandle(hToken); + + if (!AllocateAndInitializeSid(&Authority, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, + &lpSid)) + { + HeapFree(GetProcessHeap(), 0, lpGroups); + return FALSE; + } + + for (i = 0; i < lpGroups->GroupCount; i++) + { + if (EqualSid(lpSid, lpGroups->Groups[i].Sid)) + { + bResult = TRUE; + break; + } + } + + FreeSid(lpSid); + HeapFree(GetProcessHeap(), 0, lpGroups); + return bResult; +} + +/************************************************************************* + * SHAllocShared [SHELL32.520] + * + * See shlwapi.SHAllocShared + */ +HANDLE WINAPI SHAllocShared(LPVOID lpvData, DWORD dwSize, DWORD dwProcId) +{ + typedef HANDLE (WINAPI *SHAllocSharedProc)(LPCVOID, DWORD, DWORD); + static SHAllocSharedProc pSHAllocShared; + + GET_FUNC(pSHAllocShared, SHAllocSharedProc, shlwapi, (char*)7, NULL); + return pSHAllocShared(lpvData, dwSize, dwProcId); +} + +/************************************************************************* + * SHLockShared [SHELL32.521] + * + * See shlwapi.SHLockShared + */ +LPVOID WINAPI SHLockShared(HANDLE hShared, DWORD dwProcId) +{ + typedef HANDLE (WINAPI *SHLockSharedProc)(HANDLE, DWORD); + static SHLockSharedProc pSHLockShared; + + GET_FUNC(pSHLockShared, SHLockSharedProc, shlwapi, (char*)8, NULL); + return pSHLockShared(hShared, dwProcId); +} + +/************************************************************************* + * SHUnlockShared [SHELL32.522] + * + * See shlwapi.SHUnlockShared + */ +BOOL WINAPI SHUnlockShared(LPVOID lpView) +{ + typedef HANDLE (WINAPI *SHUnlockSharedProc)(LPCVOID); + static SHUnlockSharedProc pSHUnlockShared; + + GET_FUNC(pSHUnlockShared, SHUnlockSharedProc, shlwapi, (char*)9, FALSE); + return pSHUnlockShared(lpView) != NULL; +} + +/************************************************************************* + * SHFreeShared [SHELL32.523] + * + * See shlwapi.SHFreeShared + */ +BOOL WINAPI SHFreeShared(HANDLE hShared, DWORD dwProcId) +{ + typedef HANDLE (WINAPI *SHFreeSharedProc)(HANDLE, DWORD); + static SHFreeSharedProc pSHFreeShared; + + GET_FUNC(pSHFreeShared, SHFreeSharedProc, shlwapi, (char*)10, FALSE); + return pSHFreeShared(hShared, dwProcId) != NULL; +} + +/************************************************************************* + * SetAppStartingCursor [SHELL32.99] + */ +EXTERN_C HRESULT WINAPI SetAppStartingCursor(HWND u, DWORD v) +{ FIXME("hwnd=%p 0x%04x stub\n",u,v ); + return 0; +} + +/************************************************************************* + * SHLoadOLE [SHELL32.151] + * + * To reduce the memory usage of Windows 95, its shell32 contained an + * internal implementation of a part of COM (see e.g. SHGetMalloc, SHCoCreateInstance, + * SHRegisterDragDrop etc.) that allowed to use in-process STA objects without + * the need to load OLE32.DLL. If OLE32.DLL was already loaded, the SH* function + * would just call the Co* functions. + * + * The SHLoadOLE was called when OLE32.DLL was being loaded to transfer all the + * information from the shell32 "mini-COM" to ole32.dll. + * + * See http://blogs.msdn.com/oldnewthing/archive/2004/07/05/173226.aspx for a + * detailed description. + * + * Under wine ole32.dll is always loaded as it is imported by shlwapi.dll which is + * imported by shell32 and no "mini-COM" is used (except for the "LoadWithoutCOM" + * hack in SHCoCreateInstance) + */ +HRESULT WINAPI SHLoadOLE(LPARAM lParam) +{ FIXME("0x%08lx stub\n",lParam); + return S_OK; +} +/************************************************************************* + * DriveType [SHELL32.64] + * + */ +EXTERN_C int WINAPI DriveType(int DriveType) +{ + WCHAR root[] = L"A:\\"; + root[0] = L'A' + DriveType; + return GetDriveTypeW(root); +} + +/************************************************************************* + * InvalidateDriveType [SHELL32.65] + * Unimplemented in XP SP3 + */ +EXTERN_C int WINAPI InvalidateDriveType(int u) +{ + TRACE("0x%08x stub\n",u); + return 0; +} + +/************************************************************************* + * SHAbortInvokeCommand [SHELL32.198] + * + */ +EXTERN_C HRESULT WINAPI SHAbortInvokeCommand(void) +{ FIXME("stub\n"); + return 1; +} + +/************************************************************************* + * SHOutOfMemoryMessageBox [SHELL32.126] + * + */ +int WINAPI SHOutOfMemoryMessageBox( + HWND hwndOwner, + LPCSTR lpCaption, + UINT uType) +{ + FIXME("%p %s 0x%08x stub\n",hwndOwner, lpCaption, uType); + return 0; +} + +/************************************************************************* + * SHFlushClipboard [SHELL32.121] + * + */ +EXTERN_C HRESULT WINAPI SHFlushClipboard(void) +{ + return OleFlushClipboard(); +} + +/************************************************************************* + * SHWaitForFileToOpen [SHELL32.97] + * + */ +BOOL WINAPI SHWaitForFileToOpen( + LPCITEMIDLIST pidl, + DWORD dwFlags, + DWORD dwTimeout) +{ + FIXME("%p 0x%08x 0x%08x stub\n", pidl, dwFlags, dwTimeout); + return 0; +} + +/************************************************************************ + * RLBuildListOfPaths [SHELL32.146] + * + * NOTES + * builds a DPA + */ +EXTERN_C DWORD WINAPI RLBuildListOfPaths (void) +{ FIXME("stub\n"); + return 0; +} + +/************************************************************************ + * SHValidateUNC [SHELL32.173] + * + */ +EXTERN_C BOOL WINAPI SHValidateUNC (HWND hwndOwner, LPWSTR pszFile, UINT fConnect) +{ + FIXME("0x%08x 0x%08x 0x%08x stub\n",hwndOwner,pszFile,fConnect); + return 0; +} + +/************************************************************************ + * DoEnvironmentSubstA [SHELL32.@] + * + * Replace %KEYWORD% in the str with the value of variable KEYWORD + * from environment. If it is not found the %KEYWORD% is left + * intact. If the buffer is too small, str is not modified. + * + * PARAMS + * pszString [I] '\0' terminated string with %keyword%. + * [O] '\0' terminated string with %keyword% substituted. + * cchString [I] size of str. + * + * RETURNS + * cchString length in the HIWORD; + * TRUE in LOWORD if subst was successful and FALSE in other case + */ +EXTERN_C DWORD WINAPI DoEnvironmentSubstA(LPSTR pszString, UINT cchString) +{ + LPSTR dst; + BOOL res = FALSE; + FIXME("(%s, %d) stub\n", debugstr_a(pszString), cchString); + if (pszString == NULL) /* Really return 0? */ + return 0; + if ((dst = (LPSTR)HeapAlloc(GetProcessHeap(), 0, cchString * sizeof(CHAR)))) + { + DWORD num = ExpandEnvironmentStringsA(pszString, dst, cchString); + if (num && num < cchString) /* dest buffer is too small */ + { + res = TRUE; + memcpy(pszString, dst, num); + } + HeapFree(GetProcessHeap(), 0, dst); + } + return MAKELONG(res,cchString); /* Always cchString? */ +} + +/************************************************************************ + * DoEnvironmentSubstW [SHELL32.@] + * + * See DoEnvironmentSubstA. + */ +EXTERN_C DWORD WINAPI DoEnvironmentSubstW(LPWSTR pszString, UINT cchString) +{ + LPWSTR dst; + BOOL res = FALSE; + FIXME("(%s, %d): stub\n", debugstr_w(pszString), cchString); + if ((dst = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, cchString * sizeof(WCHAR)))) + { + DWORD num = ExpandEnvironmentStringsW(pszString, dst, cchString); + if (num) + { + res = TRUE; + wcscpy(pszString, dst); + } + HeapFree(GetProcessHeap(), 0, dst); + } + + return MAKELONG(res,cchString); +} + +/************************************************************************ + * DoEnvironmentSubst [SHELL32.53] + * + * See DoEnvironmentSubstA. + */ +DWORD WINAPI DoEnvironmentSubstAW(LPVOID x, UINT y) +{ + if (SHELL_OsIsUnicode()) + return DoEnvironmentSubstW((LPWSTR)x, y); + return DoEnvironmentSubstA((LPSTR)x, y); +} + +/************************************************************************* + * GUIDFromStringA [SHELL32.703] + */ +BOOL WINAPI GUIDFromStringA(LPCSTR str, LPGUID guid) +{ + TRACE("GUIDFromStringA() stub\n"); + return FALSE; +} + +/************************************************************************* + * GUIDFromStringW [SHELL32.704] + */ +BOOL WINAPI GUIDFromStringW(LPCWSTR str, LPGUID guid) +{ + UNICODE_STRING guid_str; + + RtlInitUnicodeString(&guid_str, str); + return !RtlGUIDFromString(&guid_str, guid); +} + +/************************************************************************* + * PathIsTemporaryW [SHELL32.714] + */ +EXTERN_C BOOL WINAPI PathIsTemporaryW(LPWSTR Str) +{ + FIXME("(%s)stub\n", debugstr_w(Str)); + return FALSE; +} + +/************************************************************************* + * PathIsTemporaryA [SHELL32.713] + */ +EXTERN_C BOOL WINAPI PathIsTemporaryA(LPSTR Str) +{ + FIXME("(%s)stub\n", debugstr_a(Str)); + return FALSE; +} + +typedef struct _PSXA +{ + UINT uiCount; + UINT uiAllocated; + IShellPropSheetExt *pspsx[0]; +} PSXA, *PPSXA; + +typedef struct _PSXA_CALL +{ + LPFNADDPROPSHEETPAGE lpfnAddReplaceWith; + LPARAM lParam; + BOOL bCalled; + BOOL bMultiple; + UINT uiCount; +} PSXA_CALL, *PPSXA_CALL; + +static BOOL CALLBACK PsxaCall(HPROPSHEETPAGE hpage, LPARAM lParam) +{ + PPSXA_CALL Call = (PPSXA_CALL)lParam; + + if (Call != NULL) + { + if ((Call->bMultiple || !Call->bCalled) && + Call->lpfnAddReplaceWith(hpage, Call->lParam)) + { + Call->bCalled = TRUE; + Call->uiCount++; + return TRUE; + } + } + + return FALSE; +} + +/************************************************************************* + * SHAddFromPropSheetExtArray [SHELL32.167] + */ +UINT WINAPI SHAddFromPropSheetExtArray(HPSXA hpsxa, LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam) +{ + PSXA_CALL Call; + UINT i; + PPSXA psxa = (PPSXA)hpsxa; + + TRACE("(%p,%p,%08lx)\n", hpsxa, lpfnAddPage, lParam); + + if (psxa) + { + ZeroMemory(&Call, sizeof(Call)); + Call.lpfnAddReplaceWith = lpfnAddPage; + Call.lParam = lParam; + Call.bMultiple = TRUE; + + /* Call the AddPage method of all registered IShellPropSheetExt interfaces */ + for (i = 0; i != psxa->uiCount; i++) + { + psxa->pspsx[i]->AddPages(PsxaCall, (LPARAM)&Call); + } + + return Call.uiCount; + } + + return 0; +} + +/************************************************************************* + * SHCreatePropSheetExtArray [SHELL32.168] + */ +HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface) +{ + return SHCreatePropSheetExtArrayEx(hKey, pszSubKey, max_iface, NULL); +} + + +/************************************************************************* + * SHCreatePropSheetExtArrayEx [SHELL32.194] + */ +EXTERN_C HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj) +{ + static const WCHAR szPropSheetSubKey[] = {'s','h','e','l','l','e','x','\\','P','r','o','p','e','r','t','y','S','h','e','e','t','H','a','n','d','l','e','r','s',0}; + WCHAR szHandler[64]; + DWORD dwHandlerLen; + WCHAR szClsidHandler[39]; + DWORD dwClsidSize; + CLSID clsid; + LONG lRet; + DWORD dwIndex; + HKEY hkBase, hkPropSheetHandlers; + PPSXA psxa = NULL; + HRESULT hr; + + TRACE("(%p,%s,%u)\n", hKey, debugstr_w(pszSubKey), max_iface); + + if (max_iface == 0) + return NULL; + + /* Open the registry key */ + lRet = RegOpenKeyW(hKey, pszSubKey, &hkBase); + if (lRet != ERROR_SUCCESS) + return NULL; + + lRet = RegOpenKeyExW(hkBase, szPropSheetSubKey, 0, KEY_ENUMERATE_SUB_KEYS, &hkPropSheetHandlers); + RegCloseKey(hkBase); + if (lRet == ERROR_SUCCESS) + { + /* Create and initialize the Property Sheet Extensions Array */ + psxa = (PPSXA)LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, sizeof(PSXA) + max_iface * sizeof(IShellPropSheetExt *)); + if (psxa) + { + psxa->uiAllocated = max_iface; + + /* Enumerate all subkeys and attempt to load the shell extensions */ + dwIndex = 0; + do + { + dwHandlerLen = sizeof(szHandler) / sizeof(szHandler[0]); + lRet = RegEnumKeyExW(hkPropSheetHandlers, dwIndex++, szHandler, &dwHandlerLen, NULL, NULL, NULL, NULL); + if (lRet != ERROR_SUCCESS) + { + if (lRet == ERROR_MORE_DATA) + continue; + + if (lRet == ERROR_NO_MORE_ITEMS) + lRet = ERROR_SUCCESS; + break; + } + szHandler[(sizeof(szHandler) / sizeof(szHandler[0])) - 1] = 0; + hr = CLSIDFromString(szHandler, &clsid); + if (FAILED(hr)) + { + dwClsidSize = sizeof(szClsidHandler); + if (SHGetValueW(hkPropSheetHandlers, szHandler, NULL, NULL, szClsidHandler, &dwClsidSize) == ERROR_SUCCESS) + { + szClsidHandler[(sizeof(szClsidHandler) / sizeof(szClsidHandler[0])) - 1] = 0; + hr = CLSIDFromString(szClsidHandler, &clsid); + } + } + if (SUCCEEDED(hr)) + { + CComPtr psxi; + CComPtr pspsx; + + /* Attempt to get an IShellPropSheetExt and an IShellExtInit instance. + Only if both interfaces are supported it's a real shell extension. + Then call IShellExtInit's Initialize method. */ + if (SUCCEEDED(CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER/* | CLSCTX_NO_CODE_DOWNLOAD */, IID_IShellPropSheetExt, (LPVOID *)&pspsx))) + { + if (SUCCEEDED(pspsx->QueryInterface(IID_IShellExtInit, (PVOID *)&psxi))) + { + if (SUCCEEDED(psxi->Initialize(NULL, pDataObj, hKey))) + { + /* Add the IShellPropSheetExt instance to the array */ + psxa->pspsx[psxa->uiCount++] = pspsx.Detach(); + } + } + } + } + } while (psxa->uiCount != psxa->uiAllocated); + } + else + lRet = ERROR_NOT_ENOUGH_MEMORY; + + RegCloseKey(hkPropSheetHandlers); + } + + if (lRet != ERROR_SUCCESS && psxa) + { + SHDestroyPropSheetExtArray((HPSXA)psxa); + psxa = NULL; + } + + return (HPSXA)psxa; +} + +/************************************************************************* + * SHReplaceFromPropSheetExtArray [SHELL32.170] + */ +UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam) +{ + PSXA_CALL Call; + UINT i; + PPSXA psxa = (PPSXA)hpsxa; + + TRACE("(%p,%u,%p,%08lx)\n", hpsxa, uPageID, lpfnReplaceWith, lParam); + + if (psxa) + { + ZeroMemory(&Call, sizeof(Call)); + Call.lpfnAddReplaceWith = lpfnReplaceWith; + Call.lParam = lParam; + + /* Call the ReplacePage method of all registered IShellPropSheetExt interfaces. + Each shell extension is only allowed to call the callback once during the callback. */ + for (i = 0; i != psxa->uiCount; i++) + { + Call.bCalled = FALSE; + psxa->pspsx[i]->ReplacePage(uPageID, PsxaCall, (LPARAM)&Call); + } + + return Call.uiCount; + } + + return 0; +} + +/************************************************************************* + * SHDestroyPropSheetExtArray [SHELL32.169] + */ +void WINAPI SHDestroyPropSheetExtArray(HPSXA hpsxa) +{ + UINT i; + PPSXA psxa = (PPSXA)hpsxa; + + TRACE("(%p)\n", hpsxa); + + if (psxa) + { + for (i = 0; i != psxa->uiCount; i++) + { + psxa->pspsx[i]->Release(); + } + + LocalFree((HLOCAL)psxa); + } +} + +/************************************************************************* + * CIDLData_CreateFromIDArray [SHELL32.83] + * + * Create IDataObject from PIDLs?? + */ +HRESULT WINAPI CIDLData_CreateFromIDArray( + LPCITEMIDLIST pidlFolder, + UINT cpidlFiles, + LPCITEMIDLIST *lppidlFiles, + IDataObject **ppdataObject) +{ + UINT i; + HWND hwnd = 0; /*FIXME: who should be hwnd of owner? set to desktop */ + HRESULT hResult; + + TRACE("(%p, %d, %p, %p)\n", pidlFolder, cpidlFiles, lppidlFiles, ppdataObject); + if (TRACE_ON(pidl)) + { + pdump (pidlFolder); + for (i = 0; i < cpidlFiles; i++) + pdump(lppidlFiles[i]); + } + hResult = IDataObject_Constructor(hwnd, pidlFolder, lppidlFiles, cpidlFiles, ppdataObject); + return hResult; +} + +/************************************************************************* + * SHCreateStdEnumFmtEtc [SHELL32.74] + * + * NOTES + * + */ +HRESULT WINAPI SHCreateStdEnumFmtEtc( + UINT cFormats, + const FORMATETC *lpFormats, + LPENUMFORMATETC *ppenumFormatetc) +{ + IEnumFORMATETC *pef; + HRESULT hRes; + TRACE("cf=%d fe=%p pef=%p\n", cFormats, lpFormats, ppenumFormatetc); + + hRes = IEnumFORMATETC_Constructor(cFormats, lpFormats, &pef); + if (FAILED(hRes)) + return hRes; + + pef->AddRef(); + hRes = pef->QueryInterface(IID_IEnumFORMATETC, (LPVOID*)ppenumFormatetc); + pef->Release(); + + return hRes; +} + + +/************************************************************************* + * SHCreateShellFolderView (SHELL32.256) + */ +HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv) +{ + HRESULT ret = S_OK; + + FIXME("SHCreateShellFolderView() stub\n"); + + if (!pcsfv || sizeof(*pcsfv) != pcsfv->cbSize) + ret = E_INVALIDARG; + else + { + LPVOID lpdata = 0;/*LocalAlloc(LMEM_ZEROINIT, 0x4E4);*/ + + if (!lpdata) + ret = E_OUTOFMEMORY; + else + { + /* Initialize and return unknown lpdata structure */ + } + } + + return ret; +} + +/************************************************************************* + * SHFindFiles (SHELL32.90) + */ +BOOL WINAPI SHFindFiles( LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlSaveFile ) +{ + FIXME("%p %p\n", pidlFolder, pidlSaveFile ); + return FALSE; +} + +/************************************************************************* + * SHUpdateImageW (SHELL32.192) + * + * Notifies the shell that an icon in the system image list has been changed. + * + * PARAMS + * pszHashItem [I] Path to file that contains the icon. + * iIndex [I] Zero-based index of the icon in the file. + * uFlags [I] Flags determining the icon attributes. See notes. + * iImageIndex [I] Index of the icon in the system image list. + * + * RETURNS + * Nothing + * + * NOTES + * uFlags can be one or more of the following flags: + * GIL_NOTFILENAME - pszHashItem is not a file name. + * GIL_SIMULATEDOC - Create a document icon using the specified icon. + */ +void WINAPI SHUpdateImageW(LPCWSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex) +{ + FIXME("%s, %d, 0x%x, %d - stub\n", debugstr_w(pszHashItem), iIndex, uFlags, iImageIndex); +} + +/************************************************************************* + * SHUpdateImageA (SHELL32.191) + * + * See SHUpdateImageW. + */ +VOID WINAPI SHUpdateImageA(LPCSTR pszHashItem, INT iIndex, UINT uFlags, INT iImageIndex) +{ + FIXME("%s, %d, 0x%x, %d - stub\n", debugstr_a(pszHashItem), iIndex, uFlags, iImageIndex); +} + +INT WINAPI SHHandleUpdateImage(LPCITEMIDLIST pidlExtra) +{ + FIXME("%p - stub\n", pidlExtra); + + return -1; +} + +BOOL WINAPI SHObjectProperties(HWND hwnd, DWORD dwType, LPCWSTR szObject, LPCWSTR szPage) +{ + FIXME("%p, 0x%08x, %s, %s - stub\n", hwnd, dwType, debugstr_w(szObject), debugstr_w(szPage)); + + return TRUE; +} + +BOOL WINAPI SHGetNewLinkInfoA(LPCSTR pszLinkTo, LPCSTR pszDir, LPSTR pszName, BOOL *pfMustCopy, + UINT uFlags) +{ + WCHAR wszLinkTo[MAX_PATH]; + WCHAR wszDir[MAX_PATH]; + WCHAR wszName[MAX_PATH]; + BOOL res; + + MultiByteToWideChar(CP_ACP, 0, pszLinkTo, -1, wszLinkTo, MAX_PATH); + MultiByteToWideChar(CP_ACP, 0, pszDir, -1, wszDir, MAX_PATH); + + res = SHGetNewLinkInfoW(wszLinkTo, wszDir, wszName, pfMustCopy, uFlags); + + if (res) + WideCharToMultiByte(CP_ACP, 0, wszName, -1, pszName, MAX_PATH, NULL, NULL); + + return res; +} + +BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName, BOOL *pfMustCopy, + UINT uFlags) +{ + const WCHAR *basename; + WCHAR *dst_basename; + int i=2; + static const WCHAR lnkformat[] = {'%','s','.','l','n','k',0}; + static const WCHAR lnkformatnum[] = {'%','s',' ','(','%','d',')','.','l','n','k',0}; + + TRACE("(%s, %s, %p, %p, 0x%08x)\n", debugstr_w(pszLinkTo), debugstr_w(pszDir), + pszName, pfMustCopy, uFlags); + + *pfMustCopy = FALSE; + + if (uFlags & SHGNLI_PIDL) + { + FIXME("SHGNLI_PIDL flag unsupported\n"); + return FALSE; + } + + if (uFlags) + FIXME("ignoring flags: 0x%08x\n", uFlags); + + /* FIXME: should test if the file is a shortcut or DOS program */ + if (GetFileAttributesW(pszLinkTo) == INVALID_FILE_ATTRIBUTES) + return FALSE; + + basename = strrchrW(pszLinkTo, '\\'); + if (basename) + basename = basename+1; + else + basename = pszLinkTo; + + lstrcpynW(pszName, pszDir, MAX_PATH); + if (!PathAddBackslashW(pszName)) + return FALSE; + + dst_basename = pszName + strlenW(pszName); + + snprintfW(dst_basename, pszName + MAX_PATH - dst_basename, lnkformat, basename); + + while (GetFileAttributesW(pszName) != INVALID_FILE_ATTRIBUTES) + { + snprintfW(dst_basename, pszName + MAX_PATH - dst_basename, lnkformatnum, basename, i); + i++; + } + + return TRUE; +} + +/************************************************************************* + * SHStartNetConnectionDialog (SHELL32.@) + */ +HRESULT WINAPI SHStartNetConnectionDialog(HWND hwnd, LPCSTR pszRemoteName, DWORD dwType) +{ + FIXME("%p, %s, 0x%08x - stub\n", hwnd, debugstr_a(pszRemoteName), dwType); + + return S_OK; +} +/************************************************************************* + * SHEmptyRecycleBinA (SHELL32.@) + */ +HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags) +{ + LPWSTR szRootPathW = NULL; + int len; + HRESULT hr; + + TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_a(pszRootPath), dwFlags); + + if (pszRootPath) + { + len = MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, NULL, 0); + if (len == 0) + return HRESULT_FROM_WIN32(GetLastError()); + szRootPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!szRootPathW) + return E_OUTOFMEMORY; + if (MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, szRootPathW, len) == 0) + { + HeapFree(GetProcessHeap(), 0, szRootPathW); + return HRESULT_FROM_WIN32(GetLastError()); + } + } + + hr = SHEmptyRecycleBinW(hwnd, szRootPathW, dwFlags); + HeapFree(GetProcessHeap(), 0, szRootPathW); + + return hr; +} + +HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags) +{ + WCHAR szPath[MAX_PATH] = {0}; + DWORD dwSize, dwType; + LONG ret; + + TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_w(pszRootPath), dwFlags); + + if (!(dwFlags & SHERB_NOCONFIRMATION)) + { + /* FIXME + * enumerate available files + * show confirmation dialog + */ + FIXME("show confirmation dialog\n"); + } + + if (dwFlags & SHERB_NOPROGRESSUI) + { + ret = EmptyRecycleBinW(pszRootPath); + } + else + { + /* FIXME + * show a progress dialog + */ + ret = EmptyRecycleBinW(pszRootPath); + } + + if (!ret) + return HRESULT_FROM_WIN32(GetLastError()); + + if (!(dwFlags & SHERB_NOSOUND)) + { + dwSize = sizeof(szPath); + ret = RegGetValueW(HKEY_CURRENT_USER, + L"AppEvents\\Schemes\\Apps\\Explorer\\EmptyRecycleBin\\.Current", + NULL, + RRF_RT_REG_EXPAND_SZ, + &dwType, + (PVOID)szPath, + &dwSize); + if (ret != ERROR_SUCCESS) + return S_OK; + + if (dwType != REG_EXPAND_SZ) /* type dismatch */ + return S_OK; + + szPath[(sizeof(szPath)/sizeof(WCHAR))-1] = L'\0'; + PlaySoundW(szPath, NULL, SND_FILENAME); + } + return S_OK; +} + +HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo) +{ + LPWSTR szRootPathW = NULL; + int len; + HRESULT hr; + + TRACE("%s, %p\n", debugstr_a(pszRootPath), pSHQueryRBInfo); + + if (pszRootPath) + { + len = MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, NULL, 0); + if (len == 0) + return HRESULT_FROM_WIN32(GetLastError()); + szRootPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!szRootPathW) + return E_OUTOFMEMORY; + if (MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, szRootPathW, len) == 0) + { + HeapFree(GetProcessHeap(), 0, szRootPathW); + return HRESULT_FROM_WIN32(GetLastError()); + } + } + + hr = SHQueryRecycleBinW(szRootPathW, pSHQueryRBInfo); + HeapFree(GetProcessHeap(), 0, szRootPathW); + + return hr; +} + +HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo) +{ + FIXME("%s, %p - stub\n", debugstr_w(pszRootPath), pSHQueryRBInfo); + + if (!(pszRootPath) || (pszRootPath[0] == 0) || + !(pSHQueryRBInfo) || (pSHQueryRBInfo->cbSize < sizeof(SHQUERYRBINFO))) + { + return E_INVALIDARG; + } + + pSHQueryRBInfo->i64Size = 0; + pSHQueryRBInfo->i64NumItems = 0; + + return S_OK; +} + +/************************************************************************* + * SHSetLocalizedName (SHELL32.@) + */ +EXTERN_C HRESULT WINAPI SHSetLocalizedName(LPCWSTR pszPath, LPCWSTR pszResModule, int idsRes) +{ + FIXME("%p, %s, %d - stub\n", pszPath, debugstr_w(pszResModule), idsRes); + + return S_OK; +} + +/************************************************************************* + * LinkWindow_RegisterClass (SHELL32.258) + */ +EXTERN_C BOOL WINAPI LinkWindow_RegisterClass(void) +{ + FIXME("()\n"); + return TRUE; +} + +/************************************************************************* + * LinkWindow_UnregisterClass (SHELL32.259) + */ +EXTERN_C BOOL WINAPI LinkWindow_UnregisterClass(void) +{ + FIXME("()\n"); + return TRUE; + +} + +/************************************************************************* + * SHFlushSFCache (SHELL32.526) + * + * Notifies the shell that a user-specified special folder location has changed. + * + * NOTES + * In Wine, the shell folder registry values are not cached, so this function + * has no effect. + */ +EXTERN_C void WINAPI SHFlushSFCache(void) +{ +} + +EXTERN_C HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv) +{ + FIXME("STUB: %i %s\n",iImageList,debugstr_guid(&riid)); + return E_NOINTERFACE; +} + +/************************************************************************* + * SHParseDisplayName [shell version 6.0] + */ +EXTERN_C HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, +LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut) +{ + CComPtr psfDesktop; + HRESULT hr=E_FAIL; + ULONG dwAttr=sfgaoIn; + + if(!ppidl) + return E_INVALIDARG; + + if (!pszName || !psfgaoOut) + { + *ppidl = NULL; + return E_INVALIDARG; + } + + hr = SHGetDesktopFolder(&psfDesktop); + if (FAILED(hr)) + { + *ppidl = NULL; + return hr; + } + + hr = psfDesktop->ParseDisplayName((HWND)NULL, pbc, (LPOLESTR)pszName, (ULONG *)NULL, ppidl, &dwAttr); + + psfDesktop->Release(); + + if (SUCCEEDED(hr)) + *psfgaoOut = dwAttr; + else + *ppidl = NULL; + + return hr; +} diff --git a/reactos/dll/win32/shell32_new/shellpath.cpp b/reactos/dll/win32/shell32_new/shellpath.cpp new file mode 100644 index 00000000000..f1418618ac8 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shellpath.cpp @@ -0,0 +1,2030 @@ +/* + * Path Functions + * + * Copyright 1998, 1999, 2000 Juergen Schmied + * Copyright 2004 Juan Lang + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * NOTES: + * + * Many of these functions are in SHLWAPI.DLL also + * + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/* + ########## Combining and Constructing paths ########## +*/ + +/************************************************************************* + * PathAppend [SHELL32.36] + */ +BOOL WINAPI PathAppendAW( + LPVOID lpszPath1, + LPCVOID lpszPath2) +{ + if (SHELL_OsIsUnicode()) + return PathAppendW((LPWSTR)lpszPath1, (LPCWSTR)lpszPath2); + return PathAppendA((LPSTR)lpszPath1, (LPCSTR)lpszPath2); +} + +/************************************************************************* + * PathBuildRoot [SHELL32.30] + */ +LPVOID WINAPI PathBuildRootAW(LPVOID lpszPath, int drive) +{ + if(SHELL_OsIsUnicode()) + return PathBuildRootW((LPWSTR)lpszPath, drive); + return PathBuildRootA((LPSTR)lpszPath, drive); +} + +/************************************************************************* + * PathGetExtensionA [internal] + * + * NOTES + * exported by ordinal + * return value points to the first char after the dot + */ +static LPSTR PathGetExtensionA(LPCSTR lpszPath) +{ + TRACE("(%s)\n",lpszPath); + + lpszPath = PathFindExtensionA(lpszPath); + return (LPSTR)(*lpszPath?(lpszPath+1):lpszPath); +} + +/************************************************************************* + * PathGetExtensionW [internal] + */ +LPWSTR PathGetExtensionW(LPCWSTR lpszPath) +{ + TRACE("(%s)\n",debugstr_w(lpszPath)); + + lpszPath = PathFindExtensionW(lpszPath); + return (LPWSTR)(*lpszPath?(lpszPath+1):lpszPath); +} + +/************************************************************************* + * SHPathGetExtension [SHELL32.158] + */ +EXTERN_C LPVOID WINAPI SHPathGetExtensionW(LPCWSTR lpszPath, DWORD void1, DWORD void2) +{ + return PathGetExtensionW(lpszPath); +} + +/************************************************************************* + * PathRemoveFileSpec [SHELL32.35] + */ +BOOL WINAPI PathRemoveFileSpecAW(LPVOID lpszPath) +{ + if (SHELL_OsIsUnicode()) + return PathRemoveFileSpecW((LPWSTR)lpszPath); + return PathRemoveFileSpecA((LPSTR)lpszPath); +} + +/* + Path Manipulations +*/ + +/************************************************************************* + * PathGetShortPathA [internal] + */ +static void PathGetShortPathA(LPSTR pszPath) +{ + CHAR path[MAX_PATH]; + + TRACE("%s\n", pszPath); + + if (GetShortPathNameA(pszPath, path, MAX_PATH)) + { + lstrcpyA(pszPath, path); + } +} + +/************************************************************************* + * PathGetShortPathW [internal] + */ +static void PathGetShortPathW(LPWSTR pszPath) +{ + WCHAR path[MAX_PATH]; + + TRACE("%s\n", debugstr_w(pszPath)); + + if (GetShortPathNameW(pszPath, path, MAX_PATH)) + { + wcscpy(pszPath, path); + } +} + +/************************************************************************* + * PathGetShortPath [SHELL32.92] + */ +EXTERN_C VOID WINAPI PathGetShortPathAW(LPVOID pszPath) +{ + if(SHELL_OsIsUnicode()) + PathGetShortPathW((LPWSTR)pszPath); + PathGetShortPathA((LPSTR)pszPath); +} + +/* + ########## Path Testing ########## +*/ + +/************************************************************************* + * PathIsRoot [SHELL32.29] + */ +BOOL WINAPI PathIsRootAW(LPCVOID lpszPath) +{ + if (SHELL_OsIsUnicode()) + return PathIsRootW((LPWSTR)lpszPath); + return PathIsRootA((LPSTR)lpszPath); +} + +/************************************************************************* + * PathIsExeA [internal] + */ +static BOOL PathIsExeA (LPCSTR lpszPath) +{ + LPCSTR lpszExtension = PathGetExtensionA(lpszPath); + int i; + static const char * const lpszExtensions[] = + {"exe", "com", "pif", "cmd", "bat", "scf", "scr", NULL }; + + TRACE("path=%s\n",lpszPath); + + for(i=0; lpszExtensions[i]; i++) + if (!lstrcmpiA(lpszExtension,lpszExtensions[i])) return TRUE; + + return FALSE; +} + +/************************************************************************* + * PathIsExeW [internal] + */ +static BOOL PathIsExeW (LPCWSTR lpszPath) +{ + LPCWSTR lpszExtension = PathGetExtensionW(lpszPath); + int i; + static const WCHAR lpszExtensions[][4] = + {{'e','x','e','\0'}, {'c','o','m','\0'}, {'p','i','f','\0'}, + {'c','m','d','\0'}, {'b','a','t','\0'}, {'s','c','f','\0'}, + {'s','c','r','\0'}, {'\0'} }; + + TRACE("path=%s\n",debugstr_w(lpszPath)); + + for(i=0; lpszExtensions[i][0]; i++) + if (!strcmpiW(lpszExtension,lpszExtensions[i])) return TRUE; + + return FALSE; +} + +/************************************************************************* + * PathIsExe [SHELL32.43] + */ +BOOL WINAPI PathIsExeAW (LPCVOID path) +{ + if (SHELL_OsIsUnicode()) + return PathIsExeW ((LPWSTR)path); + return PathIsExeA((LPSTR)path); +} + +/************************************************************************* + * PathFileExists [SHELL32.45] + */ +BOOL WINAPI PathFileExistsAW (LPCVOID lpszPath) +{ + if (SHELL_OsIsUnicode()) + return PathFileExistsW ((LPWSTR)lpszPath); + return PathFileExistsA ((LPSTR)lpszPath); +} + +/************************************************************************* + * PathIsSameRoot [SHELL32.650] + */ +BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2) +{ + if (SHELL_OsIsUnicode()) + return PathIsSameRootW((LPCWSTR)lpszPath1, (LPCWSTR)lpszPath2); + return PathIsSameRootA((LPCSTR)lpszPath1, (LPCSTR)lpszPath2); +} + +/************************************************************************* + * IsLFNDriveA [SHELL32.41] + */ +EXTERN_C BOOL WINAPI IsLFNDriveA(LPCSTR lpszPath) +{ + DWORD fnlen; + + if (!GetVolumeInformationA(lpszPath, NULL, 0, NULL, &fnlen, NULL, NULL, 0)) + return FALSE; + return fnlen > 12; +} + +/************************************************************************* + * IsLFNDriveW [SHELL32.42] + */ +EXTERN_C BOOL WINAPI IsLFNDriveW(LPCWSTR lpszPath) +{ + DWORD fnlen; + + if (!GetVolumeInformationW(lpszPath, NULL, 0, NULL, &fnlen, NULL, NULL, 0)) + return FALSE; + return fnlen > 12; +} + +/************************************************************************* + * IsLFNDrive [SHELL32.119] + */ +EXTERN_C BOOL WINAPI IsLFNDriveAW(LPCVOID lpszPath) +{ + if (SHELL_OsIsUnicode()) + return IsLFNDriveW((LPCWSTR)lpszPath); + return IsLFNDriveA((LPCSTR)lpszPath); +} + +/* + ########## Creating Something Unique ########## +*/ +/************************************************************************* + * PathMakeUniqueNameA [internal] + */ +BOOL WINAPI PathMakeUniqueNameA( + LPSTR lpszBuffer, + DWORD dwBuffSize, + LPCSTR lpszShortName, + LPCSTR lpszLongName, + LPCSTR lpszPathName) +{ + FIXME("%p %u %s %s %s stub\n", + lpszBuffer, dwBuffSize, debugstr_a(lpszShortName), + debugstr_a(lpszLongName), debugstr_a(lpszPathName)); + return TRUE; +} + +/************************************************************************* + * PathMakeUniqueNameW [internal] + */ +BOOL WINAPI PathMakeUniqueNameW( + LPWSTR lpszBuffer, + DWORD dwBuffSize, + LPCWSTR lpszShortName, + LPCWSTR lpszLongName, + LPCWSTR lpszPathName) +{ + FIXME("%p %u %s %s %s stub\n", + lpszBuffer, dwBuffSize, debugstr_w(lpszShortName), + debugstr_w(lpszLongName), debugstr_w(lpszPathName)); + return TRUE; +} + +/************************************************************************* + * PathMakeUniqueName [SHELL32.47] + */ +BOOL WINAPI PathMakeUniqueNameAW( + LPVOID lpszBuffer, + DWORD dwBuffSize, + LPCVOID lpszShortName, + LPCVOID lpszLongName, + LPCVOID lpszPathName) +{ + if (SHELL_OsIsUnicode()) + return PathMakeUniqueNameW((LPWSTR)lpszBuffer, dwBuffSize, (LPCWSTR)lpszShortName, (LPCWSTR)lpszLongName, (LPCWSTR)lpszPathName); + return PathMakeUniqueNameA((LPSTR)lpszBuffer, dwBuffSize, (LPCSTR)lpszShortName, (LPCSTR)lpszLongName, (LPCSTR)lpszPathName); +} + +/************************************************************************* + * PathYetAnotherMakeUniqueName [SHELL32.75] + * + * NOTES + * exported by ordinal + */ +BOOL WINAPI PathYetAnotherMakeUniqueName( + LPWSTR lpszBuffer, + LPCWSTR lpszPathName, + LPCWSTR lpszShortName, + LPCWSTR lpszLongName) +{ + FIXME("(%p, %s, %s ,%s):stub.\n", + lpszBuffer, debugstr_w(lpszPathName), debugstr_w(lpszShortName), debugstr_w(lpszLongName)); + return TRUE; +} + + +/* + ########## cleaning and resolving paths ########## + */ + +/************************************************************************* + * PathCleanupSpec [SHELL32.171] + * + * lpszFile is changed in place. + */ +int WINAPI PathCleanupSpec( LPCWSTR lpszPathW, LPWSTR lpszFileW ) +{ + int i = 0; + DWORD rc = 0; + int length = 0; + + if (SHELL_OsIsUnicode()) + { + LPWSTR p = lpszFileW; + + TRACE("Cleanup %s\n",debugstr_w(lpszFileW)); + + if (lpszPathW) + length = wcslen(lpszPathW); + + while (*p) + { + int gct = PathGetCharTypeW(*p); + if (gct == GCT_INVALID || gct == GCT_WILD || gct == GCT_SEPARATOR) + { + lpszFileW[i]='-'; + rc |= PCS_REPLACEDCHAR; + } + else + lpszFileW[i]=*p; + i++; + p++; + if (length + i == MAX_PATH) + { + rc |= PCS_FATAL | PCS_PATHTOOLONG; + break; + } + } + lpszFileW[i]=0; + } + else + { + LPSTR lpszFileA = (LPSTR)lpszFileW; + LPCSTR lpszPathA = (LPCSTR)lpszPathW; + LPSTR p = lpszFileA; + + TRACE("Cleanup %s\n",debugstr_a(lpszFileA)); + + if (lpszPathA) + length = strlen(lpszPathA); + + while (*p) + { + int gct = PathGetCharTypeA(*p); + if (gct == GCT_INVALID || gct == GCT_WILD || gct == GCT_SEPARATOR) + { + lpszFileA[i]='-'; + rc |= PCS_REPLACEDCHAR; + } + else + lpszFileA[i]=*p; + i++; + p++; + if (length + i == MAX_PATH) + { + rc |= PCS_FATAL | PCS_PATHTOOLONG; + break; + } + } + lpszFileA[i]=0; + } + return rc; +} + +/************************************************************************* + * PathQualifyA [SHELL32] + */ +BOOL WINAPI PathQualifyA(LPCSTR pszPath) +{ + FIXME("%s\n",pszPath); + return 0; +} + +/************************************************************************* + * PathQualifyW [SHELL32] + */ +BOOL WINAPI PathQualifyW(LPCWSTR pszPath) +{ + FIXME("%s\n",debugstr_w(pszPath)); + return 0; +} + +/************************************************************************* + * PathQualify [SHELL32.49] + */ +BOOL WINAPI PathQualifyAW(LPCVOID pszPath) +{ + if (SHELL_OsIsUnicode()) + return PathQualifyW((LPCWSTR)pszPath); + return PathQualifyA((LPCSTR)pszPath); +} + +/************************************************************************* + * PathResolveA [SHELL32.51] + */ +BOOL WINAPI PathResolveA( + LPSTR lpszPath, + LPCSTR *alpszPaths, + DWORD dwFlags) +{ + FIXME("(%s,%p,0x%08x),stub!\n", + lpszPath, *alpszPaths, dwFlags); + return 0; +} + +/************************************************************************* + * PathResolveW [SHELL32] + */ +BOOL WINAPI PathResolveW( + LPWSTR lpszPath, + LPCWSTR *alpszPaths, + DWORD dwFlags) +{ + FIXME("(%s,%p,0x%08x),stub!\n", + debugstr_w(lpszPath), debugstr_w(*alpszPaths), dwFlags); + return 0; +} + +/************************************************************************* + * PathResolve [SHELL32.51] + */ +BOOL WINAPI PathResolveAW( + LPVOID lpszPath, + LPCVOID *alpszPaths, + DWORD dwFlags) +{ + if (SHELL_OsIsUnicode()) + return PathResolveW((LPWSTR)lpszPath, (LPCWSTR *)alpszPaths, dwFlags); + return PathResolveA((LPSTR)lpszPath, (LPCSTR *)alpszPaths, dwFlags); +} + +/************************************************************************* +* PathProcessCommandA [SHELL32.653] +*/ +LONG WINAPI PathProcessCommandA ( + LPCSTR lpszPath, + LPSTR lpszBuff, + DWORD dwBuffSize, + DWORD dwFlags) +{ + FIXME("%s %p 0x%04x 0x%04x stub\n", + lpszPath, lpszBuff, dwBuffSize, dwFlags); + if(!lpszPath) return -1; + if(lpszBuff) strcpy(lpszBuff, lpszPath); + return strlen(lpszPath); +} + +/************************************************************************* +* PathProcessCommandW +*/ +LONG WINAPI PathProcessCommandW ( + LPCWSTR lpszPath, + LPWSTR lpszBuff, + DWORD dwBuffSize, + DWORD dwFlags) +{ + FIXME("(%s, %p, 0x%04x, 0x%04x) stub\n", + debugstr_w(lpszPath), lpszBuff, dwBuffSize, dwFlags); + if(!lpszPath) return -1; + if(lpszBuff) wcscpy(lpszBuff, lpszPath); + return wcslen(lpszPath); +} + +/************************************************************************* +* PathProcessCommand (SHELL32.653) +*/ +LONG WINAPI PathProcessCommandAW ( + LPCVOID lpszPath, + LPVOID lpszBuff, + DWORD dwBuffSize, + DWORD dwFlags) +{ + if (SHELL_OsIsUnicode()) + return PathProcessCommandW((LPCWSTR)lpszPath, (LPWSTR)lpszBuff, dwBuffSize, dwFlags); + return PathProcessCommandA((LPCSTR)lpszPath, (LPSTR)lpszBuff, dwBuffSize, dwFlags); +} + +/* + ########## special ########## +*/ + +static const WCHAR szCurrentVersion[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\0'}; +static const WCHAR Administrative_ToolsW[] = {'A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'}; +static const WCHAR AppDataW[] = {'A','p','p','D','a','t','a','\0'}; +static const WCHAR CacheW[] = {'C','a','c','h','e','\0'}; +static const WCHAR CD_BurningW[] = {'C','D',' ','B','u','r','n','i','n','g','\0'}; +static const WCHAR Common_Administrative_ToolsW[] = {'C','o','m','m','o','n',' ','A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'}; +static const WCHAR Common_AppDataW[] = {'C','o','m','m','o','n',' ','A','p','p','D','a','t','a','\0'}; +static const WCHAR Common_DesktopW[] = {'C','o','m','m','o','n',' ','D','e','s','k','t','o','p','\0'}; +static const WCHAR Common_DocumentsW[] = {'C','o','m','m','o','n',' ','D','o','c','u','m','e','n','t','s','\0'}; +static const WCHAR CommonFilesDirW[] = {'C','o','m','m','o','n','F','i','l','e','s','D','i','r','\0'}; +static const WCHAR CommonMusicW[] = {'C','o','m','m','o','n','M','u','s','i','c','\0'}; +static const WCHAR CommonPicturesW[] = {'C','o','m','m','o','n','P','i','c','t','u','r','e','s','\0'}; +static const WCHAR Common_ProgramsW[] = {'C','o','m','m','o','n',' ','P','r','o','g','r','a','m','s','\0'}; +static const WCHAR Common_StartUpW[] = {'C','o','m','m','o','n',' ','S','t','a','r','t','U','p','\0'}; +static const WCHAR Common_Start_MenuW[] = {'C','o','m','m','o','n',' ','S','t','a','r','t',' ','M','e','n','u','\0'}; +static const WCHAR Common_TemplatesW[] = {'C','o','m','m','o','n',' ','T','e','m','p','l','a','t','e','s','\0'}; +static const WCHAR CommonVideoW[] = {'C','o','m','m','o','n','V','i','d','e','o','\0'}; +static const WCHAR CookiesW[] = {'C','o','o','k','i','e','s','\0'}; +static const WCHAR DesktopW[] = {'D','e','s','k','t','o','p','\0'}; +static const WCHAR FavoritesW[] = {'F','a','v','o','r','i','t','e','s','\0'}; +static const WCHAR FontsW[] = {'F','o','n','t','s','\0'}; +static const WCHAR HistoryW[] = {'H','i','s','t','o','r','y','\0'}; +static const WCHAR Local_AppDataW[] = {'L','o','c','a','l',' ','A','p','p','D','a','t','a','\0'}; +static const WCHAR My_MusicW[] = {'M','y',' ','M','u','s','i','c','\0'}; +static const WCHAR My_PicturesW[] = {'M','y',' ','P','i','c','t','u','r','e','s','\0'}; +static const WCHAR My_VideoW[] = {'M','y',' ','V','i','d','e','o','\0'}; +static const WCHAR NetHoodW[] = {'N','e','t','H','o','o','d','\0'}; +static const WCHAR PersonalW[] = {'P','e','r','s','o','n','a','l','\0'}; +static const WCHAR PrintHoodW[] = {'P','r','i','n','t','H','o','o','d','\0'}; +static const WCHAR ProgramFilesDirW[] = {'P','r','o','g','r','a','m','F','i','l','e','s','D','i','r','\0'}; +static const WCHAR ProgramsW[] = {'P','r','o','g','r','a','m','s','\0'}; +static const WCHAR RecentW[] = {'R','e','c','e','n','t','\0'}; +static const WCHAR ResourcesW[] = {'R','e','s','o','u','r','c','e','s','\0'}; +static const WCHAR SendToW[] = {'S','e','n','d','T','o','\0'}; +static const WCHAR StartUpW[] = {'S','t','a','r','t','U','p','\0'}; +static const WCHAR Start_MenuW[] = {'S','t','a','r','t',' ','M','e','n','u','\0'}; +static const WCHAR TemplatesW[] = {'T','e','m','p','l','a','t','e','s','\0'}; +static const WCHAR DefaultW[] = {'.','D','e','f','a','u','l','t','\0'}; +static const WCHAR AllUsersProfileW[] = {'%','A','L','L','U','S','E','R','S','P','R','O','F','I','L','E','%','\0'}; +static const WCHAR UserProfileW[] = {'%','U','S','E','R','P','R','O','F','I','L','E','%','\0'}; +static const WCHAR SystemDriveW[] = {'%','S','y','s','t','e','m','D','r','i','v','e','%','\0'}; +static const WCHAR ProfileListW[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s',' ','N','T','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','P','r','o','f','i','l','e','L','i','s','t',0}; +static const WCHAR ProfilesDirectoryW[] = {'P','r','o','f','i','l','e','s','D','i','r','e','c','t','o','r','y',0}; +static const WCHAR AllUsersProfileValueW[] = {'A','l','l','U','s','e','r','s','P','r','o','f','i','l','e','\0'}; +static const WCHAR szSHFolders[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','S','h','e','l','l',' ','F','o','l','d','e','r','s','\0'}; +static const WCHAR szSHUserFolders[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','U','s','e','r',' ','S','h','e','l','l',' ','F','o','l','d','e','r','s','\0'}; +/* This defaults to L"Documents and Settings" on Windows 2000/XP, but we're + * acting more Windows 9x-like for now. + */ +static const WCHAR szDefaultProfileDirW[] = {'p','r','o','f','i','l','e','s','\0'}; +static const WCHAR AllUsersW[] = {'A','l','l',' ','U','s','e','r','s','\0'}; + +typedef enum _CSIDL_Type { + CSIDL_Type_User, + CSIDL_Type_AllUsers, + CSIDL_Type_CurrVer, + CSIDL_Type_Disallowed, + CSIDL_Type_NonExistent, + CSIDL_Type_WindowsPath, + CSIDL_Type_SystemPath, +} CSIDL_Type; + +typedef struct +{ + CSIDL_Type type; + LPCWSTR szValueName; + LPCWSTR szDefaultPath; /* fallback string or resource ID */ +} CSIDL_DATA; + +static const CSIDL_DATA CSIDL_Data[] = +{ + { /* 0x00 - CSIDL_DESKTOP */ + CSIDL_Type_User, + DesktopW, + MAKEINTRESOURCEW(IDS_DESKTOPDIRECTORY) + }, + { /* 0x01 - CSIDL_INTERNET */ + CSIDL_Type_Disallowed, + NULL, + NULL + }, + { /* 0x02 - CSIDL_PROGRAMS */ + CSIDL_Type_User, + ProgramsW, + MAKEINTRESOURCEW(IDS_PROGRAMS) + }, + { /* 0x03 - CSIDL_CONTROLS (.CPL files) */ + CSIDL_Type_SystemPath, + NULL, + NULL + }, + { /* 0x04 - CSIDL_PRINTERS */ + CSIDL_Type_SystemPath, + NULL, + NULL + }, + { /* 0x05 - CSIDL_PERSONAL */ + CSIDL_Type_User, + PersonalW, + MAKEINTRESOURCEW(IDS_PERSONAL) + }, + { /* 0x06 - CSIDL_FAVORITES */ + CSIDL_Type_User, + FavoritesW, + MAKEINTRESOURCEW(IDS_FAVORITES) + }, + { /* 0x07 - CSIDL_STARTUP */ + CSIDL_Type_User, + StartUpW, + MAKEINTRESOURCEW(IDS_STARTUP) + }, + { /* 0x08 - CSIDL_RECENT */ + CSIDL_Type_User, + RecentW, + MAKEINTRESOURCEW(IDS_RECENT) + }, + { /* 0x09 - CSIDL_SENDTO */ + CSIDL_Type_User, + SendToW, + MAKEINTRESOURCEW(IDS_SENDTO) + }, + { /* 0x0a - CSIDL_BITBUCKET - Recycle Bin */ + CSIDL_Type_Disallowed, + NULL, + NULL, + }, + { /* 0x0b - CSIDL_STARTMENU */ + CSIDL_Type_User, + Start_MenuW, + MAKEINTRESOURCEW(IDS_STARTMENU) + }, + { /* 0x0c - CSIDL_MYDOCUMENTS */ + CSIDL_Type_Disallowed, /* matches WinXP--can't get its path */ + NULL, + NULL + }, + { /* 0x0d - CSIDL_MYMUSIC */ + CSIDL_Type_User, + My_MusicW, + MAKEINTRESOURCEW(IDS_MYMUSIC) + }, + { /* 0x0e - CSIDL_MYVIDEO */ + CSIDL_Type_User, + My_VideoW, + MAKEINTRESOURCEW(IDS_MYVIDEO) + }, + { /* 0x0f - unassigned */ + CSIDL_Type_Disallowed, + NULL, + NULL, + }, + { /* 0x10 - CSIDL_DESKTOPDIRECTORY */ + CSIDL_Type_User, + DesktopW, + MAKEINTRESOURCEW(IDS_DESKTOPDIRECTORY) + }, + { /* 0x11 - CSIDL_DRIVES */ + CSIDL_Type_Disallowed, + NULL, + NULL, + }, + { /* 0x12 - CSIDL_NETWORK */ + CSIDL_Type_Disallowed, + NULL, + NULL, + }, + { /* 0x13 - CSIDL_NETHOOD */ + CSIDL_Type_User, + NetHoodW, + MAKEINTRESOURCEW(IDS_NETHOOD) + }, + { /* 0x14 - CSIDL_FONTS */ + CSIDL_Type_WindowsPath, + FontsW, + FontsW + }, + { /* 0x15 - CSIDL_TEMPLATES */ + CSIDL_Type_User, + TemplatesW, + MAKEINTRESOURCEW(IDS_TEMPLATES) + }, + { /* 0x16 - CSIDL_COMMON_STARTMENU */ + CSIDL_Type_AllUsers, + Common_Start_MenuW, + MAKEINTRESOURCEW(IDS_STARTMENU) + }, + { /* 0x17 - CSIDL_COMMON_PROGRAMS */ + CSIDL_Type_AllUsers, + Common_ProgramsW, + MAKEINTRESOURCEW(IDS_PROGRAMS) + }, + { /* 0x18 - CSIDL_COMMON_STARTUP */ + CSIDL_Type_AllUsers, + Common_StartUpW, + MAKEINTRESOURCEW(IDS_STARTUP) + }, + { /* 0x19 - CSIDL_COMMON_DESKTOPDIRECTORY */ + CSIDL_Type_AllUsers, + Common_DesktopW, + MAKEINTRESOURCEW(IDS_DESKTOP) + }, + { /* 0x1a - CSIDL_APPDATA */ + CSIDL_Type_User, + AppDataW, + MAKEINTRESOURCEW(IDS_APPDATA) + }, + { /* 0x1b - CSIDL_PRINTHOOD */ + CSIDL_Type_User, + PrintHoodW, + MAKEINTRESOURCEW(IDS_PRINTHOOD) + }, + { /* 0x1c - CSIDL_LOCAL_APPDATA */ + CSIDL_Type_User, + Local_AppDataW, + MAKEINTRESOURCEW(IDS_LOCAL_APPDATA) + }, + { /* 0x1d - CSIDL_ALTSTARTUP */ + CSIDL_Type_NonExistent, + NULL, + NULL + }, + { /* 0x1e - CSIDL_COMMON_ALTSTARTUP */ + CSIDL_Type_NonExistent, + NULL, + NULL + }, + { /* 0x1f - CSIDL_COMMON_FAVORITES */ + CSIDL_Type_AllUsers, + FavoritesW, + MAKEINTRESOURCEW(IDS_FAVORITES) + }, + { /* 0x20 - CSIDL_INTERNET_CACHE */ + CSIDL_Type_User, + CacheW, + MAKEINTRESOURCEW(IDS_INTERNET_CACHE) + }, + { /* 0x21 - CSIDL_COOKIES */ + CSIDL_Type_User, + CookiesW, + MAKEINTRESOURCEW(IDS_COOKIES) + }, + { /* 0x22 - CSIDL_HISTORY */ + CSIDL_Type_User, + HistoryW, + MAKEINTRESOURCEW(IDS_HISTORY) + }, + { /* 0x23 - CSIDL_COMMON_APPDATA */ + CSIDL_Type_AllUsers, + Common_AppDataW, + MAKEINTRESOURCEW(IDS_APPDATA) + }, + { /* 0x24 - CSIDL_WINDOWS */ + CSIDL_Type_WindowsPath, + NULL, + NULL + }, + { /* 0x25 - CSIDL_SYSTEM */ + CSIDL_Type_SystemPath, + NULL, + NULL + }, + { /* 0x26 - CSIDL_PROGRAM_FILES */ + CSIDL_Type_CurrVer, + ProgramFilesDirW, + MAKEINTRESOURCEW(IDS_PROGRAM_FILES) + }, + { /* 0x27 - CSIDL_MYPICTURES */ + CSIDL_Type_User, + My_PicturesW, + MAKEINTRESOURCEW(IDS_MYPICTURES) + }, + { /* 0x28 - CSIDL_PROFILE */ + CSIDL_Type_User, + NULL, + NULL + }, + { /* 0x29 - CSIDL_SYSTEMX86 */ + CSIDL_Type_NonExistent, + NULL, + NULL + }, + { /* 0x2a - CSIDL_PROGRAM_FILESX86 */ + CSIDL_Type_NonExistent, + NULL, + NULL + }, + { /* 0x2b - CSIDL_PROGRAM_FILES_COMMON */ + CSIDL_Type_CurrVer, + CommonFilesDirW, + MAKEINTRESOURCEW(IDS_PROGRAM_FILES_COMMON) + }, + { /* 0x2c - CSIDL_PROGRAM_FILES_COMMONX86 */ + CSIDL_Type_NonExistent, + NULL, + NULL + }, + { /* 0x2d - CSIDL_COMMON_TEMPLATES */ + CSIDL_Type_AllUsers, + Common_TemplatesW, + MAKEINTRESOURCEW(IDS_TEMPLATES) + }, + { /* 0x2e - CSIDL_COMMON_DOCUMENTS */ + CSIDL_Type_AllUsers, + Common_DocumentsW, + MAKEINTRESOURCEW(IDS_COMMON_DOCUMENTS) + }, + { /* 0x2f - CSIDL_COMMON_ADMINTOOLS */ + CSIDL_Type_AllUsers, + Common_Administrative_ToolsW, + MAKEINTRESOURCEW(IDS_ADMINTOOLS) + }, + { /* 0x30 - CSIDL_ADMINTOOLS */ + CSIDL_Type_User, + Administrative_ToolsW, + MAKEINTRESOURCEW(IDS_ADMINTOOLS) + }, + { /* 0x31 - CSIDL_CONNECTIONS */ + CSIDL_Type_Disallowed, + NULL, + NULL + }, + { /* 0x32 - unassigned */ + CSIDL_Type_Disallowed, + NULL, + NULL + }, + { /* 0x33 - unassigned */ + CSIDL_Type_Disallowed, + NULL, + NULL + }, + { /* 0x34 - unassigned */ + CSIDL_Type_Disallowed, + NULL, + NULL + }, + { /* 0x35 - CSIDL_COMMON_MUSIC */ + CSIDL_Type_AllUsers, + CommonMusicW, + MAKEINTRESOURCEW(IDS_COMMON_MUSIC) + }, + { /* 0x36 - CSIDL_COMMON_PICTURES */ + CSIDL_Type_AllUsers, + CommonPicturesW, + MAKEINTRESOURCEW(IDS_COMMON_PICTURES) + }, + { /* 0x37 - CSIDL_COMMON_VIDEO */ + CSIDL_Type_AllUsers, + CommonVideoW, + MAKEINTRESOURCEW(IDS_COMMON_VIDEO) + }, + { /* 0x38 - CSIDL_RESOURCES */ + CSIDL_Type_WindowsPath, + NULL, + ResourcesW + }, + { /* 0x39 - CSIDL_RESOURCES_LOCALIZED */ + CSIDL_Type_NonExistent, + NULL, + NULL + }, + { /* 0x3a - CSIDL_COMMON_OEM_LINKS */ + CSIDL_Type_NonExistent, + NULL, + NULL + }, + { /* 0x3b - CSIDL_CDBURN_AREA */ + CSIDL_Type_User, + CD_BurningW, + MAKEINTRESOURCEW(IDS_CDBURN_AREA) + }, + { /* 0x3c unassigned */ + CSIDL_Type_Disallowed, + NULL, + NULL + }, + { /* 0x3d - CSIDL_COMPUTERSNEARME */ + CSIDL_Type_Disallowed, /* FIXME */ + NULL, + NULL + }, + { /* 0x3e - CSIDL_PROFILES */ + CSIDL_Type_Disallowed, /* oddly, this matches WinXP */ + NULL, + NULL + } +}; + +/* Gets the value named value from the registry key + * rootKey\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders + * (or from rootKey\userPrefix\... if userPrefix is not NULL) into path, which + * is assumed to be MAX_PATH WCHARs in length. + * If it exists, expands the value and writes the expanded value to + * rootKey\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders + * Returns successful error code if the value was retrieved from the registry, + * and a failure otherwise. + */ +static HRESULT _SHGetUserShellFolderPath(HKEY rootKey, LPCWSTR userPrefix, + LPCWSTR value, LPWSTR path) +{ + HRESULT hr; + WCHAR shellFolderPath[MAX_PATH], userShellFolderPath[MAX_PATH]; + LPCWSTR pShellFolderPath, pUserShellFolderPath; + DWORD dwDisp, dwType, dwPathLen; + HKEY userShellFolderKey, shellFolderKey; + + TRACE("%p,%s,%s,%p\n",rootKey, debugstr_w(userPrefix), debugstr_w(value), + path); + + if (userPrefix) + { + wcscpy(shellFolderPath, userPrefix); + PathAddBackslashW(shellFolderPath); + wcscat(shellFolderPath, szSHFolders); + pShellFolderPath = shellFolderPath; + wcscpy(userShellFolderPath, userPrefix); + PathAddBackslashW(userShellFolderPath); + wcscat(userShellFolderPath, szSHUserFolders); + pUserShellFolderPath = userShellFolderPath; + } + else + { + pUserShellFolderPath = szSHUserFolders; + pShellFolderPath = szSHFolders; + } + + if (RegCreateKeyExW(rootKey, pShellFolderPath, 0, NULL, 0, KEY_SET_VALUE, + NULL, &shellFolderKey, &dwDisp)) + { + TRACE("Failed to create %s\n", debugstr_w(pShellFolderPath)); + return E_FAIL; + } + if (RegCreateKeyExW(rootKey, pUserShellFolderPath, 0, NULL, 0, + KEY_QUERY_VALUE, NULL, &userShellFolderKey, &dwDisp)) + { + TRACE("Failed to create %s\n", + debugstr_w(pUserShellFolderPath)); + RegCloseKey(shellFolderKey); + return E_FAIL; + } + + dwPathLen = MAX_PATH * sizeof(WCHAR); + + if (!RegQueryValueExW(userShellFolderKey, value, NULL, &dwType, + (LPBYTE)path, &dwPathLen) && (dwType == REG_EXPAND_SZ || dwType == REG_SZ)) + { + LONG ret; + + dwPathLen /= sizeof(WCHAR); + + path[dwPathLen] = '\0'; + if (dwType == REG_EXPAND_SZ && path[0] == '%') + { + WCHAR szTemp[MAX_PATH]; + + dwPathLen = ExpandEnvironmentStringsW(path, szTemp, MAX_PATH); + lstrcpynW(path, szTemp, dwPathLen); + } + + ret = RegSetValueExW(shellFolderKey, value, 0, REG_SZ, (LPBYTE)path, dwPathLen * sizeof(WCHAR)); + if (ret != ERROR_SUCCESS) + hr = HRESULT_FROM_WIN32(ret); + else + hr = S_OK; + } + else + hr = E_FAIL; + + RegCloseKey(shellFolderKey); + RegCloseKey(userShellFolderKey); + TRACE("returning 0x%08x\n", hr); + return hr; +} + +/* Gets a 'semi-expanded' default value of the CSIDL with index folder into + * pszPath, based on the entries in CSIDL_Data. By semi-expanded, I mean: + * - The entry's szDefaultPath may be either a string value or an integer + * resource identifier. In the latter case, the string value of the resource + * is written. + * - Depending on the entry's type, the path may begin with an (unexpanded) + * environment variable name. The caller is responsible for expanding + * environment strings if so desired. + * The types that are prepended with environment variables are: + * CSIDL_Type_User: %USERPROFILE% + * CSIDL_Type_AllUsers: %ALLUSERSPROFILE% + * CSIDL_Type_CurrVer: %SystemDrive% + * (Others might make sense too, but as yet are unneeded.) + */ +static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath) +{ + DWORD dwSize; + HRESULT hr; + HKEY hKey; + WCHAR resourcePath[MAX_PATH]; + LPCWSTR pDefaultPath = NULL; + + TRACE("0x%02x,%p\n", folder, pszPath); + + if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0])) + return E_INVALIDARG; + if (!pszPath) + return E_INVALIDARG; + + + if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + /* FIXME assume MAX_PATH size */ + dwSize = MAX_PATH * sizeof(WCHAR); + if (RegQueryValueExW(hKey, CSIDL_Data[folder].szValueName, NULL, NULL, (LPBYTE)pszPath, &dwSize) == ERROR_SUCCESS) + { + RegCloseKey(hKey); + return S_OK; + } + RegCloseKey(hKey); + } + + if (CSIDL_Data[folder].szDefaultPath && + IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath)) + { + if (LoadStringW(shell32_hInstance, + LOWORD(CSIDL_Data[folder].szDefaultPath), resourcePath, MAX_PATH)) + { + hr = S_OK; + pDefaultPath = resourcePath; + } + else + { + FIXME("(%d,%s), LoadString failed, missing translation?\n", folder, + debugstr_w(pszPath)); + hr = E_FAIL; + } + } + else + { + hr = S_OK; + pDefaultPath = CSIDL_Data[folder].szDefaultPath; + } + if (SUCCEEDED(hr)) + { + switch (CSIDL_Data[folder].type) + { + case CSIDL_Type_User: + wcscpy(pszPath, UserProfileW); + break; + case CSIDL_Type_AllUsers: + wcscpy(pszPath, AllUsersProfileW); + break; + case CSIDL_Type_CurrVer: + wcscpy(pszPath, SystemDriveW); + break; + default: + ; /* no corresponding env. var, do nothing */ + } + if (pDefaultPath) + { + PathAddBackslashW(pszPath); + wcscat(pszPath, pDefaultPath); + } + } + TRACE("returning 0x%08x\n", hr); + return hr; +} + +/* Gets the (unexpanded) value of the folder with index folder into pszPath. + * The folder's type is assumed to be CSIDL_Type_CurrVer. Its default value + * can be overridden in the HKLM\\szCurrentVersion key. + * If dwFlags has SHGFP_TYPE_DEFAULT set or if the value isn't overridden in + * the registry, uses _SHGetDefaultValue to get the value. + */ +static HRESULT _SHGetCurrentVersionPath(DWORD dwFlags, BYTE folder, + LPWSTR pszPath) +{ + HRESULT hr; + + TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath); + + if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0])) + return E_INVALIDARG; + if (CSIDL_Data[folder].type != CSIDL_Type_CurrVer) + return E_INVALIDARG; + if (!pszPath) + return E_INVALIDARG; + + if (dwFlags & SHGFP_TYPE_DEFAULT) + hr = _SHGetDefaultValue(folder, pszPath); + else + { + HKEY hKey; + DWORD dwDisp; + + if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, szCurrentVersion, 0, + NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp)) + hr = E_FAIL; + else + { + DWORD dwType, dwPathLen = MAX_PATH * sizeof(WCHAR); + + if (RegQueryValueExW(hKey, CSIDL_Data[folder].szValueName, NULL, + &dwType, (LPBYTE)pszPath, &dwPathLen) || + (dwType != REG_SZ && dwType != REG_EXPAND_SZ)) + { + hr = _SHGetDefaultValue(folder, pszPath); + dwType = REG_EXPAND_SZ; + RegSetValueExW(hKey, CSIDL_Data[folder].szValueName, 0, dwType, + (LPBYTE)pszPath, (wcslen(pszPath)+1)*sizeof(WCHAR)); + } + else + { + pszPath[dwPathLen / sizeof(WCHAR)] = '\0'; + hr = S_OK; + } + RegCloseKey(hKey); + } + } + TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath)); + return hr; +} + +/* Gets the user's path (unexpanded) for the CSIDL with index folder: + * If SHGFP_TYPE_DEFAULT is set, calls _SHGetDefaultValue for it. Otherwise + * calls _SHGetUserShellFolderPath for it. Where it looks depends on hToken: + * - if hToken is -1, looks in HKEY_USERS\.Default + * - otherwise looks first in HKEY_CURRENT_USER, followed by HKEY_LOCAL_MACHINE + * if HKEY_CURRENT_USER doesn't contain any entries. If both fail, finally + * calls _SHGetDefaultValue for it. + */ +static HRESULT _SHGetUserProfilePath(HANDLE hToken, DWORD dwFlags, BYTE folder, + LPWSTR pszPath) +{ + HRESULT hr; + + TRACE("%p,0x%08x,0x%02x,%p\n", hToken, dwFlags, folder, pszPath); + + if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0])) + return E_INVALIDARG; + + if (CSIDL_Data[folder].type != CSIDL_Type_User) + return E_INVALIDARG; + + if (!pszPath) + return E_INVALIDARG; + + if (dwFlags & SHGFP_TYPE_DEFAULT) + { + hr = _SHGetDefaultValue(folder, pszPath); + } + else + { + LPWSTR userPrefix; + HKEY hRootKey; + + if (hToken == (HANDLE)-1) + { + /* Get the folder of the default user */ + hRootKey = HKEY_USERS; + userPrefix = (LPWSTR)DefaultW; + } + else if(!hToken) + { + /* Get the folder of the current user */ + hRootKey = HKEY_CURRENT_USER; + userPrefix = NULL; + } + else + { + /* Get the folder of the specified user */ + DWORD InfoLength; + PTOKEN_USER UserInfo; + + hRootKey = HKEY_USERS; + + GetTokenInformation(hToken, TokenUser, NULL, 0, &InfoLength); + UserInfo = (PTOKEN_USER)HeapAlloc(GetProcessHeap(), 0, InfoLength); + + if(!GetTokenInformation(hToken, TokenUser, UserInfo, InfoLength, &InfoLength)) + { + WARN("GetTokenInformation failed for %x!\n", hToken); + HeapFree(GetProcessHeap(), 0, UserInfo); + return E_FAIL; + } + + if(!ConvertSidToStringSidW(UserInfo->User.Sid, &userPrefix)) + { + WARN("ConvertSidToStringSidW failed for %x!\n", hToken); + HeapFree(GetProcessHeap(), 0, UserInfo); + return E_FAIL; + } + + HeapFree(GetProcessHeap(), 0, UserInfo); + } + + hr = _SHGetUserShellFolderPath(hRootKey, userPrefix, CSIDL_Data[folder].szValueName, pszPath); + + /* Free the memory allocated by ConvertSidToStringSidW */ + if(hToken && hToken != (HANDLE)-1) + LocalFree(userPrefix); + + if (FAILED(hr) && hRootKey != HKEY_LOCAL_MACHINE) + hr = _SHGetUserShellFolderPath(HKEY_LOCAL_MACHINE, NULL, CSIDL_Data[folder].szValueName, pszPath); + + if (FAILED(hr)) + hr = _SHGetDefaultValue(folder, pszPath); + } + + TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath)); + return hr; +} + +/* Gets the (unexpanded) path for the CSIDL with index folder. If dwFlags has + * SHGFP_TYPE_DEFAULT set, calls _SHGetDefaultValue. Otherwise calls + * _SHGetUserShellFolderPath for it, looking only in HKEY_LOCAL_MACHINE. + * If this fails, falls back to _SHGetDefaultValue. + */ +static HRESULT _SHGetAllUsersProfilePath(DWORD dwFlags, BYTE folder, + LPWSTR pszPath) +{ + HRESULT hr; + + TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath); + + if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0])) + return E_INVALIDARG; + if (CSIDL_Data[folder].type != CSIDL_Type_AllUsers) + return E_INVALIDARG; + if (!pszPath) + return E_INVALIDARG; + + if (dwFlags & SHGFP_TYPE_DEFAULT) + hr = _SHGetDefaultValue(folder, pszPath); + else + { + hr = _SHGetUserShellFolderPath(HKEY_LOCAL_MACHINE, NULL, + CSIDL_Data[folder].szValueName, pszPath); + if (FAILED(hr)) + hr = _SHGetDefaultValue(folder, pszPath); + } + TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath)); + return hr; +} + +/************************************************************************* + * SHGetFolderPathW [SHELL32.@] + * + * Convert nFolder to path. + * + * RETURNS + * Success: S_OK + * Failure: standard HRESULT error codes. + * + * NOTES + * Most values can be overridden in either + * HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders + * or in the same location in HKLM. + * The "Shell Folders" registry key was used in NT4 and earlier systems. + * Beginning with Windows 2000, the "User Shell Folders" key is used, so + * changes made to it are made to the former key too. This synchronization is + * done on-demand: not until someone requests the value of one of these paths + * (by calling one of the SHGet functions) is the value synchronized. + * Furthermore, the HKCU paths take precedence over the HKLM paths. + */ +HRESULT WINAPI SHGetFolderPathW( + HWND hwndOwner, /* [I] owner window */ + int nFolder, /* [I] CSIDL identifying the folder */ + HANDLE hToken, /* [I] access token */ + DWORD dwFlags, /* [I] which path to return */ + LPWSTR pszPath) /* [O] converted path */ +{ + HRESULT hr = SHGetFolderPathAndSubDirW(hwndOwner, nFolder, hToken, dwFlags, NULL, pszPath); + if(HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr) + hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); + return hr; +} + +HRESULT WINAPI SHGetFolderPathAndSubDirA( + HWND hwndOwner, /* [I] owner window */ + int nFolder, /* [I] CSIDL identifying the folder */ + HANDLE hToken, /* [I] access token */ + DWORD dwFlags, /* [I] which path to return */ + LPCSTR pszSubPath, /* [I] sub directory of the specified folder */ + LPSTR pszPath) /* [O] converted path */ +{ + int length; + HRESULT hr = S_OK; + LPWSTR pszSubPathW = NULL; + LPWSTR pszPathW = NULL; + TRACE("%08x,%08x,%s\n",nFolder, dwFlags, debugstr_w(pszSubPathW)); + + if(pszPath) { + pszPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); + if(!pszPathW) { + hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); + goto cleanup; + } + } + TRACE("%08x,%08x,%s\n",nFolder, dwFlags, debugstr_w(pszSubPathW)); + + /* SHGetFolderPathAndSubDirW does not distinguish if pszSubPath isn't + * set (null), or an empty string.therefore call it without the parameter set + * if pszSubPath is an empty string + */ + if (pszSubPath && pszSubPath[0]) { + length = MultiByteToWideChar(CP_ACP, 0, pszSubPath, -1, NULL, 0); + pszSubPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, length * sizeof(WCHAR)); + if(!pszSubPathW) { + hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); + goto cleanup; + } + MultiByteToWideChar(CP_ACP, 0, pszSubPath, -1, pszSubPathW, length); + } + + hr = SHGetFolderPathAndSubDirW(hwndOwner, nFolder, hToken, dwFlags, pszSubPathW, pszPathW); + + if (SUCCEEDED(hr) && pszPath) + WideCharToMultiByte(CP_ACP, 0, pszPathW, -1, pszPath, MAX_PATH, NULL, NULL); + +cleanup: + HeapFree(GetProcessHeap(), 0, pszPathW); + HeapFree(GetProcessHeap(), 0, pszSubPathW); + return hr; +} + +HRESULT WINAPI SHGetFolderPathAndSubDirW( + HWND hwndOwner, /* [I] owner window */ + int nFolder, /* [I] CSIDL identifying the folder */ + HANDLE hToken, /* [I] access token */ + DWORD dwFlags, /* [I] which path to return */ + LPCWSTR pszSubPath,/* [I] sub directory of the specified folder */ + LPWSTR pszPath) /* [O] converted path */ +{ + HRESULT hr; + WCHAR szBuildPath[MAX_PATH], szTemp[MAX_PATH]; + DWORD folder = nFolder & CSIDL_FOLDER_MASK; //FIXME + CSIDL_Type type; + int ret; + + TRACE("%p,%p,nFolder=0x%04x,%s\n", hwndOwner,pszPath,nFolder,debugstr_w(pszSubPath)); + + /* Windows always NULL-terminates the resulting path regardless of success + * or failure, so do so first + */ + if (pszPath) + *pszPath = '\0'; + + if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0])) + return E_INVALIDARG; + if ((SHGFP_TYPE_CURRENT != dwFlags) && (SHGFP_TYPE_DEFAULT != dwFlags)) + return E_INVALIDARG; + szTemp[0] = 0; + type = CSIDL_Data[folder].type; + switch (type) + { + case CSIDL_Type_Disallowed: + hr = E_INVALIDARG; + break; + case CSIDL_Type_NonExistent: + hr = S_FALSE; + break; + case CSIDL_Type_WindowsPath: + GetWindowsDirectoryW(szTemp, MAX_PATH); + if (CSIDL_Data[folder].szDefaultPath && + !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) && + *CSIDL_Data[folder].szDefaultPath) + { + PathAddBackslashW(szTemp); + wcscat(szTemp, CSIDL_Data[folder].szDefaultPath); + } + hr = S_OK; + break; + case CSIDL_Type_SystemPath: + GetSystemDirectoryW(szTemp, MAX_PATH); + if (CSIDL_Data[folder].szDefaultPath && + !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) && + *CSIDL_Data[folder].szDefaultPath) + { + PathAddBackslashW(szTemp); + wcscat(szTemp, CSIDL_Data[folder].szDefaultPath); + } + hr = S_OK; + break; + case CSIDL_Type_CurrVer: + hr = _SHGetCurrentVersionPath(dwFlags, folder, szTemp); + break; + case CSIDL_Type_User: + hr = _SHGetUserProfilePath(hToken, dwFlags, folder, szTemp); + break; + case CSIDL_Type_AllUsers: + hr = _SHGetAllUsersProfilePath(dwFlags, folder, szTemp); + break; + default: + FIXME("bogus type %d, please fix\n", type); + hr = E_INVALIDARG; + break; + } + + /* Expand environment strings if necessary */ + if (*szTemp == '%') + { + DWORD ExpandRet = ExpandEnvironmentStringsW(szTemp, szBuildPath, MAX_PATH); + + if (ExpandRet > MAX_PATH) + hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); + else if (ExpandRet == 0) + hr = HRESULT_FROM_WIN32(GetLastError()); + else + hr = S_OK; + } + else + { + wcscpy(szBuildPath, szTemp); + } + + if (FAILED(hr)) goto end; + + if(pszSubPath) { + /* make sure the new path does not exceed th bufferlength + * rememebr to backslash and the termination */ + if(MAX_PATH < (wcslen(szBuildPath) + wcslen(pszSubPath) + 2)) { + hr = HRESULT_FROM_WIN32(ERROR_FILENAME_EXCED_RANGE); + goto end; + } + PathAppendW(szBuildPath, pszSubPath); + PathRemoveBackslashW(szBuildPath); + } + /* Copy the path if it's available before we might return */ + if (SUCCEEDED(hr) && pszPath) + wcscpy(pszPath, szBuildPath); + + /* if we don't care about existing directories we are ready */ + if(nFolder & CSIDL_FLAG_DONT_VERIFY) goto end; + + if (PathFileExistsW(szBuildPath)) goto end; + + /* not existing but we are not allowed to create it. The return value + * is verified against shell32 version 6.0. + */ + if (!(nFolder & CSIDL_FLAG_CREATE)) + { + hr = HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND); + goto end; + } + + /* create directory/directories */ + ret = SHCreateDirectoryExW(hwndOwner, szBuildPath, NULL); + if (ret && ret != ERROR_ALREADY_EXISTS) + { + ERR("Failed to create directory %s.\n", debugstr_w(szBuildPath)); + hr = E_FAIL; + goto end; + } + + TRACE("Created missing system directory %s\n", debugstr_w(szBuildPath)); +end: + TRACE("returning 0x%08x (final path is %s)\n", hr, debugstr_w(szBuildPath)); + return hr; +} + +/************************************************************************* + * SHGetFolderPathA [SHELL32.@] + * + * See SHGetFolderPathW. + */ +HRESULT WINAPI SHGetFolderPathA( + HWND hwndOwner, + int nFolder, + HANDLE hToken, + DWORD dwFlags, + LPSTR pszPath) +{ + WCHAR szTemp[MAX_PATH]; + HRESULT hr; + + TRACE("%p,%p,nFolder=0x%04x\n",hwndOwner,pszPath,nFolder); + + if (pszPath) + *pszPath = '\0'; + hr = SHGetFolderPathW(hwndOwner, nFolder, hToken, dwFlags, szTemp); + if (SUCCEEDED(hr) && pszPath) + WideCharToMultiByte(CP_ACP, 0, szTemp, -1, pszPath, MAX_PATH, NULL, + NULL); + + return hr; +} + +/* For each folder in folders, if its value has not been set in the registry, + * calls _SHGetUserProfilePath or _SHGetAllUsersProfilePath (depending on the + * folder's type) to get the unexpanded value first. + * Writes the unexpanded value to User Shell Folders, and queries it with + * SHGetFolderPathW to force the creation of the directory if it doesn't + * already exist. SHGetFolderPathW also returns the expanded value, which + * this then writes to Shell Folders. + */ +static HRESULT _SHRegisterFolders(HKEY hRootKey, HANDLE hToken, + LPCWSTR szUserShellFolderPath, LPCWSTR szShellFolderPath, const UINT folders[], + UINT foldersLen) +{ + UINT i; + WCHAR path[MAX_PATH]; + HRESULT hr = S_OK; + HKEY hUserKey = NULL, hKey = NULL; + DWORD dwDisp, dwType, dwPathLen; + LONG ret; + + TRACE("%p,%p,%s,%p,%u\n", hRootKey, hToken, + debugstr_w(szUserShellFolderPath), folders, foldersLen); + + ret = RegCreateKeyExW(hRootKey, szUserShellFolderPath, 0, NULL, 0, + KEY_ALL_ACCESS, NULL, &hUserKey, &dwDisp); + if (ret) + hr = HRESULT_FROM_WIN32(ret); + else + { + ret = RegCreateKeyExW(hRootKey, szShellFolderPath, 0, NULL, 0, + KEY_ALL_ACCESS, NULL, &hKey, &dwDisp); + if (ret) + hr = HRESULT_FROM_WIN32(ret); + } + for (i = 0; SUCCEEDED(hr) && i < foldersLen; i++) + { + dwPathLen = MAX_PATH * sizeof(WCHAR); + if (RegQueryValueExW(hUserKey, CSIDL_Data[folders[i]].szValueName, NULL, + &dwType, (LPBYTE)path, &dwPathLen) || (dwType != REG_SZ && + dwType != REG_EXPAND_SZ)) + { + *path = '\0'; + if (CSIDL_Data[folders[i]].type == CSIDL_Type_User) + _SHGetUserProfilePath(hToken, SHGFP_TYPE_DEFAULT, folders[i], + path); + else if (CSIDL_Data[folders[i]].type == CSIDL_Type_AllUsers) + _SHGetAllUsersProfilePath(SHGFP_TYPE_DEFAULT, folders[i], path); + else if (CSIDL_Data[folders[i]].type == CSIDL_Type_WindowsPath) + GetWindowsDirectoryW(path, MAX_PATH); + else + hr = E_FAIL; + if (*path) + { + ret = RegSetValueExW(hUserKey, + CSIDL_Data[folders[i]].szValueName, 0, REG_EXPAND_SZ, + (LPBYTE)path, (wcslen(path) + 1) * sizeof(WCHAR)); + if (ret) + hr = HRESULT_FROM_WIN32(ret); + else + { + hr = SHGetFolderPathW(NULL, folders[i] | CSIDL_FLAG_CREATE, + hToken, SHGFP_TYPE_DEFAULT, path); + ret = RegSetValueExW(hKey, + CSIDL_Data[folders[i]].szValueName, 0, REG_SZ, + (LPBYTE)path, (wcslen(path) + 1) * sizeof(WCHAR)); + if (ret) + hr = HRESULT_FROM_WIN32(ret); + } + } + } + } + if (hUserKey) + RegCloseKey(hUserKey); + if (hKey) + RegCloseKey(hKey); + + TRACE("returning 0x%08x\n", hr); + return hr; +} + +static HRESULT _SHRegisterUserShellFolders(BOOL bDefault) +{ + static const UINT folders[] = { + CSIDL_PROGRAMS, + CSIDL_PERSONAL, + CSIDL_FAVORITES, + CSIDL_APPDATA, + CSIDL_STARTUP, + CSIDL_RECENT, + CSIDL_SENDTO, + CSIDL_STARTMENU, + CSIDL_MYMUSIC, + CSIDL_MYVIDEO, + CSIDL_DESKTOPDIRECTORY, + CSIDL_NETHOOD, + CSIDL_TEMPLATES, + CSIDL_PRINTHOOD, + CSIDL_LOCAL_APPDATA, + CSIDL_INTERNET_CACHE, + CSIDL_COOKIES, + CSIDL_HISTORY, + CSIDL_MYPICTURES, + CSIDL_FONTS + }; + WCHAR userShellFolderPath[MAX_PATH], shellFolderPath[MAX_PATH]; + LPCWSTR pUserShellFolderPath, pShellFolderPath; + HRESULT hr = S_OK; + HKEY hRootKey; + HANDLE hToken; + + TRACE("%s\n", bDefault ? "TRUE" : "FALSE"); + if (bDefault) + { + hToken = (HANDLE)-1; + hRootKey = HKEY_USERS; + wcscpy(userShellFolderPath, DefaultW); + PathAddBackslashW(userShellFolderPath); + wcscat(userShellFolderPath, szSHUserFolders); + pUserShellFolderPath = userShellFolderPath; + wcscpy(shellFolderPath, DefaultW); + PathAddBackslashW(shellFolderPath); + wcscat(shellFolderPath, szSHFolders); + pShellFolderPath = shellFolderPath; + } + else + { + hToken = NULL; + hRootKey = HKEY_CURRENT_USER; + pUserShellFolderPath = szSHUserFolders; + pShellFolderPath = szSHFolders; + } + + hr = _SHRegisterFolders(hRootKey, hToken, pUserShellFolderPath, + pShellFolderPath, folders, sizeof(folders) / sizeof(folders[0])); + TRACE("returning 0x%08x\n", hr); + return hr; +} + +static HRESULT _SHRegisterCommonShellFolders(void) +{ + static const UINT folders[] = { + CSIDL_COMMON_STARTMENU, + CSIDL_COMMON_PROGRAMS, + CSIDL_COMMON_STARTUP, + CSIDL_COMMON_DESKTOPDIRECTORY, + CSIDL_COMMON_FAVORITES, + CSIDL_COMMON_APPDATA, + CSIDL_COMMON_TEMPLATES, + CSIDL_COMMON_DOCUMENTS, + }; + HRESULT hr; + + TRACE("\n"); + hr = _SHRegisterFolders(HKEY_LOCAL_MACHINE, NULL, szSHUserFolders, + szSHFolders, folders, sizeof(folders) / sizeof(folders[0])); + TRACE("returning 0x%08x\n", hr); + return hr; +} + +/****************************************************************************** + * _SHAppendToUnixPath [Internal] + * + * Helper function for _SHCreateSymbolicLinks. Appends pwszSubPath (or the + * corresponding resource, if IS_INTRESOURCE) to the unix base path 'szBasePath' + * and replaces backslashes with slashes. + * + * PARAMS + * szBasePath [IO] The unix base path, which will be appended to (CP_UNXICP). + * pwszSubPath [I] Sub-path or resource id (use MAKEINTRESOURCEW). + * + * RETURNS + * Success: TRUE, + * Failure: FALSE + */ +static BOOL __inline _SHAppendToUnixPath(char *szBasePath, LPCWSTR pwszSubPath) { + WCHAR wszSubPath[MAX_PATH]; + int cLen = strlen(szBasePath); + char *pBackslash; + + if (IS_INTRESOURCE(pwszSubPath)) { + if (!LoadStringW(shell32_hInstance, LOWORD(pwszSubPath), wszSubPath, MAX_PATH)) { + /* Fall back to hard coded defaults. */ + switch (LOWORD(pwszSubPath)) { + case IDS_PERSONAL: + wcscpy(wszSubPath, PersonalW); + break; + case IDS_MYMUSIC: + wcscpy(wszSubPath, My_MusicW); + break; + case IDS_MYPICTURES: + wcscpy(wszSubPath, My_PicturesW); + break; + case IDS_MYVIDEO: + wcscpy(wszSubPath, My_VideoW); + break; + default: + ERR("LoadString(%d) failed!\n", LOWORD(pwszSubPath)); + return FALSE; + } + } + } else { + wcscpy(wszSubPath, pwszSubPath); + } + + if (szBasePath[cLen-1] != '/') szBasePath[cLen++] = '/'; + + if (!WideCharToMultiByte(CP_ACP, 0, wszSubPath, -1, szBasePath + cLen, + FILENAME_MAX - cLen, NULL, NULL)) + { + return FALSE; + } + + pBackslash = szBasePath + cLen; + while ((pBackslash = strchr(pBackslash, '\\'))) *pBackslash = '/'; + + return TRUE; +} +#if 0 +/****************************************************************************** + * _SHCreateSymbolicLinks [Internal] + * + * Sets up symbol links for various shell folders to point into the users home + * directory. We do an educated guess about what the user would probably want: + * - If there is a 'My Documents' directory in $HOME, the user probably wants + * wine's 'My Documents' to point there. Furthermore, we imply that the user + * is a Windows lover and has no problem with wine creating 'My Pictures', + * 'My Music' and 'My Video' subfolders under '$HOME/My Documents', if those + * do not already exits. We put appropriate symbolic links in place for those, + * too. + * - If there is no 'My Documents' directory in $HOME, we let 'My Documents' + * point directly to $HOME. We assume the user to be a unix hacker who does not + * want wine to create anything anywhere besides the .wine directory. So, if + * there already is a 'My Music' directory in $HOME, we symlink the 'My Music' + * shell folder to it. But if not, we symlink it to $HOME directly. The same + * holds fo 'My Pictures' and 'My Video'. + * - The Desktop shell folder is symlinked to '$HOME/Desktop', if that does + * exists and left alone if not. + * ('My Music',... above in fact means LoadString(IDS_MYMUSIC)) + */ +static void _SHCreateSymbolicLinks(void) +{ + UINT aidsMyStuff[] = { IDS_MYPICTURES, IDS_MYVIDEO, IDS_MYMUSIC }, i; + int acsidlMyStuff[] = { CSIDL_MYPICTURES, CSIDL_MYVIDEO, CSIDL_MYMUSIC }; + WCHAR wszTempPath[MAX_PATH]; + char szPersonalTarget[FILENAME_MAX], *pszPersonal; + char szMyStuffTarget[FILENAME_MAX], *pszMyStuff; + char szDesktopTarget[FILENAME_MAX], *pszDesktop; + struct stat statFolder; + const char *pszHome; + HRESULT hr; + + /* Create all necessary profile sub-dirs up to 'My Documents' and get the unix path. */ + hr = SHGetFolderPathW(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL, + SHGFP_TYPE_DEFAULT, wszTempPath); + if (FAILED(hr)) return; + pszPersonal = wine_get_unix_file_name(wszTempPath); + if (!pszPersonal) return; + + pszHome = getenv("HOME"); + if (pszHome && !stat(pszHome, &statFolder) && S_ISDIR(statFolder.st_mode)) { + strcpy(szPersonalTarget, pszHome); + if (_SHAppendToUnixPath(szPersonalTarget, MAKEINTRESOURCEW(IDS_PERSONAL)) && + !stat(szPersonalTarget, &statFolder) && S_ISDIR(statFolder.st_mode)) + { + /* '$HOME/My Documents' exists. Create 'My Pictures', 'My Videos' and + * 'My Music' subfolders or fail silently if they already exist. */ + for (i = 0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) { + strcpy(szMyStuffTarget, szPersonalTarget); + if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i]))) + mkdir(szMyStuffTarget); + } + } + else + { + /* '$HOME/My Documents' doesn't exists, but '$HOME' does. */ + strcpy(szPersonalTarget, pszHome); + } + + /* Replace 'My Documents' directory with a symlink of fail silently if not empty. */ + rmdir(pszPersonal); + symlink(szPersonalTarget, pszPersonal); + } + else + { + /* '$HOME' doesn't exist. Create 'My Pictures', 'My Videos' and 'My Music' subdirs + * in '%USERPROFILE%\\My Documents' or fail silently if they already exist. */ + strcpy(szPersonalTarget, pszPersonal); + for (i = 0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) { + strcpy(szMyStuffTarget, szPersonalTarget); + if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i]))) + mkdir(szMyStuffTarget); + } + } + + /* Create symbolic links for 'My Pictures', 'My Video' and 'My Music'. */ + for (i=0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) { + /* Create the current 'My Whatever' folder and get it's unix path. */ + hr = SHGetFolderPathW(NULL, acsidlMyStuff[i]|CSIDL_FLAG_CREATE, NULL, + SHGFP_TYPE_DEFAULT, wszTempPath); + if (FAILED(hr)) continue; + pszMyStuff = wine_get_unix_file_name(wszTempPath); + if (!pszMyStuff) continue; + + strcpy(szMyStuffTarget, szPersonalTarget); + if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])) && + !stat(szMyStuffTarget, &statFolder) && S_ISDIR(statFolder.st_mode)) + { + /* If there's a 'My Whatever' directory where 'My Documents' links to, link to it. */ + rmdir(pszMyStuff); + symlink(szMyStuffTarget, pszMyStuff); + } + else + { + /* Else link to where 'My Documents' itself links to. */ + rmdir(pszMyStuff); + symlink(szPersonalTarget, pszMyStuff); + } + HeapFree(GetProcessHeap(), 0, pszMyStuff); + } + + /* Last but not least, the Desktop folder */ + if (pszHome) + strcpy(szDesktopTarget, pszHome); + else + strcpy(szDesktopTarget, pszPersonal); + HeapFree(GetProcessHeap(), 0, pszPersonal); + + if (_SHAppendToUnixPath(szDesktopTarget, DesktopW) && + !stat(szDesktopTarget, &statFolder) && S_ISDIR(statFolder.st_mode)) + { + hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY|CSIDL_FLAG_CREATE, NULL, + SHGFP_TYPE_DEFAULT, wszTempPath); + if (SUCCEEDED(hr) && (pszDesktop = wine_get_unix_file_name(wszTempPath))) + { + rmdir(pszDesktop); + symlink(szDesktopTarget, pszDesktop); + HeapFree(GetProcessHeap(), 0, pszDesktop); + } + } +} +#endif + +/* Register the default values in the registry, as some apps seem to depend + * on their presence. The set registered was taken from Windows XP. + */ +HRESULT SHELL_RegisterShellFolders(void) +{ + HRESULT hr; + + /* Set up '$HOME' targeted symlinks for 'My Documents', 'My Pictures', + * 'My Video', 'My Music' and 'Desktop' in advance, so that the + * _SHRegister*ShellFolders() functions will find everything nice and clean + * and thus will not attempt to create them in the profile directory. */ +#if 0 + _SHCreateSymbolicLinks(); +#endif + + hr = _SHRegisterUserShellFolders(TRUE); + if (SUCCEEDED(hr)) + hr = _SHRegisterUserShellFolders(FALSE); + if (SUCCEEDED(hr)) + hr = _SHRegisterCommonShellFolders(); + return hr; +} + +/************************************************************************* + * SHGetSpecialFolderPathA [SHELL32.@] + */ +BOOL WINAPI SHGetSpecialFolderPathA ( + HWND hwndOwner, + LPSTR szPath, + int nFolder, + BOOL bCreate) +{ + return (SHGetFolderPathA( + hwndOwner, + nFolder + (bCreate ? CSIDL_FLAG_CREATE : 0), + NULL, + 0, + szPath)) == S_OK ? TRUE : FALSE; +} + +/************************************************************************* + * SHGetSpecialFolderPathW + */ +BOOL WINAPI SHGetSpecialFolderPathW ( + HWND hwndOwner, + LPWSTR szPath, + int nFolder, + BOOL bCreate) +{ + return (SHGetFolderPathW( + hwndOwner, + nFolder + (bCreate ? CSIDL_FLAG_CREATE : 0), + NULL, + 0, + szPath)) == S_OK ? TRUE : FALSE; +} + +/************************************************************************* + * SHGetFolderLocation [SHELL32.@] + * + * Gets the folder locations from the registry and creates a pidl. + * + * PARAMS + * hwndOwner [I] + * nFolder [I] CSIDL_xxxxx + * hToken [I] token representing user, or NULL for current user, or -1 for + * default user + * dwReserved [I] must be zero + * ppidl [O] PIDL of a special folder + * + * RETURNS + * Success: S_OK + * Failure: Standard OLE-defined error result, S_FALSE or E_INVALIDARG + * + * NOTES + * Creates missing reg keys and directories. + * Mostly forwards to SHGetFolderPathW, but a few values of nFolder return + * virtual folders that are handled here. + */ +HRESULT WINAPI SHGetFolderLocation( + HWND hwndOwner, + int nFolder, + HANDLE hToken, + DWORD dwReserved, + LPITEMIDLIST *ppidl) +{ + HRESULT hr = E_INVALIDARG; + + TRACE("%p 0x%08x %p 0x%08x %p\n", + hwndOwner, nFolder, hToken, dwReserved, ppidl); + + if (!ppidl) + return E_INVALIDARG; + if (dwReserved) + return E_INVALIDARG; + + /* The virtual folders' locations are not user-dependent */ + *ppidl = NULL; + switch (nFolder) + { + case CSIDL_DESKTOP: + *ppidl = _ILCreateDesktop(); + break; + + case CSIDL_PERSONAL: + *ppidl = _ILCreateMyDocuments(); + break; + + case CSIDL_INTERNET: + *ppidl = _ILCreateIExplore(); + break; + + case CSIDL_CONTROLS: + *ppidl = _ILCreateControlPanel(); + break; + + case CSIDL_PRINTERS: + *ppidl = _ILCreatePrinters(); + break; + + case CSIDL_BITBUCKET: + *ppidl = _ILCreateBitBucket(); + break; + + case CSIDL_DRIVES: + *ppidl = _ILCreateMyComputer(); + break; + + case CSIDL_NETWORK: + *ppidl = _ILCreateNetwork(); + break; + + default: + { + WCHAR szPath[MAX_PATH]; + + hr = SHGetFolderPathW(hwndOwner, nFolder, hToken, + SHGFP_TYPE_CURRENT, szPath); + if (SUCCEEDED(hr)) + { + DWORD attributes=0; + + TRACE("Value=%s\n", debugstr_w(szPath)); + hr = SHILCreateFromPathW(szPath, ppidl, &attributes); + } + else if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) + { + /* unlike SHGetFolderPath, SHGetFolderLocation in shell32 + * version 6.0 returns E_FAIL for nonexistent paths + */ + hr = E_FAIL; + } + } + } + if(*ppidl) + hr = NOERROR; + + TRACE("-- (new pidl %p)\n",*ppidl); + return hr; +} + +/************************************************************************* + * SHGetSpecialFolderLocation [SHELL32.@] + * + * NOTES + * In NT5, SHGetSpecialFolderLocation needs the /Recent + * directory. + */ +HRESULT WINAPI SHGetSpecialFolderLocation( + HWND hwndOwner, + INT nFolder, + LPITEMIDLIST * ppidl) +{ + HRESULT hr = E_INVALIDARG; + + TRACE("(%p,0x%x,%p)\n", hwndOwner,nFolder,ppidl); + + if (!ppidl) + return E_INVALIDARG; + + hr = SHGetFolderLocation(hwndOwner, nFolder, NULL, 0, ppidl); + return hr; +} diff --git a/reactos/dll/win32/shell32_new/shellreg.cpp b/reactos/dll/win32/shell32_new/shellreg.cpp new file mode 100644 index 00000000000..5cd665f22c6 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shellreg.cpp @@ -0,0 +1,144 @@ +/* + * Shell Registry Access + * + * Copyright 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/************************************************************************* + * SHRegOpenKeyA [SHELL32.506] + * + */ +EXTERN_C HRESULT WINAPI SHRegOpenKeyA( + HKEY hKey, + LPSTR lpSubKey, + PHKEY phkResult) +{ + TRACE("(%p, %s, %p)\n", hKey, debugstr_a(lpSubKey), phkResult); + return RegOpenKeyA(hKey, lpSubKey, phkResult); +} + +/************************************************************************* + * SHRegOpenKeyW [SHELL32.507] NT 4.0 + * + */ +EXTERN_C HRESULT WINAPI SHRegOpenKeyW ( + HKEY hkey, + LPCWSTR lpszSubKey, + PHKEY retkey) +{ + WARN("%p %s %p\n",hkey,debugstr_w(lpszSubKey),retkey); + return RegOpenKeyW( hkey, lpszSubKey, retkey ); +} + +/************************************************************************* + * SHRegQueryValueA [SHELL32.508] + * + */ +EXTERN_C HRESULT WINAPI SHRegQueryValueA(HKEY hkey, LPSTR lpSubKey, LPSTR lpValue, LPDWORD lpcbValue) +{ + TRACE("(%p %s %p %p)\n", hkey, debugstr_a(lpSubKey), lpValue, lpcbValue); + return RegQueryValueA(hkey, lpSubKey, lpValue, (LONG*)lpcbValue); +} + +/************************************************************************* + * SHRegQueryValueExA [SHELL32.509] + * + */ +EXTERN_C HRESULT WINAPI SHRegQueryValueExA( + HKEY hkey, + LPSTR lpValueName, + LPDWORD lpReserved, + LPDWORD lpType, + LPBYTE lpData, + LPDWORD lpcbData) +{ + TRACE("%p %s %p %p %p %p\n", hkey, lpValueName, lpReserved, lpType, lpData, lpcbData); + return RegQueryValueExA (hkey, lpValueName, lpReserved, lpType, lpData, lpcbData); +} + +/************************************************************************* + * SHRegQueryValueW [SHELL32.510] NT4.0 + * + */ +EXTERN_C HRESULT WINAPI SHRegQueryValueW( + HKEY hkey, + LPWSTR lpszSubKey, + LPWSTR lpszData, + LPDWORD lpcbData ) +{ + WARN("%p %s %p %p semi-stub\n", + hkey, debugstr_w(lpszSubKey), lpszData, lpcbData); + return RegQueryValueW( hkey, lpszSubKey, lpszData, (LONG*)lpcbData ); +} + +/************************************************************************* + * SHRegQueryValueExW [SHELL32.511] NT4.0 + * + * FIXME + * if the datatype REG_EXPAND_SZ then expand the string and change + * *pdwType to REG_SZ. + */ +EXTERN_C HRESULT WINAPI SHRegQueryValueExW ( + HKEY hkey, + LPWSTR pszValue, + LPDWORD pdwReserved, + LPDWORD pdwType, + LPVOID pvData, + LPDWORD pcbData) +{ + DWORD ret; + WARN("%p %s %p %p %p %p semi-stub\n", + hkey, debugstr_w(pszValue), pdwReserved, pdwType, pvData, pcbData); + ret = RegQueryValueExW ( hkey, pszValue, pdwReserved, pdwType, (LPBYTE)pvData, pcbData); + return ret; +} + +/************************************************************************* + * SHRegDeleteKeyA [SHELL32.?] + */ +HRESULT WINAPI SHRegDeleteKeyA( + HKEY hkey, + LPCSTR pszSubKey) +{ + FIXME("hkey=%p, %s\n", hkey, debugstr_a(pszSubKey)); + return 0; +} + +/************************************************************************* + * SHRegDeleteKeyW [SHELL32.512] + */ +EXTERN_C HRESULT WINAPI SHRegDeleteKeyW( + HKEY hkey, + LPCWSTR pszSubKey) +{ + FIXME("hkey=%p, %s\n", hkey, debugstr_w(pszSubKey)); + return 0; +} + +/************************************************************************* + * SHRegCloseKey [SHELL32.505] NT 4.0 + * + */ +EXTERN_C HRESULT WINAPI SHRegCloseKey (HKEY hkey) +{ + TRACE("%p\n",hkey); + return RegCloseKey( hkey ); +} diff --git a/reactos/dll/win32/shell32_new/shellstring.cpp b/reactos/dll/win32/shell32_new/shellstring.cpp new file mode 100644 index 00000000000..073270ad149 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shellstring.cpp @@ -0,0 +1,264 @@ +/* + * Copyright 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/************************* STRRET functions ****************************/ + +BOOL WINAPI StrRetToStrNA(LPSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl) +{ + TRACE("dest=%p len=0x%x strret=%p(%s) pidl=%p\n", + dest,len,src, + (src->uType == STRRET_WSTR) ? "STRRET_WSTR" : + (src->uType == STRRET_CSTR) ? "STRRET_CSTR" : + (src->uType == STRRET_OFFSET) ? "STRRET_OFFSET" : "STRRET_???", + pidl); + + if (!dest) + return FALSE; + + switch (src->uType) + { + case STRRET_WSTR: + WideCharToMultiByte(CP_ACP, 0, src->pOleStr, -1, dest, len, NULL, NULL); + CoTaskMemFree(src->pOleStr); + break; + + case STRRET_CSTR: + lstrcpynA(dest, src->cStr, len); + break; + + case STRRET_OFFSET: + lstrcpynA(dest, ((LPCSTR)&pidl->mkid)+src->uOffset, len); + break; + + default: + FIXME("unknown type!\n"); + if (len) *dest = '\0'; + return FALSE; + } + TRACE("-- %s\n", debugstr_a(dest) ); + return TRUE; +} + +/************************************************************************/ + +BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl) +{ + TRACE("dest=%p len=0x%x strret=%p(%s) pidl=%p\n", + dest,len,src, + (src->uType == STRRET_WSTR) ? "STRRET_WSTR" : + (src->uType == STRRET_CSTR) ? "STRRET_CSTR" : + (src->uType == STRRET_OFFSET) ? "STRRET_OFFSET" : "STRRET_???", + pidl); + + if (!dest) + return FALSE; + + switch (src->uType) + { + case STRRET_WSTR: + lstrcpynW(dest, src->pOleStr, len); + CoTaskMemFree(src->pOleStr); + break; + + case STRRET_CSTR: + if (!MultiByteToWideChar( CP_ACP, 0, src->cStr, -1, dest, len ) && len) + dest[len-1] = 0; + break; + + case STRRET_OFFSET: + if (!MultiByteToWideChar( CP_ACP, 0, ((LPCSTR)&pidl->mkid)+src->uOffset, -1, dest, len ) && len) + dest[len-1] = 0; + break; + + default: + FIXME("unknown type!\n"); + if (len) *dest = '\0'; + return FALSE; + } + return TRUE; +} + + +/************************************************************************* + * StrRetToStrN [SHELL32.96] + * + * converts a STRRET to a normal string + * + * NOTES + * the pidl is for STRRET OFFSET + */ +EXTERN_C BOOL WINAPI StrRetToStrNAW(LPVOID dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl) +{ + if(SHELL_OsIsUnicode()) + return StrRetToStrNW((LPWSTR)dest, len, src, pidl); + else + return StrRetToStrNA((LPSTR)dest, len, src, pidl); +} + +/************************* OLESTR functions ****************************/ + +/************************************************************************ + * StrToOleStr [SHELL32.163] + * + */ +int WINAPI StrToOleStrA (LPWSTR lpWideCharStr, LPCSTR lpMultiByteString) +{ + TRACE("(%p, %p %s)\n", + lpWideCharStr, lpMultiByteString, debugstr_a(lpMultiByteString)); + + return MultiByteToWideChar(0, 0, lpMultiByteString, -1, lpWideCharStr, MAX_PATH); + +} +int WINAPI StrToOleStrW (LPWSTR lpWideCharStr, LPCWSTR lpWString) +{ + TRACE("(%p, %p %s)\n", + lpWideCharStr, lpWString, debugstr_w(lpWString)); + + wcscpy (lpWideCharStr, lpWString ); + return wcslen(lpWideCharStr); +} + +EXTERN_C BOOL WINAPI StrToOleStrAW (LPWSTR lpWideCharStr, LPCVOID lpString) +{ + if (SHELL_OsIsUnicode()) + return StrToOleStrW (lpWideCharStr, (LPCWSTR)lpString); + return StrToOleStrA (lpWideCharStr, (LPCSTR)lpString); +} + +/************************************************************************* + * StrToOleStrN [SHELL32.79] + * lpMulti, nMulti, nWide [IN] + * lpWide [OUT] + */ +BOOL WINAPI StrToOleStrNA (LPWSTR lpWide, INT nWide, LPCSTR lpStrA, INT nStr) +{ + TRACE("(%p, %x, %s, %x)\n", lpWide, nWide, debugstr_an(lpStrA,nStr), nStr); + return MultiByteToWideChar (0, 0, lpStrA, nStr, lpWide, nWide); +} +BOOL WINAPI StrToOleStrNW (LPWSTR lpWide, INT nWide, LPCWSTR lpStrW, INT nStr) +{ + TRACE("(%p, %x, %s, %x)\n", lpWide, nWide, debugstr_wn(lpStrW, nStr), nStr); + + if (lstrcpynW (lpWide, lpStrW, nWide)) + { return wcslen (lpWide); + } + return 0; +} + +EXTERN_C BOOL WINAPI StrToOleStrNAW (LPWSTR lpWide, INT nWide, LPCVOID lpStr, INT nStr) +{ + if (SHELL_OsIsUnicode()) + return StrToOleStrNW (lpWide, nWide, (LPCWSTR)lpStr, nStr); + return StrToOleStrNA (lpWide, nWide, (LPCSTR)lpStr, nStr); +} + +/************************************************************************* + * OleStrToStrN [SHELL32.78] + */ +BOOL WINAPI OleStrToStrNA (LPSTR lpStr, INT nStr, LPCWSTR lpOle, INT nOle) +{ + TRACE("(%p, %x, %s, %x)\n", lpStr, nStr, debugstr_wn(lpOle,nOle), nOle); + return WideCharToMultiByte (0, 0, lpOle, nOle, lpStr, nStr, NULL, NULL); +} + +BOOL WINAPI OleStrToStrNW (LPWSTR lpwStr, INT nwStr, LPCWSTR lpOle, INT nOle) +{ + TRACE("(%p, %x, %s, %x)\n", lpwStr, nwStr, debugstr_wn(lpOle,nOle), nOle); + + if (lstrcpynW ( lpwStr, lpOle, nwStr)) + { return wcslen (lpwStr); + } + return 0; +} + +EXTERN_C BOOL WINAPI OleStrToStrNAW (LPVOID lpOut, INT nOut, LPCVOID lpIn, INT nIn) +{ + if (SHELL_OsIsUnicode()) + return OleStrToStrNW ((LPWSTR)lpOut, nOut, (LPCWSTR)lpIn, nIn); + return OleStrToStrNA ((LPSTR)lpOut, nOut, (LPCWSTR)lpIn, nIn); +} + + +/************************************************************************* + * CheckEscapesA [SHELL32.@] + * + * Checks a string for special characters which are not allowed in a path + * and encloses it in quotes if that is the case. + * + * PARAMS + * string [I/O] string to check and on return eventually quoted + * len [I] length of string + * + * RETURNS + * length of actual string + * + * NOTES + * Not really sure if this function returns actually a value at all. + */ +DWORD WINAPI CheckEscapesA( + LPSTR string, /* [I/O] string to check ??*/ + DWORD len) /* [I] is 0 */ +{ + LPWSTR wString; + DWORD ret = 0; + + TRACE("(%s %d)\n", debugstr_a(string), len); + wString = (LPWSTR)LocalAlloc(LPTR, len * sizeof(WCHAR)); + if (wString) + { + MultiByteToWideChar(CP_ACP, 0, string, len, wString, len); + ret = CheckEscapesW(wString, len); + WideCharToMultiByte(CP_ACP, 0, wString, len, string, len, NULL, NULL); + LocalFree(wString); + } + return ret; +} + +static const WCHAR strEscapedChars[] = {' ','"',',',';','^',0}; + +/************************************************************************* + * CheckEscapesW [SHELL32.@] + * + * See CheckEscapesA. + */ +DWORD WINAPI CheckEscapesW( + LPWSTR string, + DWORD len) +{ + DWORD size = wcslen(string); + LPWSTR s, d; + + TRACE("(%s %d) stub\n", debugstr_w(string), len); + + if (StrPBrkW(string, strEscapedChars) && size + 2 <= len) + { + s = &string[size - 1]; + d = &string[size + 2]; + *d-- = 0; + *d-- = '"'; + for (;d > string;) + *d-- = *s--; + *d = '"'; + return size + 2; + } + return size; +} diff --git a/reactos/dll/win32/shell32_new/shfldr.h b/reactos/dll/win32/shell32_new/shfldr.h new file mode 100644 index 00000000000..886f36619b8 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr.h @@ -0,0 +1,78 @@ + +/* + * Virtual Folder + * common definitions + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _SHFLDR_H_ +#define _SHFLDR_H_ + +#define CHARS_IN_GUID 39 + +typedef struct { + int colnameid; + int pcsFlags; + int fmt; + int cxChar; +} shvheader; + +#define GET_SHGDN_FOR(dwFlags) ((DWORD)dwFlags & (DWORD)0x0000FF00) +#define GET_SHGDN_RELATION(dwFlags) ((DWORD)dwFlags & (DWORD)0x000000FF) + +BOOL SHELL32_GetCustomFolderAttribute (LPCITEMIDLIST pidl, LPCWSTR pwszHeading, LPCWSTR pwszAttribute, LPWSTR pwszValue, DWORD cchValue); + +LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut); +HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST * pidlInOut, + LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes); +HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes); +HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPWSTR szOut, + DWORD dwOutLen); + +HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot, + LPCWSTR pathRoot, LPCITEMIDLIST pidlComplete, REFIID riid, LPVOID * ppvOut); + +HRESULT SHELL32_CompareIDs (IShellFolder * iface, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); +LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path); + +static int __inline SHELL32_GUIDToStringA (REFGUID guid, LPSTR str) +{ + return sprintf(str, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + guid.Data1, guid.Data2, guid.Data3, + guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], + guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); +} + +static int __inline SHELL32_GUIDToStringW (REFGUID guid, LPWSTR str) +{ + static const WCHAR fmtW[] = + { '{','%','0','8','l','x','-','%','0','4','x','-','%','0','4','x','-', + '%','0','2','x','%','0','2','x','-', + '%','0','2','x','%','0','2','x','%','0','2','x','%','0','2','x', + '%','0','2','x','%','0','2','x','}',0 }; + return swprintf(str, fmtW, + guid.Data1, guid.Data2, guid.Data3, + guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], + guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); +} + +void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags); +BOOL SHELL_FS_HideExtension(LPWSTR pwszPath); + +#endif // _SHFLDR_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_admintools.cpp b/reactos/dll/win32/shell32_new/shfldr_admintools.cpp new file mode 100644 index 00000000000..756228e31bf --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_admintools.cpp @@ -0,0 +1,589 @@ +/* + * Virtual Admin Tools Folder + * + * Copyright 2008 Johannes Anderwald + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include "shfldr_admintools.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + + +/* +This folder should not exist. It is just a file system folder... +*/ + +/* List shortcuts of + * CSIDL_COMMON_ADMINTOOLS + * Note: CSIDL_ADMINTOOLS is ignored, tested with Window XP SP3+ + */ + +/*********************************************************************** + * AdminTools folder implementation + */ + +class CDesktopFolderEnumY : + public IEnumIDListImpl +{ +private: +public: + CDesktopFolderEnumY(); + ~CDesktopFolderEnumY(); + HRESULT WINAPI Initialize(LPWSTR szTarget, DWORD dwFlags); + +BEGIN_COM_MAP(CDesktopFolderEnumY) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +static const shvheader AdminToolsSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12} +}; + +#define COLUMN_NAME 0 +#define COLUMN_SIZE 1 +#define COLUMN_TYPE 2 +#define COLUMN_DATE 3 + +#define AdminToolsHELLVIEWCOLUMNS (4) + +CDesktopFolderEnumY::CDesktopFolderEnumY() +{ +} + +CDesktopFolderEnumY::~CDesktopFolderEnumY() +{ +} + +HRESULT WINAPI CDesktopFolderEnumY::Initialize(LPWSTR szTarget, DWORD dwFlags) +{ + TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags); + /* enumerate the elements in %windir%\desktop */ + return CreateFolderEnumList(szTarget, dwFlags); +} + +CAdminToolsFolder::CAdminToolsFolder() +{ + pclsid = NULL; + + pidlRoot = NULL; /* absolute pidl */ + szTarget = NULL; + + dwAttributes = 0; /* attributes returned by GetAttributesOf FIXME: use it */ +} + +CAdminToolsFolder::~CAdminToolsFolder() +{ + TRACE ("-- destroying IShellFolder(%p)\n", this); + if (pidlRoot) + SHFree(pidlRoot); + HeapFree(GetProcessHeap(), 0, szTarget); +} + +HRESULT WINAPI CAdminToolsFolder::FinalConstruct() +{ + szTarget = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); + if (szTarget == NULL) + return E_OUTOFMEMORY; + if (!SHGetSpecialFolderPathW(NULL, szTarget, CSIDL_COMMON_ADMINTOOLS, FALSE)) + return E_FAIL; + + pidlRoot = _ILCreateAdminTools(); /* my qualified pidl */ + if (pidlRoot == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +/************************************************************************** + * ISF_AdminTools_fnParseDisplayName + * + */ +HRESULT WINAPI CAdminToolsFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", + this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + *ppidl = 0; + if (pchEaten) + *pchEaten = 0; + + MessageBoxW(NULL, lpszDisplayName, L"ParseDisplayName", MB_OK); + + return E_NOTIMPL; +} + +/************************************************************************** + * ISF_AdminTools_fnEnumObjects + */ +HRESULT WINAPI CAdminToolsFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); + + if (ppEnumIDList == NULL) + return E_POINTER; + *ppEnumIDList = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize (szTarget, dwFlags); + if (FAILED (hResult)) + return hResult; + *ppEnumIDList = result.Detach (); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + + return S_OK; +} + +/************************************************************************** + * ISF_AdminTools_fnBindToObject + */ +HRESULT WINAPI CAdminToolsFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this, + pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + return SHELL32_BindToChild (pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** + * ISF_AdminTools_fnBindToStorage + */ +HRESULT WINAPI CAdminToolsFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", + this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** + * ISF_AdminTools_fnCompareIDs + */ +HRESULT WINAPI CAdminToolsFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (this, lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** + * ISF_AdminTools_fnCreateViewObject + */ +HRESULT WINAPI CAdminToolsFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) +{ + CComPtr pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this, + hwndOwner, shdebugstr_guid (&riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IShellView)) + { + hr = IShellView_Constructor ((IShellFolder *)this, &pShellView); + if (pShellView) + hr = pShellView->QueryInterface(riid, ppvOut); + } + TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut); + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnGetAttributesOf + */ +HRESULT WINAPI CAdminToolsFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut) +{ + HRESULT hr = S_OK; + static const DWORD dwAdminToolsAttributes = + SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", + this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if(cidl == 0) { + *rgfInOut &= dwAdminToolsAttributes; + } else { + while (cidl > 0 && *apidl) { + pdump (*apidl); + if (_ILIsAdminTools(*apidl)) { + *rgfInOut &= dwAdminToolsAttributes; + } else { + SHELL32_GetItemAttributes (this, *apidl, rgfInOut); + } + apidl++; + cidl--; + } + } + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnGetUIObjectOf + * + * PARAMETERS + * HWND hwndOwner, //[in ] Parent window for any output + * UINT cidl, //[in ] array size + * LPCITEMIDLIST* apidl, //[in ] simple pidl array + * REFIID riid, //[in ] Requested Interface + * UINT* prgfInOut, //[ ] reserved + * LPVOID* ppvObject) //[out] Resulting Interface + * + */ +HRESULT WINAPI CAdminToolsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, + REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) +{ + LPITEMIDLIST pidl; + CComPtr pObj; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", + this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IContextMenu)) + { + hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, (IShellFolder *)this, NULL, 0, NULL, (IContextMenu **)&pObj); + } + else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1)) + { + hr = IDataObject_Constructor(hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj); + } + else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) + { + hr = this->QueryInterface(IID_IDropTarget, (LPVOID *)&pObj); + } + else if ((IsEqualIID(riid, IID_IShellLinkW) || + IsEqualIID(riid, IID_IShellLinkA)) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj); + SHFree (pidl); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj.Detach(); + TRACE ("(%p)->hr=0x%08x\n", this, hr); + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnGetDisplayNameOf + * + */ +HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + HRESULT hr = S_OK; + LPWSTR pszPath, pOffset; + + TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR)); + if (!pszPath) + return E_OUTOFMEMORY; + + ZeroMemory(pszPath, (MAX_PATH +1) * sizeof(WCHAR)); + + if (_ILIsAdminTools (pidl)) + { + if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && + (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING)) + wcscpy(pszPath, szTarget); + else if (!HCR_GetClassNameW(CLSID_AdminFolderShortcut, pszPath, MAX_PATH)) + hr = E_FAIL; + } + else if (_ILIsPidlSimple(pidl)) + { + if ((GET_SHGDN_FOR(dwFlags) & SHGDN_FORPARSING) && + (GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER) && + szTarget) + { + wcscpy(pszPath, szTarget); + pOffset = PathAddBackslashW(pszPath); + if (pOffset) + { + if (!_ILSimpleGetTextW(pidl, pOffset, MAX_PATH + 1 - (pOffset - pszPath))) + hr = E_FAIL; + } + else + hr = E_FAIL; + } + else + { + if (_ILSimpleGetTextW(pidl, pszPath, MAX_PATH + 1)) + { + if (SHELL_FS_HideExtension(pszPath)) + PathRemoveExtensionW(pszPath); + } + else + hr = E_FAIL; + } + } + else if (_ILIsSpecialFolder(pidl)) + { + BOOL bSimplePidl = _ILIsPidlSimple(pidl); + + if (bSimplePidl) + { + if (!_ILSimpleGetTextW(pidl, pszPath, MAX_PATH)) + hr = E_FAIL; + } + else if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl) + { + int len = 0; + + wcscpy(pszPath, szTarget); + PathAddBackslashW(pszPath); + len = wcslen(pszPath); + + if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild(this, pidl, dwFlags | SHGDN_INFOLDER, pszPath + len, MAX_PATH + 1 - len))) + { + CoTaskMemFree(pszPath); + return E_OUTOFMEMORY; + } + + } + } + + if (SUCCEEDED(hr)) + { + strRet->uType = STRRET_WSTR; + strRet->pOleStr = pszPath; + TRACE ("-- (%p)->(%s,0x%08x)\n", this, debugstr_w(strRet->pOleStr), hr); + } + else + CoTaskMemFree(pszPath); + + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnSetNameOf + * Changes the name of a file object or subfolder, possibly changing its item + * identifier in the process. + * + * PARAMETERS + * HWND hwndOwner, //[in ] Owner window for output + * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change + * LPCOLESTR lpszName, //[in ] the items new display name + * DWORD dwFlags, //[in ] SHGNO formatting flags + * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned + */ +HRESULT WINAPI CAdminToolsFolder::SetNameOf (HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", this, hwndOwner, pidl, + debugstr_w (lpName), dwFlags, pPidlOut); + + return E_FAIL; +} + +HRESULT WINAPI CAdminToolsFolder::GetDefaultSearchGUID(GUID *pguid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CAdminToolsFolder::EnumSearches(IEnumExtraSearch ** ppenum) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CAdminToolsFolder::GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *pDisplay) +{ + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} +HRESULT WINAPI CAdminToolsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) +{ + if (!pcsFlags || iColumn >= AdminToolsHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = AdminToolsSFHeader[iColumn].pcsFlags; + return S_OK; + +} + +HRESULT WINAPI CAdminToolsFolder::GetDetailsEx (LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) +{ + FIXME ("(%p): stub\n", this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CAdminToolsFolder::GetDetailsOf (LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) +{ + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + + TRACE("(%p)->(%p %i %p): stub\n", this, pidl, iColumn, psd); + + if (iColumn >= AdminToolsHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = AdminToolsSFHeader[iColumn].fmt; + psd->cxChar = AdminToolsSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, AdminToolsSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.pOleStr); + + return hr; + } + + psd->str.uType = STRRET_CSTR; + switch (iColumn) + { + case COLUMN_NAME: + psd->str.uType = STRRET_WSTR; + hr = GetDisplayNameOf(pidl, + SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); + break; + case COLUMN_SIZE: + _ILGetFileSize (pidl, psd->str.cStr, MAX_PATH); + break; + case COLUMN_TYPE: + _ILGetFileType (pidl, psd->str.cStr, MAX_PATH); + break; + case COLUMN_DATE: + _ILGetFileDate (pidl, psd->str.cStr, MAX_PATH); + break; + } + + return hr; +} + +HRESULT WINAPI CAdminToolsFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid) +{ + FIXME ("(%p): stub\n", this); + return E_NOTIMPL; +} + +/************************************************************************ + * IPF_AdminTools_GetClassID + */ +HRESULT WINAPI CAdminToolsFolder::GetClassID(CLSID *lpClassId) +{ + TRACE ("(%p)\n", this); + + memcpy(lpClassId, &CLSID_AdminFolderShortcut, sizeof(CLSID)); + + return S_OK; +} + +/************************************************************************ + * IPF_AdminTools_Initialize + * + */ +HRESULT WINAPI CAdminToolsFolder::Initialize(LPCITEMIDLIST pidl) +{ + if (pidlRoot) + SHFree((LPVOID)pidlRoot); + + pidlRoot = ILClone(pidl); + return S_OK; +} + +/************************************************************************** + * IPF_AdminTools_fnGetCurFolder + */ +HRESULT WINAPI CAdminToolsFolder::GetCurFolder(LPITEMIDLIST *pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + *pidl = ILClone (pidlRoot); + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_admintools.h b/reactos/dll/win32/shell32_new/shfldr_admintools.h new file mode 100644 index 00000000000..98f7df361e9 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_admintools.h @@ -0,0 +1,87 @@ +/* + * Virtual Admin Tools Folder + * + * Copyright 2008 Johannes Anderwald + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _SHFLDR_ADMINTOOLS_H_ +#define _SHFLDR_ADMINTOOLS_H_ + +class CAdminToolsFolder : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder2 +{ +private: + CLSID *pclsid; + + LPITEMIDLIST pidlRoot; /* absolute pidl */ + LPWSTR szTarget; + + int dwAttributes; /* attributes returned by GetAttributesOf FIXME: use it */ +public: + CAdminToolsFolder(); + ~CAdminToolsFolder(); + HRESULT WINAPI FinalConstruct(); + + // IShellFolder + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + /* ShellFolder2 */ + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // IPersist + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // IPersistFolder + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IPersistFolder2 + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + +DECLARE_REGISTRY_RESOURCEID(IDR_ADMINFOLDERSHORTCUT) +DECLARE_NOT_AGGREGATABLE(CAdminToolsFolder) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CAdminToolsFolder) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) +END_COM_MAP() +}; + +#endif // _SHFLDR_ADMINTOOLS_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_cpanel.cpp b/reactos/dll/win32/shell32_new/shfldr_cpanel.cpp new file mode 100644 index 00000000000..5f72b859c12 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_cpanel.cpp @@ -0,0 +1,1078 @@ +/* + * Control panel folder + * + * Copyright 2003 Martin Fuchs + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* +TODO: +1. The selected items list should not be stored in CControlPanelFolder, it should + be a result returned by an internal method. +*/ + +#include +#include +#include +#include +#include +#include "shfldr_cpanel.h" +#include "shelllink.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/*********************************************************************** +* control panel implementation in shell namespace +*/ + +class CControlPanelEnum : + public IEnumIDListImpl +{ +private: +public: + CControlPanelEnum(); + ~CControlPanelEnum(); + HRESULT WINAPI Initialize(DWORD dwFlags); + BOOL SHELL_RegisterCPanelApp(LPCSTR path); + int SHELL_RegisterRegistryCPanelApps(HKEY hkey_root, LPCSTR szRepPath); + int SHELL_RegisterCPanelFolders(HKEY hkey_root, LPCSTR szRepPath); + BOOL CreateCPanelEnumList(DWORD dwFlags); + +BEGIN_COM_MAP(CControlPanelEnum) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +/*********************************************************************** +* IShellFolder [ControlPanel] implementation +*/ + +static const shvheader ControlPanelSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15},/*FIXME*/ + {IDS_SHV_COLUMN9, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 200},/*FIXME*/ +}; + +#define CONROLPANELSHELLVIEWCOLUMNS 2 + +CControlPanelEnum::CControlPanelEnum() +{ +} + +CControlPanelEnum::~CControlPanelEnum() +{ +} + +HRESULT WINAPI CControlPanelEnum::Initialize(DWORD dwFlags) +{ + if (CreateCPanelEnumList(dwFlags) == FALSE) + return E_FAIL; + return S_OK; +} + +static LPITEMIDLIST _ILCreateCPanelApplet(LPCSTR name, LPCSTR displayName, LPCSTR comment, int iconIdx) +{ + PIDLCPanelStruct *p; + LPITEMIDLIST pidl; + PIDLDATA tmp; + int size0 = (char*)&tmp.u.cpanel.szName - (char*)&tmp.u.cpanel; + int size = size0; + int l; + + tmp.type = PT_CPLAPPLET; + tmp.u.cpanel.dummy = 0; + tmp.u.cpanel.iconIdx = iconIdx; + + l = strlen(name); + size += l + 1; + + tmp.u.cpanel.offsDispName = l+1; + l = strlen(displayName); + size += l + 1; + + tmp.u.cpanel.offsComment = tmp.u.cpanel.offsDispName + 1 + l; + l = strlen(comment); + size += l + 1; + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return NULL; + + pidl->mkid.cb = size + 2; + memcpy(pidl->mkid.abID, &tmp, 2 + size0); + + p = &((PIDLDATA *)pidl->mkid.abID)->u.cpanel; + strcpy(p->szName, name); + strcpy(p->szName+tmp.u.cpanel.offsDispName, displayName); + strcpy(p->szName+tmp.u.cpanel.offsComment, comment); + + *(WORD*)((char*)pidl + (size + 2)) = 0; + + pcheck(pidl); + + return pidl; +} + +/************************************************************************** + * _ILGetCPanelPointer() + * gets a pointer to the control panel struct stored in the pidl + */ +static PIDLCPanelStruct *_ILGetCPanelPointer(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type == PT_CPLAPPLET) + return (PIDLCPanelStruct *)&(pdata->u.cpanel); + + return NULL; +} + +BOOL CControlPanelEnum::SHELL_RegisterCPanelApp(LPCSTR path) +{ + LPITEMIDLIST pidl; + CPlApplet* applet; + CPanel panel; + CPLINFO info; + unsigned i; + int iconIdx; + + char displayName[MAX_PATH]; + char comment[MAX_PATH]; + + WCHAR wpath[MAX_PATH]; + + MultiByteToWideChar(CP_ACP, 0, path, -1, wpath, MAX_PATH); + + panel.first = NULL; + applet = Control_LoadApplet(0, wpath, &panel); + + if (applet) + { + for (i = 0; i < applet->count; ++i) + { + WideCharToMultiByte(CP_ACP, 0, applet->info[i].szName, -1, displayName, MAX_PATH, 0, 0); + WideCharToMultiByte(CP_ACP, 0, applet->info[i].szInfo, -1, comment, MAX_PATH, 0, 0); + + applet->proc(0, CPL_INQUIRE, i, (LPARAM)&info); + + if (info.idIcon > 0) + iconIdx = -info.idIcon; /* negative icon index instead of icon number */ + else + iconIdx = 0; + + pidl = _ILCreateCPanelApplet(path, displayName, comment, iconIdx); + + if (pidl) + AddToEnumList(pidl); + } + Control_UnloadApplet(applet); + } + return TRUE; +} + +int CControlPanelEnum::SHELL_RegisterRegistryCPanelApps(HKEY hkey_root, LPCSTR szRepPath) +{ + char name[MAX_PATH]; + char value[MAX_PATH]; + HKEY hkey; + + int cnt = 0; + + if (RegOpenKeyA(hkey_root, szRepPath, &hkey) == ERROR_SUCCESS) + { + int idx = 0; + + for(; ; idx++) + { + DWORD nameLen = MAX_PATH; + DWORD valueLen = MAX_PATH; + + if (RegEnumValueA(hkey, idx, name, &nameLen, NULL, NULL, (LPBYTE)&value, &valueLen) != ERROR_SUCCESS) + break; + + if (SHELL_RegisterCPanelApp(value)) + ++cnt; + } + RegCloseKey(hkey); + } + + return cnt; +} + +int CControlPanelEnum::SHELL_RegisterCPanelFolders(HKEY hkey_root, LPCSTR szRepPath) +{ + char name[MAX_PATH]; + HKEY hkey; + + int cnt = 0; + + if (RegOpenKeyA(hkey_root, szRepPath, &hkey) == ERROR_SUCCESS) + { + int idx = 0; + for (; ; idx++) + { + if (RegEnumKeyA(hkey, idx, name, MAX_PATH) != ERROR_SUCCESS) + break; + + if (*name == '{') + { + LPITEMIDLIST pidl = _ILCreateGuidFromStrA(name); + + if (pidl && AddToEnumList(pidl)) + ++cnt; + } + } + + RegCloseKey(hkey); + } + + return cnt; +} + +/************************************************************************** + * CreateCPanelEnumList() + */ +BOOL CControlPanelEnum::CreateCPanelEnumList(DWORD dwFlags) +{ + CHAR szPath[MAX_PATH]; + WIN32_FIND_DATAA wfd; + HANDLE hFile; + + TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags); + + /* enumerate control panel folders */ + if (dwFlags & SHCONTF_FOLDERS) + SHELL_RegisterCPanelFolders(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ControlPanel\\NameSpace"); + + /* enumerate the control panel applets */ + if (dwFlags & SHCONTF_NONFOLDERS) + { + LPSTR p; + + GetSystemDirectoryA(szPath, MAX_PATH); + p = PathAddBackslashA(szPath); + strcpy(p, "*.cpl"); + + TRACE("-- (%p)-> enumerate SHCONTF_NONFOLDERS of %s\n", this, debugstr_a(szPath)); + hFile = FindFirstFileA(szPath, &wfd); + + if (hFile != INVALID_HANDLE_VALUE) + { + do + { + if (!(dwFlags & SHCONTF_INCLUDEHIDDEN) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)) + continue; + + if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { + strcpy(p, wfd.cFileName); + if (strcmp(wfd.cFileName, "ncpa.cpl")) + SHELL_RegisterCPanelApp(szPath); + } + } while(FindNextFileA(hFile, &wfd)); + FindClose(hFile); + } + + SHELL_RegisterRegistryCPanelApps(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cpls"); + SHELL_RegisterRegistryCPanelApps(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cpls"); + } + return TRUE; +} + +CControlPanelFolder::CControlPanelFolder() +{ + pidlRoot = NULL; /* absolute pidl */ + dwAttributes = 0; /* attributes returned by GetAttributesOf FIXME: use it */ + apidl = NULL; + cidl = 0; +} + +CControlPanelFolder::~CControlPanelFolder() +{ + TRACE("-- destroying IShellFolder(%p)\n", this); + SHFree(pidlRoot); +} + +HRESULT WINAPI CControlPanelFolder::FinalConstruct() +{ + pidlRoot = _ILCreateControlPanel(); /* my qualified pidl */ + if (pidlRoot == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +/************************************************************************** +* ISF_ControlPanel_fnParseDisplayName +*/ +HRESULT WINAPI CControlPanelFolder::ParseDisplayName(HWND hwndOwner, + LPBC pbc, + LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + WCHAR szElement[MAX_PATH]; + LPCWSTR szNext = NULL; + LPITEMIDLIST pidlTemp = NULL; + HRESULT hr = S_OK; + CLSID clsid; + + TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", + this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + if (!lpszDisplayName || !ppidl) + return E_INVALIDARG; + + *ppidl = 0; + + if (pchEaten) + *pchEaten = 0; /* strange but like the original */ + + if (lpszDisplayName[0] == ':' && lpszDisplayName[1] == ':') + { + szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH); + TRACE ("-- element: %s\n", debugstr_w (szElement)); + CLSIDFromString (szElement + 2, &clsid); + pidlTemp = _ILCreateGuid (PT_GUID, clsid); + } + else if( (pidlTemp = SHELL32_CreatePidlFromBindCtx(pbc, lpszDisplayName)) ) + { + *ppidl = pidlTemp; + return S_OK; + } + + if (SUCCEEDED(hr) && pidlTemp) + { + if (szNext && *szNext) + { + hr = SHELL32_ParseNextElement(this, hwndOwner, pbc, + &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes); + } + else + { + if (pdwAttributes && *pdwAttributes) + hr = SHELL32_GetItemAttributes(this, + pidlTemp, pdwAttributes); + } + } + + *ppidl = pidlTemp; + + TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr); + + return hr; +} + +/************************************************************************** +* ISF_ControlPanel_fnEnumObjects +*/ +HRESULT WINAPI CControlPanelFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); + + if (ppEnumIDList == NULL) + return E_POINTER; + *ppEnumIDList = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize (dwFlags); + if (FAILED (hResult)) + return hResult; + *ppEnumIDList = result.Detach (); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + + return S_OK; +} + +/************************************************************************** +* ISF_ControlPanel_fnBindToObject +*/ +HRESULT WINAPI CControlPanelFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + TRACE("(%p)->(pidl=%p,%p,%s,%p)\n", this, pidl, pbcReserved, shdebugstr_guid(&riid), ppvOut); + + return SHELL32_BindToChild(pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** +* ISF_ControlPanel_fnBindToStorage +*/ +HRESULT WINAPI CControlPanelFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + FIXME("(%p)->(pidl=%p,%p,%s,%p) stub\n", this, pidl, pbcReserved, shdebugstr_guid(&riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** +* ISF_ControlPanel_fnCompareIDs +*/ + +HRESULT WINAPI CControlPanelFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int nReturn; + + TRACE("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs(this, lParam, pidl1, pidl2); + TRACE("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** +* ISF_ControlPanel_fnCreateViewObject +*/ +HRESULT WINAPI CControlPanelFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID * ppvOut) +{ + CComPtr pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE("(%p)->(hwnd=%p,%s,%p)\n", this, hwndOwner, shdebugstr_guid(&riid), ppvOut); + + if (ppvOut) { + *ppvOut = NULL; + + if (IsEqualIID(riid, IID_IDropTarget)) { + WARN("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } else if (IsEqualIID(riid, IID_IContextMenu)) { + WARN("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } else if (IsEqualIID(riid, IID_IShellView)) { + hr = IShellView_Constructor((IShellFolder *)this, &pShellView); + if (pShellView) { + hr = pShellView->QueryInterface(riid, ppvOut); + } + } + } + TRACE("--(%p)->(interface=%p)\n", this, ppvOut); + return hr; +} + +/************************************************************************** +* ISF_ControlPanel_fnGetAttributesOf +*/ +HRESULT WINAPI CControlPanelFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST * apidl, DWORD * rgfInOut) +{ + HRESULT hr = S_OK; + + TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", + this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + while(cidl > 0 && *apidl) { + pdump(*apidl); + SHELL32_GetItemAttributes(this, *apidl, rgfInOut); + apidl++; + cidl--; + } + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE("-- result=0x%08x\n", *rgfInOut); + return hr; +} + +/************************************************************************** +* ISF_ControlPanel_fnGetUIObjectOf +* +* PARAMETERS +* HWND hwndOwner, //[in ] Parent window for any output +* UINT cidl, //[in ] array size +* LPCITEMIDLIST* apidl, //[in ] simple pidl array +* REFIID riid, //[in ] Requested Interface +* UINT* prgfInOut, //[ ] reserved +* LPVOID* ppvObject) //[out] Resulting Interface +* +*/ +HRESULT WINAPI CControlPanelFolder::GetUIObjectOf(HWND hwndOwner, + UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) +{ + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", + this, hwndOwner, cidl, apidl, shdebugstr_guid(&riid), prgfInOut, ppvOut); + + if (ppvOut) { + *ppvOut = NULL; + + if (IsEqualIID(riid, IID_IContextMenu) &&(cidl >= 1)) { + // TODO + // create a seperate item struct + // + pObj = (IContextMenu *)this; + this->apidl = apidl; + cidl = cidl; + pObj->AddRef(); + hr = S_OK; + } else if (IsEqualIID(riid, IID_IDataObject) &&(cidl >= 1)) { + hr = IDataObject_Constructor(hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj); + } else if (IsEqualIID(riid, IID_IExtractIconA) &&(cidl == 1)) { + pidl = ILCombine(pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor(pidl); + SHFree(pidl); + hr = S_OK; + } else if (IsEqualIID(riid, IID_IExtractIconW) &&(cidl == 1)) { + pidl = ILCombine(pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor(pidl); + SHFree(pidl); + hr = S_OK; + } else if ((IsEqualIID(riid, IID_IShellLinkW) || IsEqualIID(riid, IID_IShellLinkA)) + && (cidl == 1)) { + pidl = ILCombine(pidlRoot, apidl[0]); + hr = IShellLink_ConstructFromFile(NULL, riid, pidl,(LPVOID*)&pObj); + SHFree(pidl); + } else { + hr = E_NOINTERFACE; + } + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + } + TRACE("(%p)->hr=0x%08x\n", this, hr); + return hr; +} + +/************************************************************************** +* ISF_ControlPanel_fnGetDisplayNameOf +*/ +HRESULT WINAPI CControlPanelFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + CHAR szPath[MAX_PATH]; + WCHAR wszPath[MAX_PATH+1]; /* +1 for potential backslash */ + PIDLCPanelStruct* pcpanel; + + *szPath = '\0'; + + TRACE("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet); + pdump(pidl); + + if (!pidl || !strRet) + return E_INVALIDARG; + + pcpanel = _ILGetCPanelPointer(pidl); + + if (pcpanel) { + lstrcpyA(szPath, pcpanel->szName+pcpanel->offsDispName); + + if (!(dwFlags & SHGDN_FORPARSING)) + FIXME("retrieve display name from control panel app\n"); + } + /* take names of special folders only if it's only this folder */ + else if (_ILIsSpecialFolder(pidl)) { + BOOL bSimplePidl = _ILIsPidlSimple(pidl); + + if (bSimplePidl) { + _ILSimpleGetTextW(pidl, wszPath, MAX_PATH); /* append my own path */ + } else { + FIXME("special pidl\n"); + } + + if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl) { /* go deeper if needed */ + int len = 0; + + PathAddBackslashW(wszPath); + len = wcslen(wszPath); + + if (!SUCCEEDED + (SHELL32_GetDisplayNameOfChild(this, pidl, dwFlags, wszPath + len, MAX_PATH + 1 - len))) + return E_OUTOFMEMORY; + if (!WideCharToMultiByte(CP_ACP, 0, wszPath, -1, szPath, MAX_PATH, NULL, NULL)) + wszPath[0] = '\0'; + } else { + if (bSimplePidl) { + if (!WideCharToMultiByte(CP_ACP, 0, wszPath, -1, szPath, MAX_PATH, NULL, NULL)) + wszPath[0] = '\0'; + } + } + } + + strRet->uType = STRRET_CSTR; + lstrcpynA(strRet->cStr, szPath, MAX_PATH); + + TRACE("--(%p)->(%s)\n", this, szPath); + return S_OK; +} + +/************************************************************************** +* ISF_ControlPanel_fnSetNameOf +* Changes the name of a file object or subfolder, possibly changing its item +* identifier in the process. +* +* PARAMETERS +* HWND hwndOwner, //[in ] Owner window for output +* LPCITEMIDLIST pidl, //[in ] simple pidl of item to change +* LPCOLESTR lpszName, //[in ] the items new display name +* DWORD dwFlags, //[in ] SHGNO formatting flags +* LPITEMIDLIST* ppidlOut) //[out] simple pidl returned +*/ +HRESULT WINAPI CControlPanelFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /*simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + FIXME("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, hwndOwner, pidl, debugstr_w(lpName), dwFlags, pPidlOut); + return E_FAIL; +} + +HRESULT WINAPI CControlPanelFolder::GetDefaultSearchGUID(GUID *pguid) +{ + FIXME("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CControlPanelFolder::EnumSearches(IEnumExtraSearch **ppenum) +{ + FIXME("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CControlPanelFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) +{ + TRACE("(%p)\n", this); + + if (pSort) *pSort = 0; + if (pDisplay) *pDisplay = 0; + return S_OK; +} + +HRESULT WINAPI CControlPanelFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) +{ + TRACE("(%p)\n", this); + + if (!pcsFlags || iColumn >= CONROLPANELSHELLVIEWCOLUMNS) return E_INVALIDARG; + *pcsFlags = ControlPanelSFHeader[iColumn].pcsFlags; + return S_OK; +} + +HRESULT WINAPI CControlPanelFolder::GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) +{ + FIXME("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CControlPanelFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) +{ + HRESULT hr; + + TRACE("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd); + + if (!psd || iColumn >= CONROLPANELSHELLVIEWCOLUMNS) + return E_INVALIDARG; + + if (!pidl) { + psd->fmt = ControlPanelSFHeader[iColumn].fmt; + psd->cxChar = ControlPanelSFHeader[iColumn].cxChar; + psd->str.uType = STRRET_CSTR; + LoadStringA(shell32_hInstance, ControlPanelSFHeader[iColumn].colnameid, psd->str.cStr, MAX_PATH); + return S_OK; + } else { + psd->str.cStr[0] = 0x00; + psd->str.uType = STRRET_CSTR; + switch(iColumn) { + case 0: /* name */ + hr = GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); + break; + case 1: /* comment */ + _ILGetFileType(pidl, psd->str.cStr, MAX_PATH); + break; + } + hr = S_OK; + } + + return hr; +} +HRESULT WINAPI CControlPanelFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid) +{ + FIXME("(%p)\n", this); + return E_NOTIMPL; +} + +/************************************************************************ + * ICPanel_PersistFolder2_GetClassID + */ +HRESULT WINAPI CControlPanelFolder::GetClassID(CLSID *lpClassId) +{ + TRACE("(%p)\n", this); + + if (!lpClassId) + return E_POINTER; + *lpClassId = CLSID_ControlPanel; + + return S_OK; +} + +/************************************************************************ + * ICPanel_PersistFolder2_Initialize + * + * NOTES: it makes no sense to change the pidl + */ +HRESULT WINAPI CControlPanelFolder::Initialize(LPCITEMIDLIST pidl) +{ + if (pidlRoot) + SHFree((LPVOID)pidlRoot); + + pidlRoot = ILClone(pidl); + return S_OK; +} + +/************************************************************************** + * IPersistFolder2_fnGetCurFolder + */ +HRESULT WINAPI CControlPanelFolder::GetCurFolder(LPITEMIDLIST * pidl) +{ + TRACE("(%p)->(%p)\n", this, pidl); + + if (!pidl) + return E_POINTER; + *pidl = ILClone(pidlRoot); + return S_OK; +} + +HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST pidl, LPWSTR szIconFile, UINT cchMax, int* piIndex) +{ + PIDLCPanelStruct* pcpanel = _ILGetCPanelPointer(pidl); + + if (!pcpanel) + return E_INVALIDARG; + + MultiByteToWideChar(CP_ACP, 0, pcpanel->szName, -1, szIconFile, cchMax); + *piIndex = (int)pcpanel->iconIdx != -1 ? pcpanel->iconIdx : 0; + + return S_OK; +} + + +/************************************************************************** +* IShellExecuteHookW Implementation +*/ + +HRESULT +ExecuteAppletFromCLSID(LPOLESTR pOleStr) +{ + WCHAR szCmd[MAX_PATH]; + WCHAR szExpCmd[MAX_PATH]; + PROCESS_INFORMATION pi; + STARTUPINFOW si; + WCHAR szBuffer[90] = { 'C', 'L', 'S', 'I', 'D', '\\', 0 }; + DWORD dwType, dwSize; + + wcscpy(&szBuffer[6], pOleStr); + wcscat(szBuffer, L"\\shell\\open\\command"); + + dwSize = sizeof(szCmd); + if (RegGetValueW(HKEY_CLASSES_ROOT, szBuffer, NULL, RRF_RT_REG_SZ, &dwType, (PVOID)szCmd, &dwSize) != ERROR_SUCCESS) + { + ERR("RegGetValueW failed with %u\n", GetLastError()); + return E_FAIL; + } + +#if 0 + if (dwType != RRF_RT_REG_SZ && dwType != RRF_RT_REG_EXPAND_SZ) + return E_FAIL; +#endif + + if (!ExpandEnvironmentStringsW(szCmd, szExpCmd, sizeof(szExpCmd)/sizeof(WCHAR))) + return E_FAIL; + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + if (!CreateProcessW(NULL, szExpCmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + return E_FAIL; + + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return S_OK; +} + + +HRESULT WINAPI CControlPanelFolder::Execute(LPSHELLEXECUTEINFOW psei) +{ + static const WCHAR wCplopen[] = {'c','p','l','o','p','e','n','\0'}; + SHELLEXECUTEINFOW sei_tmp; + PIDLCPanelStruct* pcpanel; + WCHAR path[MAX_PATH]; + WCHAR params[MAX_PATH]; + BOOL ret; + HRESULT hr; + int l; + + TRACE("(%p)->execute(%p)\n", this, psei); + + if (!psei) + return E_INVALIDARG; + + pcpanel = _ILGetCPanelPointer(ILFindLastID((LPCITEMIDLIST)psei->lpIDList)); + + if (!pcpanel) + { + LPOLESTR pOleStr; + + IID * iid = _ILGetGUIDPointer(ILFindLastID((LPCITEMIDLIST)psei->lpIDList)); + if (!iid) + return E_INVALIDARG; + if (StringFromCLSID(*iid, &pOleStr) == S_OK) + { + + hr = ExecuteAppletFromCLSID(pOleStr); + CoTaskMemFree(pOleStr); + return hr; + } + + return E_INVALIDARG; + } + path[0] = '\"'; + /* Return value from MultiByteToWideChar includes terminating NUL, which + * compensates for the starting double quote we just put in */ + l = MultiByteToWideChar(CP_ACP, 0, pcpanel->szName, -1, path+1, MAX_PATH); + + /* pass applet name to Control_RunDLL to distinguish between applets in one .cpl file */ + path[l++] = '"'; + path[l] = '\0'; + + MultiByteToWideChar(CP_ACP, 0, pcpanel->szName+pcpanel->offsDispName, -1, params, MAX_PATH); + + memcpy(&sei_tmp, psei, sizeof(sei_tmp)); + sei_tmp.lpFile = path; + sei_tmp.lpParameters = params; + sei_tmp.fMask &= ~SEE_MASK_INVOKEIDLIST; + sei_tmp.lpVerb = wCplopen; + + ret = ShellExecuteExW(&sei_tmp); + if (ret) + return S_OK; + else + return S_FALSE; +} + +/************************************************************************** +* IShellExecuteHookA Implementation +*/ + +HRESULT WINAPI CControlPanelFolder::Execute(LPSHELLEXECUTEINFOA psei) +{ + SHELLEXECUTEINFOA sei_tmp; + PIDLCPanelStruct* pcpanel; + char path[MAX_PATH]; + BOOL ret; + + TRACE("(%p)->execute(%p)\n", this, psei); + + if (!psei) + return E_INVALIDARG; + + pcpanel = _ILGetCPanelPointer(ILFindLastID((LPCITEMIDLIST)psei->lpIDList)); + + if (!pcpanel) + return E_INVALIDARG; + + path[0] = '\"'; + lstrcpyA(path+1, pcpanel->szName); + + /* pass applet name to Control_RunDLL to distinguish between applets in one .cpl file */ + lstrcatA(path, "\" "); + lstrcatA(path, pcpanel->szName+pcpanel->offsDispName); + + memcpy(&sei_tmp, psei, sizeof(sei_tmp)); + sei_tmp.lpFile = path; + sei_tmp.fMask &= ~SEE_MASK_INVOKEIDLIST; + + ret = ShellExecuteExA(&sei_tmp); + if (ret) + return S_OK; + else + return S_FALSE; +} + +/************************************************************************** +* IContextMenu2 Implementation +*/ + +/************************************************************************** +* ICPanel_IContextMenu_QueryContextMenu() +*/ +HRESULT WINAPI CControlPanelFolder::QueryContextMenu( + HMENU hMenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + WCHAR szBuffer[30] = {0}; + ULONG Count = 1; + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", + this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringW(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_OPEN, MFT_STRING, szBuffer, MFS_DEFAULT); //FIXME identifier + Count++; + } + + if (LoadStringW(shell32_hInstance, IDS_CREATELINK, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + if (Count) + { + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_SEPARATOR, NULL, MFS_ENABLED); + } + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + + _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_CREATELINK, MFT_STRING, szBuffer, MFS_ENABLED); //FIXME identifier + Count++; + } + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + +/************************************************************************** +* ICPanel_IContextMenu_InvokeCommand() +*/ +HRESULT WINAPI CControlPanelFolder::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) +{ + SHELLEXECUTEINFOW sei; + WCHAR szPath[MAX_PATH]; + char szTarget[MAX_PATH]; + STRRET strret; + WCHAR* pszPath; + INT Length, cLength; + PIDLCPanelStruct *pcpanel; + CComPtr ppf; + CComPtr isl; + HRESULT hResult; + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",this,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_OPEN)) //FIXME + { + ZeroMemory(&sei, sizeof(sei)); + sei.cbSize = sizeof(sei); + sei.fMask = SEE_MASK_INVOKEIDLIST; + sei.lpIDList = ILCombine(pidlRoot, apidl[0]); + sei.hwnd = lpcmi->hwnd; + sei.nShow = SW_SHOWNORMAL; + sei.lpVerb = L"open"; + ShellExecuteExW(&sei); + if (sei.hInstApp == FALSE) + return E_FAIL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_CREATELINK)) //FIXME + { + if (!SHGetSpecialFolderPathW(NULL, szPath, CSIDL_DESKTOPDIRECTORY, FALSE)) + return E_FAIL; + + pszPath = PathAddBackslashW(szPath); + if (!pszPath) + return E_FAIL; + + if (GetDisplayNameOf(apidl[0], SHGDN_FORPARSING, &strret) != S_OK) + return E_FAIL; + + Length = MAX_PATH - (pszPath - szPath); + cLength = strlen(strret.cStr); + if (Length < cLength + 5) + { + FIXME("\n"); + return E_FAIL; + } + + if (MultiByteToWideChar(CP_ACP, 0, strret.cStr, cLength + 1, pszPath, Length)) + { + pszPath += cLength; + Length -= cLength; + } + + if (Length > 10) + { + wcscpy(pszPath, L" - "); + cLength = LoadStringW(shell32_hInstance, IDS_LNK_FILE, &pszPath[3], Length - 4) + 3; + if (cLength + 5 > Length) + cLength = Length - 5; + Length -= cLength; + pszPath += cLength; + } + wcscpy(pszPath, L".lnk"); + + pcpanel = _ILGetCPanelPointer(ILFindLastID(apidl[0])); + if (pcpanel) + { + strncpy(szTarget, pcpanel->szName, MAX_PATH); + } + else + { + FIXME("Couldn't retrieve pointer to cpl structure\n"); + return E_FAIL; + } + hResult = ShellLink::_CreatorClass::CreateInstance(NULL, IID_IShellLinkA, (void **)&isl); + if (SUCCEEDED(hResult)) + { + isl->SetPath(szTarget); + if (SUCCEEDED(isl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf))) + ppf->Save(szPath, TRUE); + } + return NOERROR; + } + return S_OK; +} + +/************************************************************************** + * ICPanel_IContextMenu_GetCommandString() + * + */ +HRESULT WINAPI CControlPanelFolder::GetCommandString( + UINT_PTR idCommand, + UINT uFlags, + UINT* lpReserved, + LPSTR lpszName, + UINT uMaxNameLen) +{ + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + FIXME("unknown command string\n"); + return E_FAIL; +} + +/************************************************************************** +* ICPanel_IContextMenu_HandleMenuMsg() +*/ +HRESULT WINAPI CControlPanelFolder::HandleMenuMsg( + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + TRACE("ICPanel_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",this, uMsg, wParam, lParam); + + return E_NOTIMPL; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_cpanel.h b/reactos/dll/win32/shell32_new/shfldr_cpanel.h new file mode 100644 index 00000000000..bcb1f07728f --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_cpanel.h @@ -0,0 +1,107 @@ +/* + * Control panel folder + * + * Copyright 2003 Martin Fuchs + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _SHFLDR_CPANEL_H_ +#define _SHFLDR_CPANEL_H_ + +class CControlPanelFolder : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder2, + public IShellExecuteHookA, + public IShellExecuteHookW, + public IContextMenu2 +{ +private: + /* both paths are parsible from the desktop */ + LPITEMIDLIST pidlRoot; /* absolute pidl */ + int dwAttributes; /* attributes returned by GetAttributesOf FIXME: use it */ + LPCITEMIDLIST *apidl; + UINT cidl; +public: + CControlPanelFolder(); + ~CControlPanelFolder(); + HRESULT WINAPI FinalConstruct(); + + // IShellFolder + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + /* ShellFolder2 */ + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // IPersist + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // IPersistFolder + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IPersistFolder2 + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + + // IShellExecuteHookW + virtual HRESULT WINAPI Execute(LPSHELLEXECUTEINFOW psei); + + // IShellExecuteHookA + virtual HRESULT WINAPI Execute(LPSHELLEXECUTEINFOA psei); + + // IContextMenu + virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); + virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); + virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen); + + // IContextMenu2 + virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); + +DECLARE_REGISTRY_RESOURCEID(IDR_CONTROLPANEL) +DECLARE_NOT_AGGREGATABLE(CControlPanelFolder) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CControlPanelFolder) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) + COM_INTERFACE_ENTRY_IID(IID_IShellExecuteHookA, IShellExecuteHookA) + COM_INTERFACE_ENTRY_IID(IID_IShellExecuteHookW, IShellExecuteHookW) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2) +END_COM_MAP() +}; + +#endif // _SHFLDR_CPANEL_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_desktop.cpp b/reactos/dll/win32/shell32_new/shfldr_desktop.cpp new file mode 100644 index 00000000000..fe03e9ed913 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_desktop.cpp @@ -0,0 +1,1266 @@ +/* + * Virtual Desktop Folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "shfldr_desktop.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/* +CDesktopFolder should create two file system folders internally, one representing the +user's desktop folder, and the other representing the common desktop folder. It should +also create a CRegFolder to represent the virtual items that exist only in the registry. +The CRegFolder is aggregated by the CDesktopFolder, and queries for the CLSID_IShellFolder, +CLSID_IShellFolder2, or CLSID_IShellIconOverlay interfaces prefer the CRegFolder +implementation. +The CDesktopFolderEnum class should create two enumerators, one for each of the file +system folders, and enumerate the contents of each folder. Since the CRegFolder +implementation of IShellFolder::EnumObjects enumerates the virtual items, the +CDesktopFolderEnum is only responsible for returning the physical items. +CDesktopFolderEnum is incorrect where it filters My Computer from the enumeration +if the new start menu is used. The CDesktopViewCallback is responsible for filtering +it from the view by handling the IncludeObject query to return S_FALSE. The enumerator +always shows My Computer. +*/ + +/*********************************************************************** +* Desktopfolder implementation +*/ + +class CDesktopFolder; + +class CDesktopFolderEnum : + public IEnumIDListImpl +{ +private: +// CComPtr fDesktopEnumerator; +// CComPtr fCommonDesktopEnumerator; +public: + CDesktopFolderEnum(); + ~CDesktopFolderEnum(); + HRESULT WINAPI Initialize(CDesktopFolder *desktopFolder, HWND hwndOwner, DWORD dwFlags); + +BEGIN_COM_MAP(CDesktopFolderEnum) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls); +int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll); + +static const shvheader DesktopSFHeader[] = { + {IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12}, + {IDS_SHV_COLUMN5, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 5} +}; + +#define DESKTOPSHELLVIEWCOLUMNS 5 + +CDesktopFolderEnum::CDesktopFolderEnum() +{ +} + +CDesktopFolderEnum::~CDesktopFolderEnum() +{ +} + +static const WCHAR ClassicStartMenuW[] = {'S','O','F','T','W','A','R','E','\\', + 'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\', + 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r', + '\\','H','i','d','e','D','e','s','k','t','o','p','I','c','o','n','s','\\', + 'C','l','a','s','s','i','c','S','t','a','r','t','M','e','n','u','\0' }; + +INT +IsNamespaceExtensionHidden(WCHAR *iid) +{ + DWORD Result, dwResult; + dwResult = sizeof(DWORD); + + if (RegGetValueW(HKEY_CURRENT_USER, /* FIXME use NewStartPanel when activated */ + ClassicStartMenuW, + iid, + RRF_RT_DWORD, + NULL, + &Result, + &dwResult) != ERROR_SUCCESS) + { + return -1; + } + + return Result; +} + +static +VOID +SetNamespaceExtensionVisibleStatus(const WCHAR * iid, DWORD dwStatus) +{ + HKEY hKey; + + if (RegOpenKeyExW(HKEY_CURRENT_USER, ClassicStartMenuW, 0, KEY_WRITE, &hKey) == ERROR_SUCCESS) + { + RegSetValueExW(hKey, iid, 0, REG_DWORD, (LPBYTE)&dwStatus, sizeof(DWORD)); + RegCloseKey(hKey); + } +} + +/************************************************************************** + * CreateDesktopEnumList() + */ +static const WCHAR Desktop_NameSpaceW[] = { 'S','O','F','T','W','A','R','E', + '\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\', + 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l', + 'o','r','e','r','\\','D','e','s','k','t','o','p','\\','N','a','m','e','s','p', + 'a','c','e','\0' }; + +HRESULT WINAPI CDesktopFolderEnum::Initialize(CDesktopFolder *desktopFolder, HWND hwndOwner, DWORD dwFlags) +{ + BOOL ret = TRUE; + WCHAR szPath[MAX_PATH]; + + static WCHAR MyDocumentsClassString[] = L"{450D8FBA-AD25-11D0-98A8-0800361B1103}"; + + TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags); + + /* enumerate the root folders */ + if (dwFlags & SHCONTF_FOLDERS) + { + HKEY hkey; + UINT i; + DWORD dwResult; + + /* create the pidl for This item */ + if (IsNamespaceExtensionHidden(MyDocumentsClassString) < 1) + { + ret = AddToEnumList(_ILCreateMyDocuments()); + } + ret = AddToEnumList(_ILCreateMyComputer()); + + for (i = 0; i < 2; i++) + { + if (i == 0) + dwResult = RegOpenKeyExW(HKEY_LOCAL_MACHINE, Desktop_NameSpaceW, 0, KEY_READ, &hkey); + else + dwResult = RegOpenKeyExW(HKEY_CURRENT_USER, Desktop_NameSpaceW, 0, KEY_READ, &hkey); + + if (dwResult == ERROR_SUCCESS) + { + WCHAR iid[50]; + LPITEMIDLIST pidl; + int i=0; + + while (ret) + { + DWORD size; + LONG r; + + size = sizeof (iid) / sizeof (iid[0]); + r = RegEnumKeyExW(hkey, i, iid, &size, 0, NULL, NULL, NULL); + if (ERROR_SUCCESS == r) + { + if (IsNamespaceExtensionHidden(iid) < 1) + { + pidl = _ILCreateGuidFromStrW(iid); + if (pidl != NULL) + { + if (!HasItemWithCLSID(pidl)) + { + ret = AddToEnumList(pidl); + } + else + { + SHFree(pidl); + } + } + } + } + else if (ERROR_NO_MORE_ITEMS == r) + break; + else + ret = FALSE; + i++; + } + RegCloseKey(hkey); + } + } + for (i = 0; i < 2; i++) + { + if (i == 0) + dwResult = RegOpenKeyExW(HKEY_LOCAL_MACHINE, ClassicStartMenuW, 0, KEY_READ, &hkey); + else + dwResult = RegOpenKeyExW(HKEY_CURRENT_USER, ClassicStartMenuW, 0, KEY_READ, &hkey); + + if (dwResult == ERROR_SUCCESS) + { + DWORD j = 0, dwVal, Val, dwType, dwIID; + LONG r; + WCHAR iid[50]; + + while(ret) + { + dwVal = sizeof(Val); + dwIID = sizeof(iid) / sizeof(WCHAR); + + r = RegEnumValueW(hkey, j++, iid, &dwIID, NULL, &dwType, (LPBYTE)&Val, &dwVal); + if (r == ERROR_SUCCESS) + { + if (Val == 0 && dwType == REG_DWORD) + { + LPITEMIDLIST pidl = _ILCreateGuidFromStrW(iid); + if (pidl != NULL) + { + if (!HasItemWithCLSID(pidl)) + { + AddToEnumList(pidl); + } + else + { + SHFree(pidl); + } + } + } + } + else if (ERROR_NO_MORE_ITEMS == r) + break; + else + ret = FALSE; + } + RegCloseKey(hkey); + } + + } + } + + /* enumerate the elements in %windir%\desktop */ + ret = ret && SHGetSpecialFolderPathW(0, szPath, CSIDL_DESKTOPDIRECTORY, FALSE); + ret = ret && CreateFolderEnumList(szPath, dwFlags); + + ret = ret && SHGetSpecialFolderPathW(0, szPath, CSIDL_COMMON_DESKTOPDIRECTORY, FALSE); + ret = ret && CreateFolderEnumList(szPath, dwFlags); + + return ret ? S_OK : E_FAIL; +} + +CDesktopFolder::CDesktopFolder() +{ +} + +CDesktopFolder::~CDesktopFolder() +{ +} + +HRESULT WINAPI CDesktopFolder::FinalConstruct() +{ + WCHAR szMyPath[MAX_PATH]; + + if (!SHGetSpecialFolderPathW( 0, szMyPath, CSIDL_DESKTOPDIRECTORY, TRUE )) + return E_UNEXPECTED; + + pidlRoot = _ILCreateDesktop(); /* my qualified pidl */ + sPathTarget = (LPWSTR)SHAlloc((wcslen(szMyPath) + 1) * sizeof(WCHAR)); + wcscpy(sPathTarget, szMyPath); + return S_OK; +} + +/************************************************************************** + * ISF_Desktop_fnParseDisplayName + * + * NOTES + * "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" and "" binds + * to MyComputer + */ +HRESULT WINAPI CDesktopFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, + DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes) +{ + WCHAR szElement[MAX_PATH]; + LPCWSTR szNext = NULL; + LPITEMIDLIST pidlTemp = NULL; + HRESULT hr = S_OK; + CLSID clsid; + + TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", + this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + if (!lpszDisplayName || !ppidl) + return E_INVALIDARG; + + *ppidl = 0; + + if (pchEaten) + *pchEaten = 0; /* strange but like the original */ + + if (lpszDisplayName[0] == ':' && lpszDisplayName[1] == ':') + { + szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH); + TRACE ("-- element: %s\n", debugstr_w (szElement)); + CLSIDFromString (szElement + 2, &clsid); + pidlTemp = _ILCreateGuid (PT_GUID, clsid); + } + else if (PathGetDriveNumberW (lpszDisplayName) >= 0) + { + /* it's a filesystem path with a drive. Let MyComputer/UnixDosFolder parse it */ + pidlTemp = _ILCreateMyComputer (); + szNext = lpszDisplayName; + } + else if (PathIsUNCW(lpszDisplayName)) + { + pidlTemp = _ILCreateNetwork(); + szNext = lpszDisplayName; + } + else if( (pidlTemp = SHELL32_CreatePidlFromBindCtx(pbc, lpszDisplayName)) ) + { + *ppidl = pidlTemp; + return S_OK; + } + else + { + /* it's a filesystem path on the desktop. Let a FSFolder parse it */ + + if (*lpszDisplayName) + { + WCHAR szPath[MAX_PATH]; + LPWSTR pathPtr; + + /* build a complete path to create a simple pidl */ + lstrcpynW(szPath, sPathTarget, MAX_PATH); + pathPtr = PathAddBackslashW(szPath); + if (pathPtr) + { + lstrcpynW(pathPtr, lpszDisplayName, MAX_PATH - (pathPtr - szPath)); + hr = _ILCreateFromPathW(szPath, &pidlTemp); + } + else + { + /* should never reach here, but for completeness */ + hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); + } + } + else + pidlTemp = _ILCreateMyComputer(); + + szNext = NULL; + } + + if (SUCCEEDED(hr) && pidlTemp) + { + if (szNext && *szNext) + { + hr = SHELL32_ParseNextElement(this, hwndOwner, pbc, + &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes); + } + else + { + if (pdwAttributes && *pdwAttributes) + hr = SHELL32_GetItemAttributes((IShellFolder *)this, + pidlTemp, pdwAttributes); + } + } + + *ppidl = pidlTemp; + + TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr); + + return hr; +} + +/************************************************************************** + * ISF_Desktop_fnEnumObjects + */ +HRESULT WINAPI CDesktopFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); + + if (ppEnumIDList == NULL) + return E_POINTER; + *ppEnumIDList = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize (this, hwndOwner, dwFlags); + if (FAILED (hResult)) + return hResult; + *ppEnumIDList = result.Detach (); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + + return S_OK; +} + +/************************************************************************** + * ISF_Desktop_fnBindToObject + */ +HRESULT WINAPI CDesktopFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", + this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + return SHELL32_BindToChild( pidlRoot, sPathTarget, pidl, riid, ppvOut ); +} + +/************************************************************************** + * ISF_Desktop_fnBindToStorage + */ +HRESULT WINAPI CDesktopFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", + this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** + * ISF_Desktop_fnCompareIDs + */ +HRESULT WINAPI CDesktopFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs ((IShellFolder *)this, lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** + * ISF_Desktop_fnCreateViewObject + */ +HRESULT WINAPI CDesktopFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) +{ + CComPtr pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", + this, hwndOwner, shdebugstr_guid (&riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IShellView)) + { + hr = IShellView_Constructor((IShellFolder *)this, &pShellView); + if (pShellView) + hr = pShellView->QueryInterface(riid, ppvOut); + } + TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut); + return hr; +} + +/************************************************************************** + * ISF_Desktop_fnGetAttributesOf + */ +HRESULT WINAPI CDesktopFolder::GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut) +{ + HRESULT hr = S_OK; + static const DWORD dwDesktopAttributes = + SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER; + static const DWORD dwMyComputerAttributes = + SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | + SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", + this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if(cidl == 0) { + *rgfInOut &= dwDesktopAttributes; + } else { + while (cidl > 0 && *apidl) { + pdump (*apidl); + if (_ILIsDesktop(*apidl)) { + *rgfInOut &= dwDesktopAttributes; + } else if (_ILIsMyComputer(*apidl)) { + *rgfInOut &= dwMyComputerAttributes; + } else { + SHELL32_GetItemAttributes ((IShellFolder *)this, *apidl, rgfInOut); + } + apidl++; + cidl--; + } + } + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + + return hr; +} + +/************************************************************************** + * ISF_Desktop_fnGetUIObjectOf + * + * PARAMETERS + * HWND hwndOwner, //[in ] Parent window for any output + * UINT cidl, //[in ] array size + * LPCITEMIDLIST* apidl, //[in ] simple pidl array + * REFIID riid, //[in ] Requested Interface + * UINT* prgfInOut, //[ ] reserved + * LPVOID* ppvObject) //[out] Resulting Interface + * + */ +HRESULT WINAPI CDesktopFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, + REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) +{ + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", + this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IContextMenu)) + { + hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, (IShellFolder *)this, NULL, 0, NULL, (IContextMenu **)&pObj); + } + else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1)) + { + hr = IDataObject_Constructor( hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj); + } + else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) + { + hr = this->QueryInterface (IID_IDropTarget, (LPVOID *)&pObj); + } + else if ((IsEqualIID(riid, IID_IShellLinkW) || + IsEqualIID(riid, IID_IShellLinkA)) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj); + SHFree (pidl); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + TRACE ("(%p)->hr=0x%08x\n", this, hr); + return hr; +} + +/************************************************************************** + * ISF_Desktop_fnGetDisplayNameOf + * + * NOTES + * special case: pidl = null gives desktop-name back + */ +HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + HRESULT hr = S_OK; + LPWSTR pszPath; + + TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR)); + if (!pszPath) + return E_OUTOFMEMORY; + + if (_ILIsDesktop (pidl)) + { + if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && + (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING)) + wcscpy(pszPath, sPathTarget); + else + HCR_GetClassNameW(CLSID_ShellDesktop, pszPath, MAX_PATH); + } + else if (_ILIsPidlSimple (pidl)) + { + GUID const *clsid; + + if ((clsid = _ILGetGUIDPointer (pidl))) + { + if (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING) + { + int bWantsForParsing; + + /* + * We can only get a filesystem path from a shellfolder if the + * value WantsFORPARSING in CLSID\\{...}\\shellfolder exists. + * + * Exception: The MyComputer folder doesn't have this key, + * but any other filesystem backed folder it needs it. + */ + if (IsEqualIID (*clsid, CLSID_MyComputer)) + { + bWantsForParsing = TRUE; + } + else + { + /* get the "WantsFORPARSING" flag from the registry */ + static const WCHAR clsidW[] = + { 'C','L','S','I','D','\\',0 }; + static const WCHAR shellfolderW[] = + { '\\','s','h','e','l','l','f','o','l','d','e','r',0 }; + static const WCHAR wantsForParsingW[] = + { 'W','a','n','t','s','F','o','r','P','a','r','s','i','n', + 'g',0 }; + WCHAR szRegPath[100]; + LONG r; + + wcscpy (szRegPath, clsidW); + SHELL32_GUIDToStringW (*clsid, &szRegPath[6]); + wcscat (szRegPath, shellfolderW); + r = SHGetValueW(HKEY_CLASSES_ROOT, szRegPath, + wantsForParsingW, NULL, NULL, NULL); + if (r == ERROR_SUCCESS) + bWantsForParsing = TRUE; + else + bWantsForParsing = FALSE; + } + + if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && + bWantsForParsing) + { + /* + * we need the filesystem path to the destination folder. + * Only the folder itself can know it + */ + hr = SHELL32_GetDisplayNameOfChild (this, pidl, dwFlags, + pszPath, + MAX_PATH); + } + else + { + /* parsing name like ::{...} */ + pszPath[0] = ':'; + pszPath[1] = ':'; + SHELL32_GUIDToStringW (*clsid, &pszPath[2]); + } + } + else + { + /* user friendly name */ + HCR_GetClassNameW (*clsid, pszPath, MAX_PATH); + } + } + else + { + int cLen = 0; + + /* file system folder or file rooted at the desktop */ + if ((GET_SHGDN_FOR(dwFlags) == SHGDN_FORPARSING) && + (GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER)) + { + lstrcpynW(pszPath, sPathTarget, MAX_PATH - 1); + PathAddBackslashW(pszPath); + cLen = wcslen(pszPath); + } + + _ILSimpleGetTextW(pidl, pszPath + cLen, MAX_PATH - cLen); + if (!_ILIsFolder(pidl)) + SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags); + + if (GetFileAttributes(pszPath) == INVALID_FILE_ATTRIBUTES) + { + /* file system folder or file rooted at the AllUsers desktop */ + if ((GET_SHGDN_FOR(dwFlags) == SHGDN_FORPARSING) && + (GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER)) + { + SHGetSpecialFolderPathW(0, pszPath, CSIDL_COMMON_DESKTOPDIRECTORY, FALSE); + PathAddBackslashW(pszPath); + cLen = wcslen(pszPath); + } + + _ILSimpleGetTextW(pidl, pszPath + cLen, MAX_PATH - cLen); + if (!_ILIsFolder(pidl)) + SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags); + } } + } + else + { + /* a complex pidl, let the subfolder do the work */ + hr = SHELL32_GetDisplayNameOfChild (this, pidl, dwFlags, + pszPath, MAX_PATH); + } + + if (SUCCEEDED(hr)) + { + /* Win9x always returns ANSI strings, NT always returns Unicode strings */ + if (GetVersion() & 0x80000000) + { + strRet->uType = STRRET_CSTR; + if (!WideCharToMultiByte(CP_ACP, 0, pszPath, -1, strRet->cStr, MAX_PATH, + NULL, NULL)) + strRet->cStr[0] = '\0'; + CoTaskMemFree(pszPath); + } + else + { + strRet->uType = STRRET_WSTR; + strRet->pOleStr = pszPath; + } + } + else + CoTaskMemFree(pszPath); + + TRACE ("-- (%p)->(%s,0x%08x)\n", this, + strRet->uType == STRRET_CSTR ? strRet->cStr : + debugstr_w(strRet->pOleStr), hr); + return hr; +} + +/************************************************************************** + * ISF_Desktop_fnSetNameOf + * Changes the name of a file object or subfolder, possibly changing its item + * identifier in the process. + * + * PARAMETERS + * HWND hwndOwner, //[in ] Owner window for output + * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change + * LPCOLESTR lpszName, //[in ] the items new display name + * DWORD dwFlags, //[in ] SHGNO formatting flags + * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned + */ +HRESULT WINAPI CDesktopFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut) +{ + CComPtr psf; + HRESULT hr; + WCHAR szSrc[MAX_PATH + 1], szDest[MAX_PATH + 1]; + LPWSTR ptr; + BOOL bIsFolder = _ILIsFolder (ILFindLastID (pidl)); + + TRACE ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, hwndOwner, pidl, + debugstr_w (lpName), dwFlags, pPidlOut); + + if (_ILGetGUIDPointer(pidl)) + { + if (SUCCEEDED(BindToObject(pidl, NULL, IID_IShellFolder2, (LPVOID *)&psf))) + { + hr = psf->SetNameOf(hwndOwner, pidl, lpName, dwFlags, pPidlOut); + return hr; + } + } + + /* build source path */ + lstrcpynW(szSrc, sPathTarget, MAX_PATH); + ptr = PathAddBackslashW (szSrc); + if (ptr) + _ILSimpleGetTextW (pidl, ptr, MAX_PATH + 1 - (ptr - szSrc)); + + /* build destination path */ + if (dwFlags == SHGDN_NORMAL || dwFlags & SHGDN_INFOLDER) { + lstrcpynW(szDest, sPathTarget, MAX_PATH); + ptr = PathAddBackslashW (szDest); + if (ptr) + lstrcpynW(ptr, lpName, MAX_PATH + 1 - (ptr - szDest)); + } else + lstrcpynW(szDest, lpName, MAX_PATH); + + if(!(dwFlags & SHGDN_FORPARSING) && SHELL_FS_HideExtension(szSrc)) { + WCHAR *ext = PathFindExtensionW(szSrc); + if(*ext != '\0') { + INT len = wcslen(szDest); + lstrcpynW(szDest + len, ext, MAX_PATH - len); + } + } + + if (!memcmp(szSrc, szDest, (wcslen(szDest)+1) * sizeof(WCHAR))) + { + /* src and destination is the same */ + hr = S_OK; + if (pPidlOut) + hr = _ILCreateFromPathW(szDest, pPidlOut); + + return hr; + } + + TRACE ("src=%s dest=%s\n", debugstr_w(szSrc), debugstr_w(szDest)); + if (MoveFileW (szSrc, szDest)) + { + hr = S_OK; + + if (pPidlOut) + hr = _ILCreateFromPathW(szDest, pPidlOut); + + SHChangeNotify (bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM, + SHCNF_PATHW, szSrc, szDest); + + return hr; + } + return E_FAIL; +} + +HRESULT WINAPI CDesktopFolder::GetDefaultSearchGUID(GUID *pguid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CDesktopFolder::EnumSearches(IEnumExtraSearch **ppenum) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CDesktopFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) +{ + TRACE ("(%p)\n", this); + + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} + +HRESULT WINAPI CDesktopFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) +{ + TRACE ("(%p)\n", this); + + if (!pcsFlags || iColumn >= DESKTOPSHELLVIEWCOLUMNS) + return E_INVALIDARG; + + *pcsFlags = DesktopSFHeader[iColumn].pcsFlags; + + return S_OK; +} + +HRESULT WINAPI CDesktopFolder::GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) +{ + FIXME ("(%p)\n", this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CDesktopFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) +{ + HRESULT hr = S_OK; + + TRACE ("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd); + + if (!psd || iColumn >= DESKTOPSHELLVIEWCOLUMNS) + return E_INVALIDARG; + + if (!pidl) + { + psd->fmt = DesktopSFHeader[iColumn].fmt; + psd->cxChar = DesktopSFHeader[iColumn].cxChar; + psd->str.uType = STRRET_CSTR; + LoadStringA (shell32_hInstance, DesktopSFHeader[iColumn].colnameid, + psd->str.cStr, MAX_PATH); + return S_OK; + } + + /* the data from the pidl */ + psd->str.uType = STRRET_CSTR; + switch (iColumn) + { + case 0: /* name */ + hr = GetDisplayNameOf(pidl, + SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); + break; + case 1: /* size */ + _ILGetFileSize (pidl, psd->str.cStr, MAX_PATH); + break; + case 2: /* type */ + _ILGetFileType (pidl, psd->str.cStr, MAX_PATH); + break; + case 3: /* date */ + _ILGetFileDate (pidl, psd->str.cStr, MAX_PATH); + break; + case 4: /* attributes */ + _ILGetFileAttributes (pidl, psd->str.cStr, MAX_PATH); + break; + } + + return hr; +} + +HRESULT WINAPI CDesktopFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CDesktopFolder::GetClassID(CLSID *lpClassId) +{ + TRACE ("(%p)\n", this); + + if (!lpClassId) + return E_POINTER; + + *lpClassId = CLSID_ShellDesktop; + + return S_OK; +} + +HRESULT WINAPI CDesktopFolder::Initialize(LPCITEMIDLIST pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + return E_NOTIMPL; +} + +HRESULT WINAPI CDesktopFolder::GetCurFolder(LPITEMIDLIST * pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + if (!pidl) return E_POINTER; + *pidl = ILClone (pidlRoot); + return S_OK; +} + +HRESULT WINAPI CDesktopFolder::GetUniqueName(LPWSTR pwszName, UINT uLen) +{ + CComPtr penum; + HRESULT hr; + WCHAR wszText[MAX_PATH]; + WCHAR wszNewFolder[25]; + const WCHAR wszFormat[] = {'%','s',' ','%','d',0 }; + + LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, sizeof(wszNewFolder)/sizeof(WCHAR)); + + TRACE ("(%p)(%p %u)\n", this, pwszName, uLen); + + if (uLen < sizeof(wszNewFolder)/sizeof(WCHAR) + 3) + return E_POINTER; + + lstrcpynW (pwszName, wszNewFolder, uLen); + + hr = EnumObjects(0, + SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penum); + if (penum) { + LPITEMIDLIST pidl; + DWORD dwFetched; + int i = 1; + +next: + penum->Reset (); + while (S_OK == penum->Next(1, &pidl, &dwFetched) && + dwFetched) { + _ILSimpleGetTextW (pidl, wszText, MAX_PATH); + if (0 == lstrcmpiW (wszText, pwszName)) { + _snwprintf (pwszName, uLen, wszFormat, wszNewFolder, i++); + if (i > 99) { + hr = E_FAIL; + break; + } + goto next; + } + } + + } + return hr; +} + +HRESULT WINAPI CDesktopFolder::AddFolder(HWND hwnd, LPCWSTR pwszName, LPITEMIDLIST *ppidlOut) +{ + WCHAR wszNewDir[MAX_PATH]; + DWORD bRes; + HRESULT hres = E_FAIL; + + TRACE ("(%p)(%s %p)\n", this, debugstr_w(pwszName), ppidlOut); + + wszNewDir[0] = 0; + if (sPathTarget) + lstrcpynW(wszNewDir, sPathTarget, MAX_PATH); + PathAppendW(wszNewDir, pwszName); + bRes = CreateDirectoryW (wszNewDir, NULL); + if (bRes) + { + SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHW, wszNewDir, NULL); + hres = S_OK; + if (ppidlOut) + hres = _ILCreateFromPathW(wszNewDir, ppidlOut); + } + + return hres; +} + +HRESULT WINAPI CDesktopFolder::DeleteItems(UINT cidl, LPCITEMIDLIST *apidl) +{ + UINT i; + SHFILEOPSTRUCTW op; + WCHAR wszPath[MAX_PATH]; + WCHAR wszCaption[50]; + WCHAR *wszPathsList; + HRESULT ret; + WCHAR *wszCurrentPath; + UINT bRestoreWithDeskCpl = FALSE; + int res; + + TRACE ("(%p)(%u %p)\n", this, cidl, apidl); + if (cidl==0) return S_OK; + + for(i = 0; i < cidl; i++) + { + if (_ILIsMyComputer(apidl[i])) + bRestoreWithDeskCpl++; + else if (_ILIsNetHood(apidl[i])) + bRestoreWithDeskCpl++; + else if (_ILIsMyDocuments(apidl[i])) + bRestoreWithDeskCpl++; + } + + if (bRestoreWithDeskCpl) + { + /* FIXME use FormatMessage + * use a similar message resource as in windows + */ + LoadStringW(shell32_hInstance, IDS_DELETEMULTIPLE_TEXT, wszPath, sizeof(wszPath)/sizeof(WCHAR)); + wszPath[(sizeof(wszPath)/sizeof(WCHAR))-1] = 0; + + LoadStringW(shell32_hInstance, IDS_DELETEITEM_CAPTION, wszCaption, sizeof(wszCaption)/sizeof(WCHAR)); + wszCaption[(sizeof(wszCaption)/sizeof(WCHAR))-1] = 0; + + res = SHELL_ConfirmMsgBox(GetActiveWindow(), wszPath, wszCaption, NULL, cidl > 1); + if (res == IDD_YESTOALL || res == IDYES) + { + for(i = 0; i < cidl; i++) + { + if (_ILIsMyComputer(apidl[i])) + SetNamespaceExtensionVisibleStatus(L"{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 0x1); + else if (_ILIsNetHood(apidl[i])) + SetNamespaceExtensionVisibleStatus(L"{208D2C60-3AEA-1069-A2D7-08002B30309D}", 0x1); + else if (_ILIsMyDocuments(apidl[i])) + SetNamespaceExtensionVisibleStatus(L"{450D8FBA-AD25-11D0-98A8-0800361B1103}", 0x1); + } + } + } + if (sPathTarget) + lstrcpynW(wszPath, sPathTarget, MAX_PATH); + else + wszPath[0] = '\0'; + + PathAddBackslashW(wszPath); + wszPathsList = build_paths_list(wszPath, cidl, apidl); + + ZeroMemory(&op, sizeof(op)); + op.hwnd = GetActiveWindow(); + op.wFunc = FO_DELETE; + op.pFrom = wszPathsList; + op.fFlags = FOF_ALLOWUNDO; + if (SHFileOperationW(&op)) + { + WARN("SHFileOperation failed\n"); + ret = E_FAIL; + } + else + ret = S_OK; + + /* we currently need to manually send the notifies */ + wszCurrentPath = wszPathsList; + for (i = 0; i < cidl; i++) + { + LONG wEventId; + + if (_ILIsFolder(apidl[i])) + wEventId = SHCNE_RMDIR; + else if (_ILIsValue(apidl[i])) + wEventId = SHCNE_DELETE; + else + continue; + + /* check if file exists */ + if (GetFileAttributesW(wszCurrentPath) == INVALID_FILE_ATTRIBUTES) + { + LPITEMIDLIST pidl = ILCombine(pidlRoot, apidl[i]); + SHChangeNotify(wEventId, SHCNF_IDLIST, pidl, NULL); + SHFree(pidl); + } + + wszCurrentPath += wcslen(wszCurrentPath)+1; + } + HeapFree(GetProcessHeap(), 0, wszPathsList); + return ret; +} + +HRESULT WINAPI CDesktopFolder::CopyItems(IShellFolder *pSFFrom, UINT cidl, LPCITEMIDLIST *apidl) +{ + CComPtr ppf2; + WCHAR szSrcPath[MAX_PATH]; + WCHAR szTargetPath[MAX_PATH]; + SHFILEOPSTRUCTW op; + LPITEMIDLIST pidl; + LPWSTR pszSrc, pszTarget, pszSrcList, pszTargetList, pszFileName; + int res, length; + STRRET strRet; + + TRACE ("(%p)->(%p,%u,%p)\n", this, pSFFrom, cidl, apidl); + + pSFFrom->QueryInterface(IID_IPersistFolder2, (LPVOID *)&ppf2); + if (ppf2) + { + if (FAILED(ppf2->GetCurFolder(&pidl))) + return E_FAIL; + + if (FAILED(pSFFrom->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strRet))) + { + SHFree (pidl); + return E_FAIL; + } + + if (FAILED(StrRetToBufW(&strRet, pidl, szSrcPath, MAX_PATH))) + { + SHFree (pidl); + return E_FAIL; + } + SHFree (pidl); + + pszSrc = PathAddBackslashW (szSrcPath); + + wcscpy(szTargetPath, sPathTarget); + pszTarget = PathAddBackslashW (szTargetPath); + + pszSrcList = build_paths_list(szSrcPath, cidl, apidl); + pszTargetList = build_paths_list(szTargetPath, cidl, apidl); + + if (!pszSrcList || !pszTargetList) + { + if (pszSrcList) + HeapFree(GetProcessHeap(), 0, pszSrcList); + + if (pszTargetList) + HeapFree(GetProcessHeap(), 0, pszTargetList); + + SHFree (pidl); + return E_OUTOFMEMORY; + } + ZeroMemory(&op, sizeof(op)); + if (!pszSrcList[0]) + { + /* remove trailing backslash */ + pszSrc--; + pszSrc[0] = L'\0'; + op.pFrom = szSrcPath; + } + else + { + op.pFrom = pszSrcList; + } + + if (!pszTargetList[0]) + { + /* remove trailing backslash */ + if (pszTarget - szTargetPath > 3) + { + pszTarget--; + pszTarget[0] = L'\0'; + } + else + { + pszTarget[1] = L'\0'; + } + + op.pTo = szTargetPath; + } + else + { + op.pTo = pszTargetList; + } + op.hwnd = GetActiveWindow(); + op.wFunc = FO_COPY; + op.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMMKDIR; + + res = SHFileOperationW(&op); + + if (res == DE_SAMEFILE) + { + length = wcslen(szTargetPath); + + + pszFileName = wcsrchr(pszSrcList, '\\'); + pszFileName++; + + if (LoadStringW(shell32_hInstance, IDS_COPY_OF, pszTarget, MAX_PATH - length)) + { + wcscat(szTargetPath, L" "); + } + + wcscat(szTargetPath, pszFileName); + op.pTo = szTargetPath; + + res = SHFileOperationW(&op); + } + + + HeapFree(GetProcessHeap(), 0, pszSrcList); + HeapFree(GetProcessHeap(), 0, pszTargetList); + + if (res) + return E_FAIL; + else + return S_OK; + } + return E_FAIL; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_desktop.h b/reactos/dll/win32/shell32_new/shfldr_desktop.h new file mode 100644 index 00000000000..ab20136ffb7 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_desktop.h @@ -0,0 +1,96 @@ +/* + * Virtual Desktop Folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _CDESKTOPFOLDER_H_ +#define _CDESKTOPFOLDER_H_ + +class CDesktopFolder : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder2, + public ISFHelper +{ +private: + /* both paths are parsible from the desktop */ + LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */ + LPITEMIDLIST pidlRoot; /* absolute pidl */ + +// CComPtr fDesktopFolder; +// CComPtr fCommonDesktopFolder; +public: + CDesktopFolder(); + ~CDesktopFolder(); + HRESULT WINAPI FinalConstruct(); + + // *** IShellFolder methods *** + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + // *** ShellFolder2 methods *** + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // *** IPersist methods *** + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // *** IPersistFolder methods *** + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // *** IPersistFolder2 methods *** + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + + // *** ISFHelper methods *** + virtual HRESULT WINAPI GetUniqueName(LPWSTR pwszName, UINT uLen); + virtual HRESULT WINAPI AddFolder(HWND hwnd, LPCWSTR pwszName, LPITEMIDLIST *ppidlOut); + virtual HRESULT WINAPI DeleteItems(UINT cidl, LPCITEMIDLIST *apidl); + virtual HRESULT WINAPI CopyItems(IShellFolder *pSFFrom, UINT cidl, LPCITEMIDLIST *apidl); + +DECLARE_REGISTRY_RESOURCEID(IDR_SHELLDESKTOP) +DECLARE_NOT_AGGREGATABLE(CDesktopFolder) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CDesktopFolder) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) + COM_INTERFACE_ENTRY_IID(IID_ISFHelper, ISFHelper) +END_COM_MAP() +}; + +#endif // _CDESKTOPFOLDER_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_fonts.cpp b/reactos/dll/win32/shell32_new/shfldr_fonts.cpp new file mode 100644 index 00000000000..3d88bdad834 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_fonts.cpp @@ -0,0 +1,788 @@ +/* + * Fonts folder + * + * Copyright 2008 Johannes Anderwald + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "shfldr_fonts.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/* +This folder should not exist. It is just a file system folder... The \windows\fonts +directory contains a hidden desktop.ini with a UIHandler entry that specifies a class +that lives in fontext.dll. The UI handler creates a custom view for the folder, which +is what we normally see. However, the folder is a perfectly normal CFSFolder. +*/ + +/*********************************************************************** +* IShellFolder implementation +*/ + +class CDesktopFolderEnumZ : + public IEnumIDListImpl +{ +private: +public: + CDesktopFolderEnumZ(); + ~CDesktopFolderEnumZ(); + HRESULT WINAPI Initialize(DWORD dwFlags); + BOOL CreateFontsEnumList(DWORD dwFlags); + +BEGIN_COM_MAP(CDesktopFolderEnumZ) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +static shvheader FontsSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_FONTTYPE , SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN12, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15} +}; + +#define COLUMN_NAME 0 +#define COLUMN_TYPE 1 +#define COLUMN_SIZE 2 +#define COLUMN_FILENAME 3 + +#define FontsSHELLVIEWCOLUMNS (4) + +CDesktopFolderEnumZ::CDesktopFolderEnumZ() +{ +} + +CDesktopFolderEnumZ::~CDesktopFolderEnumZ() +{ +} + +HRESULT WINAPI CDesktopFolderEnumZ::Initialize(DWORD dwFlags) +{ + if (CreateFontsEnumList(dwFlags) == FALSE) + return E_FAIL; + return S_OK; +} + +static LPITEMIDLIST _ILCreateFontItem(LPWSTR pszFont, LPWSTR pszFile) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLFontStruct * p; + int size0 = (char*)&tmp.u.cfont.szName-(char*)&tmp.u.cfont; + int size = size0; + + tmp.type = 0x00; + tmp.u.cfont.dummy = 0xFF; + tmp.u.cfont.offsFile = wcslen(pszFont) + 1; + + size += (tmp.u.cfont.offsFile + wcslen(pszFile) + 1) * sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.cfont; + wcscpy(p->szName, pszFont); + wcscpy(p->szName + tmp.u.cfont.offsFile, pszFile); + + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +static PIDLFontStruct * _ILGetFontStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLFontStruct*)&(pdata->u.cfont); + + return NULL; +} + +/************************************************************************** + * CreateFontsEnumListss() + */ +BOOL CDesktopFolderEnumZ::CreateFontsEnumList(DWORD dwFlags) +{ + WCHAR szPath[MAX_PATH]; + WCHAR szName[LF_FACESIZE+20]; + WCHAR szFile[MAX_PATH]; + LPWSTR pszPath; + UINT Length; + LONG ret; + DWORD dwType, dwName, dwFile, dwIndex; + LPITEMIDLIST pidl; + HKEY hKey; + + if (dwFlags & SHCONTF_NONFOLDERS) + { + if (!SHGetSpecialFolderPathW(NULL, szPath, CSIDL_FONTS, FALSE)) + return FALSE; + + pszPath = PathAddBackslashW(szPath); + if (!pszPath) + return FALSE; + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", 0, KEY_READ, &hKey)!= ERROR_SUCCESS) + return FALSE; + + Length = pszPath - szPath; + dwIndex = 0; + do + { + dwName = sizeof(szName)/sizeof(WCHAR); + dwFile = sizeof(szFile)/sizeof(WCHAR); + ret = RegEnumValueW(hKey, dwIndex++, szName, &dwName, NULL, &dwType, (LPBYTE)szFile, &dwFile); + if (ret == ERROR_SUCCESS) + { + szFile[(sizeof(szFile)/sizeof(WCHAR))-1] = L'\0'; + if (dwType == REG_SZ && wcslen(szFile) + Length + 1< (sizeof(szPath)/sizeof(WCHAR))) + { + wcscpy(&szPath[Length], szFile); + pidl = _ILCreateFontItem(szName, szPath); + TRACE("pidl %p name %s path %s\n", pidl, debugstr_w(szName), debugstr_w(szPath)); + if (pidl) + { + if (!AddToEnumList(pidl)) + SHFree(pidl); + } + } + } + }while(ret != ERROR_NO_MORE_ITEMS); + RegCloseKey(hKey); + + } + return TRUE; +} + +CFontsFolder::CFontsFolder() +{ +} + +CFontsFolder::~CFontsFolder() +{ + TRACE("-- destroying IShellFolder(%p)\n", this); + SHFree(pidlRoot); +} + +HRESULT WINAPI CFontsFolder::FinalConstruct() +{ + pidlRoot = _ILCreateFont(); /* my qualified pidl */ + if (pidlRoot == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +/************************************************************************** +* ISF_Fonts_fnParseDisplayName +*/ +HRESULT WINAPI CFontsFolder::ParseDisplayName(HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + HRESULT hr = E_UNEXPECTED; + + TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", this, + hwndOwner, pbcReserved, lpszDisplayName, debugstr_w (lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + *ppidl = 0; + if (pchEaten) + *pchEaten = 0; /* strange but like the original */ + + TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr); + + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnEnumObjects +*/ +HRESULT WINAPI CFontsFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); + + if (ppEnumIDList == NULL) + return E_POINTER; + *ppEnumIDList = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize (dwFlags); + if (FAILED (hResult)) + return hResult; + *ppEnumIDList = result.Detach (); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + + return S_OK; +} + +/************************************************************************** +* ISF_Fonts_fnBindToObject +*/ +HRESULT WINAPI CFontsFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this, + pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + return SHELL32_BindToChild (pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** +* ISF_Fonts_fnBindToStorage +*/ +HRESULT WINAPI CFontsFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", this, + pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** +* ISF_Fonts_fnCompareIDs +*/ + +HRESULT WINAPI CFontsFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (this, lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** +* ISF_Fonts_fnCreateViewObject +*/ +HRESULT WINAPI CFontsFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) +{ + CComPtr pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this, + hwndOwner, shdebugstr_guid (&riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IShellView)) + { + hr = IShellView_Constructor ((IShellFolder *)this, &pShellView); + if (pShellView) + hr = pShellView->QueryInterface(riid, ppvOut); + } + TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut); + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnGetAttributesOf +*/ +HRESULT WINAPI CFontsFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut) +{ + HRESULT hr = S_OK; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", this, + cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if (cidl == 0) + { + CComPtr psfParent; + LPCITEMIDLIST rpidl = NULL; + + hr = SHBindToParent(pidlRoot, IID_IShellFolder, (LPVOID *)&psfParent, (LPCITEMIDLIST *)&rpidl); + if (SUCCEEDED(hr)) + SHELL32_GetItemAttributes (psfParent, rpidl, rgfInOut); + } + else + { + while (cidl > 0 && *apidl) + { + pdump (*apidl); + SHELL32_GetItemAttributes (this, *apidl, rgfInOut); + apidl++; + cidl--; + } + } + + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnGetUIObjectOf +* +* PARAMETERS +* hwndOwner [in] Parent window for any output +* cidl [in] array size +* apidl [in] simple pidl array +* riid [in] Requested Interface +* prgfInOut [ ] reserved +* ppvObject [out] Resulting Interface +* +*/ +HRESULT WINAPI CFontsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, + UINT * prgfInOut, LPVOID * ppvOut) +{ + LPITEMIDLIST pidl; + CComPtr pObj; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", this, + hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IContextMenu) && (cidl >= 1)) + { + pObj = (IContextMenu *)this; + this->apidl = apidl[0]; + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1)) + { + hr = IDataObject_Constructor (hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj); + } + else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) + { + hr = this->QueryInterface(IID_IDropTarget, (LPVOID *) & pObj); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj.Detach(); + TRACE ("(%p)->hr=0x%08x\n", this, hr); + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnGetDisplayNameOf +* +*/ +HRESULT WINAPI CFontsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + PIDLFontStruct * pfont; + + TRACE("ISF_Fonts_fnGetDisplayNameOf (%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + pfont = _ILGetFontStruct(pidl); + if (!pfont) + return E_INVALIDARG; + + strRet->pOleStr = (LPWSTR)CoTaskMemAlloc((wcslen(pfont->szName)+1) * sizeof(WCHAR)); + if (!strRet->pOleStr) + return E_OUTOFMEMORY; + + wcscpy(strRet->pOleStr, pfont->szName); + strRet->uType = STRRET_WSTR; + + return S_OK; +} + +/************************************************************************** +* ISF_Fonts_fnSetNameOf +* Changes the name of a file object or subfolder, possibly changing its item +* identifier in the process. +* +* PARAMETERS +* hwndOwner [in] Owner window for output +* pidl [in] simple pidl of item to change +* lpszName [in] the items new display name +* dwFlags [in] SHGNO formatting flags +* ppidlOut [out] simple pidl returned +*/ +HRESULT WINAPI CFontsFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /*simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, + hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut); + return E_FAIL; +} + +HRESULT WINAPI CFontsFolder::GetDefaultSearchGUID(GUID *pguid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CFontsFolder::EnumSearches(IEnumExtraSearch **ppenum) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CFontsFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) +{ + TRACE ("(%p)\n", this); + + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} + +HRESULT WINAPI CFontsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) +{ + TRACE ("(%p)\n", this); + + if (!pcsFlags || iColumn >= FontsSHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = FontsSFHeader[iColumn].pcsFlags; + return S_OK; +} + +HRESULT WINAPI CFontsFolder::GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CFontsFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) +{ + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + PIDLFontStruct * pfont; + HANDLE hFile; + LARGE_INTEGER FileSize; + SHFILEINFOW fi; + + TRACE("(%p, %p, %d, %p)\n", this, pidl, iColumn, psd); + + if (iColumn >= FontsSHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = FontsSFHeader[iColumn].fmt; + psd->cxChar = FontsSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, FontsSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.pOleStr); + + return hr; + } + + if (iColumn == COLUMN_NAME) + { + psd->str.uType = STRRET_WSTR; + return GetDisplayNameOf(pidl, SHGDN_NORMAL, &psd->str); + } + + psd->str.uType = STRRET_CSTR; + psd->str.cStr[0] = '\0'; + + switch(iColumn) + { + case COLUMN_TYPE: + pfont = _ILGetFontStruct(pidl); + if (pfont) + { + if (SHGetFileInfoW(pfont->szName + pfont->offsFile, 0, &fi, sizeof(fi), SHGFI_TYPENAME)) + { + psd->str.pOleStr = (LPWSTR)CoTaskMemAlloc((wcslen(fi.szTypeName)+1) * sizeof(WCHAR)); + if (!psd->str.pOleStr) + return E_OUTOFMEMORY; + wcscpy(psd->str.pOleStr, fi.szTypeName); + psd->str.uType = STRRET_WSTR; + return S_OK; + } + } + break; + case COLUMN_SIZE: + pfont = _ILGetFontStruct(pidl); + if (pfont) + { + hFile = CreateFileW(pfont->szName + pfont->offsFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile != INVALID_HANDLE_VALUE) + { + if (GetFileSizeEx(hFile, &FileSize)) + { + if (StrFormatByteSizeW(FileSize.QuadPart, buffer, sizeof(buffer)/sizeof(WCHAR))) + { + psd->str.pOleStr = (LPWSTR)CoTaskMemAlloc(wcslen(buffer) + 1); + if (!psd->str.pOleStr) + return E_OUTOFMEMORY; + wcscpy(psd->str.pOleStr, buffer); + psd->str.uType = STRRET_WSTR; + CloseHandle(hFile); + return S_OK; + } + } + CloseHandle(hFile); + } + } + break; + case COLUMN_FILENAME: + pfont = _ILGetFontStruct(pidl); + if (pfont) + { + psd->str.pOleStr = (LPWSTR)CoTaskMemAlloc((wcslen(pfont->szName + pfont->offsFile) + 1) * sizeof(WCHAR)); + if (psd->str.pOleStr) + { + psd->str.uType = STRRET_WSTR; + wcscpy(psd->str.pOleStr, pfont->szName + pfont->offsFile); + return S_OK; + } + else + return E_OUTOFMEMORY; + } + break; + } + + return E_FAIL; +} + +HRESULT WINAPI CFontsFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid) +{ + FIXME ("(%p)\n", this); + + return E_NOTIMPL; +} + +/************************************************************************ + * INPFldr_PersistFolder2_GetClassID + */ +HRESULT WINAPI CFontsFolder::GetClassID(CLSID *lpClassId) +{ + TRACE ("(%p)\n", this); + + if (!lpClassId) + return E_POINTER; + + *lpClassId = CLSID_FontsFolderShortcut; + + return S_OK; +} + +/************************************************************************ + * INPFldr_PersistFolder2_Initialize + * + * NOTES: it makes no sense to change the pidl + */ +HRESULT WINAPI CFontsFolder::Initialize(LPCITEMIDLIST pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + return E_NOTIMPL; +} + +/************************************************************************** + * IPersistFolder2_fnGetCurFolder + */ +HRESULT WINAPI CFontsFolder::GetCurFolder (LPITEMIDLIST *pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + if (!pidl) + return E_POINTER; + + *pidl = ILClone (pidlRoot); + + return S_OK; +} + +/************************************************************************** +* IContextMenu2 Implementation +*/ + +/************************************************************************** +* ISF_Fonts_IContextMenu_QueryContextMenu() +*/ +HRESULT WINAPI CFontsFolder::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) +{ + WCHAR szBuffer[30] = {0}; + ULONG Count = 1; + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", + this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringW(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + Count++; + } + + if (LoadStringW(shell32_hInstance, IDS_PRINT_VERB, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringW(shell32_hInstance, IDS_COPY, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringW(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringW(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + } + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + +/************************************************************************** +* ISF_Fonts_IContextMenu_InvokeCommand() +*/ +HRESULT WINAPI CFontsFolder::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) +{ + SHELLEXECUTEINFOW sei; + PIDLFontStruct * pfont; + SHFILEOPSTRUCTW op; + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",this,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + if (lpcmi->lpVerb == MAKEINTRESOURCEA(1) || lpcmi->lpVerb == MAKEINTRESOURCEA(2) || lpcmi->lpVerb == MAKEINTRESOURCEA(7)) + { + ZeroMemory(&sei, sizeof(sei)); + sei.cbSize = sizeof(sei); + sei.hwnd = lpcmi->hwnd; + sei.nShow = SW_SHOWNORMAL; + if (lpcmi->lpVerb == MAKEINTRESOURCEA(1)) + sei.lpVerb = L"open"; + else if (lpcmi->lpVerb == MAKEINTRESOURCEA(2)) + sei.lpVerb = L"print"; + else if (lpcmi->lpVerb == MAKEINTRESOURCEA(7)) + sei.lpVerb = L"properties"; + + pfont = _ILGetFontStruct(apidl); + sei.lpFile = pfont->szName + pfont->offsFile; + + if (ShellExecuteExW(&sei) == FALSE) + return E_FAIL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCEA(4)) + { + FIXME("implement font copying\n"); + return E_NOTIMPL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCEA(6)) + { + ZeroMemory(&op, sizeof(op)); + op.hwnd = lpcmi->hwnd; + op.wFunc = FO_DELETE; + op.fFlags = FOF_ALLOWUNDO; + pfont = _ILGetFontStruct(apidl); + op.pFrom = pfont->szName + pfont->offsFile; + SHFileOperationW(&op); + } + + return S_OK; +} + +/************************************************************************** + * ISF_Fonts_IContextMenu_GetCommandString() + * + */ +HRESULT WINAPI CFontsFolder::GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) +{ + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + return E_FAIL; +} + +/************************************************************************** +* ISF_Fonts_IContextMenu_HandleMenuMsg() +*/ +HRESULT WINAPI CFontsFolder::HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + TRACE("ISF_Fonts_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",this, uMsg, wParam, lParam); + + return E_NOTIMPL; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_fonts.h b/reactos/dll/win32/shell32_new/shfldr_fonts.h new file mode 100644 index 00000000000..bce7bc3940a --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_fonts.h @@ -0,0 +1,95 @@ +/* + * Fonts folder + * + * Copyright 2008 Johannes Anderwald + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _SHFLDR_FONTS_H_ +#define _SHFLDR_FONTS_H_ + +class CFontsFolder : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder2, + public IContextMenu2 +{ +private: + /* both paths are parsible from the desktop */ + LPITEMIDLIST pidlRoot; /* absolute pidl */ + LPCITEMIDLIST apidl; /* currently focused font item */ +public: + CFontsFolder(); + ~CFontsFolder(); + HRESULT WINAPI FinalConstruct(); + + // IShellFolder + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + /* ShellFolder2 */ + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // IPersist + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // IPersistFolder + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IPersistFolder2 + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + + // IContextMenu + virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); + virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); + virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen); + + // IContextMenu2 + virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); + +DECLARE_REGISTRY_RESOURCEID(IDR_FONTSFOLDERSHORTCUT) +DECLARE_NOT_AGGREGATABLE(CFontsFolder) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CFontsFolder) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2) +END_COM_MAP() +}; + +#endif // _SHFLDR_FONTS_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_fs.cpp b/reactos/dll/win32/shell32_new/shfldr_fs.cpp new file mode 100644 index 00000000000..df1d3cc48d9 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_fs.cpp @@ -0,0 +1,1324 @@ + +/* + * file system folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "shfldr_fs.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/* +CFileSysEnum should do an initial FindFirstFile and do a FindNextFile as each file is +returned by Next. When the enumerator is created, it can do numerous additional operations +including formatting a drive, reconnecting a network share drive, and requesting a disk +be inserted in a removable drive. +*/ + +/*********************************************************************** +* IShellFolder implementation +*/ + +class CFileSysEnum : + public IEnumIDListImpl +{ +private: +public: + CFileSysEnum(); + ~CFileSysEnum(); + HRESULT WINAPI Initialize(LPWSTR sPathTarget, DWORD dwFlags); + +BEGIN_COM_MAP(CFileSysEnum) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +CFileSysEnum::CFileSysEnum() +{ +} + +CFileSysEnum::~CFileSysEnum() +{ +} + +HRESULT WINAPI CFileSysEnum::Initialize(LPWSTR sPathTarget, DWORD dwFlags) +{ + return CreateFolderEnumList(sPathTarget, dwFlags); +} + +/************************************************************************** +* registers clipboardformat once +*/ +void CFSFolder::SF_RegisterClipFmt() +{ + TRACE ("(%p)\n", this); + + if (!cfShellIDList) { + cfShellIDList = RegisterClipboardFormatW(CFSTR_SHELLIDLIST); + } +} + +CFSFolder::CFSFolder() +{ + pclsid = (CLSID *)&CLSID_ShellFSFolder; + sPathTarget = NULL; + pidlRoot = NULL; + cfShellIDList = 0; + fAcceptFmt = FALSE; +} + +CFSFolder::~CFSFolder() +{ + TRACE ("-- destroying IShellFolder(%p)\n", this); + + SHFree (pidlRoot); + SHFree (sPathTarget); +} + + +static const shvheader GenericSFHeader[] = { + {IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12}, + {IDS_SHV_COLUMN5, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 5} +}; + +#define GENERICSHELLVIEWCOLUMNS 5 + +/************************************************************************** + * SHELL32_CreatePidlFromBindCtx [internal] + * + * If the caller bound File System Bind Data, assume it is the + * find data for the path. + * This allows binding of paths that don't exist. + */ +LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path) +{ + static WCHAR szfsbc[] = { + 'F','i','l','e',' ','S','y','s','t','e','m',' ', + 'B','i','n','d',' ','D','a','t','a',0 }; + IFileSystemBindData *fsbd = NULL; + LPITEMIDLIST pidl = NULL; + IUnknown *param = NULL; + WIN32_FIND_DATAW wfd; + HRESULT r; + + TRACE("%p %s\n", pbc, debugstr_w(path)); + + if (!pbc) + return NULL; + + /* see if the caller bound File System Bind Data */ + r = pbc->GetObjectParam((LPOLESTR) szfsbc, ¶m ); + if (FAILED(r)) + return NULL; + + r = param->QueryInterface(IID_IFileSystemBindData, + (LPVOID*) &fsbd ); + if (SUCCEEDED(r)) + { + r = fsbd->GetFindData(&wfd ); + if (SUCCEEDED(r)) + { + lstrcpynW( &wfd.cFileName[0], path, MAX_PATH ); + pidl = _ILCreateFromFindDataW( &wfd ); + } + fsbd->Release(); + } + + return pidl; +} + +/************************************************************************** +* IShellFolder_ParseDisplayName {SHELL32} +* +* Parse a display name. +* +* PARAMS +* hwndOwner [in] Parent window for any message's +* pbc [in] optional FileSystemBindData context +* lpszDisplayName [in] Unicode displayname. +* pchEaten [out] (unicode) characters processed +* ppidl [out] complex pidl to item +* pdwAttributes [out] items attributes +* +* NOTES +* Every folder tries to parse only its own (the leftmost) pidl and creates a +* subfolder to evaluate the remaining parts. +* Now we can parse into namespaces implemented by shell extensions +* +* Behaviour on win98: lpszDisplayName=NULL -> crash +* lpszDisplayName="" -> returns mycoputer-pidl +* +* FIXME +* pdwAttributes is not set +* pchEaten is not set like in windows +*/ +HRESULT WINAPI CFSFolder::ParseDisplayName(HWND hwndOwner, + LPBC pbc, + LPOLESTR lpszDisplayName, + DWORD *pchEaten, LPITEMIDLIST *ppidl, + DWORD *pdwAttributes) +{ + HRESULT hr = E_INVALIDARG; + LPCWSTR szNext = NULL; + WCHAR szElement[MAX_PATH]; + WCHAR szPath[MAX_PATH]; + LPITEMIDLIST pidlTemp = NULL; + DWORD len; + + TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", + this, hwndOwner, pbc, lpszDisplayName, debugstr_w (lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + if (!lpszDisplayName || !ppidl) + return E_INVALIDARG; + + if (pchEaten) + *pchEaten = 0; /* strange but like the original */ + + pidlTemp = SHELL32_CreatePidlFromBindCtx(pbc, lpszDisplayName); + if (!pidlTemp && *lpszDisplayName) + { + /* get the next element */ + szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH); + + /* build the full pathname to the element */ + lstrcpynW(szPath, sPathTarget, MAX_PATH - 1); + PathAddBackslashW(szPath); + len = wcslen(szPath); + lstrcpynW(szPath + len, szElement, MAX_PATH - len); + + /* get the pidl */ + hr = _ILCreateFromPathW(szPath, &pidlTemp); + + if (SUCCEEDED(hr)) { + if (szNext && *szNext) { + /* try to analyse the next element */ + hr = SHELL32_ParseNextElement (this, hwndOwner, pbc, + &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes); + } else { + /* it's the last element */ + if (pdwAttributes && *pdwAttributes) { + hr = SHELL32_GetItemAttributes (this, + pidlTemp, pdwAttributes); + } + } + } + } + + if (SUCCEEDED(hr)) + *ppidl = pidlTemp; + else + *ppidl = NULL; + + TRACE ("(%p)->(-- pidl=%p ret=0x%08x)\n", this, ppidl ? *ppidl : 0, hr); + + return hr; +} + +/************************************************************************** +* IShellFolder_fnEnumObjects +* PARAMETERS +* HWND hwndOwner, //[in ] Parent Window +* DWORD grfFlags, //[in ] SHCONTF enumeration mask +* LPENUMIDLIST* ppenumIDList //[out] IEnumIDList interface +*/ +HRESULT WINAPI CFSFolder::EnumObjects (HWND hwndOwner, + DWORD dwFlags, LPENUMIDLIST * ppEnumIDList) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); + + if (ppEnumIDList == NULL) + return E_POINTER; + *ppEnumIDList = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize (sPathTarget, dwFlags); + if (FAILED (hResult)) + return hResult; + *ppEnumIDList = result.Detach (); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + + return S_OK; +} + +/************************************************************************** +* IShellFolder_fnBindToObject +* PARAMETERS +* LPCITEMIDLIST pidl, //[in ] relative pidl to open +* LPBC pbc, //[in ] optional FileSystemBindData context +* REFIID riid, //[in ] Initial Interface +* LPVOID* ppvObject //[out] Interface* +*/ +HRESULT WINAPI CFSFolder::BindToObject(LPCITEMIDLIST pidl, + LPBC pbc, REFIID riid, LPVOID * ppvOut) +{ + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this, pidl, pbc, + shdebugstr_guid (&riid), ppvOut); + + return SHELL32_BindToChild (pidlRoot, sPathTarget, pidl, riid, + ppvOut); +} + +/************************************************************************** +* IShellFolder_fnBindToStorage +* PARAMETERS +* LPCITEMIDLIST pidl, //[in ] complex pidl to store +* LPBC pbc, //[in ] reserved +* REFIID riid, //[in ] Initial storage interface +* LPVOID* ppvObject //[out] Interface* returned +*/ +HRESULT WINAPI CFSFolder::BindToStorage(LPCITEMIDLIST pidl, + LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", this, pidl, pbcReserved, + shdebugstr_guid (&riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** +* IShellFolder_fnCompareIDs +*/ + +HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam, + LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (this, lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** +* IShellFolder_fnCreateViewObject +*/ +HRESULT WINAPI CFSFolder::CreateViewObject(HWND hwndOwner, + REFIID riid, LPVOID * ppvOut) +{ + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this, hwndOwner, shdebugstr_guid (&riid), + ppvOut); + + if (ppvOut) { + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IDropTarget)) { + hr = this->QueryInterface (IID_IDropTarget, ppvOut); + } else if (IsEqualIID (riid, IID_IContextMenu)) { + FIXME ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } else if (IsEqualIID (riid, IID_IShellView)) { + hr = IShellView_Constructor ((IShellFolder *)this, &pShellView); + if (pShellView) { + hr = pShellView->QueryInterface(riid, ppvOut); + pShellView->Release(); + } + } + } + TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut); + return hr; +} + +/************************************************************************** +* IShellFolder_fnGetAttributesOf +* +* PARAMETERS +* UINT cidl, //[in ] num elements in pidl array +* LPCITEMIDLIST* apidl, //[in ] simple pidl array +* ULONG* rgfInOut) //[out] result array +* +*/ +HRESULT WINAPI CFSFolder::GetAttributesOf(UINT cidl, + LPCITEMIDLIST * apidl, DWORD * rgfInOut) +{ + HRESULT hr = S_OK; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", this, cidl, apidl, + rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if(cidl == 0){ + IShellFolder *psfParent = NULL; + LPCITEMIDLIST rpidl = NULL; + + hr = SHBindToParent(pidlRoot, IID_IShellFolder, (LPVOID*)&psfParent, (LPCITEMIDLIST*)&rpidl); + if(SUCCEEDED(hr)) { + SHELL32_GetItemAttributes (psfParent, rpidl, rgfInOut); + psfParent->Release(); + } + } + else { + while (cidl > 0 && *apidl) { + pdump (*apidl); + SHELL32_GetItemAttributes (this, *apidl, rgfInOut); + apidl++; + cidl--; + } + } + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + + return hr; +} + +/************************************************************************** +* IShellFolder_fnGetUIObjectOf +* +* PARAMETERS +* HWND hwndOwner, //[in ] Parent window for any output +* UINT cidl, //[in ] array size +* LPCITEMIDLIST* apidl, //[in ] simple pidl array +* REFIID riid, //[in ] Requested Interface +* UINT* prgfInOut, //[ ] reserved +* LPVOID* ppvObject) //[out] Resulting Interface +* +* NOTES +* This function gets asked to return "view objects" for one or more (multiple +* select) items: +* The viewobject typically is an COM object with one of the following +* interfaces: +* IExtractIcon,IDataObject,IContextMenu +* In order to support icon positions in the default Listview your DataObject +* must implement the SetData method (in addition to GetData :) - the shell +* passes a barely documented "Icon positions" structure to SetData when the +* drag starts, and GetData's it if the drop is in another explorer window that +* needs the positions. +*/ +HRESULT WINAPI CFSFolder::GetUIObjectOf(HWND hwndOwner, + UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, + UINT * prgfInOut, LPVOID * ppvOut) +{ + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", + this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut); + + if (ppvOut) { + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IContextMenu) && (cidl >= 1)) { + hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)this, NULL, 0, NULL, (IContextMenu**)&pObj); + } else if (IsEqualIID (riid, IID_IDataObject)){ + if (cidl >= 1) { + hr = IDataObject_Constructor (hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj); + } + else + { + hr = IDataObject_Constructor (hwndOwner, pidlRoot, (LPCITEMIDLIST*)&pidlRoot, 1, (IDataObject **)&pObj); + } + } else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1)) { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1)) { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) { + hr = this->QueryInterface(IID_IDropTarget, + (LPVOID *) & pObj); + } else if ((IsEqualIID(riid,IID_IShellLinkW) || + IsEqualIID(riid,IID_IShellLinkA)) && (cidl == 1)) { + pidl = ILCombine (pidlRoot, apidl[0]); + hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj); + SHFree (pidl); + } else { + hr = E_NOINTERFACE; + } + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + } + TRACE ("(%p)->hr=0x%08x\n", this, hr); + return hr; +} + +static const WCHAR AdvancedW[] = { 'S','O','F','T','W','A','R','E', + '\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\', + 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l', + 'o','r','e','r','\\','A','d','v','a','n','c','e','d',0 }; +static const WCHAR HideFileExtW[] = { 'H','i','d','e','F','i','l','e','E','x', + 't',0 }; +static const WCHAR NeverShowExtW[] = { 'N','e','v','e','r','S','h','o','w','E', + 'x','t',0 }; + +/****************************************************************************** + * SHELL_FS_HideExtension [Internal] + * + * Query the registry if the filename extension of a given path should be + * hidden. + * + * PARAMS + * szPath [I] Relative or absolute path of a file + * + * RETURNS + * TRUE, if the filename's extension should be hidden + * FALSE, otherwise. + */ +BOOL SHELL_FS_HideExtension(LPWSTR szPath) +{ + HKEY hKey; + DWORD dwData; + DWORD dwDataSize = sizeof (DWORD); + BOOL doHide = FALSE; /* The default value is FALSE (win98 at least) */ + + if (!RegCreateKeyExW(HKEY_CURRENT_USER, AdvancedW, 0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0)) { + if (!RegQueryValueExW(hKey, HideFileExtW, 0, 0, (LPBYTE) &dwData, &dwDataSize)) + doHide = dwData; + RegCloseKey (hKey); + } + + if (!doHide) { + LPWSTR ext = PathFindExtensionW(szPath); + + if (*ext != '\0') { + WCHAR classname[MAX_PATH]; + LONG classlen = sizeof(classname); + + if (!RegQueryValueW(HKEY_CLASSES_ROOT, ext, classname, &classlen)) + if (!RegOpenKeyW(HKEY_CLASSES_ROOT, classname, &hKey)) { + if (!RegQueryValueExW(hKey, NeverShowExtW, 0, NULL, NULL, NULL)) + doHide = TRUE; + RegCloseKey(hKey); + } + } + } + return doHide; +} + +void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags) +{ + /*FIXME: MSDN also mentions SHGDN_FOREDITING which is not yet handled. */ + if (!(dwFlags & SHGDN_FORPARSING) && + ((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) { + if (SHELL_FS_HideExtension(szPath) && szPath[0] != '.') + PathRemoveExtensionW(szPath); + } +} + +/************************************************************************** +* IShellFolder_fnGetDisplayNameOf +* Retrieves the display name for the specified file object or subfolder +* +* PARAMETERS +* LPCITEMIDLIST pidl, //[in ] complex pidl to item +* DWORD dwFlags, //[in ] SHGNO formatting flags +* LPSTRRET lpName) //[out] Returned display name +* +* FIXME +* if the name is in the pidl the ret value should be a STRRET_OFFSET +*/ + +HRESULT WINAPI CFSFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, + DWORD dwFlags, LPSTRRET strRet) +{ + LPWSTR pszPath; + + HRESULT hr = S_OK; + int len = 0; + + TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet); + pdump (pidl); + + if (!pidl || !strRet) + return E_INVALIDARG; + + pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR)); + if (!pszPath) + return E_OUTOFMEMORY; + + if (_ILIsDesktop(pidl)) { /* empty pidl */ + if ((GET_SHGDN_FOR(dwFlags) & SHGDN_FORPARSING) && + (GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER)) + { + if (sPathTarget) + lstrcpynW(pszPath, sPathTarget, MAX_PATH); + } else { + /* pidl has to contain exactly one non null SHITEMID */ + hr = E_INVALIDARG; + } + } else if (_ILIsPidlSimple(pidl)) { + if ((GET_SHGDN_FOR(dwFlags) & SHGDN_FORPARSING) && + (GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER) && + sPathTarget) + { + lstrcpynW(pszPath, sPathTarget, MAX_PATH); + PathAddBackslashW(pszPath); + len = wcslen(pszPath); + } + _ILSimpleGetTextW(pidl, pszPath + len, MAX_PATH + 1 - len); + if (!_ILIsFolder(pidl)) SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags); + } else { + hr = SHELL32_GetDisplayNameOfChild(this, pidl, dwFlags, pszPath, MAX_PATH); + } + + if (SUCCEEDED(hr)) { + /* Win9x always returns ANSI strings, NT always returns Unicode strings */ + if (GetVersion() & 0x80000000) { + strRet->uType = STRRET_CSTR; + if (!WideCharToMultiByte(CP_ACP, 0, pszPath, -1, strRet->cStr, MAX_PATH, + NULL, NULL)) + strRet->cStr[0] = '\0'; + CoTaskMemFree(pszPath); + } else { + strRet->uType = STRRET_WSTR; + strRet->pOleStr = pszPath; + } + } else + CoTaskMemFree(pszPath); + + TRACE ("-- (%p)->(%s)\n", this, strRet->uType == STRRET_CSTR ? strRet->cStr : debugstr_w(strRet->pOleStr)); + return hr; +} + +/************************************************************************** +* IShellFolder_fnSetNameOf +* Changes the name of a file object or subfolder, possibly changing its item +* identifier in the process. +* +* PARAMETERS +* HWND hwndOwner, //[in ] Owner window for output +* LPCITEMIDLIST pidl, //[in ] simple pidl of item to change +* LPCOLESTR lpszName, //[in ] the items new display name +* DWORD dwFlags, //[in ] SHGNO formatting flags +* LPITEMIDLIST* ppidlOut) //[out] simple pidl returned +*/ +HRESULT WINAPI CFSFolder::SetNameOf (HWND hwndOwner, + LPCITEMIDLIST pidl, + LPCOLESTR lpName, + DWORD dwFlags, + LPITEMIDLIST * pPidlOut) +{ + WCHAR szSrc[MAX_PATH + 1], szDest[MAX_PATH + 1]; + LPWSTR ptr; + BOOL bIsFolder = _ILIsFolder (ILFindLastID (pidl)); + + TRACE ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, hwndOwner, pidl, + debugstr_w (lpName), dwFlags, pPidlOut); + + /* build source path */ + lstrcpynW(szSrc, sPathTarget, MAX_PATH); + ptr = PathAddBackslashW (szSrc); + if (ptr) + _ILSimpleGetTextW (pidl, ptr, MAX_PATH + 1 - (ptr - szSrc)); + + /* build destination path */ + if (dwFlags == SHGDN_NORMAL || dwFlags & SHGDN_INFOLDER) { + lstrcpynW(szDest, sPathTarget, MAX_PATH); + ptr = PathAddBackslashW (szDest); + if (ptr) + lstrcpynW(ptr, lpName, MAX_PATH + 1 - (ptr - szDest)); + } else + lstrcpynW(szDest, lpName, MAX_PATH); + + if(!(dwFlags & SHGDN_FORPARSING) && SHELL_FS_HideExtension(szSrc)) { + WCHAR *ext = PathFindExtensionW(szSrc); + if(*ext != '\0') { + INT len = wcslen(szDest); + lstrcpynW(szDest + len, ext, MAX_PATH - len); + } + } + + TRACE ("src=%s dest=%s\n", debugstr_w(szSrc), debugstr_w(szDest)); + if (!memcmp(szSrc, szDest, (wcslen(szDest)+1) * sizeof(WCHAR))) + { + /* src and destination is the same */ + HRESULT hr = S_OK; + if (pPidlOut) + hr = _ILCreateFromPathW(szDest, pPidlOut); + + return hr; + } + + + if (MoveFileW (szSrc, szDest)) { + HRESULT hr = S_OK; + + if (pPidlOut) + hr = _ILCreateFromPathW(szDest, pPidlOut); + + SHChangeNotify (bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM, + SHCNF_PATHW, szSrc, szDest); + + return hr; + } + + return E_FAIL; +} + +HRESULT WINAPI CFSFolder::GetDefaultSearchGUID(GUID * pguid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CFSFolder::EnumSearches(IEnumExtraSearch ** ppenum) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CFSFolder::GetDefaultColumn(DWORD dwRes, + ULONG * pSort, ULONG * pDisplay) +{ + TRACE ("(%p)\n", this); + + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} + +HRESULT WINAPI CFSFolder::GetDefaultColumnState(UINT iColumn, + DWORD * pcsFlags) +{ + TRACE ("(%p)\n", this); + + if (!pcsFlags || iColumn >= GENERICSHELLVIEWCOLUMNS) + return E_INVALIDARG; + + *pcsFlags = GenericSFHeader[iColumn].pcsFlags; + + return S_OK; +} + +HRESULT WINAPI CFSFolder::GetDetailsEx(LPCITEMIDLIST pidl, + const SHCOLUMNID * pscid, VARIANT * pv) +{ + FIXME ("(%p)\n", this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CFSFolder::GetDetailsOf(LPCITEMIDLIST pidl, + UINT iColumn, SHELLDETAILS * psd) +{ + HRESULT hr = E_FAIL; + + TRACE ("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd); + + if (!psd || iColumn >= GENERICSHELLVIEWCOLUMNS) + return E_INVALIDARG; + + if (!pidl) { + /* the header titles */ + psd->fmt = GenericSFHeader[iColumn].fmt; + psd->cxChar = GenericSFHeader[iColumn].cxChar; + psd->str.uType = STRRET_CSTR; + LoadStringA (shell32_hInstance, GenericSFHeader[iColumn].colnameid, + psd->str.cStr, MAX_PATH); + return S_OK; + } else { + hr = S_OK; + psd->str.uType = STRRET_CSTR; + /* the data from the pidl */ + switch (iColumn) { + case 0: /* name */ + hr = GetDisplayNameOf (pidl, + SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); + break; + case 1: /* size */ + _ILGetFileSize (pidl, psd->str.cStr, MAX_PATH); + break; + case 2: /* type */ + _ILGetFileType (pidl, psd->str.cStr, MAX_PATH); + break; + case 3: /* date */ + _ILGetFileDate (pidl, psd->str.cStr, MAX_PATH); + break; + case 4: /* attributes */ + _ILGetFileAttributes (pidl, psd->str.cStr, MAX_PATH); + break; + } + } + + return hr; +} + +HRESULT WINAPI CFSFolder::MapColumnToSCID (UINT column, + SHCOLUMNID * pscid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +/**************************************************************************** + * ISFHelper for IShellFolder implementation + */ + +/**************************************************************************** + * ISFHelper_fnAddFolder + * + * creates a unique folder name + */ + +HRESULT WINAPI CFSFolder::GetUniqueName(LPWSTR pwszName, UINT uLen) +{ + IEnumIDList *penum; + HRESULT hr; + WCHAR wszText[MAX_PATH]; + WCHAR wszNewFolder[25]; + const WCHAR wszFormat[] = {'%','s',' ','%','d',0 }; + + LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, sizeof(wszNewFolder)/sizeof(WCHAR)); + + TRACE ("(%p)(%p %u)\n", this, pwszName, uLen); + + if (uLen < sizeof(wszNewFolder)/sizeof(WCHAR) + 3) + return E_POINTER; + + lstrcpynW (pwszName, wszNewFolder, uLen); + + hr = EnumObjects(0, + SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penum); + if (penum) { + LPITEMIDLIST pidl; + DWORD dwFetched; + int i = 1; + +next: + penum->Reset (); + while (S_OK == penum->Next(1, &pidl, &dwFetched) && + dwFetched) { + _ILSimpleGetTextW (pidl, wszText, MAX_PATH); + if (0 == lstrcmpiW (wszText, pwszName)) { + _snwprintf (pwszName, uLen, wszFormat, wszNewFolder, i++); + if (i > 99) { + hr = E_FAIL; + break; + } + goto next; + } + } + + penum->Release(); + } + return hr; +} + +/**************************************************************************** + * ISFHelper_fnAddFolder + * + * adds a new folder. + */ + +HRESULT WINAPI CFSFolder::AddFolder(HWND hwnd, LPCWSTR pwszName, + LPITEMIDLIST * ppidlOut) +{ + WCHAR wszNewDir[MAX_PATH]; + DWORD bRes; + HRESULT hres = E_FAIL; + + TRACE ("(%p)(%s %p)\n", this, debugstr_w(pwszName), ppidlOut); + + wszNewDir[0] = 0; + if (sPathTarget) + lstrcpynW(wszNewDir, sPathTarget, MAX_PATH); + PathAppendW(wszNewDir, pwszName); + + bRes = CreateDirectoryW (wszNewDir, NULL); + if (bRes) { + SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHW, wszNewDir, NULL); + + hres = S_OK; + + if (ppidlOut) + hres = _ILCreateFromPathW(wszNewDir, ppidlOut); + } else { + WCHAR wszText[128 + MAX_PATH]; + WCHAR wszTempText[128]; + WCHAR wszCaption[256]; + + /* Cannot Create folder because of permissions */ + LoadStringW (shell32_hInstance, IDS_CREATEFOLDER_DENIED, wszTempText, + sizeof (wszTempText)); + LoadStringW (shell32_hInstance, IDS_CREATEFOLDER_CAPTION, wszCaption, + sizeof (wszCaption)); + swprintf (wszText, wszTempText, wszNewDir); + MessageBoxW (hwnd, wszText, wszCaption, MB_OK | MB_ICONEXCLAMATION); + } + + return hres; +} + +/**************************************************************************** + * build_paths_list + * + * Builds a list of paths like the one used in SHFileOperation from a table of + * PIDLs relative to the given base folder + */ +WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls) +{ + WCHAR *wszPathsList; + WCHAR *wszListPos; + int iPathLen; + int i; + + iPathLen = wcslen(wszBasePath); + wszPathsList = (WCHAR *)HeapAlloc(GetProcessHeap(), 0, MAX_PATH*sizeof(WCHAR)*cidl+1); + wszListPos = wszPathsList; + + for (i = 0; i < cidl; i++) { + if (!_ILIsFolder(pidls[i]) && !_ILIsValue(pidls[i])) + continue; + + lstrcpynW(wszListPos, wszBasePath, MAX_PATH); + /* FIXME: abort if path too long */ + _ILSimpleGetTextW(pidls[i], wszListPos+iPathLen, MAX_PATH-iPathLen); + wszListPos += wcslen(wszListPos)+1; + } + *wszListPos=0; + return wszPathsList; +} + +/**************************************************************************** + * ISFHelper_fnDeleteItems + * + * deletes items in folder + */ +HRESULT WINAPI CFSFolder::DeleteItems(UINT cidl, LPCITEMIDLIST * apidl) +{ + UINT i; + SHFILEOPSTRUCTW op; + WCHAR wszPath[MAX_PATH]; + WCHAR *wszPathsList; + HRESULT ret; + WCHAR *wszCurrentPath; + + TRACE ("(%p)(%u %p)\n", this, cidl, apidl); + if (cidl==0) return S_OK; + + if (sPathTarget) + lstrcpynW(wszPath, sPathTarget, MAX_PATH); + else + wszPath[0] = '\0'; + PathAddBackslashW(wszPath); + wszPathsList = build_paths_list(wszPath, cidl, apidl); + + ZeroMemory(&op, sizeof(op)); + op.hwnd = GetActiveWindow(); + op.wFunc = FO_DELETE; + op.pFrom = wszPathsList; + op.fFlags = FOF_ALLOWUNDO; + if (SHFileOperationW(&op)) + { + WARN("SHFileOperation failed\n"); + ret = E_FAIL; + } + else + ret = S_OK; + + /* we currently need to manually send the notifies */ + wszCurrentPath = wszPathsList; + for (i = 0; i < cidl; i++) + { + LONG wEventId; + + if (_ILIsFolder(apidl[i])) + wEventId = SHCNE_RMDIR; + else if (_ILIsValue(apidl[i])) + wEventId = SHCNE_DELETE; + else + continue; + + /* check if file exists */ + if (GetFileAttributesW(wszCurrentPath) == INVALID_FILE_ATTRIBUTES) + { + LPITEMIDLIST pidl = ILCombine(pidlRoot, apidl[i]); + SHChangeNotify(wEventId, SHCNF_IDLIST, pidl, NULL); + SHFree(pidl); + } + + wszCurrentPath += wcslen(wszCurrentPath)+1; + } + HeapFree(GetProcessHeap(), 0, wszPathsList); + return ret; +} + +/**************************************************************************** + * ISFHelper_fnCopyItems + * + * copies items to this folder + */ +HRESULT WINAPI CFSFolder::CopyItems(IShellFolder * pSFFrom, UINT cidl, + LPCITEMIDLIST * apidl) +{ + IPersistFolder2 *ppf2 = NULL; + WCHAR szSrcPath[MAX_PATH]; + WCHAR szTargetPath[MAX_PATH]; + SHFILEOPSTRUCTW op; + LPITEMIDLIST pidl; + LPWSTR pszSrc, pszTarget, pszSrcList, pszTargetList, pszFileName; + int res, length; + HRESULT hr; + STRRET strRet; + + TRACE ("(%p)->(%p,%u,%p)\n", this, pSFFrom, cidl, apidl); + + hr = pSFFrom->QueryInterface (IID_IPersistFolder2, (LPVOID *) & ppf2); + if (SUCCEEDED(hr)) + { + if (FAILED(ppf2->GetCurFolder(&pidl))) + { + ppf2->Release(); + return E_FAIL; + } + ppf2->Release(); + + if (FAILED(pSFFrom->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strRet))) + { + SHFree (pidl); + return E_FAIL; + } + + if (FAILED(StrRetToBufW(&strRet, pidl, szSrcPath, MAX_PATH))) + { + SHFree (pidl); + return E_FAIL; + } + SHFree (pidl); + + pszSrc = PathAddBackslashW (szSrcPath); + + wcscpy(szTargetPath, sPathTarget); + pszTarget = PathAddBackslashW (szTargetPath); + + pszSrcList = build_paths_list(szSrcPath, cidl, apidl); + pszTargetList = build_paths_list(szTargetPath, cidl, apidl); + + if (!pszSrcList || !pszTargetList) + { + if (pszSrcList) + HeapFree(GetProcessHeap(), 0, pszSrcList); + + if (pszTargetList) + HeapFree(GetProcessHeap(), 0, pszTargetList); + + SHFree (pidl); + ppf2->Release (); + return E_OUTOFMEMORY; + } + ZeroMemory(&op, sizeof(op)); + if (!pszSrcList[0]) + { + /* remove trailing backslash */ + pszSrc--; + pszSrc[0] = L'\0'; + op.pFrom = szSrcPath; + } + else + { + op.pFrom = pszSrcList; + } + + if (!pszTargetList[0]) + { + /* remove trailing backslash */ + if (pszTarget - szTargetPath > 3) + { + pszTarget--; + pszTarget[0] = L'\0'; + } + else + { + pszTarget[1] = L'\0'; + } + + op.pTo = szTargetPath; + } + else + { + op.pTo = pszTargetList; + } + op.hwnd = GetActiveWindow(); + op.wFunc = FO_COPY; + op.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMMKDIR; + + res = SHFileOperationW(&op); + + if (res == DE_SAMEFILE) + { + length = wcslen(szTargetPath); + + pszFileName = wcsrchr(pszSrcList, '\\'); + pszFileName++; + + if (LoadStringW(shell32_hInstance, IDS_COPY_OF, pszTarget, MAX_PATH - length)) + { + wcscat(szTargetPath, L" "); + } + + wcscat(szTargetPath, pszFileName); + op.pTo = szTargetPath; + + res = SHFileOperationW(&op); + } + + HeapFree(GetProcessHeap(), 0, pszSrcList); + HeapFree(GetProcessHeap(), 0, pszTargetList); + + if (res) + return E_FAIL; + else + return S_OK; + } + return E_FAIL; +} + +/************************************************************************ + * IFSFldr_PersistFolder3_GetClassID + */ +HRESULT WINAPI CFSFolder::GetClassID(CLSID * lpClassId) +{ + TRACE ("(%p)\n", this); + + if (!lpClassId) + return E_POINTER; + *lpClassId = *pclsid; + + return S_OK; +} + +/************************************************************************ + * IFSFldr_PersistFolder3_Initialize + * + * NOTES + * sPathTarget is not set. Don't know how to handle in a non rooted environment. + */ +HRESULT WINAPI CFSFolder::Initialize (LPCITEMIDLIST pidl) +{ + WCHAR wszTemp[MAX_PATH]; + + TRACE ("(%p)->(%p)\n", this, pidl); + + SHFree (pidlRoot); /* free the old pidl */ + pidlRoot = ILClone (pidl); /* set my pidl */ + + SHFree (sPathTarget); + sPathTarget = NULL; + + /* set my path */ + if (SHGetPathFromIDListW (pidl, wszTemp)) { + int len = wcslen(wszTemp); + sPathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR)); + if (!sPathTarget) + return E_OUTOFMEMORY; + memcpy(sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR)); + } + + TRACE ("--(%p)->(%s)\n", this, debugstr_w(sPathTarget)); + return S_OK; +} + +/************************************************************************** + * IFSFldr_PersistFolder3_GetCurFolder + */ +HRESULT WINAPI CFSFolder::GetCurFolder(LPITEMIDLIST * pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + if (!pidl) return E_POINTER; + *pidl = ILClone (pidlRoot); + return S_OK; +} + +/************************************************************************** + * IFSFldr_PersistFolder3_InitializeEx + * + * FIXME: error handling + */ +HRESULT WINAPI CFSFolder::InitializeEx(IBindCtx * pbc, LPCITEMIDLIST pidlRootx, + const PERSIST_FOLDER_TARGET_INFO * ppfti) +{ + WCHAR wszTemp[MAX_PATH]; + + TRACE ("(%p)->(%p,%p,%p)\n", this, pbc, pidlRootx, ppfti); + if (ppfti) + TRACE ("--%p %s %s 0x%08x 0x%08x\n", + ppfti->pidlTargetFolder, debugstr_w (ppfti->szTargetParsingName), + debugstr_w (ppfti->szNetworkProvider), ppfti->dwAttributes, + ppfti->csidl); + + pdump (pidlRootx); + if (ppfti && ppfti->pidlTargetFolder) + pdump (ppfti->pidlTargetFolder); + + if (pidlRoot) + __SHFreeAndNil (&pidlRoot); /* free the old */ + if (sPathTarget) + __SHFreeAndNil (&sPathTarget); + + /* + * Root path and pidl + */ + pidlRoot = ILClone (pidlRootx); + + /* + * the target folder is spezified in csidl OR pidlTargetFolder OR + * szTargetParsingName + */ + if (ppfti) { + if (ppfti->csidl != -1) { + if (SHGetSpecialFolderPathW (0, wszTemp, ppfti->csidl, + ppfti->csidl & CSIDL_FLAG_CREATE)) { + int len = wcslen(wszTemp); + sPathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR)); + if (!sPathTarget) + return E_OUTOFMEMORY; + memcpy(sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR)); + } + } else if (ppfti->szTargetParsingName[0]) { + int len = wcslen(ppfti->szTargetParsingName); + sPathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR)); + if (!sPathTarget) + return E_OUTOFMEMORY; + memcpy(sPathTarget, ppfti->szTargetParsingName, + (len + 1) * sizeof(WCHAR)); + } else if (ppfti->pidlTargetFolder) { + if (SHGetPathFromIDListW(ppfti->pidlTargetFolder, wszTemp)) { + int len = wcslen(wszTemp); + sPathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR)); + if (!sPathTarget) + return E_OUTOFMEMORY; + memcpy(sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR)); + } + } + } + + TRACE ("--(%p)->(target=%s)\n", this, debugstr_w(sPathTarget)); + pdump (pidlRoot); + return (sPathTarget) ? S_OK : E_FAIL; +} + +HRESULT WINAPI CFSFolder::GetFolderTargetInfo(PERSIST_FOLDER_TARGET_INFO * ppfti) +{ + FIXME ("(%p)->(%p)\n", this, ppfti); + ZeroMemory (ppfti, sizeof (*ppfti)); + return E_NOTIMPL; +} + +/**************************************************************************** + * ISFDropTarget implementation + */ +BOOL CFSFolder::QueryDrop (DWORD dwKeyState, + LPDWORD pdwEffect) +{ + DWORD dwEffect = *pdwEffect; + + *pdwEffect = DROPEFFECT_NONE; + + if (fAcceptFmt) { /* Does our interpretation of the keystate ... */ + *pdwEffect = KeyStateToDropEffect (dwKeyState); + + /* ... matches the desired effect ? */ + if (dwEffect & *pdwEffect) { + return TRUE; + } + } + return FALSE; +} + +HRESULT WINAPI CFSFolder::DragEnter (IDataObject * pDataObject, + DWORD dwKeyState, POINTL pt, DWORD * pdwEffect) +{ + FORMATETC fmt; + + TRACE ("(%p)->(DataObject=%p)\n", this, pDataObject); + + InitFormatEtc (fmt, cfShellIDList, TYMED_HGLOBAL); + + fAcceptFmt = (S_OK == pDataObject->QueryGetData(&fmt)) ? + TRUE : FALSE; + + QueryDrop(dwKeyState, pdwEffect); + + return S_OK; +} + +HRESULT WINAPI CFSFolder::DragOver (DWORD dwKeyState, POINTL pt, + DWORD * pdwEffect) +{ + TRACE ("(%p)\n", this); + + if (!pdwEffect) + return E_INVALIDARG; + + QueryDrop(dwKeyState, pdwEffect); + + return S_OK; +} + +HRESULT WINAPI CFSFolder::DragLeave () +{ + TRACE ("(%p)\n", this); + + fAcceptFmt = FALSE; + + return S_OK; +} + +HRESULT WINAPI CFSFolder::Drop (IDataObject * pDataObject, + DWORD dwKeyState, POINTL pt, DWORD * pdwEffect) +{ + FIXME ("(%p) object dropped\n", this); + + return E_NOTIMPL; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_fs.h b/reactos/dll/win32/shell32_new/shfldr_fs.h new file mode 100644 index 00000000000..6523659b602 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_fs.h @@ -0,0 +1,112 @@ +/* + * file system folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _CFSFOLDER_H_ +#define _CFSFOLDER_H_ + +class CFSFolder : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder3, + public IDropTarget, + public ISFHelper +{ +private: + CLSID *pclsid; + + /* both paths are parsible from the desktop */ + LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */ + + LPITEMIDLIST pidlRoot; /* absolute pidl */ + + UINT cfShellIDList; /* clipboardformat for IDropTarget */ + BOOL fAcceptFmt; /* flag for pending Drop */ +public: + CFSFolder(); + ~CFSFolder(); + void SF_RegisterClipFmt(); + BOOL QueryDrop (DWORD dwKeyState, LPDWORD pdwEffect); + + // IShellFolder + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + /* ShellFolder2 */ + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // IPersist + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // IPersistFolder + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IPersistFolder2 + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + + // IPersistFolder3 + virtual HRESULT WINAPI InitializeEx(IBindCtx *pbc, LPCITEMIDLIST pidlRoot, const PERSIST_FOLDER_TARGET_INFO *ppfti); + virtual HRESULT WINAPI GetFolderTargetInfo(PERSIST_FOLDER_TARGET_INFO *ppfti); + + // IDropTarget + virtual HRESULT WINAPI DragEnter(IDataObject *pDataObject, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect); + virtual HRESULT WINAPI DragOver(DWORD dwKeyState, POINTL pt, DWORD *pdwEffect); + virtual HRESULT WINAPI DragLeave(); + virtual HRESULT WINAPI Drop(IDataObject *pDataObject, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect); + + // ISFHelper + virtual HRESULT WINAPI GetUniqueName(LPWSTR pwszName, UINT uLen); + virtual HRESULT WINAPI AddFolder(HWND hwnd, LPCWSTR pwszName, LPITEMIDLIST *ppidlOut); + virtual HRESULT WINAPI DeleteItems(UINT cidl, LPCITEMIDLIST *apidl); + virtual HRESULT WINAPI CopyItems(IShellFolder *pSFFrom, UINT cidl, LPCITEMIDLIST *apidl); + +DECLARE_REGISTRY_RESOURCEID(IDR_SHELLFSFOLDER) +DECLARE_NOT_AGGREGATABLE(CFSFolder) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CFSFolder) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder3, IPersistFolder3) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) + COM_INTERFACE_ENTRY_IID(IID_ISFHelper, ISFHelper) +END_COM_MAP() +}; + +#endif // _CFSFOLDER_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_mycomp.cpp b/reactos/dll/win32/shell32_new/shfldr_mycomp.cpp new file mode 100644 index 00000000000..d950fb6b22c --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_mycomp.cpp @@ -0,0 +1,876 @@ +/* + * Virtual Workplace folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "shfldr_mycomp.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/* +CDrivesFolder should create a CRegFolder to represent the virtual items that exist only in +the registry. The CRegFolder is aggregated by the CDrivesFolder. +The CDrivesFolderEnum class should enumerate only drives on the system. Since the CRegFolder +implementation of IShellFolder::EnumObjects enumerates the virtual items, the +CDrivesFolderEnum is only responsible for returning the physical items. + +2. At least on my XP system, the drive pidls returned are of type PT_DRIVE1, not PT_DRIVE +3. The parsing name returned for my computer is incorrect. It should be "My Computer" +*/ + +/*********************************************************************** +* IShellFolder implementation +*/ + +class CDrivesFolderEnum : + public IEnumIDListImpl +{ +private: +public: + CDrivesFolderEnum(); + ~CDrivesFolderEnum(); + HRESULT WINAPI Initialize(HWND hwndOwner, DWORD dwFlags); + BOOL CreateMyCompEnumList(DWORD dwFlags); + +BEGIN_COM_MAP(CDrivesFolderEnum) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +/*********************************************************************** +* IShellFolder [MyComputer] implementation +*/ + +static const shvheader MyComputerSFHeader[] = { + {IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN6, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN7, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, +}; + +#define MYCOMPUTERSHELLVIEWCOLUMNS 4 + +CDrivesFolderEnum::CDrivesFolderEnum() +{ +} + +CDrivesFolderEnum::~CDrivesFolderEnum() +{ +} + +HRESULT WINAPI CDrivesFolderEnum::Initialize(HWND hwndOwner, DWORD dwFlags) +{ + if (CreateMyCompEnumList(dwFlags) == FALSE) + return E_FAIL; + return S_OK; +} + +/************************************************************************** + * CreateMyCompEnumList() + */ +static const WCHAR MyComputer_NameSpaceW[] = { 'S','O','F','T','W','A','R','E', + '\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\', + 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l', + 'o','r','e','r','\\','M','y','C','o','m','p','u','t','e','r','\\','N','a','m', + 'e','s','p','a','c','e','\0' }; + +BOOL CDrivesFolderEnum::CreateMyCompEnumList(DWORD dwFlags) +{ + BOOL ret = TRUE; + + TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags); + + /* enumerate the folders */ + if (dwFlags & SHCONTF_FOLDERS) + { + WCHAR wszDriveName[] = {'A', ':', '\\', '\0'}; + DWORD dwDrivemap = GetLogicalDrives(); + HKEY hkey; + UINT i; + + while (ret && wszDriveName[0]<='Z') + { + if(dwDrivemap & 0x00000001L) + ret = AddToEnumList(_ILCreateDrive(wszDriveName)); + wszDriveName[0]++; + dwDrivemap = dwDrivemap >> 1; + } + + TRACE("-- (%p)-> enumerate (mycomputer shell extensions)\n", this); + for (i=0; i<2; i++) { + if (ret && !RegOpenKeyExW(i == 0 ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, + MyComputer_NameSpaceW, 0, KEY_READ, &hkey)) + { + WCHAR iid[50]; + int i=0; + + while (ret) + { + DWORD size; + LONG r; + + size = sizeof(iid) / sizeof(iid[0]); + r = RegEnumKeyExW(hkey, i, iid, &size, 0, NULL, NULL, NULL); + if (ERROR_SUCCESS == r) + { + /* FIXME: shell extensions, shouldn't the type be + * PT_SHELLEXT? */ + LPITEMIDLIST pidl = _ILCreateGuidFromStrW(iid); + if (pidl != NULL) + ret = AddToEnumList(pidl); + i++; + } + else if (ERROR_NO_MORE_ITEMS == r) + break; + else + ret = FALSE; + } + RegCloseKey(hkey); + } + } + } + return ret; +} + +CDrivesFolder::CDrivesFolder() +{ + pidlRoot = NULL; + sName = NULL; +} + +CDrivesFolder::~CDrivesFolder() +{ + TRACE ("-- destroying IShellFolder(%p)\n", this); + SHFree(pidlRoot); +} + +HRESULT WINAPI CDrivesFolder::FinalConstruct() +{ + DWORD dwSize; + WCHAR szName[MAX_PATH]; + + pidlRoot = _ILCreateMyComputer(); /* my qualified pidl */ + if (pidlRoot == NULL) + return E_OUTOFMEMORY; + + dwSize = sizeof(szName); + if (RegGetValueW(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\{20D04FE0-3AEA-1069-A2D8-08002B30309D}", + NULL, RRF_RT_REG_SZ, NULL, szName, &dwSize) == ERROR_SUCCESS) + { + szName[MAX_PATH - 1] = 0; + sName = (LPWSTR)SHAlloc((wcslen(szName) + 1) * sizeof(WCHAR)); + if (sName) + { + wcscpy(sName, szName); + } + TRACE("sName %s\n", debugstr_w(sName)); + } + return S_OK; +} + +/************************************************************************** +* ISF_MyComputer_fnParseDisplayName +*/ +HRESULT WINAPI CDrivesFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + HRESULT hr = E_INVALIDARG; + LPCWSTR szNext = NULL; + WCHAR szElement[MAX_PATH]; + LPITEMIDLIST pidlTemp = NULL; + CLSID clsid; + + TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", this, + hwndOwner, pbc, lpszDisplayName, debugstr_w (lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + *ppidl = 0; + if (pchEaten) + *pchEaten = 0; /* strange but like the original */ + + /* handle CLSID paths */ + if (lpszDisplayName[0] == ':' && lpszDisplayName[1] == ':') + { + szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH); + TRACE ("-- element: %s\n", debugstr_w (szElement)); + CLSIDFromString (szElement + 2, &clsid); + pidlTemp = _ILCreateGuid (PT_GUID, clsid); + } + /* do we have an absolute path name ? */ + else if (PathGetDriveNumberW (lpszDisplayName) >= 0 && + lpszDisplayName[2] == (WCHAR) '\\') + { + szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH); + /* make drive letter uppercase to enable PIDL comparison */ + szElement[0] = toupper(szElement[0]); + pidlTemp = _ILCreateDrive (szElement); + } + + if (szNext && *szNext) + { + hr = SHELL32_ParseNextElement (this, hwndOwner, pbc, &pidlTemp, + (LPOLESTR) szNext, pchEaten, pdwAttributes); + } + else + { + if (pdwAttributes && *pdwAttributes) + SHELL32_GetItemAttributes (this, + pidlTemp, pdwAttributes); + hr = S_OK; + } + + *ppidl = pidlTemp; + + TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr); + + return hr; +} + +/************************************************************************** +* ISF_MyComputer_fnEnumObjects +*/ +HRESULT WINAPI CDrivesFolder::EnumObjects (HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); + + if (ppEnumIDList == NULL) + return E_POINTER; + *ppEnumIDList = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize (hwndOwner, dwFlags); + if (FAILED (hResult)) + return hResult; + *ppEnumIDList = result.Detach (); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + + return S_OK; +} + +/************************************************************************** +* ISF_MyComputer_fnBindToObject +*/ +HRESULT WINAPI CDrivesFolder::BindToObject (LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + TRACE("(%p)->(pidl=%p,%p,%s,%p)\n", this, + pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + return SHELL32_BindToChild (pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** +* ISF_MyComputer_fnBindToStorage +*/ +HRESULT WINAPI CDrivesFolder::BindToStorage (LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + FIXME("(%p)->(pidl=%p,%p,%s,%p) stub\n", this, + pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** +* ISF_MyComputer_fnCompareIDs +*/ + +HRESULT WINAPI CDrivesFolder::CompareIDs (LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (this, lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** +* ISF_MyComputer_fnCreateViewObject +*/ +HRESULT WINAPI CDrivesFolder::CreateViewObject (HWND hwndOwner, REFIID riid, LPVOID * ppvOut) +{ + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE("(%p)->(hwnd=%p,%s,%p)\n", this, + hwndOwner, shdebugstr_guid (&riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IShellView)) + { + hr = IShellView_Constructor ((IShellFolder *)this, &pShellView); + if (pShellView) + { + hr = pShellView->QueryInterface(riid, ppvOut); + pShellView->Release(); + } + } + TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut); + return hr; +} + +/************************************************************************** +* ISF_MyComputer_fnGetAttributesOf +*/ +HRESULT WINAPI CDrivesFolder::GetAttributesOf (UINT cidl, LPCITEMIDLIST * apidl, DWORD * rgfInOut) +{ + HRESULT hr = S_OK; + static const DWORD dwComputerAttributes = + SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | SFGAO_CANCOPY | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER | SFGAO_CANRENAME | SFGAO_CANDELETE; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", + this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if(cidl == 0) { + *rgfInOut &= dwComputerAttributes; + } else { + while (cidl > 0 && *apidl) { + pdump (*apidl); + SHELL32_GetItemAttributes (this, *apidl, rgfInOut); + apidl++; + cidl--; + } + } + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + return hr; +} + +/************************************************************************** +* ISF_MyComputer_fnGetUIObjectOf +* +* PARAMETERS +* hwndOwner [in] Parent window for any output +* cidl [in] array size +* apidl [in] simple pidl array +* riid [in] Requested Interface +* prgfInOut [ ] reserved +* ppvObject [out] Resulting Interface +* +*/ +HRESULT WINAPI CDrivesFolder::GetUIObjectOf (HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, + UINT * prgfInOut, LPVOID * ppvOut) +{ + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", this, + hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IContextMenu) && (cidl >= 1)) + { + hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)this, NULL, 0, NULL, (IContextMenu**)&pObj); + } + else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1)) + { + hr = IDataObject_Constructor (hwndOwner, + pidlRoot, apidl, cidl, (IDataObject **)&pObj); + } + else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) + { + hr = this->QueryInterface(IID_IDropTarget, + (LPVOID *) &pObj); + } + else if ((IsEqualIID(riid,IID_IShellLinkW) || + IsEqualIID(riid,IID_IShellLinkA)) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*) &pObj); + SHFree (pidl); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + TRACE ("(%p)->hr=0x%08x\n", this, hr); + return hr; +} + +/************************************************************************** +* ISF_MyComputer_fnGetDisplayNameOf +*/ +HRESULT WINAPI CDrivesFolder::GetDisplayNameOf (LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + LPWSTR pszPath; + HRESULT hr = S_OK; + + TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR)); + if (!pszPath) + return E_OUTOFMEMORY; + + pszPath[0] = 0; + + if (!pidl->mkid.cb) + { + /* parsing name like ::{...} */ + pszPath[0] = ':'; + pszPath[1] = ':'; + SHELL32_GUIDToStringW(CLSID_MyComputer, &pszPath[2]); + } + else if (_ILIsPidlSimple(pidl)) + { + /* take names of special folders only if its only this folder */ + if (_ILIsSpecialFolder(pidl)) + { + GUID const *clsid; + + clsid = _ILGetGUIDPointer (pidl); + if (clsid) + { + if (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING) + { + static const WCHAR clsidW[] = + { 'C','L','S','I','D','\\',0 }; + static const WCHAR shellfolderW[] = + { '\\','s','h','e','l','l','f','o','l','d','e','r',0 }; + static const WCHAR wantsForParsingW[] = + { 'W','a','n','t','s','F','o','r','P','a','r','s','i','n', + 'g',0 }; + int bWantsForParsing = FALSE; + WCHAR szRegPath[100]; + LONG r; + + /* + * We can only get a filesystem path from a shellfolder + * if the value WantsFORPARSING exists in + * CLSID\\{...}\\shellfolder + * exception: the MyComputer folder has this keys not + * but like any filesystem backed + * folder it needs these behaviour + * + * Get the "WantsFORPARSING" flag from the registry + */ + + wcscpy (szRegPath, clsidW); + SHELL32_GUIDToStringW (*clsid, &szRegPath[6]); + wcscat (szRegPath, shellfolderW); + r = SHGetValueW (HKEY_CLASSES_ROOT, szRegPath, + wantsForParsingW, NULL, NULL, NULL); + if (r == ERROR_SUCCESS) + bWantsForParsing = TRUE; + + if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && + bWantsForParsing) + { + /* + * We need the filesystem path to the destination folder + * Only the folder itself can know it + */ + hr = SHELL32_GetDisplayNameOfChild (this, pidl, + dwFlags, pszPath, MAX_PATH); + } + else + { + LPWSTR p = pszPath; + + /* parsing name like ::{...} */ + p[0] = ':'; + p[1] = ':'; + p += 2; + p += SHELL32_GUIDToStringW(CLSID_MyComputer, p); + + /* \:: */ + p[0] = '\\'; + p[1] = ':'; + p[2] = ':'; + p += 3; + SHELL32_GUIDToStringW(*clsid, p); + } + } + else + { + /* user friendly name */ + + if (_ILIsMyComputer(pidl) && sName) + wcscpy(pszPath, sName); + else + HCR_GetClassNameW (*clsid, pszPath, MAX_PATH); + + TRACE("pszPath %s\n", debugstr_w(pszPath)); + } + } + else + { + /* append my own path */ + _ILSimpleGetTextW (pidl, pszPath, MAX_PATH); + } + } + else if (_ILIsDrive(pidl)) + { + + _ILSimpleGetTextW (pidl, pszPath, MAX_PATH); /* append my own path */ + /* long view "lw_name (C:)" */ + if (!(dwFlags & SHGDN_FORPARSING)) + { + WCHAR wszDrive[18] = {0}; + DWORD dwVolumeSerialNumber, dwMaximumComponentLength, dwFileSystemFlags; + static const WCHAR wszOpenBracket[] = {' ','(',0}; + static const WCHAR wszCloseBracket[] = {')',0}; + + lstrcpynW(wszDrive, pszPath, 4); + pszPath[0] = L'\0'; + GetVolumeInformationW (wszDrive, pszPath, + MAX_PATH - 7, + &dwVolumeSerialNumber, + &dwMaximumComponentLength, &dwFileSystemFlags, NULL, 0); + pszPath[MAX_PATH-1] = L'\0'; + if (!wcslen(pszPath)) + { + UINT DriveType, ResourceId; + DriveType = GetDriveTypeW(wszDrive); + switch(DriveType) + { + case DRIVE_FIXED: + ResourceId = IDS_DRIVE_FIXED; + break; + case DRIVE_REMOTE: + ResourceId = IDS_DRIVE_NETWORK; + break; + case DRIVE_CDROM: + ResourceId = IDS_DRIVE_CDROM; + break; + default: + ResourceId = 0; + } + if (ResourceId) + { + dwFileSystemFlags = LoadStringW(shell32_hInstance, ResourceId, pszPath, MAX_PATH); + if (dwFileSystemFlags > MAX_PATH - 7) + pszPath[MAX_PATH-7] = L'\0'; + } + } + wcscat (pszPath, wszOpenBracket); + wszDrive[2] = L'\0'; + wcscat (pszPath, wszDrive); + wcscat (pszPath, wszCloseBracket); + } + } + else + { + /* Neither a shell namespace extension nor a drive letter. */ + ERR("Wrong pidl type\n"); + CoTaskMemFree(pszPath); + return E_INVALIDARG; + } + } + else + { + /* Complex pidl. Let the child folder do the work */ + hr = SHELL32_GetDisplayNameOfChild(this, pidl, dwFlags, pszPath, MAX_PATH); + } + + if (SUCCEEDED (hr)) + { + strRet->uType = STRRET_WSTR; + strRet->pOleStr = pszPath; + } + else + CoTaskMemFree(pszPath); + + TRACE ("-- (%p)->(%s)\n", this, strRet->uType == STRRET_CSTR ? strRet->cStr : debugstr_w(strRet->pOleStr)); + return hr; +} + +/************************************************************************** +* ISF_MyComputer_fnSetNameOf +* Changes the name of a file object or subfolder, possibly changing its item +* identifier in the process. +* +* PARAMETERS +* hwndOwner [in] Owner window for output +* pidl [in] simple pidl of item to change +* lpszName [in] the items new display name +* dwFlags [in] SHGNO formatting flags +* ppidlOut [out] simple pidl returned +*/ +HRESULT WINAPI CDrivesFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + LPWSTR sName; + HKEY hKey; + UINT length; + WCHAR szName[30]; + + TRACE ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, + hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut); + + if (_ILIsDrive(pidl)) + { + if (_ILSimpleGetTextW(pidl, szName, sizeof(szName)/sizeof(WCHAR))) + { + SetVolumeLabelW(szName, lpName); + } + if (pPidlOut) + *pPidlOut = _ILCreateDrive(szName); + return S_OK; + } + + + if (pPidlOut != NULL) + { + *pPidlOut = _ILCreateMyComputer(); + } + + length = (wcslen(lpName) + 1) * sizeof(WCHAR); + sName = (LPWSTR)SHAlloc(length); + + if (!sName) + { + return E_OUTOFMEMORY; + } + + if (RegOpenKeyExW(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\{20D04FE0-3AEA-1069-A2D8-08002B30309D}", + 0, + KEY_WRITE, + &hKey) != ERROR_SUCCESS) + { + WARN("Error: failed to open registry key\n"); + } + else + { + RegSetValueExW(hKey, NULL, 0, REG_SZ, (const LPBYTE)lpName, length); + RegCloseKey(hKey); + } + + wcscpy(sName, lpName); + SHFree(sName); + sName = sName; + TRACE("result %s\n", debugstr_w(sName)); + return S_OK; +} + +HRESULT WINAPI CDrivesFolder::GetDefaultSearchGUID(GUID * pguid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CDrivesFolder::EnumSearches(IEnumExtraSearch ** ppenum) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CDrivesFolder::GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *pDisplay) +{ + TRACE ("(%p)\n", this); + + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + return S_OK; +} + +HRESULT WINAPI CDrivesFolder::GetDefaultColumnState(UINT iColumn, DWORD * pcsFlags) +{ + TRACE ("(%p)\n", this); + + if (!pcsFlags || iColumn >= MYCOMPUTERSHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = MyComputerSFHeader[iColumn].pcsFlags; + return S_OK; +} + +HRESULT WINAPI CDrivesFolder::GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID * pscid, VARIANT * pv) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +/* FIXME: drive size >4GB is rolling over */ +HRESULT WINAPI CDrivesFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) +{ + HRESULT hr; + + TRACE ("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd); + + if (!psd || iColumn >= MYCOMPUTERSHELLVIEWCOLUMNS) + return E_INVALIDARG; + + if (!pidl) + { + psd->fmt = MyComputerSFHeader[iColumn].fmt; + psd->cxChar = MyComputerSFHeader[iColumn].cxChar; + psd->str.uType = STRRET_CSTR; + LoadStringA (shell32_hInstance, MyComputerSFHeader[iColumn].colnameid, + psd->str.cStr, MAX_PATH); + return S_OK; + } + else + { + char szPath[MAX_PATH]; + ULARGE_INTEGER ulBytes; + + psd->str.cStr[0] = 0x00; + psd->str.uType = STRRET_CSTR; + switch (iColumn) + { + case 0: /* name */ + hr = GetDisplayNameOf(pidl, + SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); + break; + case 1: /* type */ + _ILGetFileType (pidl, psd->str.cStr, MAX_PATH); + break; + case 2: /* total size */ + if (_ILIsDrive (pidl)) + { + _ILSimpleGetText (pidl, szPath, MAX_PATH); + GetDiskFreeSpaceExA (szPath, NULL, &ulBytes, NULL); + StrFormatByteSizeA (ulBytes.LowPart, psd->str.cStr, MAX_PATH); + } + break; + case 3: /* free size */ + if (_ILIsDrive (pidl)) + { + _ILSimpleGetText (pidl, szPath, MAX_PATH); + GetDiskFreeSpaceExA (szPath, &ulBytes, NULL, NULL); + StrFormatByteSizeA (ulBytes.LowPart, psd->str.cStr, MAX_PATH); + } + break; + } + hr = S_OK; + } + + return hr; +} + +HRESULT WINAPI CDrivesFolder::MapColumnToSCID(UINT column, SHCOLUMNID * pscid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +/************************************************************************ + * IMCFldr_PersistFolder2_GetClassID + */ +HRESULT WINAPI CDrivesFolder::GetClassID(CLSID *lpClassId) +{ + TRACE ("(%p)\n", this); + + if (!lpClassId) + return E_POINTER; + *lpClassId = CLSID_MyComputer; + + return S_OK; +} + +/************************************************************************ + * IMCFldr_PersistFolder2_Initialize + * + * NOTES: it makes no sense to change the pidl + */ +HRESULT WINAPI CDrivesFolder::Initialize(LPCITEMIDLIST pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + if (pidlRoot) + SHFree((LPVOID)pidlRoot); + + pidlRoot = ILClone(pidl); + return S_OK; +} + +/************************************************************************** + * IPersistFolder2_fnGetCurFolder + */ +HRESULT WINAPI CDrivesFolder::GetCurFolder(LPITEMIDLIST *pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + if (!pidl) + return E_POINTER; + *pidl = ILClone (pidlRoot); + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_mycomp.h b/reactos/dll/win32/shell32_new/shfldr_mycomp.h new file mode 100644 index 00000000000..cdc892c83eb --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_mycomp.h @@ -0,0 +1,85 @@ +/* + * Virtual Workplace folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _CDRIVESFOLDER_H_ +#define _CDRIVESFOLDER_H_ + +class CDrivesFolder : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder2 +{ +private: + /* both paths are parsible from the desktop */ + LPITEMIDLIST pidlRoot; /* absolute pidl */ + LPWSTR sName; +public: + CDrivesFolder(); + ~CDrivesFolder(); + HRESULT WINAPI FinalConstruct(); + + // IShellFolder + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + /* ShellFolder2 */ + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // IPersist + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // IPersistFolder + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IPersistFolder2 + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + +DECLARE_REGISTRY_RESOURCEID(IDR_MYCOMPUTER) +DECLARE_NOT_AGGREGATABLE(CDrivesFolder) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CDrivesFolder) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) +END_COM_MAP() +}; + +#endif // _CDRIVESFOLDER_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_mydocuments.cpp b/reactos/dll/win32/shell32_new/shfldr_mydocuments.cpp new file mode 100644 index 00000000000..f72f32c88ce --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_mydocuments.cpp @@ -0,0 +1,689 @@ +/* + * Virtual MyDocuments Folder + * + * Copyright 2007 Johannes Anderwald + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "shfldr_mydocuments.h" + +WINE_DEFAULT_DEBUG_CHANNEL (mydocs); + +/* +CFileSysEnumX should not exist. CMyDocsFolder should aggregate a CFSFolder which always +maps the contents of CSIDL_PERSONAL. Therefore, CMyDocsFolder::EnumObjects simply calls +CFSFolder::EnumObjects. +*/ + +/*********************************************************************** +* MyDocumentsfolder implementation +*/ + +class CFileSysEnumX : + public IEnumIDListImpl +{ +private: +public: + CFileSysEnumX(); + ~CFileSysEnumX(); + HRESULT WINAPI Initialize(DWORD dwFlags); + +BEGIN_COM_MAP(CFileSysEnumX) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +static const shvheader MyDocumentsSFHeader[] = { + {IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12}, + {IDS_SHV_COLUMN5, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 5} +}; + +#define MYDOCUMENTSSHELLVIEWCOLUMNS 5 + +CFileSysEnumX::CFileSysEnumX() +{ +} + +CFileSysEnumX::~CFileSysEnumX() +{ +} + +HRESULT WINAPI CFileSysEnumX::Initialize(DWORD dwFlags) +{ + WCHAR szPath[MAX_PATH]; + + if (SHGetSpecialFolderPathW(0, szPath, CSIDL_PERSONAL, FALSE) == FALSE) + return E_FAIL; + return CreateFolderEnumList(szPath, dwFlags); +} + +CMyDocsFolder::CMyDocsFolder() +{ +} + +CMyDocsFolder::~CMyDocsFolder() +{ + TRACE ("-- destroying IShellFolder(%p)\n", this); + SHFree(pidlRoot); + HeapFree(GetProcessHeap(), 0, sPathTarget); +} + +HRESULT WINAPI CMyDocsFolder::FinalConstruct() +{ + WCHAR szMyPath[MAX_PATH]; + + if (!SHGetSpecialFolderPathW(0, szMyPath, CSIDL_PERSONAL, TRUE)) + return E_UNEXPECTED; + + pidlRoot = _ILCreateMyDocuments(); /* my qualified pidl */ + sPathTarget = (LPWSTR)SHAlloc((wcslen(szMyPath) + 1) * sizeof(WCHAR)); + wcscpy(sPathTarget, szMyPath); + + return S_OK; +} + +HRESULT WINAPI CMyDocsFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + WCHAR szElement[MAX_PATH]; + LPCWSTR szNext = NULL; + LPITEMIDLIST pidlTemp = NULL; + HRESULT hr = S_OK; + CLSID clsid; + + TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", + this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + if (!lpszDisplayName || !ppidl) + return E_INVALIDARG; + + *ppidl = 0; + + if (pchEaten) + *pchEaten = 0; /* strange but like the original */ + + if (lpszDisplayName[0] == ':' && lpszDisplayName[1] == ':') + { + szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH); + TRACE ("-- element: %s\n", debugstr_w (szElement)); + CLSIDFromString (szElement + 2, &clsid); + pidlTemp = _ILCreateGuid (PT_GUID, clsid); + } + else if( (pidlTemp = SHELL32_CreatePidlFromBindCtx(pbc, lpszDisplayName)) ) + { + *ppidl = pidlTemp; + return S_OK; + } + else + { + /* it's a filesystem path on the desktop. Let a FSFolder parse it */ + + if (*lpszDisplayName) + { + WCHAR szPath[MAX_PATH]; + LPWSTR pathPtr; + + /* build a complete path to create a simple pidl */ + lstrcpynW(szPath, sPathTarget, MAX_PATH); + pathPtr = PathAddBackslashW(szPath); + if (pathPtr) + { + lstrcpynW(pathPtr, lpszDisplayName, MAX_PATH - (pathPtr - szPath)); + hr = _ILCreateFromPathW(szPath, &pidlTemp); + } + else + { + /* should never reach here, but for completeness */ + hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); + } + } + else + pidlTemp = _ILCreateMyDocuments(); + + szNext = NULL; + } + + if (SUCCEEDED(hr) && pidlTemp) + { + if (szNext && *szNext) + { + hr = SHELL32_ParseNextElement(this, hwndOwner, pbc, + &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes); + } + else + { + if (pdwAttributes && *pdwAttributes) + hr = SHELL32_GetItemAttributes(this, + pidlTemp, pdwAttributes); + } + } + + *ppidl = pidlTemp; + + TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr); + + return hr; +} + +/************************************************************************** + * ISF_MyDocuments_fnEnumObjects + */ +HRESULT WINAPI CMyDocsFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); + + if (ppEnumIDList == NULL) + return E_POINTER; + *ppEnumIDList = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize (dwFlags); + if (FAILED (hResult)) + return hResult; + *ppEnumIDList = result.Detach (); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + + return S_OK; +} + +/************************************************************************** + * ISF_MyDocuments_fnBindToObject + */ +HRESULT WINAPI CMyDocsFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", + this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + return SHELL32_BindToChild( pidlRoot, sPathTarget, pidl, riid, ppvOut ); +} + +/************************************************************************** + * ISF_MyDocuments_fnBindToStorage + */ +HRESULT WINAPI CMyDocsFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", + this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** + * ISF_MyDocuments_fnCompareIDs + */ +HRESULT WINAPI CMyDocsFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (this, lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** + * ISF_MyDocuments_fnCreateViewObject + */ +HRESULT WINAPI CMyDocsFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) +{ + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", + this, hwndOwner, shdebugstr_guid (&riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IShellView)) + { + hr = IShellView_Constructor ((IShellFolder *)this, &pShellView); + if (pShellView) + { + hr = pShellView->QueryInterface(riid, ppvOut); + pShellView->Release(); + } + } + TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut); + return hr; +} + +/************************************************************************** + * ISF_MyDocuments_fnGetAttributesOf + */ +HRESULT WINAPI CMyDocsFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut) +{ + HRESULT hr = S_OK; + static const DWORD dwMyDocumentsAttributes = + SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | SFGAO_CANCOPY | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER | SFGAO_CANRENAME | SFGAO_CANDELETE; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", + this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if(cidl == 0) { + *rgfInOut &= dwMyDocumentsAttributes; + } else { + while (cidl > 0 && *apidl) { + pdump (*apidl); + if (_ILIsMyDocuments(*apidl)) { + *rgfInOut &= dwMyDocumentsAttributes; + } else { + SHELL32_GetItemAttributes (this, *apidl, rgfInOut); + } + apidl++; + cidl--; + } + } + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + + return hr; +} + +/************************************************************************** + * ISF_MyDocuments_fnGetUIObjectOf + * + * PARAMETERS + * HWND hwndOwner, //[in ] Parent window for any output + * UINT cidl, //[in ] array size + * LPCITEMIDLIST* apidl, //[in ] simple pidl array + * REFIID riid, //[in ] Requested Interface + * UINT* prgfInOut, //[ ] reserved + * LPVOID* ppvObject) //[out] Resulting Interface + * + */ +HRESULT WINAPI CMyDocsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, + REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) +{ + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", + this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IContextMenu)) + { + hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, (IShellFolder *)this, NULL, 0, NULL, (IContextMenu**)&pObj); + } + else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1)) + { + hr = IDataObject_Constructor( hwndOwner, + pidlRoot, apidl, cidl, (IDataObject **)&pObj); + } + else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) + { + hr = this->QueryInterface (IID_IDropTarget, (LPVOID *)&pObj); + } + else if ((IsEqualIID(riid, IID_IShellLinkW) || + IsEqualIID(riid, IID_IShellLinkA)) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj); + SHFree (pidl); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + TRACE ("(%p)->hr=0x%08x\n", this, hr); + return hr; +} + +HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + HRESULT hr = S_OK; + LPWSTR pszPath; + + TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR)); + if (!pszPath) + return E_OUTOFMEMORY; + + ZeroMemory(pszPath, (MAX_PATH +1) * sizeof(WCHAR)); + + if (_ILIsMyDocuments (pidl)) + { + if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && + (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING)) + wcscpy(pszPath, sPathTarget); + else + HCR_GetClassNameW(CLSID_MyDocuments, pszPath, MAX_PATH); + TRACE("CP\n"); + } + else if (_ILIsPidlSimple (pidl)) + { + GUID const *clsid; + + if ((clsid = _ILGetGUIDPointer (pidl))) + { + if (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING) + { + int bWantsForParsing; + + /* + * We can only get a filesystem path from a shellfolder if the + * value WantsFORPARSING in CLSID\\{...}\\shellfolder exists. + * + * Exception: The MyComputer folder doesn't have this key, + * but any other filesystem backed folder it needs it. + */ + if (IsEqualIID (*clsid, CLSID_MyDocuments)) + { + bWantsForParsing = TRUE; + } + else + { + /* get the "WantsFORPARSING" flag from the registry */ + static const WCHAR clsidW[] = + { 'C','L','S','I','D','\\',0 }; + static const WCHAR shellfolderW[] = + { '\\','s','h','e','l','l','f','o','l','d','e','r',0 }; + static const WCHAR wantsForParsingW[] = + { 'W','a','n','t','s','F','o','r','P','a','r','s','i','n', + 'g',0 }; + WCHAR szRegPath[100]; + LONG r; + + wcscpy (szRegPath, clsidW); + SHELL32_GUIDToStringW (*clsid, &szRegPath[6]); + wcscat (szRegPath, shellfolderW); + r = SHGetValueW(HKEY_CLASSES_ROOT, szRegPath, + wantsForParsingW, NULL, NULL, NULL); + if (r == ERROR_SUCCESS) + bWantsForParsing = TRUE; + else + bWantsForParsing = FALSE; + } + + if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && + bWantsForParsing) + { + /* + * we need the filesystem path to the destination folder. + * Only the folder itself can know it + */ + hr = SHELL32_GetDisplayNameOfChild (this, pidl, dwFlags, + pszPath, + MAX_PATH); + TRACE("CP\n"); + } + else + { + /* parsing name like ::{...} */ + pszPath[0] = ':'; + pszPath[1] = ':'; + SHELL32_GUIDToStringW (*clsid, &pszPath[2]); + TRACE("CP\n"); + } + } + else + { + /* user friendly name */ + HCR_GetClassNameW (*clsid, pszPath, MAX_PATH); + TRACE("CP\n"); + } + } + else + { + int cLen = 0; + + /* file system folder or file rooted at the desktop */ + if ((GET_SHGDN_FOR(dwFlags) == SHGDN_FORPARSING) && + (GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER)) + { + lstrcpynW(pszPath, sPathTarget, MAX_PATH - 1); + TRACE("CP %s\n", debugstr_w(pszPath)); + } + + if (!_ILIsDesktop(pidl)) + { + PathAddBackslashW(pszPath); + cLen = wcslen(pszPath); + _ILSimpleGetTextW(pidl, pszPath + cLen, MAX_PATH - cLen); + if (!_ILIsFolder(pidl)) + { + SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags); + TRACE("CP\n"); + } + } + } + } + else + { + /* a complex pidl, let the subfolder do the work */ + hr = SHELL32_GetDisplayNameOfChild (this, pidl, dwFlags, + pszPath, MAX_PATH); + TRACE("CP\n"); + } + + if (SUCCEEDED(hr)) + { + strRet->uType = STRRET_WSTR; + strRet->pOleStr = pszPath; + } + else + CoTaskMemFree(pszPath); + + TRACE ("-- (%p)->(%s,0x%08x)\n", this, debugstr_w(strRet->pOleStr), hr); + return hr; +} + +HRESULT WINAPI CMyDocsFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, hwndOwner, pidl, + debugstr_w (lpName), dwFlags, pPidlOut); + + return E_FAIL; +} + +HRESULT WINAPI CMyDocsFolder::GetDefaultSearchGUID(GUID *pguid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CMyDocsFolder::EnumSearches(IEnumExtraSearch **ppenum) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CMyDocsFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) +{ + TRACE ("(%p)\n", this); + + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} + +HRESULT WINAPI CMyDocsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) +{ + TRACE ("(%p)\n", this); + + if (!pcsFlags || iColumn >= MYDOCUMENTSSHELLVIEWCOLUMNS) + return E_INVALIDARG; + + *pcsFlags = MyDocumentsSFHeader[iColumn].pcsFlags; + + return S_OK; +} + +HRESULT WINAPI CMyDocsFolder::GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) +{ + FIXME ("(%p)\n", this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CMyDocsFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) +{ + HRESULT hr = S_OK; + + TRACE ("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd); + + if (!psd || iColumn >= MYDOCUMENTSSHELLVIEWCOLUMNS) + return E_INVALIDARG; + + if (!pidl) + { + psd->fmt = MyDocumentsSFHeader[iColumn].fmt; + psd->cxChar = MyDocumentsSFHeader[iColumn].cxChar; + psd->str.uType = STRRET_CSTR; + LoadStringA (shell32_hInstance, MyDocumentsSFHeader[iColumn].colnameid, + psd->str.cStr, MAX_PATH); + return S_OK; + } + + /* the data from the pidl */ + psd->str.uType = STRRET_CSTR; + switch (iColumn) + { + case 0: /* name */ + hr = GetDisplayNameOf(pidl, + SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); + break; + case 1: /* size */ + _ILGetFileSize (pidl, psd->str.cStr, MAX_PATH); + break; + case 2: /* type */ + _ILGetFileType (pidl, psd->str.cStr, MAX_PATH); + break; + case 3: /* date */ + _ILGetFileDate (pidl, psd->str.cStr, MAX_PATH); + break; + case 4: /* attributes */ + _ILGetFileAttributes (pidl, psd->str.cStr, MAX_PATH); + break; + } + + return hr; +} + +HRESULT WINAPI CMyDocsFolder::MapColumnToSCID (UINT column, SHCOLUMNID *pscid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CMyDocsFolder::GetClassID(CLSID *lpClassId) +{ + static GUID const CLSID_MyDocuments = + { 0x450d8fba, 0xad25, 0x11d0, {0x98,0xa8,0x08,0x00,0x36,0x1b,0x11,0x03} }; + + TRACE ("(%p)\n", this); + + if (!lpClassId) + return E_POINTER; + + memcpy(lpClassId, &CLSID_MyDocuments, sizeof(GUID)); + + return S_OK; +} + +HRESULT WINAPI CMyDocsFolder::Initialize(LPCITEMIDLIST pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + return E_NOTIMPL; +} + +HRESULT WINAPI CMyDocsFolder::GetCurFolder(LPITEMIDLIST *pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + if (!pidl) return E_POINTER; + *pidl = ILClone (pidlRoot); + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_mydocuments.h b/reactos/dll/win32/shell32_new/shfldr_mydocuments.h new file mode 100644 index 00000000000..add9965f700 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_mydocuments.h @@ -0,0 +1,84 @@ +/* + * Virtual MyDocuments Folder + * + * Copyright 2007 Johannes Anderwald + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _SHFLDR_MYDOCUMENTS_H_ +#define _SHFLDR_MYDOCUMENTS_H_ + +class CMyDocsFolder : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder2 +{ +private: + /* both paths are parsible from the MyDocuments */ + LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */ + LPITEMIDLIST pidlRoot; /* absolute pidl */ +public: + CMyDocsFolder(); + ~CMyDocsFolder(); + HRESULT WINAPI FinalConstruct(); + + // IShellFolder + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + /* ShellFolder2 */ + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // IPersist + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // IPersistFolder + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IPersistFolder2 + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + +DECLARE_REGISTRY_RESOURCEID(IDR_MYDOCUMENTS) +DECLARE_NOT_AGGREGATABLE(CMyDocsFolder) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CMyDocsFolder) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) +END_COM_MAP() +}; + +#endif // _SHFLDR_MYDOCUMENTS_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_netplaces.cpp b/reactos/dll/win32/shell32_new/shfldr_netplaces.cpp new file mode 100644 index 00000000000..c4facd2a829 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_netplaces.cpp @@ -0,0 +1,436 @@ +/* + * Network Places (Neighbourhood) folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2003 Mike McCormack for Codeweavers + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "shfldr_netplaces.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/*********************************************************************** +* IShellFolder implementation +*/ + +static shvheader NetworkPlacesSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN13, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN_WORKGROUP, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_NETWORKLOCATION, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15} +}; + +#define COLUMN_NAME 0 +#define COLUMN_CATEGORY 1 +#define COLUMN_WORKGROUP 2 +#define COLUMN_NETLOCATION 3 + +#define NETWORKPLACESSHELLVIEWCOLUMNS 4 + +CNetFolder::CNetFolder() +{ +} + +CNetFolder::~CNetFolder() +{ + TRACE("-- destroying IShellFolder(%p)\n", this); + SHFree(pidlRoot); +} + +HRESULT WINAPI CNetFolder::FinalConstruct() +{ + pidlRoot = _ILCreateNetHood(); /* my qualified pidl */ + if (pidlRoot == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +/************************************************************************** +* ISF_NetworkPlaces_fnParseDisplayName +*/ +HRESULT WINAPI CNetFolder::ParseDisplayName(HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + HRESULT hr = E_UNEXPECTED; + + TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", this, + hwndOwner, pbcReserved, lpszDisplayName, debugstr_w (lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + *ppidl = 0; + if (pchEaten) + *pchEaten = 0; /* strange but like the original */ + + TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr); + + return hr; +} + +/************************************************************************** +* ISF_NetworkPlaces_fnEnumObjects +*/ +HRESULT WINAPI CNetFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) +{ + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, + hwndOwner, dwFlags, ppEnumIDList); + + *ppEnumIDList = NULL; //IEnumIDList_Constructor(); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + return S_FALSE; + // return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY; +} + +/************************************************************************** +* ISF_NetworkPlaces_fnBindToObject +*/ +HRESULT WINAPI CNetFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this, + pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + return SHELL32_BindToChild (pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** +* ISF_NetworkPlaces_fnBindToStorage +*/ +HRESULT WINAPI CNetFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) +{ + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", this, + pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** +* ISF_NetworkPlaces_fnCompareIDs +*/ + +HRESULT WINAPI CNetFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs(this, lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** +* ISF_NetworkPlaces_fnCreateViewObject +*/ +HRESULT WINAPI CNetFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) +{ + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this, + hwndOwner, shdebugstr_guid (&riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IShellView)) + { + hr = IShellView_Constructor ((IShellFolder *)this, &pShellView); + if (pShellView) + { + hr = pShellView->QueryInterface(riid, ppvOut); + pShellView->Release(); + } + } + TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut); + return hr; +} + +/************************************************************************** +* ISF_NetworkPlaces_fnGetAttributesOf +*/ +HRESULT WINAPI CNetFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut) +{ + static const DWORD dwNethoodAttributes = + SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER | SFGAO_CANRENAME | SFGAO_CANDELETE; + HRESULT hr = S_OK; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", this, + cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if(cidl == 0) { + *rgfInOut = dwNethoodAttributes; + } + else + { + while (cidl > 0 && *apidl) + { + pdump (*apidl); + SHELL32_GetItemAttributes (this, *apidl, rgfInOut); + apidl++; + cidl--; + } + } + + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + return hr; +} + +/************************************************************************** +* ISF_NetworkPlaces_fnGetUIObjectOf +* +* PARAMETERS +* hwndOwner [in] Parent window for any output +* cidl [in] array size +* apidl [in] simple pidl array +* riid [in] Requested Interface +* prgfInOut [ ] reserved +* ppvObject [out] Resulting Interface +* +*/ +HRESULT WINAPI CNetFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, + UINT * prgfInOut, LPVOID * ppvOut) +{ + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", this, + hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IContextMenu) && (cidl >= 1)) + { + hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)this, NULL, 0, NULL, (IContextMenu**)&pObj); + } + else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1)) + { + hr = IDataObject_Constructor (hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj); + } + else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) + { + hr = this->QueryInterface(IID_IDropTarget, (LPVOID *) & pObj); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + TRACE ("(%p)->hr=0x%08x\n", this, hr); + return hr; +} + +/************************************************************************** +* ISF_NetworkPlaces_fnGetDisplayNameOf +* +*/ +HRESULT WINAPI CNetFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + FIXME ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + return E_NOTIMPL; +} + +/************************************************************************** +* ISF_NetworkPlaces_fnSetNameOf +* Changes the name of a file object or subfolder, possibly changing its item +* identifier in the process. +* +* PARAMETERS +* hwndOwner [in] Owner window for output +* pidl [in] simple pidl of item to change +* lpszName [in] the items new display name +* dwFlags [in] SHGNO formatting flags +* ppidlOut [out] simple pidl returned +*/ +HRESULT WINAPI CNetFolder::SetNameOf (HWND hwndOwner, LPCITEMIDLIST pidl, /*simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, + hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut); + return E_FAIL; +} + +HRESULT WINAPI CNetFolder::GetDefaultSearchGUID(GUID *pguid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CNetFolder::EnumSearches(IEnumExtraSearch ** ppenum) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CNetFolder::GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *pDisplay) +{ + TRACE ("(%p)\n", this); + + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} + +HRESULT WINAPI CNetFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) +{ + TRACE ("(%p)\n", this); + + if (!pcsFlags || iColumn >= NETWORKPLACESSHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = NetworkPlacesSFHeader[iColumn].pcsFlags; + return S_OK; +} + +HRESULT WINAPI CNetFolder::GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CNetFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) +{ + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + + if (iColumn >= NETWORKPLACESSHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = NetworkPlacesSFHeader[iColumn].fmt; + psd->cxChar = NetworkPlacesSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, NetworkPlacesSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.pOleStr); + + return hr; + } + + if (iColumn == COLUMN_NAME) + return GetDisplayNameOf(pidl, SHGDN_NORMAL, &psd->str); + + FIXME ("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd); + + return E_NOTIMPL; +} + +HRESULT WINAPI CNetFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid) +{ + FIXME ("(%p)\n", this); + + return E_NOTIMPL; +} + +/************************************************************************ + * INPFldr_PersistFolder2_GetClassID + */ +HRESULT WINAPI CNetFolder::GetClassID(CLSID *lpClassId) +{ + TRACE ("(%p)\n", this); + + if (!lpClassId) + return E_POINTER; + + *lpClassId = CLSID_NetworkPlaces; + + return S_OK; +} + +/************************************************************************ + * INPFldr_PersistFolder2_Initialize + * + * NOTES: it makes no sense to change the pidl + */ +HRESULT WINAPI CNetFolder::Initialize(LPCITEMIDLIST pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + return E_NOTIMPL; +} + +/************************************************************************** + * IPersistFolder2_fnGetCurFolder + */ +HRESULT WINAPI CNetFolder::GetCurFolder(LPITEMIDLIST *pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + if (!pidl) + return E_POINTER; + + *pidl = ILClone (pidlRoot); + + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_netplaces.h b/reactos/dll/win32/shell32_new/shfldr_netplaces.h new file mode 100644 index 00000000000..8f9cc477c7c --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_netplaces.h @@ -0,0 +1,85 @@ +/* + * Network Places (Neighbourhood) folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2003 Mike McCormack for Codeweavers + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _SHFLDR_NETPLACES_H_ +#define _SHFLDR_NETPLACES_H_ + +class CNetFolder : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder2 +{ +private: + /* both paths are parsible from the desktop */ + LPITEMIDLIST pidlRoot; /* absolute pidl */ +public: + CNetFolder(); + ~CNetFolder(); + HRESULT WINAPI FinalConstruct(); + + // IShellFolder + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + /* ShellFolder2 */ + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // IPersist + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // IPersistFolder + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IPersistFolder2 + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + +DECLARE_REGISTRY_RESOURCEID(IDR_NETWORKPLACES) +DECLARE_NOT_AGGREGATABLE(CNetFolder) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CNetFolder) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) +END_COM_MAP() +}; + +#endif // _SHFLDR_NETPLACES_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_printers.cpp b/reactos/dll/win32/shell32_new/shfldr_printers.cpp new file mode 100644 index 00000000000..b04601b8b54 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_printers.cpp @@ -0,0 +1,731 @@ +/* + * Virtual Printers Folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2005 Huw Davies + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include "shfldr_printers.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/*********************************************************************** + * Printers_IExtractIconW implementation + */ +class IExtractIconWImpl : + public CComObjectRootEx, + public IExtractIconW, + public IExtractIconA +{ +private: + LPITEMIDLIST pidl; +public: + IExtractIconWImpl(); + ~IExtractIconWImpl(); + HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IExtractIconW + virtual HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags); + virtual HRESULT STDMETHODCALLTYPE Extract(LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); + + // IExtractIconA + virtual HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, LPSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags); + virtual HRESULT STDMETHODCALLTYPE Extract(LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); + +BEGIN_COM_MAP(IExtractIconWImpl) + COM_INTERFACE_ENTRY_IID(IID_IExtractIconW, IExtractIconW) + COM_INTERFACE_ENTRY_IID(IID_IExtractIconA, IExtractIconA) +END_COM_MAP() +}; + +static shvheader PrinterSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_DOCUMENTS , SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_STATUS, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_LOCATION, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_MODEL, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15} +}; + +#define COLUMN_NAME 0 +#define COLUMN_DOCUMENTS 1 +#define COLUMN_STATUS 2 +#define COLUMN_COMMENTS 3 +#define COLUMN_LOCATION 4 +#define COLUMN_MODEL 5 + + +#define PrinterSHELLVIEWCOLUMNS (6) + +IExtractIconWImpl::IExtractIconWImpl() +{ + pidl = NULL; +} + +IExtractIconWImpl::~IExtractIconWImpl() +{ + TRACE(" destroying IExtractIcon(%p)\n", this); + SHFree(pidl); +} + +HRESULT WINAPI IExtractIconWImpl::Initialize(LPCITEMIDLIST pidl) +{ + pidl = ILClone(pidl); + + pdump(pidl); + return S_OK; +} + +/************************************************************************** + * IExtractIconW_GetIconLocation + * + * mapping filetype to icon + */ +HRESULT WINAPI IExtractIconWImpl::GetIconLocation(UINT uFlags, /* GIL_ flags */ + LPWSTR szIconFile, + UINT cchMax, + int *piIndex, + UINT *pwFlags) /* returned GIL_ flags */ +{ + TRACE("(%p) (flags=%u %p %u %p %p)\n", this, uFlags, szIconFile, cchMax, piIndex, pwFlags); + + if (pwFlags) + *pwFlags = 0; + + lstrcpynW(szIconFile, swShell32Name, cchMax); + *piIndex = -IDI_SHELL_PRINTERS_FOLDER; /* FIXME: other icons for default, network, print to file */ + + TRACE("-- %s %x\n", debugstr_w(szIconFile), *piIndex); + return NOERROR; +} + +/************************************************************************** + * IExtractIconW_Extract + */ +HRESULT WINAPI IExtractIconWImpl::Extract(LPCWSTR pszFile, + UINT nIconIndex, HICON *phiconLarge, + HICON *phiconSmall, UINT nIconSize) +{ + int index; + + FIXME("(%p) (file=%p index=%d %p %p size=%x) semi-stub\n", this, debugstr_w(pszFile), + (signed)nIconIndex, phiconLarge, phiconSmall, nIconSize); + + index = SIC_GetIconIndex(pszFile, nIconIndex, 0); + + if (phiconLarge) + *phiconLarge = ImageList_GetIcon(ShellBigIconList, index, ILD_TRANSPARENT); + + if (phiconSmall) + *phiconSmall = ImageList_GetIcon(ShellSmallIconList, index, ILD_TRANSPARENT); + + return S_OK; +} + +/************************************************************************** + * IExtractIconA_GetIconLocation + */ +HRESULT WINAPI IExtractIconWImpl::GetIconLocation(UINT uFlags, + LPSTR szIconFile, + UINT cchMax, + int * piIndex, + UINT * pwFlags) +{ + HRESULT ret; + LPWSTR lpwstrFile = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, cchMax * sizeof(WCHAR)); + + TRACE("(%p) (flags=%u %p %u %p %p)\n", this, uFlags, szIconFile, cchMax, piIndex, pwFlags); + + ret = GetIconLocation(uFlags, lpwstrFile, cchMax, piIndex, pwFlags); + WideCharToMultiByte(CP_ACP, 0, lpwstrFile, -1, szIconFile, cchMax, NULL, NULL); + HeapFree(GetProcessHeap(), 0, lpwstrFile); + + TRACE("-- %s %x\n", szIconFile, *piIndex); + return ret; +} +/************************************************************************** + * IExtractIconA_Extract + */ +HRESULT WINAPI IExtractIconWImpl::Extract(LPCSTR pszFile, + UINT nIconIndex, HICON *phiconLarge, + HICON *phiconSmall, UINT nIconSize) +{ + HRESULT ret; + INT len = MultiByteToWideChar(CP_ACP, 0, pszFile, -1, NULL, 0); + LPWSTR lpwstrFile = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + + TRACE("(%p) (file=%p index=%u %p %p size=%u)\n", this, pszFile, nIconIndex, phiconLarge, phiconSmall, nIconSize); + + MultiByteToWideChar(CP_ACP, 0, pszFile, -1, lpwstrFile, len); + ret = Extract(lpwstrFile, nIconIndex, phiconLarge, phiconSmall, nIconSize); + HeapFree(GetProcessHeap(), 0, lpwstrFile); + return ret; +} + +/************************************************************************** + * IExtractIcon_Constructor + */ +static HRESULT WINAPI IEI_Printers_Constructor(LPCITEMIDLIST pidl, REFIID riid, IUnknown **ppv) +{ + CComObject *theExtractor; + CComPtr result; + HRESULT hResult; + + if (ppv == NULL) + return E_POINTER; + *ppv = NULL; + ATLTRY (theExtractor = new CComObject); + if (theExtractor == NULL) + return E_OUTOFMEMORY; + hResult = theExtractor->QueryInterface (riid, (void **)&result); + if (FAILED (hResult)) + { + delete theExtractor; + return hResult; + } + hResult = theExtractor->Initialize (pidl); + if (FAILED (hResult)) + return hResult; + *ppv = result.Detach (); + return S_OK; +} + +/*********************************************************************** + * Printers folder implementation + */ + +class CPrintersEnum : + public IEnumIDListImpl +{ +private: +public: + CPrintersEnum(); + ~CPrintersEnum(); + HRESULT WINAPI Initialize(HWND hwndOwner, DWORD dwFlags); + BOOL CreatePrintersEnumList(DWORD dwFlags); + +BEGIN_COM_MAP(CPrintersEnum) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +CPrintersEnum::CPrintersEnum() +{ +} + +CPrintersEnum::~CPrintersEnum() +{ +} + +HRESULT WINAPI CPrintersEnum::Initialize(HWND hwndOwner, DWORD dwFlags) +{ + if (CreatePrintersEnumList(dwFlags) == FALSE) + return E_FAIL; + return S_OK; +} + +static LPITEMIDLIST _ILCreatePrinterItem(PRINTER_INFO_4W *pi) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLPrinterStruct * p; + int size0 = (char*)&tmp.u.cprinter.szName-(char*)&tmp.u.cprinter; + int size = size0; + + tmp.type = 0x00; + tmp.u.cprinter.dummy = 0xFF; + if (pi->pPrinterName) + tmp.u.cprinter.offsServer = wcslen(pi->pPrinterName) + 1; + else + tmp.u.cprinter.offsServer = 1; + + size += tmp.u.cprinter.offsServer * sizeof(WCHAR); + if (pi->pServerName) + size += ( + wcslen(pi->pServerName) + 1) * sizeof(WCHAR); + else + size += sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.cprinter; + + p->Attributes = pi->Attributes; + if (pi->pPrinterName) + wcscpy(p->szName, pi->pPrinterName); + else + p->szName[0] = L'\0'; + + if (pi->pServerName) + wcscpy(p->szName + p->offsServer, pi->pServerName); + else + p->szName[p->offsServer] = L'\0'; + + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +/************************************************************************** + * CreatePrintersEnumList() + */ +BOOL CPrintersEnum::CreatePrintersEnumList(DWORD dwFlags) +{ + BOOL ret = TRUE; + + TRACE("(%p)->(flags=0x%08lx) \n", this, dwFlags); + + /* enumerate the folders */ + if (dwFlags & SHCONTF_NONFOLDERS) + { + DWORD needed = 0, num = 0, i; + PRINTER_INFO_4W *pi; + + EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, NULL, 0, &needed, &num); + if (!needed) + return ret; + + pi = (PRINTER_INFO_4W *)HeapAlloc(GetProcessHeap(), 0, needed); + if(!EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, (LPBYTE)pi, needed, &needed, &num)) { + HeapFree(GetProcessHeap(), 0, pi); + return FALSE; + } + + for(i = 0; i < num; i++) { + LPITEMIDLIST pidl = _ILCreatePrinterItem(&pi[i]); + if (pidl) + { + if (!AddToEnumList(pidl)) + SHFree(pidl); + } + } + HeapFree(GetProcessHeap(), 0, pi); + } + return ret; +} + +CPrinterFolder::CPrinterFolder() +{ +} + +CPrinterFolder::~CPrinterFolder() +{ + TRACE("-- destroying IShellFolder(%p)\n", this); + if (pidlRoot) + SHFree(pidlRoot); +} + +HRESULT WINAPI CPrinterFolder::FinalConstruct() +{ + pidlRoot = _ILCreatePrinters(); /* my qualified pidl */ + if (pidlRoot == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +/************************************************************************** + * ISF_Printers_fnParseDisplayName + * + * This is E_NOTIMPL in Windows too. + */ +HRESULT WINAPI CPrinterFolder::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", + this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + *ppidl = 0; + if (pchEaten) + *pchEaten = 0; + + return E_NOTIMPL; +} + +static PIDLPrinterStruct * _ILGetPrinterStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLPrinterStruct*)&(pdata->u.cfont); + + return NULL; +} + +/************************************************************************** + * ISF_Printers_fnEnumObjects + */ +HRESULT WINAPI CPrinterFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); + + if (ppEnumIDList == NULL) + return E_POINTER; + *ppEnumIDList = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize (hwndOwner, dwFlags); + if (FAILED (hResult)) + return hResult; + *ppEnumIDList = result.Detach (); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + + return S_OK; +} + +/************************************************************************** + * ISF_Printers_fnBindToObject + */ +HRESULT WINAPI CPrinterFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this, + pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + return SHELL32_BindToChild (pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** + * ISF_Printers_fnBindToStorage + */ +HRESULT WINAPI CPrinterFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", + this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** + * ISF_Printers_fnCompareIDs + */ +HRESULT WINAPI CPrinterFolder::CompareIDs (LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (this, lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** + * ISF_Printers_fnCreateViewObject + */ +HRESULT WINAPI CPrinterFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID * ppvOut) +{ + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this, + hwndOwner, shdebugstr_guid (&riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IShellView)) + { + hr = IShellView_Constructor ((IShellFolder *)this, &pShellView); + if (pShellView) + { + hr = pShellView->QueryInterface(riid, ppvOut); + pShellView->Release(); + } + } + TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut); + return hr; +} + +/************************************************************************** + * ISF_Printers_fnGetAttributesOf + */ +HRESULT WINAPI CPrinterFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut) +{ + static const DWORD dwPrintersAttributes = + SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_CANRENAME | SFGAO_CANDELETE; + HRESULT hr = S_OK; + + FIXME ("(%p)->(cidl=%d apidl=%p mask=0x%08lx): stub\n", + this, cidl, apidl, *rgfInOut); + + *rgfInOut &= dwPrintersAttributes; + + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + return hr; +} + +/************************************************************************** + * ISF_Printers_fnGetUIObjectOf + * + * PARAMETERS + * HWND hwndOwner, //[in ] Parent window for any output + * UINT cidl, //[in ] array size + * LPCITEMIDLIST* apidl, //[in ] simple pidl array + * REFIID riid, //[in ] Requested Interface + * UINT* prgfInOut, //[ ] reserved + * LPVOID* ppvObject) //[out] Resulting Interface + * + */ +HRESULT WINAPI CPrinterFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, + REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) +{ + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", + this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if ((IsEqualIID (riid, IID_IExtractIconA) || IsEqualIID(riid, IID_IExtractIconW)) && (cidl == 1)) + { + hr = IEI_Printers_Constructor(apidl[0], riid, &pObj); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + TRACE ("(%p)->hr=0x%08lx\n", this, hr); + return hr; +} + +/************************************************************************** + * ISF_Printers_fnGetDisplayNameOf + * + */ +HRESULT WINAPI CPrinterFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + LPWSTR pszName; + PIDLPrinterStruct * p; + + TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", this, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + { + WARN("no strRet\n"); + return E_INVALIDARG; + } + + if (_ILIsPrinter(pidl)) + { + pszName = (LPWSTR)CoTaskMemAlloc(MAX_PATH * sizeof(WCHAR)); + if (!pszName) + return E_OUTOFMEMORY; + + if (LoadStringW(shell32_hInstance, IDS_PRINTERS, pszName, MAX_PATH)) + { + pszName[MAX_PATH-1] = L'\0'; + strRet->uType = STRRET_WSTR; + strRet->pOleStr = pszName; + return S_OK; + } + CoTaskMemFree(pszName); + return E_FAIL; + } + + p = _ILGetPrinterStruct(pidl); + if (!p) + { + WARN("no printer struct\n"); + return E_INVALIDARG; + } + strRet->pOleStr = (LPWSTR)SHAlloc(p->offsServer * sizeof(WCHAR)); + if (!strRet->pOleStr) + return E_OUTOFMEMORY; + + memcpy((LPVOID)strRet->pOleStr, (LPVOID)p->szName, p->offsServer * sizeof(WCHAR)); + TRACE("ret %s\n", debugstr_w(strRet->pOleStr)); + + return S_OK; +} + +/************************************************************************** + * ISF_Printers_fnSetNameOf + * Changes the name of a file object or subfolder, possibly changing its item + * identifier in the process. + * + * PARAMETERS + * HWND hwndOwner, //[in ] Owner window for output + * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change + * LPCOLESTR lpszName, //[in ] the items new display name + * DWORD dwFlags, //[in ] SHGNO formatting flags + * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned + */ +HRESULT WINAPI CPrinterFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", this, hwndOwner, pidl, + debugstr_w (lpName), dwFlags, pPidlOut); + + return E_FAIL; +} + +HRESULT WINAPI CPrinterFolder::GetDefaultSearchGUID(GUID *pguid) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CPrinterFolder::EnumSearches (IEnumExtraSearch **ppenum) +{ + FIXME ("(%p)\n", this); + return E_NOTIMPL; +} + +HRESULT WINAPI CPrinterFolder::GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *pDisplay) +{ + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} + +HRESULT WINAPI CPrinterFolder::GetDefaultColumnState (UINT iColumn, DWORD *pcsFlags) +{ + if (!pcsFlags || iColumn >= PrinterSHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = PrinterSFHeader[iColumn].pcsFlags; + return S_OK; + +} + +HRESULT WINAPI CPrinterFolder::GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) +{ + FIXME ("(%p): stub\n", this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CPrinterFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) +{ + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + + TRACE("(%p)->(%p %i %p): stub\n", this, pidl, iColumn, psd); + + if (iColumn >= PrinterSHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = PrinterSFHeader[iColumn].fmt; + psd->cxChar = PrinterSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, PrinterSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.pOleStr); + + return hr; + } + + if (iColumn == COLUMN_NAME) + { + psd->str.uType = STRRET_WSTR; + return GetDisplayNameOf(pidl, SHGDN_NORMAL, &psd->str); + } + + psd->str.uType = STRRET_CSTR; + psd->str.cStr[0] = '\0'; + + return E_NOTIMPL; +} + +HRESULT WINAPI CPrinterFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid) +{ + FIXME ("(%p): stub\n", this); + return E_NOTIMPL; +} + +/************************************************************************ + * IPF_Printers_GetClassID + */ +HRESULT WINAPI CPrinterFolder::GetClassID (CLSID *lpClassId) +{ + TRACE ("(%p)\n", this); + + *lpClassId = CLSID_Printers; + + return S_OK; +} + +/************************************************************************ + * IPF_Printers_Initialize + * + */ +HRESULT WINAPI CPrinterFolder::Initialize(LPCITEMIDLIST pidl) +{ + if (pidlRoot) + SHFree((LPVOID)pidlRoot); + + pidlRoot = ILClone(pidl); + return S_OK; +} + +/************************************************************************** + * IPF_Printers_fnGetCurFolder + */ +HRESULT WINAPI CPrinterFolder::GetCurFolder(LPITEMIDLIST * pidl) +{ + TRACE ("(%p)->(%p)\n", this, pidl); + + *pidl = ILClone (pidlRoot); + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_printers.h b/reactos/dll/win32/shell32_new/shfldr_printers.h new file mode 100644 index 00000000000..174b698d977 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_printers.h @@ -0,0 +1,88 @@ +/* + * Virtual Printers Folder + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * Copyright 2005 Huw Davies + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _SHFLDR_PRINTERS_H_ +#define _SHFLDR_PRINTERS_H_ + +class CPrinterFolder : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder2 +{ +private: + CLSID *pclsid; + + LPITEMIDLIST pidlRoot; /* absolute pidl */ + + int dwAttributes; /* attributes returned by GetAttributesOf FIXME: use it */ +public: + CPrinterFolder(); + ~CPrinterFolder(); + HRESULT WINAPI FinalConstruct(); + + // IShellFolder + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + /* ShellFolder2 */ + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // IPersist + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // IPersistFolder + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IPersistFolder2 + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + +DECLARE_REGISTRY_RESOURCEID(IDR_PRINTERS) +DECLARE_NOT_AGGREGATABLE(CPrinterFolder) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CPrinterFolder) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) +END_COM_MAP() +}; + +#endif // _SHFLDR_PRINTERS_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_recyclebin.cpp b/reactos/dll/win32/shell32_new/shfldr_recyclebin.cpp new file mode 100644 index 00000000000..d0c39eb13a2 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_recyclebin.cpp @@ -0,0 +1,1419 @@ +/* + * Trash virtual folder support. The trashing engine is implemented in trash.c + * + * Copyright (C) 2006 Mikolaj Zalewski + * Copyright (C) 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define MAX_PROPERTY_SHEET_PAGE 32 + +#include +#include +#include +#include +#include +#include "shfldr_recyclebin.h" + +WINE_DEFAULT_DEBUG_CHANNEL(CBitBucket); + +typedef struct +{ + int column_name_id; + const GUID *fmtId; + DWORD pid; + int pcsFlags; + int fmt; + int cxChars; +} columninfo; + +static const columninfo CBitBucketColumns[] = +{ + {IDS_SHV_COLUMN1, &FMTID_Storage, PID_STG_NAME, SHCOLSTATE_TYPE_STR|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 30}, + {IDS_SHV_COLUMN_DELFROM, &FMTID_Displaced, PID_DISPLACED_FROM, SHCOLSTATE_TYPE_STR|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 30}, + {IDS_SHV_COLUMN_DELDATE, &FMTID_Displaced, PID_DISPLACED_DATE, SHCOLSTATE_TYPE_DATE|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 20}, + {IDS_SHV_COLUMN2, &FMTID_Storage, PID_STG_SIZE, SHCOLSTATE_TYPE_INT|SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 20}, + {IDS_SHV_COLUMN3, &FMTID_Storage, PID_STG_STORAGETYPE,SHCOLSTATE_TYPE_INT|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 20}, + {IDS_SHV_COLUMN4, &FMTID_Storage, PID_STG_WRITETIME, SHCOLSTATE_TYPE_DATE|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 20}, +/* {"creation time", &FMTID_Storage, PID_STG_CREATETIME, SHCOLSTATE_TYPE_DATE, LVCFMT_LEFT, 20}, */ +/* {"attribs", &FMTID_Storage, PID_STG_ATTRIBUTES, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 20}, */ +}; + +#define COLUMN_NAME 0 +#define COLUMN_DELFROM 1 +#define COLUMN_DATEDEL 2 +#define COLUMN_SIZE 3 +#define COLUMN_TYPE 4 +#define COLUMN_MTIME 5 + +#define COLUMNS_COUNT 6 + +/* + * Recycle Bin folder + */ + +class CBitBucketEnum : + public IEnumIDListImpl +{ +private: +public: + CBitBucketEnum(); + ~CBitBucketEnum(); + HRESULT WINAPI Initialize(DWORD dwFlags); + static BOOL WINAPI CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile); + BOOL WINAPI CBEnumBitBucket(IN HANDLE hDeletedFile); + +BEGIN_COM_MAP(CBitBucketEnum) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) +END_COM_MAP() +}; + +class CCBitBucketBackgroundContextMenu : + public CComObjectRootEx, + public IContextMenu2 +{ +private: + INT iIdEmpty; +public: + CCBitBucketBackgroundContextMenu(); + ~CCBitBucketBackgroundContextMenu(); + + // IContextMenu + virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); + virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); + virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen); + + // IContextMenu2 + virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); + +BEGIN_COM_MAP(CCBitBucketBackgroundContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2) +END_COM_MAP() +}; + +class CCBitBucketItemContextMenu : + public CComObjectRootEx, + public IContextMenu2 +{ +private: + LPITEMIDLIST apidl; +public: + CCBitBucketItemContextMenu(); + ~CCBitBucketItemContextMenu(); + HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IContextMenu + virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); + virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); + virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen); + + // IContextMenu2 + virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); + +BEGIN_COM_MAP(CCBitBucketItemContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2) +END_COM_MAP() +}; + +typedef struct +{ + PIDLRecycleStruct *pFileDetails; + HANDLE hDeletedFile; + BOOL bFound; +}SEARCH_CONTEXT, *PSEARCH_CONTEXT; + +typedef struct +{ + DWORD dwNukeOnDelete; + DWORD dwSerial; + DWORD dwMaxCapacity; +}DRIVE_ITEM_CONTEXT, *PDRIVE_ITEM_CONTEXT; + +BOOL WINAPI CBSearchBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) +{ + PSEARCH_CONTEXT pContext = (PSEARCH_CONTEXT)Context; + + PDELETED_FILE_DETAILS_W pFileDetails; + DWORD dwSize; + BOOL ret; + + if (!GetDeletedFileDetailsW(hDeletedFile, + 0, + NULL, + &dwSize) && + GetLastError() != ERROR_INSUFFICIENT_BUFFER) + { + ERR("GetDeletedFileDetailsW failed\n"); + return FALSE; + } + + pFileDetails = (DELETED_FILE_DETAILS_W *)SHAlloc(dwSize); + if (!pFileDetails) + { + ERR("No memory\n"); + return FALSE; + } + + if (!GetDeletedFileDetailsW(hDeletedFile, + dwSize, + pFileDetails, + NULL)) + { + ERR("GetDeletedFileDetailsW failed\n"); + SHFree(pFileDetails); + return FALSE; + } + + ret = memcmp(pFileDetails, pContext->pFileDetails, dwSize); + if (!ret) + { + pContext->hDeletedFile = hDeletedFile; + pContext->bFound = TRUE; + } + else + CloseRecycleBinHandle(hDeletedFile); + + SHFree(pFileDetails); + return ret; +} + +static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLRecycleStruct*)&(pdata->u.crecycle); + + return NULL; +} + +CBitBucketEnum::CBitBucketEnum() +{ +} + +CBitBucketEnum::~CBitBucketEnum() +{ +} + +HRESULT WINAPI CBitBucketEnum::Initialize(DWORD dwFlags) +{ + static LPCWSTR szDrive = L"C:\\"; + + if (dwFlags & SHCONTF_NONFOLDERS) + { + TRACE("Starting Enumeration\n"); + + if (!EnumerateRecycleBinW(szDrive /* FIXME */ , CBEnumBitBucket, (PVOID)this)) + { + WARN("Error: EnumerateCBitBucketW failed\n"); + return E_FAIL; + } + } + else + { + // do nothing + } + return S_OK; +} + +static LPITEMIDLIST _ILCreateRecycleItem(PDELETED_FILE_DETAILS_W pFileDetails) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLRecycleStruct * p; + int size0 = (char*)&tmp.u.crecycle.szName-(char*)&tmp.u.crecycle; + int size = size0; + + tmp.type = 0x00; + size += (wcslen(pFileDetails->FileName) + 1) * sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.crecycle; + RtlCopyMemory(p, pFileDetails, sizeof(DELETED_FILE_DETAILS_W)); + wcscpy(p->szName, pFileDetails->FileName); + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +BOOL WINAPI CBitBucketEnum::CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) +{ + return ((CBitBucketEnum *)Context)->CBEnumBitBucket(hDeletedFile); +} + +BOOL WINAPI CBitBucketEnum::CBEnumBitBucket(IN HANDLE hDeletedFile) +{ + PDELETED_FILE_DETAILS_W pFileDetails; + DWORD dwSize; + LPITEMIDLIST pidl = NULL; + BOOL ret; + + if (!GetDeletedFileDetailsW(hDeletedFile, + 0, + NULL, + &dwSize) && + GetLastError() != ERROR_INSUFFICIENT_BUFFER) + { + ERR("GetDeletedFileDetailsW failed\n"); + return FALSE; + } + + pFileDetails = (DELETED_FILE_DETAILS_W *)SHAlloc(dwSize); + if (!pFileDetails) + { + ERR("No memory\n"); + return FALSE; + } + + if (!GetDeletedFileDetailsW(hDeletedFile, + dwSize, + pFileDetails, + NULL)) + { + ERR("GetDeletedFileDetailsW failed\n"); + SHFree(pFileDetails); + return FALSE; + } + + pidl = _ILCreateRecycleItem(pFileDetails); + if (!pidl) + { + SHFree(pFileDetails); + return FALSE; + } + + ret = AddToEnumList(pidl); + + if (!ret) + SHFree(pidl); + SHFree(pFileDetails); + TRACE("Returning %d\n", ret); + CloseRecycleBinHandle(hDeletedFile); + return ret; +} + +/************************************************************************* + * BitBucket context menu + * + */ + +CCBitBucketBackgroundContextMenu::CCBitBucketBackgroundContextMenu() +{ + iIdEmpty = 0; +} + +CCBitBucketBackgroundContextMenu::~CCBitBucketBackgroundContextMenu() +{ +} + +HRESULT WINAPI CCBitBucketBackgroundContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) +{ + WCHAR szBuffer[100]; + MENUITEMINFOW mii; + int id = 1; + + TRACE("%p %p %u %u %u %u\n", this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags ); + + if (!hMenu) + return E_INVALIDARG; + + memset(&mii, 0, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; + mii.fState = MFS_ENABLED; + szBuffer[0] = L'\0'; + LoadStringW(shell32_hInstance, IDS_EMPTY_BITBUCKET, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)); + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + mii.dwTypeData = szBuffer; + mii.cch = wcslen( mii.dwTypeData ); + mii.wID = idCmdFirst + id++; + mii.fType = MFT_STRING; + iIdEmpty = 1; + + if (!InsertMenuItemW(hMenu, indexMenu, TRUE, &mii)) + return E_FAIL; + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, id); +} + +HRESULT WINAPI CCBitBucketBackgroundContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) +{ + HRESULT hr; + LPSHELLBROWSER lpSB; + LPSHELLVIEW lpSV = NULL; + + TRACE("%p %p verb %p\n", this, lpcmi, lpcmi->lpVerb); + + if (LOWORD(lpcmi->lpVerb) == iIdEmpty) + { + // FIXME + // path & flags + hr = SHEmptyRecycleBinW(lpcmi->hwnd, L"C:\\", 0); + TRACE("result %x\n", hr); + if (hr != S_OK) + return hr; + + lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER, 0, 0); + if (lpSB && SUCCEEDED(lpSB->QueryActiveShellView(&lpSV))) + lpSV->Refresh(); + } + return S_OK; +} + +HRESULT WINAPI CCBitBucketBackgroundContextMenu::GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) +{ + FIXME("%p %lu %u %p %p %u\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + return E_NOTIMPL; +} + +HRESULT WINAPI CCBitBucketBackgroundContextMenu::HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + TRACE("CBitBucket_IContextMenu2Item_IContextMenu2Folder_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n", this, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + +static HRESULT WINAPI CBitBucketBackgroundContextMenuConstructor(REFIID riid, LPVOID *ppv) +{ + CComObject *theMenu; + CComPtr result; + HRESULT hResult; + + TRACE("%s\n", shdebugstr_guid(&riid)); + + if (ppv == NULL) + return E_POINTER; + *ppv = NULL; + ATLTRY(theMenu = new CComObject); + if (theMenu == NULL) + return E_OUTOFMEMORY; + hResult = theMenu->QueryInterface(riid, (void **)&result); + if (FAILED(hResult)) + { + delete theMenu; + return hResult; + } + *ppv = result.Detach(); + TRACE ("--(%p)\n", *ppv); + return S_OK; +} + +/************************************************************************** +* IContextMenu2 Bitbucket Item Implementation +*/ + +CCBitBucketItemContextMenu::CCBitBucketItemContextMenu() +{ + apidl = NULL; +} + +CCBitBucketItemContextMenu::~CCBitBucketItemContextMenu() +{ + ILFree(apidl); +} + +HRESULT WINAPI CCBitBucketItemContextMenu::Initialize(LPCITEMIDLIST pidl) +{ + apidl = ILClone(pidl); + if (apidl == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +HRESULT WINAPI CCBitBucketItemContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) +{ + WCHAR szBuffer[30] = {0}; + ULONG Count = 1; + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringW(shell32_hInstance, IDS_RESTORE, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + Count++; + } + + if (LoadStringW(shell32_hInstance, IDS_CUT, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringW(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringW(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + } + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + +HRESULT WINAPI CCBitBucketItemContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) +{ + SEARCH_CONTEXT Context; + static LPCWSTR szDrive = L"C:\\"; + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",this,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + if (lpcmi->lpVerb == MAKEINTRESOURCEA(1) || lpcmi->lpVerb == MAKEINTRESOURCEA(5)) + { + Context.pFileDetails = _ILGetRecycleStruct(apidl); + Context.bFound = FALSE; + + EnumerateRecycleBinW(szDrive, CBSearchBitBucket, (PVOID)&Context); + if (!Context.bFound) + return E_FAIL; + + if (lpcmi->lpVerb == MAKEINTRESOURCEA(1)) + { + /* restore file */ + if (RestoreFile(Context.hDeletedFile)) + return S_OK; + else + return E_FAIL; + } + else + { + DeleteFileHandleToRecycleBin(Context.hDeletedFile); + return E_NOTIMPL; + } + } + else if (lpcmi->lpVerb == MAKEINTRESOURCEA(3)) + { + FIXME("implement cut\n"); + return E_NOTIMPL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCEA(7)) + { + FIXME("implement properties\n"); + return E_NOTIMPL; + } + + return S_OK; +} + +HRESULT WINAPI CCBitBucketItemContextMenu::GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) +{ + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + return E_FAIL; +} + +HRESULT WINAPI CCBitBucketItemContextMenu::HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + TRACE("CBitBucket_IContextMenu2Item_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",this, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + +static HRESULT WINAPI CBitBucketItemContextMenuConstructor(REFIID riid, LPCITEMIDLIST pidl, LPVOID *ppv) +{ + CComObject *theMenu; + CComPtr result; + HRESULT hResult; + + TRACE("%s\n", shdebugstr_guid(&riid)); + + if (ppv == NULL) + return E_POINTER; + *ppv = NULL; + ATLTRY(theMenu = new CComObject); + if (theMenu == NULL) + return E_OUTOFMEMORY; + hResult = theMenu->QueryInterface(riid, (void **)&result); + if (FAILED(hResult)) + { + delete theMenu; + return hResult; + } + hResult = theMenu->Initialize(pidl); + if (FAILED(hResult)) + return hResult; + *ppv = result.Detach(); + TRACE ("--(%p)\n", *ppv); + return S_OK; +} + +CBitBucket::CBitBucket() +{ +} + +CBitBucket::~CBitBucket() +{ +/* InterlockedDecrement(&objCount);*/ + SHFree(pidl); +} + +HRESULT WINAPI CBitBucket::ParseDisplayName(HWND hwnd, LPBC pbc, + LPOLESTR pszDisplayName, ULONG *pchEaten, LPITEMIDLIST *ppidl, + ULONG *pdwAttributes) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + + +PDELETED_FILE_DETAILS_W +UnpackDetailsFromPidl(LPCITEMIDLIST pidl) +{ + return (PDELETED_FILE_DETAILS_W)&pidl->mkid.abID; +} + +HRESULT WINAPI CBitBucket::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) +{ + CComObject *theEnumerator; + CComPtr result; + HRESULT hResult; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); + + if (ppEnumIDList == NULL) + return E_POINTER; + *ppEnumIDList = NULL; + ATLTRY (theEnumerator = new CComObject); + if (theEnumerator == NULL) + return E_OUTOFMEMORY; + hResult = theEnumerator->QueryInterface(IID_IEnumIDList, (void **)&result); + if (FAILED (hResult)) + { + delete theEnumerator; + return hResult; + } + hResult = theEnumerator->Initialize(dwFlags); + if (FAILED (hResult)) + return hResult; + *ppEnumIDList = result.Detach(); + + TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); + + return S_OK; +} + +HRESULT WINAPI CBitBucket::BindToObject(LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) +{ + FIXME("(%p, %p, %p, %s, %p) - stub\n", this, pidl, pbc, debugstr_guid(&riid), ppv); + return E_NOTIMPL; +} + +HRESULT WINAPI CBitBucket::BindToStorage(LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) +{ + FIXME("(%p, %p, %p, %s, %p) - stub\n", this, pidl, pbc, debugstr_guid(&riid), ppv); + return E_NOTIMPL; +} + +HRESULT WINAPI CBitBucket::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + /* TODO */ + TRACE("(%p, %p, %p, %p)\n", this, (void *)lParam, pidl1, pidl2); + if (pidl1->mkid.cb != pidl2->mkid.cb) + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, pidl1->mkid.cb - pidl2->mkid.cb); + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (unsigned short)memcmp(pidl1->mkid.abID, pidl2->mkid.abID, pidl1->mkid.cb)); +} + +HRESULT WINAPI CBitBucket::CreateViewObject(HWND hwndOwner, REFIID riid, void **ppv) +{ + LPSHELLVIEW pShellView; + HRESULT hr = E_NOINTERFACE; + + TRACE("(%p, %p, %s, %p)\n", this, hwndOwner, debugstr_guid(&riid), ppv); + + if (!ppv) + return hr; + + *ppv = NULL; + + if (IsEqualIID (riid, IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, IID_IContextMenu) || IsEqualIID (riid, IID_IContextMenu2)) + { + hr = CBitBucketBackgroundContextMenuConstructor(riid, ppv); + } + else if (IsEqualIID (riid, IID_IShellView)) + { + hr = IShellView_Constructor ((IShellFolder *)this, &pShellView); + if (pShellView) + { + hr = pShellView->QueryInterface(riid, ppv); + pShellView->Release(); + } + } + else + return hr; + TRACE ("-- (%p)->(interface=%p)\n", this, ppv); + return hr; + +} + +HRESULT WINAPI CBitBucket::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, + SFGAOF *rgfInOut) +{ + TRACE("(%p, %d, {%p, ...}, {%x})\n", this, cidl, apidl ? apidl[0] : NULL, (unsigned int)*rgfInOut); + *rgfInOut &= SFGAO_CANMOVE|SFGAO_CANDELETE|SFGAO_HASPROPSHEET|SFGAO_FILESYSTEM | SFGAO_FOLDER; + return S_OK; +} + +HRESULT WINAPI CBitBucket::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, + REFIID riid, UINT *prgfInOut, void **ppv) +{ + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p, %p %p)\n", this, + hwndOwner, cidl, apidl, prgfInOut, ppv); + + if (!ppv) + return hr; + + *ppv = NULL; + + if ((IsEqualIID (riid, IID_IContextMenu) || IsEqualIID(riid, IID_IContextMenu2)) && (cidl >= 1)) + { + hr = CBitBucketItemContextMenuConstructor(riid, apidl[0], (void **)&pObj); + } + else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) + { + hr = this->QueryInterface(IID_IDropTarget, (LPVOID *) & pObj); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppv = pObj; + TRACE ("(%p)->hr=0x%08x\n", this, hr); + return hr; +} + +HRESULT WINAPI CBitBucket::GetDisplayNameOf(LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *pName) +{ + PIDLRecycleStruct *pFileDetails; + LPWSTR pFileName; + + TRACE("(%p, %p, %x, %p)\n", this, pidl, (unsigned int)uFlags, pName); + + + if (_ILIsBitBucket (pidl)) + { + WCHAR pszPath[100]; + + if (HCR_GetClassNameW(CLSID_RecycleBin, pszPath, MAX_PATH)) + { + pName->uType = STRRET_WSTR; + pName->pOleStr = StrDupW(pszPath); + return S_OK; + } + } + + pFileDetails = _ILGetRecycleStruct(pidl); + if (!pFileDetails) + { + pName->cStr[0] = 0; + pName->uType = STRRET_CSTR; + return E_INVALIDARG; + } + + pFileName = wcsrchr(pFileDetails->szName, L'\\'); + if (!pFileName) + { + pName->cStr[0] = 0; + pName->uType = STRRET_CSTR; + return E_UNEXPECTED; + } + + pName->pOleStr = StrDupW(pFileName + 1); + if (pName->pOleStr == NULL) + return E_OUTOFMEMORY; + + pName->uType = STRRET_WSTR; + return S_OK; +} + +HRESULT WINAPI CBitBucket::SetNameOf(HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR pszName, + SHGDNF uFlags, LPITEMIDLIST *ppidlOut) +{ + TRACE("\n"); + return E_FAIL; /* not supported */ +} + +HRESULT WINAPI CBitBucket::GetDefaultSearchGUID(GUID *pguid) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +HRESULT WINAPI CBitBucket::EnumSearches(IEnumExtraSearch **ppEnum) +{ + FIXME("stub\n"); + *ppEnum = NULL; + return E_NOTIMPL; +} + +HRESULT WINAPI CBitBucket::GetDefaultColumn(DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) +{ + TRACE("(%p, %x, %p, %p)\n", this, (unsigned int)dwReserved, pSort, pDisplay); + *pSort = 0; + *pDisplay = 0; + return S_OK; +} + +HRESULT WINAPI CBitBucket::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags) +{ + TRACE("(%p, %d, %p)\n", this, iColumn, pcsFlags); + if (iColumn >= COLUMNS_COUNT) + return E_INVALIDARG; + *pcsFlags = CBitBucketColumns[iColumn].pcsFlags; + return S_OK; +} + +HRESULT WINAPI CBitBucket::GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME * ft) +{ + FILETIME lft; + SYSTEMTIME time; + int ret; + + FileTimeToLocalFileTime(ft, &lft); + FileTimeToSystemTime(&lft, &time); + + ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer, size); + if (ret>0 && ret= COLUMNS_COUNT) + return E_FAIL; + pDetails->fmt = CBitBucketColumns[iColumn].fmt; + pDetails->cxChar = CBitBucketColumns[iColumn].cxChars; + if (pidl == NULL) + { + pDetails->str.uType = STRRET_WSTR; + LoadStringW(shell32_hInstance, CBitBucketColumns[iColumn].column_name_id, buffer, MAX_PATH); + return SHStrDupW(buffer, &pDetails->str.pOleStr); + } + + if (iColumn == COLUMN_NAME) + return GetDisplayNameOf(pidl, SHGDN_NORMAL, &pDetails->str); + + pFileDetails = _ILGetRecycleStruct(pidl); + switch (iColumn) + { + case COLUMN_DATEDEL: + FormatDateTime(buffer, MAX_PATH, &pFileDetails->DeletionTime); + break; + case COLUMN_DELFROM: + pszBackslash = wcsrchr(pFileDetails->szName, L'\\'); + Length = (pszBackslash - pFileDetails->szName); + memcpy((LPVOID)buffer, pFileDetails->szName, Length * sizeof(WCHAR)); + buffer[Length] = L'\0'; + break; + case COLUMN_SIZE: + StrFormatKBSizeW(pFileDetails->FileSize.QuadPart, buffer, MAX_PATH); + break; + case COLUMN_MTIME: + FormatDateTime(buffer, MAX_PATH, &pFileDetails->LastModification); + break; + case COLUMN_TYPE: + szTypeName[0] = L'\0'; + wcscpy(buffer,PathFindExtensionW(pFileDetails->szName)); + if (!( HCR_MapTypeToValueW(buffer, buffer, sizeof(buffer)/sizeof(WCHAR), TRUE) && + HCR_MapTypeToValueW(buffer, szTypeName, sizeof(szTypeName)/sizeof(WCHAR), FALSE ))) + { + wcscpy (szTypeName, PathFindExtensionW(pFileDetails->szName)); + wcscat(szTypeName, L"-"); + Length = wcslen(szTypeName); + if (LoadStringW(shell32_hInstance, IDS_SHV_COLUMN1, &szTypeName[Length], (sizeof(szTypeName)/sizeof(WCHAR))- Length)) + szTypeName[(sizeof(szTypeName)/sizeof(WCHAR))-1] = L'\0'; + } + pDetails->str.uType = STRRET_WSTR; + return SHStrDupW(szTypeName, &pDetails->str.pOleStr); + break; + default: + return E_FAIL; + } + + pDetails->str.uType = STRRET_WSTR; + return SHStrDupW(buffer, &pDetails->str.pOleStr); +} + +HRESULT WINAPI CBitBucket::MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid) +{ + TRACE("(%p, %d, %p)\n", this, iColumn, pscid); + if (iColumn>=COLUMNS_COUNT) + return E_INVALIDARG; + pscid->fmtid = *CBitBucketColumns[iColumn].fmtId; + pscid->pid = CBitBucketColumns[iColumn].pid; + return S_OK; +} + +HRESULT WINAPI CBitBucket::GetClassID(CLSID *pClassID) +{ + TRACE("(%p, %p)\n", this, pClassID); + if (pClassID == NULL) + return E_INVALIDARG; + memcpy(pClassID, &CLSID_RecycleBin, sizeof(CLSID)); + return S_OK; +} + +HRESULT WINAPI CBitBucket::Initialize(LPCITEMIDLIST pidl) +{ + TRACE("(%p, %p)\n", this, pidl); + + SHFree((LPVOID)this->pidl); + this->pidl = ILClone(pidl); + if (this->pidl == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +HRESULT WINAPI CBitBucket::GetCurFolder(LPITEMIDLIST *ppidl) +{ + TRACE("\n"); + *ppidl = ILClone(pidl); + return S_OK; +} + +/************************************************************************* + * BitBucket IShellExtInit interface + */ + +HRESULT WINAPI CBitBucket::Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID) +{ + TRACE("%p %p %p %p\n", this, pidlFolder, pdtobj, hkeyProgID ); + return S_OK; +} + +void toggleNukeOnDeleteOption(HWND hwndDlg, BOOL bEnable) +{ + if (bEnable) + { + SendDlgItemMessage(hwndDlg, 14001, BM_SETCHECK, BST_UNCHECKED, 0); + EnableWindow(GetDlgItem(hwndDlg, 14002), FALSE); + SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_CHECKED, 0); + } + else + { + SendDlgItemMessage(hwndDlg, 14001, BM_SETCHECK, BST_CHECKED, 0); + EnableWindow(GetDlgItem(hwndDlg, 14002), TRUE); + SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_UNCHECKED, 0); + } +} + + +void +InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) +{ + WCHAR CurDrive = L'A'; + WCHAR szDrive[] = L"A:\\"; + DWORD dwDrives; + WCHAR szName[100]; + WCHAR szVolume[100]; + DWORD MaxComponent, Flags; + DWORD dwSerial; + LVCOLUMNW lc; + HWND hDlgCtrl; + LVITEMW li; + INT itemCount; + ULARGE_INTEGER TotalNumberOfFreeBytes, TotalNumberOfBytes, FreeBytesAvailable; + RECT rect; + int columnSize; + int defIndex = 0; + DWORD dwSize; + PDRIVE_ITEM_CONTEXT pItem = NULL, pDefault = NULL, pFirst = NULL; + + hDlgCtrl = GetDlgItem(hwndDlg, 14000); + + if (!LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_LOCATION, szVolume, sizeof(szVolume) / sizeof(WCHAR))) + szVolume[0] = 0; + + GetClientRect(hDlgCtrl, &rect); + + memset(&lc, 0, sizeof(LV_COLUMN) ); + lc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT; + + columnSize = 140; //FIXME + lc.iSubItem = 0; + lc.fmt = LVCFMT_FIXED_WIDTH; + lc.cx = columnSize; + lc.cchTextMax = wcslen(szVolume); + lc.pszText = szVolume; + (void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, 0, (LPARAM)&lc); + + if (!LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_DISKSPACE, szVolume, sizeof(szVolume) / sizeof(WCHAR))) + szVolume[0] = 0; + + lc.iSubItem = 1; + lc.cx = rect.right - rect.left - columnSize; + lc.cchTextMax = wcslen(szVolume); + lc.pszText = szVolume; + (void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, 1, (LPARAM)&lc); + + dwDrives = GetLogicalDrives(); + itemCount = 0; + do + { + if ((dwDrives & 0x1)) + { + UINT Type = GetDriveTypeW(szDrive); + if (Type == DRIVE_FIXED) //FIXME + { + if (!GetVolumeInformationW(szDrive, szName, sizeof(szName) / sizeof(WCHAR), &dwSerial, &MaxComponent, &Flags, NULL, 0)) + { + szName[0] = 0; + dwSerial = -1; + } + + swprintf(szVolume, L"%s (%c)", szName, szDrive[0]); + memset(&li, 0x0, sizeof(LVITEMW)); + li.mask = LVIF_TEXT | LVIF_PARAM; + li.iSubItem = 0; + li.pszText = szVolume; + li.iItem = itemCount; + (void)SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&li); + if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable , &TotalNumberOfBytes, &TotalNumberOfFreeBytes)) + { + if (StrFormatByteSizeW(TotalNumberOfFreeBytes.QuadPart, szVolume, sizeof(szVolume) / sizeof(WCHAR))) + { + + pItem = (DRIVE_ITEM_CONTEXT *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DRIVE_ITEM_CONTEXT)); + if (pItem) + { + swprintf(szName, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\%04X-%04X", LOWORD(dwSerial), HIWORD(dwSerial)); + dwSize = sizeof(DWORD); + RegGetValueW(HKEY_CURRENT_USER, szName, L"MaxCapacity", RRF_RT_DWORD, NULL, &pItem->dwMaxCapacity, &dwSize); + dwSize = sizeof(DWORD); + RegGetValueW(HKEY_CURRENT_USER, szName, L"NukeOnDelete", RRF_RT_DWORD, NULL, &pItem->dwNukeOnDelete, &dwSize); + pItem->dwSerial = dwSerial; + li.mask = LVIF_PARAM; + li.lParam = (LPARAM)pItem; + (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li); + if (CurDrive == DefaultDrive) + { + defIndex = itemCount; + pDefault = pItem; + } + } + if (!pFirst) + pFirst = pItem; + + li.mask = LVIF_TEXT; + li.iSubItem = 1; + li.pszText = szVolume; + li.iItem = itemCount; + (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li); + } + } + itemCount++; + } + } + CurDrive++; + szDrive[0] = CurDrive; + dwDrives = (dwDrives >> 1); + }while(dwDrives); + + if (!pDefault) + pDefault = pFirst; + if (pDefault) + { + toggleNukeOnDeleteOption(hwndDlg, pDefault->dwNukeOnDelete); + SetDlgItemInt(hwndDlg, 14002, pDefault->dwMaxCapacity, FALSE); + } + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_STATE; + li.stateMask = (UINT)-1; + li.state = LVIS_FOCUSED|LVIS_SELECTED; + li.iItem = defIndex; + (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li); + +} + +static BOOL StoreDriveSettings(HWND hwndDlg) +{ + int iCount, iIndex; + HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); + LVITEMW li; + PDRIVE_ITEM_CONTEXT pItem; + HKEY hKey, hSubKey; + WCHAR szSerial[20]; + DWORD dwSize; + + + if (RegCreateKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume", 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS) + return FALSE; + + iCount = ListView_GetItemCount(hDlgCtrl); + + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + + for(iIndex = 0; iIndex < iCount; iIndex++) + { + li.iItem = iIndex; + if (SendMessageW(hDlgCtrl, LVM_GETITEMW, 0, (LPARAM)&li)) + { + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + swprintf(szSerial, L"%04X-%04X", LOWORD(pItem->dwSerial), HIWORD(pItem->dwSerial)); + if (RegCreateKeyExW(hKey, szSerial, 0, NULL, 0, KEY_WRITE, NULL, &hSubKey, NULL) == ERROR_SUCCESS) + { + dwSize = sizeof(DWORD); + RegSetValueExW(hSubKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&pItem->dwNukeOnDelete, dwSize); + dwSize = sizeof(DWORD); + RegSetValueExW(hSubKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&pItem->dwMaxCapacity, dwSize); + RegCloseKey(hSubKey); + } + } + } + RegCloseKey(hKey); + return TRUE; + +} + +static VOID FreeDriveItemContext(HWND hwndDlg) +{ + int iCount, iIndex; + HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); + LVITEMW li; + + iCount = ListView_GetItemCount(hDlgCtrl); + + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + + for(iIndex = 0; iIndex < iCount; iIndex++) + { + li.iItem = iIndex; + if (SendMessageW(hDlgCtrl, LVM_GETITEMW, 0, (LPARAM)&li)) + { + HeapFree(GetProcessHeap(), 0, (LPVOID)li.lParam); + } + } +} + +INT +GetDefaultItem(HWND hwndDlg, LVITEMW * li) +{ + HWND hDlgCtrl; + UINT iItemCount, iIndex; + + hDlgCtrl = GetDlgItem(hwndDlg, 14000); + if (!hDlgCtrl) + return -1; + + iItemCount = ListView_GetItemCount(hDlgCtrl); + if (!iItemCount) + return -1; + + ZeroMemory(li, sizeof(LVITEMW)); + li->mask = LVIF_PARAM | LVIF_STATE; + li->stateMask = (UINT)-1; + for (iIndex = 0; iIndex < iItemCount; iIndex++) + { + li->iItem = iIndex; + if (SendMessageW(hDlgCtrl, LVM_GETITEMW, 0, (LPARAM)li)) + { + if (li->state & LVIS_SELECTED) + return iIndex; + } + } + return -1; + +} + +INT_PTR +CALLBACK +BitBucketDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + LPPSHNOTIFY lppsn; + LPNMLISTVIEW lppl; + LVITEMW li; + PDRIVE_ITEM_CONTEXT pItem; + BOOL bSuccess; + UINT uResult; + PROPSHEETPAGE * page; + DWORD dwStyle; + + switch(uMsg) + { + case WM_INITDIALOG: + page = (PROPSHEETPAGE*)lParam; + InitializeBitBucketDlg(hwndDlg, (WCHAR)page->lParam); + dwStyle = (DWORD) SendDlgItemMessage(hwndDlg, 14000, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0); + dwStyle = dwStyle | LVS_EX_FULLROWSELECT; + SendDlgItemMessage(hwndDlg, 14000, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle); + if (GetDlgCtrlID((HWND)wParam) != 14000) + { + SetFocus(GetDlgItem(hwndDlg, 14000)); + return FALSE; + } + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case 14001: + toggleNukeOnDeleteOption(hwndDlg, FALSE); + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + break; + case 14003: + toggleNukeOnDeleteOption(hwndDlg, TRUE); + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + break; + case 14004: + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + break; + } + break; + case WM_NOTIFY: + lppsn = (LPPSHNOTIFY) lParam; + lppl = (LPNMLISTVIEW) lParam; + if (lppsn->hdr.code == PSN_APPLY) + { + if (GetDefaultItem(hwndDlg, &li) > -1) + { + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + if (pItem) + { + uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); + if (bSuccess) + pItem->dwMaxCapacity = uResult; + if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + pItem->dwNukeOnDelete = TRUE; + else + pItem->dwNukeOnDelete = FALSE; + } + } + if (StoreDriveSettings(hwndDlg)) + { + SetWindowLongPtr( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); + return TRUE; + } + } + else if (lppl->hdr.code == LVN_ITEMCHANGING) + { + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + li.iItem = lppl->iItem; + if (!SendMessageW(lppl->hdr.hwndFrom, LVM_GETITEMW, 0, (LPARAM)&li)) + return TRUE; + + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + if (!pItem) + return TRUE; + + if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED)) + { + /* new focused item */ + toggleNukeOnDeleteOption(lppl->hdr.hwndFrom, pItem->dwNukeOnDelete); + SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); + } + else if ((lppl->uOldState & LVIS_FOCUSED) && !(lppl->uNewState & LVIS_FOCUSED)) + { + /* kill focus */ + uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); + if (bSuccess) + pItem->dwMaxCapacity = uResult; + if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + pItem->dwNukeOnDelete = TRUE; + else + pItem->dwNukeOnDelete = FALSE; + } + return TRUE; + + } + break; + case WM_DESTROY: + FreeDriveItemContext(hwndDlg); + break; + } + return FALSE; +} + +BOOL SH_ShowRecycleBinProperties(WCHAR sDrive) +{ + HPROPSHEETPAGE hpsp[1]; + PROPSHEETHEADERW psh; + HPROPSHEETPAGE hprop; + + BOOL ret; + + + ZeroMemory(&psh, sizeof(PROPSHEETHEADERW)); + psh.dwSize = sizeof(PROPSHEETHEADERW); + psh.dwFlags = PSP_DEFAULT | PSH_PROPTITLE; + psh.pszCaption = MAKEINTRESOURCEW(IDS_RECYCLEBIN_FOLDER_NAME); + psh.hwndParent = NULL; + psh.phpage = hpsp; + psh.hInstance = shell32_hInstance; + + hprop = SH_CreatePropertySheetPage("BITBUCKET_PROPERTIES_DLG", BitBucketDlg, (LPARAM)sDrive, NULL); + if (!hprop) + { + ERR("Failed to create property sheet\n"); + return FALSE; + } + hpsp[psh.nPages] = hprop; + psh.nPages++; + + + ret = PropertySheetW(&psh); + if (ret < 0) + return FALSE; + else + return TRUE; +} + +BOOL +TRASH_CanTrashFile(LPCWSTR wszPath) +{ + LONG ret; + DWORD dwNukeOnDelete, dwType, VolSerialNumber, MaxComponentLength; + DWORD FileSystemFlags, dwSize, dwDisposition; + HKEY hKey; + WCHAR szBuffer[10]; + WCHAR szKey[150] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\"; + + if (wszPath[1] != L':') + { + /* path is UNC */ + return FALSE; + } + + if (GetDriveTypeW(wszPath) != DRIVE_FIXED) + { + /* no bitbucket on removable media */ + return FALSE; + } + + if (!GetVolumeInformationW(wszPath, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0)) + { + ERR("GetVolumeInformationW failed with %u\n", GetLastError()); + return FALSE; + } + + swprintf(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber), HIWORD(VolSerialNumber)); + wcscat(szKey, szBuffer); + + if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) + { + ERR("RegCreateKeyExW failed\n"); + return FALSE; + } + + if (dwDisposition & REG_CREATED_NEW_KEY) + { + /* per default move to bitbucket */ + dwNukeOnDelete = 0; + RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); + /* per default unlimited size */ + dwSize = -1; + RegSetValueExW(hKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); + RegCloseKey(hKey); + return TRUE; + } + else + { + dwSize = sizeof(dwNukeOnDelete); + ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwSize); + if (ret != ERROR_SUCCESS) + { + if (ret == ERROR_FILE_NOT_FOUND) + { + /* restore key and enable bitbucket */ + dwNukeOnDelete = 0; + RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); + } + RegCloseKey(hKey); + return TRUE; + } + else if (dwNukeOnDelete) + { + /* do not delete to bitbucket */ + RegCloseKey(hKey); + return FALSE; + } + /* FIXME + * check if bitbucket is full + */ + RegCloseKey(hKey); + return TRUE; + } +} + +BOOL +TRASH_TrashFile(LPCWSTR wszPath) +{ + TRACE("(%s)\n", debugstr_w(wszPath)); + return DeleteFileToRecycleBin(wszPath); +} + +/************************************************************************* + * SHUpdateCBitBucketIcon [SHELL32.@] + * + * Undocumented + */ +EXTERN_C HRESULT WINAPI SHUpdateRecycleBinIcon(void) +{ + FIXME("stub\n"); + + + + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/shfldr_recyclebin.h b/reactos/dll/win32/shell32_new/shfldr_recyclebin.h new file mode 100644 index 00000000000..2a2e5988f1c --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_recyclebin.h @@ -0,0 +1,86 @@ +/* + * Trash virtual folder support. The trashing engine is implemented in trash.c + * + * Copyright (C) 2006 Mikolaj Zalewski + * Copyright (C) 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _SHFLDR_RECYCLEBIN_H_ +#define _SHFLDR_RECYCLEBIN_H_ + +class CBitBucket : + public CComCoClass, + public CComObjectRootEx, + public IShellFolder2, + public IPersistFolder2, + public IShellExtInit +{ +private: + LPITEMIDLIST pidl; +public: + CBitBucket(); + ~CBitBucket(); + + // IShellFolder + virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes); + virtual HRESULT WINAPI EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList); + virtual HRESULT WINAPI BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + virtual HRESULT WINAPI CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut); + virtual HRESULT WINAPI GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut); + virtual HRESULT WINAPI GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut); + virtual HRESULT WINAPI GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); + virtual HRESULT WINAPI SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut); + + /* ShellFolder2 */ + virtual HRESULT WINAPI GetDefaultSearchGUID(GUID *pguid); + virtual HRESULT WINAPI EnumSearches(IEnumExtraSearch **ppenum); + virtual HRESULT WINAPI GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay); + virtual HRESULT WINAPI GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags); + virtual HRESULT WINAPI GetDetailsEx(LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv); + virtual HRESULT WINAPI GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd); + virtual HRESULT WINAPI MapColumnToSCID(UINT column, SHCOLUMNID *pscid); + + // IPersist + virtual HRESULT WINAPI GetClassID(CLSID *lpClassId); + + // IPersistFolder + virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidl); + + // IPersistFolder2 + virtual HRESULT WINAPI GetCurFolder(LPITEMIDLIST * pidl); + + // IShellExtInit + virtual HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID); + +DECLARE_REGISTRY_RESOURCEID(IDR_RECYCLEBIN) +DECLARE_NOT_AGGREGATABLE(CBitBucket) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CBitBucket) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) + COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) + COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) + COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) + COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit) +END_COM_MAP() +}; + +#endif // _SHFLDR_RECYCLEBIN_H_ diff --git a/reactos/dll/win32/shell32_new/shfldr_unixfs.cpp b/reactos/dll/win32/shell32_new/shfldr_unixfs.cpp new file mode 100644 index 00000000000..95e4defc81e --- /dev/null +++ b/reactos/dll/win32/shell32_new/shfldr_unixfs.cpp @@ -0,0 +1,21 @@ +/* + * UNIXFS - Shell namespace extension for the unix filesystem + * + * Copyright (C) 2005 Michael Jung + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* Placeholder in ReactOS, we don't need this */ diff --git a/reactos/dll/win32/shell32_new/shlexec.cpp b/reactos/dll/win32/shell32_new/shlexec.cpp new file mode 100644 index 00000000000..f83c901671d --- /dev/null +++ b/reactos/dll/win32/shell32_new/shlexec.cpp @@ -0,0 +1,2009 @@ +/* + * Shell Library Functions + * + * Copyright 1998 Marcus Meissner + * Copyright 2002 Eric Pouech + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(exec); + +static const WCHAR wszOpen[] = {'o','p','e','n',0}; +static const WCHAR wszExe[] = {'.','e','x','e',0}; +static const WCHAR wszILPtr[] = {':','%','p',0}; +static const WCHAR wszShell[] = {'\\','s','h','e','l','l','\\',0}; +static const WCHAR wszFolder[] = {'F','o','l','d','e','r',0}; +static const WCHAR wszEmpty[] = {0}; + +#define SEE_MASK_CLASSALL (SEE_MASK_CLASSNAME | SEE_MASK_CLASSKEY) + + +/*********************************************************************** + * SHELL_ArgifyW [Internal] + * + * this function is supposed to expand the escape sequences found in the registry + * some diving reported that the following were used: + * + %1, %2... seem to report to parameter of index N in ShellExecute pmts + * %1 file + * %2 printer + * %3 driver + * %4 port + * %I address of a global item ID (explorer switch /idlist) + * %L seems to be %1 as long filename followed by the 8+3 variation + * %S ??? + * %* all following parameters (see batfile) + * + */ +static BOOL SHELL_ArgifyW(WCHAR* out, DWORD len, const WCHAR* fmt, const WCHAR* lpFile, LPITEMIDLIST pidl, LPCWSTR args, DWORD* out_len) +{ + WCHAR xlpFile[1024]; + BOOL done = FALSE; + BOOL found_p1 = FALSE; + PWSTR res = out; + PCWSTR cmd; + DWORD used = 0; + + TRACE("%p, %d, %s, %s, %p, %p\n", out, len, debugstr_w(fmt), + debugstr_w(lpFile), pidl, args); + + while (*fmt) + { + if (*fmt == '%') + { + switch (*++fmt) + { + case '\0': + case '%': + used++; + if (used < len) + *res++ = '%'; + break; + + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '0': + case '*': + if (args) + { + if (*fmt == '*') + { + used++; + if (used < len) + *res++ = '"'; + while(*args) + { + used++; + if (used < len) + *res++ = *args++; + else + args++; + } + used++; + if (used < len) + *res++ = '"'; + break; + } + else + { + while(*args && !isspace(*args)) + { + used++; + if (used < len) + *res++ = *args++; + else + args++; + } + + while(isspace(*args)) + ++args; + } + break; + } + else + { + break; + } + case '1': + if (!done || (*fmt == '1')) + { + /*FIXME Is the call to SearchPathW() really needed? We already have separated out the parameter string in args. */ + if (SearchPathW(NULL, lpFile, wszExe, sizeof(xlpFile)/sizeof(WCHAR), xlpFile, NULL)) + cmd = xlpFile; + else + cmd = lpFile; + + used += wcslen(cmd); + if (used < len) + { + wcscpy(res, cmd); + res += wcslen(cmd); + } + } + found_p1 = TRUE; + break; + + /* + * IE uses this a lot for activating things such as windows media + * player. This is not verified to be fully correct but it appears + * to work just fine. + */ + case 'l': + case 'L': + if (lpFile) { + used += wcslen(lpFile); + if (used < len) + { + wcscpy(res, lpFile); + res += wcslen(lpFile); + } + } + found_p1 = TRUE; + break; + + case 'i': + case 'I': + if (pidl) { + DWORD chars = 0; + /* %p should not exceed 8, maybe 16 when looking forward to 64bit. + * allowing a buffer of 100 should more than exceed all needs */ + WCHAR buf[100]; + LPVOID pv; + HGLOBAL hmem = SHAllocShared(pidl, ILGetSize(pidl), 0); + pv = SHLockShared(hmem, 0); + chars = swprintf(buf, wszILPtr, pv); + if (chars >= sizeof(buf)/sizeof(WCHAR)) + ERR("pidl format buffer too small!\n"); + used += chars; + if (used < len) + { + wcscpy(res,buf); + res += chars; + } + SHUnlockShared(pv); + } + found_p1 = TRUE; + break; + + default: + /* + * Check if this is an env-variable here... + */ + + /* Make sure that we have at least one more %.*/ + if (strchrW(fmt, '%')) + { + WCHAR tmpBuffer[1024]; + PWSTR tmpB = tmpBuffer; + WCHAR tmpEnvBuff[MAX_PATH]; + DWORD envRet; + + while (*fmt != '%') + *tmpB++ = *fmt++; + *tmpB++ = 0; + + TRACE("Checking %s to be an env-var\n", debugstr_w(tmpBuffer)); + + envRet = GetEnvironmentVariableW(tmpBuffer, tmpEnvBuff, MAX_PATH); + if (envRet == 0 || envRet > MAX_PATH) + { + used += wcslen(tmpBuffer); + if (used < len) + { + wcscpy( res, tmpBuffer ); + res += wcslen(tmpBuffer); + } + } + else + { + used += wcslen(tmpEnvBuff); + if (used < len) + { + wcscpy( res, tmpEnvBuff ); + res += wcslen(tmpEnvBuff); + } + } + } + done = TRUE; + break; + } + /* Don't skip past terminator (catch a single '%' at the end) */ + if (*fmt != '\0') + { + fmt++; + } + } + else + { + used ++; + if (used < len) + *res++ = *fmt++; + else + fmt++; + } + } + + *res = '\0'; + TRACE("used %i of %i space\n",used,len); + if (out_len) + *out_len = used; + + return found_p1; +} + +static HRESULT SHELL_GetPathFromIDListForExecuteW(LPCITEMIDLIST pidl, LPWSTR pszPath, UINT uOutSize) +{ + STRRET strret; + IShellFolder* desktop; + + HRESULT hr = SHGetDesktopFolder(&desktop); + + if (SUCCEEDED(hr)) { + hr = desktop->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strret); + + if (SUCCEEDED(hr)) + StrRetToStrNW(pszPath, uOutSize, &strret, pidl); + + desktop->Release(); + } + + return hr; +} + +/************************************************************************* + * SHELL_ExecuteW [Internal] + * + */ +static UINT_PTR SHELL_ExecuteW(const WCHAR *lpCmd, WCHAR *env, BOOL shWait, + const SHELLEXECUTEINFOW *psei, LPSHELLEXECUTEINFOW psei_out) +{ + STARTUPINFOW startup; + PROCESS_INFORMATION info; + UINT_PTR retval = SE_ERR_NOASSOC; + UINT gcdret = 0; + WCHAR curdir[MAX_PATH]; + DWORD dwCreationFlags; + const WCHAR *lpDirectory = NULL; + + TRACE("Execute %s from directory %s\n", debugstr_w(lpCmd), debugstr_w(psei->lpDirectory)); + + /* make sure we don't fail the CreateProcess if the calling app passes in + * a bad working directory */ + if (psei->lpDirectory && psei->lpDirectory[0]) + { + DWORD attr = GetFileAttributesW(psei->lpDirectory); + if (attr != INVALID_FILE_ATTRIBUTES && attr & FILE_ATTRIBUTE_DIRECTORY) + lpDirectory = psei->lpDirectory; + } + + /* ShellExecute specifies the command from psei->lpDirectory + * if present. Not from the current dir as CreateProcess does */ + if( lpDirectory ) + if( ( gcdret = GetCurrentDirectoryW( MAX_PATH, curdir))) + if( !SetCurrentDirectoryW( lpDirectory)) + ERR("cannot set directory %s\n", debugstr_w(lpDirectory)); + ZeroMemory(&startup,sizeof(STARTUPINFOW)); + startup.cb = sizeof(STARTUPINFOW); + startup.dwFlags = STARTF_USESHOWWINDOW; + startup.wShowWindow = psei->nShow; + dwCreationFlags = CREATE_UNICODE_ENVIRONMENT; + if (psei->fMask & SEE_MASK_NO_CONSOLE) + dwCreationFlags |= CREATE_NEW_CONSOLE; + if (CreateProcessW(NULL, (LPWSTR)lpCmd, NULL, NULL, FALSE, dwCreationFlags, env, + lpDirectory, &startup, &info)) + { + /* Give 30 seconds to the app to come up, if desired. Probably only needed + when starting app immediately before making a DDE connection. */ + if (shWait) + if (WaitForInputIdle( info.hProcess, 30000 ) == WAIT_FAILED) + WARN("WaitForInputIdle failed: Error %d\n", GetLastError() ); + retval = 33; + if (psei->fMask & SEE_MASK_NOCLOSEPROCESS) + psei_out->hProcess = info.hProcess; + else + CloseHandle( info.hProcess ); + CloseHandle( info.hThread ); + } + else if ((retval = GetLastError()) >= 32) + { + TRACE("CreateProcess returned error %ld\n", retval); + retval = ERROR_BAD_FORMAT; + } + + TRACE("returning %lu\n", retval); + + psei_out->hInstApp = (HINSTANCE)retval; + if( gcdret ) + if( !SetCurrentDirectoryW( curdir)) + ERR("cannot return to directory %s\n", debugstr_w(curdir)); + + return retval; +} + + +/*********************************************************************** + * SHELL_BuildEnvW [Internal] + * + * Build the environment for the new process, adding the specified + * path to the PATH variable. Returned pointer must be freed by caller. + */ +static LPWSTR SHELL_BuildEnvW( const WCHAR *path ) +{ + static const WCHAR wPath[] = {'P','A','T','H','=',0}; + WCHAR *strings, *new_env; + WCHAR *p, *p2; + int total = wcslen(path) + 1; + BOOL got_path = FALSE; + + if (!(strings = GetEnvironmentStringsW())) return NULL; + p = strings; + while (*p) + { + int len = wcslen(p) + 1; + if (!_wcsnicmp( p, wPath, 5 )) got_path = TRUE; + total += len; + p += len; + } + if (!got_path) total += 5; /* we need to create PATH */ + total++; /* terminating null */ + + if (!(new_env = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, total * sizeof(WCHAR) ))) + { + FreeEnvironmentStringsW( strings ); + return NULL; + } + p = strings; + p2 = new_env; + while (*p) + { + int len = wcslen(p) + 1; + memcpy( p2, p, len * sizeof(WCHAR) ); + if (!_wcsnicmp( p, wPath, 5 )) + { + p2[len - 1] = ';'; + wcscpy( p2 + len, path ); + p2 += wcslen(path) + 1; + } + p += len; + p2 += len; + } + if (!got_path) + { + wcscpy( p2, wPath ); + wcscat( p2, path ); + p2 += wcslen(p2) + 1; + } + *p2 = 0; + FreeEnvironmentStringsW( strings ); + return new_env; +} + + +/*********************************************************************** + * SHELL_TryAppPathW [Internal] + * + * Helper function for SHELL_FindExecutable + * @param lpResult - pointer to a buffer of size MAX_PATH + * On entry: szName is a filename (probably without path separators). + * On exit: if szName found in "App Path", place full path in lpResult, and return true + */ +static BOOL SHELL_TryAppPathW( LPCWSTR szName, LPWSTR lpResult, WCHAR **env) +{ + static const WCHAR wszKeyAppPaths[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s', + '\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','A','p','p',' ','P','a','t','h','s','\\',0}; + static const WCHAR wPath[] = {'P','a','t','h',0}; + HKEY hkApp = 0; + WCHAR buffer[1024]; + LONG len; + LONG res; + BOOL found = FALSE; + + if (env) *env = NULL; + wcscpy(buffer, wszKeyAppPaths); + wcscat(buffer, szName); + res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, buffer, 0, KEY_READ, &hkApp); + if (res) goto end; + + len = MAX_PATH*sizeof(WCHAR); + res = RegQueryValueW(hkApp, NULL, lpResult, &len); + if (res) goto end; + found = TRUE; + + if (env) + { + DWORD count = sizeof(buffer); + if (!RegQueryValueExW(hkApp, wPath, NULL, NULL, (LPBYTE)buffer, &count) && buffer[0]) + *env = SHELL_BuildEnvW( buffer ); + } + +end: + if (hkApp) RegCloseKey(hkApp); + return found; +} + +static UINT SHELL_FindExecutableByOperation(LPCWSTR lpOperation, LPWSTR key, LPWSTR filetype, LPWSTR command, LONG commandlen) +{ + static const WCHAR wCommand[] = {'\\','c','o','m','m','a','n','d',0}; + HKEY hkeyClass; + WCHAR verb[MAX_PATH]; + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, filetype, 0, 0x02000000, &hkeyClass)) + return SE_ERR_NOASSOC; + if (!HCR_GetDefaultVerbW(hkeyClass, lpOperation, verb, sizeof(verb)/sizeof(verb[0]))) + return SE_ERR_NOASSOC; + RegCloseKey(hkeyClass); + + /* Looking for ...buffer\shell\\command */ + wcscat(filetype, wszShell); + wcscat(filetype, verb); + wcscat(filetype, wCommand); + + if (RegQueryValueW(HKEY_CLASSES_ROOT, filetype, command, + &commandlen) == ERROR_SUCCESS) + { + commandlen /= sizeof(WCHAR); + if (key) wcscpy(key, filetype); +#if 0 + LPWSTR tmp; + WCHAR param[256]; + LONG paramlen = sizeof(param); + static const WCHAR wSpace[] = {' ',0}; + + /* FIXME: it seems all Windows version don't behave the same here. + * the doc states that this ddeexec information can be found after + * the exec names. + * on Win98, it doesn't appear, but I think it does on Win2k + */ + /* Get the parameters needed by the application + from the associated ddeexec key */ + tmp = strstrW(filetype, wCommand); + tmp[0] = '\0'; + wcscat(filetype, wDdeexec); + if (RegQueryValueW(HKEY_CLASSES_ROOT, filetype, param, + ¶mlen) == ERROR_SUCCESS) + { + paramlen /= sizeof(WCHAR); + wcscat(command, wSpace); + wcscat(command, param); + commandlen += paramlen; + } +#endif + + command[commandlen] = '\0'; + + return 33; /* FIXME see SHELL_FindExecutable() */ + } + + return SE_ERR_NOASSOC; +} + +/************************************************************************* + * SHELL_FindExecutable [Internal] + * + * Utility for code sharing between FindExecutable and ShellExecute + * in: + * lpFile the name of a file + * lpOperation the operation on it (open) + * out: + * lpResult a buffer, big enough :-(, to store the command to do the + * operation on the file + * key a buffer, big enough, to get the key name to do actually the + * command (it'll be used afterwards for more information + * on the operation) + */ +static UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpOperation, + LPWSTR lpResult, DWORD resultLen, LPWSTR key, WCHAR **env, LPITEMIDLIST pidl, LPCWSTR args) +{ + static const WCHAR wWindows[] = {'w','i','n','d','o','w','s',0}; + static const WCHAR wPrograms[] = {'p','r','o','g','r','a','m','s',0}; + static const WCHAR wExtensions[] = {'e','x','e',' ','p','i','f',' ','b','a','t',' ','c','m','d',' ','c','o','m',0}; + WCHAR *extension = NULL; /* pointer to file extension */ + WCHAR filetype[256]; /* registry name for this filetype */ + LONG filetypelen = sizeof(filetype); /* length of above */ + WCHAR command[1024]; /* command from registry */ + WCHAR wBuffer[256]; /* Used to GetProfileString */ + UINT retval = SE_ERR_NOASSOC; + WCHAR *tok; /* token pointer */ + WCHAR xlpFile[256]; /* result of SearchPath */ + DWORD attribs; /* file attributes */ + + TRACE("%s\n", debugstr_w(lpFile)); + + if (!lpResult) + return ERROR_INVALID_PARAMETER; + + xlpFile[0] = '\0'; + lpResult[0] = '\0'; /* Start off with an empty return string */ + if (key) *key = '\0'; + + /* trap NULL parameters on entry */ + if (!lpFile) + { + WARN("(lpFile=%s,lpResult=%s): NULL parameter\n", + debugstr_w(lpFile), debugstr_w(lpResult)); + return ERROR_FILE_NOT_FOUND; /* File not found. Close enough, I guess. */ + } + + if (SHELL_TryAppPathW( lpFile, lpResult, env )) + { + TRACE("found %s via App Paths\n", debugstr_w(lpResult)); + return 33; + } + + if (SearchPathW(lpPath, lpFile, wszExe, sizeof(xlpFile)/sizeof(WCHAR), xlpFile, NULL)) + { + TRACE("SearchPathW returned non-zero\n"); + lpFile = xlpFile; + /* Hey, isn't this value ignored? Why make this call? Shouldn't we return here? --dank*/ + } + + attribs = GetFileAttributesW(lpFile); + if (attribs!=INVALID_FILE_ATTRIBUTES && (attribs&FILE_ATTRIBUTE_DIRECTORY)) + { + wcscpy(filetype, wszFolder); + filetypelen = 6; /* strlen("Folder") */ + } + else + { + /* Did we get something? Anything? */ + if (xlpFile[0]==0) + { + TRACE("Returning SE_ERR_FNF\n"); + return SE_ERR_FNF; + } + /* First thing we need is the file's extension */ + extension = wcsrchr(xlpFile, '.'); /* Assume last "." is the one; */ + /* File->Run in progman uses */ + /* .\FILE.EXE :( */ + TRACE("xlpFile=%s,extension=%s\n", debugstr_w(xlpFile), debugstr_w(extension)); + + if (extension == NULL || extension[1]==0) + { + WARN("Returning SE_ERR_NOASSOC\n"); + return SE_ERR_NOASSOC; + } + + /* Three places to check: */ + /* 1. win.ini, [windows], programs (NB no leading '.') */ + /* 2. Registry, HKEY_CLASS_ROOT\\shell\open\command */ + /* 3. win.ini, [extensions], extension (NB no leading '.' */ + /* All I know of the order is that registry is checked before */ + /* extensions; however, it'd make sense to check the programs */ + /* section first, so that's what happens here. */ + + /* See if it's a program - if GetProfileString fails, we skip this + * section. Actually, if GetProfileString fails, we've probably + * got a lot more to worry about than running a program... */ + if (GetProfileStringW(wWindows, wPrograms, wExtensions, wBuffer, sizeof(wBuffer)/sizeof(WCHAR)) > 0) + { + CharLowerW(wBuffer); + tok = wBuffer; + while (*tok) + { + WCHAR *p = tok; + while (*p && *p != ' ' && *p != '\t') p++; + if (*p) + { + *p++ = 0; + while (*p == ' ' || *p == '\t') p++; + } + + if (wcsicmp(tok, &extension[1]) == 0) /* have to skip the leading "." */ + { + wcscpy(lpResult, xlpFile); + /* Need to perhaps check that the file has a path + * attached */ + TRACE("found %s\n", debugstr_w(lpResult)); + return 33; + /* Greater than 32 to indicate success */ + } + tok = p; + } + } + + /* Check registry */ + if (RegQueryValueW(HKEY_CLASSES_ROOT, extension, filetype, + &filetypelen) == ERROR_SUCCESS) + { + filetypelen /= sizeof(WCHAR); + if (filetypelen == sizeof(filetype)/sizeof(WCHAR)) + filetypelen--; + filetype[filetypelen] = '\0'; + TRACE("File type: %s\n", debugstr_w(filetype)); + } + else + { + *filetype = '\0'; + filetypelen = 0; + } + } + + if (*filetype) + { + /* pass the operation string to SHELL_FindExecutableByOperation() */ + filetype[filetypelen] = '\0'; + retval = SHELL_FindExecutableByOperation(lpOperation, key, filetype, command, sizeof(command)); + + if (retval > 32) + { + DWORD finishedLen; + SHELL_ArgifyW(lpResult, resultLen, command, xlpFile, pidl, args, &finishedLen); + if (finishedLen > resultLen) + ERR("Argify buffer not large enough.. truncated\n"); + + /* Remove double quotation marks and command line arguments */ + if (*lpResult == '"') + { + WCHAR *p = lpResult; + while (*(p + 1) != '"') + { + *p = *(p + 1); + p++; + } + *p = '\0'; + } + else + { + /* Truncate on first space */ + WCHAR *p = lpResult; + while (*p != ' ' && *p != '\0') + p++; + *p='\0'; + } + } + } + else /* Check win.ini */ + { + static const WCHAR wExtensions[] = {'e','x','t','e','n','s','i','o','n','s',0}; + + /* Toss the leading dot */ + extension++; + if (GetProfileStringW(wExtensions, extension, wszEmpty, command, sizeof(command)/sizeof(WCHAR)) > 0) + { + if (wcslen(command) != 0) + { + wcscpy(lpResult, command); + tok = wcschr(lpResult, '^'); /* should be ^.extension? */ + if (tok != NULL) + { + tok[0] = '\0'; + wcscat(lpResult, xlpFile); /* what if no dir in xlpFile? */ + tok = wcschr(command, '^'); /* see above */ + if ((tok != NULL) && (wcslen(tok)>5)) + { + wcscat(lpResult, &tok[5]); + } + } + retval = 33; /* FIXME - see above */ + } + } + } + + TRACE("returning %s\n", debugstr_w(lpResult)); + return retval; +} + +/****************************************************************** + * dde_cb + * + * callback for the DDE connection. not really useful + */ +static HDDEDATA CALLBACK dde_cb(UINT uType, UINT uFmt, HCONV hConv, + HSZ hsz1, HSZ hsz2, HDDEDATA hData, + ULONG_PTR dwData1, ULONG_PTR dwData2) +{ + TRACE("dde_cb: %04x, %04x, %p, %p, %p, %p, %08lx, %08lx\n", + uType, uFmt, hConv, hsz1, hsz2, hData, dwData1, dwData2); + return NULL; +} + +/****************************************************************** + * dde_connect + * + * ShellExecute helper. Used to do an operation with a DDE connection + * + * Handles both the direct connection (try #1), and if it fails, + * launching an application and trying (#2) to connect to it + * + */ +static unsigned dde_connect(const WCHAR* key, const WCHAR* start, WCHAR* ddeexec, + const WCHAR* lpFile, WCHAR *env, + LPCWSTR szCommandline, LPITEMIDLIST pidl, SHELL_ExecuteW32 execfunc, + const SHELLEXECUTEINFOW *psei, LPSHELLEXECUTEINFOW psei_out) +{ + static const WCHAR wApplication[] = {'\\','a','p','p','l','i','c','a','t','i','o','n',0}; + static const WCHAR wTopic[] = {'\\','t','o','p','i','c',0}; + WCHAR regkey[256]; + WCHAR * endkey = regkey + wcslen(key); + WCHAR app[256], topic[256], ifexec[256], res[256]; + LONG applen, topiclen, ifexeclen; + WCHAR * exec; + DWORD ddeInst = 0; + DWORD tid; + DWORD resultLen; + HSZ hszApp, hszTopic; + HCONV hConv; + HDDEDATA hDdeData; + unsigned ret = SE_ERR_NOASSOC; + BOOL unicode = !(GetVersion() & 0x80000000); + + wcscpy(regkey, key); + wcscpy(endkey, wApplication); + applen = sizeof(app); + if (RegQueryValueW(HKEY_CLASSES_ROOT, regkey, app, &applen) != ERROR_SUCCESS) + { + WCHAR command[1024], fullpath[MAX_PATH]; + static const WCHAR wSo[] = { '.','s','o',0 }; + DWORD sizeSo = sizeof(wSo)/sizeof(WCHAR); + LPWSTR ptr = NULL; + DWORD ret = 0; + + /* Get application command from start string and find filename of application */ + if (*start == '"') + { + wcscpy(command, start+1); + if ((ptr = wcschr(command, '"'))) + *ptr = 0; + ret = SearchPathW(NULL, command, wszExe, sizeof(fullpath)/sizeof(WCHAR), fullpath, &ptr); + } + else + { + LPWSTR p,space; + for (p=(LPWSTR)start; (space= const_cast(strchrW(p, ' '))); p=space+1) + { + int idx = space-start; + memcpy(command, start, idx*sizeof(WCHAR)); + command[idx] = '\0'; + if ((ret = SearchPathW(NULL, command, wszExe, sizeof(fullpath)/sizeof(WCHAR), fullpath, &ptr))) + break; + } + if (!ret) + ret = SearchPathW(NULL, start, wszExe, sizeof(fullpath)/sizeof(WCHAR), fullpath, &ptr); + } + + if (!ret) + { + ERR("Unable to find application path for command %s\n", debugstr_w(start)); + return ERROR_ACCESS_DENIED; + } + wcscpy(app, ptr); + + /* Remove extensions (including .so) */ + ptr = app + wcslen(app) - (sizeSo-1); + if (wcslen(app) >= sizeSo && + !wcscmp(ptr, wSo)) + *ptr = 0; + + ptr = const_cast(strrchrW(app, '.')); + assert(ptr); + *ptr = 0; + } + + wcscpy(endkey, wTopic); + topiclen = sizeof(topic); + if (RegQueryValueW(HKEY_CLASSES_ROOT, regkey, topic, &topiclen) != ERROR_SUCCESS) + { + static const WCHAR wSystem[] = {'S','y','s','t','e','m',0}; + wcscpy(topic, wSystem); + } + + if (unicode) + { + if (DdeInitializeW(&ddeInst, dde_cb, APPCMD_CLIENTONLY, 0L) != DMLERR_NO_ERROR) + return 2; + } + else + { + if (DdeInitializeA(&ddeInst, dde_cb, APPCMD_CLIENTONLY, 0L) != DMLERR_NO_ERROR) + return 2; + } + + hszApp = DdeCreateStringHandleW(ddeInst, app, CP_WINUNICODE); + hszTopic = DdeCreateStringHandleW(ddeInst, topic, CP_WINUNICODE); + + hConv = DdeConnect(ddeInst, hszApp, hszTopic, NULL); + exec = ddeexec; + if (!hConv) + { + static const WCHAR wIfexec[] = {'\\','i','f','e','x','e','c',0}; + TRACE("Launching %s\n", debugstr_w(start)); + ret = execfunc(start, env, TRUE, psei, psei_out); + if (ret <= 32) + { + TRACE("Couldn't launch\n"); + goto error; + } + hConv = DdeConnect(ddeInst, hszApp, hszTopic, NULL); + if (!hConv) + { + TRACE("Couldn't connect. ret=%d\n", ret); + DdeUninitialize(ddeInst); + SetLastError(ERROR_DDE_FAIL); + return 30; /* whatever */ + } + strcpyW(endkey, wIfexec); + ifexeclen = sizeof(ifexec); + if (RegQueryValueW(HKEY_CLASSES_ROOT, regkey, ifexec, &ifexeclen) == ERROR_SUCCESS) + { + exec = ifexec; + } + } + + SHELL_ArgifyW(res, sizeof(res)/sizeof(WCHAR), exec, lpFile, pidl, szCommandline, &resultLen); + if (resultLen > sizeof(res)/sizeof(WCHAR)) + ERR("Argify buffer not large enough, truncated\n"); + TRACE("%s %s => %s\n", debugstr_w(exec), debugstr_w(lpFile), debugstr_w(res)); + + /* It's documented in the KB 330337 that IE has a bug and returns + * error DMLERR_NOTPROCESSED on XTYP_EXECUTE request. + */ + if (unicode) + hDdeData = DdeClientTransaction((LPBYTE)res, (strlenW(res) + 1) * sizeof(WCHAR), hConv, 0L, 0, + XTYP_EXECUTE, 30000, &tid); + else + { + DWORD lenA = WideCharToMultiByte(CP_ACP, 0, res, -1, NULL, 0, NULL, NULL); + char *resA = (LPSTR)HeapAlloc(GetProcessHeap(), 0, lenA); + WideCharToMultiByte(CP_ACP, 0, res, -1, resA, lenA, NULL, NULL); + hDdeData = DdeClientTransaction( (LPBYTE)resA, lenA, hConv, 0L, 0, + XTYP_EXECUTE, 10000, &tid ); + HeapFree(GetProcessHeap(), 0, resA); + } + if (hDdeData) + DdeFreeDataHandle(hDdeData); + else + WARN("DdeClientTransaction failed with error %04x\n", DdeGetLastError(ddeInst)); + ret = 33; + + DdeDisconnect(hConv); + + error: + DdeUninitialize(ddeInst); + + return ret; +} + +/************************************************************************* + * execute_from_key [Internal] + */ +static UINT_PTR execute_from_key(LPCWSTR key, LPCWSTR lpFile, WCHAR *env, LPCWSTR szCommandline, + LPCWSTR executable_name, + SHELL_ExecuteW32 execfunc, + LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out) +{ + static const WCHAR wCommand[] = {'c','o','m','m','a','n','d',0}; + static const WCHAR wDdeexec[] = {'d','d','e','e','x','e','c',0}; + WCHAR cmd[256], param[1024], ddeexec[256]; + DWORD cmdlen = sizeof(cmd), ddeexeclen = sizeof(ddeexec); + UINT_PTR retval = SE_ERR_NOASSOC; + DWORD resultLen; + LPWSTR tmp; + + TRACE("%s %s %s %s %s\n", debugstr_w(key), debugstr_w(lpFile), debugstr_w(env), + debugstr_w(szCommandline), debugstr_w(executable_name)); + + cmd[0] = '\0'; + param[0] = '\0'; + + /* Get the application from the registry */ + if (RegQueryValueW(HKEY_CLASSES_ROOT, key, cmd, (LONG *)&cmdlen) == ERROR_SUCCESS) + { + TRACE("got cmd: %s\n", debugstr_w(cmd)); + + /* Is there a replace() function anywhere? */ + cmdlen /= sizeof(WCHAR); + if (cmdlen >= sizeof(cmd)/sizeof(WCHAR)) + cmdlen = sizeof(cmd)/sizeof(WCHAR)-1; + cmd[cmdlen] = '\0'; + SHELL_ArgifyW(param, sizeof(param)/sizeof(WCHAR), cmd, lpFile, (LPITEMIDLIST)psei->lpIDList, szCommandline, &resultLen); + if (resultLen > sizeof(param)/sizeof(WCHAR)) + ERR("Argify buffer not large enough, truncating\n"); + } + + /* Get the parameters needed by the application + from the associated ddeexec key */ + tmp = const_cast(strstrW(key, wCommand)); + assert(tmp); + wcscpy(tmp, wDdeexec); + + if (RegQueryValueW(HKEY_CLASSES_ROOT, key, ddeexec, (LONG *)&ddeexeclen) == ERROR_SUCCESS) + { + TRACE("Got ddeexec %s => %s\n", debugstr_w(key), debugstr_w(ddeexec)); + if (!param[0]) strcpyW(param, executable_name); + retval = dde_connect(key, param, ddeexec, lpFile, env, szCommandline, (LPITEMIDLIST)psei->lpIDList, execfunc, psei, psei_out); + } + else if (param[0]) + { + TRACE("executing: %s\n", debugstr_w(param)); + retval = execfunc(param, env, FALSE, psei, psei_out); + } + else + WARN("Nothing appropriate found for %s\n", debugstr_w(key)); + + return retval; +} + +/************************************************************************* + * FindExecutableA [SHELL32.@] + */ +HINSTANCE WINAPI FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult) +{ + HINSTANCE retval; + WCHAR *wFile = NULL, *wDirectory = NULL; + WCHAR wResult[MAX_PATH]; + + if (lpFile) __SHCloneStrAtoW(&wFile, lpFile); + if (lpDirectory) __SHCloneStrAtoW(&wDirectory, lpDirectory); + + retval = FindExecutableW(wFile, wDirectory, wResult); + WideCharToMultiByte(CP_ACP, 0, wResult, -1, lpResult, MAX_PATH, NULL, NULL); + SHFree( wFile ); + SHFree( wDirectory ); + + TRACE("returning %s\n", lpResult); + return retval; +} + +/************************************************************************* + * FindExecutableW [SHELL32.@] + * + * This function returns the executable associated with the specified file + * for the default verb. + * + * PARAMS + * lpFile [I] The file to find the association for. This must refer to + * an existing file otherwise FindExecutable fails and returns + * SE_ERR_FNF. + * lpResult [O] Points to a buffer into which the executable path is + * copied. This parameter must not be NULL otherwise + * FindExecutable() segfaults. The buffer must be of size at + * least MAX_PATH characters. + * + * RETURNS + * A value greater than 32 on success, less than or equal to 32 otherwise. + * See the SE_ERR_* constants. + * + * NOTES + * On Windows XP and 2003, FindExecutable() seems to first convert the + * filename into 8.3 format, thus taking into account only the first three + * characters of the extension, and expects to find an association for those. + * However other Windows versions behave sanely. + */ +HINSTANCE WINAPI FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR lpResult) +{ + UINT_PTR retval = SE_ERR_NOASSOC; + WCHAR old_dir[1024]; + + TRACE("File %s, Dir %s\n", debugstr_w(lpFile), debugstr_w(lpDirectory)); + + lpResult[0] = '\0'; /* Start off with an empty return string */ + if (lpFile == NULL) + return (HINSTANCE)SE_ERR_FNF; + + if (lpDirectory) + { + GetCurrentDirectoryW(sizeof(old_dir)/sizeof(WCHAR), old_dir); + SetCurrentDirectoryW(lpDirectory); + } + + retval = SHELL_FindExecutable(lpDirectory, lpFile, wszOpen, lpResult, MAX_PATH, NULL, NULL, NULL, NULL); + + TRACE("returning %s\n", debugstr_w(lpResult)); + if (lpDirectory) + SetCurrentDirectoryW(old_dir); + return (HINSTANCE)retval; +} + +/* FIXME: is this already implemented somewhere else? */ +static HKEY ShellExecute_GetClassKey( const SHELLEXECUTEINFOW *sei ) +{ + LPCWSTR ext = NULL, lpClass = NULL; + LPWSTR cls = NULL; + DWORD type = 0, sz = 0; + HKEY hkey = 0; + LONG r; + + if (sei->fMask & SEE_MASK_CLASSALL) + return sei->hkeyClass; + + if (sei->fMask & SEE_MASK_CLASSNAME) + lpClass = sei->lpClass; + else + { + ext = PathFindExtensionW( sei->lpFile ); + TRACE("ext = %s\n", debugstr_w( ext ) ); + if (!ext) + return hkey; + + r = RegOpenKeyW( HKEY_CLASSES_ROOT, ext, &hkey ); + if (r != ERROR_SUCCESS ) + return hkey; + + r = RegQueryValueExW( hkey, NULL, 0, &type, NULL, &sz ); + if ( r == ERROR_SUCCESS && type == REG_SZ ) + { + sz += sizeof (WCHAR); + cls = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, sz ); + cls[0] = 0; + RegQueryValueExW( hkey, NULL, 0, &type, (LPBYTE) cls, &sz ); + } + + RegCloseKey( hkey ); + lpClass = cls; + } + + TRACE("class = %s\n", debugstr_w(lpClass) ); + + hkey = 0; + if ( lpClass ) + RegOpenKeyW( HKEY_CLASSES_ROOT, lpClass, &hkey ); + + HeapFree( GetProcessHeap(), 0, cls ); + + return hkey; +} + +static IDataObject *shellex_get_dataobj( LPSHELLEXECUTEINFOW sei ) +{ + LPCITEMIDLIST pidllast = NULL; + IDataObject *dataobj = NULL; + IShellFolder *shf = NULL; + LPITEMIDLIST pidl = NULL; + HRESULT r; + + if (sei->fMask & SEE_MASK_CLASSALL) + pidl = (LPITEMIDLIST)sei->lpIDList; + else + { + WCHAR fullpath[MAX_PATH]; + BOOL ret; + + fullpath[0] = 0; + ret = GetFullPathNameW( sei->lpFile, MAX_PATH, fullpath, NULL ); + if (!ret) + goto end; + + pidl = ILCreateFromPathW( fullpath ); + } + + r = SHBindToParent( pidl, IID_IShellFolder, (LPVOID*)&shf, &pidllast ); + if ( FAILED( r ) ) + goto end; + + shf->GetUIObjectOf(NULL, 1, &pidllast, + IID_IDataObject, NULL, (LPVOID*) &dataobj ); + +end: + if ( pidl != sei->lpIDList ) + ILFree( pidl ); + if ( shf ) + shf->Release(); + return dataobj; +} + +static HRESULT shellex_run_context_menu_default( IShellExtInit *obj, + LPSHELLEXECUTEINFOW sei ) +{ + IContextMenu *cm = NULL; + CMINVOKECOMMANDINFOEX ici; + MENUITEMINFOW info; + WCHAR string[0x80]; + INT i, n, def = -1; + HMENU hmenu = 0; + HRESULT r; + + TRACE("%p %p\n", obj, sei ); + + r = obj->QueryInterface(IID_IContextMenu, (LPVOID*) &cm ); + if ( FAILED( r ) ) + return r; + + hmenu = CreateMenu(); + if ( !hmenu ) + goto end; + + /* the number of the last menu added is returned in r */ + r = cm->QueryContextMenu(hmenu, 0, 0x20, 0x7fff, CMF_DEFAULTONLY ); + if ( FAILED( r ) ) + goto end; + + n = GetMenuItemCount( hmenu ); + for ( i = 0; i < n; i++ ) + { + memset( &info, 0, sizeof info ); + info.cbSize = sizeof info; + info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE | MIIM_DATA | MIIM_ID; + info.dwTypeData = string; + info.cch = sizeof string; + string[0] = 0; + GetMenuItemInfoW( hmenu, i, TRUE, &info ); + + TRACE("menu %d %s %08x %08lx %08x %08x\n", i, debugstr_w(string), + info.fState, info.dwItemData, info.fType, info.wID ); + if ( ( !sei->lpVerb && (info.fState & MFS_DEFAULT) ) || + ( sei->lpVerb && !lstrcmpiW( sei->lpVerb, string ) ) ) + { + def = i; + break; + } + } + + r = E_FAIL; + if ( def == -1 ) + goto end; + + memset( &ici, 0, sizeof ici ); + ici.cbSize = sizeof ici; + ici.fMask = CMIC_MASK_UNICODE | (sei->fMask & (SEE_MASK_NOASYNC|SEE_MASK_ASYNCOK|SEE_MASK_FLAG_NO_UI)); + ici.nShow = sei->nShow; + ici.lpVerb = MAKEINTRESOURCEA( def ); + ici.hwnd = sei->hwnd; + ici.lpParametersW = sei->lpParameters; + + r = cm->InvokeCommand((LPCMINVOKECOMMANDINFO) &ici ); + + TRACE("invoke command returned %08x\n", r ); + +end: + if ( hmenu ) + DestroyMenu( hmenu ); + if ( cm ) + cm->Release(); + return r; +} + +static HRESULT shellex_load_object_and_run( HKEY hkey, LPCGUID guid, LPSHELLEXECUTEINFOW sei ) +{ + IDataObject *dataobj = NULL; + IObjectWithSite *ows = NULL; + IShellExtInit *obj = NULL; + HRESULT r; + + TRACE("%p %s %p\n", hkey, debugstr_guid( guid ), sei ); + + r = CoInitialize( NULL ); + if ( FAILED( r ) ) + goto end; + + r = CoCreateInstance(*guid, NULL, CLSCTX_INPROC_SERVER, + IID_IShellExtInit, (LPVOID*)&obj ); + if ( FAILED( r ) ) + { + ERR("failed %08x\n", r ); + goto end; + } + + dataobj = shellex_get_dataobj( sei ); + if ( !dataobj ) + { + ERR("failed to get data object\n"); + goto end; + } + + r = obj->Initialize(NULL, dataobj, hkey ); + if ( FAILED( r ) ) + goto end; + + r = obj->QueryInterface(IID_IObjectWithSite, (LPVOID*) &ows ); + if ( FAILED( r ) ) + goto end; + + ows->SetSite(NULL ); + + r = shellex_run_context_menu_default( obj, sei ); + +end: + if ( ows ) + ows->Release(); + if ( dataobj ) + dataobj->Release(); + if ( obj ) + obj->Release(); + CoUninitialize(); + return r; +} + + +/************************************************************************* + * ShellExecute_FromContextMenu [Internal] + */ +static LONG ShellExecute_FromContextMenu( LPSHELLEXECUTEINFOW sei ) +{ + static const WCHAR szcm[] = { 's','h','e','l','l','e','x','\\', + 'C','o','n','t','e','x','t','M','e','n','u','H','a','n','d','l','e','r','s',0 }; + HKEY hkey, hkeycm = 0; + WCHAR szguid[39]; + HRESULT hr; + GUID guid; + DWORD i; + LONG r; + + TRACE("%s\n", debugstr_w(sei->lpFile) ); + + hkey = ShellExecute_GetClassKey( sei ); + if ( !hkey ) + return ERROR_FUNCTION_FAILED; + + r = RegOpenKeyW( hkey, szcm, &hkeycm ); + if ( r == ERROR_SUCCESS ) + { + i = 0; + while ( 1 ) + { + r = RegEnumKeyW( hkeycm, i++, szguid, sizeof(szguid)/sizeof(szguid[0]) ); + if ( r != ERROR_SUCCESS ) + break; + + hr = CLSIDFromString( szguid, &guid ); + if (SUCCEEDED(hr)) + { + /* stop at the first one that succeeds in running */ + hr = shellex_load_object_and_run( hkey, &guid, sei ); + if ( SUCCEEDED( hr ) ) + break; + } + } + RegCloseKey( hkeycm ); + } + + if ( hkey != sei->hkeyClass ) + RegCloseKey( hkey ); + return r; +} + +static UINT_PTR SHELL_execute_class( LPCWSTR wszApplicationName, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out, SHELL_ExecuteW32 execfunc ) +{ + static const WCHAR wSpace[] = {' ',0}; + WCHAR execCmd[1024], wcmd[1024]; + /* launch a document by fileclass like 'WordPad.Document.1' */ + /* the Commandline contains 'c:\Path\wordpad.exe "%1"' */ + /* FIXME: wcmd should not be of a fixed size. Fixed to 1024, MAX_PATH is way too short! */ + ULONG cmask=(psei->fMask & SEE_MASK_CLASSALL); + DWORD resultLen; + BOOL done; + + HCR_GetExecuteCommandW((cmask == SEE_MASK_CLASSKEY) ? psei->hkeyClass : NULL, + (cmask == SEE_MASK_CLASSNAME) ? psei->lpClass: NULL, + psei->lpVerb, + execCmd, sizeof(execCmd)); + + /* FIXME: get the extension of lpFile, check if it fits to the lpClass */ + TRACE("SEE_MASK_CLASSNAME->%s, doc->%s\n", debugstr_w(execCmd), debugstr_w(wszApplicationName)); + + wcmd[0] = '\0'; + done = SHELL_ArgifyW(wcmd, sizeof(wcmd)/sizeof(WCHAR), execCmd, wszApplicationName, (LPITEMIDLIST)psei->lpIDList, NULL, &resultLen); + if (!done && wszApplicationName[0]) + { + strcatW(wcmd, wSpace); + strcatW(wcmd, wszApplicationName); + } + if (resultLen > sizeof(wcmd)/sizeof(WCHAR)) + ERR("Argify buffer not large enough... truncating\n"); + return execfunc(wcmd, NULL, FALSE, psei, psei_out); +} + +static BOOL SHELL_translate_idlist( LPSHELLEXECUTEINFOW sei, LPWSTR wszParameters, DWORD parametersLen, LPWSTR wszApplicationName, DWORD dwApplicationNameLen ) +{ + static const WCHAR wExplorer[] = {'e','x','p','l','o','r','e','r','.','e','x','e',0}; + WCHAR buffer[MAX_PATH]; + BOOL appKnownSingular = FALSE; + + /* last chance to translate IDList: now also allow CLSID paths */ + if (SUCCEEDED(SHELL_GetPathFromIDListForExecuteW((LPCITEMIDLIST)sei->lpIDList, buffer, sizeof(buffer)))) { + if (buffer[0]==':' && buffer[1]==':') { + /* open shell folder for the specified class GUID */ + if (strlenW(buffer) + 1 > parametersLen) + ERR("parameters len exceeds buffer size (%i > %i), truncating\n", + lstrlenW(buffer) + 1, parametersLen); + lstrcpynW(wszParameters, buffer, parametersLen); + if (strlenW(wExplorer) > dwApplicationNameLen) + ERR("application len exceeds buffer size (%i > %i), truncating\n", + lstrlenW(wExplorer) + 1, dwApplicationNameLen); + lstrcpynW(wszApplicationName, wExplorer, dwApplicationNameLen); + appKnownSingular = TRUE; + + sei->fMask &= ~SEE_MASK_INVOKEIDLIST; + } else { + WCHAR target[MAX_PATH]; + DWORD attribs; + DWORD resultLen; + /* Check if we're executing a directory and if so use the + handler for the Folder class */ + strcpyW(target, buffer); + attribs = GetFileAttributesW(buffer); + if (attribs != INVALID_FILE_ATTRIBUTES && + (attribs & FILE_ATTRIBUTE_DIRECTORY) && + HCR_GetExecuteCommandW(0, wszFolder, + sei->lpVerb, + buffer, sizeof(buffer))) { + SHELL_ArgifyW(wszApplicationName, dwApplicationNameLen, + buffer, target, (LPITEMIDLIST)sei->lpIDList, NULL, &resultLen); + if (resultLen > dwApplicationNameLen) + ERR("Argify buffer not large enough... truncating\n"); + appKnownSingular = FALSE; + } + sei->fMask &= ~SEE_MASK_INVOKEIDLIST; + } + } + return appKnownSingular; +} + +static UINT_PTR SHELL_quote_and_execute( LPCWSTR wcmd, LPCWSTR wszParameters, LPCWSTR lpstrProtocol, LPCWSTR wszApplicationName, LPWSTR env, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out, SHELL_ExecuteW32 execfunc ) +{ + static const WCHAR wQuote[] = {'"',0}; + static const WCHAR wSpace[] = {' ',0}; + UINT_PTR retval; + DWORD len; + WCHAR *wszQuotedCmd; + + /* Length of quotes plus length of command plus NULL terminator */ + len = 2 + lstrlenW(wcmd) + 1; + if (wszParameters[0]) + { + /* Length of space plus length of parameters */ + len += 1 + lstrlenW(wszParameters); + } + wszQuotedCmd = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + /* Must quote to handle case where cmd contains spaces, + * else security hole if malicious user creates executable file "C:\\Program" + */ + strcpyW(wszQuotedCmd, wQuote); + strcatW(wszQuotedCmd, wcmd); + strcatW(wszQuotedCmd, wQuote); + if (wszParameters[0]) { + strcatW(wszQuotedCmd, wSpace); + strcatW(wszQuotedCmd, wszParameters); + } + TRACE("%s/%s => %s/%s\n", debugstr_w(wszApplicationName), debugstr_w(psei->lpVerb), debugstr_w(wszQuotedCmd), debugstr_w(lpstrProtocol)); + if (*lpstrProtocol) + retval = execute_from_key(lpstrProtocol, wszApplicationName, env, psei->lpParameters, wcmd, execfunc, psei, psei_out); + else + retval = execfunc(wszQuotedCmd, env, FALSE, psei, psei_out); + HeapFree(GetProcessHeap(), 0, wszQuotedCmd); + return retval; +} + +static UINT_PTR SHELL_execute_url( LPCWSTR lpFile, LPCWSTR wFile, LPCWSTR wcmd, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out, SHELL_ExecuteW32 execfunc ) +{ + static const WCHAR wShell[] = {'\\','s','h','e','l','l','\\',0}; + static const WCHAR wCommand[] = {'\\','c','o','m','m','a','n','d',0}; + UINT_PTR retval; + WCHAR *lpstrProtocol; + LPCWSTR lpstrRes; + INT iSize; + DWORD len; + + lpstrRes = strchrW(lpFile, ':'); + if (lpstrRes) + iSize = lpstrRes - lpFile; + else + iSize = strlenW(lpFile); + + TRACE("Got URL: %s\n", debugstr_w(lpFile)); + /* Looking for ...protocol\shell\lpOperation\command */ + len = iSize + lstrlenW(wShell) + lstrlenW(wCommand) + 1; + if (psei->lpVerb) + len += lstrlenW(psei->lpVerb); + else + len += lstrlenW(wszOpen); + lpstrProtocol = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + memcpy(lpstrProtocol, lpFile, iSize*sizeof(WCHAR)); + lpstrProtocol[iSize] = '\0'; + strcatW(lpstrProtocol, wShell); + strcatW(lpstrProtocol, psei->lpVerb? psei->lpVerb: wszOpen); + strcatW(lpstrProtocol, wCommand); + + /* Remove File Protocol from lpFile */ + /* In the case file://path/file */ + if (!strncmpiW(lpFile, wFile, iSize)) + { + lpFile += iSize; + while (*lpFile == ':') lpFile++; + } + retval = execute_from_key(lpstrProtocol, lpFile, NULL, psei->lpParameters, + wcmd, execfunc, psei, psei_out); + HeapFree(GetProcessHeap(), 0, lpstrProtocol); + return retval; +} + +void do_error_dialog( UINT_PTR retval, HWND hwnd ) +{ + WCHAR msg[2048]; + int error_code=GetLastError(); + + if (retval == SE_ERR_NOASSOC) + LoadStringW(shell32_hInstance, IDS_SHLEXEC_NOASSOC, msg, sizeof(msg)/sizeof(WCHAR)); + else + FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code, 0, msg, sizeof(msg)/sizeof(WCHAR), NULL); + + MessageBoxW(hwnd, msg, NULL, MB_ICONERROR); +} + +/************************************************************************* + * SHELL_execute [Internal] + */ +BOOL SHELL_execute( LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc ) +{ + static const WCHAR wSpace[] = {' ',0}; + static const WCHAR wWww[] = {'w','w','w',0}; + static const WCHAR wFile[] = {'f','i','l','e',0}; + static const WCHAR wHttp[] = {'h','t','t','p',':','/','/',0}; + static const DWORD unsupportedFlags = + SEE_MASK_INVOKEIDLIST | SEE_MASK_ICON | SEE_MASK_HOTKEY | + SEE_MASK_CONNECTNETDRV | SEE_MASK_FLAG_DDEWAIT | + SEE_MASK_UNICODE | SEE_MASK_ASYNCOK | SEE_MASK_HMONITOR; + + WCHAR parametersBuffer[1024], dirBuffer[MAX_PATH], wcmdBuffer[1024]; + WCHAR *wszApplicationName, *wszParameters, *wszDir, *wcmd; + DWORD dwApplicationNameLen = MAX_PATH+2; + DWORD parametersLen = sizeof(parametersBuffer) / sizeof(WCHAR); + DWORD dirLen = sizeof(dirBuffer) / sizeof(WCHAR); + DWORD wcmdLen = sizeof(wcmdBuffer) / sizeof(WCHAR); + DWORD len; + SHELLEXECUTEINFOW sei_tmp; /* modifiable copy of SHELLEXECUTEINFO struct */ + WCHAR wfileName[MAX_PATH]; + WCHAR *env; + WCHAR lpstrProtocol[256]; + LPCWSTR lpFile; + UINT_PTR retval = SE_ERR_NOASSOC; + BOOL appKnownSingular = FALSE; + + /* make a local copy of the LPSHELLEXECUTEINFO structure and work with this from now on */ + sei_tmp = *sei; + + TRACE("mask=0x%08x hwnd=%p verb=%s file=%s parm=%s dir=%s show=0x%08x class=%s\n", + sei_tmp.fMask, sei_tmp.hwnd, debugstr_w(sei_tmp.lpVerb), + debugstr_w(sei_tmp.lpFile), debugstr_w(sei_tmp.lpParameters), + debugstr_w(sei_tmp.lpDirectory), sei_tmp.nShow, + ((sei_tmp.fMask & SEE_MASK_CLASSALL) == SEE_MASK_CLASSNAME) ? + debugstr_w(sei_tmp.lpClass) : "not used"); + + sei->hProcess = NULL; + + /* make copies of all path/command strings */ + if (!sei_tmp.lpFile) + { + wszApplicationName = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwApplicationNameLen*sizeof(WCHAR)); + *wszApplicationName = '\0'; + } + else if (*sei_tmp.lpFile == '\"') + { + DWORD l = strlenW(sei_tmp.lpFile+1); + if(l >= dwApplicationNameLen) dwApplicationNameLen = l+1; + wszApplicationName = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwApplicationNameLen*sizeof(WCHAR)); + memcpy(wszApplicationName, sei_tmp.lpFile+1, (l+1)*sizeof(WCHAR)); + if (wszApplicationName[l-1] == '\"') + wszApplicationName[l-1] = '\0'; + appKnownSingular = TRUE; + TRACE("wszApplicationName=%s\n",debugstr_w(wszApplicationName)); + } else { + DWORD l = strlenW(sei_tmp.lpFile)+1; + if(l > dwApplicationNameLen) dwApplicationNameLen = l+1; + wszApplicationName = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwApplicationNameLen*sizeof(WCHAR)); + memcpy(wszApplicationName, sei_tmp.lpFile, l*sizeof(WCHAR)); + } + + wszParameters = parametersBuffer; + if (sei_tmp.lpParameters) + { + len = lstrlenW(sei_tmp.lpParameters) + 1; + if (len > parametersLen) + { + wszParameters = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + parametersLen = len; + } + strcpyW(wszParameters, sei_tmp.lpParameters); + } + else + *wszParameters = '\0'; + + wszDir = dirBuffer; + if (sei_tmp.lpDirectory) + { + len = lstrlenW(sei_tmp.lpDirectory) + 1; + if (len > dirLen) + { + wszDir = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + dirLen = len; + } + strcpyW(wszDir, sei_tmp.lpDirectory); + } + else + *wszDir = '\0'; + + /* adjust string pointers to point to the new buffers */ + sei_tmp.lpFile = wszApplicationName; + sei_tmp.lpParameters = wszParameters; + sei_tmp.lpDirectory = wszDir; + + if (sei_tmp.fMask & unsupportedFlags) + { + FIXME("flags ignored: 0x%08x\n", sei_tmp.fMask & unsupportedFlags); + } + + /* process the IDList */ + if (sei_tmp.fMask & SEE_MASK_IDLIST) + { + IShellExecuteHookW* pSEH; + + HRESULT hr = SHBindToParent((LPCITEMIDLIST)sei_tmp.lpIDList, IID_IShellExecuteHookW, (LPVOID*)&pSEH, NULL); + + if (SUCCEEDED(hr)) + { + hr = pSEH->Execute(&sei_tmp); + + pSEH->Release(); + + if (hr == S_OK) { + HeapFree(GetProcessHeap(), 0, wszApplicationName); + if (wszParameters != parametersBuffer) + HeapFree(GetProcessHeap(), 0, wszParameters); + if (wszDir != dirBuffer) + HeapFree(GetProcessHeap(), 0, wszDir); + return TRUE; + } + } + + SHGetPathFromIDListW((LPCITEMIDLIST)sei_tmp.lpIDList, wszApplicationName); + appKnownSingular = TRUE; + TRACE("-- idlist=%p (%s)\n", sei_tmp.lpIDList, debugstr_w(wszApplicationName)); + } + + if ( ERROR_SUCCESS == ShellExecute_FromContextMenu( &sei_tmp ) ) + { + sei->hInstApp = (HINSTANCE) 33; + HeapFree(GetProcessHeap(), 0, wszApplicationName); + if (wszParameters != parametersBuffer) + HeapFree(GetProcessHeap(), 0, wszParameters); + if (wszDir != dirBuffer) + HeapFree(GetProcessHeap(), 0, wszDir); + return TRUE; + } + + if (sei_tmp.fMask & SEE_MASK_CLASSALL) + { + retval = SHELL_execute_class( wszApplicationName, &sei_tmp, sei, + execfunc ); + if (retval <= 32 && !(sei_tmp.fMask & SEE_MASK_FLAG_NO_UI)) + { + OPENASINFO Info; + + //FIXME + // need full path + + Info.pcszFile = wszApplicationName; + Info.pcszClass = NULL; + Info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_EXEC; + + //if (SHOpenWithDialog(sei_tmp.hwnd, &Info) != S_OK) + do_error_dialog(retval, sei_tmp.hwnd); + } + HeapFree(GetProcessHeap(), 0, wszApplicationName); + if (wszParameters != parametersBuffer) + HeapFree(GetProcessHeap(), 0, wszParameters); + if (wszDir != dirBuffer) + HeapFree(GetProcessHeap(), 0, wszDir); + return retval > 32; + } + + /* Has the IDList not yet been translated? */ + if (sei_tmp.fMask & SEE_MASK_IDLIST) + { + appKnownSingular = SHELL_translate_idlist( &sei_tmp, wszParameters, + parametersLen, + wszApplicationName, + dwApplicationNameLen ); + } + + /* expand environment strings */ + len = ExpandEnvironmentStringsW(sei_tmp.lpFile, NULL, 0); + if (len>0) + { + LPWSTR buf; + buf = (LPWSTR)HeapAlloc(GetProcessHeap(),0,(len+1)*sizeof(WCHAR)); + + ExpandEnvironmentStringsW(sei_tmp.lpFile, buf, len+1); + HeapFree(GetProcessHeap(), 0, wszApplicationName); + dwApplicationNameLen = len+1; + wszApplicationName = buf; + /* appKnownSingular unmodified */ + + sei_tmp.lpFile = wszApplicationName; + } + + if (*sei_tmp.lpParameters) + { + len = ExpandEnvironmentStringsW(sei_tmp.lpParameters, NULL, 0); + if (len > 0) + { + LPWSTR buf; + len++; + buf = (LPWSTR)HeapAlloc(GetProcessHeap(),0,len*sizeof(WCHAR)); + ExpandEnvironmentStringsW(sei_tmp.lpParameters, buf, len); + if (wszParameters != parametersBuffer) + HeapFree(GetProcessHeap(), 0, wszParameters); + wszParameters = buf; + parametersLen = len; + sei_tmp.lpParameters = wszParameters; + } + } + + if (*sei_tmp.lpDirectory) + { + len = ExpandEnvironmentStringsW(sei_tmp.lpDirectory, NULL, 0); + if (len > 0) + { + LPWSTR buf; + len++; + buf = (LPWSTR)HeapAlloc(GetProcessHeap(),0,len*sizeof(WCHAR)); + ExpandEnvironmentStringsW(sei_tmp.lpDirectory, buf, len); + if (wszDir != dirBuffer) + HeapFree(GetProcessHeap(), 0, wszDir); + wszDir = buf; + sei_tmp.lpDirectory = wszDir; + } + } + + /* Else, try to execute the filename */ + TRACE("execute:%s,%s,%s\n", debugstr_w(wszApplicationName), debugstr_w(wszParameters), debugstr_w(wszDir)); + + /* separate out command line arguments from executable file name */ + if (!*sei_tmp.lpParameters && !appKnownSingular) { + /* If the executable path is quoted, handle the rest of the command line as parameters. */ + if (sei_tmp.lpFile[0] == '"') { + LPWSTR src = wszApplicationName/*sei_tmp.lpFile*/ + 1; + LPWSTR dst = wfileName; + LPWSTR end; + + /* copy the unquoted executable path to 'wfileName' */ + while(*src && *src!='"') + *dst++ = *src++; + + *dst = '\0'; + + if (*src == '"') { + end = ++src; + + while(isspace(*src)) + ++src; + } else + end = src; + + /* copy the parameter string to 'wszParameters' */ + strcpyW(wszParameters, src); + + /* terminate previous command string after the quote character */ + *end = '\0'; + } + else + { + /* If the executable name is not quoted, we have to use this search loop here, + that in CreateProcess() is not sufficient because it does not handle shell links. */ + WCHAR buffer[MAX_PATH], xlpFile[MAX_PATH]; + LPWSTR space, s; + + LPWSTR beg = wszApplicationName/*sei_tmp.lpFile*/; + for(s=beg; (space= const_cast(strchrW(s, ' '))); s=space+1) { + int idx = space-sei_tmp.lpFile; + memcpy(buffer, sei_tmp.lpFile, idx * sizeof(WCHAR)); + buffer[idx] = '\0'; + + /*FIXME This finds directory paths if the targeted file name contains spaces. */ + if (SearchPathW(*sei_tmp.lpDirectory? sei_tmp.lpDirectory: NULL, buffer, wszExe, sizeof(xlpFile)/sizeof(xlpFile[0]), xlpFile, NULL)) + { + /* separate out command from parameter string */ + LPCWSTR p = space + 1; + + while(isspaceW(*p)) + ++p; + + strcpyW(wszParameters, p); + *space = '\0'; + + break; + } + } + + lstrcpynW(wfileName, sei_tmp.lpFile,sizeof(wfileName)/sizeof(WCHAR)); + } + } else + lstrcpynW(wfileName, sei_tmp.lpFile,sizeof(wfileName)/sizeof(WCHAR)); + + lpFile = wfileName; + + wcmd = wcmdBuffer; + len = lstrlenW(wszApplicationName) + 1; + if (sei_tmp.lpParameters[0]) + len += 1 + lstrlenW(wszParameters); + if (len > wcmdLen) + { + wcmd = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + wcmdLen = len; + } + strcpyW(wcmd, wszApplicationName); + if (sei_tmp.lpParameters[0]) { + strcatW(wcmd, wSpace); + strcatW(wcmd, wszParameters); + } + + retval = execfunc(wcmd, NULL, FALSE, &sei_tmp, sei); + if (retval > 32) { + HeapFree(GetProcessHeap(), 0, wszApplicationName); + if (wszParameters != parametersBuffer) + HeapFree(GetProcessHeap(), 0, wszParameters); + if (wszDir != dirBuffer) + HeapFree(GetProcessHeap(), 0, wszDir); + if (wcmd != wcmdBuffer) + HeapFree(GetProcessHeap(), 0, wcmd); + return TRUE; + } + + /* Else, try to find the executable */ + wcmd[0] = '\0'; + retval = SHELL_FindExecutable(sei_tmp.lpDirectory, lpFile, sei_tmp.lpVerb, wcmd, wcmdLen, lpstrProtocol, &env, (LPITEMIDLIST)sei_tmp.lpIDList, sei_tmp.lpParameters); + if (retval > 32) /* Found */ + { + retval = SHELL_quote_and_execute( wcmd, wszParameters, lpstrProtocol, + wszApplicationName, env, &sei_tmp, + sei, execfunc ); + HeapFree( GetProcessHeap(), 0, env ); + } + else if (PathIsDirectoryW(lpFile)) + { + static const WCHAR wExplorer[] = {'e','x','p','l','o','r','e','r',0}; + static const WCHAR wQuote[] = {'"',0}; + WCHAR wExec[MAX_PATH]; + WCHAR * lpQuotedFile = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, sizeof(WCHAR) * (strlenW(lpFile) + 3) ); + + if (lpQuotedFile) + { + retval = SHELL_FindExecutable( sei_tmp.lpDirectory, wExplorer, + wszOpen, wExec, MAX_PATH, + NULL, &env, NULL, NULL ); + if (retval > 32) + { + strcpyW(lpQuotedFile, wQuote); + strcatW(lpQuotedFile, lpFile); + strcatW(lpQuotedFile, wQuote); + retval = SHELL_quote_and_execute( wExec, lpQuotedFile, + lpstrProtocol, + wszApplicationName, env, + &sei_tmp, sei, execfunc ); + HeapFree( GetProcessHeap(), 0, env ); + } + HeapFree( GetProcessHeap(), 0, lpQuotedFile ); + } + else + retval = 0; /* Out of memory */ + } + else if (PathIsURLW(lpFile)) /* File not found, check for URL */ + { + retval = SHELL_execute_url( lpFile, wFile, wcmd, &sei_tmp, sei, execfunc ); + } + /* Check if file specified is in the form www.??????.*** */ + else if (!strncmpiW(lpFile, wWww, 3)) + { + /* if so, append lpFile http:// and call ShellExecute */ + WCHAR lpstrTmpFile[256]; + strcpyW(lpstrTmpFile, wHttp); + strcatW(lpstrTmpFile, lpFile); + retval = (UINT_PTR)ShellExecuteW(sei_tmp.hwnd, sei_tmp.lpVerb, lpstrTmpFile, NULL, NULL, 0); + } + + TRACE("retval %lu\n", retval); + + if (retval <= 32 && !(sei_tmp.fMask & SEE_MASK_FLAG_NO_UI)) + { + OPENASINFO Info; + + //FIXME + // need full path + + Info.pcszFile = wszApplicationName; + Info.pcszClass = NULL; + Info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_EXEC; + + //if (SHOpenWithDialog(sei_tmp.hwnd, &Info) != S_OK) + do_error_dialog(retval, sei_tmp.hwnd); + } + + HeapFree(GetProcessHeap(), 0, wszApplicationName); + if (wszParameters != parametersBuffer) + HeapFree(GetProcessHeap(), 0, wszParameters); + if (wszDir != dirBuffer) + HeapFree(GetProcessHeap(), 0, wszDir); + if (wcmd != wcmdBuffer) + HeapFree(GetProcessHeap(), 0, wcmd); + + sei->hInstApp = (HINSTANCE)(retval > 32 ? 33 : retval); + + return retval > 32; +} + +/************************************************************************* + * ShellExecuteA [SHELL32.290] + */ +HINSTANCE WINAPI ShellExecuteA(HWND hWnd, LPCSTR lpOperation,LPCSTR lpFile, + LPCSTR lpParameters,LPCSTR lpDirectory, INT iShowCmd) +{ + SHELLEXECUTEINFOA sei; + + TRACE("%p,%s,%s,%s,%s,%d\n", + hWnd, debugstr_a(lpOperation), debugstr_a(lpFile), + debugstr_a(lpParameters), debugstr_a(lpDirectory), iShowCmd); + + sei.cbSize = sizeof(sei); + sei.fMask = SEE_MASK_FLAG_NO_UI; + sei.hwnd = hWnd; + sei.lpVerb = lpOperation; + sei.lpFile = lpFile; + sei.lpParameters = lpParameters; + sei.lpDirectory = lpDirectory; + sei.nShow = iShowCmd; + sei.lpIDList = 0; + sei.lpClass = 0; + sei.hkeyClass = 0; + sei.dwHotKey = 0; + sei.hProcess = 0; + + ShellExecuteExA (&sei); + return sei.hInstApp; +} + +/************************************************************************* + * ShellExecuteExA [SHELL32.292] + * + */ +BOOL WINAPI ShellExecuteExA (LPSHELLEXECUTEINFOA sei) +{ + SHELLEXECUTEINFOW seiW; + BOOL ret; + WCHAR *wVerb = NULL, *wFile = NULL, *wParameters = NULL, *wDirectory = NULL, *wClass = NULL; + + TRACE("%p\n", sei); + + memcpy(&seiW, sei, sizeof(SHELLEXECUTEINFOW)); + + if (sei->lpVerb) + seiW.lpVerb = __SHCloneStrAtoW(&wVerb, sei->lpVerb); + + if (sei->lpFile) + seiW.lpFile = __SHCloneStrAtoW(&wFile, sei->lpFile); + + if (sei->lpParameters) + seiW.lpParameters = __SHCloneStrAtoW(&wParameters, sei->lpParameters); + + if (sei->lpDirectory) + seiW.lpDirectory = __SHCloneStrAtoW(&wDirectory, sei->lpDirectory); + + if ((sei->fMask & SEE_MASK_CLASSALL) == SEE_MASK_CLASSNAME && sei->lpClass) + seiW.lpClass = __SHCloneStrAtoW(&wClass, sei->lpClass); + else + seiW.lpClass = NULL; + + ret = SHELL_execute( &seiW, SHELL_ExecuteW ); + + sei->hInstApp = seiW.hInstApp; + + if (sei->fMask & SEE_MASK_NOCLOSEPROCESS) + sei->hProcess = seiW.hProcess; + + SHFree(wVerb); + SHFree(wFile); + SHFree(wParameters); + SHFree(wDirectory); + SHFree(wClass); + + return ret; +} + +/************************************************************************* + * ShellExecuteExW [SHELL32.293] + * + */ +BOOL WINAPI ShellExecuteExW (LPSHELLEXECUTEINFOW sei) +{ + return SHELL_execute( sei, SHELL_ExecuteW ); +} + +/************************************************************************* + * ShellExecuteW [SHELL32.294] + * from shellapi.h + * WINSHELLAPI HINSTANCE APIENTRY ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, + * LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd); + */ +HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, + LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd) +{ + SHELLEXECUTEINFOW sei; + + TRACE("\n"); + sei.cbSize = sizeof(sei); + sei.fMask = SEE_MASK_FLAG_NO_UI; + sei.hwnd = hwnd; + sei.lpVerb = lpOperation; + sei.lpFile = lpFile; + sei.lpParameters = lpParameters; + sei.lpDirectory = lpDirectory; + sei.nShow = nShowCmd; + sei.lpIDList = 0; + sei.lpClass = 0; + sei.hkeyClass = 0; + sei.dwHotKey = 0; + sei.hProcess = 0; + + SHELL_execute( &sei, SHELL_ExecuteW ); + return sei.hInstApp; +} + +/************************************************************************* + * WOWShellExecute [SHELL32.@] + * + * FIXME: the callback function most likely doesn't work the same way on Windows. + */ +EXTERN_C HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpOperation,LPCSTR lpFile, + LPCSTR lpParameters,LPCSTR lpDirectory, INT iShowCmd, void *callback) +{ + SHELLEXECUTEINFOW seiW; + WCHAR *wVerb = NULL, *wFile = NULL, *wParameters = NULL, *wDirectory = NULL; + HANDLE hProcess = 0; + + seiW.lpVerb = lpOperation ? __SHCloneStrAtoW(&wVerb, lpOperation) : NULL; + seiW.lpFile = lpFile ? __SHCloneStrAtoW(&wFile, lpFile) : NULL; + seiW.lpParameters = lpParameters ? __SHCloneStrAtoW(&wParameters, lpParameters) : NULL; + seiW.lpDirectory = lpDirectory ? __SHCloneStrAtoW(&wDirectory, lpDirectory) : NULL; + + seiW.cbSize = sizeof(seiW); + seiW.fMask = 0; + seiW.hwnd = hWnd; + seiW.nShow = iShowCmd; + seiW.lpIDList = 0; + seiW.lpClass = 0; + seiW.hkeyClass = 0; + seiW.dwHotKey = 0; + seiW.hProcess = hProcess; + + SHELL_execute( &seiW, (SHELL_ExecuteW32)callback ); + + SHFree(wVerb); + SHFree(wFile); + SHFree(wParameters); + SHFree(wDirectory); + return seiW.hInstApp; +} + +/************************************************************************* + * OpenAs_RunDLLA [SHELL32.@] + */ +EXTERN_C void WINAPI OpenAs_RunDLLA(HWND hwnd, HINSTANCE hinst, LPCSTR cmdline, int cmdshow) +{ + FIXME("%p, %p, %s, %d\n", hwnd, hinst, debugstr_a(cmdline), cmdshow); +} + +/************************************************************************* + * OpenAs_RunDLLW [SHELL32.@] + */ +EXTERN_C void WINAPI OpenAs_RunDLLW(HWND hwnd, HINSTANCE hinst, LPCWSTR cmdline, int cmdshow) +{ + FIXME("%p, %p, %s, %d\n", hwnd, hinst, debugstr_w(cmdline), cmdshow); +} diff --git a/reactos/dll/win32/shell32_new/shlfileop.cpp b/reactos/dll/win32/shell32_new/shlfileop.cpp new file mode 100644 index 00000000000..d5a90a239d6 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shlfileop.cpp @@ -0,0 +1,1878 @@ +/* + * SHFileOperation + * + * Copyright 2000 Juergen Schmied + * Copyright 2002 Andriy Palamarchuk + * Copyright 2004 Dietrich Teickner (from Odin) + * Copyright 2004 Rolf Kalbermatter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +//#define NO_SHLWAPI_STREAM +#include + + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +#define IsAttrib(x, y) ((INVALID_FILE_ATTRIBUTES != (x)) && ((x) & (y))) +#define IsAttribFile(x) (!((x) & FILE_ATTRIBUTE_DIRECTORY)) +#define IsAttribDir(x) IsAttrib(x, FILE_ATTRIBUTE_DIRECTORY) +#define IsDotDir(x) ((x[0] == '.') && ((x[1] == 0) || ((x[1] == '.') && (x[2] == 0)))) + +#define FO_MASK 0xF +#define WM_FILE (WM_USER + 1) +#define TIMER_ID (100) + +static const WCHAR wWildcardFile[] = {'*',0}; +static const WCHAR wWildcardChars[] = {'*','?',0}; + +static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec); +static DWORD SHNotifyRemoveDirectoryW(LPCWSTR path); +static DWORD SHNotifyDeleteFileW(LPCWSTR path); +static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest); +static DWORD SHNotifyCopyFileW(LPCWSTR src, LPCWSTR dest, BOOL bFailIfExists); +static DWORD SHFindAttrW(LPCWSTR pName, BOOL fileOnly); + +typedef struct +{ + SHFILEOPSTRUCTW *req; + DWORD dwYesToAllMask; + BOOL bManyItems; + BOOL bCancelled; +} FILE_OPERATION; + +#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND 1026 + +typedef struct +{ + DWORD attributes; + LPWSTR szDirectory; + LPWSTR szFilename; + LPWSTR szFullPath; + BOOL bFromWildcard; + BOOL bFromRelative; + BOOL bExists; +} FILE_ENTRY; + +typedef struct +{ + FILE_ENTRY *feFiles; + DWORD num_alloc; + DWORD dwNumFiles; + BOOL bAnyFromWildcard; + BOOL bAnyDirectories; + BOOL bAnyDontExist; +} FILE_LIST; + +typedef struct +{ + FILE_LIST * from; + FILE_LIST * to; + FILE_OPERATION * op; + DWORD Index; + HWND hDlgCtrl; + HWND hwndDlg; +}FILE_OPERATION_CONTEXT; + + +/* Confirm dialogs with an optional "Yes To All" as used in file operations confirmations + */ +static const WCHAR CONFIRM_MSG_PROP[] = {'W','I','N','E','_','C','O','N','F','I','R','M',0}; + +struct confirm_msg_info +{ + LPWSTR lpszText; + LPWSTR lpszCaption; + HICON hIcon; + BOOL bYesToAll; +}; + +/* as some buttons may be hidden and the dialog height may change we may need + * to move the controls */ +static void confirm_msg_move_button(HWND hDlg, INT iId, INT *xPos, INT yOffset, BOOL bShow) +{ + HWND hButton = GetDlgItem(hDlg, iId); + RECT r; + + if (bShow) { + POINT pt; + int width; + + GetWindowRect(hButton, &r); + width = r.right - r.left; + pt.x = r.left; + pt.y = r.top; + ScreenToClient(hDlg, &pt); + MoveWindow(hButton, *xPos - width, pt.y - yOffset, width, r.bottom - r.top, FALSE); + *xPos -= width + 5; + } + else + ShowWindow(hButton, SW_HIDE); +} + +/* Note: we paint the text manually and don't use the static control to make + * sure the text has the same height as the one computed in WM_INITDIALOG + */ +static INT_PTR ConfirmMsgBox_Paint(HWND hDlg) +{ + PAINTSTRUCT ps; + HFONT hOldFont; + RECT r; + HDC hdc; + + BeginPaint(hDlg, &ps); + hdc = ps.hdc; + + GetClientRect(GetDlgItem(hDlg, IDD_MESSAGE), &r); + /* this will remap the rect to dialog coords */ + MapWindowPoints(GetDlgItem(hDlg, IDD_MESSAGE), hDlg, (LPPOINT)&r, 2); + hOldFont = (HFONT)SelectObject(hdc, (HFONT)SendDlgItemMessageW(hDlg, IDD_MESSAGE, WM_GETFONT, 0, 0)); + DrawTextW(hdc, (LPWSTR)GetPropW(hDlg, CONFIRM_MSG_PROP), -1, &r, DT_NOPREFIX | DT_PATH_ELLIPSIS | DT_WORDBREAK); + SelectObject(hdc, hOldFont); + EndPaint(hDlg, &ps); + return TRUE; +} + +static INT_PTR ConfirmMsgBox_Init(HWND hDlg, LPARAM lParam) +{ + struct confirm_msg_info *info = (struct confirm_msg_info *)lParam; + INT xPos, yOffset; + int width, height; + HFONT hOldFont; + HDC hdc; + RECT r; + + SetWindowTextW(hDlg, info->lpszCaption); + ShowWindow(GetDlgItem(hDlg, IDD_MESSAGE), SW_HIDE); + SetPropW(hDlg, CONFIRM_MSG_PROP, info->lpszText); + SendDlgItemMessageW(hDlg, IDD_ICON, STM_SETICON, (WPARAM)info->hIcon, 0); + + /* compute the text height and resize the dialog */ + GetClientRect(GetDlgItem(hDlg, IDD_MESSAGE), &r); + hdc = GetDC(hDlg); + yOffset = r.bottom; + hOldFont = (HFONT)SelectObject(hdc, (HFONT)SendDlgItemMessageW(hDlg, IDD_MESSAGE, WM_GETFONT, 0, 0)); + DrawTextW(hdc, info->lpszText, -1, &r, DT_NOPREFIX | DT_PATH_ELLIPSIS | DT_WORDBREAK | DT_CALCRECT); + SelectObject(hdc, hOldFont); + yOffset -= r.bottom; + yOffset = min(yOffset, 35); /* don't make the dialog too small */ + ReleaseDC(hDlg, hdc); + + GetClientRect(hDlg, &r); + xPos = r.right - 7; + GetWindowRect(hDlg, &r); + width = r.right - r.left; + height = r.bottom - r.top - yOffset; + MoveWindow(hDlg, (GetSystemMetrics(SM_CXSCREEN) - width)/2, + (GetSystemMetrics(SM_CYSCREEN) - height)/2, width, height, FALSE); + + confirm_msg_move_button(hDlg, IDCANCEL, &xPos, yOffset, info->bYesToAll); + confirm_msg_move_button(hDlg, IDNO, &xPos, yOffset, TRUE); + confirm_msg_move_button(hDlg, IDD_YESTOALL, &xPos, yOffset, info->bYesToAll); + confirm_msg_move_button(hDlg, IDYES, &xPos, yOffset, TRUE); + return TRUE; +} + +static INT_PTR CALLBACK ConfirmMsgBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + return ConfirmMsgBox_Init(hDlg, lParam); + case WM_PAINT: + return ConfirmMsgBox_Paint(hDlg); + case WM_COMMAND: + EndDialog(hDlg, wParam); + break; + case WM_CLOSE: + EndDialog(hDlg, IDCANCEL); + break; + } + return FALSE; +} + +int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll) +{ + static const WCHAR wszTemplate[] = {'S','H','E','L','L','_','Y','E','S','T','O','A','L','L','_','M','S','G','B','O','X',0}; + struct confirm_msg_info info; + + info.lpszText = lpszText; + info.lpszCaption = lpszCaption; + info.hIcon = hIcon; + info.bYesToAll = bYesToAll; + return DialogBoxParamW(shell32_hInstance, wszTemplate, hWnd, ConfirmMsgBoxProc, (LPARAM)&info); +} + +/* confirmation dialogs content */ +typedef struct +{ + HINSTANCE hIconInstance; + UINT icon_resource_id; + UINT caption_resource_id, text_resource_id; +} SHELL_ConfirmIDstruc; + +static BOOL SHELL_ConfirmIDs(int nKindOfDialog, SHELL_ConfirmIDstruc *ids) +{ + ids->hIconInstance = shell32_hInstance; + switch (nKindOfDialog) { + case ASK_DELETE_FILE: + ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE; + ids->caption_resource_id = IDS_DELETEITEM_CAPTION; + ids->text_resource_id = IDS_DELETEITEM_TEXT; + return TRUE; + case ASK_DELETE_FOLDER: + ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE; + ids->caption_resource_id = IDS_DELETEFOLDER_CAPTION; + ids->text_resource_id = IDS_DELETEITEM_TEXT; + return TRUE; + case ASK_DELETE_MULTIPLE_ITEM: + ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE; + ids->caption_resource_id = IDS_DELETEITEM_CAPTION; + ids->text_resource_id = IDS_DELETEMULTIPLE_TEXT; + return TRUE; + case ASK_TRASH_FILE: + ids->icon_resource_id = IDI_SHELL_TRASH_FILE; + ids->caption_resource_id = IDS_DELETEITEM_CAPTION; + ids->text_resource_id = IDS_TRASHITEM_TEXT; + return TRUE; + case ASK_TRASH_FOLDER: + ids->icon_resource_id = IDI_SHELL_TRASH_FILE; + ids->caption_resource_id = IDS_DELETEFOLDER_CAPTION; + ids->text_resource_id = IDS_TRASHFOLDER_TEXT; + return TRUE; + case ASK_TRASH_MULTIPLE_ITEM: + ids->icon_resource_id = IDI_SHELL_TRASH_FILE; + ids->caption_resource_id = IDS_DELETEITEM_CAPTION; + ids->text_resource_id = IDS_TRASHMULTIPLE_TEXT; + return TRUE; + case ASK_CANT_TRASH_ITEM: + ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE; + ids->caption_resource_id = IDS_DELETEITEM_CAPTION; + ids->text_resource_id = IDS_CANTTRASH_TEXT; + return TRUE; + case ASK_DELETE_SELECTED: + ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE; + ids->caption_resource_id = IDS_DELETEITEM_CAPTION; + ids->text_resource_id = IDS_DELETESELECTED_TEXT; + return TRUE; + case ASK_OVERWRITE_FILE: + ids->hIconInstance = NULL; + ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE; + ids->caption_resource_id = IDS_OVERWRITEFILE_CAPTION; + ids->text_resource_id = IDS_OVERWRITEFILE_TEXT; + return TRUE; + case ASK_OVERWRITE_FOLDER: + ids->hIconInstance = NULL; + ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE; + ids->caption_resource_id = IDS_OVERWRITEFILE_CAPTION; + ids->text_resource_id = IDS_OVERWRITEFOLDER_TEXT; + return TRUE; + default: + FIXME(" Unhandled nKindOfDialog %d stub\n", nKindOfDialog); + } + return FALSE; +} + +static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op) +{ + WCHAR szCaption[255], szText[255], szBuffer[MAX_PATH + 256]; + SHELL_ConfirmIDstruc ids; + DWORD_PTR args[1]; + HICON hIcon; + int ret; + + assert(nKindOfDialog >= 0 && nKindOfDialog < 32); + if (op && (op->dwYesToAllMask & (1 << nKindOfDialog))) + return TRUE; + + if (!SHELL_ConfirmIDs(nKindOfDialog, &ids)) return FALSE; + + LoadStringW(shell32_hInstance, ids.caption_resource_id, szCaption, sizeof(szCaption)/sizeof(WCHAR)); + LoadStringW(shell32_hInstance, ids.text_resource_id, szText, sizeof(szText)/sizeof(WCHAR)); + + args[0] = (DWORD_PTR)szDir; + FormatMessageW(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY, + szText, 0, 0, szBuffer, sizeof(szBuffer), (va_list*)args); + hIcon = LoadIconW(ids.hIconInstance, (LPWSTR)MAKEINTRESOURCE(ids.icon_resource_id)); + + ret = SHELL_ConfirmMsgBox(hWnd, szBuffer, szCaption, hIcon, op && op->bManyItems); + if (op) { + if (ret == IDD_YESTOALL) { + op->dwYesToAllMask |= (1 << nKindOfDialog); + ret = IDYES; + } + if (ret == IDCANCEL) + op->bCancelled = TRUE; + if (ret != IDYES) + op->req->fAnyOperationsAborted = TRUE; + } + return ret == IDYES; +} + +BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir) +{ + return SHELL_ConfirmDialogW(hWnd, nKindOfDialog, szDir, NULL); +} + +static DWORD SHELL32_AnsiToUnicodeBuf(LPCSTR aPath, LPWSTR *wPath, DWORD minChars) +{ + DWORD len = MultiByteToWideChar(CP_ACP, 0, aPath, -1, NULL, 0); + + if (len < minChars) + len = minChars; + + *wPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (*wPath) + { + MultiByteToWideChar(CP_ACP, 0, aPath, -1, *wPath, len); + return NO_ERROR; + } + return E_OUTOFMEMORY; +} + +static void SHELL32_FreeUnicodeBuf(LPWSTR wPath) +{ + HeapFree(GetProcessHeap(), 0, wPath); +} + +EXTERN_C HRESULT WINAPI SHIsFileAvailableOffline(LPCWSTR path, LPDWORD status) +{ + FIXME("(%s, %p) stub\n", debugstr_w(path), status); + return E_FAIL; +} + +/************************************************************************** + * SHELL_DeleteDirectory() [internal] + * + * Asks for confirmation when bShowUI is true and deletes the directory and + * all its subdirectories and files if necessary. + */ +BOOL SHELL_DeleteDirectoryW(HWND hwnd, LPCWSTR pszDir, BOOL bShowUI) +{ + BOOL ret = TRUE; + HANDLE hFind; + WIN32_FIND_DATAW wfd; + WCHAR szTemp[MAX_PATH]; + + /* Make sure the directory exists before eventually prompting the user */ + PathCombineW(szTemp, pszDir, wWildcardFile); + hFind = FindFirstFileW(szTemp, &wfd); + if (hFind == INVALID_HANDLE_VALUE) + return FALSE; + + if (!bShowUI || (ret = SHELL_ConfirmDialogW(hwnd, ASK_DELETE_FOLDER, pszDir, NULL))) + { + do + { + if (IsDotDir(wfd.cFileName)) + continue; + PathCombineW(szTemp, pszDir, wfd.cFileName); + if (FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes) + ret = SHELL_DeleteDirectoryW(hwnd, szTemp, FALSE); + else + ret = (SHNotifyDeleteFileW(szTemp) == ERROR_SUCCESS); + } while (ret && FindNextFileW(hFind, &wfd)); + } + FindClose(hFind); + if (ret) + ret = (SHNotifyRemoveDirectoryW(pszDir) == ERROR_SUCCESS); + return ret; +} + +/************************************************************************** + * Win32CreateDirectory [SHELL32.93] + * + * Creates a directory. Also triggers a change notify if one exists. + * + * PARAMS + * path [I] path to directory to create + * + * RETURNS + * TRUE if successful, FALSE otherwise + */ + +static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec) +{ + TRACE("(%s, %p)\n", debugstr_w(path), sec); + + if (CreateDirectoryW(path, sec)) + { + SHChangeNotify(SHCNE_MKDIR, SHCNF_PATHW, path, NULL); + return ERROR_SUCCESS; + } + return GetLastError(); +} + +/**********************************************************************/ + +EXTERN_C BOOL WINAPI Win32CreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec) +{ + return (SHNotifyCreateDirectoryW(path, sec) == ERROR_SUCCESS); +} + +/************************************************************************ + * Win32RemoveDirectory [SHELL32.94] + * + * Deletes a directory. Also triggers a change notify if one exists. + * + * PARAMS + * path [I] path to directory to delete + * + * RETURNS + * TRUE if successful, FALSE otherwise + */ +static DWORD SHNotifyRemoveDirectoryW(LPCWSTR path) +{ + BOOL ret; + TRACE("(%s)\n", debugstr_w(path)); + + ret = RemoveDirectoryW(path); + if (!ret) + { + /* Directory may be write protected */ + DWORD dwAttr = GetFileAttributesW(path); + if (IsAttrib(dwAttr, FILE_ATTRIBUTE_READONLY)) + if (SetFileAttributesW(path, dwAttr & ~FILE_ATTRIBUTE_READONLY)) + ret = RemoveDirectoryW(path); + } + if (ret) + { + SHChangeNotify(SHCNE_RMDIR, SHCNF_PATHW, path, NULL); + return ERROR_SUCCESS; + } + return GetLastError(); +} + +/***********************************************************************/ + +EXTERN_C BOOL WINAPI Win32RemoveDirectoryW(LPCWSTR path) +{ + return (SHNotifyRemoveDirectoryW(path) == ERROR_SUCCESS); +} + +/************************************************************************ + * Win32DeleteFile [SHELL32.164] + * + * Deletes a file. Also triggers a change notify if one exists. + * + * PARAMS + * path [I] path to file to delete + * + * RETURNS + * TRUE if successful, FALSE otherwise + */ +static DWORD SHNotifyDeleteFileW(LPCWSTR path) +{ + BOOL ret; + + TRACE("(%s)\n", debugstr_w(path)); + + ret = DeleteFileW(path); + if (!ret) + { + /* File may be write protected or a system file */ + DWORD dwAttr = GetFileAttributesW(path); + if (IsAttrib(dwAttr, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM)) + if (SetFileAttributesW(path, dwAttr & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM))) + ret = DeleteFileW(path); + } + if (ret) + { + SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW, path, NULL); + return ERROR_SUCCESS; + } + return GetLastError(); +} + +/***********************************************************************/ + +EXTERN_C DWORD WINAPI Win32DeleteFileW(LPCWSTR path) +{ + return (SHNotifyDeleteFileW(path) == ERROR_SUCCESS); +} + +/************************************************************************ + * SHNotifyMoveFile [internal] + * + * Moves a file. Also triggers a change notify if one exists. + * + * PARAMS + * src [I] path to source file to move + * dest [I] path to target file to move to + * + * RETURNS + * ERORR_SUCCESS if successful + */ +static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest) +{ + BOOL ret; + + TRACE("(%s %s)\n", debugstr_w(src), debugstr_w(dest)); + + ret = MoveFileExW(src, dest, MOVEFILE_REPLACE_EXISTING); + + /* MOVEFILE_REPLACE_EXISTING fails with dirs, so try MoveFile */ + if (!ret) + ret = MoveFileW(src, dest); + + if (!ret) + { + DWORD dwAttr; + + dwAttr = SHFindAttrW(dest, FALSE); + if (INVALID_FILE_ATTRIBUTES == dwAttr) + { + /* Source file may be write protected or a system file */ + dwAttr = GetFileAttributesW(src); + if (IsAttrib(dwAttr, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM)) + if (SetFileAttributesW(src, dwAttr & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM))) + ret = MoveFileW(src, dest); + } + } + if (ret) + { + SHChangeNotify(SHCNE_RENAMEITEM, SHCNF_PATHW, src, dest); + return ERROR_SUCCESS; + } + return GetLastError(); +} + +static WINAPI DWORD SHOperationProgressRoutine(LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData) +{ + FILE_OPERATION_CONTEXT * Context; + LARGE_INTEGER Progress; + + /* get context */ + Context = (FILE_OPERATION_CONTEXT*)lpData; + + if (TotalBytesTransferred.QuadPart) + { + Progress.QuadPart = (TotalBytesTransferred.QuadPart * 100) / TotalFileSize.QuadPart; + } + else + { + Progress.QuadPart = 1; + } + + /* update progress bar */ + SendMessageW(Context->hDlgCtrl, PBM_SETPOS, (WPARAM)Progress.u.LowPart, 0); + + if (TotalBytesTransferred.QuadPart == TotalFileSize.QuadPart) + { + /* file was copied */ + Context->Index++; + PostMessageW(Context->hwndDlg, WM_FILE, 0, 0); + } + + return PROGRESS_CONTINUE; +} + +BOOL +QueueFile( + FILE_OPERATION_CONTEXT * Context) +{ + FILE_ENTRY * from, *to; + BOOL bRet = FALSE; + + if (Context->Index >= Context->from->dwNumFiles) + return FALSE; + + /* get current file */ + from = &Context->from->feFiles[Context->Index]; + + if (Context->op->req->fFlags != FO_DELETE) + to = &Context->to->feFiles[Context->Index]; + + /* update status */ + SendDlgItemMessageW(Context->hwndDlg, 14001, WM_SETTEXT, 0, (LPARAM)from->szFullPath); + + if (Context->op->req->wFunc == FO_COPY) + { + bRet = CopyFileExW(from->szFullPath, to->szFullPath, SHOperationProgressRoutine, (LPVOID)Context, &Context->op->bCancelled, 0); + } + else if (Context->op->req->wFunc == FO_MOVE) + { + //bRet = MoveFileWithProgressW(from->szFullPath, to->szFullPath, SHOperationProgressRoutine, (LPVOID)Context, MOVEFILE_COPY_ALLOWED); + } + else if (Context->op->req->wFunc == FO_DELETE) + { + bRet = DeleteFile(from->szFullPath); + } + + return bRet; +} + +static INT_PTR CALLBACK SHOperationDialog(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + FILE_OPERATION_CONTEXT * Context; + + Context = (FILE_OPERATION_CONTEXT*) GetWindowLongPtr(hwndDlg, DWLP_USER); + + switch(uMsg) + { + case WM_INITDIALOG: + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG)lParam); + + /* get context */ + Context = (FILE_OPERATION_CONTEXT*)lParam; + + /* store progress bar handle */ + Context->hDlgCtrl = GetDlgItem(hwndDlg, 14000); + + /* store window handle */ + Context->hwndDlg = hwndDlg; + + /* set progress bar range */ + (void)SendMessageW(Context->hDlgCtrl, (UINT) PBM_SETRANGE, 0, MAKELPARAM(0, 100)); + + /* start file queueing */ + SetTimer(hwndDlg, TIMER_ID, 1000, NULL); + //QueueFile(Context); + + return TRUE; + + case WM_CLOSE: + Context->op->bCancelled = TRUE; + EndDialog(hwndDlg, Context->op->bCancelled); + return TRUE; + case WM_COMMAND: + if (LOWORD(wParam) == 14002) + { + Context->op->bCancelled = TRUE; + EndDialog(hwndDlg, Context->op->bCancelled); + return TRUE; + } + break; + case WM_TIMER: + if (wParam == TIMER_ID) + { + QueueFile(Context); + KillTimer(hwndDlg, TIMER_ID); + } + break; + case WM_FILE: + if (!QueueFile(Context)) + EndDialog(hwndDlg, Context->op->bCancelled); + default: + break; + } + return FALSE; +} + +HRESULT +SHShowFileOperationDialog(FILE_OPERATION *op, FILE_LIST *flFrom, FILE_LIST *flTo) +{ + HWND hwnd; + BOOL bRet; + MSG msg; + FILE_OPERATION_CONTEXT Context; + + Context.from = flFrom; + Context.to = flTo; + Context.op = op; + Context.Index = 0; + Context.op->bCancelled = FALSE; + + hwnd = CreateDialogParam(shell32_hInstance, MAKEINTRESOURCE(IDD_SH_FILE_COPY), NULL, SHOperationDialog, (LPARAM)&Context); + if (hwnd == NULL) + { + ERR("Failed to create dialog\n"); + return E_FAIL; + } + ShowWindow(hwnd, SW_SHOWNORMAL); + + while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) + { + if (!IsWindow(hwnd) || !IsDialogMessage(hwnd, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return NOERROR; +} + + +/************************************************************************ + * SHNotifyCopyFile [internal] + * + * Copies a file. Also triggers a change notify if one exists. + * + * PARAMS + * src [I] path to source file to move + * dest [I] path to target file to move to + * bFailIfExists [I] if TRUE, the target file will not be overwritten if + * a file with this name already exists + * + * RETURNS + * ERROR_SUCCESS if successful + */ +static DWORD SHNotifyCopyFileW(LPCWSTR src, LPCWSTR dest, BOOL bFailIfExists) +{ + BOOL ret; + DWORD attribs; + + TRACE("(%s %s %s)\n", debugstr_w(src), debugstr_w(dest), bFailIfExists ? "failIfExists" : ""); + + /* Destination file may already exist with read only attribute */ + attribs = GetFileAttributesW(dest); + if (IsAttrib(attribs, FILE_ATTRIBUTE_READONLY)) + SetFileAttributesW(dest, attribs & ~FILE_ATTRIBUTE_READONLY); + + ret = CopyFileW(src, dest, bFailIfExists); + if (ret) + { + SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW, dest, NULL); + return ERROR_SUCCESS; + } + + return GetLastError(); +} + +/************************************************************************* + * SHCreateDirectory [SHELL32.165] + * + * This function creates a file system folder whose fully qualified path is + * given by path. If one or more of the intermediate folders do not exist, + * they will be created as well. + * + * PARAMS + * hWnd [I] + * path [I] path of directory to create + * + * RETURNS + * ERROR_SUCCESS or one of the following values: + * ERROR_BAD_PATHNAME if the path is relative + * ERROR_FILE_EXISTS when a file with that name exists + * ERROR_PATH_NOT_FOUND can't find the path, probably invalid + * ERROR_INVALID_NAME if the path contains invalid chars + * ERROR_ALREADY_EXISTS when the directory already exists + * ERROR_FILENAME_EXCED_RANGE if the filename was to long to process + * + * NOTES + * exported by ordinal + * Win9x exports ANSI + * WinNT/2000 exports Unicode + */ +int WINAPI SHCreateDirectory(HWND hWnd, LPCWSTR path) +{ + return SHCreateDirectoryExW(hWnd, path, NULL); +} + +/************************************************************************* + * SHCreateDirectoryExA [SHELL32.@] + * + * This function creates a file system folder whose fully qualified path is + * given by path. If one or more of the intermediate folders do not exist, + * they will be created as well. + * + * PARAMS + * hWnd [I] + * path [I] path of directory to create + * sec [I] security attributes to use or NULL + * + * RETURNS + * ERROR_SUCCESS or one of the following values: + * ERROR_BAD_PATHNAME or ERROR_PATH_NOT_FOUND if the path is relative + * ERROR_INVALID_NAME if the path contains invalid chars + * ERROR_FILE_EXISTS when a file with that name exists + * ERROR_ALREADY_EXISTS when the directory already exists + * ERROR_FILENAME_EXCED_RANGE if the filename was to long to process + * + * FIXME: Not implemented yet; + * SHCreateDirectoryEx also verifies that the files in the directory will be visible + * if the path is a network path to deal with network drivers which might have a limited + * but unknown maximum path length. If not: + * + * If hWnd is set to a valid window handle, a message box is displayed warning + * the user that the files may not be accessible. If the user chooses not to + * proceed, the function returns ERROR_CANCELLED. + * + * If hWnd is set to NULL, no user interface is displayed and the function + * returns ERROR_CANCELLED. + */ +int WINAPI SHCreateDirectoryExA(HWND hWnd, LPCSTR path, LPSECURITY_ATTRIBUTES sec) +{ + LPWSTR wPath; + DWORD retCode; + + TRACE("(%s, %p)\n", debugstr_a(path), sec); + + retCode = SHELL32_AnsiToUnicodeBuf(path, &wPath, 0); + if (!retCode) + { + retCode = SHCreateDirectoryExW(hWnd, wPath, sec); + SHELL32_FreeUnicodeBuf(wPath); + } + return retCode; +} + +/************************************************************************* + * SHCreateDirectoryExW [SHELL32.@] + * + * See SHCreateDirectoryExA. + */ +int WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec) +{ + int ret = ERROR_BAD_PATHNAME; + TRACE("(%p, %s, %p)\n", hWnd, debugstr_w(path), sec); + + if (PathIsRelativeW(path)) + { + SetLastError(ret); + } + else + { + ret = SHNotifyCreateDirectoryW(path, sec); + /* Refuse to work on certain error codes before trying to create directories recursively */ + if (ret != ERROR_SUCCESS && + ret != ERROR_FILE_EXISTS && + ret != ERROR_ALREADY_EXISTS && + ret != ERROR_FILENAME_EXCED_RANGE) + { + WCHAR *pEnd, *pSlash, szTemp[MAX_PATH + 1]; /* extra for PathAddBackslash() */ + + lstrcpynW(szTemp, path, MAX_PATH); + pEnd = PathAddBackslashW(szTemp); + pSlash = szTemp + 3; + + while (*pSlash) + { + while (*pSlash && *pSlash != '\\') pSlash++; + if (*pSlash) + { + *pSlash = 0; /* terminate path at separator */ + + ret = SHNotifyCreateDirectoryW(szTemp, pSlash + 1 == pEnd ? sec : NULL); + } + *pSlash++ = '\\'; /* put the separator back */ + } + } + + if (ret && hWnd && (ERROR_CANCELLED != ret)) + { + /* We failed and should show a dialog box */ + FIXME("Show system error message, creating path %s, failed with error %d\n", debugstr_w(path), ret); + ret = ERROR_CANCELLED; /* Error has been already presented to user (not really yet!) */ + } + } + return ret; +} + +/************************************************************************* + * SHFindAttrW [internal] + * + * Get the Attributes for a file or directory. The difference to GetAttributes() + * is that this function will also work for paths containing wildcard characters + * in its filename. + + * PARAMS + * path [I] path of directory or file to check + * fileOnly [I] TRUE if only files should be found + * + * RETURNS + * INVALID_FILE_ATTRIBUTES if the path does not exist, the actual attributes of + * the first file or directory found otherwise + */ +static DWORD SHFindAttrW(LPCWSTR pName, BOOL fileOnly) +{ + WIN32_FIND_DATAW wfd; + BOOL b_FileMask = fileOnly && (NULL != StrPBrkW(pName, wWildcardChars)); + DWORD dwAttr = INVALID_FILE_ATTRIBUTES; + HANDLE hFind = FindFirstFileW(pName, &wfd); + + TRACE("%s %d\n", debugstr_w(pName), fileOnly); + if (INVALID_HANDLE_VALUE != hFind) + { + do + { + if (b_FileMask && IsAttribDir(wfd.dwFileAttributes)) + continue; + dwAttr = wfd.dwFileAttributes; + break; + } + while (FindNextFileW(hFind, &wfd)); + FindClose(hFind); + } + return dwAttr; +} + +/************************************************************************* + * + * SHNameTranslate HelperFunction for SHFileOperationA + * + * Translates a list of 0 terminated ASCII strings into Unicode. If *wString + * is NULL, only the necessary size of the string is determined and returned, + * otherwise the ASCII strings are copied into it and the buffer is increased + * to point to the location after the final 0 termination char. + */ +static DWORD SHNameTranslate(LPWSTR* wString, LPCWSTR* pWToFrom, BOOL more) +{ + DWORD size = 0, aSize = 0; + LPCSTR aString = (LPCSTR)*pWToFrom; + + if (aString) + { + do + { + size = lstrlenA(aString) + 1; + aSize += size; + aString += size; + } while ((size != 1) && more); + /* The two sizes might be different in the case of multibyte chars */ + size = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*pWToFrom, aSize, *wString, 0); + if (*wString) /* only in the second loop */ + { + MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*pWToFrom, aSize, *wString, size); + *pWToFrom = *wString; + *wString += size; + } + } + return size; +} +/************************************************************************* + * SHFileOperationA [SHELL32.@] + * + * Function to copy, move, delete and create one or more files with optional + * user prompts. + * + * PARAMS + * lpFileOp [I/O] pointer to a structure containing all the necessary information + * + * RETURNS + * Success: ERROR_SUCCESS. + * Failure: ERROR_CANCELLED. + * + * NOTES + * exported by name + */ +int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp) +{ + SHFILEOPSTRUCTW nFileOp = *((LPSHFILEOPSTRUCTW)lpFileOp); + int retCode = 0; + DWORD size; + LPWSTR ForFree = NULL, /* we change wString in SHNameTranslate and can't use it for freeing */ + wString = NULL; /* we change this in SHNameTranslate */ + + TRACE("\n"); + if (FO_DELETE == (nFileOp.wFunc & FO_MASK)) + nFileOp.pTo = NULL; /* we need a NULL or a valid pointer for translation */ + if (!(nFileOp.fFlags & FOF_SIMPLEPROGRESS)) + nFileOp.lpszProgressTitle = NULL; /* we need a NULL or a valid pointer for translation */ + while (1) /* every loop calculate size, second translate also, if we have storage for this */ + { + size = SHNameTranslate(&wString, &nFileOp.lpszProgressTitle, FALSE); /* no loop */ + size += SHNameTranslate(&wString, &nFileOp.pFrom, TRUE); /* internal loop */ + size += SHNameTranslate(&wString, &nFileOp.pTo, TRUE); /* internal loop */ + + if (ForFree) + { + retCode = SHFileOperationW(&nFileOp); + HeapFree(GetProcessHeap(), 0, ForFree); /* we cannot use wString, it was changed */ + break; + } + else + { + wString = ForFree = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR)); + if (ForFree) continue; + retCode = ERROR_OUTOFMEMORY; + nFileOp.fAnyOperationsAborted = TRUE; + SetLastError(retCode); + return retCode; + } + } + + lpFileOp->hNameMappings = nFileOp.hNameMappings; + lpFileOp->fAnyOperationsAborted = nFileOp.fAnyOperationsAborted; + return retCode; +} + +static void __inline grow_list(FILE_LIST *list) +{ + FILE_ENTRY *newx = (FILE_ENTRY *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, list->feFiles, + list->num_alloc * 2 * sizeof(*newx) ); + list->feFiles = newx; + list->num_alloc *= 2; +} + +/* adds a file to the FILE_ENTRY struct + */ +static void add_file_to_entry(FILE_ENTRY *feFile, LPCWSTR szFile) +{ + DWORD dwLen = lstrlenW(szFile) + 1; + LPCWSTR ptr; + + feFile->szFullPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(WCHAR)); + lstrcpyW(feFile->szFullPath, szFile); + + ptr = StrRChrW(szFile, NULL, '\\'); + if (ptr) + { + dwLen = ptr - szFile + 1; + feFile->szDirectory = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(WCHAR)); + lstrcpynW(feFile->szDirectory, szFile, dwLen); + + dwLen = lstrlenW(feFile->szFullPath) - dwLen + 1; + feFile->szFilename = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(WCHAR)); + lstrcpyW(feFile->szFilename, ptr + 1); /* skip over backslash */ + } + feFile->bFromWildcard = FALSE; +} + +static LPWSTR wildcard_to_file(LPCWSTR szWildCard, LPCWSTR szFileName) +{ + LPCWSTR ptr; + LPWSTR szFullPath; + DWORD dwDirLen, dwFullLen; + + ptr = StrRChrW(szWildCard, NULL, '\\'); + dwDirLen = ptr - szWildCard + 1; + + dwFullLen = dwDirLen + lstrlenW(szFileName) + 1; + szFullPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwFullLen * sizeof(WCHAR)); + + lstrcpynW(szFullPath, szWildCard, dwDirLen + 1); + lstrcatW(szFullPath, szFileName); + + return szFullPath; +} + +static void parse_wildcard_files(FILE_LIST *flList, LPCWSTR szFile, LPDWORD pdwListIndex) +{ + WIN32_FIND_DATAW wfd; + HANDLE hFile = FindFirstFileW(szFile, &wfd); + FILE_ENTRY *file; + LPWSTR szFullPath; + BOOL res; + + if (hFile == INVALID_HANDLE_VALUE) return; + + for (res = TRUE; res; res = FindNextFileW(hFile, &wfd)) + { + if (IsDotDir(wfd.cFileName)) continue; + if (*pdwListIndex >= flList->num_alloc) grow_list( flList ); + szFullPath = wildcard_to_file(szFile, wfd.cFileName); + file = &flList->feFiles[(*pdwListIndex)++]; + add_file_to_entry(file, szFullPath); + file->bFromWildcard = TRUE; + file->attributes = wfd.dwFileAttributes; + if (IsAttribDir(file->attributes)) flList->bAnyDirectories = TRUE; + HeapFree(GetProcessHeap(), 0, szFullPath); + } + + FindClose(hFile); +} + +/* takes the null-separated file list and fills out the FILE_LIST */ +static HRESULT parse_file_list(FILE_LIST *flList, LPCWSTR szFiles) +{ + LPCWSTR ptr = szFiles; + WCHAR szCurFile[MAX_PATH]; + DWORD i = 0; + + if (!szFiles) + return ERROR_INVALID_PARAMETER; + + flList->bAnyFromWildcard = FALSE; + flList->bAnyDirectories = FALSE; + flList->bAnyDontExist = FALSE; + flList->num_alloc = 32; + flList->dwNumFiles = 0; + + /* empty list */ + if (!szFiles[0]) + return ERROR_ACCESS_DENIED; + + flList->feFiles = (FILE_ENTRY *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + flList->num_alloc * sizeof(FILE_ENTRY)); + + while (*ptr) + { + if (i >= flList->num_alloc) grow_list( flList ); + + /* change relative to absolute path */ + if (PathIsRelativeW(ptr)) + { + GetCurrentDirectoryW(MAX_PATH, szCurFile); + PathCombineW(szCurFile, szCurFile, ptr); + flList->feFiles[i].bFromRelative = TRUE; + } + else + { + lstrcpyW(szCurFile, ptr); + flList->feFiles[i].bFromRelative = FALSE; + } + + /* parse wildcard files if they are in the filename */ + if (StrPBrkW(szCurFile, wWildcardChars)) + { + parse_wildcard_files(flList, szCurFile, &i); + flList->bAnyFromWildcard = TRUE; + i--; + } + else + { + FILE_ENTRY *file = &flList->feFiles[i]; + add_file_to_entry(file, szCurFile); + file->attributes = GetFileAttributesW( file->szFullPath ); + file->bExists = (file->attributes != INVALID_FILE_ATTRIBUTES); + if (!file->bExists) flList->bAnyDontExist = TRUE; + if (IsAttribDir(file->attributes)) flList->bAnyDirectories = TRUE; + } + + /* advance to the next string */ + ptr += lstrlenW(ptr) + 1; + i++; + } + flList->dwNumFiles = i; + + return S_OK; +} + +/* free the FILE_LIST */ +static void destroy_file_list(FILE_LIST *flList) +{ + DWORD i; + + if (!flList || !flList->feFiles) + return; + + for (i = 0; i < flList->dwNumFiles; i++) + { + HeapFree(GetProcessHeap(), 0, flList->feFiles[i].szDirectory); + HeapFree(GetProcessHeap(), 0, flList->feFiles[i].szFilename); + HeapFree(GetProcessHeap(), 0, flList->feFiles[i].szFullPath); + } + + HeapFree(GetProcessHeap(), 0, flList->feFiles); +} + +static void copy_dir_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWSTR szDestPath) +{ + WCHAR szFrom[MAX_PATH], szTo[MAX_PATH]; + SHFILEOPSTRUCTW fileOp; + + static const WCHAR wildCardFiles[] = {'*','.','*',0}; + + if (IsDotDir(feFrom->szFilename)) + return; + + if (PathFileExistsW(szDestPath)) + PathCombineW(szTo, szDestPath, feFrom->szFilename); + else + lstrcpyW(szTo, szDestPath); + + if (!(op->req->fFlags & FOF_NOCONFIRMATION) && PathFileExistsW(szTo)) { + if (!SHELL_ConfirmDialogW(op->req->hwnd, ASK_OVERWRITE_FOLDER, feFrom->szFilename, op)) + { + /* Vista returns an ERROR_CANCELLED even if user pressed "No" */ + if (!op->bManyItems) + op->bCancelled = TRUE; + return; + } + } + + szTo[lstrlenW(szTo) + 1] = '\0'; + SHNotifyCreateDirectoryW(szTo, NULL); + + PathCombineW(szFrom, feFrom->szFullPath, wildCardFiles); + szFrom[lstrlenW(szFrom) + 1] = '\0'; + + fileOp = *op->req; + fileOp.pFrom = szFrom; + fileOp.pTo = szTo; + fileOp.fFlags &= ~FOF_MULTIDESTFILES; /* we know we're copying to one dir */ + + /* Don't ask the user about overwriting files when he accepted to overwrite the + folder. FIXME: this is not exactly what Windows does - e.g. there would be + an additional confirmation for a nested folder */ + fileOp.fFlags |= FOF_NOCONFIRMATION; + + SHFileOperationW(&fileOp); +} + +static BOOL copy_file_to_file(FILE_OPERATION *op, const WCHAR *szFrom, const WCHAR *szTo) +{ + if (!(op->req->fFlags & FOF_NOCONFIRMATION) && PathFileExistsW(szTo)) + { + if (!SHELL_ConfirmDialogW(op->req->hwnd, ASK_OVERWRITE_FILE, PathFindFileNameW(szTo), op)) + return 0; + } + + return SHNotifyCopyFileW(szFrom, szTo, FALSE) == 0; +} + +/* copy a file or directory to another directory */ +static void copy_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, const FILE_ENTRY *feTo) +{ + if (!PathFileExistsW(feTo->szFullPath)) + SHNotifyCreateDirectoryW(feTo->szFullPath, NULL); + + if (IsAttribFile(feFrom->attributes)) + { + WCHAR szDestPath[MAX_PATH]; + + PathCombineW(szDestPath, feTo->szFullPath, feFrom->szFilename); + copy_file_to_file(op, feFrom->szFullPath, szDestPath); + } + else if (!(op->req->fFlags & FOF_FILESONLY && feFrom->bFromWildcard)) + copy_dir_to_dir(op, feFrom, feTo->szFullPath); +} + +static void create_dest_dirs(LPCWSTR szDestDir) +{ + WCHAR dir[MAX_PATH]; + LPCWSTR ptr = StrChrW(szDestDir, '\\'); + + /* make sure all directories up to last one are created */ + while (ptr && (ptr = StrChrW(ptr + 1, '\\'))) + { + lstrcpynW(dir, szDestDir, ptr - szDestDir + 1); + + if (!PathFileExistsW(dir)) + SHNotifyCreateDirectoryW(dir, NULL); + } + + /* create last directory */ + if (!PathFileExistsW(szDestDir)) + SHNotifyCreateDirectoryW(szDestDir, NULL); +} + +/* the FO_COPY operation */ +static HRESULT copy_files(FILE_OPERATION *op, const FILE_LIST *flFrom, FILE_LIST *flTo) +{ + DWORD i; + const FILE_ENTRY *entryToCopy; + const FILE_ENTRY *fileDest = &flTo->feFiles[0]; + + if (flFrom->bAnyDontExist) + return ERROR_SHELL_INTERNAL_FILE_NOT_FOUND; + + if (flTo->dwNumFiles == 0) + { + /* If the destination is empty, SHFileOperation should use the current directory */ + WCHAR curdir[MAX_PATH+1]; + + GetCurrentDirectoryW(MAX_PATH, curdir); + curdir[lstrlenW(curdir)+1] = 0; + + destroy_file_list(flTo); + ZeroMemory(flTo, sizeof(FILE_LIST)); + parse_file_list(flTo, curdir); + fileDest = &flTo->feFiles[0]; + } + + if (op->req->fFlags & FOF_MULTIDESTFILES) + { + if (flFrom->bAnyFromWildcard) + return ERROR_CANCELLED; + + if (flFrom->dwNumFiles != flTo->dwNumFiles) + { + if (flFrom->dwNumFiles != 1 && !IsAttribDir(fileDest->attributes)) + return ERROR_CANCELLED; + + /* Free all but the first entry. */ + for (i = 1; i < flTo->dwNumFiles; i++) + { + HeapFree(GetProcessHeap(), 0, flTo->feFiles[i].szDirectory); + HeapFree(GetProcessHeap(), 0, flTo->feFiles[i].szFilename); + HeapFree(GetProcessHeap(), 0, flTo->feFiles[i].szFullPath); + } + + flTo->dwNumFiles = 1; + } + else if (IsAttribDir(fileDest->attributes)) + { + for (i = 1; i < flTo->dwNumFiles; i++) + if (!IsAttribDir(flTo->feFiles[i].attributes) || + !IsAttribDir(flFrom->feFiles[i].attributes)) + { + return ERROR_CANCELLED; + } + } + } + else if (flFrom->dwNumFiles != 1) + { + if (flTo->dwNumFiles != 1 && !IsAttribDir(fileDest->attributes)) + return ERROR_CANCELLED; + + if (PathFileExistsW(fileDest->szFullPath) && + IsAttribFile(fileDest->attributes)) + { + return ERROR_CANCELLED; + } + + if (flTo->dwNumFiles == 1 && fileDest->bFromRelative && + !PathFileExistsW(fileDest->szFullPath)) + { + return ERROR_CANCELLED; + } + } + + for (i = 0; i < flFrom->dwNumFiles; i++) + { + entryToCopy = &flFrom->feFiles[i]; + + if ((op->req->fFlags & FOF_MULTIDESTFILES) && + flTo->dwNumFiles > 1) + { + fileDest = &flTo->feFiles[i]; + } + + if (IsAttribDir(entryToCopy->attributes) && + !lstrcmpiW(entryToCopy->szFullPath, fileDest->szDirectory)) + { + return ERROR_SUCCESS; + } + + create_dest_dirs(fileDest->szDirectory); + + if (!lstrcmpiW(entryToCopy->szFullPath, fileDest->szFullPath)) + { + if (IsAttribFile(entryToCopy->attributes)) + return ERROR_NO_MORE_SEARCH_HANDLES; + else + return ERROR_SUCCESS; + } + + if ((flFrom->dwNumFiles > 1 && flTo->dwNumFiles == 1) || + IsAttribDir(fileDest->attributes)) + { + copy_to_dir(op, entryToCopy, fileDest); + } + else if (IsAttribDir(entryToCopy->attributes)) + { + copy_dir_to_dir(op, entryToCopy, fileDest->szFullPath); + } + else + { + if (!copy_file_to_file(op, entryToCopy->szFullPath, fileDest->szFullPath)) + { + op->req->fAnyOperationsAborted = TRUE; + return ERROR_CANCELLED; + } + } + + /* Vista return code. XP would return e.g. ERROR_FILE_NOT_FOUND, ERROR_ALREADY_EXISTS */ + if (op->bCancelled) + return ERROR_CANCELLED; + } + + /* Vista return code. On XP if the used pressed "No" for the last item, + * ERROR_ARENA_TRASHED would be returned */ + return ERROR_SUCCESS; +} + +static BOOL confirm_delete_list(HWND hWnd, DWORD fFlags, BOOL fTrash, const FILE_LIST *flFrom) +{ + if (flFrom->dwNumFiles > 1) + { + WCHAR tmp[8]; + const WCHAR format[] = {'%','d',0}; + + wnsprintfW(tmp, sizeof(tmp)/sizeof(tmp[0]), format, flFrom->dwNumFiles); + return SHELL_ConfirmDialogW(hWnd, (fTrash?ASK_TRASH_MULTIPLE_ITEM:ASK_DELETE_MULTIPLE_ITEM), tmp, NULL); + } + else + { + const FILE_ENTRY *fileEntry = &flFrom->feFiles[0]; + + if (IsAttribFile(fileEntry->attributes)) + return SHELL_ConfirmDialogW(hWnd, (fTrash?ASK_TRASH_FILE:ASK_DELETE_FILE), fileEntry->szFullPath, NULL); + else if (!(fFlags & FOF_FILESONLY && fileEntry->bFromWildcard)) + return SHELL_ConfirmDialogW(hWnd, (fTrash?ASK_TRASH_FOLDER:ASK_DELETE_FOLDER), fileEntry->szFullPath, NULL); + } + return TRUE; +} + +/* the FO_DELETE operation */ +static HRESULT delete_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom) +{ + const FILE_ENTRY *fileEntry; + DWORD i; + BOOL bPathExists; + BOOL bTrash; + + if (!flFrom->dwNumFiles) + return ERROR_SUCCESS; + + /* Windows also checks only the first item */ + bTrash = (lpFileOp->fFlags & FOF_ALLOWUNDO) + && TRASH_CanTrashFile(flFrom->feFiles[0].szFullPath); + + if (!(lpFileOp->fFlags & FOF_NOCONFIRMATION) || (!bTrash && lpFileOp->fFlags & FOF_WANTNUKEWARNING)) + if (!confirm_delete_list(lpFileOp->hwnd, lpFileOp->fFlags, bTrash, flFrom)) + { + lpFileOp->fAnyOperationsAborted = TRUE; + return 0; + } + + for (i = 0; i < flFrom->dwNumFiles; i++) + { + bPathExists = TRUE; + fileEntry = &flFrom->feFiles[i]; + + if (!IsAttribFile(fileEntry->attributes) && + (lpFileOp->fFlags & FOF_FILESONLY && fileEntry->bFromWildcard)) + continue; + + if (bTrash) + { + BOOL bDelete; + if (TRASH_TrashFile(fileEntry->szFullPath)) + continue; + + /* Note: Windows silently deletes the file in such a situation, we show a dialog */ + if (!(lpFileOp->fFlags & FOF_NOCONFIRMATION) || (lpFileOp->fFlags & FOF_WANTNUKEWARNING)) + bDelete = SHELL_ConfirmDialogW(lpFileOp->hwnd, ASK_CANT_TRASH_ITEM, fileEntry->szFullPath, NULL); + else + bDelete = TRUE; + + if (!bDelete) + { + lpFileOp->fAnyOperationsAborted = TRUE; + break; + } + } + + /* delete the file or directory */ + if (IsAttribFile(fileEntry->attributes)) + bPathExists = DeleteFileW(fileEntry->szFullPath); + else + bPathExists = SHELL_DeleteDirectoryW(lpFileOp->hwnd, fileEntry->szFullPath, FALSE); + + if (!bPathExists) + return ERROR_PATH_NOT_FOUND; + } + + return ERROR_SUCCESS; +} + +static void move_dir_to_dir(LPSHFILEOPSTRUCTW lpFileOp, const FILE_ENTRY *feFrom, LPCWSTR szDestPath) +{ + WCHAR szFrom[MAX_PATH], szTo[MAX_PATH]; + SHFILEOPSTRUCTW fileOp; + + static const WCHAR wildCardFiles[] = {'*','.','*',0}; + + if (IsDotDir(feFrom->szFilename)) + return; + + SHNotifyCreateDirectoryW(szDestPath, NULL); + + PathCombineW(szFrom, feFrom->szFullPath, wildCardFiles); + szFrom[lstrlenW(szFrom) + 1] = '\0'; + + lstrcpyW(szTo, szDestPath); + szTo[lstrlenW(szDestPath) + 1] = '\0'; + + fileOp = *lpFileOp; + fileOp.pFrom = szFrom; + fileOp.pTo = szTo; + + SHFileOperationW(&fileOp); +} + +/* moves a file or directory to another directory */ +static void move_to_dir(LPSHFILEOPSTRUCTW lpFileOp, const FILE_ENTRY *feFrom, const FILE_ENTRY *feTo) +{ + WCHAR szDestPath[MAX_PATH]; + + PathCombineW(szDestPath, feTo->szFullPath, feFrom->szFilename); + + if (IsAttribFile(feFrom->attributes)) + SHNotifyMoveFileW(feFrom->szFullPath, szDestPath); + else if (!(lpFileOp->fFlags & FOF_FILESONLY && feFrom->bFromWildcard)) + move_dir_to_dir(lpFileOp, feFrom, szDestPath); +} + +/* the FO_MOVE operation */ +static HRESULT move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const FILE_LIST *flTo) +{ + DWORD i; + const FILE_ENTRY *entryToMove; + const FILE_ENTRY *fileDest; + + if (!flFrom->dwNumFiles || !flTo->dwNumFiles) + return ERROR_CANCELLED; + + if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) && + flTo->dwNumFiles > 1 && flFrom->dwNumFiles > 1) + { + return ERROR_CANCELLED; + } + + if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) && + !flFrom->bAnyDirectories && + flFrom->dwNumFiles > flTo->dwNumFiles) + { + return ERROR_CANCELLED; + } + + if (!PathFileExistsW(flTo->feFiles[0].szDirectory)) + return ERROR_CANCELLED; + + if ((lpFileOp->fFlags & FOF_MULTIDESTFILES) && + flFrom->dwNumFiles != flTo->dwNumFiles) + { + return ERROR_CANCELLED; + } + + fileDest = &flTo->feFiles[0]; + for (i = 0; i < flFrom->dwNumFiles; i++) + { + entryToMove = &flFrom->feFiles[i]; + + if (lpFileOp->fFlags & FOF_MULTIDESTFILES) + fileDest = &flTo->feFiles[i]; + + if (!PathFileExistsW(fileDest->szDirectory)) + return ERROR_CANCELLED; + + if (fileDest->bExists && IsAttribDir(fileDest->attributes)) + move_to_dir(lpFileOp, entryToMove, fileDest); + else + SHNotifyMoveFileW(entryToMove->szFullPath, fileDest->szFullPath); + } + + return ERROR_SUCCESS; +} + +/* the FO_RENAME files */ +static HRESULT rename_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const FILE_LIST *flTo) +{ + const FILE_ENTRY *feFrom; + const FILE_ENTRY *feTo; + + if (flFrom->dwNumFiles != 1) + return ERROR_GEN_FAILURE; + + if (flTo->dwNumFiles != 1) + return ERROR_CANCELLED; + + feFrom = &flFrom->feFiles[0]; + feTo= &flTo->feFiles[0]; + + /* fail if destination doesn't exist */ + if (!feFrom->bExists) + return ERROR_SHELL_INTERNAL_FILE_NOT_FOUND; + + /* fail if destination already exists */ + if (feTo->bExists) + return ERROR_ALREADY_EXISTS; + + return SHNotifyMoveFileW(feFrom->szFullPath, feTo->szFullPath); +} + +/* alert the user if an unsupported flag is used */ +static void check_flags(FILEOP_FLAGS fFlags) +{ + WORD wUnsupportedFlags = FOF_NO_CONNECTED_ELEMENTS | + FOF_NOCOPYSECURITYATTRIBS | FOF_NORECURSEREPARSE | + FOF_RENAMEONCOLLISION | FOF_WANTMAPPINGHANDLE; + + if (fFlags & wUnsupportedFlags) + FIXME("Unsupported flags: %04x\n", fFlags); +} + +/************************************************************************* + * SHFileOperationW [SHELL32.@] + * + * See SHFileOperationA + */ +int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp) +{ + FILE_OPERATION op; + FILE_LIST flFrom, flTo; + int ret = 0; + + if (!lpFileOp) + return ERROR_INVALID_PARAMETER; + + check_flags(lpFileOp->fFlags); + + ZeroMemory(&flFrom, sizeof(FILE_LIST)); + ZeroMemory(&flTo, sizeof(FILE_LIST)); + + if ((ret = parse_file_list(&flFrom, lpFileOp->pFrom))) + return ret; + + if (lpFileOp->wFunc != FO_DELETE) + parse_file_list(&flTo, lpFileOp->pTo); + + ZeroMemory(&op, sizeof(op)); + op.req = lpFileOp; + op.bManyItems = (flFrom.dwNumFiles > 1); + + switch (lpFileOp->wFunc) + { + case FO_COPY: + ret = copy_files(&op, &flFrom, &flTo); + break; + case FO_DELETE: + ret = delete_files(lpFileOp, &flFrom); + break; + case FO_MOVE: + ret = move_files(lpFileOp, &flFrom, &flTo); + break; + case FO_RENAME: + ret = rename_files(lpFileOp, &flFrom, &flTo); + break; + default: + ret = ERROR_INVALID_PARAMETER; + break; + } + + destroy_file_list(&flFrom); + + if (lpFileOp->wFunc != FO_DELETE) + destroy_file_list(&flTo); + + if (ret == ERROR_CANCELLED) + lpFileOp->fAnyOperationsAborted = TRUE; + + return ret; +} + +#define SHDSA_GetItemCount(hdsa) (*(int*)(hdsa)) + +/************************************************************************* + * SHFreeNameMappings [shell32.246] + * + * Free the mapping handle returned by SHFileOperation if FOF_WANTSMAPPINGHANDLE + * was specified. + * + * PARAMS + * hNameMapping [I] handle to the name mappings used during renaming of files + * + * RETURNS + * Nothing + */ +void WINAPI SHFreeNameMappings(HANDLE hNameMapping) +{ + if (hNameMapping) + { + int i = SHDSA_GetItemCount((HDSA)hNameMapping) - 1; + + for (; i>= 0; i--) + { + LPSHNAMEMAPPINGW lp = (SHNAMEMAPPINGW *)DSA_GetItemPtr((HDSA)hNameMapping, i); + + SHFree(lp->pszOldPath); + SHFree(lp->pszNewPath); + } + DSA_Destroy((HDSA)hNameMapping); + } +} + +/************************************************************************* + * SheGetDirA [SHELL32.@] + * + * drive = 0: returns the current directory path + * drive > 0: returns the current directory path of the specified drive + * drive=1 -> A: drive=2 -> B: ... + * returns 0 if successful +*/ +EXTERN_C DWORD WINAPI SheGetDirA(DWORD drive, LPSTR buffer) +{ + WCHAR org_path[MAX_PATH]; + DWORD ret; + char drv_path[3]; + + /* change current directory to the specified drive */ + if (drive) { + strcpy(drv_path, "A:"); + drv_path[0] += (char)drive-1; + + GetCurrentDirectoryW(MAX_PATH, org_path); + + SetCurrentDirectoryA(drv_path); + } + + /* query current directory path of the specified drive */ + ret = GetCurrentDirectoryA(MAX_PATH, buffer); + + /* back to the original drive */ + if (drive) + SetCurrentDirectoryW(org_path); + + if (!ret) + return GetLastError(); + + return 0; +} + +/************************************************************************* + * SheGetDirW [SHELL32.@] + * + * drive = 0: returns the current directory path + * drive > 0: returns the current directory path of the specified drive + * drive=1 -> A: drive=2 -> B: ... + * returns 0 if successful + */ +EXTERN_C DWORD WINAPI SheGetDirW(DWORD drive, LPWSTR buffer) +{ + WCHAR org_path[MAX_PATH]; + DWORD ret; + char drv_path[3]; + + /* change current directory to the specified drive */ + if (drive) { + strcpy(drv_path, "A:"); + drv_path[0] += (char)drive-1; + + GetCurrentDirectoryW(MAX_PATH, org_path); + + SetCurrentDirectoryA(drv_path); + } + + /* query current directory path of the specified drive */ + ret = GetCurrentDirectoryW(MAX_PATH, buffer); + + /* back to the original drive */ + if (drive) + SetCurrentDirectoryW(org_path); + + if (!ret) + return GetLastError(); + + return 0; +} + +/************************************************************************* + * SheChangeDirA [SHELL32.@] + * + * changes the current directory to the specified path + * and returns 0 if successful + */ +EXTERN_C DWORD WINAPI SheChangeDirA(LPSTR path) +{ + if (SetCurrentDirectoryA(path)) + return 0; + else + return GetLastError(); +} + +/************************************************************************* + * SheChangeDirW [SHELL32.@] + * + * changes the current directory to the specified path + * and returns 0 if successful + */ +EXTERN_C DWORD WINAPI SheChangeDirW(LPWSTR path) +{ + if (SetCurrentDirectoryW(path)) + return 0; + else + return GetLastError(); +} + +/************************************************************************* + * IsNetDrive [SHELL32.66] + */ +EXTERN_C int WINAPI IsNetDrive(int drive) +{ + char root[4]; + strcpy(root, "A:\\"); + root[0] += (char)drive; + return (GetDriveTypeA(root) == DRIVE_REMOTE); +} + + +/************************************************************************* + * RealDriveType [SHELL32.524] + */ +EXTERN_C INT WINAPI RealDriveType(INT drive, BOOL bQueryNet) +{ + char root[] = "A:\\"; + root[0] += (char)drive; + return GetDriveTypeA(root); +} + +/*********************************************************************** + * SHPathPrepareForWriteW (SHELL32.@) + */ +EXTERN_C HRESULT WINAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *modless, LPCWSTR path, DWORD flags) +{ + DWORD res; + DWORD err; + LPCWSTR realpath; + int len; + WCHAR* last_slash; + WCHAR* temppath=NULL; + + TRACE("%p %p %s 0x%80x\n", hwnd, modless, debugstr_w(path), flags); + + if (flags & ~(SHPPFW_DIRCREATE|SHPPFW_ASKDIRCREATE|SHPPFW_IGNOREFILENAME)) + FIXME("unimplemented flags 0x%08x\n", flags); + + /* cut off filename if necessary */ + if (flags & SHPPFW_IGNOREFILENAME) + { + last_slash = StrRChrW(path, NULL, '\\'); + if (last_slash == NULL) + len = 1; + else + len = last_slash - path + 1; + temppath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!temppath) + return E_OUTOFMEMORY; + StrCpyNW(temppath, path, len); + realpath = temppath; + } + else + { + realpath = path; + } + + /* try to create the directory if asked to */ + if (flags & (SHPPFW_DIRCREATE|SHPPFW_ASKDIRCREATE)) + { + if (flags & SHPPFW_ASKDIRCREATE) + FIXME("treating SHPPFW_ASKDIRCREATE as SHPPFW_DIRCREATE\n"); + + SHCreateDirectoryExW(0, realpath, NULL); + } + + /* check if we can access the directory */ + res = GetFileAttributesW(realpath); + + HeapFree(GetProcessHeap(), 0, temppath); + + if (res == INVALID_FILE_ATTRIBUTES) + { + err = GetLastError(); + if (err == ERROR_FILE_NOT_FOUND) + return HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND); + return HRESULT_FROM_WIN32(err); + } + else if (res & FILE_ATTRIBUTE_DIRECTORY) + return S_OK; + else + return HRESULT_FROM_WIN32(ERROR_DIRECTORY); +} + +/*********************************************************************** + * SHPathPrepareForWriteA (SHELL32.@) + */ +EXTERN_C HRESULT WINAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *modless, LPCSTR path, DWORD flags) +{ + WCHAR wpath[MAX_PATH]; + MultiByteToWideChar( CP_ACP, 0, path, -1, wpath, MAX_PATH); + return SHPathPrepareForWriteW(hwnd, modless, wpath, flags); +} diff --git a/reactos/dll/win32/shell32_new/shlfolder.cpp b/reactos/dll/win32/shell32_new/shlfolder.cpp new file mode 100644 index 00000000000..cb6fce5c48d --- /dev/null +++ b/reactos/dll/win32/shell32_new/shlfolder.cpp @@ -0,0 +1,564 @@ +/* + * Shell Folder stuff + * + * Copyright 1997 Marcus Meissner + * Copyright 1998, 1999, 2002 Juergen Schmied + * + * IShellFolder2 and related interfaces + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +static const WCHAR wszDotShellClassInfo[] = { + '.','S','h','e','l','l','C','l','a','s','s','I','n','f','o',0}; + +/*************************************************************************** + * SHELL32_GetCustomFolderAttribute (internal function) + * + * Gets a value from the folder's desktop.ini file, if one exists. + * + * PARAMETERS + * pidl [I] Folder containing the desktop.ini file. + * pwszHeading [I] Heading in .ini file. + * pwszAttribute [I] Attribute in .ini file. + * pwszValue [O] Buffer to store value into. + * cchValue [I] Size in characters including NULL of buffer pointed to + * by pwszValue. + * + * RETURNS + * TRUE if returned non-NULL value. + * FALSE otherwise. + */ +static BOOL __inline SHELL32_GetCustomFolderAttributeFromPath( + LPWSTR pwszFolderPath, LPCWSTR pwszHeading, LPCWSTR pwszAttribute, + LPWSTR pwszValue, DWORD cchValue) +{ + static const WCHAR wszDesktopIni[] = + {'d','e','s','k','t','o','p','.','i','n','i',0}; + static const WCHAR wszDefault[] = {0}; + + PathAddBackslashW(pwszFolderPath); + PathAppendW(pwszFolderPath, wszDesktopIni); + return GetPrivateProfileStringW(pwszHeading, pwszAttribute, wszDefault, + pwszValue, cchValue, pwszFolderPath); +} + +BOOL SHELL32_GetCustomFolderAttribute( + LPCITEMIDLIST pidl, LPCWSTR pwszHeading, LPCWSTR pwszAttribute, + LPWSTR pwszValue, DWORD cchValue) +{ + DWORD dwAttrib = FILE_ATTRIBUTE_SYSTEM; + WCHAR wszFolderPath[MAX_PATH]; + + /* Hack around not having system attribute on non-Windows file systems */ + if (0) + dwAttrib = _ILGetFileAttributes(pidl, NULL, 0); + + if (dwAttrib & FILE_ATTRIBUTE_SYSTEM) + { + if (!SHGetPathFromIDListW(pidl, wszFolderPath)) + return FALSE; + + return SHELL32_GetCustomFolderAttributeFromPath(wszFolderPath, pwszHeading, + pwszAttribute, pwszValue, cchValue); + } + return FALSE; +} + +/*************************************************************************** + * GetNextElement (internal function) + * + * Gets a part of a string till the first backslash. + * + * PARAMETERS + * pszNext [IN] string to get the element from + * pszOut [IN] pointer to buffer which receives string + * dwOut [IN] length of pszOut + * + * RETURNS + * LPSTR pointer to first, not yet parsed char + */ + +LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut) +{ + LPCWSTR pszTail = pszNext; + DWORD dwCopy; + + TRACE ("(%s %p 0x%08x)\n", debugstr_w (pszNext), pszOut, dwOut); + + *pszOut = 0x0000; + + if (!pszNext || !*pszNext) + return NULL; + + while (*pszTail && (*pszTail != (WCHAR) '\\')) + pszTail++; + + dwCopy = pszTail - pszNext + 1; + lstrcpynW (pszOut, pszNext, (dwOut < dwCopy) ? dwOut : dwCopy); + + if (*pszTail) + pszTail++; + else + pszTail = NULL; + + TRACE ("--(%s %s 0x%08x %p)\n", debugstr_w (pszNext), debugstr_w (pszOut), dwOut, pszTail); + return pszTail; +} + +HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, + LPITEMIDLIST * pidlInOut, LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes) +{ + HRESULT hr = E_INVALIDARG; + LPITEMIDLIST pidlOut = NULL, + pidlTemp = NULL; + IShellFolder *psfChild; + + TRACE ("(%p, %p, %p, %s)\n", psf, pbc, pidlInOut ? *pidlInOut : NULL, debugstr_w (szNext)); + + /* get the shellfolder for the child pidl and let it analyse further */ + hr = psf->BindToObject(*pidlInOut, pbc, IID_IShellFolder, (LPVOID *)&psfChild); + + if (SUCCEEDED(hr)) { + hr = psfChild->ParseDisplayName(hwndOwner, pbc, szNext, pEaten, &pidlOut, pdwAttributes); + psfChild->Release(); + + if (SUCCEEDED(hr)) { + pidlTemp = ILCombine (*pidlInOut, pidlOut); + + if (!pidlTemp) + hr = E_OUTOFMEMORY; + } + + if (pidlOut) + ILFree (pidlOut); + } + + ILFree (*pidlInOut); + *pidlInOut = pidlTemp; + + TRACE ("-- pidl=%p ret=0x%08x\n", pidlInOut ? *pidlInOut : NULL, hr); + return hr; +} + +/*********************************************************************** + * SHELL32_CoCreateInitSF + * + * Creates a shell folder and initializes it with a pidl and a root folder + * via IPersistFolder3 or IPersistFolder. + * + * NOTES + * pathRoot can be NULL for Folders being a drive. + * In this case the absolute path is built from pidlChild (eg. C:) + */ +static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot, + LPCITEMIDLIST pidlChild, REFCLSID clsid, LPVOID * ppvOut) +{ + HRESULT hr; + + TRACE ("%p %s %p\n", pidlRoot, debugstr_w(pathRoot), pidlChild); + + hr = SHCoCreateInstance(NULL, &clsid, NULL, IID_IShellFolder, ppvOut); + if (SUCCEEDED (hr)) + { + LPITEMIDLIST pidlAbsolute = ILCombine (pidlRoot, pidlChild); + IPersistFolder *pPF; + IPersistFolder3 *ppf; + + if (_ILIsFolder(pidlChild) && + SUCCEEDED (((IUnknown *)(*ppvOut))->QueryInterface(IID_IPersistFolder3, (LPVOID *) & ppf))) + { + PERSIST_FOLDER_TARGET_INFO ppfti; + + ZeroMemory (&ppfti, sizeof (ppfti)); + + /* fill the PERSIST_FOLDER_TARGET_INFO */ + ppfti.dwAttributes = -1; + ppfti.csidl = -1; + + /* build path */ + if (pathRoot) { + lstrcpynW (ppfti.szTargetParsingName, pathRoot, MAX_PATH - 1); + PathAddBackslashW(ppfti.szTargetParsingName); /* FIXME: why have drives a backslash here ? */ + } + + if (pidlChild) { + int len = wcslen(ppfti.szTargetParsingName); + + if (!_ILSimpleGetTextW(pidlChild, ppfti.szTargetParsingName + len, MAX_PATH - len)) + hr = E_INVALIDARG; + } + + ppf->InitializeEx(NULL, pidlAbsolute, &ppfti); + ppf->Release(); + } + else if (SUCCEEDED ((hr = ((IUnknown *)(*ppvOut))->QueryInterface (IID_IPersistFolder, (LPVOID *) & pPF)))) { + pPF->Initialize(pidlAbsolute); + pPF->Release(); + } + ILFree (pidlAbsolute); + } + TRACE ("-- (%p) ret=0x%08x\n", *ppvOut, hr); + return hr; +} + +/*********************************************************************** + * SHELL32_BindToChild [Internal] + * + * Common code for IShellFolder_BindToObject. + * + * PARAMS + * pidlRoot [I] The parent shell folder's absolute pidl. + * pathRoot [I] Absolute dos path of the parent shell folder. + * pidlComplete [I] PIDL of the child. Relative to pidlRoot. + * riid [I] GUID of the interface, which ppvOut shall be bound to. + * ppvOut [O] A reference to the child's interface (riid). + * + * NOTES + * pidlComplete has to contain at least one non empty SHITEMID. + * This function makes special assumptions on the shell namespace, which + * means you probably can't use it for your IShellFolder implementation. + */ +HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot, + LPCWSTR pathRoot, LPCITEMIDLIST pidlComplete, REFIID riid, LPVOID * ppvOut) +{ + GUID const *clsid; + IShellFolder *pSF; + HRESULT hr; + LPITEMIDLIST pidlChild; + + if (!pidlRoot || !ppvOut || !pidlComplete || !pidlComplete->mkid.cb) + return E_INVALIDARG; + + *ppvOut = NULL; + + pidlChild = ILCloneFirst (pidlComplete); + + if ((clsid = _ILGetGUIDPointer (pidlChild))) { + /* virtual folder */ + hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild, *clsid, (LPVOID *)&pSF); + } else { + /* file system folder */ + CLSID clsidFolder = CLSID_ShellFSFolder; + static const WCHAR wszCLSID[] = {'C','L','S','I','D',0}; + WCHAR wszCLSIDValue[CHARS_IN_GUID], wszFolderPath[MAX_PATH], *pwszPathTail = wszFolderPath; + + /* see if folder CLSID should be overridden by desktop.ini file */ + if (pathRoot) { + lstrcpynW(wszFolderPath, pathRoot, MAX_PATH); + pwszPathTail = PathAddBackslashW(wszFolderPath); + } + + _ILSimpleGetTextW(pidlChild,pwszPathTail,MAX_PATH - (int)(pwszPathTail - wszFolderPath)); + + if (SHELL32_GetCustomFolderAttributeFromPath (wszFolderPath, + wszDotShellClassInfo, wszCLSID, wszCLSIDValue, CHARS_IN_GUID)) + CLSIDFromString (wszCLSIDValue, &clsidFolder); + + hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild, + clsidFolder, (LPVOID *)&pSF); + } + ILFree (pidlChild); + + if (SUCCEEDED (hr)) { + if (_ILIsPidlSimple (pidlComplete)) { + /* no sub folders */ + hr = pSF->QueryInterface(riid, ppvOut); + } else { + /* go deeper */ + hr = pSF->BindToObject(ILGetNext (pidlComplete), NULL, riid, ppvOut); + } + pSF->Release(); + } + + TRACE ("-- returning (%p) %08x\n", *ppvOut, hr); + + return hr; +} + +/*********************************************************************** + * SHELL32_GetDisplayNameOfChild + * + * Retrieves the display name of a child object of a shellfolder. + * + * For a pidl eg. [subpidl1][subpidl2][subpidl3]: + * - it binds to the child shellfolder [subpidl1] + * - asks it for the displayname of [subpidl2][subpidl3] + * + * Is possible the pidl is a simple pidl. In this case it asks the + * subfolder for the displayname of an empty pidl. The subfolder + * returns the own displayname eg. "::{guid}". This is used for + * virtual folders with the registry key WantsFORPARSING set. + */ +HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, + LPCITEMIDLIST pidl, DWORD dwFlags, LPWSTR szOut, DWORD dwOutLen) +{ + LPITEMIDLIST pidlFirst; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(pidl=%p 0x%08x %p 0x%08x)\n", psf, pidl, dwFlags, szOut, dwOutLen); + pdump (pidl); + + pidlFirst = ILCloneFirst (pidl); + if (pidlFirst) { + IShellFolder2 *psfChild; + + hr = psf->BindToObject(pidlFirst, NULL, IID_IShellFolder, (LPVOID *) & psfChild); + if (SUCCEEDED (hr)) { + STRRET strTemp; + LPITEMIDLIST pidlNext = ILGetNext (pidl); + + hr = psfChild->GetDisplayNameOf(pidlNext, dwFlags, &strTemp); + if (SUCCEEDED (hr)) { + if(!StrRetToStrNW (szOut, dwOutLen, &strTemp, pidlNext)) + hr = E_FAIL; + } + psfChild->Release(); + } + ILFree (pidlFirst); + } else + hr = E_OUTOFMEMORY; + + TRACE ("-- ret=0x%08x %s\n", hr, debugstr_w(szOut)); + + return hr; +} + +/*********************************************************************** + * SHELL32_GetItemAttributes + * + * NOTES + * Observed values: + * folder: 0xE0000177 FILESYSTEM | HASSUBFOLDER | FOLDER + * file: 0x40000177 FILESYSTEM + * drive: 0xf0000144 FILESYSTEM | HASSUBFOLDER | FOLDER | FILESYSANCESTOR + * mycomputer: 0xb0000154 HASSUBFOLDER | FOLDER | FILESYSANCESTOR + * (seems to be default for shell extensions if no registry entry exists) + * + * win2k: + * folder: 0xF0400177 FILESYSTEM | HASSUBFOLDER | FOLDER | FILESYSANCESTOR | CANMONIKER + * file: 0x40400177 FILESYSTEM | CANMONIKER + * drive 0xF0400154 FILESYSTEM | HASSUBFOLDER | FOLDER | FILESYSANCESTOR | CANMONIKER | CANRENAME (LABEL) + * + * According to the MSDN documentation this function should not set flags. It claims only to reset flags when necessary. + * However it turns out the native shell32.dll _sets_ flags in several cases - so do we. + */ +HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes) +{ + DWORD dwAttributes; + BOOL has_guid; + static const DWORD dwSupportedAttr= + SFGAO_CANCOPY | /*0x00000001 */ + SFGAO_CANMOVE | /*0x00000002 */ + SFGAO_CANLINK | /*0x00000004 */ + SFGAO_CANRENAME | /*0x00000010 */ + SFGAO_CANDELETE | /*0x00000020 */ + SFGAO_HASPROPSHEET | /*0x00000040 */ + SFGAO_DROPTARGET | /*0x00000100 */ + SFGAO_LINK | /*0x00010000 */ + SFGAO_READONLY | /*0x00040000 */ + SFGAO_HIDDEN | /*0x00080000 */ + SFGAO_FILESYSANCESTOR | /*0x10000000 */ + SFGAO_FOLDER | /*0x20000000 */ + SFGAO_FILESYSTEM | /*0x40000000 */ + SFGAO_HASSUBFOLDER; /*0x80000000 */ + + TRACE ("0x%08x\n", *pdwAttributes); + + if (*pdwAttributes & ~dwSupportedAttr) + { + WARN ("attributes 0x%08x not implemented\n", (*pdwAttributes & ~dwSupportedAttr)); + *pdwAttributes &= dwSupportedAttr; + } + + has_guid = _ILGetGUIDPointer(pidl) != NULL; + + dwAttributes = *pdwAttributes; + + if (_ILIsDrive (pidl)) { + *pdwAttributes &= SFGAO_HASSUBFOLDER|SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR| + SFGAO_DROPTARGET|SFGAO_HASPROPSHEET|SFGAO_CANRENAME; + } else if (has_guid && HCR_GetFolderAttributes(pidl, &dwAttributes)) { + *pdwAttributes = dwAttributes; + } else if (_ILGetDataPointer (pidl)) { + dwAttributes = _ILGetFileAttributes (pidl, NULL, 0); + + if (!dwAttributes && has_guid) { + WCHAR path[MAX_PATH]; + STRRET strret; + + /* File attributes are not present in the internal PIDL structure, so get them from the file system. */ + + HRESULT hr = psf->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strret); + + if (SUCCEEDED(hr)) { + hr = StrRetToBufW(&strret, pidl, path, MAX_PATH); + + /* call GetFileAttributes() only for file system paths, not for parsing names like "::{...}" */ + if (SUCCEEDED(hr) && path[0]!=':') + dwAttributes = GetFileAttributesW(path); + } + } + + /* Set common attributes */ + *pdwAttributes |= SFGAO_FILESYSTEM | SFGAO_DROPTARGET | SFGAO_HASPROPSHEET | SFGAO_CANDELETE | + SFGAO_CANRENAME | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANCOPY; + + if (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + *pdwAttributes |= (SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_FILESYSANCESTOR); + *pdwAttributes &= ~SFGAO_CANLINK; + } + else + *pdwAttributes &= ~(SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_FILESYSANCESTOR); + + if (dwAttributes & FILE_ATTRIBUTE_HIDDEN) + *pdwAttributes |= SFGAO_HIDDEN; + else + *pdwAttributes &= ~SFGAO_HIDDEN; + + if (dwAttributes & FILE_ATTRIBUTE_READONLY) + *pdwAttributes |= SFGAO_READONLY; + else + *pdwAttributes &= ~SFGAO_READONLY; + + if (SFGAO_LINK & *pdwAttributes) { + char ext[MAX_PATH]; + + if (!_ILGetExtension(pidl, ext, MAX_PATH) || lstrcmpiA(ext, "lnk")) + *pdwAttributes &= ~SFGAO_LINK; + } + + if (SFGAO_HASSUBFOLDER & *pdwAttributes) + { + IShellFolder *psf2; + if (SUCCEEDED(psf->BindToObject(pidl, 0, IID_IShellFolder, (LPVOID *)&psf2))) + { + IEnumIDList *pEnumIL = NULL; + if (SUCCEEDED(psf2->EnumObjects(0, SHCONTF_FOLDERS, &pEnumIL))) + { + if (pEnumIL->Skip(1) != S_OK) + *pdwAttributes &= ~SFGAO_HASSUBFOLDER; + pEnumIL->Release(); + } + psf2->Release(); + } + } + } else { + *pdwAttributes &= SFGAO_HASSUBFOLDER|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET|SFGAO_CANRENAME|SFGAO_CANLINK; + } + TRACE ("-- 0x%08x\n", *pdwAttributes); + return S_OK; +} + +/*********************************************************************** + * SHELL32_CompareIDs + */ +HRESULT SHELL32_CompareIDs (IShellFolder * iface, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + int type1, + type2; + char szTemp1[MAX_PATH]; + char szTemp2[MAX_PATH]; + HRESULT nReturn; + LPITEMIDLIST firstpidl, + nextpidl1, + nextpidl2; + IShellFolder *psf; + + /* test for empty pidls */ + BOOL isEmpty1 = _ILIsDesktop (pidl1); + BOOL isEmpty2 = _ILIsDesktop (pidl2); + + if (isEmpty1 && isEmpty2) + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 0 ); + if (isEmpty1) + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 ); + if (isEmpty2) + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 ); + + /* test for different types. Sort order is the PT_* constant */ + type1 = _ILGetDataPointer (pidl1)->type; + type2 = _ILGetDataPointer (pidl2)->type; + if (type1 < type2) + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 ); + else if (type1 > type2) + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 ); + + /* test for name of pidl */ + _ILSimpleGetText (pidl1, szTemp1, MAX_PATH); + _ILSimpleGetText (pidl2, szTemp2, MAX_PATH); + nReturn = lstrcmpiA (szTemp1, szTemp2); + if (nReturn < 0) + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 ); + else if (nReturn > 0) + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 ); + + /* test of complex pidls */ + firstpidl = ILCloneFirst (pidl1); + nextpidl1 = ILGetNext (pidl1); + nextpidl2 = ILGetNext (pidl2); + + /* optimizing: test special cases and bind not deeper */ + /* the deeper shellfolder would do the same */ + isEmpty1 = _ILIsDesktop (nextpidl1); + isEmpty2 = _ILIsDesktop (nextpidl2); + + if (isEmpty1 && isEmpty2) { + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 0 ); + } else if (isEmpty1) { + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 ); + } else if (isEmpty2) { + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 ); + /* optimizing end */ + } else if (SUCCEEDED (iface->BindToObject(firstpidl, NULL, IID_IShellFolder, (LPVOID *)&psf))) { + nReturn = psf->CompareIDs(lParam, nextpidl1, nextpidl2); + psf->Release(); + } + ILFree (firstpidl); + return nReturn; +} + +/*********************************************************************** + * SHCreateLinks + * + * Undocumented. + */ +HRESULT WINAPI SHCreateLinks( HWND hWnd, LPCSTR lpszDir, LPDATAOBJECT lpDataObject, + UINT uFlags, LPITEMIDLIST *lppidlLinks) +{ + FIXME("%p %s %p %08x %p\n",hWnd,lpszDir,lpDataObject,uFlags,lppidlLinks); + return E_NOTIMPL; +} + +/*********************************************************************** + * SHOpenFolderAndSelectItems + * + * Unimplemented. + */ +EXTERN_C HRESULT +WINAPI +SHOpenFolderAndSelectItems(LPITEMIDLIST pidlFolder, + UINT cidl, + PCUITEMID_CHILD_ARRAY apidl, + DWORD dwFlags) +{ + FIXME("SHOpenFolderAndSelectItems() stub\n"); + return E_NOTIMPL; +} diff --git a/reactos/dll/win32/shell32_new/shlfsbind.cpp b/reactos/dll/win32/shell32_new/shlfsbind.cpp new file mode 100644 index 00000000000..6cd898531b8 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shlfsbind.cpp @@ -0,0 +1,168 @@ +/* + * File System Bind Data object to use as parameter for the bind context to + * IShellFolder_ParseDisplayName + * + * Copyright 2003 Rolf Kalbermatter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + */ + +#include +#include +#include +#include +#include + +WINE_DEFAULT_DEBUG_CHANNEL(pidl); + +/*********************************************************************** + * IFileSystemBindData implementation + */ +class IFileSystemBindDataImpl : + public CComObjectRootEx, + public IFileSystemBindData +{ +private: + WIN32_FIND_DATAW findFile; +public: + IFileSystemBindDataImpl(); + ~IFileSystemBindDataImpl(); + + // *** IFileSystemBindData methods *** + virtual HRESULT STDMETHODCALLTYPE SetFindData(const WIN32_FIND_DATAW *pfd); + virtual HRESULT STDMETHODCALLTYPE GetFindData(WIN32_FIND_DATAW *pfd); + +DECLARE_NOT_AGGREGATABLE(IFileSystemBindDataImpl) +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(IFileSystemBindDataImpl) + COM_INTERFACE_ENTRY_IID(IID_IFileSystemBindData, IFileSystemBindData) +END_COM_MAP() +}; + +static const WCHAR wFileSystemBindData[] = { + 'F','i','l','e',' ','S','y','s','t','e','m',' ','B','i','n','d','D','a','t','a',0}; + +HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV) +{ + CComPtr fileSystemBindData; + CComPtr bindContext; + BIND_OPTS bindOpts; + HRESULT hResult; + + TRACE("%p, %p\n", pfd, ppV); + + if (ppV == NULL) + return E_INVALIDARG; + + *ppV = NULL; + + hResult = IFileSystemBindDataImpl::_CreatorClass::CreateInstance(NULL, IID_IFileSystemBindData, (void **)&fileSystemBindData); + if (FAILED(hResult)) + return hResult; + hResult = fileSystemBindData->SetFindData(pfd); + if (FAILED(hResult)) + return hResult; + + hResult = CreateBindCtx(0, &bindContext); + if (FAILED(hResult)) + return hResult; + bindOpts.cbStruct = sizeof(BIND_OPTS); + bindOpts.grfFlags = 0; + bindOpts.grfMode = STGM_CREATE; + bindOpts.dwTickCountDeadline = 0; + hResult = bindContext->SetBindOptions(&bindOpts); + if (FAILED(hResult)) + return hResult; + hResult = bindContext->RegisterObjectParam((LPOLESTR)wFileSystemBindData, fileSystemBindData); + if (FAILED(hResult)) + return hResult; + + *ppV = bindContext.Detach(); + + return S_OK; +} + +HRESULT WINAPI FileSystemBindData_GetFindData(LPBC pbc, WIN32_FIND_DATAW *pfd) +{ + CComPtr pUnk; + CComPtr pfsbd; + HRESULT ret; + + TRACE("%p, %p\n", pbc, pfd); + + if (!pfd) + return E_INVALIDARG; + + ret = pbc->GetObjectParam((LPOLESTR)wFileSystemBindData, &pUnk); + if (SUCCEEDED(ret)) + { + ret = pUnk->QueryInterface(IID_IFileSystemBindData, (LPVOID *)&pfsbd); + if (SUCCEEDED(ret)) + ret = pfsbd->GetFindData(pfd); + } + return ret; +} + +HRESULT WINAPI FileSystemBindData_SetFindData(LPBC pbc, const WIN32_FIND_DATAW *pfd) +{ + CComPtr pUnk; + CComPtr pfsbd; + HRESULT ret; + + TRACE("%p, %p\n", pbc, pfd); + + ret = pbc->GetObjectParam((LPOLESTR)wFileSystemBindData, &pUnk); + if (SUCCEEDED(ret)) + { + ret = pUnk->QueryInterface(IID_IFileSystemBindData, (LPVOID *)&pfsbd); + if (SUCCEEDED(ret)) + ret = pfsbd->SetFindData(pfd); + } + return ret; +} + +IFileSystemBindDataImpl::IFileSystemBindDataImpl() +{ + memset(&findFile, 0, sizeof(WIN32_FIND_DATAW)); +} + +IFileSystemBindDataImpl::~IFileSystemBindDataImpl() +{ + TRACE(" destroying ISFBindPidl(%p)\n", this); +} + +HRESULT WINAPI IFileSystemBindDataImpl::GetFindData(WIN32_FIND_DATAW *pfd) +{ + TRACE("(%p), %p\n", this, pfd); + + if (!pfd) + return E_INVALIDARG; + + memcpy(pfd, &findFile, sizeof(WIN32_FIND_DATAW)); + return NOERROR; +} + +HRESULT WINAPI IFileSystemBindDataImpl::SetFindData(const WIN32_FIND_DATAW *pfd) +{ + TRACE("(%p), %p\n", this, pfd); + + if (pfd) + memcpy(&findFile, pfd, sizeof(WIN32_FIND_DATAW)); + else + memset(&findFile, 0, sizeof(WIN32_FIND_DATAW)); + return NOERROR; +} diff --git a/reactos/dll/win32/shell32_new/shlmenu.cpp b/reactos/dll/win32/shell32_new/shlmenu.cpp new file mode 100644 index 00000000000..63abcb7b862 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shlmenu.cpp @@ -0,0 +1,982 @@ +/* + * see www.geocities.com/SiliconValley/4942/filemenu.html + * + * Copyright 1999, 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#ifdef FM_SEPARATOR +#undef FM_SEPARATOR +#endif +#define FM_SEPARATOR (LPCWSTR)1 + +static BOOL FileMenu_AppendItemW(HMENU hMenu, LPCWSTR lpText, UINT uID, int icon, + HMENU hMenuPopup, int nItemHeight); + +typedef struct +{ + BOOL bInitialized; + BOOL bFixedItems; + /* create */ + COLORREF crBorderColor; + int nBorderWidth; + HBITMAP hBorderBmp; + + /* insert using pidl */ + LPITEMIDLIST pidl; + UINT uID; + UINT uFlags; + UINT uEnumFlags; + LPFNFMCALLBACK lpfnCallback; +} FMINFO, *LPFMINFO; + +typedef struct +{ int cchItemText; + int iIconIndex; + HMENU hMenu; + WCHAR szItemText[1]; +} FMITEM, * LPFMITEM; + +static BOOL bAbortInit; + +#define CCH_MAXITEMTEXT 256 + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +static LPFMINFO FM_GetMenuInfo(HMENU hmenu) +{ + MENUINFO MenuInfo; + LPFMINFO menudata; + + MenuInfo.cbSize = sizeof(MENUINFO); + MenuInfo.fMask = MIM_MENUDATA; + + if (! GetMenuInfo(hmenu, &MenuInfo)) + return NULL; + + menudata = (LPFMINFO)MenuInfo.dwMenuData; + + if ((menudata == 0) || (MenuInfo.cbSize != sizeof(MENUINFO))) + { + ERR("menudata corrupt: %p %u\n", menudata, MenuInfo.cbSize); + return 0; + } + + return menudata; + +} +/************************************************************************* + * FM_SetMenuParameter [internal] + * + */ +static LPFMINFO FM_SetMenuParameter( + HMENU hmenu, + UINT uID, + LPCITEMIDLIST pidl, + UINT uFlags, + UINT uEnumFlags, + LPFNFMCALLBACK lpfnCallback) +{ + LPFMINFO menudata; + + TRACE("\n"); + + menudata = FM_GetMenuInfo(hmenu); + + SHFree(menudata->pidl); + + menudata->uID = uID; + menudata->pidl = ILClone(pidl); + menudata->uFlags = uFlags; + menudata->uEnumFlags = uEnumFlags; + menudata->lpfnCallback = lpfnCallback; + + return menudata; +} + +/************************************************************************* + * FM_InitMenuPopup [internal] + * + */ +static int FM_InitMenuPopup(HMENU hmenu, LPCITEMIDLIST pAlternatePidl) +{ IShellFolder *lpsf, *lpsf2; + ULONG ulItemAttr = SFGAO_FOLDER; + UINT uID, uEnumFlags; + LPFNFMCALLBACK lpfnCallback; + LPCITEMIDLIST pidl; + WCHAR sTemp[MAX_PATH]; + int NumberOfItems = 0, iIcon; + MENUINFO MenuInfo; + LPFMINFO menudata; + + TRACE("%p %p\n", hmenu, pAlternatePidl); + + MenuInfo.cbSize = sizeof(MENUINFO); + MenuInfo.fMask = MIM_MENUDATA; + + if (! GetMenuInfo(hmenu, &MenuInfo)) + return FALSE; + + menudata = (LPFMINFO)MenuInfo.dwMenuData; + + if ((menudata == 0) || (MenuInfo.cbSize != sizeof(MENUINFO))) + { + ERR("menudata corrupt: %p %u\n", menudata, MenuInfo.cbSize); + return 0; + } + + if (menudata->bInitialized) + return 0; + + pidl = (pAlternatePidl? pAlternatePidl: menudata->pidl); + if (!pidl) + return 0; + + uID = menudata->uID; + uEnumFlags = menudata->uEnumFlags; + lpfnCallback = menudata->lpfnCallback; + menudata->bInitialized = FALSE; + + SetMenuInfo(hmenu, &MenuInfo); + + if (SUCCEEDED (SHGetDesktopFolder(&lpsf))) + { + if (SUCCEEDED(lpsf->BindToObject(pidl, 0, IID_IShellFolder, (LPVOID *)&lpsf2))) + { + IEnumIDList *lpe = NULL; + + if (SUCCEEDED (lpsf2->EnumObjects(0, uEnumFlags, &lpe ))) + { + + LPITEMIDLIST pidlTemp = NULL; + ULONG ulFetched; + + while ((!bAbortInit) && (NOERROR == lpe->Next(1,&pidlTemp,&ulFetched))) + { + if (SUCCEEDED (lpsf->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlTemp, &ulItemAttr))) + { + ILGetDisplayNameExW(NULL, pidlTemp, sTemp, ILGDN_FORPARSING); + if (! (PidlToSicIndex(lpsf, pidlTemp, FALSE, 0, &iIcon))) + iIcon = FM_BLANK_ICON; + if ( SFGAO_FOLDER & ulItemAttr) + { + LPFMINFO lpFmMi; + MENUINFO MenuInfo; + HMENU hMenuPopup = CreatePopupMenu(); + + lpFmMi = (LPFMINFO)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(FMINFO)); + + lpFmMi->pidl = ILCombine(pidl, pidlTemp); + lpFmMi->uEnumFlags = SHCONTF_FOLDERS | SHCONTF_NONFOLDERS; + + MenuInfo.cbSize = sizeof(MENUINFO); + MenuInfo.fMask = MIM_MENUDATA; + MenuInfo.dwMenuData = (ULONG_PTR) lpFmMi; + SetMenuInfo (hMenuPopup, &MenuInfo); + + FileMenu_AppendItemW (hmenu, sTemp, uID, iIcon, hMenuPopup, FM_DEFAULT_HEIGHT); + } + else + { + LPWSTR pExt = PathFindExtensionW(sTemp); + if (pExt) + *pExt = 0; + FileMenu_AppendItemW (hmenu, sTemp, uID, iIcon, 0, FM_DEFAULT_HEIGHT); + } + } + + if (lpfnCallback) + { + TRACE("enter callback\n"); + lpfnCallback ( pidl, pidlTemp); + TRACE("leave callback\n"); + } + + NumberOfItems++; + } + lpe->Release(); + } + lpsf2->Release(); + } + lpsf->Release(); + } + + if ( GetMenuItemCount (hmenu) == 0 ) + { + static const WCHAR szEmpty[] = { '(','e','m','p','t','y',')',0 }; + FileMenu_AppendItemW (hmenu, szEmpty, uID, FM_BLANK_ICON, 0, FM_DEFAULT_HEIGHT); + NumberOfItems++; + } + + menudata->bInitialized = TRUE; + SetMenuInfo(hmenu, &MenuInfo); + + return NumberOfItems; +} +/************************************************************************* + * FileMenu_Create [SHELL32.114] + * + * NOTES + * for non-root menus values are + * (ffffffff,00000000,00000000,00000000,00000000) + */ +HMENU WINAPI FileMenu_Create ( + COLORREF crBorderColor, + int nBorderWidth, + HBITMAP hBorderBmp, + int nSelHeight, + UINT uFlags) +{ + MENUINFO MenuInfo; + LPFMINFO menudata; + + HMENU hMenu = CreatePopupMenu(); + + TRACE("0x%08x 0x%08x %p 0x%08x 0x%08x hMenu=%p\n", + crBorderColor, nBorderWidth, hBorderBmp, nSelHeight, uFlags, hMenu); + + menudata = (LPFMINFO)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(FMINFO)); + menudata->crBorderColor = crBorderColor; + menudata->nBorderWidth = nBorderWidth; + menudata->hBorderBmp = hBorderBmp; + + MenuInfo.cbSize = sizeof(MENUINFO); + MenuInfo.fMask = MIM_MENUDATA; + MenuInfo.dwMenuData = (ULONG_PTR) menudata; + SetMenuInfo (hMenu, &MenuInfo); + + return hMenu; +} + +/************************************************************************* + * FileMenu_Destroy [SHELL32.118] + * + * NOTES + * exported by name + */ +void WINAPI FileMenu_Destroy (HMENU hmenu) +{ + LPFMINFO menudata; + + TRACE("%p\n", hmenu); + + FileMenu_DeleteAllItems (hmenu); + + menudata = FM_GetMenuInfo(hmenu); + + SHFree( menudata->pidl); + HeapFree(GetProcessHeap(), 0, menudata); + + DestroyMenu (hmenu); +} + +/************************************************************************* + * FileMenu_AppendItem [SHELL32.115] + * + */ +static BOOL FileMenu_AppendItemW( + HMENU hMenu, + LPCWSTR lpText, + UINT uID, + int icon, + HMENU hMenuPopup, + int nItemHeight) +{ + MENUITEMINFOW mii; + LPFMITEM myItem; + LPFMINFO menudata; + MENUINFO MenuInfo; + + + TRACE("%p %s 0x%08x 0x%08x %p 0x%08x\n", + hMenu, (lpText!=FM_SEPARATOR) ? debugstr_w(lpText) : NULL, + uID, icon, hMenuPopup, nItemHeight); + + ZeroMemory (&mii, sizeof(MENUITEMINFOW)); + + mii.cbSize = sizeof(MENUITEMINFOW); + + if (lpText != FM_SEPARATOR) + { + int len = strlenW (lpText); + myItem = (LPFMITEM)SHAlloc(sizeof(FMITEM) + len*sizeof(WCHAR)); + wcscpy (myItem->szItemText, lpText); + myItem->cchItemText = len; + myItem->iIconIndex = icon; + myItem->hMenu = hMenu; + mii.fMask = MIIM_DATA; + mii.dwItemData = (ULONG_PTR) myItem; + } + + if ( hMenuPopup ) + { /* sub menu */ + mii.fMask |= MIIM_TYPE | MIIM_SUBMENU; + mii.fType = MFT_OWNERDRAW; + mii.hSubMenu = hMenuPopup; + } + else if (lpText == FM_SEPARATOR ) + { mii.fMask |= MIIM_ID | MIIM_TYPE; + mii.fType = MFT_SEPARATOR; + } + else + { /* normal item */ + mii.fMask |= MIIM_ID | MIIM_TYPE | MIIM_STATE; + mii.fState = MFS_ENABLED | MFS_DEFAULT; + mii.fType = MFT_OWNERDRAW; + } + mii.wID = uID; + + InsertMenuItemW (hMenu, (UINT)-1, TRUE, &mii); + + /* set bFixedItems to true */ + MenuInfo.cbSize = sizeof(MENUINFO); + MenuInfo.fMask = MIM_MENUDATA; + + if (! GetMenuInfo(hMenu, &MenuInfo)) + return FALSE; + + menudata = (LPFMINFO)MenuInfo.dwMenuData; + if ((menudata == 0) || (MenuInfo.cbSize != sizeof(MENUINFO))) + { + ERR("menudata corrupt: %p %u\n", menudata, MenuInfo.cbSize); + return 0; + } + + menudata->bFixedItems = TRUE; + SetMenuInfo(hMenu, &MenuInfo); + + return TRUE; + +} + +/**********************************************************************/ + +EXTERN_C BOOL WINAPI FileMenu_AppendItemAW( + HMENU hMenu, + LPCVOID lpText, + UINT uID, + int icon, + HMENU hMenuPopup, + int nItemHeight) +{ + BOOL ret; + + if (!lpText) return FALSE; + + if (SHELL_OsIsUnicode() || lpText == FM_SEPARATOR) + ret = FileMenu_AppendItemW(hMenu, (LPWSTR)lpText, uID, icon, hMenuPopup, nItemHeight); + else + { + DWORD len = MultiByteToWideChar( CP_ACP, 0, (LPSTR)lpText, -1, NULL, 0 ); + LPWSTR lpszText = (LPWSTR)HeapAlloc ( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + if (!lpszText) return FALSE; + MultiByteToWideChar( CP_ACP, 0, (LPSTR)lpText, -1, lpszText, len ); + ret = FileMenu_AppendItemW(hMenu, lpszText, uID, icon, hMenuPopup, nItemHeight); + HeapFree( GetProcessHeap(), 0, lpszText ); + } + + return ret; +} + +/************************************************************************* + * FileMenu_InsertUsingPidl [SHELL32.110] + * + * NOTES + * uEnumFlags any SHCONTF flag + */ +int WINAPI FileMenu_InsertUsingPidl ( + HMENU hmenu, + UINT uID, + LPCITEMIDLIST pidl, + UINT uFlags, + UINT uEnumFlags, + LPFNFMCALLBACK lpfnCallback) +{ + TRACE("%p 0x%08x %p 0x%08x 0x%08x %p\n", + hmenu, uID, pidl, uFlags, uEnumFlags, lpfnCallback); + + pdump (pidl); + + bAbortInit = FALSE; + + FM_SetMenuParameter(hmenu, uID, pidl, uFlags, uEnumFlags, lpfnCallback); + + return FM_InitMenuPopup(hmenu, NULL); +} + +/************************************************************************* + * FileMenu_ReplaceUsingPidl [SHELL32.113] + * + * FIXME: the static items are deleted but won't be refreshed + */ +int WINAPI FileMenu_ReplaceUsingPidl( + HMENU hmenu, + UINT uID, + LPCITEMIDLIST pidl, + UINT uEnumFlags, + LPFNFMCALLBACK lpfnCallback) +{ + TRACE("%p 0x%08x %p 0x%08x %p\n", + hmenu, uID, pidl, uEnumFlags, lpfnCallback); + + FileMenu_DeleteAllItems (hmenu); + + FM_SetMenuParameter(hmenu, uID, pidl, 0, uEnumFlags, lpfnCallback); + + return FM_InitMenuPopup(hmenu, NULL); +} + +/************************************************************************* + * FileMenu_Invalidate [SHELL32.111] + */ +void WINAPI FileMenu_Invalidate (HMENU hMenu) +{ + FIXME("%p\n",hMenu); +} + +/************************************************************************* + * FileMenu_FindSubMenuByPidl [SHELL32.106] + */ +HMENU WINAPI FileMenu_FindSubMenuByPidl( + HMENU hMenu, + LPCITEMIDLIST pidl) +{ + FIXME("%p %p\n",hMenu, pidl); + return 0; +} + +/************************************************************************* + * FileMenu_AppendFilesForPidl [SHELL32.124] + */ +int WINAPI FileMenu_AppendFilesForPidl( + HMENU hmenu, + LPCITEMIDLIST pidl, + BOOL bAddSeparator) +{ + LPFMINFO menudata; + + menudata = FM_GetMenuInfo(hmenu); + + menudata->bInitialized = FALSE; + + FM_InitMenuPopup(hmenu, pidl); + + if (bAddSeparator) + FileMenu_AppendItemW (hmenu, FM_SEPARATOR, 0, 0, 0, FM_DEFAULT_HEIGHT); + + TRACE("%p %p 0x%08x\n",hmenu, pidl,bAddSeparator); + + return 0; +} +/************************************************************************* + * FileMenu_AddFilesForPidl [SHELL32.125] + * + * NOTES + * uEnumFlags any SHCONTF flag + */ +int WINAPI FileMenu_AddFilesForPidl ( + HMENU hmenu, + UINT uReserved, + UINT uID, + LPCITEMIDLIST pidl, + UINT uFlags, + UINT uEnumFlags, + LPFNFMCALLBACK lpfnCallback) +{ + TRACE("%p 0x%08x 0x%08x %p 0x%08x 0x%08x %p\n", + hmenu, uReserved, uID, pidl, uFlags, uEnumFlags, lpfnCallback); + + return FileMenu_InsertUsingPidl ( hmenu, uID, pidl, uFlags, uEnumFlags, lpfnCallback); + +} + + +/************************************************************************* + * FileMenu_TrackPopupMenuEx [SHELL32.116] + */ +BOOL WINAPI FileMenu_TrackPopupMenuEx ( + HMENU hMenu, + UINT uFlags, + int x, + int y, + HWND hWnd, + LPTPMPARAMS lptpm) +{ + TRACE("%p 0x%08x 0x%x 0x%x %p %p\n", + hMenu, uFlags, x, y, hWnd, lptpm); + return TrackPopupMenuEx(hMenu, uFlags, x, y, hWnd, lptpm); +} + +/************************************************************************* + * FileMenu_GetLastSelectedItemPidls [SHELL32.107] + */ +BOOL WINAPI FileMenu_GetLastSelectedItemPidls( + UINT uReserved, + LPCITEMIDLIST *ppidlFolder, + LPCITEMIDLIST *ppidlItem) +{ + FIXME("0x%08x %p %p\n",uReserved, ppidlFolder, ppidlItem); + return 0; +} + +#define FM_ICON_SIZE 16 +#define FM_Y_SPACE 4 +#define FM_SPACE1 4 +#define FM_SPACE2 2 +#define FM_LEFTBORDER 2 +#define FM_RIGHTBORDER 8 +/************************************************************************* + * FileMenu_MeasureItem [SHELL32.112] + */ +LRESULT WINAPI FileMenu_MeasureItem( + HWND hWnd, + LPMEASUREITEMSTRUCT lpmis) +{ + LPFMITEM pMyItem = (LPFMITEM)(lpmis->itemData); + HDC hdc = GetDC(hWnd); + SIZE size; + LPFMINFO menuinfo; + + TRACE("%p %p %s\n", hWnd, lpmis, debugstr_w(pMyItem->szItemText)); + + GetTextExtentPoint32W(hdc, pMyItem->szItemText, pMyItem->cchItemText, &size); + + lpmis->itemWidth = size.cx + FM_LEFTBORDER + FM_ICON_SIZE + FM_SPACE1 + FM_SPACE2 + FM_RIGHTBORDER; + lpmis->itemHeight = (size.cy > (FM_ICON_SIZE + FM_Y_SPACE)) ? size.cy : (FM_ICON_SIZE + FM_Y_SPACE); + + /* add the menubitmap */ + menuinfo = FM_GetMenuInfo(pMyItem->hMenu); + if (menuinfo->nBorderWidth) + lpmis->itemWidth += menuinfo->nBorderWidth; + + TRACE("-- 0x%04x 0x%04x\n", lpmis->itemWidth, lpmis->itemHeight); + ReleaseDC (hWnd, hdc); + return 0; +} +/************************************************************************* + * FileMenu_DrawItem [SHELL32.105] + */ +LRESULT WINAPI FileMenu_DrawItem( + HWND hWnd, + LPDRAWITEMSTRUCT lpdis) +{ + LPFMITEM pMyItem = (LPFMITEM)(lpdis->itemData); + COLORREF clrPrevText, clrPrevBkgnd; + int xi,yi,xt,yt; + HIMAGELIST hImageList; + RECT TextRect; + LPFMINFO menuinfo; + + TRACE("%p %p %s\n", hWnd, lpdis, debugstr_w(pMyItem->szItemText)); + + if (lpdis->itemState & ODS_SELECTED) + { + clrPrevText = SetTextColor(lpdis->hDC, GetSysColor (COLOR_HIGHLIGHTTEXT)); + clrPrevBkgnd = SetBkColor(lpdis->hDC, GetSysColor (COLOR_HIGHLIGHT)); + } + else + { + clrPrevText = SetTextColor(lpdis->hDC, GetSysColor (COLOR_MENUTEXT)); + clrPrevBkgnd = SetBkColor(lpdis->hDC, GetSysColor (COLOR_MENU)); + } + + CopyRect(&TextRect, &(lpdis->rcItem)); + + /* add the menubitmap */ + menuinfo = FM_GetMenuInfo(pMyItem->hMenu); + if (menuinfo->nBorderWidth) + TextRect.left += menuinfo->nBorderWidth; + + TextRect.left += FM_LEFTBORDER; + xi = TextRect.left + FM_SPACE1; + yi = TextRect.top + FM_Y_SPACE/2; + TextRect.bottom -= FM_Y_SPACE/2; + + xt = xi + FM_ICON_SIZE + FM_SPACE2; + yt = yi; + + ExtTextOutW (lpdis->hDC, xt , yt, ETO_OPAQUE, &TextRect, pMyItem->szItemText, pMyItem->cchItemText, NULL); + + Shell_GetImageLists(0, &hImageList); + ImageList_Draw(hImageList, pMyItem->iIconIndex, lpdis->hDC, xi, yi, ILD_NORMAL); + + TRACE("-- 0x%04x 0x%04x 0x%04x 0x%04x\n", TextRect.left, TextRect.top, TextRect.right, TextRect.bottom); + + SetTextColor(lpdis->hDC, clrPrevText); + SetBkColor(lpdis->hDC, clrPrevBkgnd); + + return TRUE; +} + +/************************************************************************* + * FileMenu_InitMenuPopup [SHELL32.109] + * + * NOTES + * The filemenu is an ownerdrawn menu. Call this function responding to + * WM_INITPOPUPMENU + * + */ +BOOL WINAPI FileMenu_InitMenuPopup (HMENU hmenu) +{ + FM_InitMenuPopup(hmenu, NULL); + return TRUE; +} + +/************************************************************************* + * FileMenu_HandleMenuChar [SHELL32.108] + */ +LRESULT WINAPI FileMenu_HandleMenuChar( + HMENU hMenu, + WPARAM wParam) +{ + FIXME("%p 0x%08lx\n",hMenu,wParam); + return 0; +} + +/************************************************************************* + * FileMenu_DeleteAllItems [SHELL32.104] + * + * NOTES + * exported by name + */ +BOOL WINAPI FileMenu_DeleteAllItems (HMENU hmenu) +{ + MENUITEMINFOW mii; + LPFMINFO menudata; + + int i; + + TRACE("%p\n", hmenu); + + ZeroMemory ( &mii, sizeof(MENUITEMINFOW)); + mii.cbSize = sizeof(MENUITEMINFOW); + mii.fMask = MIIM_SUBMENU|MIIM_DATA; + + for (i = 0; i < GetMenuItemCount( hmenu ); i++) + { GetMenuItemInfoW(hmenu, i, TRUE, &mii ); + + SHFree((LPFMINFO)mii.dwItemData); + + if (mii.hSubMenu) + FileMenu_Destroy(mii.hSubMenu); + } + + while (DeleteMenu (hmenu, 0, MF_BYPOSITION)){}; + + menudata = FM_GetMenuInfo(hmenu); + + menudata->bInitialized = FALSE; + + return TRUE; +} + +/************************************************************************* + * FileMenu_DeleteItemByCmd [SHELL32.117] + * + */ +BOOL WINAPI FileMenu_DeleteItemByCmd (HMENU hMenu, UINT uID) +{ + MENUITEMINFOW mii; + + TRACE("%p 0x%08x\n", hMenu, uID); + + ZeroMemory ( &mii, sizeof(MENUITEMINFOW)); + mii.cbSize = sizeof(MENUITEMINFOW); + mii.fMask = MIIM_SUBMENU; + + GetMenuItemInfoW(hMenu, uID, FALSE, &mii ); + if ( mii.hSubMenu ) + { + /* FIXME: Do what? */ + } + + DeleteMenu(hMenu, MF_BYCOMMAND, uID); + return TRUE; +} + +/************************************************************************* + * FileMenu_DeleteItemByIndex [SHELL32.140] + */ +BOOL WINAPI FileMenu_DeleteItemByIndex ( HMENU hMenu, UINT uPos) +{ + MENUITEMINFOW mii; + + TRACE("%p 0x%08x\n", hMenu, uPos); + + ZeroMemory ( &mii, sizeof(MENUITEMINFOW)); + mii.cbSize = sizeof(MENUITEMINFOW); + mii.fMask = MIIM_SUBMENU; + + GetMenuItemInfoW(hMenu, uPos, TRUE, &mii ); + if ( mii.hSubMenu ) + { + /* FIXME: Do what? */ + } + + DeleteMenu(hMenu, MF_BYPOSITION, uPos); + return TRUE; +} + +/************************************************************************* + * FileMenu_DeleteItemByFirstID [SHELL32.141] + */ +EXTERN_C BOOL WINAPI FileMenu_DeleteItemByFirstID( + HMENU hMenu, + UINT uID) +{ + TRACE("%p 0x%08x\n", hMenu, uID); + return 0; +} + +/************************************************************************* + * FileMenu_DeleteSeparator [SHELL32.142] + */ +BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu) +{ + TRACE("%p\n", hMenu); + return 0; +} + +/************************************************************************* + * FileMenu_EnableItemByCmd [SHELL32.143] + */ +BOOL WINAPI FileMenu_EnableItemByCmd( + HMENU hMenu, + UINT uID, + BOOL bEnable) +{ + TRACE("%p 0x%08x 0x%08x\n", hMenu, uID,bEnable); + return 0; +} + +/************************************************************************* + * FileMenu_GetItemExtent [SHELL32.144] + * + * NOTES + * if the menu is too big, entries are getting cut away!! + */ +DWORD WINAPI FileMenu_GetItemExtent (HMENU hMenu, UINT uPos) +{ RECT rect; + + FIXME("%p 0x%08x\n", hMenu, uPos); + + if (GetMenuItemRect(0, hMenu, uPos, &rect)) + { FIXME("0x%04x 0x%04x 0x%04x 0x%04x\n", + rect.right, rect.left, rect.top, rect.bottom); + return ((rect.right-rect.left)<<16) + (rect.top-rect.bottom); + } + return 0x00100010; /*FIXME*/ +} + +/************************************************************************* + * FileMenu_AbortInitMenu [SHELL32.120] + * + */ +void WINAPI FileMenu_AbortInitMenu (void) +{ TRACE("\n"); + bAbortInit = TRUE; +} + +/************************************************************************* + * SHFind_InitMenuPopup [SHELL32.149] + * + * Get the IContextMenu instance for the submenu of options displayed + * for the Search entry in the Classic style Start menu. + * + * PARAMETERS + * hMenu [in] handle of menu previously created + * hWndParent [in] parent window + * w [in] no pointer (0x209 over here) perhaps menu IDs ??? + * x [in] no pointer (0x226 over here) + * + * RETURNS + * LPXXXXX pointer to struct containing a func addr at offset 8 + * or NULL at failure. + */ +EXTERN_C IContextMenu * WINAPI SHFind_InitMenuPopup (HMENU hMenu, HWND hWndParent, UINT w, UINT x) +{ + FIXME("hmenu=%p hwnd=%p 0x%08x 0x%08x stub\n", + hMenu,hWndParent,w,x); + return NULL; /* this is supposed to be a pointer */ +} + +/************************************************************************* + * _SHIsMenuSeparator (internal) + */ +static BOOL _SHIsMenuSeparator(HMENU hm, int i) +{ + MENUITEMINFOW mii; + + mii.cbSize = sizeof(MENUITEMINFOW); + mii.fMask = MIIM_TYPE; + mii.cch = 0; /* WARNING: We MUST initialize it to 0*/ + if (!GetMenuItemInfoW(hm, i, TRUE, &mii)) + { + return(FALSE); + } + + if (mii.fType & MFT_SEPARATOR) + { + return(TRUE); + } + + return(FALSE); +} + +/************************************************************************* + * Shell_MergeMenus [SHELL32.67] + */ +UINT WINAPI Shell_MergeMenus (HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags) +{ + int nItem; + HMENU hmSubMenu; + BOOL bAlreadySeparated; + MENUITEMINFOW miiSrc; + WCHAR szName[256]; + UINT uTemp, uIDMax = uIDAdjust; + + TRACE("hmenu1=%p hmenu2=%p 0x%04x 0x%04x 0x%04x 0x%04x\n", + hmDst, hmSrc, uInsert, uIDAdjust, uIDAdjustMax, uFlags); + + if (!hmDst || !hmSrc) + return uIDMax; + + nItem = GetMenuItemCount(hmDst); + + if (uInsert >= (UINT)nItem) /* insert position inside menu? */ + { + uInsert = (UINT)nItem; /* append on the end */ + bAlreadySeparated = TRUE; + } + else + { + bAlreadySeparated = _SHIsMenuSeparator(hmDst, uInsert); + } + + if ((uFlags & MM_ADDSEPARATOR) && !bAlreadySeparated) + { + /* Add a separator between the menus */ + InsertMenuA(hmDst, uInsert, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); + bAlreadySeparated = TRUE; + } + + + /* Go through the menu items and clone them*/ + for (nItem = GetMenuItemCount(hmSrc) - 1; nItem >= 0; nItem--) + { + miiSrc.cbSize = sizeof(MENUITEMINFOW); + miiSrc.fMask = MIIM_STATE | MIIM_ID | MIIM_SUBMENU | MIIM_CHECKMARKS | MIIM_TYPE | MIIM_DATA; + + /* We need to reset this every time through the loop in case menus DON'T have IDs*/ + miiSrc.fType = MFT_STRING; + miiSrc.dwTypeData = szName; + miiSrc.dwItemData = 0; + miiSrc.cch = sizeof(szName)/sizeof(WCHAR); + + if (!GetMenuItemInfoW(hmSrc, nItem, TRUE, &miiSrc)) + { + continue; + } + +/* TRACE("found menu=0x%04x %s id=0x%04x mask=0x%08x smenu=0x%04x\n", hmSrc, debugstr_a(miiSrc.dwTypeData), miiSrc.wID, miiSrc.fMask, miiSrc.hSubMenu); +*/ + if (miiSrc.fType & MFT_SEPARATOR) + { + /* This is a separator; don't put two of them in a row */ + if (bAlreadySeparated) + continue; + bAlreadySeparated = TRUE; + } + else if (miiSrc.hSubMenu) + { + if ((uFlags & MM_SUBMENUSHAVEIDS) != 0 && miiSrc.wID != (UINT)miiSrc.hSubMenu) + { + miiSrc.wID += uIDAdjust; /* add uIDAdjust to the ID */ + + if (miiSrc.wID > uIDAdjustMax && miiSrc.wID > uIDAdjustMax) /* skip ID's higher uIDAdjustMax */ + continue; + if (uIDMax <= miiSrc.wID) /* remember the highest ID */ + uIDMax = miiSrc.wID + 1; + } + else + { + miiSrc.fMask &= ~MIIM_ID; /* Don't set IDs for submenus that didn't have them already */ + } + hmSubMenu = miiSrc.hSubMenu; + + miiSrc.hSubMenu = CreatePopupMenu(); + + if (!miiSrc.hSubMenu) return(uIDMax); + + uTemp = Shell_MergeMenus(miiSrc.hSubMenu, hmSubMenu, 0, uIDAdjust, uIDAdjustMax, uFlags & MM_SUBMENUSHAVEIDS); + + if (uIDMax <= uTemp) + uIDMax = uTemp; + + bAlreadySeparated = FALSE; + } + else /* normal menu item */ + { + miiSrc.wID += uIDAdjust; /* add uIDAdjust to the ID */ + + if (miiSrc.wID > uIDAdjustMax && miiSrc.wID > uIDAdjustMax) /* skip ID's higher uIDAdjustMax */{ + continue; + } + if (uIDMax <= miiSrc.wID) /* remember the highest ID */ + uIDMax = miiSrc.wID + 1; + + bAlreadySeparated = FALSE; + } + +/* TRACE("inserting menu=0x%04x %s id=0x%04x mask=0x%08x smenu=0x%04x\n", hmDst, debugstr_a(miiSrc.dwTypeData), miiSrc.wID, miiSrc.fMask, miiSrc.hSubMenu); +*/ + if (!InsertMenuItemW(hmDst, uInsert, TRUE, &miiSrc)) + { + return(uIDMax); + } + } + + /* Ensure the correct number of separators at the beginning of the + inserted menu items*/ + if (uInsert == 0) + { + if (bAlreadySeparated) + { + DeleteMenu(hmDst, uInsert, MF_BYPOSITION); + } + } + else + { + if (_SHIsMenuSeparator(hmDst, uInsert-1)) + { + if (bAlreadySeparated) + { + DeleteMenu(hmDst, uInsert, MF_BYPOSITION); + } + } + else + { + if ((uFlags & MM_ADDSEPARATOR) && !bAlreadySeparated) + { + /* Add a separator between the menus*/ + InsertMenuW(hmDst, uInsert, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); + } + } + } + return(uIDMax); +} diff --git a/reactos/dll/win32/shell32_new/shlview.cpp b/reactos/dll/win32/shell32_new/shlview.cpp new file mode 100644 index 00000000000..d19f023788e --- /dev/null +++ b/reactos/dll/win32/shell32_new/shlview.cpp @@ -0,0 +1,2525 @@ +/* + * ShellView + * + * Copyright 1998,1999 + * + * This is the view visualizing the data provided by the shellfolder. + * No direct access to data from pidls should be done from here. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * FIXME: The order by part of the background context menu should be + * built according to the columns shown. + * + * FIXME: CheckToolbar: handle the "new folder" and "folder up" button + * + * FIXME: ShellView_FillList: consider sort orders + */ + +/* +TODO: +1. Load/Save the view state from/into the stream provided by the ShellBrowser. +2. Let the shell folder sort items. +3. Code to merge menus in the shellbrowser is incorrect. +4. Move the background context menu creation into shell view. It should store the + shell view HWND to send commands. +5. Send init, measure, and draw messages to context menu during tracking. +6. Shell view should do SetCommandTarget on internet toolbar. +7. When editing starts on item, set edit text to for editing value. +8. When shell view is called back for item info, let listview save the value. +9. Shell view should update status bar. +10. Fix shell view to handle view mode popup exec. +11. The background context menu should have a pidl just like foreground menus. This + causes crashes when dynamic handlers try to use the NULL pidl. +12. The SHELLDLL_DefView should not be filled with blue unconditionally. This causes + annoying flashing of blue even on XP, and is not correct. +13. Reorder of columns doesn't work - might be bug in comctl32 +*/ + +#include +#include +#include +#include +#include +#include "shlwapi_undoc.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +#undef SV_CLASS_NAME + +static const WCHAR SV_CLASS_NAME[] = {'S','H','E','L','L','D','L','L','_','D','e','f','V','i','e','w',0}; + +typedef struct +{ BOOL bIsAscending; + INT nHeaderID; + INT nLastHeaderID; +}LISTVIEW_SORT_INFO, *LPLISTVIEW_SORT_INFO; + +#define SHV_CHANGE_NOTIFY WM_USER + 0x1111 + +class CDefView : + public CWindowImpl, + public CComObjectRootEx, + public IShellView, + public IFolderView, + public IOleCommandTarget, + public IDropTarget, + public IDropSource, + public IViewObject, + public IServiceProvider +{ +private: + CComPtr pSFParent; + CComPtr pSF2Parent; + CComPtr pShellBrowser; + CComPtr pCommDlgBrowser; + HWND hWndList; /* ListView control */ + HWND hWndParent; + FOLDERSETTINGS FolderSettings; + HMENU hMenu; + UINT uState; + UINT cidl; + LPITEMIDLIST *apidl; + LISTVIEW_SORT_INFO ListViewSortInfo; + ULONG hNotify; /* change notification handle */ + HANDLE hAccel; + DWORD dwAspects; + DWORD dwAdvf; + CComPtr pAdvSink; + // for drag and drop + CComPtr pCurDropTarget; /* The sub-item, which is currently dragged over */ + CComPtr pCurDataObject; /* The dragged data-object */ + LONG iDragOverItem; /* Dragged over item's index, iff pCurDropTarget != NULL */ + UINT cScrollDelay; /* Send a WM_*SCROLL msg every 250 ms during drag-scroll */ + POINT ptLastMousePos; /* Mouse position at last DragOver call */ + // + CComPtr pCM; +public: + CDefView(); + ~CDefView(); + HRESULT WINAPI Initialize(IShellFolder *shellFolder); + HRESULT IncludeObject(LPCITEMIDLIST pidl); + HRESULT OnDefaultCommand(); + HRESULT OnStateChange(UINT uFlags); + void CheckToolbar(); + void SetStyle(DWORD dwAdd, DWORD dwRemove); + BOOL CreateList(); + BOOL InitList(); + static INT CALLBACK CompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData); + static INT CALLBACK ListViewCompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData); + int LV_FindItemByPidl(LPCITEMIDLIST pidl); + BOOLEAN LV_AddItem(LPCITEMIDLIST pidl); + BOOLEAN LV_DeleteItem(LPCITEMIDLIST pidl); + BOOLEAN LV_RenameItem(LPCITEMIDLIST pidlOld, LPCITEMIDLIST pidlNew); + static INT CALLBACK fill_list(LPVOID ptr, LPVOID arg); + HRESULT FillList(); + HMENU BuildFileMenu(); + void MergeFileMenu(HMENU hSubMenu); + void MergeViewMenu(HMENU hSubMenu); + UINT GetSelections(); + HRESULT OpenSelectedItems(); + void OnDeactivate(); + void DoActivate(UINT uState); + HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); + + // *** IOleWindow methods *** + virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd); + virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode); + + // *** IShellView methods *** + virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(MSG *pmsg); + virtual HRESULT STDMETHODCALLTYPE EnableModeless(BOOL fEnable); + virtual HRESULT STDMETHODCALLTYPE UIActivate(UINT uState); + virtual HRESULT STDMETHODCALLTYPE Refresh(); + virtual HRESULT STDMETHODCALLTYPE CreateViewWindow(IShellView *psvPrevious, LPCFOLDERSETTINGS pfs, IShellBrowser *psb, RECT *prcView, HWND *phWnd); + virtual HRESULT STDMETHODCALLTYPE DestroyViewWindow(); + virtual HRESULT STDMETHODCALLTYPE GetCurrentInfo(LPFOLDERSETTINGS pfs); + virtual HRESULT STDMETHODCALLTYPE AddPropertySheetPages(DWORD dwReserved, LPFNSVADDPROPSHEETPAGE pfn, LPARAM lparam); + virtual HRESULT STDMETHODCALLTYPE SaveViewState(); + virtual HRESULT STDMETHODCALLTYPE SelectItem(LPCITEMIDLIST pidlItem, SVSIF uFlags); + virtual HRESULT STDMETHODCALLTYPE GetItemObject(UINT uItem, REFIID riid, void **ppv); + + // *** IFolderView methods *** + virtual HRESULT STDMETHODCALLTYPE GetCurrentViewMode(UINT *pViewMode); + virtual HRESULT STDMETHODCALLTYPE SetCurrentViewMode(UINT ViewMode); + virtual HRESULT STDMETHODCALLTYPE GetFolder(REFIID riid, void **ppv); + virtual HRESULT STDMETHODCALLTYPE Item(int iItemIndex, LPITEMIDLIST *ppidl); + virtual HRESULT STDMETHODCALLTYPE ItemCount(UINT uFlags, int *pcItems); + virtual HRESULT STDMETHODCALLTYPE Items(UINT uFlags, REFIID riid, void **ppv); + virtual HRESULT STDMETHODCALLTYPE GetSelectionMarkedItem(int *piItem); + virtual HRESULT STDMETHODCALLTYPE GetFocusedItem(int *piItem); + virtual HRESULT STDMETHODCALLTYPE GetItemPosition(LPCITEMIDLIST pidl, POINT *ppt); + virtual HRESULT STDMETHODCALLTYPE GetSpacing(POINT *ppt); + virtual HRESULT STDMETHODCALLTYPE GetDefaultSpacing(POINT *ppt); + virtual HRESULT STDMETHODCALLTYPE GetAutoArrange(); + virtual HRESULT STDMETHODCALLTYPE SelectItem(int iItem, DWORD dwFlags); + virtual HRESULT STDMETHODCALLTYPE SelectAndPositionItems(UINT cidl, LPCITEMIDLIST *apidl, POINT *apt, DWORD dwFlags); + + // *** IOleCommandTarget methods *** + virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText); + virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut); + + // *** IDropTarget methods *** + virtual HRESULT STDMETHODCALLTYPE DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); + virtual HRESULT STDMETHODCALLTYPE DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); + virtual HRESULT STDMETHODCALLTYPE DragLeave(); + virtual HRESULT STDMETHODCALLTYPE Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); + + // *** IDropSource methods *** + virtual HRESULT STDMETHODCALLTYPE QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState); + virtual HRESULT STDMETHODCALLTYPE GiveFeedback(DWORD dwEffect); + + // *** IViewObject methods *** + virtual HRESULT STDMETHODCALLTYPE Draw(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, + HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, + BOOL ( STDMETHODCALLTYPE *pfnContinue )(ULONG_PTR dwContinue), ULONG_PTR dwContinue); + virtual HRESULT STDMETHODCALLTYPE GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, + DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet); + virtual HRESULT STDMETHODCALLTYPE Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze); + virtual HRESULT STDMETHODCALLTYPE Unfreeze(DWORD dwFreeze); + virtual HRESULT STDMETHODCALLTYPE SetAdvise(DWORD aspects, DWORD advf, IAdviseSink *pAdvSink); + virtual HRESULT STDMETHODCALLTYPE GetAdvise(DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink); + + // *** IServiceProvider methods *** + virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject); + + // message handlers + LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnGetDlgCode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnGetShellBrowser(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnCustomItem(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + + static ATL::CWndClassInfo& GetWndClassInfo() + { + static ATL::CWndClassInfo wc = + { + { sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW, StartWindowProc, + 0, 0, NULL, NULL, + LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_BACKGROUND + 1), NULL, SV_CLASS_NAME, NULL }, + NULL, NULL, IDC_ARROW, TRUE, 0, _T("") + }; + return wc; + } + + virtual WNDPROC GetWindowProc() + { + return WindowProc; + } + + static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) + { + CDefView *pThis; + LRESULT result; + + // must hold a reference during message handling + pThis = reinterpret_cast(hWnd); + pThis->AddRef(); + result = CWindowImpl::WindowProc(hWnd, uMsg, wParam, lParam); + pThis->Release(); + return result; + } + +BEGIN_MSG_MAP(CDefView) + MESSAGE_HANDLER(WM_SIZE, OnSize) + MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus) + MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus) + MESSAGE_HANDLER(WM_CREATE, OnCreate) + MESSAGE_HANDLER(WM_ACTIVATE, OnActivate) + MESSAGE_HANDLER(WM_NOTIFY, OnNotify) + MESSAGE_HANDLER(WM_COMMAND, OnCommand) + MESSAGE_HANDLER(SHV_CHANGE_NOTIFY, OnChangeNotify) + MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu) + MESSAGE_HANDLER(WM_DRAWITEM, OnCustomItem) + MESSAGE_HANDLER(WM_MEASUREITEM, OnCustomItem) + MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow) + MESSAGE_HANDLER(WM_GETDLGCODE, OnGetDlgCode) + MESSAGE_HANDLER(WM_DESTROY, OnDestroy) + MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground) + MESSAGE_HANDLER(CWM_GETISHELLBROWSER, OnGetShellBrowser) +END_MSG_MAP() + +BEGIN_COM_MAP(CDefView) + COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow) + COM_INTERFACE_ENTRY_IID(IID_IShellView, IShellView) + COM_INTERFACE_ENTRY_IID(IID_IFolderView, IFolderView) + COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget) + COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget) + COM_INTERFACE_ENTRY_IID(IID_IDropSource, IDropSource) + COM_INTERFACE_ENTRY_IID(IID_IViewObject, IViewObject) + COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider) +END_COM_MAP() +}; + +/* ListView Header ID's */ +#define LISTVIEW_COLUMN_NAME 0 +#define LISTVIEW_COLUMN_SIZE 1 +#define LISTVIEW_COLUMN_TYPE 2 +#define LISTVIEW_COLUMN_TIME 3 +#define LISTVIEW_COLUMN_ATTRIB 4 + +/*menu items */ +#define IDM_VIEW_FILES (FCIDM_SHVIEWFIRST + 0x500) +#define IDM_VIEW_IDW (FCIDM_SHVIEWFIRST + 0x501) +#define IDM_MYFILEITEM (FCIDM_SHVIEWFIRST + 0x502) + +#define ID_LISTVIEW 1 + +/*windowsx.h */ +#define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp) +#define GET_WM_COMMAND_HWND(wp, lp) (HWND)(lp) +#define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp) + +/* + Items merged into the toolbar and the filemenu +*/ +typedef struct +{ int idCommand; + int iImage; + int idButtonString; + int idMenuString; + BYTE bState; + BYTE bStyle; +} MYTOOLINFO, *LPMYTOOLINFO; + +static const MYTOOLINFO Tools[] = +{ +{ FCIDM_SHVIEW_BIGICON, 0, 0, IDS_VIEW_LARGE, TBSTATE_ENABLED, BTNS_BUTTON }, +{ FCIDM_SHVIEW_SMALLICON, 0, 0, IDS_VIEW_SMALL, TBSTATE_ENABLED, BTNS_BUTTON }, +{ FCIDM_SHVIEW_LISTVIEW, 0, 0, IDS_VIEW_LIST, TBSTATE_ENABLED, BTNS_BUTTON }, +{ FCIDM_SHVIEW_REPORTVIEW, 0, 0, IDS_VIEW_DETAILS, TBSTATE_ENABLED, BTNS_BUTTON }, +{ -1, 0, 0, 0, 0, 0} +}; + +typedef void (CALLBACK *PFNSHGETSETTINGSPROC)(LPSHELLFLAGSTATE lpsfs, DWORD dwMask); + +CDefView::CDefView() +{ + hWndList = NULL; + hWndParent = NULL; + FolderSettings.fFlags = 0; + FolderSettings.ViewMode = 0; + hMenu = NULL; + uState = 0; + cidl = 0; + apidl = NULL; + ListViewSortInfo.bIsAscending = FALSE; + ListViewSortInfo.nHeaderID = 0; + ListViewSortInfo.nLastHeaderID = 0; + hNotify = 0; + hAccel = NULL; + dwAspects = 0; + dwAdvf = 0; + iDragOverItem = 0; + cScrollDelay = 0; + ptLastMousePos.x = 0; + ptLastMousePos.y = 0; +} + +CDefView::~CDefView() +{ + TRACE(" destroying IShellView(%p)\n", this); + + SHFree(apidl); +} + +HRESULT WINAPI CDefView::Initialize(IShellFolder *shellFolder) +{ + pSFParent = shellFolder; + shellFolder->QueryInterface(IID_IShellFolder2, (LPVOID *)&pSF2Parent); + return S_OK; +} + +/********************************************************** + * + * ##### helperfunctions for communication with ICommDlgBrowser ##### + */ +HRESULT CDefView::IncludeObject(LPCITEMIDLIST pidl) +{ + HRESULT ret = S_OK; + + if (pCommDlgBrowser.p != NULL) + { + TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl); + ret = pCommDlgBrowser->IncludeObject((IShellView *)this, pidl); + TRACE("--0x%08x\n", ret); + } + return ret; +} + +HRESULT CDefView::OnDefaultCommand() +{ + HRESULT ret = S_FALSE; + + if (pCommDlgBrowser.p != NULL) + { + TRACE("ICommDlgBrowser::OnDefaultCommand\n"); + ret = pCommDlgBrowser->OnDefaultCommand((IShellView *)this); + TRACE("-- returns %08x\n", ret); + } + return ret; +} + +HRESULT CDefView::OnStateChange(UINT uFlags) +{ + HRESULT ret = S_FALSE; + + if (pCommDlgBrowser.p != NULL) + { + TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags); + ret = pCommDlgBrowser->OnStateChange((IShellView *)this, uFlags); + TRACE("--\n"); + } + return ret; +} +/********************************************************** + * set the toolbar of the filedialog buttons + * + * - activates the buttons from the shellbrowser according to + * the view state + */ +void CDefView::CheckToolbar() +{ + LRESULT result; + + TRACE("\n"); + + if (pCommDlgBrowser != NULL) + { + pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON, + FCIDM_TB_SMALLICON, (FolderSettings.ViewMode==FVM_LIST)? TRUE : FALSE, &result); + pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON, + FCIDM_TB_REPORTVIEW, (FolderSettings.ViewMode==FVM_DETAILS)? TRUE : FALSE, &result); + pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, + FCIDM_TB_SMALLICON, TRUE, &result); + pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, + FCIDM_TB_REPORTVIEW, TRUE, &result); + } +} + +/********************************************************** + * + * ##### helperfunctions for initializing the view ##### + */ +/********************************************************** + * change the style of the listview control + */ +void CDefView::SetStyle(DWORD dwAdd, DWORD dwRemove) +{ + DWORD tmpstyle; + + TRACE("(%p)\n", this); + + tmpstyle = ::GetWindowLongPtrW(hWndList, GWL_STYLE); + ::SetWindowLongPtrW(hWndList, GWL_STYLE, dwAdd | (tmpstyle & ~dwRemove)); +} + +/********************************************************** +* ShellView_CreateList() +* +* - creates the list view window +*/ +BOOL CDefView::CreateList() +{ DWORD dwStyle, dwExStyle; + + TRACE("%p\n",this); + + dwStyle = WS_TABSTOP | WS_VISIBLE | WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | + LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_AUTOARRANGE; + dwExStyle = WS_EX_CLIENTEDGE; + + switch (FolderSettings.ViewMode) + { + case FVM_ICON: dwStyle |= LVS_ICON; break; + case FVM_DETAILS: dwStyle |= LVS_REPORT; break; + case FVM_SMALLICON: dwStyle |= LVS_SMALLICON; break; + case FVM_LIST: dwStyle |= LVS_LIST; break; + default: dwStyle |= LVS_LIST; break; + } + + if (FolderSettings.fFlags & FWF_AUTOARRANGE) dwStyle |= LVS_AUTOARRANGE; + if (FolderSettings.fFlags & FWF_DESKTOP) + FolderSettings.fFlags |= FWF_NOCLIENTEDGE | FWF_NOSCROLL; + if (FolderSettings.fFlags & FWF_SINGLESEL) dwStyle |= LVS_SINGLESEL; + if (FolderSettings.fFlags & FWF_NOCLIENTEDGE) + dwExStyle &= ~WS_EX_CLIENTEDGE; + + hWndList=CreateWindowExW( dwExStyle, + WC_LISTVIEWW, + NULL, + dwStyle, + 0,0,0,0, + m_hWnd, + (HMENU)ID_LISTVIEW, + shell32_hInstance, + NULL); + + if(!hWndList) + return FALSE; + + ListViewSortInfo.bIsAscending = TRUE; + ListViewSortInfo.nHeaderID = -1; + ListViewSortInfo.nLastHeaderID = -1; + + if (FolderSettings.fFlags & FWF_DESKTOP) { + /* + * FIXME: look at the registry value + * HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ListviewShadow + * and activate drop shadows if necessary + */ + if (0) + SendMessageW(hWndList, LVM_SETTEXTBKCOLOR, 0, CLR_NONE); + else + { + SendMessageW(hWndList, LVM_SETTEXTBKCOLOR, 0, GetSysColor(COLOR_DESKTOP)); + SendMessageW(hWndList, LVM_SETBKCOLOR, 0, GetSysColor(COLOR_DESKTOP)); + } + + SendMessageW(hWndList, LVM_SETTEXTCOLOR, 0, RGB(255,255,255)); + } + + /* UpdateShellSettings(); */ + return TRUE; +} + +/********************************************************** +* ShellView_InitList() +* +* - adds all needed columns to the shellview +*/ +BOOL CDefView::InitList() +{ + LVCOLUMNW lvColumn; + SHELLDETAILS sd; + int i; + WCHAR szTemp[50]; + + TRACE("%p\n",this); + + SendMessageW(hWndList, LVM_DELETEALLITEMS, 0, 0); + + lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT; + lvColumn.pszText = szTemp; + + if (pSF2Parent) + { + for (i=0; 1; i++) + { + if (FAILED(pSF2Parent->GetDetailsOf(NULL, i, &sd))) + break; + lvColumn.fmt = sd.fmt; + lvColumn.cx = sd.cxChar*8; /* chars->pixel */ + StrRetToStrNW( szTemp, 50, &sd.str, NULL); + SendMessageW(hWndList, LVM_INSERTCOLUMNW, i, (LPARAM) &lvColumn); + } + } + else + { + FIXME("no SF2\n"); + } + + SendMessageW(hWndList, LVM_SETIMAGELIST, LVSIL_SMALL, (LPARAM)ShellSmallIconList); + SendMessageW(hWndList, LVM_SETIMAGELIST, LVSIL_NORMAL, (LPARAM)ShellBigIconList); + + return TRUE; +} + +/********************************************************** +* ShellView_CompareItems() +* +* NOTES +* internal, CALLBACK for DSA_Sort +*/ +INT CALLBACK CDefView::CompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData) +{ + int ret; + TRACE("pidl1=%p pidl2=%p lpsf=%p\n", lParam1, lParam2, (LPVOID) lpData); + + if(!lpData) return 0; + + ret = (SHORT)SCODE_CODE(((IShellFolder *)lpData)->CompareIDs(0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2)); + TRACE("ret=%i\n",ret); + return ret; +} + +/************************************************************************* + * ShellView_ListViewCompareItems + * + * Compare Function for the Listview (FileOpen Dialog) + * + * PARAMS + * lParam1 [I] the first ItemIdList to compare with + * lParam2 [I] the second ItemIdList to compare with + * lpData [I] The column ID for the header Ctrl to process + * + * RETURNS + * A negative value if the first item should precede the second, + * a positive value if the first item should follow the second, + * or zero if the two items are equivalent + * + * NOTES + * FIXME: function does what ShellView_CompareItems is supposed to do. + * unify it and figure out how to use the undocumented first parameter + * of IShellFolder_CompareIDs to do the job this function does and + * move this code to IShellFolder. + * make LISTVIEW_SORT_INFO obsolete + * the way this function works is only usable if we had only + * filesystemfolders (25/10/99 jsch) + */ +INT CALLBACK CDefView::ListViewCompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData) +{ + INT nDiff=0; + FILETIME fd1, fd2; + char strName1[MAX_PATH], strName2[MAX_PATH]; + BOOL bIsFolder1, bIsFolder2,bIsBothFolder; + LPITEMIDLIST pItemIdList1 = (LPITEMIDLIST) lParam1; + LPITEMIDLIST pItemIdList2 = (LPITEMIDLIST) lParam2; + LISTVIEW_SORT_INFO *pSortInfo = (LPLISTVIEW_SORT_INFO) lpData; + + + bIsFolder1 = _ILIsFolder(pItemIdList1); + bIsFolder2 = _ILIsFolder(pItemIdList2); + bIsBothFolder = bIsFolder1 && bIsFolder2; + + /* When sorting between a File and a Folder, the Folder gets sorted first */ + if( (bIsFolder1 || bIsFolder2) && !bIsBothFolder) + { + nDiff = bIsFolder1 ? -1 : 1; + } + else + { + /* Sort by Time: Folders or Files can be sorted */ + + if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TIME) + { + _ILGetFileDateTime(pItemIdList1, &fd1); + _ILGetFileDateTime(pItemIdList2, &fd2); + nDiff = CompareFileTime(&fd2, &fd1); + } + /* Sort by Attribute: Folder or Files can be sorted */ + else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_ATTRIB) + { + _ILGetFileAttributes(pItemIdList1, strName1, MAX_PATH); + _ILGetFileAttributes(pItemIdList2, strName2, MAX_PATH); + nDiff = lstrcmpiA(strName1, strName2); + } + /* Sort by FileName: Folder or Files can be sorted */ + else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_NAME || bIsBothFolder) + { + /* Sort by Text */ + _ILSimpleGetText(pItemIdList1, strName1, MAX_PATH); + _ILSimpleGetText(pItemIdList2, strName2, MAX_PATH); + nDiff = lstrcmpiA(strName1, strName2); + } + /* Sort by File Size, Only valid for Files */ + else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_SIZE) + { + nDiff = (INT)(_ILGetFileSize(pItemIdList1, NULL, 0) - _ILGetFileSize(pItemIdList2, NULL, 0)); + } + /* Sort by File Type, Only valid for Files */ + else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TYPE) + { + /* Sort by Type */ + _ILGetFileType(pItemIdList1, strName1, MAX_PATH); + _ILGetFileType(pItemIdList2, strName2, MAX_PATH); + nDiff = lstrcmpiA(strName1, strName2); + } + } + /* If the Date, FileSize, FileType, Attrib was the same, sort by FileName */ + + if(nDiff == 0) + { + _ILSimpleGetText(pItemIdList1, strName1, MAX_PATH); + _ILSimpleGetText(pItemIdList2, strName2, MAX_PATH); + nDiff = lstrcmpiA(strName1, strName2); + } + + if(!pSortInfo->bIsAscending) + { + nDiff = -nDiff; + } + + return nDiff; + +} + +/********************************************************** +* LV_FindItemByPidl() +*/ +int CDefView::LV_FindItemByPidl(LPCITEMIDLIST pidl) +{ + LVITEMW lvItem; + lvItem.iSubItem = 0; + lvItem.mask = LVIF_PARAM; + for(lvItem.iItem = 0; + SendMessageW(hWndList, LVM_GETITEMW, 0, (LPARAM) &lvItem); + lvItem.iItem++) + { + LPITEMIDLIST currentpidl = (LPITEMIDLIST) lvItem.lParam; + HRESULT hr = pSFParent->CompareIDs(0, pidl, currentpidl); + if(SUCCEEDED(hr) && !HRESULT_CODE(hr)) + { + return lvItem.iItem; + } + } + return -1; +} + +/********************************************************** +* LV_AddItem() +*/ +BOOLEAN CDefView::LV_AddItem(LPCITEMIDLIST pidl) +{ + LVITEMW lvItem; + + TRACE("(%p)(pidl=%p)\n", this, pidl); + + lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; /*set the mask*/ + lvItem.iItem = ListView_GetItemCount(hWndList); /*add the item to the end of the list*/ + lvItem.iSubItem = 0; + lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidl)); /*set the item's data*/ + lvItem.pszText = LPSTR_TEXTCALLBACKW; /*get text on a callback basis*/ + lvItem.iImage = I_IMAGECALLBACK; /*get the image on a callback basis*/ + if (SendMessageW(hWndList, LVM_INSERTITEMW, 0, (LPARAM)&lvItem) == -1) + return FALSE; + else + return TRUE; +} + +/********************************************************** +* LV_DeleteItem() +*/ +BOOLEAN CDefView::LV_DeleteItem(LPCITEMIDLIST pidl) +{ + int nIndex; + + TRACE("(%p)(pidl=%p)\n", this, pidl); + + nIndex = LV_FindItemByPidl(ILFindLastID(pidl)); + return (-1 == ListView_DeleteItem(hWndList, nIndex)) ? FALSE : TRUE; +} + +/********************************************************** +* LV_RenameItem() +*/ +BOOLEAN CDefView::LV_RenameItem(LPCITEMIDLIST pidlOld, LPCITEMIDLIST pidlNew) +{ + int nItem; + LVITEMW lvItem; + + TRACE("(%p)(pidlold=%p pidlnew=%p)\n", this, pidlOld, pidlNew); + + nItem = LV_FindItemByPidl(ILFindLastID(pidlOld)); + if ( -1 != nItem ) + { + lvItem.mask = LVIF_PARAM; /* only the pidl */ + lvItem.iItem = nItem; + SendMessageW(hWndList, LVM_GETITEMW, 0, (LPARAM) &lvItem); + + SHFree((LPITEMIDLIST)lvItem.lParam); + lvItem.mask = LVIF_PARAM; + lvItem.iItem = nItem; + lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidlNew)); /* set the item's data */ + SendMessageW(hWndList, LVM_SETITEMW, 0, (LPARAM) &lvItem); + SendMessageW(hWndList, LVM_UPDATE, nItem, 0); + return TRUE; /* FIXME: better handling */ + } + return FALSE; +} + +/********************************************************** +* ShellView_FillList() +* +* - gets the objectlist from the shellfolder +* - sorts the list +* - fills the list into the view +*/ +INT CALLBACK CDefView::fill_list( LPVOID ptr, LPVOID arg ) +{ + LPITEMIDLIST pidl = (LPITEMIDLIST)ptr; + CDefView *pThis = (CDefView *)arg; + /* in a commdlg This works as a filemask*/ + if ( pThis->IncludeObject(pidl)==S_OK ) pThis->LV_AddItem(pidl); + SHFree(pidl); + return TRUE; +} + +HRESULT CDefView::FillList() +{ + LPENUMIDLIST pEnumIDList; + LPITEMIDLIST pidl; + DWORD dwFetched; + HRESULT hRes; + HDPA hdpa; + + TRACE("%p\n",this); + + /* get the itemlist from the shfolder*/ + hRes = pSFParent->EnumObjects(m_hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList); + if (hRes != S_OK) + { + if (hRes==S_FALSE) + return(NOERROR); + return(hRes); + } + + /* create a pointer array */ + hdpa = DPA_Create(16); + if (!hdpa) + { + return(E_OUTOFMEMORY); + } + + /* copy the items into the array*/ + while((S_OK == pEnumIDList->Next(1, &pidl, &dwFetched)) && dwFetched) + { + if (DPA_InsertPtr(hdpa, 0x7fff, pidl) == -1) + { + SHFree(pidl); + } + } + + /* sort the array */ + DPA_Sort(hdpa, CompareItems, (LPARAM)pSFParent.p); + + /*turn the listview's redrawing off*/ + SendMessageA(hWndList, WM_SETREDRAW, FALSE, 0); + + DPA_DestroyCallback( hdpa, fill_list, (void *)this); + + /*turn the listview's redrawing back on and force it to draw*/ + SendMessageA(hWndList, WM_SETREDRAW, TRUE, 0); + + pEnumIDList->Release(); /* destroy the list*/ + + return S_OK; +} + +LRESULT CDefView::OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + ::UpdateWindow(hWndList); + bHandled = FALSE; + return 0; +} + +LRESULT CDefView::OnGetDlgCode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + return SendMessageW(hWndList, uMsg, 0, 0); +} + +LRESULT CDefView::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + RevokeDragDrop(m_hWnd); + SHChangeNotifyDeregister(hNotify); + bHandled = FALSE; + return 0; +} + +LRESULT CDefView::OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + if (FolderSettings.fFlags & (FWF_DESKTOP | FWF_TRANSPARENT)) + return 1; + bHandled = FALSE; + return 0; +} + +LRESULT CDefView::OnGetShellBrowser(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + return (LRESULT)pShellBrowser.p; +} + +/********************************************************** +* ShellView_OnCreate() +*/ +LRESULT CDefView::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + CComPtr pdt; + SHChangeNotifyEntry ntreg; + CComPtr ppf2; + + TRACE("%p\n",this); + + if(CreateList()) + { + if(InitList()) + { + FillList(); + } + } + + if (SUCCEEDED(this->QueryInterface(IID_IDropTarget, (LPVOID*)&pdt))) + RegisterDragDrop(m_hWnd, pdt); + + /* register for receiving notifications */ + pSFParent->QueryInterface(IID_IPersistFolder2, (LPVOID*)&ppf2); + if (ppf2) + { + ppf2->GetCurFolder((LPITEMIDLIST*)&ntreg.pidl); + ntreg.fRecursive = TRUE; + hNotify = SHChangeNotifyRegister(m_hWnd, SHCNF_IDLIST, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg); + SHFree((LPITEMIDLIST)ntreg.pidl); + } + + hAccel = LoadAcceleratorsA(shell32_hInstance, "shv_accel"); + + return S_OK; +} + +/********************************************************** + * #### Handling of the menus #### + */ + +/********************************************************** +* ShellView_BuildFileMenu() +*/ +HMENU CDefView::BuildFileMenu() +{ WCHAR szText[MAX_PATH]; + MENUITEMINFOW mii; + int nTools,i; + HMENU hSubMenu; + + TRACE("(%p)\n",this); + + hSubMenu = CreatePopupMenu(); + if(hSubMenu) + { /*get the number of items in our global array*/ + for(nTools = 0; Tools[nTools].idCommand != -1; nTools++){} + + /*add the menu items*/ + for(i = 0; i < nTools; i++) + { + LoadStringW(shell32_hInstance, Tools[i].idMenuString, szText, MAX_PATH); + + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; + + if(BTNS_SEP != Tools[i].bStyle) /* no separator*/ + { + mii.fType = MFT_STRING; + mii.fState = MFS_ENABLED; + mii.dwTypeData = szText; + mii.wID = Tools[i].idCommand; + } + else + { + mii.fType = MFT_SEPARATOR; + } + /* tack This item onto the end of the menu */ + InsertMenuItemW(hSubMenu, (UINT)-1, TRUE, &mii); + } + } + TRACE("-- return (menu=%p)\n",hSubMenu); + return hSubMenu; +} + +/********************************************************** +* ShellView_MergeFileMenu() +*/ +void CDefView::MergeFileMenu(HMENU hSubMenu) +{ TRACE("(%p)->(submenu=%p) stub\n",this,hSubMenu); + + if(hSubMenu) + { /*insert This item at the beginning of the menu */ + _InsertMenuItemW(hSubMenu, 0, TRUE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItemW(hSubMenu, 0, TRUE, IDM_MYFILEITEM, MFT_STRING, L"dummy45", MFS_ENABLED); + + } + TRACE("--\n"); +} + +/********************************************************** +* ShellView_MergeViewMenu() +*/ +void CDefView::MergeViewMenu(HMENU hSubMenu) +{ + TRACE("(%p)->(submenu=%p)\n",this,hSubMenu); + + if(hSubMenu) + { /*add a separator at the correct position in the menu*/ + MENUITEMINFOW mii; + static WCHAR view[] = L"View"; + + _InsertMenuItemW(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED); + + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA; + mii.fType = MFT_STRING; + mii.dwTypeData = view; + mii.hSubMenu = LoadMenuW(shell32_hInstance, L"MENU_001"); + InsertMenuItemW(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii); + } +} + +/********************************************************** +* ShellView_GetSelections() +* +* - fills the this->apidl list with the selected objects +* +* RETURNS +* number of selected items +*/ +UINT CDefView::GetSelections() +{ + LVITEMW lvItem; + UINT i = 0; + + SHFree(apidl); + + cidl = ListView_GetSelectedCount(hWndList); + apidl = (LPITEMIDLIST*)SHAlloc(cidl * sizeof(LPITEMIDLIST)); + + TRACE("selected=%i\n", cidl); + + if(apidl) + { + TRACE("-- Items selected =%u\n", cidl); + + lvItem.mask = LVIF_STATE | LVIF_PARAM; + lvItem.stateMask = LVIS_SELECTED; + lvItem.iItem = 0; + lvItem.iSubItem = 0; + + while(SendMessageW(hWndList, LVM_GETITEMW, 0, (LPARAM)&lvItem) && (i < cidl)) + { + if(lvItem.state & LVIS_SELECTED) + { + apidl[i] = (LPITEMIDLIST)lvItem.lParam; + i++; + if (i == cidl) + break; + TRACE("-- selected Item found\n"); + } + lvItem.iItem++; + } + } + return cidl; + +} + +/********************************************************** + * ShellView_OpenSelectedItems() + */ +HRESULT CDefView::OpenSelectedItems() +{ + static UINT CF_IDLIST = 0; + HRESULT hr; + CComPtr selection; + CComPtr cm; + HMENU hmenu; + FORMATETC fetc; + STGMEDIUM stgm; + LPIDA pIDList; + LPCITEMIDLIST parent_pidl; + WCHAR parent_path[MAX_PATH]; + LPCWSTR parent_dir = NULL; + SFGAOF attribs; + int i; + CMINVOKECOMMANDINFOEX ici; + MENUITEMINFOW info; + + if (0 == GetSelections()) + { + return S_OK; + } + + hr = pSFParent->GetUIObjectOf(m_hWnd, cidl, + (LPCITEMIDLIST*)apidl, IID_IContextMenu, + 0, (LPVOID *)&cm); + + if (SUCCEEDED(hr)) + { + hmenu = CreatePopupMenu(); + if (hmenu) + { + hr = IUnknown_SetSite(cm, (IShellView *)this); + if (SUCCEEDED(cm->QueryContextMenu(hmenu, 0, 0x20, 0x7fff, CMF_DEFAULTONLY))) + { + INT def = -1, n = GetMenuItemCount(hmenu); + + for ( i = 0; i < n; i++ ) + { + memset( &info, 0, sizeof info ); + info.cbSize = sizeof info; + info.fMask = MIIM_FTYPE | MIIM_STATE | MIIM_ID; + if (GetMenuItemInfoW( hmenu, i, TRUE, &info)) + { + if (info.fState & MFS_DEFAULT) + { + def = info.wID; + break; + } + } + } + if (def != -1) + { + memset( &ici, 0, sizeof ici ); + ici.cbSize = sizeof ici; + ici.lpVerb = MAKEINTRESOURCEA( def ); + ici.hwnd = m_hWnd; + + if (cm->InvokeCommand((LPCMINVOKECOMMANDINFO) &ici ) == S_OK) + { + DestroyMenu( hmenu ); + hr = IUnknown_SetSite(cm, NULL); + return S_OK; + } + } + + } + DestroyMenu( hmenu ); + hr = IUnknown_SetSite(cm, NULL); + } + cm->Release(); + } + + + + hr = pSFParent->GetUIObjectOf(m_hWnd, cidl, + (LPCITEMIDLIST*)apidl, IID_IDataObject, + 0, (LPVOID *)&selection); + + + + if (FAILED(hr)) + return hr; + + if (0 == CF_IDLIST) + { + CF_IDLIST = RegisterClipboardFormatW(CFSTR_SHELLIDLIST); + } + fetc.cfFormat = CF_IDLIST; + fetc.ptd = NULL; + fetc.dwAspect = DVASPECT_CONTENT; + fetc.lindex = -1; + fetc.tymed = TYMED_HGLOBAL; + + hr = selection->QueryGetData(&fetc); + if (FAILED(hr)) + return hr; + + hr = selection->GetData(&fetc, &stgm); + if (FAILED(hr)) + return hr; + + pIDList = (LPIDA)GlobalLock(stgm.hGlobal); + + parent_pidl = (LPCITEMIDLIST) ((LPBYTE)pIDList+pIDList->aoffset[0]); + hr = pSFParent->GetAttributesOf(1, &parent_pidl, &attribs); + if (SUCCEEDED(hr) && (attribs & SFGAO_FILESYSTEM) && + SHGetPathFromIDListW(parent_pidl, parent_path)) + { + parent_dir = parent_path; + } + + for (i = pIDList->cidl; i > 0; --i) + { + LPCITEMIDLIST pidl; + + pidl = (LPCITEMIDLIST)((LPBYTE)pIDList+pIDList->aoffset[i]); + + attribs = SFGAO_FOLDER; + hr = pSFParent->GetAttributesOf(1, &pidl, &attribs); + + if (SUCCEEDED(hr) && ! (attribs & SFGAO_FOLDER)) + { + SHELLEXECUTEINFOW shexinfo; + + shexinfo.cbSize = sizeof(SHELLEXECUTEINFOW); + shexinfo.fMask = SEE_MASK_INVOKEIDLIST; /* SEE_MASK_IDLIST is also possible. */ + shexinfo.hwnd = NULL; + shexinfo.lpVerb = NULL; + shexinfo.lpFile = NULL; + shexinfo.lpParameters = NULL; + shexinfo.lpDirectory = parent_dir; + shexinfo.nShow = SW_NORMAL; + shexinfo.lpIDList = ILCombine(parent_pidl, pidl); + + ShellExecuteExW(&shexinfo); /* Discard error/success info */ + + ILFree((LPITEMIDLIST)shexinfo.lpIDList); + } + } + + GlobalUnlock(stgm.hGlobal); + ReleaseStgMedium(&stgm); + + return S_OK; +} + +/********************************************************** + * ShellView_DoContextMenu() + */ +LRESULT CDefView::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + WORD x; + WORD y; + BOOL bDefault; + UINT uCommand; + DWORD wFlags; + HMENU hMenu; + BOOL fExplore; + HWND hwndTree; + CMINVOKECOMMANDINFO cmi; + HRESULT hResult; + + // for some reason I haven't figured out, we sometimes recurse into this method + if (pCM != NULL) + return 0; + + x = LOWORD(lParam); + y = HIWORD(lParam); + bDefault = FALSE; + + TRACE("(%p)->(0x%08x 0x%08x 0x%08x) stub\n",this, x, y, bDefault); + + fExplore = FALSE; + hwndTree = NULL; + + /* look, what's selected and create a context menu object of it*/ + if (GetSelections()) + { + pSFParent->GetUIObjectOf(hWndParent, cidl, (LPCITEMIDLIST*)apidl, IID_IContextMenu, NULL, (LPVOID *)&pCM); + + if(pCM) + { + TRACE("-- pContextMenu\n"); + hMenu = CreatePopupMenu(); + + if( hMenu ) + { + hResult = IUnknown_SetSite(pCM, (IShellView *)this); + /* See if we are in Explore or Open mode. If the browser's tree is present, we are in Explore mode.*/ + if(SUCCEEDED(pShellBrowser->GetControlWindow(FCW_TREE, &hwndTree)) && hwndTree) + { + TRACE("-- explore mode\n"); + fExplore = TRUE; + } + + /* build the flags depending on what we can do with the selected item */ + wFlags = CMF_NORMAL | (cidl != 1 ? 0 : CMF_CANRENAME) | (fExplore ? CMF_EXPLORE : 0); + + /* let the ContextMenu merge its items in */ + if (SUCCEEDED(pCM->QueryContextMenu(hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, wFlags ))) + { + if (FolderSettings.fFlags & FWF_DESKTOP) + SetMenuDefaultItem(hMenu, FCIDM_SHVIEW_OPEN, MF_BYCOMMAND); + + if( bDefault ) + { + TRACE("-- get menu default command\n"); + uCommand = GetMenuDefaultItem(hMenu, FALSE, GMDI_GOINTOPOPUPS); + } + else + { + TRACE("-- track popup\n"); + uCommand = TrackPopupMenu( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,m_hWnd,NULL); + } + + if(uCommand > 0) + { + TRACE("-- uCommand=%u\n", uCommand); + if (uCommand==FCIDM_SHVIEW_OPEN && pCommDlgBrowser.p != NULL) + { + TRACE("-- dlg: OnDefaultCommand\n"); + if (OnDefaultCommand() != S_OK) + { + OpenSelectedItems(); + } + } + else + { + TRACE("-- explore -- invoke command\n"); + ZeroMemory(&cmi, sizeof(cmi)); + cmi.cbSize = sizeof(cmi); + cmi.hwnd = hWndParent; /* this window has to answer CWM_GETISHELLBROWSER */ + cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand); + pCM->InvokeCommand(&cmi); + } + } + hResult = IUnknown_SetSite(pCM, NULL); + DestroyMenu(hMenu); + } + } + pCM.Release(); + } + } + else /* background context menu */ + { + hMenu = CreatePopupMenu(); + + CDefFolderMenu_Create2(NULL, NULL, cidl, (LPCITEMIDLIST*)apidl, pSFParent, NULL, 0, NULL, (IContextMenu**)&pCM); + pCM->QueryContextMenu(hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0); + + uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,m_hWnd,NULL); + DestroyMenu(hMenu); + + TRACE("-- (%p)->(uCommand=0x%08x )\n",this, uCommand); + + ZeroMemory(&cmi, sizeof(cmi)); + cmi.cbSize = sizeof(cmi); + cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand); + cmi.hwnd = hWndParent; + pCM->InvokeCommand(&cmi); + + pCM.Release(); + } + return 0; +} + +/********************************************************** + * ##### message handling ##### + */ + +/********************************************************** +* ShellView_OnSize() +*/ +LRESULT CDefView::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + WORD wWidth; + WORD wHeight; + + wWidth = LOWORD(lParam); + wHeight = HIWORD(lParam); + + TRACE("%p width=%u height=%u\n", this, wWidth, wHeight); + + /*resize the ListView to fit our window*/ + if (hWndList) + { + ::MoveWindow(hWndList, 0, 0, wWidth, wHeight, TRUE); + } + + return 0; +} + +/********************************************************** +* ShellView_OnDeactivate() +* +* NOTES +* internal +*/ +void CDefView::OnDeactivate() +{ + TRACE("%p\n",this); + + if(uState != SVUIA_DEACTIVATE) + { + if(hMenu) + { + pShellBrowser->SetMenuSB(0, 0, 0); + pShellBrowser->RemoveMenusSB(hMenu); + DestroyMenu(hMenu); + hMenu = 0; + } + + uState = SVUIA_DEACTIVATE; + } +} + +void CDefView::DoActivate(UINT uState) +{ + OLEMENUGROUPWIDTHS omw = { {0, 0, 0, 0, 0, 0} }; + MENUITEMINFOA mii; + CHAR szText[MAX_PATH]; + + TRACE("%p uState=%x\n", this, uState); + + /*don't do anything if the state isn't really changing */ + if(uState == uState) + { + return; + } + + OnDeactivate(); + + /*only do This if we are active */ + if(uState != SVUIA_DEACTIVATE) + { + /*merge the menus */ + hMenu = CreateMenu(); + + if(hMenu) + { + pShellBrowser->InsertMenusSB(hMenu, &omw); + TRACE("-- after fnInsertMenusSB\n"); + + /*build the top level menu get the menu item's text*/ + strcpy(szText,"dummy 31"); + + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_STATE; + mii.fType = MFT_STRING; + mii.fState = MFS_ENABLED; + mii.dwTypeData = szText; + mii.hSubMenu = BuildFileMenu(); + + /*insert our menu into the menu bar*/ + if(mii.hSubMenu) + { + InsertMenuItemA(hMenu, FCIDM_MENU_HELP, FALSE, &mii); + } + + /*get the view menu so we can merge with it*/ + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_SUBMENU; + + if(GetMenuItemInfoA(hMenu, FCIDM_MENU_VIEW, FALSE, &mii)) + { + MergeViewMenu(mii.hSubMenu); + } + + /*add the items that should only be added if we have the focus*/ + if(SVUIA_ACTIVATE_FOCUS == uState) + { + /*get the file menu so we can merge with it */ + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_SUBMENU; + + if(GetMenuItemInfoA(hMenu, FCIDM_MENU_FILE, FALSE, &mii)) + { + MergeFileMenu(mii.hSubMenu); + } + } + TRACE("-- before fnSetMenuSB\n"); + pShellBrowser->SetMenuSB(hMenu, 0, m_hWnd); + } + } + uState = uState; + TRACE("--\n"); +} + +/********************************************************** +* ShellView_OnActivate() +*/ +LRESULT CDefView::OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + DoActivate(SVUIA_ACTIVATE_FOCUS); + return 0; +} + +/********************************************************** +* ShellView_OnSetFocus() +* +*/ +LRESULT CDefView::OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + TRACE("%p\n", this); + + /* Tell the browser one of our windows has received the focus. This + should always be done before merging menus (OnActivate merges the + menus) if one of our windows has the focus.*/ + + pShellBrowser->OnViewWindowActive((IShellView *)this); + DoActivate(SVUIA_ACTIVATE_FOCUS); + + /* Set the focus to the listview */ + ::SetFocus(hWndList); + + /* Notify the ICommDlgBrowser interface */ + OnStateChange(CDBOSC_SETFOCUS); + + return 0; +} + +/********************************************************** +* ShellView_OnKillFocus() +*/ +LRESULT CDefView::OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + TRACE("(%p) stub\n", this); + + DoActivate(SVUIA_ACTIVATE_NOFOCUS); + /* Notify the ICommDlgBrowser */ + OnStateChange(CDBOSC_KILLFOCUS); + + return 0; +} + +/********************************************************** +* ShellView_OnCommand() +* +* NOTES +* the CmdID's are the ones from the context menu +*/ +LRESULT CDefView::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + DWORD dwCmdID; + DWORD dwCmd; + HWND hwndCmd; + + dwCmdID = GET_WM_COMMAND_ID(wParam, lParam); + dwCmd = GET_WM_COMMAND_CMD(wParam, lParam); + hwndCmd = GET_WM_COMMAND_HWND(wParam, lParam); + + TRACE("(%p)->(0x%08x 0x%08x %p) stub\n",this, dwCmdID, dwCmd, hwndCmd); + + switch(dwCmdID) + { + case FCIDM_SHVIEW_SMALLICON: + FolderSettings.ViewMode = FVM_SMALLICON; + SetStyle (LVS_SMALLICON, LVS_TYPEMASK); + CheckToolbar(); + break; + + case FCIDM_SHVIEW_BIGICON: + FolderSettings.ViewMode = FVM_ICON; + SetStyle (LVS_ICON, LVS_TYPEMASK); + CheckToolbar(); + break; + + case FCIDM_SHVIEW_LISTVIEW: + FolderSettings.ViewMode = FVM_LIST; + SetStyle (LVS_LIST, LVS_TYPEMASK); + CheckToolbar(); + break; + + case FCIDM_SHVIEW_REPORTVIEW: + FolderSettings.ViewMode = FVM_DETAILS; + SetStyle (LVS_REPORT, LVS_TYPEMASK); + CheckToolbar(); + break; + + /* the menu-ID's for sorting are 0x30... see shrec.rc */ + case 0x30: + case 0x31: + case 0x32: + case 0x33: + ListViewSortInfo.nHeaderID = (LPARAM) (dwCmdID - 0x30); + ListViewSortInfo.bIsAscending = TRUE; + ListViewSortInfo.nLastHeaderID = ListViewSortInfo.nHeaderID; + SendMessageA(hWndList, LVM_SORTITEMS, (WPARAM) &ListViewSortInfo, (LPARAM)ListViewCompareItems); + break; + + default: + TRACE("-- COMMAND 0x%04x unhandled\n", dwCmdID); + } + return 0; +} + +/********************************************************** +* ShellView_OnNotify() +*/ + +LRESULT CDefView::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + UINT CtlID; + LPNMHDR lpnmh; + LPNMLISTVIEW lpnmlv; + NMLVDISPINFOW *lpdi; + LPITEMIDLIST pidl; + BOOL unused; + + CtlID = wParam; + lpnmh = (LPNMHDR)lParam; + lpnmlv = (LPNMLISTVIEW)lpnmh; + lpdi = (NMLVDISPINFOW *)lpnmh; + + TRACE("%p CtlID=%u lpnmh->code=%x\n",this,CtlID,lpnmh->code); + + switch(lpnmh->code) + { + case NM_SETFOCUS: + TRACE("-- NM_SETFOCUS %p\n", this); + OnSetFocus(0, 0, 0, unused); + break; + + case NM_KILLFOCUS: + TRACE("-- NM_KILLFOCUS %p\n", this); + OnDeactivate(); + /* Notify the ICommDlgBrowser interface */ + OnStateChange(CDBOSC_KILLFOCUS); + break; + + case NM_CUSTOMDRAW: + TRACE("-- NM_CUSTOMDRAW %p\n", this); + return CDRF_DODEFAULT; + + case NM_RELEASEDCAPTURE: + TRACE("-- NM_RELEASEDCAPTURE %p\n", this); + break; + + case NM_CLICK: + TRACE("-- NM_CLICK %p\n", this); + break; + + case NM_RCLICK: + TRACE("-- NM_RCLICK %p\n", this); + break; + + case NM_DBLCLK: + TRACE("-- NM_DBLCLK %p\n", this); + if (OnDefaultCommand() != S_OK) OpenSelectedItems(); + break; + + case NM_RETURN: + TRACE("-- NM_RETURN %p\n", this); + if (OnDefaultCommand() != S_OK) OpenSelectedItems(); + break; + + case HDN_ENDTRACKW: + TRACE("-- HDN_ENDTRACKW %p\n", this); + /*nColumn1 = ListView_GetColumnWidth(hWndList, 0); + nColumn2 = ListView_GetColumnWidth(hWndList, 1);*/ + break; + + case LVN_DELETEITEM: + TRACE("-- LVN_DELETEITEM %p\n", this); + SHFree((LPITEMIDLIST)lpnmlv->lParam); /*delete the pidl because we made a copy of it*/ + break; + + case LVN_DELETEALLITEMS: + TRACE("-- LVN_DELETEALLITEMS %p\n", this); + return FALSE; + + case LVN_INSERTITEM: + TRACE("-- LVN_INSERTITEM (STUB)%p\n", this); + break; + + case LVN_ITEMACTIVATE: + TRACE("-- LVN_ITEMACTIVATE %p\n", this); + OnStateChange(CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */ + break; + + case LVN_COLUMNCLICK: + ListViewSortInfo.nHeaderID = lpnmlv->iSubItem; + if(ListViewSortInfo.nLastHeaderID == ListViewSortInfo.nHeaderID) + { + ListViewSortInfo.bIsAscending = !ListViewSortInfo.bIsAscending; + } + else + { + ListViewSortInfo.bIsAscending = TRUE; + } + ListViewSortInfo.nLastHeaderID = ListViewSortInfo.nHeaderID; + + SendMessageW(lpnmlv->hdr.hwndFrom, LVM_SORTITEMS, (WPARAM) &ListViewSortInfo, (LPARAM)ListViewCompareItems); + break; + + case LVN_GETDISPINFOA: + case LVN_GETDISPINFOW: + TRACE("-- LVN_GETDISPINFO %p\n", this); + pidl = (LPITEMIDLIST)lpdi->item.lParam; + + if(lpdi->item.mask & LVIF_TEXT) /* text requested */ + { + if (pSF2Parent) + { + SHELLDETAILS sd; + pSF2Parent->GetDetailsOf(pidl, lpdi->item.iSubItem, &sd); + if (lpnmh->code == LVN_GETDISPINFOA) + { + /* shouldn't happen */ + NMLVDISPINFOA *lpdiA = (NMLVDISPINFOA *)lpnmh; + StrRetToStrNA( lpdiA->item.pszText, lpdiA->item.cchTextMax, &sd.str, NULL); + TRACE("-- text=%s\n",lpdiA->item.pszText); + } + else /* LVN_GETDISPINFOW */ + { + StrRetToStrNW( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL); + TRACE("-- text=%s\n",debugstr_w(lpdi->item.pszText)); + } + } + else + { + FIXME("no SF2\n"); + } + } + if(lpdi->item.mask & LVIF_IMAGE) /* image requested */ + { + lpdi->item.iImage = SHMapPIDLToSystemImageListIndex(pSFParent, pidl, 0); + } + lpdi->item.mask |= LVIF_DI_SETITEM; + break; + + case LVN_ITEMCHANGED: + TRACE("-- LVN_ITEMCHANGED %p\n", this); + OnStateChange(CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */ + break; + + case LVN_BEGINDRAG: + case LVN_BEGINRDRAG: + TRACE("-- LVN_BEGINDRAG\n"); + + if (GetSelections()) + { + IDataObject * pda; + DWORD dwAttributes = SFGAO_CANLINK; + DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE; + + if (SUCCEEDED(pSFParent->GetUIObjectOf(m_hWnd, cidl, (LPCITEMIDLIST*)apidl, IID_IDataObject,0,(LPVOID *)&pda))) + { + IDropSource * pds = (IDropSource *)this; /* own DropSource interface */ + + if (SUCCEEDED(pSFParent->GetAttributesOf(cidl, (LPCITEMIDLIST*)apidl, &dwAttributes))) + { + if (dwAttributes & SFGAO_CANLINK) + { + dwEffect |= DROPEFFECT_LINK; + } + } + + if (pds) + { + DWORD dwEffect2; + DoDragDrop(pda, pds, dwEffect, &dwEffect2); + } + pda->Release(); + } + } + break; + + case LVN_BEGINLABELEDITW: + { + DWORD dwAttr = SFGAO_CANRENAME; + pidl = (LPITEMIDLIST)lpdi->item.lParam; + + TRACE("-- LVN_BEGINLABELEDITW %p\n", this); + + pSFParent->GetAttributesOf(1, (LPCITEMIDLIST*)&pidl, &dwAttr); + if (SFGAO_CANRENAME & dwAttr) + { + return FALSE; + } + return TRUE; + } + + case LVN_ENDLABELEDITW: + { + TRACE("-- LVN_ENDLABELEDITA %p\n", this); + if (lpdi->item.pszText) + { + HRESULT hr; + LVITEMW lvItem; + + lvItem.iItem = lpdi->item.iItem; + lvItem.iSubItem = 0; + lvItem.mask = LVIF_PARAM; + SendMessageW(hWndList, LVM_GETITEMW, 0, (LPARAM) &lvItem); + + pidl = (LPITEMIDLIST)lpdi->item.lParam; + hr = pSFParent->SetNameOf(0, pidl, lpdi->item.pszText, SHGDN_INFOLDER, &pidl); + + if(SUCCEEDED(hr) && pidl) + { + lvItem.mask = LVIF_PARAM; + lvItem.lParam = (LPARAM)pidl; + SendMessageW(hWndList, LVM_SETITEMW, 0, (LPARAM) &lvItem); + return TRUE; + } + } + return FALSE; + } + + case LVN_KEYDOWN: + { + /* MSG msg; + msg.hwnd = m_hWnd; + msg.message = WM_KEYDOWN; + msg.wParam = plvKeyDown->wVKey; + msg.lParam = 0; + msg.time = 0; + msg.pt = 0;*/ + + LPNMLVKEYDOWN plvKeyDown = (LPNMLVKEYDOWN) lpnmh; + SHORT ctrl = GetKeyState(VK_CONTROL) & 0x8000; + + /* initiate a rename of the selected file or directory */ + if(plvKeyDown->wVKey == VK_F2) + { + /* see how many files are selected */ + int i = ListView_GetSelectedCount(hWndList); + + /* get selected item */ + if(i == 1) + { + /* get selected item */ + i = ListView_GetNextItem(hWndList, -1, + LVNI_SELECTED); + + SendMessageW(hWndList, LVM_ENSUREVISIBLE, i, 0); + SendMessageW(hWndList, LVM_EDITLABELW, i, 0); + } + } +#if 0 + TranslateAccelerator(m_hWnd, hAccel, &msg) +#endif + else if(plvKeyDown->wVKey == VK_DELETE) + { + UINT i; + int item_index; + LVITEMA item; + LPITEMIDLIST* pItems; + ISFHelper *psfhlp; + + pSFParent->QueryInterface(IID_ISFHelper, + (LPVOID*)&psfhlp); + + if (psfhlp == NULL) + break; + + if(!(i = ListView_GetSelectedCount(hWndList))) + break; + + /* allocate memory for the pidl array */ + pItems = (LPITEMIDLIST *)HeapAlloc(GetProcessHeap(), 0, + sizeof(LPITEMIDLIST) * i); + + /* retrieve all selected items */ + i = 0; + item_index = -1; + while(ListView_GetSelectedCount(hWndList) > i) + { + /* get selected item */ + item_index = ListView_GetNextItem(hWndList, + item_index, LVNI_SELECTED); + item.iItem = item_index; + item.mask = LVIF_PARAM; + SendMessageA(hWndList, LVM_GETITEMA, 0, (LPARAM) &item); + + /* get item pidl */ + pItems[i] = (LPITEMIDLIST)item.lParam; + + i++; + } + + /* perform the item deletion */ + psfhlp->DeleteItems(i, (LPCITEMIDLIST*)pItems); + + /* free pidl array memory */ + HeapFree(GetProcessHeap(), 0, pItems); + } + + /* Initiate a refresh */ + else if(plvKeyDown->wVKey == VK_F5) + { + Refresh(); + } + else if(plvKeyDown->wVKey == VK_BACK) + { + LPSHELLBROWSER lpSb; + if((lpSb = (LPSHELLBROWSER)SendMessageW(hWndParent, CWM_GETISHELLBROWSER, 0, 0))) + { + lpSb->BrowseObject(NULL, SBSP_PARENT); + } + } + else if(plvKeyDown->wVKey == 'C' && ctrl) + { + FIXME("Need to copy\n"); + } + else if(plvKeyDown->wVKey == 'V' && ctrl) + { + FIXME("Need to paste\n"); + } + else + FIXME("LVN_KEYDOWN key=0x%08x\n",plvKeyDown->wVKey); + } + break; + + default: + TRACE("-- %p WM_COMMAND %x unhandled\n", this, lpnmh->code); + break; + } + return 0; +} + +/********************************************************** +* ShellView_OnChange() +*/ +LRESULT CDefView::OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + LPITEMIDLIST *Pidls; + + Pidls = (LPITEMIDLIST *)wParam; + + TRACE("(%p)(%p,%p,0x%08x)\n", this, Pidls[0], Pidls[1], lParam); + + switch (lParam) + { + case SHCNE_MKDIR: + case SHCNE_CREATE: + LV_AddItem(Pidls[0]); + break; + case SHCNE_RMDIR: + case SHCNE_DELETE: + LV_DeleteItem(Pidls[0]); + break; + case SHCNE_RENAMEFOLDER: + case SHCNE_RENAMEITEM: + LV_RenameItem(Pidls[0], Pidls[1]); + break; + case SHCNE_UPDATEITEM: + break; + } + return TRUE; +} + +/********************************************************** +* ShellView_DoMeasureItem +*/ +LRESULT CDefView::OnCustomItem(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) +{ + if (!pCM.p) + { + /* no menu */ + ERR("no menu!!!\n"); + return FALSE; + } + + if (pCM.p->HandleMenuMsg(uMsg, (WPARAM)m_hWnd, lParam) == S_OK) + return TRUE; + else + return FALSE; +} + +/********************************************************** +* +* +* The INTERFACE of the IShellView object +* +* +********************************************************** +*/ + +/********************************************************** +* ShellView_GetWindow +*/ +HRESULT WINAPI CDefView::GetWindow(HWND *phWnd) +{ + TRACE("(%p)\n",this); + + *phWnd = m_hWnd; + + return S_OK; +} + +HRESULT WINAPI CDefView::ContextSensitiveHelp(BOOL fEnterMode) +{ + FIXME("(%p) stub\n",this); + + return E_NOTIMPL; +} + +/********************************************************** +* IShellView_TranslateAccelerator +* +* FIXME: +* use the accel functions +*/ +HRESULT WINAPI CDefView::TranslateAccelerator(LPMSG lpmsg) +{ +#if 0 + FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%x wp=%x) stub\n",this,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam); +#endif + + if (lpmsg->message >= WM_KEYFIRST && lpmsg->message >= WM_KEYLAST) + { + TRACE("-- key=0x04%lx\n",lpmsg->wParam) ; + } + return S_FALSE; /* not handled */ +} + +HRESULT WINAPI CDefView::EnableModeless(BOOL fEnable) +{ + FIXME("(%p) stub\n",this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CDefView::UIActivate(UINT uState) +{ +/* + CHAR szName[MAX_PATH]; +*/ + LRESULT lResult; + int nPartArray[1] = {-1}; + + TRACE("(%p)->(state=%x) stub\n",this, uState); + + /*don't do anything if the state isn't really changing*/ + if(uState == uState) + { + return S_OK; + } + + /*OnActivate handles the menu merging and internal state*/ + DoActivate(uState); + + /*only do This if we are active*/ + if(uState != SVUIA_DEACTIVATE) + { + +/* + GetFolderPath is not a method of IShellFolder + IShellFolder_GetFolderPath( pSFParent, szName, sizeof(szName) ); +*/ + /* set the number of parts */ + pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, 1, (LPARAM)nPartArray, &lResult); + + /* set the text for the parts */ +/* + pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXTA, 0, (LPARAM)szName, &lResult); +*/ + } + + return S_OK; +} + +HRESULT WINAPI CDefView::Refresh() +{ + TRACE("(%p)\n",this); + + SendMessageW(hWndList, LVM_DELETEALLITEMS, 0, 0); + FillList(); + + return S_OK; +} + +HRESULT WINAPI CDefView::CreateViewWindow(IShellView *lpPrevView, LPCFOLDERSETTINGS lpfs, IShellBrowser *psb, RECT *prcView, HWND *phWnd) +{ + *phWnd = 0; + + TRACE("(%p)->(shlview=%p set=%p shlbrs=%p rec=%p hwnd=%p) incomplete\n",this, lpPrevView,lpfs, psb, prcView, phWnd); + TRACE("-- vmode=%x flags=%x left=%i top=%i right=%i bottom=%i\n",lpfs->ViewMode, lpfs->fFlags ,prcView->left,prcView->top, prcView->right, prcView->bottom); + + /*set up the member variables*/ + pShellBrowser = psb; + FolderSettings = *lpfs; + + /*get our parent window*/ + pShellBrowser->GetWindow(&hWndParent); + + /* try to get the ICommDlgBrowserInterface, adds a reference !!! */ + pCommDlgBrowser = NULL; + if (SUCCEEDED(pShellBrowser->QueryInterface(IID_ICommDlgBrowser, (LPVOID *)&pCommDlgBrowser))) + { + TRACE("-- CommDlgBrowser\n"); + } + + Create(hWndParent, prcView, NULL, WS_CHILD | WS_TABSTOP, 0, 0U); + if (m_hWnd == NULL) + return E_FAIL; + + *phWnd = m_hWnd; + + CheckToolbar(); + + if (!*phWnd) + return E_FAIL; + + SetWindowPos(HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); + UpdateWindow(); + + return S_OK; +} + +HRESULT WINAPI CDefView::DestroyViewWindow() +{ + TRACE("(%p)\n",this); + + /*Make absolutely sure all our UI is cleaned up.*/ + UIActivate(SVUIA_DEACTIVATE); + + if(hMenu) + { + DestroyMenu(hMenu); + } + + DestroyWindow(); + pShellBrowser.Release(); + pCommDlgBrowser.Release(); + + return S_OK; +} + +HRESULT WINAPI CDefView::GetCurrentInfo(LPFOLDERSETTINGS lpfs) +{ + TRACE("(%p)->(%p) vmode=%x flags=%x\n",this, lpfs, + FolderSettings.ViewMode, FolderSettings.fFlags); + + if (!lpfs) return E_INVALIDARG; + + *lpfs = FolderSettings; + return NOERROR; +} + +HRESULT WINAPI CDefView::AddPropertySheetPages(DWORD dwReserved,LPFNADDPROPSHEETPAGE lpfn, LPARAM lparam) +{ + FIXME("(%p) stub\n",this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CDefView::SaveViewState() +{ + FIXME("(%p) stub\n",this); + + return S_OK; +} + +HRESULT WINAPI CDefView::SelectItem(LPCITEMIDLIST pidl, UINT uFlags) +{ + int i; + + TRACE("(%p)->(pidl=%p, 0x%08x) stub\n",this, pidl, uFlags); + + i = LV_FindItemByPidl(pidl); + + if (i != -1) + { + LVITEMW lvItem; + + if(uFlags & SVSI_ENSUREVISIBLE) + SendMessageW(hWndList, LVM_ENSUREVISIBLE, i, 0); + + lvItem.mask = LVIF_STATE; + lvItem.stateMask = LVIS_SELECTED | LVIS_FOCUSED; + lvItem.iItem = 0; + lvItem.iSubItem = 0; + + while(SendMessageW(hWndList, LVM_GETITEMW, 0, (LPARAM) &lvItem)) + { + if (lvItem.iItem == i) + { + if (uFlags & SVSI_SELECT) + lvItem.state |= LVIS_SELECTED; + else + lvItem.state &= ~LVIS_SELECTED; + + if(uFlags & SVSI_FOCUSED) + lvItem.state &= ~LVIS_FOCUSED; + } + else + { + if (uFlags & SVSI_DESELECTOTHERS) + lvItem.state &= ~LVIS_SELECTED; + } + SendMessageW(hWndList, LVM_SETITEMW, 0, (LPARAM) &lvItem); + lvItem.iItem++; + } + + + if(uFlags & SVSI_EDIT) + SendMessageW(hWndList, LVM_EDITLABELW, i, 0); + + } + return S_OK; +} + +HRESULT WINAPI CDefView::GetItemObject(UINT uItem, REFIID riid, LPVOID *ppvOut) +{ + HRESULT hr = E_FAIL; + + TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",this, uItem, debugstr_guid(&riid), ppvOut); + + *ppvOut = NULL; + + switch(uItem) + { + case SVGIO_BACKGROUND: + if (IsEqualIID(riid, IID_IContextMenu)) + { + //*ppvOut = ISvBgCm_Constructor(pSFParent, FALSE); + CDefFolderMenu_Create2(NULL, NULL, cidl, (LPCITEMIDLIST*)apidl, pSFParent, NULL, 0, NULL, (IContextMenu**)ppvOut); + if (!ppvOut) + hr = E_OUTOFMEMORY; + } + break; + + case SVGIO_SELECTION: + GetSelections(); + hr = pSFParent->GetUIObjectOf(m_hWnd, cidl, (LPCITEMIDLIST*)apidl, riid, 0, ppvOut); + break; + } + TRACE("-- (%p)->(interface=%p)\n",this, *ppvOut); + + return hr; +} + +HRESULT STDMETHODCALLTYPE CDefView::GetCurrentViewMode(UINT *pViewMode) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::SetCurrentViewMode(UINT ViewMode) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::GetFolder(REFIID riid, void **ppv) +{ + if (pSFParent == NULL) + return E_FAIL; + return pSFParent->QueryInterface(riid, ppv); +} + +HRESULT STDMETHODCALLTYPE CDefView::Item(int iItemIndex, LPITEMIDLIST *ppidl) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::ItemCount(UINT uFlags, int *pcItems) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::Items(UINT uFlags, REFIID riid, void **ppv) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::GetSelectionMarkedItem(int *piItem) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::GetFocusedItem(int *piItem) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::GetItemPosition(LPCITEMIDLIST pidl, POINT *ppt) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::GetSpacing(POINT *ppt) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::GetDefaultSpacing(POINT *ppt) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange() +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::SelectItem(int iItem, DWORD dwFlags) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CDefView::SelectAndPositionItems(UINT cidl, LPCITEMIDLIST *apidl, POINT *apt, DWORD dwFlags) +{ + return E_NOTIMPL; +} + +/********************************************************** + * ISVOleCmdTarget_QueryStatus (IOleCommandTarget) + */ +HRESULT WINAPI CDefView::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText) +{ + UINT i; + + FIXME("(%p)->(%p(%s) 0x%08x %p %p\n", + this, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText); + + if (!prgCmds) + return E_POINTER; + for (i = 0; i < cCmds; i++) + { + FIXME("\tprgCmds[%d].cmdID = %d\n", i, prgCmds[i].cmdID); + prgCmds[i].cmdf = 0; + } + return OLECMDERR_E_UNKNOWNGROUP; +} + +/********************************************************** + * ISVOleCmdTarget_Exec (IOleCommandTarget) + * + * nCmdID is the OLECMDID_* enumeration + */ +HRESULT WINAPI CDefView::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) +{ + FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08x Opt:0x%08x %p %p)\n", + this, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut); + + if (IsEqualIID(*pguidCmdGroup, CGID_Explorer) && + (nCmdID == 0x29) && + (nCmdexecopt == 4) && pvaOut) + return S_OK; + if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView) && + (nCmdID == 9) && + (nCmdexecopt == 0)) + return 1; + + return OLECMDERR_E_UNKNOWNGROUP; +} + +/********************************************************** + * ISVDropTarget implementation + */ + +/****************************************************************************** + * drag_notify_subitem [Internal] + * + * Figure out the shellfolder object, which is currently under the mouse cursor + * and notify it via the IDropTarget interface. + */ + +#define SCROLLAREAWIDTH 20 + +HRESULT CDefView::drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) +{ + LVHITTESTINFO htinfo; + LVITEMW lvItem; + LONG lResult; + HRESULT hr; + RECT clientRect; + + /* Map from global to client coordinates and query the index of the listview-item, which is + * currently under the mouse cursor. */ + htinfo.pt.x = pt.x; + htinfo.pt.y = pt.y; + htinfo.flags = LVHT_ONITEM; + ::ScreenToClient(hWndList, &htinfo.pt); + lResult = SendMessageW(hWndList, LVM_HITTEST, 0, (LPARAM)&htinfo); + + /* Send WM_*SCROLL messages every 250 ms during drag-scrolling */ + ::GetClientRect(hWndList, &clientRect); + if (htinfo.pt.x == ptLastMousePos.x && htinfo.pt.y == ptLastMousePos.y && + (htinfo.pt.x < SCROLLAREAWIDTH || htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH || + htinfo.pt.y < SCROLLAREAWIDTH || htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH )) + { + cScrollDelay = (cScrollDelay + 1) % 5; /* DragOver is called every 50 ms */ + if (cScrollDelay == 0) { /* Mouse did hover another 250 ms over the scroll-area */ + if (htinfo.pt.x < SCROLLAREAWIDTH) + SendMessageW(hWndList, WM_HSCROLL, SB_LINEUP, 0); + if (htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH) + SendMessageW(hWndList, WM_HSCROLL, SB_LINEDOWN, 0); + if (htinfo.pt.y < SCROLLAREAWIDTH) + SendMessageW(hWndList, WM_VSCROLL, SB_LINEUP, 0); + if (htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH) + SendMessageW(hWndList, WM_VSCROLL, SB_LINEDOWN, 0); + } + } else { + cScrollDelay = 0; /* Reset, if the cursor is not over the listview's scroll-area */ + } + ptLastMousePos = htinfo.pt; + + /* If we are still over the previous sub-item, notify it via DragOver and return. */ + if (pCurDropTarget && lResult == iDragOverItem) + return pCurDropTarget->DragOver(grfKeyState, pt, pdwEffect); + + /* We've left the previous sub-item, notify it via DragLeave and Release it. */ + if (pCurDropTarget) { + pCurDropTarget->DragLeave(); + pCurDropTarget.Release(); + } + + iDragOverItem = lResult; + if (lResult == -1) { + /* We are not above one of the listview's subitems. Bind to the parent folder's + * DropTarget interface. */ + hr = pSFParent->QueryInterface(IID_IDropTarget, + (LPVOID*)&pCurDropTarget); + } else { + /* Query the relative PIDL of the shellfolder object represented by the currently + * dragged over listview-item ... */ + lvItem.mask = LVIF_PARAM; + lvItem.iItem = lResult; + lvItem.iSubItem = 0; + SendMessageW(hWndList, LVM_GETITEMW, 0, (LPARAM) &lvItem); + + /* ... and bind pCurDropTarget to the IDropTarget interface of an UIObject of this object */ + hr = pSFParent->GetUIObjectOf(hWndList, 1, + (LPCITEMIDLIST*)&lvItem.lParam, IID_IDropTarget, NULL, (LPVOID*)&pCurDropTarget); + } + + /* If anything failed, pCurDropTarget should be NULL now, which ought to be a save state. */ + if (FAILED(hr)) + return hr; + + /* Notify the item just entered via DragEnter. */ + return pCurDropTarget->DragEnter(pCurDataObject, grfKeyState, pt, pdwEffect); +} + +HRESULT WINAPI CDefView::DragEnter(IDataObject *pDataObject, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) +{ + /* Get a hold on the data object for later calls to DragEnter on the sub-folders */ + pCurDataObject = pDataObject; + pDataObject->AddRef(); + + return drag_notify_subitem(grfKeyState, pt, pdwEffect); +} + +HRESULT WINAPI CDefView::DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) +{ + return drag_notify_subitem(grfKeyState, pt, pdwEffect); +} + +HRESULT WINAPI CDefView::DragLeave() +{ + if (pCurDropTarget) + { + pCurDropTarget->DragLeave(); + pCurDropTarget.Release(); + } + pCurDataObject.Release(); + iDragOverItem = 0; + + return S_OK; +} + +HRESULT WINAPI CDefView::Drop(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) +{ + if (pCurDropTarget) + { + pCurDropTarget->Drop(pDataObject, grfKeyState, pt, pdwEffect); + pCurDropTarget.Release(); + } + + pCurDataObject.Release(); + iDragOverItem = 0; + + return S_OK; +} + +/********************************************************** + * ISVDropSource implementation + */ + +HRESULT WINAPI CDefView::QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) +{ + TRACE("(%p)\n",this); + + if (fEscapePressed) + return DRAGDROP_S_CANCEL; + else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON)) + return DRAGDROP_S_DROP; + else + return NOERROR; +} + +HRESULT WINAPI CDefView::GiveFeedback(DWORD dwEffect) +{ + TRACE("(%p)\n",this); + + return DRAGDROP_S_USEDEFAULTCURSORS; +} + +/********************************************************** + * ISVViewObject implementation + */ + +HRESULT WINAPI CDefView::Draw(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL (CALLBACK *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue) +{ + FIXME("Stub: this=%p\n",this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CDefView::GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDevice, LOGPALETTE **ppColorSet) +{ + FIXME("Stub: this=%p\n",this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CDefView::Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze) +{ + FIXME("Stub: this=%p\n",this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CDefView::Unfreeze(DWORD dwFreeze) +{ + FIXME("Stub: this=%p\n",this); + + return E_NOTIMPL; +} + +HRESULT WINAPI CDefView::SetAdvise(DWORD aspects, DWORD advf, IAdviseSink *pAdvSink) +{ + FIXME("partial stub: %p %08x %08x %p\n", this, aspects, advf, pAdvSink); + + /* FIXME: we set the AdviseSink, but never use it to send any advice */ + pAdvSink = pAdvSink; + dwAspects = aspects; + dwAdvf = advf; + + return S_OK; +} + +HRESULT WINAPI CDefView::GetAdvise(DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink) +{ + TRACE("this=%p pAspects=%p pAdvf=%p ppAdvSink=%p\n", this, pAspects, pAdvf, ppAdvSink); + + if( ppAdvSink ) + { + *ppAdvSink = pAdvSink; + pAdvSink.p->AddRef(); + } + if( pAspects ) + *pAspects = dwAspects; + if( pAdvf ) + *pAdvf = dwAdvf; + + return S_OK; +} + +HRESULT STDMETHODCALLTYPE CDefView::QueryService(REFGUID guidService, REFIID riid, void **ppvObject) +{ + if (IsEqualIID(guidService, SID_IShellBrowser)) + return pShellBrowser->QueryInterface(riid, ppvObject); + return E_NOINTERFACE; +} + +/********************************************************** + * IShellView_Constructor + */ +HRESULT WINAPI IShellView_Constructor(IShellFolder *pFolder, IShellView **newView) +{ + CComObject *theView; + CComPtr result; + HRESULT hResult; + + if (newView == NULL) + return E_POINTER; + *newView = NULL; + ATLTRY (theView = new CComObject); + if (theView == NULL) + return E_OUTOFMEMORY; + hResult = theView->QueryInterface (IID_IShellView, (void **)&result); + if (FAILED (hResult)) + { + delete theView; + return hResult; + } + hResult = theView->Initialize (pFolder); + if (FAILED (hResult)) + return hResult; + *newView = result.Detach (); + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/shobjidl_local.idl b/reactos/dll/win32/shell32_new/shobjidl_local.idl new file mode 100644 index 00000000000..1f90784d861 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shobjidl_local.idl @@ -0,0 +1,2 @@ + +#include "shobjidl.idl" diff --git a/reactos/dll/win32/shell32_new/shpolicy.cpp b/reactos/dll/win32/shell32_new/shpolicy.cpp new file mode 100644 index 00000000000..965118e0cf1 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shpolicy.cpp @@ -0,0 +1,905 @@ +/* + * shpolicy.c - Data for shell/system policies. + * + * Copyright 1999 Ian Schmidt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * NOTES: + * + * Some of these policies can be tweaked via the System Policy + * Editor which came with the Win95 Migration Guide, although + * there doesn't appear to be an updated Win98 version that + * would handle the many new policies introduced since then. + * You could easily write one with the information in + * this file... + * + * Up to date as of SHELL32 v5.00 (W2K) + */ + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +#define SHELL_NO_POLICY 0xffffffff + +typedef struct tagPOLICYDAT +{ + RESTRICTIONS policy; /* policy value passed to SHRestricted */ + LPCSTR appstr; /* application str such as "Explorer" */ + LPCSTR keystr; /* name of the actual registry key / policy */ + DWORD cache; /* cached value or 0xffffffff for invalid */ +} POLICYDATA, *LPPOLICYDATA; + +/* registry strings */ +static const CHAR strRegistryPolicyA[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies"; +static const WCHAR strRegistryPolicyW[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o', + 's','o','f','t','\\','W','i','n','d','o','w','s','\\', + 'C','u','r','r','e','n','t','V','e','r','s','i','o','n', + '\\','P','o','l','i','c','i','e','s',0}; +static const CHAR strPolicyA[] = "Policy"; +static const WCHAR strPolicyW[] = {'P','o','l','i','c','y',0}; + +/* application strings */ + +static const char strExplorer[] = {"Explorer"}; +static const char strActiveDesk[] = {"ActiveDesktop"}; +static const char strWinOldApp[] = {"WinOldApp"}; +static const char strAddRemoveProgs[] = {"AddRemoveProgs"}; + +/* key strings */ + +static const char strNoFileURL[] = {"NoFileUrl"}; +static const char strNoFolderOptions[] = {"NoFolderOptions"}; +static const char strNoChangeStartMenu[] = {"NoChangeStartMenu"}; +static const char strNoWindowsUpdate[] = {"NoWindowsUpdate"}; +static const char strNoSetActiveDesktop[] = {"NoSetActiveDesktop"}; +static const char strNoForgetSoftwareUpdate[] = {"NoForgetSoftwareUpdate"}; +static const char strNoMSAppLogo[] = {"NoMSAppLogo5ChannelNotify"}; +static const char strForceCopyACLW[] = {"ForceCopyACLWithFile"}; +static const char strNoResolveTrk[] = {"NoResolveTrack"}; +static const char strNoResolveSearch[] = {"NoResolveSearch"}; +static const char strNoEditComponent[] = {"NoEditingComponents"}; +static const char strNoMovingBand[] = {"NoMovingBands"}; +static const char strNoCloseDragDrop[] = {"NoCloseDragDropBands"}; +static const char strNoCloseComponent[] = {"NoClosingComponents"}; +static const char strNoDelComponent[] = {"NoDeletingComponents"}; +static const char strNoAddComponent[] = {"NoAddingComponents"}; +static const char strNoComponent[] = {"NoComponents"}; +static const char strNoChangeWallpaper[] = {"NoChangingWallpaper"}; +static const char strNoHTMLWallpaper[] = {"NoHTMLWallpaper"}; +static const char strNoCustomWebView[] = {"NoCustomizeWebView"}; +static const char strClassicShell[] = {"ClassicShell"}; +static const char strClearRecentDocs[] = {"ClearRecentDocsOnExit"}; +static const char strNoFavoritesMenu[] = {"NoFavoritesMenu"}; +static const char strNoActiveDesktopChanges[] = {"NoActiveDesktopChanges"}; +static const char strNoActiveDesktop[] = {"NoActiveDesktop"}; +static const char strNoRecentDocMenu[] = {"NoRecentDocsMenu"}; +static const char strNoRecentDocHistory[] = {"NoRecentDocsHistory"}; +static const char strNoInetIcon[] = {"NoInternetIcon"}; +static const char strNoSettingsWizard[] = {"NoSettingsWizards"}; +static const char strNoLogoff[] = {"NoLogoff"}; +static const char strNoNetConDis[] = {"NoNetConnectDisconnect"}; +static const char strNoViewContextMenu[] = {"NoViewContextMenu"}; +static const char strNoTrayContextMenu[] = {"NoTrayContextMenu"}; +static const char strNoWebMenu[] = {"NoWebMenu"}; +static const char strLnkResolveIgnoreLnkInfo[] = {"LinkResolveIgnoreLinkInfo"}; +static const char strNoCommonGroups[] = {"NoCommonGroups"}; +static const char strEnforceShlExtSecurity[] = {"EnforceShellExtensionSecurity"}; +static const char strNoRealMode[] = {"NoRealMode"}; +static const char strMyDocsOnNet[] = {"MyDocsOnNet"}; +static const char strNoStartMenuSubfolder[] = {"NoStartMenuSubFolders"}; +static const char strNoAddPrinters[] = {"NoAddPrinter"}; +static const char strNoDeletePrinters[] = {"NoDeletePrinter"}; +static const char strNoPrintTab[] = {"NoPrinterTabs"}; +static const char strRestrictRun[] = {"RestrictRun"}; +static const char strNoStartBanner[] = {"NoStartBanner"}; +static const char strNoNetworkNeighborhood[] = {"NoNetHood"}; +static const char strNoDriveTypeAtRun[] = {"NoDriveTypeAutoRun"}; +static const char strNoDrivesAutoRun[] = {"NoDriveAutoRun"}; +static const char strSeparateProcess[] = {"SeparateProcess"}; +static const char strNoDrives[] = {"NoDrives"}; +static const char strNoFind[] = {"NoFind"}; +static const char strNoDesktop[] = {"NoDesktop"}; +static const char strNoSetTaskBar[] = {"NoSetTaskbar"}; +static const char strNoSetFld[] = {"NoSetFolders"}; +static const char strNoFileMenu[] = {"NoFileMenu"}; +static const char strNoSaveSetting[] = {"NoSaveSettings"}; +static const char strNoClose[] = {"NoClose"}; +static const char strNoRun[] = {"NoRun"}; + +/* policy data array */ +static POLICYDATA sh32_policy_table[] = +{ + { + REST_NORUN, + strExplorer, + strNoRun, + SHELL_NO_POLICY + }, + { + REST_NOCLOSE, + strExplorer, + strNoClose, + SHELL_NO_POLICY + }, + { + REST_NOSAVESET, + strExplorer, + strNoSaveSetting, + SHELL_NO_POLICY + }, + { + REST_NOFILEMENU, + strExplorer, + strNoFileMenu, + SHELL_NO_POLICY + }, + { + REST_NOSETFOLDERS, + strExplorer, + strNoSetFld, + SHELL_NO_POLICY + }, + { + REST_NOSETTASKBAR, + strExplorer, + strNoSetTaskBar, + SHELL_NO_POLICY + }, + { + REST_NODESKTOP, + strExplorer, + strNoDesktop, + SHELL_NO_POLICY + }, + { + REST_NOFIND, + strExplorer, + strNoFind, + SHELL_NO_POLICY + }, + { + REST_NODRIVES, + strExplorer, + strNoDrives, + SHELL_NO_POLICY + }, + { + REST_NODRIVEAUTORUN, + strExplorer, + strNoDrivesAutoRun, + SHELL_NO_POLICY + }, + { + REST_NODRIVETYPEAUTORUN, + strExplorer, + strNoDriveTypeAtRun, + SHELL_NO_POLICY + }, + { + REST_NONETHOOD, + strExplorer, + strNoNetworkNeighborhood, + SHELL_NO_POLICY + }, + { + REST_STARTBANNER, + strExplorer, + strNoStartBanner, + SHELL_NO_POLICY + }, + { + REST_RESTRICTRUN, + strExplorer, + strRestrictRun, + SHELL_NO_POLICY + }, + { + REST_NOPRINTERTABS, + strExplorer, + strNoPrintTab, + SHELL_NO_POLICY + }, + { + REST_NOPRINTERDELETE, + strExplorer, + strNoDeletePrinters, + SHELL_NO_POLICY + }, + { + REST_NOPRINTERADD, + strExplorer, + strNoAddPrinters, + SHELL_NO_POLICY + }, + { + REST_NOSTARTMENUSUBFOLDERS, + strExplorer, + strNoStartMenuSubfolder, + SHELL_NO_POLICY + }, + { + REST_MYDOCSONNET, + strExplorer, + strMyDocsOnNet, + SHELL_NO_POLICY + }, + { + REST_NOEXITTODOS, + strWinOldApp, + strNoRealMode, + SHELL_NO_POLICY + }, + { + REST_ENFORCESHELLEXTSECURITY, + strExplorer, + strEnforceShlExtSecurity, + SHELL_NO_POLICY + }, + { + REST_LINKRESOLVEIGNORELINKINFO, + strExplorer, + strLnkResolveIgnoreLnkInfo, + SHELL_NO_POLICY + }, + { + REST_NOCOMMONGROUPS, + strExplorer, + strNoCommonGroups, + SHELL_NO_POLICY + }, + { + REST_SEPARATEDESKTOPPROCESS, + strExplorer, + strSeparateProcess, + SHELL_NO_POLICY + }, + { + REST_NOWEB, + strExplorer, + strNoWebMenu, + SHELL_NO_POLICY + }, + { + REST_NOTRAYCONTEXTMENU, + strExplorer, + strNoTrayContextMenu, + SHELL_NO_POLICY + }, + { + REST_NOVIEWCONTEXTMENU, + strExplorer, + strNoViewContextMenu, + SHELL_NO_POLICY + }, + { + REST_NONETCONNECTDISCONNECT, + strExplorer, + strNoNetConDis, + SHELL_NO_POLICY + }, + { + REST_STARTMENULOGOFF, + strExplorer, + strNoLogoff, + SHELL_NO_POLICY + }, + { + REST_NOSETTINGSASSIST, + strExplorer, + strNoSettingsWizard, + SHELL_NO_POLICY + }, + { + REST_NOINTERNETICON, + strExplorer, + strNoInetIcon, + SHELL_NO_POLICY + }, + { + REST_NORECENTDOCSHISTORY, + strExplorer, + strNoRecentDocHistory, + SHELL_NO_POLICY + }, + { + REST_NORECENTDOCSMENU, + strExplorer, + strNoRecentDocMenu, + SHELL_NO_POLICY + }, + { + REST_NOACTIVEDESKTOP, + strExplorer, + strNoActiveDesktop, + SHELL_NO_POLICY + }, + { + REST_NOACTIVEDESKTOPCHANGES, + strExplorer, + strNoActiveDesktopChanges, + SHELL_NO_POLICY + }, + { + REST_NOFAVORITESMENU, + strExplorer, + strNoFavoritesMenu, + SHELL_NO_POLICY + }, + { + REST_CLEARRECENTDOCSONEXIT, + strExplorer, + strClearRecentDocs, + SHELL_NO_POLICY + }, + { + REST_CLASSICSHELL, + strExplorer, + strClassicShell, + SHELL_NO_POLICY + }, + { + REST_NOCUSTOMIZEWEBVIEW, + strExplorer, + strNoCustomWebView, + SHELL_NO_POLICY + }, + { + REST_NOHTMLWALLPAPER, + strActiveDesk, + strNoHTMLWallpaper, + SHELL_NO_POLICY + }, + { + REST_NOCHANGINGWALLPAPER, + strActiveDesk, + strNoChangeWallpaper, + SHELL_NO_POLICY + }, + { + REST_NODESKCOMP, + strActiveDesk, + strNoComponent, + SHELL_NO_POLICY + }, + { + REST_NOADDDESKCOMP, + strActiveDesk, + strNoAddComponent, + SHELL_NO_POLICY + }, + { + REST_NODELDESKCOMP, + strActiveDesk, + strNoDelComponent, + SHELL_NO_POLICY + }, + { + REST_NOCLOSEDESKCOMP, + strActiveDesk, + strNoCloseComponent, + SHELL_NO_POLICY + }, + { + REST_NOCLOSE_DRAGDROPBAND, + strActiveDesk, + strNoCloseDragDrop, + SHELL_NO_POLICY + }, + { + REST_NOMOVINGBAND, + strActiveDesk, + strNoMovingBand, + SHELL_NO_POLICY + }, + { + REST_NOEDITDESKCOMP, + strActiveDesk, + strNoEditComponent, + SHELL_NO_POLICY + }, + { + REST_NORESOLVESEARCH, + strExplorer, + strNoResolveSearch, + SHELL_NO_POLICY + }, + { + REST_NORESOLVETRACK, + strExplorer, + strNoResolveTrk, + SHELL_NO_POLICY + }, + { + REST_FORCECOPYACLWITHFILE, + strExplorer, + strForceCopyACLW, + SHELL_NO_POLICY + }, +#if (NTDDI_VERSION < NTDDI_LONGHORN) + { + REST_NOLOGO3CHANNELNOTIFY, + strExplorer, + strNoMSAppLogo, + SHELL_NO_POLICY + }, +#endif + { + REST_NOFORGETSOFTWAREUPDATE, + strExplorer, + strNoForgetSoftwareUpdate, + SHELL_NO_POLICY + }, + { + REST_NOSETACTIVEDESKTOP, + strExplorer, + strNoSetActiveDesktop, + SHELL_NO_POLICY + }, + { + REST_NOUPDATEWINDOWS, + strExplorer, + strNoWindowsUpdate, + SHELL_NO_POLICY + }, + { + REST_NOCHANGESTARMENU, + strExplorer, + strNoChangeStartMenu, + SHELL_NO_POLICY + }, + { + REST_NOFOLDEROPTIONS, + strExplorer, + strNoFolderOptions, + SHELL_NO_POLICY + }, + { + REST_HASFINDCOMPUTERS, + strExplorer, + "FindComputers", + SHELL_NO_POLICY + }, + { + REST_INTELLIMENUS, + strExplorer, + "IntelliMenus", + SHELL_NO_POLICY + }, + { + REST_RUNDLGMEMCHECKBOX, + strExplorer, + "MemCheckBoxInRunDlg", + SHELL_NO_POLICY + }, + { + REST_ARP_ShowPostSetup, + strAddRemoveProgs, + "ShowPostSetup", + SHELL_NO_POLICY + }, + { + REST_NOCSC, + strExplorer, + "NoSyncAll", + SHELL_NO_POLICY + }, + { + REST_NOCONTROLPANEL, + strExplorer, + "NoControlPanel", + SHELL_NO_POLICY + }, + { + REST_ENUMWORKGROUP, + strExplorer, + "EnumWorkgroup", + SHELL_NO_POLICY + }, + { + REST_ARP_NOARP, + strAddRemoveProgs, + "NoAddRemovePrograms", + SHELL_NO_POLICY + }, + { + REST_ARP_NOREMOVEPAGE, + strAddRemoveProgs, + "NoRemovePage", + SHELL_NO_POLICY + }, + { + REST_ARP_NOADDPAGE, + strAddRemoveProgs, + "NoAddPage", + SHELL_NO_POLICY + }, + { + REST_ARP_NOWINSETUPPAGE, + strAddRemoveProgs, + "NoWindowsSetupPage", + SHELL_NO_POLICY + }, + { + REST_GREYMSIADS, + strExplorer, + "", + SHELL_NO_POLICY + }, + { + REST_NOCHANGEMAPPEDDRIVELABEL, + strExplorer, + "NoChangeMappedDriveLabel", + SHELL_NO_POLICY + }, + { + REST_NOCHANGEMAPPEDDRIVECOMMENT, + strExplorer, + "NoChangeMappedDriveComment", + SHELL_NO_POLICY + }, + { + REST_MaxRecentDocs, + strExplorer, + "MaxRecentDocs", + SHELL_NO_POLICY + }, + { + REST_NONETWORKCONNECTIONS, + strExplorer, + "NoNetworkConnections", + SHELL_NO_POLICY + }, + { + REST_FORCESTARTMENULOGOFF, + strExplorer, + "ForceStartMenuLogoff", + SHELL_NO_POLICY + }, + { + REST_NOWEBVIEW, + strExplorer, + "NoWebView", + SHELL_NO_POLICY + }, + { + REST_NOCUSTOMIZETHISFOLDER, + strExplorer, + "NoCustomizeThisFolder", + SHELL_NO_POLICY + }, + { + REST_NOENCRYPTION, + strExplorer, + "NoEncryption", + SHELL_NO_POLICY + }, + { + REST_ALLOWFRENCHENCRYPTION, + strExplorer, + "AllowFrenchEncryption", + SHELL_NO_POLICY + }, + { + REST_DONTSHOWSUPERHIDDEN, + strExplorer, + "DontShowSuperHidden", + SHELL_NO_POLICY + }, + { + REST_NOSHELLSEARCHBUTTON, + strExplorer, + "NoShellSearchButton", + SHELL_NO_POLICY + }, + { + REST_NOHARDWARETAB, + strExplorer, + "NoHardwareTab", + SHELL_NO_POLICY + }, + { + REST_NORUNASINSTALLPROMPT, + strExplorer, + "NoRunasInstallPrompt", + SHELL_NO_POLICY + }, + { + REST_PROMPTRUNASINSTALLNETPATH, + strExplorer, + "PromptRunasInstallNetPath", + SHELL_NO_POLICY + }, + { + REST_NOMANAGEMYCOMPUTERVERB, + strExplorer, + "NoManageMyComputerVerb", + SHELL_NO_POLICY + }, + { + REST_NORECENTDOCSNETHOOD, + strExplorer, + "NoRecentDocsNetHood", + SHELL_NO_POLICY + }, + { + REST_DISALLOWRUN, + strExplorer, + "DisallowRun", + SHELL_NO_POLICY + }, + { + REST_NOWELCOMESCREEN, + strExplorer, + "NoWelcomeScreen", + SHELL_NO_POLICY + }, + { + REST_RESTRICTCPL, + strExplorer, + "RestrictCpl", + SHELL_NO_POLICY + }, + { + REST_DISALLOWCPL, + strExplorer, + "DisallowCpl", + SHELL_NO_POLICY + }, + { + REST_NOSMBALLOONTIP, + strExplorer, + "NoSMBalloonTip", + SHELL_NO_POLICY + }, + { + REST_NOSMHELP, + strExplorer, + "NoSMHelp", + SHELL_NO_POLICY + }, + { + REST_NOWINKEYS, + strExplorer, + "NoWinKeys", + SHELL_NO_POLICY + }, + { + REST_NOENCRYPTONMOVE, + strExplorer, + "NoEncryptOnMove", + SHELL_NO_POLICY + }, + { + REST_NOLOCALMACHINERUN, + strExplorer, + "DisableLocalMachineRun", + SHELL_NO_POLICY + }, + { + REST_NOCURRENTUSERRUN, + strExplorer, + "DisableCurrentUserRun", + SHELL_NO_POLICY + }, + { + REST_NOLOCALMACHINERUNONCE, + strExplorer, + "DisableLocalMachineRunOnce", + SHELL_NO_POLICY + }, + { + REST_NOCURRENTUSERRUNONCE, + strExplorer, + "DisableCurrentUserRunOnce", + SHELL_NO_POLICY + }, + { + REST_FORCEACTIVEDESKTOPON, + strExplorer, + "ForceActiveDesktopOn", + SHELL_NO_POLICY + }, + { + REST_NOCOMPUTERSNEARME, + strExplorer, + "NoComputersNearMe", + SHELL_NO_POLICY + }, + { + REST_NOVIEWONDRIVE, + strExplorer, + "NoViewOnDrive", + SHELL_NO_POLICY + }, + { + REST_NONETCRAWL, + strExplorer, + "NoNetCrawl", + SHELL_NO_POLICY + }, + { + REST_NOSHAREDDOCUMENTS, + strExplorer, + "NoSharedDocs", + SHELL_NO_POLICY + }, + { + REST_NOSMMYDOCS, + strExplorer, + "NoSMMyDocs", + SHELL_NO_POLICY + }, +/* 0x4000050 - 0x4000060 */ + { + REST_NONLEGACYSHELLMODE, + strExplorer, + "NoneLegacyShellMode", + SHELL_NO_POLICY + }, + { + REST_STARTRUNNOHOMEPATH, + strExplorer, + "StartRunNoHOMEPATH", + SHELL_NO_POLICY + }, +/* 0x4000061 - 0x4000086 */ + { + REST_NODISCONNECT, + strExplorer, + "NoDisconnect", + SHELL_NO_POLICY + }, + { + REST_NOSECURITY, + strExplorer, + "NoNTSecurity", + SHELL_NO_POLICY + }, + { + REST_NOFILEASSOCIATE, + strExplorer, + "NoFileAssociate", + SHELL_NO_POLICY + }, + { + (RESTRICTIONS)0x50000024, + strExplorer, + strNoFileURL, + SHELL_NO_POLICY + }, + { + (RESTRICTIONS)0, + 0, + 0, + SHELL_NO_POLICY + } +}; + +/************************************************************************* + * SHRestricted [SHELL32.100] + * + * Get the value associated with a policy Id. + * + * PARAMS + * pol [I] Policy Id + * + * RETURNS + * The queried value for the policy. + * + * NOTES + * Exported by ordinal. + * This function caches the retrieved values to prevent unnecessary registry access, + * if SHInitRestricted() was previously called. + * + * REFERENCES + * a: MS System Policy Editor. + * b: 98Lite 2.0 (which uses many of these policy keys) http://www.98lite.net/ + * c: 'The Windows 95 Registry', by John Woram, 1996 MIS: Press + */ +DWORD WINAPI SHRestricted (RESTRICTIONS policy) +{ + char regstr[256]; + HKEY xhkey; + DWORD retval, datsize = 4; + LPPOLICYDATA p; + + TRACE("(%08x)\n", policy); + + /* scan to see if we know this policy ID */ + for (p = sh32_policy_table; p->policy; p++) + { + if (policy == p->policy) + { + break; + } + } + + if (p->policy == 0) + { + /* we don't know this policy, return 0 */ + TRACE("unknown policy: (%08x)\n", policy); + return 0; + } + + /* we have a known policy */ + + /* first check if this policy has been cached, return it if so */ + if (p->cache != SHELL_NO_POLICY) + { + return p->cache; + } + + lstrcpyA(regstr, strRegistryPolicyA); + lstrcatA(regstr, p->appstr); + + /* return 0 and don't set the cache if any registry errors occur */ + retval = 0; + if (RegOpenKeyA(HKEY_CURRENT_USER, regstr, &xhkey) == ERROR_SUCCESS) + { + if (RegQueryValueExA(xhkey, p->keystr, NULL, NULL, (LPBYTE)&retval, &datsize) == ERROR_SUCCESS) + { + p->cache = retval; + } + RegCloseKey(xhkey); + } + return retval; +} + +/************************************************************************* + * SHInitRestricted [SHELL32.244] + * + * Initialise the policy cache to speed up calls to SHRestricted(). + * + * PARAMS + * unused [I] Reserved. + * inpRegKey [I] Registry key to scan. + * + * RETURNS + * Success: -1. The policy cache is initialised. + * Failure: 0, if inpRegKey is any value other than NULL, "Policy", or + * "Software\Microsoft\Windows\CurrentVersion\Policies". + * + * NOTES + * Exported by ordinal. Introduced in Win98. + */ +BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey) +{ + TRACE("(%p, %p)\n", unused, inpRegKey); + + /* first check - if input is non-NULL and points to the secret + key string, then pass. Otherwise return 0. + */ + if (inpRegKey != NULL) + { + if (SHELL_OsIsUnicode()) + { + if (lstrcmpiW((LPCWSTR)inpRegKey, strRegistryPolicyW) && + lstrcmpiW((LPCWSTR)inpRegKey, strPolicyW)) + /* doesn't match, fail */ + return 0; + } + else + { + if (lstrcmpiA((LPCSTR)inpRegKey, strRegistryPolicyA) && + lstrcmpiA((LPCSTR)inpRegKey, strPolicyA)) + /* doesn't match, fail */ + return 0; + } + } + + return TRUE; +} diff --git a/reactos/dll/win32/shell32_new/shresdef.h b/reactos/dll/win32/shell32_new/shresdef.h new file mode 100644 index 00000000000..15c984812b2 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shresdef.h @@ -0,0 +1,462 @@ +/* + * Copyright 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_SHELL_RES_H +#define __WINE_SHELL_RES_H + +#define IDC_STATIC -1 + +/* Bitmap ID's */ +#define IDB_SHELL_ABOUT_LOGO_24BPP 131 + +/* + columntitles for the shellview +*/ +#define IDS_SHV_COLUMN1 7 +#define IDS_SHV_COLUMN2 8 +#define IDS_SHV_COLUMN3 9 +#define IDS_SHV_COLUMN4 10 +#define IDS_SHV_COLUMN5 11 +#define IDS_SHV_COLUMN6 12 +#define IDS_SHV_COLUMN7 13 +#define IDS_SHV_COLUMN8 14 +#define IDS_SHV_COLUMN9 15 +#define IDS_SHV_COLUMN10 16 +#define IDS_SHV_COLUMN11 17 +#define IDS_SHV_COLUMN_DELFROM 18 +#define IDS_SHV_COLUMN_DELDATE 19 + +#define IDS_DESKTOP 20 +#define IDS_MYCOMPUTER 21 + +#define IDS_SELECT 22 +#define IDS_OPEN 23 +#define IDS_VIEW_LARGE 24 +#define IDS_VIEW_SMALL 25 +#define IDS_VIEW_LIST 26 +#define IDS_VIEW_DETAILS 27 + +#define IDS_RESTART_TITLE 40 +#define IDS_RESTART_PROMPT 41 +#define IDS_SHUTDOWN_TITLE 42 +#define IDS_SHUTDOWN_PROMPT 43 + +#define IDS_PROGRAMS 45 +#define IDS_PERSONAL 46 +#define IDS_FAVORITES 47 +#define IDS_STARTUP 48 +#define IDS_RECENT 49 +#define IDS_SENDTO 50 +#define IDS_STARTMENU 51 +#define IDS_MYMUSIC 52 +#define IDS_MYVIDEO 53 +#define IDS_DESKTOPDIRECTORY 54 +#define IDS_NETHOOD 55 +#define IDS_TEMPLATES 56 +#define IDS_APPDATA 57 +#define IDS_PRINTHOOD 58 +#define IDS_LOCAL_APPDATA 59 +#define IDS_INTERNET_CACHE 60 +#define IDS_COOKIES 61 +#define IDS_HISTORY 62 +#define IDS_PROGRAM_FILES 63 +#define IDS_MYPICTURES 64 +#define IDS_PROGRAM_FILES_COMMON 65 +#define IDS_COMMON_DOCUMENTS 66 +#define IDS_ADMINTOOLS 67 +#define IDS_COMMON_MUSIC 68 +#define IDS_COMMON_PICTURES 69 +#define IDS_COMMON_VIDEO 70 +#define IDS_CDBURN_AREA 71 +#define IDS_DRIVE_FIXED 72 +#define IDS_DRIVE_CDROM 73 +#define IDS_DRIVE_NETWORK 74 +#define IDS_NETWORKPLACE 75 +#define IDS_FONTS 76 +#define IDS_PRINTERS 77 + +#define IDS_LOGOFF_TITLE 78 +#define IDS_LOGOFF_PROMPT 79 + +#define IDS_CREATEFOLDER_DENIED 128 +#define IDS_CREATEFOLDER_CAPTION 129 +#define IDS_DELETEITEM_CAPTION 130 +#define IDS_DELETEFOLDER_CAPTION 131 +#define IDS_DELETEITEM_TEXT 132 +#define IDS_DELETEMULTIPLE_TEXT 133 +#define IDS_OVERWRITEFILE_CAPTION 134 +#define IDS_OVERWRITEFILE_TEXT 135 +#define IDS_DELETESELECTED_TEXT 136 +#define IDS_TRASHFOLDER_TEXT 137 +#define IDS_TRASHITEM_TEXT 138 +#define IDS_TRASHMULTIPLE_TEXT 139 +#define IDS_CANTTRASH_TEXT 140 +#define IDS_OVERWRITEFOLDER_TEXT 141 +#define IDS_OPEN_WITH 142 +#define IDS_OPEN_WITH_CHOOSE 143 +#define IDS_SHELL_ABOUT_AUTHORS 144 +#define IDS_SHELL_ABOUT_BACK 145 +#define FCIDM_SHVIEW_NEW 146 +#define FCIDM_SHVIEW_VIEW 147 +#define IDS_CONTROLPANEL 148 +#define IDS_NEWFOLDER 149 +#define IDS_FOLDER_OPTIONS 150 +#define IDS_COLUMN_EXTENSION 151 +#define IDS_NO_EXTENSION 152 +#define IDS_RECYCLEBIN_LOCATION 153 +#define IDS_RECYCLEBIN_DISKSPACE 154 +#define IDS_OPEN_WITH_FILTER 155 +#define IDS_DIRECTORY 156 +#define IDS_VIRTUAL_DRIVER 157 +#define IDS_BAT_FILE 158 +#define IDS_CMD_FILE 159 +#define IDS_COM_FILE 160 +#define IDS_CPL_FILE 161 +#define IDS_CUR_FILE 162 +#define IDS_DLL_FILE 163 +#define IDS_DRV_FILE 164 +#define IDS_EXE_FILE 165 +#define IDS_FON_FILE 166 +#define IDS_TTF_FILE 167 +#define IDS_HLP_FILE 168 +#define IDS_INI_FILE 169 +#define IDS_LNK_FILE 170 +#define IDS_SYS_FILE 171 +#define IDS_EMPTY_BITBUCKET 172 +#define IDS_SHLEXEC_NOASSOC 173 +#define IDS_FILE_TYPES 174 +#define IDS_FILE_DETAILS 175 + +#define IDS_OPEN_VERB 300 +#define IDS_EXPLORE_VERB 301 +#define IDS_RUNAS_VERB 302 +#define IDS_EDIT_VERB 303 +#define IDS_FIND_VERB 304 +#define IDS_PRINT_VERB 305 +#define IDS_PLAY_VERB 306 +#define IDS_PREVIEW_VERB 307 +#define IDS_FILE_FOLDER 308 +#define IDS_CREATELINK 309 +#define IDS_INSTALLNEWFONT 310 +#define IDS_SHV_COLUMN_FONTTYPE 311 +#define IDS_SHV_COLUMN12 312 +#define IDS_SHV_COLUMN13 313 +#define IDS_SHV_COLUMN_WORKGROUP 314 +#define IDS_SHV_NETWORKLOCATION 315 +#define IDS_COPY 316 +#define IDS_DELETE 317 +#define IDS_PROPERTIES 318 +#define IDS_SHV_COLUMN_DOCUMENTS 319 +#define IDS_SHV_COLUMN_STATUS 320 +#define IDS_SHV_COLUMN_COMMENTS 321 +#define IDS_SHV_COLUMN_LOCATION 322 +#define IDS_SHV_COLUMN_MODEL 323 +#define IDS_CUT 324 +#define IDS_RESTORE 325 +#define IDS_DEFAULT_CLUSTER_SIZE 326 +#define IDS_ADMINISTRATIVETOOLS 327 +#define IDS_FORMATDRIVE 328 +#define IDS_RENAME 329 +#define IDS_INSERT 330 +#define IDS_DESCRIPTION 331 +#define IDS_COPY_OF 332 + +/* Note: this string is referenced from the registry */ +#define IDS_RECYCLEBIN_FOLDER_NAME 8964 + +#define IDD_ICON 0x4300 +#define IDD_MESSAGE 0x4301 + +/* these IDs are the same as on native */ +#define IDD_YESTOALL 0x3207 + +/* browse for folder dialog box */ +#define IDD_MAKENEWFOLDER 0x3746 +#define IDD_FOLDERTEXT 0x3745 +#define IDD_FOLDER 0x3744 +#define IDD_STATUS 0x3743 +#define IDD_TITLE 0x3742 +#define IDD_TREEVIEW 0x3741 +#define SHELL_EXTENDED_SHORTCUT_DLG 0x4000 +#define OPEN_WITH_PROGRAMM_DLG 0x4001 +#define IDD_SH_FILE_COPY 0x4002 + +/* ID's of the ShellAbout controls */ +// Part 1 - ID's identical to Windows Server 2003 SP1's shell32.dll +#define IDD_SHELL_ABOUT 0x3810 +#define IDC_SHELL_ABOUT_ICON 0x3009 +#define IDC_SHELL_ABOUT_APPNAME 0x3500 +#define IDC_SHELL_ABOUT_OTHERSTUFF 0x350D +#define IDC_SHELL_ABOUT_REG_USERNAME 0x3507 +#define IDC_SHELL_ABOUT_REG_ORGNAME 0x3508 +#define IDC_SHELL_ABOUT_PHYSMEM 0x3503 + +// Part 2 - ReactOS-specific ID's +#define IDD_SHELL_ABOUT_AUTHORS 0x4100 +#define IDC_SHELL_ABOUT_AUTHORS 0x4101 +#define IDC_SHELL_ABOUT_AUTHORS_LISTBOX 0x4102 +#define IDD_PICK_ICON_DIALOG 0x4120 +#define IDC_PICKICON_LIST 0x4121 +#define IDC_BUTTON_PATH 0x4122 +#define IDC_EDIT_PATH 0x4123 +#define IDS_PICK_ICON_TITLE 0x4124 +#define IDS_PICK_ICON_FILTER 0x4125 + +#define IDI_SHELL_DOCUMENT 1 +#define IDI_SHELL_RICH_TEXT 2 +#define IDI_SHELL_EXE 3 +#define IDI_SHELL_FOLDER 4 +#define IDI_SHELL_FOLDER_OPEN 5 +#define IDI_SHELL_5_12_FLOPPY 6 +#define IDI_SHELL_3_14_FLOPPY 7 +#define IDI_SHELL_FLOPPY 8 +#define IDI_SHELL_DRIVE 9 +#define IDI_SHELL_NETDRIVE 10 +#define IDI_SHELL_NETDRIVE2 11 +#define IDI_SHELL_CDROM 12 +#define IDI_SHELL_RAMDISK 13 +#define IDI_SHELL_ENTIRE_NETWORK 14 +#define IDI_SHELL_NETWORK 15 +#define IDI_SHELL_MY_COMPUTER 16 +#define IDI_SHELL_PRINTER 17 +#define IDI_SHELL_MY_NETWORK_PLACES 18 +#define IDI_SHELL_COMPUTERS_NEAR_ME 19 +#define IDI_SHELL_PROGRAMS_FOLDER 20 +#define IDI_SHELL_RECENT_DOCUMENTS 21 +#define IDI_SHELL_CONTROL_PANEL 22 +#define IDI_SHELL_SEARCH 23 +#define IDI_SHELL_HELP 24 +#define IDI_SHELL_RUN 25 +/* TODO: 26.ico, 27.ico */ +#define IDI_SHELL_SHUTDOWN 28 +#define IDI_SHELL_SHARE 29 +#define IDI_SHELL_SHORTCUT 30 +#define IDI_SHELL_FOLDER_OPEN_SMALL 31 /* ??? */ +#define IDI_SHELL_EMPTY_RECYCLE_BIN 32 +#define IDI_SHELL_FULL_RECYCLE_BIN 33 +/* TODO: 34.ico */ +#define IDI_SHELL_DESKTOP 35 +#define IDI_SHELL_CONTROL_PANEL2 36 +#define IDI_SHELL_PROGRAMS_FOLDER2 37 +#define IDI_SHELL_PRINTERS_FOLDER 38 +#define IDI_SHELL_FONTS_FOLDER 39 +#define IDI_SHELL_TSKBAR_STARTMENU 40 +#define IDI_SHELL_CD_MUSIC 41 +/* TODO: 42.ico, 43.ico */ +#define IDI_SHELL_FAVORITES 44 +#define IDI_SHELL_LOGOFF 45 +#define IDI_SHELL_EXPLORER 46 +#define IDI_SHELL_UPDATE 47 +#define IDI_SHELL_LOCKED 48 +#define IDI_SHELL_NOT_CONNECTED_HDD 54 +/* TODO: 133.ico */ +#define IDI_SHELL_FIND_IN_FILE 134 +#define IDI_SHELL_OPEN_WITH 135 +#define IDI_SHELL_CONTROL_PANEL3 137 +#define IDI_SHELL_PRINTER2 138 +/* TODO: 139.ico, 140.ico, 141.ico */ +#define IDI_SHELL_TRASH_FILE 142 +/* TODO: 143.ico, 144,ico, 145.ico, 146.ico, 147.ico, 148.ico */ +#define IDI_SHELL_INF_FILE 151 +#define IDI_SHELL_TEXT_FILE 152 +#define IDI_SHELL_BAT_FILE 153 +#define IDI_SHELL_SYSTEM_FILE 154 +#define IDI_SHELL_FONT_FILE 155 +#define IDI_SHELL_TT_FONT_FILE 156 +#define IDI_SHELL_FONT_FILE2 157 +#define IDI_SHELL_RUN2 160 +#define IDI_SHELL_CONFIRM_DELETE 161 +/* TODO: 165.ico, 166.ico, 167.ico, 168.ico, 169.ico, 170.ico, 171.ico */ +#define IDI_SHELL_NETWORK_FOLDER 172 +#define IDI_SHELL_FAVORITES2 173 +/* TODO: 174.ico, 175.ico, 176.ico, 177.ico, 178.ico, 179.ico, 180.ico, 181.ico */ +#define IDI_SHELL_EMPTY_RECYCLE_BIN1 191 +#define IDI_SHELL_FULL_RECYCLE_BIN1 192 +/* TODO: 193.ico, 194.ico, 196.ico, 197.ico, 198.ico, 199.ico, 200.ico */ +#define IDI_SHELL_FOLDER_OPTIONS 210 +#define IDI_SHELL_USERS2 220 +#define IDI_SHELL_TURN_OFF 221 +#define IDI_SHELL_DVD_ROM 222 +/* TODO: 223.ico */ +#define IDI_SHELL_MOVIE_FILE 224 +#define IDI_SHELL_MUSIC_FILE 225 +#define IDI_SHELL_PICTURE_FILE 226 +/* TODO: 227.ico */ +#define IDI_SHELL_CD_MUSIC2 228 +/* TODO: 229.ico, 230.ico, 231.ico, 232.ico */ +#define IDI_SHELL_FDD 233 +/* TODO: 234.ico */ +#define IDI_SHELL_MY_DOCUMENTS 235 +#define IDI_SHELL_MY_PICTURES 236 +#define IDI_SHELL_MY_MUSIC 237 +#define IDI_SHELL_MY_MOVIES 238 +/* TODO: 239.ico */ +#define IDI_SHELL_FULL_RECYCLE_BIN2 240 +/* TODO: 241.ico, 242.ico, 243.ico, 244.ico */ +#define IDI_SHELL_PRINTER3 245 +#define IDI_SHELL_ICON_246 246 +/* TODO: 247.ico */ +#define IDI_SHELL_CAMERA 248 +#define IDI_SHELL_SLIDE_SHOW 249 +#define IDI_SHELL_DISPLAY 250 +/* TODO: 251.ico */ +#define IDI_SHELL_PRINT_PICS 252 +/* TODO: 253.ico */ +#define IDI_SHELL_EMPTY_RECYCLE_BIN3 254 +#define IDI_SHELL_ICON_255 255 +/* TODO: 256.ico, 257.ico, 258.ico, 259.ico, 260.ico, 261.ico, 262.ico */ +#define IDI_SHELL_HELP1 263 +/* TODO: 264.ico */ +#define IDI_SHELL_SENDMAIL 265 +/* TODO: 266.ico, 267.ico */ +#define IDI_SHELL_ACCESSABILITY 268 +#define IDI_SHELL_USERS 269 +#define IDI_SHELL_SCREEN_COLORS 270 +#define IDI_SHELL_ADD_REM_PROGRAMS 271 +/* TODO: 272.ico, 273.ico, 274.ico, 275.ico, 276.ico */ +#define IDI_SHELL_TUNES 277 +/* TODO: 278.ico */ +#define IDI_SHELL_USER_ACCOUNTS 279 +/* TODO: 281.ico, 282.ico, 283.ico, 284.ico */ +#define IDI_SHELL_HELP_FILE 289 +#define IDI_SHELL_GO 290 +#define IDI_SHELL_DVD_DRIVE 291 +#define IDI_SHELL_CD_ADD_MUSIC 292 +#define IDI_SHELL_CD 293 +#define IDI_SHELL_CD_ROM 294 +#define IDI_SHELL_CDR 295 +#define IDI_SHELL_CDRW 296 +#define IDI_SHELL_DVD_RAM 297 +#define IDI_SHELL_DVDR_ROM 298 +#define IDI_SHELL_MP3_PLAYER 299 +/* TODO: 300.ico, 301.ico */ +#define IDI_SHELL_CD_ROM1 302 +/* TODO: 303.ico */ +#define IDI_SHELL_DVD_ROM1 304 +#define IDI_SHELL_FDD2 305 +/* TODO: 306.ico, 307.ico, 308.ico */ +#define IDI_SHELL_CAMERA1 309 +/* TODO: 310.ico, 311.ico, 312.ico, 313.ico, 314.ico */ +#define IDI_SHELL_SCANNER 315 +/* TODO: 316.ico */ +#define IDI_SHELL_CAMCORDER 317 +#define IDI_SHELL_DVDRW_ROM 318 +#define IDI_SHELL_NEW_FOLDER 319 +/* TODO: 320.ico, 321.ico */ +#define IDI_SHELL_FAVOTITES 322 +#define IDI_SHELL_SEARCH1 323 +#define IDI_SHELL_HELP2 324 +#define IDI_SHELL_LOGOFF1 325 +#define IDI_SHELL_PROGRAMS_FOLDER1 326 +#define IDI_SHELL_RECENT_DOCUMENTS1 327 +#define IDI_SHELL_RUN1 328 +#define IDI_SHELL_SHUTDOWN1 329 +#define IDI_SHELL_CONTROL_PANEL1 330 +/* TODO: 331.ico, 337.ico, 338.ico, 512.ico */ +#define IDI_SHELL_IDEA 1001 +/* TODO: 1002.ico, 1003.ico */ +#define IDI_SHELL_HELP_FILE1 1004 +/* TODO: 1005.ico, 1006.ico, 1007.ico, 1008.ico, 1009.ico, 1010.ico, 1011.ico */ +#define IDI_SHELL_SHUTDOWN2 8240 + +#define IDI_SHELL_DELETE1 16710 +#define IDI_SHELL_DELETE2 16715 +#define IDI_SHELL_DELETE3 16717 +#define IDI_SHELL_DELETE4 16718 +#define IDI_SHELL_DELETE5 16721 + +#define IDI_SHELL_ADMINTOOLS 1700 /* FIXME */ + +// Icons for Folder Options (ID's identical to Windows XP SP3) +#define IDI_SHELL_SHOW_COMMON_TASKS 182 +#define IDI_SHELL_CLASSIC_FOLDERS 183 +#define IDI_SHELL_OPEN_IN_SOME_WINDOW 184 +#define IDI_SHELL_OPEN_IN_NEW_WINDOW 185 +#define IDI_SHELL_SINGLE_CLICK_TO_OPEN 186 +#define IDI_SHELL_DOUBLE_CLICK_TO_OPEN 187 + +/* +AVI resources, windows shell32 has 14 of them: 150-152 and 160-170 +FIXME: Need to add them, but for now just let them use the same: searching.avi +(also to limit shell32's size) +*/ +#define IDR_AVI_SEARCH 150 +#define IDR_AVI_SEARCHING 151 +#define IDR_AVI_FINDCOMPUTER 152 +#define IDR_AVI_FILEMOVE 160 +#define IDR_AVI_FILECOPY 161 +#define IDR_AVI_FILENUKE 163 +#define IDR_AVI_FILEDELETE 164 + +#define FCIDM_SHVIEW_ARRANGE 0x7001 +#define FCIDM_SHVIEW_DELETE 0x7011 +#define FCIDM_SHVIEW_PROPERTIES 0x7013 +#define FCIDM_SHVIEW_CUT 0x7018 +#define FCIDM_SHVIEW_COPY 0x7019 +#define FCIDM_SHVIEW_INSERT 0x701A +#define FCIDM_SHVIEW_UNDO 0x701B +#define FCIDM_SHVIEW_INSERTLINK 0x701C +#define FCIDM_SHVIEW_SELECTALL 0x7021 +#define FCIDM_SHVIEW_INVERTSELECTION 0x7022 + +#define FCIDM_SHVIEW_BIGICON 0x7029 //FIXME +#define FCIDM_SHVIEW_SMALLICON 0x702A //FIXME +#define FCIDM_SHVIEW_LISTVIEW 0x702B //FIXME +#define FCIDM_SHVIEW_REPORTVIEW 0x702C //FIXME +/* 0x7030-0x703f are used by the shellbrowser */ +#define FCIDM_SHVIEW_AUTOARRANGE 0x7031 +#define FCIDM_SHVIEW_SNAPTOGRID 0x7032 + +#define FCIDM_SHVIEW_HELP 0x7041 +#define FCIDM_SHVIEW_RENAME 0x7050 +#define FCIDM_SHVIEW_CREATELINK 0x7051 +#define FCIDM_SHVIEW_NEWLINK 0x7052 +#define FCIDM_SHVIEW_NEWFOLDER 0x7053 + +#define FCIDM_SHVIEW_REFRESH 0x7100 /* FIXME */ +#define FCIDM_SHVIEW_EXPLORE 0x7101 /* FIXME */ +#define FCIDM_SHVIEW_OPEN 0x7102 /* FIXME */ + + +#define FCIDM_TB_UPFOLDER 0xA001 +#define FCIDM_TB_NEWFOLDER 0xA002 +#define FCIDM_TB_SMALLICON 0xA003 +#define FCIDM_TB_REPORTVIEW 0xA004 +#define FCIDM_TB_DESKTOP 0xA005 /* FIXME */ + +/* .rgs files */ +#define IDR_ADMINFOLDERSHORTCUT 128 +#define IDR_AUTOCOMPLETE 129 +#define IDR_CONTROLPANEL 130 +#define IDR_DRAGDROPHELPER 131 +#define IDR_FOLDEROPTIONS 132 +#define IDR_FOLDERSHORTCUT 133 +#define IDR_FONTSFOLDERSHORTCUT 134 +#define IDR_MENUBANDSITE 135 +#define IDR_MYCOMPUTER 136 +#define IDR_MYDOCUMENTS 137 +#define IDR_NETWORKPLACES 138 +#define IDR_NEWMENU 139 +#define IDR_PRINTERS 140 +#define IDR_RECYCLEBIN 141 +#define IDR_SHELLDESKTOP 142 +#define IDR_SHELLFSFOLDER 143 +#define IDR_SHELLLINK 144 +#define IDR_STARTMENU 145 + +#endif diff --git a/reactos/dll/win32/shell32_new/shv_def_cmenu.cpp b/reactos/dll/win32/shell32_new/shv_def_cmenu.cpp new file mode 100644 index 00000000000..0914b3cc4ae --- /dev/null +++ b/reactos/dll/win32/shell32_new/shv_def_cmenu.cpp @@ -0,0 +1,1743 @@ +/* + * PROJECT: shell32 + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/win32/shell32/shv_item_new.c + * PURPOSE: provides default context menu implementation + * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org) + */ + +/* +TODO: +1. In DoStaticShellExtensions, check for "Explore" and "Open" verbs, and for BrowserFlags or + ExplorerFlags under those entries. These flags indicate if we should browse to the new item + instead of attempting to open it. +2. The code in NotifyShellViewWindow to deliver commands to the view is broken. It is an excellent + example of the wrong way to do it. +*/ + +#include +#include +#include +#include +#include +#include "shelllink.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmenu); + +typedef struct _DynamicShellEntry_ +{ + UINT iIdCmdFirst; + UINT NumIds; + CLSID ClassID; + IContextMenu * CMenu; + struct _DynamicShellEntry_ * Next; +}DynamicShellEntry, *PDynamicShellEntry; + +typedef struct _StaticShellEntry_ +{ + LPWSTR szVerb; + LPWSTR szClass; + struct _StaticShellEntry_ * Next; +}StaticShellEntry, *PStaticShellEntry; + +WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls); + +class IDefaultContextMenuImpl : + public CComObjectRootEx, + public IContextMenu2 +{ +private: + DEFCONTEXTMENU dcm; + IDataObject * pDataObj; + DWORD bGroupPolicyActive; + PDynamicShellEntry dhead; /* first dynamic shell extension entry */ + UINT iIdSHEFirst; /* first used id */ + UINT iIdSHELast; /* last used id */ + PStaticShellEntry shead; /* first static shell extension entry */ + UINT iIdSCMFirst; /* first static used id */ + UINT iIdSCMLast; /* last static used id */ +public: + IDefaultContextMenuImpl(); + ~IDefaultContextMenuImpl(); + HRESULT WINAPI Initialize(const DEFCONTEXTMENU *pdcm); + void SH_AddStaticEntry(const WCHAR *szVerb, const WCHAR *szClass); + void SH_AddStaticEntryForKey(HKEY hKey, const WCHAR *szClass); + void SH_AddStaticEntryForFileClass(const WCHAR *szExt); + BOOL IsShellExtensionAlreadyLoaded(const CLSID *szClass); + HRESULT SH_LoadDynamicContextMenuHandler(HKEY hKey, const CLSID *szClass, BOOL bExternalInit); + UINT EnumerateDynamicContextHandlerForKey(HKEY hRootKey); + UINT InsertMenuItemsOfDynamicContextMenuExtension(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast); + UINT BuildBackgroundContextMenu(HMENU hMenu, UINT iIdCmdFirst, UINT iIdCmdLast, UINT uFlags); + UINT AddStaticContextMenusToMenu(HMENU hMenu, UINT indexMenu); + UINT BuildShellItemContextMenu(HMENU hMenu, UINT iIdCmdFirst, UINT iIdCmdLast, UINT uFlags); + HRESULT DoPaste(LPCMINVOKECOMMANDINFO lpcmi); + HRESULT DoOpenOrExplore(LPCMINVOKECOMMANDINFO lpcmi); + HRESULT DoCreateLink(LPCMINVOKECOMMANDINFO lpcmi); + HRESULT DoDelete(LPCMINVOKECOMMANDINFO lpcmi); + HRESULT DoCopyOrCut(LPCMINVOKECOMMANDINFO lpcmi, BOOL bCopy); + HRESULT DoRename(LPCMINVOKECOMMANDINFO lpcmi); + HRESULT DoProperties(LPCMINVOKECOMMANDINFO lpcmi); + HRESULT DoFormat(LPCMINVOKECOMMANDINFO lpcmi); + HRESULT DoDynamicShellExtensions(LPCMINVOKECOMMANDINFO lpcmi); + HRESULT DoStaticShellExtensions(LPCMINVOKECOMMANDINFO lpcmi); + + // IContextMenu + virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); + virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); + virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen); + + // IContextMenu2 + virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); + +BEGIN_COM_MAP(IDefaultContextMenuImpl) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2) +END_COM_MAP() +}; + +IDefaultContextMenuImpl::IDefaultContextMenuImpl() +{ + memset (&dcm, 0, sizeof(dcm)); + pDataObj = NULL; + bGroupPolicyActive = 0; + dhead = NULL; + iIdSHEFirst = 0; + iIdSHELast = 0; + shead = NULL; + iIdSCMFirst = 0; + iIdSCMLast = 0; +} + +IDefaultContextMenuImpl::~IDefaultContextMenuImpl() +{ + PDynamicShellEntry dEntry, dNext; + PStaticShellEntry sEntry, sNext; + + /* free dynamic shell extension entries */ + dEntry = dhead; + while (dEntry) + { + dNext = dEntry->Next; + dEntry->CMenu->Release(); + HeapFree(GetProcessHeap(), 0, dEntry); + dEntry = dNext; + } + /* free static shell extension entries */ + sEntry = shead; + while (sEntry) + { + sNext = sEntry->Next; + HeapFree(GetProcessHeap(), 0, sEntry->szClass); + HeapFree(GetProcessHeap(), 0, sEntry->szVerb); + HeapFree(GetProcessHeap(), 0, sEntry); + sEntry = sNext; + } +} + +HRESULT WINAPI IDefaultContextMenuImpl::Initialize(const DEFCONTEXTMENU *pdcm) +{ + IDataObject *newDataObj; + + TRACE("cidl %u\n", dcm.cidl); + if (SUCCEEDED(SHCreateDataObject(pdcm->pidlFolder, pdcm->cidl, pdcm->apidl, NULL, IID_IDataObject, (void**)&newDataObj))) + pDataObj = newDataObj; + CopyMemory(&dcm, pdcm, sizeof(DEFCONTEXTMENU)); + return S_OK; +} + +void +IDefaultContextMenuImpl::SH_AddStaticEntry(const WCHAR *szVerb, const WCHAR * szClass) +{ + PStaticShellEntry curEntry; + PStaticShellEntry lastEntry = NULL; + + curEntry = shead; + while(curEntry) + { + if (!wcsicmp(curEntry->szVerb, szVerb)) + { + /* entry already exists */ + return; + } + lastEntry = curEntry; + curEntry = curEntry->Next; + } + + TRACE("adding verb %s szClass %s\n", debugstr_w(szVerb), debugstr_w(szClass)); + + curEntry = (StaticShellEntry *)HeapAlloc(GetProcessHeap(), 0, sizeof(StaticShellEntry)); + if (curEntry) + { + curEntry->Next = NULL; + curEntry->szVerb = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(szVerb)+1) * sizeof(WCHAR)); + if (curEntry->szVerb) + wcscpy(curEntry->szVerb, szVerb); + curEntry->szClass = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(szClass)+1) * sizeof(WCHAR)); + if (curEntry->szClass) + wcscpy(curEntry->szClass, szClass); + } + + if (!wcsicmp(szVerb, L"open")) + { + /* open verb is always inserted in front */ + curEntry->Next = shead; + shead = curEntry; + return; + } + + + + if (lastEntry) + { + lastEntry->Next = curEntry; + } + else + { + shead = curEntry; + } +} + +void +IDefaultContextMenuImpl::SH_AddStaticEntryForKey(HKEY hKey, const WCHAR * szClass) +{ + LONG result; + DWORD dwIndex; + WCHAR szName[40]; + DWORD dwName; + + dwIndex = 0; + do + { + szName[0] = 0; + dwName = sizeof(szName) / sizeof(WCHAR); + result = RegEnumKeyExW(hKey, dwIndex, szName, &dwName, NULL, NULL, NULL, NULL); + szName[(sizeof(szName)/sizeof(WCHAR))-1] = 0; + if (result == ERROR_SUCCESS) + { + SH_AddStaticEntry(szName, szClass); + } + dwIndex++; + }while(result == ERROR_SUCCESS); +} + +void +IDefaultContextMenuImpl::SH_AddStaticEntryForFileClass(const WCHAR * szExt) +{ + WCHAR szBuffer[100]; + HKEY hKey; + LONG result; + DWORD dwBuffer; + UINT Length; + static WCHAR szShell[] = L"\\shell"; + static WCHAR szShellAssoc[] = L"SystemFileAssociations\\"; + + TRACE("SH_AddStaticEntryForFileClass entered with %s\n", debugstr_w(szExt)); + + Length = wcslen(szExt); + if (Length + (sizeof(szShell)/sizeof(WCHAR)) + 1 < sizeof(szBuffer)/sizeof(WCHAR)) + { + wcscpy(szBuffer, szExt); + wcscpy(&szBuffer[Length], szShell); + result = RegOpenKeyExW(HKEY_CLASSES_ROOT, szBuffer, 0, KEY_READ | KEY_QUERY_VALUE, &hKey); + if (result == ERROR_SUCCESS) + { + szBuffer[Length] = 0; + SH_AddStaticEntryForKey(hKey, szExt); + RegCloseKey(hKey); + } + } + + dwBuffer = sizeof(szBuffer); + result = RegGetValueW(HKEY_CLASSES_ROOT, szExt, NULL, RRF_RT_REG_SZ, NULL, (LPBYTE)szBuffer, &dwBuffer); + if (result == ERROR_SUCCESS) + { + Length = wcslen(szBuffer); + if (Length + (sizeof(szShell)/sizeof(WCHAR)) + 1 < sizeof(szBuffer)/sizeof(WCHAR)) + { + wcscpy(&szBuffer[Length], szShell); + TRACE("szBuffer %s\n", debugstr_w(szBuffer)); + + result = RegOpenKeyExW(HKEY_CLASSES_ROOT, szBuffer, 0, KEY_READ | KEY_QUERY_VALUE, &hKey); + if (result == ERROR_SUCCESS) + { + szBuffer[Length] = 0; + SH_AddStaticEntryForKey(hKey, szBuffer); + RegCloseKey(hKey); + } + } + } + + wcscpy(szBuffer, szShellAssoc); + dwBuffer = sizeof(szBuffer) - sizeof(szShellAssoc) - sizeof(WCHAR); + result = RegGetValueW(HKEY_CLASSES_ROOT, szExt, L"PerceivedType", RRF_RT_REG_SZ, NULL, (LPBYTE)&szBuffer[_countof(szShellAssoc) - 1], &dwBuffer); + if (result == ERROR_SUCCESS) + { + Length = wcslen(&szBuffer[_countof(szShellAssoc)]) + _countof(szShellAssoc); + wcscat(szBuffer, L"\\shell"); + TRACE("szBuffer %s\n", debugstr_w(szBuffer)); + + result = RegOpenKeyExW(HKEY_CLASSES_ROOT, szBuffer, 0, KEY_READ | KEY_QUERY_VALUE, &hKey); + if (result == ERROR_SUCCESS) + { + szBuffer[Length] = 0; + SH_AddStaticEntryForKey(hKey, szBuffer); + RegCloseKey(hKey); + } + } +} + +static +BOOL +HasClipboardData() +{ + BOOL ret = FALSE; + IDataObject * pda; + + if(SUCCEEDED(OleGetClipboard(&pda))) + { + STGMEDIUM medium; + FORMATETC formatetc; + + TRACE("pda=%p\n", pda); + + /* Set the FORMATETC structure*/ + InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_SHELLIDLIST), TYMED_HGLOBAL); + if(SUCCEEDED(pda->GetData(&formatetc,&medium))) + { + ret = TRUE; + ReleaseStgMedium(&medium); + } + + pda->Release(); + } + + return ret; +} + +VOID +DisablePasteOptions(HMENU hMenu) +{ + MENUITEMINFOW mii; + + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_STATE; + mii.fState = MFS_DISABLED; + + TRACE("result %d\n", SetMenuItemInfoW(hMenu, FCIDM_SHVIEW_INSERT, FALSE, &mii)); + TRACE("result %d\n", SetMenuItemInfoW(hMenu, FCIDM_SHVIEW_INSERTLINK, FALSE, &mii)); +} + +BOOL +IDefaultContextMenuImpl::IsShellExtensionAlreadyLoaded(const CLSID * szClass) +{ + PDynamicShellEntry curEntry = dhead; + + while(curEntry) + { + if (!memcmp(&curEntry->ClassID, szClass, sizeof(CLSID))) + return TRUE; + curEntry = curEntry->Next; + } + return FALSE; +} + + +HRESULT +IDefaultContextMenuImpl::SH_LoadDynamicContextMenuHandler(HKEY hKey, const CLSID * szClass, BOOL bExternalInit) +{ + HRESULT hr; + IContextMenu * cmobj; + IShellExtInit *shext; + PDynamicShellEntry curEntry; + //WCHAR szTemp[100]; + LPOLESTR pstr; + + StringFromCLSID(*szClass, &pstr); + + TRACE("SH_LoadDynamicContextMenuHandler entered with This %p hKey %p szClass %s bExternalInit %u\n",this, hKey, wine_dbgstr_guid(szClass), bExternalInit); + //swprintf(szTemp, L"This %p hKey %p szClass %s bExternalInit %u", this, hKey, pstr, bExternalInit); + //MessageBoxW(NULL, szTemp, NULL, MB_OK); + + if (IsShellExtensionAlreadyLoaded(szClass)) + return S_OK; + + hr = SHCoCreateInstance(NULL, szClass, NULL, IID_IContextMenu, (void**)&cmobj); + if (hr != S_OK) + { + TRACE("SHCoCreateInstance failed %x\n", GetLastError()); + return hr; + } + + if (bExternalInit) + { + hr = cmobj->QueryInterface(IID_IShellExtInit, (void**)&shext); + if (hr != S_OK) + { + TRACE("Failed to query for interface IID_IShellExtInit\n"); + cmobj->Release(); + return FALSE; + } + hr = shext->Initialize(NULL, pDataObj, hKey); + shext->Release(); + if (hr != S_OK) + { + TRACE("Failed to initialize shell extension error %x\n", hr); + cmobj->Release(); + return hr; + } + } + + curEntry = (DynamicShellEntry *)HeapAlloc(GetProcessHeap(), 0, sizeof(DynamicShellEntry)); + if(!curEntry) + { + cmobj->Release(); + return E_OUTOFMEMORY; + } + + curEntry->iIdCmdFirst = 0; + curEntry->Next = NULL; + curEntry->NumIds = 0; + curEntry->CMenu = cmobj; + memcpy(&curEntry->ClassID, szClass, sizeof(CLSID)); + + if (dhead) + { + PDynamicShellEntry pEntry = dhead; + + while(pEntry->Next) + { + pEntry = pEntry->Next; + } + + pEntry->Next = curEntry; + } + else + { + dhead = curEntry; + } + + return hr; +} + +UINT +IDefaultContextMenuImpl::EnumerateDynamicContextHandlerForKey(HKEY hRootKey) +{ + WCHAR szKey[MAX_PATH] = {0}; + WCHAR szName[MAX_PATH] = {0}; + DWORD dwIndex, dwName; + LONG res; + HRESULT hResult; + UINT index; + CLSID clsid; + HKEY hKey; + + static const WCHAR szShellEx[] = { 's','h','e','l','l','e','x','\\','C','o','n','t','e','x','t','M','e','n','u','H','a','n','d','l','e','r','s',0 }; + + if (RegOpenKeyExW(hRootKey, szShellEx, 0, KEY_READ, &hKey) != ERROR_SUCCESS) + { + TRACE("RegOpenKeyExW failed for key %s\n", debugstr_w(szKey)); + return 0; + } + + dwIndex = 0; + index = 0; + do + { + dwName = MAX_PATH; + res = RegEnumKeyExW(hKey, dwIndex, szName, &dwName, NULL, NULL, NULL, NULL); + if (res == ERROR_SUCCESS) + { + hResult = CLSIDFromString(szName, &clsid); + if (hResult != S_OK) + { + dwName = MAX_PATH; + if (RegGetValueW(hKey, szName, NULL, RRF_RT_REG_SZ, NULL, szKey, &dwName) == ERROR_SUCCESS) + { + hResult = CLSIDFromString(szKey, &clsid); + } + } + if (SUCCEEDED(hResult)) + { + if (bGroupPolicyActive) + { + if (RegGetValueW(HKEY_LOCAL_MACHINE, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", + szKey, + RRF_RT_REG_SZ, + NULL, + NULL, + &dwName) == ERROR_SUCCESS) + { + SH_LoadDynamicContextMenuHandler(hKey, &clsid, TRUE); + } + } + else + { + SH_LoadDynamicContextMenuHandler(hKey, &clsid, TRUE); + } + } + } + dwIndex++; + }while(res == ERROR_SUCCESS); + + RegCloseKey(hKey); + return index; +} + +UINT +IDefaultContextMenuImpl::InsertMenuItemsOfDynamicContextMenuExtension(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast) +{ + PDynamicShellEntry curEntry; + HRESULT hResult; + + if (!dhead) + { + iIdSHEFirst = 0; + iIdSHELast = 0; + return indexMenu; + } + + curEntry = dhead; + idCmdFirst = 0x5000; + idCmdLast = 0x6000; + iIdSHEFirst = idCmdFirst; + do + { + hResult = curEntry->CMenu->QueryContextMenu(hMenu, indexMenu++, idCmdFirst, idCmdLast, CMF_NORMAL); + if (SUCCEEDED(hResult)) + { + curEntry->iIdCmdFirst = idCmdFirst; + curEntry->NumIds = LOWORD(hResult); + indexMenu += curEntry->NumIds; + idCmdFirst += curEntry->NumIds + 0x10; + } + TRACE("curEntry %p hresult %x contextmenu %p cmdfirst %x num ids %x\n", curEntry, hResult, curEntry->CMenu, curEntry->iIdCmdFirst, curEntry->NumIds); + curEntry = curEntry->Next; + }while(curEntry); + + iIdSHELast = idCmdFirst; + TRACE("SH_LoadContextMenuHandlers first %x last %x\n", iIdSHEFirst, iIdSHELast); + return indexMenu; +} + +UINT +IDefaultContextMenuImpl::BuildBackgroundContextMenu( + HMENU hMenu, + UINT iIdCmdFirst, + UINT iIdCmdLast, + UINT uFlags) +{ + MENUITEMINFOW mii; + WCHAR szBuffer[MAX_PATH]; + UINT indexMenu = 0; + HMENU hSubMenu; + HKEY hKey; + + ZeroMemory(&mii, sizeof(mii)); + + TRACE("BuildBackgroundContextMenu entered\n"); + + if (!_ILIsDesktop(dcm.pidlFolder)) + { + /* view option is only available in browsing mode */ + hSubMenu = LoadMenuA(shell32_hInstance, "MENU_001"); + if (hSubMenu) + { + szBuffer[0] = 0; + LoadStringW(shell32_hInstance, FCIDM_SHVIEW_VIEW, szBuffer, MAX_PATH); + szBuffer[MAX_PATH-1] = 0; + + TRACE("szBuffer %s\n", debugstr_w(szBuffer)); + + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID; + mii.fType = MFT_STRING; + mii.wID = iIdCmdFirst++; + mii.dwTypeData = szBuffer; + mii.cch = wcslen( mii.dwTypeData ); + mii.fState = MFS_ENABLED; + mii.hSubMenu = hSubMenu; + InsertMenuItemW(hMenu, indexMenu++, TRUE, &mii); + DestroyMenu(hSubMenu); + } + } + hSubMenu = LoadMenuW(shell32_hInstance, L"MENU_002"); + if (hSubMenu) + { + /* merge general background context menu in */ + iIdCmdFirst = Shell_MergeMenus(hMenu, GetSubMenu(hSubMenu, 0), indexMenu, 0, 0xFFFF, MM_DONTREMOVESEPS | MM_SUBMENUSHAVEIDS) + 1; + DestroyMenu(hSubMenu); + } + + if (!HasClipboardData()) + { + TRACE("disabling paste options\n"); + DisablePasteOptions(hMenu); + } + /* load extensions from HKCR\* key */ + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, + L"*", + 0, + KEY_READ, + &hKey) == ERROR_SUCCESS) + { + EnumerateDynamicContextHandlerForKey(hKey); + RegCloseKey(hKey); + } + + /* load create new shell extension */ + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, + L"CLSID\\{D969A300-E7FF-11d0-A93B-00A0C90F2719}", + 0, + KEY_READ, + &hKey) == ERROR_SUCCESS) + { + SH_LoadDynamicContextMenuHandler(hKey, &CLSID_NewMenu, TRUE); + RegCloseKey(hKey); + } + + if (InsertMenuItemsOfDynamicContextMenuExtension(hMenu, GetMenuItemCount(hMenu)-1, iIdCmdFirst, iIdCmdLast)) + { + /* seperate dynamic context menu items */ + _InsertMenuItemW(hMenu, GetMenuItemCount(hMenu)-1, TRUE, -1, MFT_SEPARATOR, NULL, MFS_ENABLED); + } + + return iIdCmdLast; +} + +UINT +IDefaultContextMenuImpl::AddStaticContextMenusToMenu( + HMENU hMenu, + UINT indexMenu) +{ + MENUITEMINFOW mii; + UINT idResource; + PStaticShellEntry curEntry; + WCHAR szVerb[40]; + WCHAR szTemp[50]; + DWORD dwSize; + UINT fState; + UINT Length; + + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA; + mii.fType = MFT_STRING; + mii.fState = MFS_ENABLED; + mii.wID = 0x4000; + iIdSCMFirst = mii.wID; + + curEntry = shead; + + while(curEntry) + { + fState = MFS_ENABLED; + if (!wcsicmp(curEntry->szVerb, L"open")) + { + fState |= MFS_DEFAULT; + idResource = IDS_OPEN_VERB; + } + else if (!wcsicmp(curEntry->szVerb, L"explore")) + idResource = IDS_EXPLORE_VERB; + else if (!wcsicmp(curEntry->szVerb, L"runas")) + idResource = IDS_RUNAS_VERB; + else if (!wcsicmp(curEntry->szVerb, L"edit")) + idResource = IDS_EDIT_VERB; + else if (!wcsicmp(curEntry->szVerb, L"find")) + idResource = IDS_FIND_VERB; + else if (!wcsicmp(curEntry->szVerb, L"print")) + idResource = IDS_PRINT_VERB; + else if (!wcsicmp(curEntry->szVerb, L"play")) + idResource = IDS_PLAY_VERB; + else if (!wcsicmp(curEntry->szVerb, L"preview")) + idResource = IDS_PREVIEW_VERB; + else if (!wcsicmp(curEntry->szVerb, L"printto")) + { + curEntry = curEntry->Next; + continue; + } + else + idResource = 0; + + if (idResource > 0) + { + if (LoadStringW(shell32_hInstance, idResource, szVerb, sizeof(szVerb)/sizeof(WCHAR))) + { + /* use translated verb */ + szVerb[(sizeof(szVerb)/sizeof(WCHAR))-1] = L'\0'; + mii.dwTypeData = szVerb; + } + } + else + { + Length = wcslen(curEntry->szClass) + wcslen(curEntry->szVerb) + 8; + if (Length < sizeof(szTemp)/sizeof(WCHAR)) + { + wcscpy(szTemp, curEntry->szClass); + wcscat(szTemp, L"\\shell\\"); + wcscat(szTemp, curEntry->szVerb); + dwSize = sizeof(szVerb); + + if (RegGetValueW(HKEY_CLASSES_ROOT, szTemp, NULL, RRF_RT_REG_SZ, NULL, szVerb, &dwSize) == ERROR_SUCCESS) + { + /* use description for the menu entry */ + mii.dwTypeData = szVerb; + } + else + { + /* use verb for the menu entry */ + mii.dwTypeData = curEntry->szVerb; + } + } + + } + + mii.cch = wcslen(mii.dwTypeData); + mii.fState = fState; + InsertMenuItemW(hMenu, indexMenu++, TRUE, &mii); + + mii.wID++; + curEntry = curEntry->Next; + } + iIdSCMLast = mii.wID - 1; + return indexMenu; +} + +void WINAPI _InsertMenuItemW ( + HMENU hmenu, + UINT indexMenu, + BOOL fByPosition, + UINT wID, + UINT fType, + LPCWSTR dwTypeData, + UINT fState) +{ + MENUITEMINFOW mii; + WCHAR szText[100]; + + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + if (fType == MFT_SEPARATOR) + { + mii.fMask = MIIM_ID | MIIM_TYPE; + } + else if (fType == MFT_STRING) + { + mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE; + if ((ULONG_PTR)HIWORD((ULONG_PTR)dwTypeData) == 0) + { + if (LoadStringW(shell32_hInstance, LOWORD((ULONG_PTR)dwTypeData), szText, sizeof(szText)/sizeof(WCHAR))) + { + szText[(sizeof(szText)/sizeof(WCHAR))-1] = 0; + mii.dwTypeData = szText; + } + else + { + TRACE("failed to load string %p\n", dwTypeData); + return; + } + } + else + { + mii.dwTypeData = (LPWSTR) dwTypeData; + } + mii.fState = fState; + } + + mii.wID = wID; + mii.fType = fType; + InsertMenuItemW( hmenu, indexMenu, fByPosition, &mii); +} + +UINT +IDefaultContextMenuImpl::BuildShellItemContextMenu( + HMENU hMenu, + UINT iIdCmdFirst, + UINT iIdCmdLast, + UINT uFlags) +{ + WCHAR szPath[MAX_PATH]; + WCHAR szTemp[40]; + HKEY hKey; + UINT indexMenu; + SFGAOF rfg; + HRESULT hr; + BOOL bAddSep; + GUID * guid; + BOOL bClipboardData; + STRRET strFile; + LPWSTR pOffset; + DWORD dwSize; + + TRACE("BuildShellItemContextMenu entered\n"); + + if (dcm.psf->GetDisplayNameOf(dcm.apidl[0], SHGDN_FORPARSING, &strFile) == S_OK) + { + if (StrRetToBufW(&strFile, dcm.apidl[0], szPath, MAX_PATH) == S_OK) + { + pOffset = wcsrchr(szPath, L'.'); + if (pOffset) + { + /* enumerate dynamic/static for a given file class */ + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, pOffset, 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + /* add static verbs */ + SH_AddStaticEntryForFileClass(pOffset); + /* load dynamic extensions from file extension key */ + EnumerateDynamicContextHandlerForKey(hKey); + RegCloseKey(hKey); + } + dwSize = sizeof(szTemp); + if (RegGetValueW(HKEY_CLASSES_ROOT, pOffset, NULL, RRF_RT_REG_SZ, NULL, szTemp, &dwSize) == ERROR_SUCCESS) + { + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szTemp, 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + /* add static verbs from progid key */ + SH_AddStaticEntryForFileClass(szTemp); + /* load dynamic extensions from progid key */ + EnumerateDynamicContextHandlerForKey(hKey); + RegCloseKey(hKey); + } + } + } + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"*", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + /* load default extensions */ + EnumerateDynamicContextHandlerForKey(hKey); + RegCloseKey(hKey); + } + } + } + + guid = _ILGetGUIDPointer(dcm.apidl[0]); + if (guid) + { + LPOLESTR pwszCLSID; + WCHAR buffer[60]; + + wcscpy(buffer, L"CLSID\\"); + hr = StringFromCLSID(*guid, &pwszCLSID); + if (hr == S_OK) + { + wcscpy(&buffer[6], pwszCLSID); + TRACE("buffer %s\n", debugstr_w(buffer)); + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, buffer, 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + EnumerateDynamicContextHandlerForKey(hKey); + SH_AddStaticEntryForFileClass(buffer); + RegCloseKey(hKey); + } + CoTaskMemFree(pwszCLSID); + } + } + + + if (_ILIsDrive(dcm.apidl[0])) + { + SH_AddStaticEntryForFileClass(L"Drive"); + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Drive", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + EnumerateDynamicContextHandlerForKey(hKey); + RegCloseKey(hKey); + } + + } + + /* add static actions */ + rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM | SFGAO_FOLDER; + hr = dcm.psf->GetAttributesOf(dcm.cidl, dcm.apidl, &rfg); + if (!SUCCEEDED(hr)) + rfg = 0; + + if (rfg & SFGAO_FOLDER) + { + /* add the default verbs open / explore */ + SH_AddStaticEntryForFileClass(L"Folder"); + SH_AddStaticEntryForFileClass(L"Directory"); + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Folder", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + EnumerateDynamicContextHandlerForKey(hKey); + RegCloseKey(hKey); + } + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Directory", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + EnumerateDynamicContextHandlerForKey(hKey); + RegCloseKey(hKey); + } + } + + + if (rfg & SFGAO_FILESYSTEM) + { + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"AllFilesystemObjects", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + /* sendto service is registered here */ + EnumerateDynamicContextHandlerForKey(hKey); + RegCloseKey(hKey); + } + } + + /* add static context menu handlers */ + indexMenu = AddStaticContextMenusToMenu(hMenu, 0); + /* now process dynamic context menu handlers */ + indexMenu = InsertMenuItemsOfDynamicContextMenuExtension(hMenu, indexMenu, iIdCmdFirst, iIdCmdLast); + TRACE("indexMenu %d\n", indexMenu); + + if (_ILIsDrive(dcm.apidl[0])) + { + /* The 'Format' option must be always available, + * thus it is not registered as a static shell extension + */ + _InsertMenuItemW(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); + _InsertMenuItemW(hMenu, indexMenu++, TRUE, 0x7ABC, MFT_STRING, MAKEINTRESOURCEW(IDS_FORMATDRIVE), MFS_ENABLED); + bAddSep = TRUE; + } + + bClipboardData = (HasClipboardData() && (rfg & SFGAO_FILESYSTEM)); + if (rfg & (SFGAO_CANCOPY | SFGAO_CANMOVE) || bClipboardData) + { + _InsertMenuItemW(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); + if (rfg & SFGAO_CANMOVE) + _InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_CUT, MFT_STRING, MAKEINTRESOURCEW(IDS_CUT), MFS_ENABLED); + if (rfg & SFGAO_CANCOPY) + _InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_COPY, MFT_STRING, MAKEINTRESOURCEW(IDS_COPY), MFS_ENABLED); + if (bClipboardData) + _InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_INSERT, MFT_STRING, MAKEINTRESOURCEW(IDS_INSERT), MFS_ENABLED); + + bAddSep = TRUE; + } + + + if (rfg & SFGAO_CANLINK) + { + bAddSep = FALSE; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); + _InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_CREATELINK, MFT_STRING, MAKEINTRESOURCEW(IDS_CREATELINK), MFS_ENABLED); + } + + + if (rfg & SFGAO_CANDELETE) + { + if (bAddSep) + { + bAddSep = FALSE; + _InsertMenuItemW(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); + } + _InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_DELETE, MFT_STRING, MAKEINTRESOURCEW(IDS_DELETE), MFS_ENABLED); + } + + if (rfg & SFGAO_CANRENAME) + { + if (bAddSep) + { + _InsertMenuItemW(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); + } + _InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_RENAME, MFT_STRING, MAKEINTRESOURCEW(IDS_RENAME), MFS_ENABLED); + bAddSep = TRUE; + } + + if (rfg & SFGAO_HASPROPSHEET) + { + _InsertMenuItemW(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); + _InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_PROPERTIES, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), MFS_ENABLED); + } + + return iIdCmdLast; +} + +HRESULT +WINAPI +IDefaultContextMenuImpl::QueryContextMenu( + HMENU hmenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + if (dcm.cidl) + { + idCmdFirst = BuildShellItemContextMenu(hmenu, idCmdFirst, idCmdLast, uFlags); + } + else + { + idCmdFirst = BuildBackgroundContextMenu(hmenu, idCmdFirst, idCmdLast, uFlags); + } + + return S_OK; +} + +static +HRESULT +NotifyShellViewWindow(LPCMINVOKECOMMANDINFO lpcmi, BOOL bRefresh) +{ + LPSHELLBROWSER lpSB; + LPSHELLVIEW lpSV = NULL; + HWND hwndSV = NULL; + + if((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0))) + { + if(SUCCEEDED(lpSB->QueryActiveShellView(&lpSV))) + { + lpSV->GetWindow(&hwndSV); + } + } + + if (LOWORD(lpcmi->lpVerb) == FCIDM_SHVIEW_REFRESH || bRefresh) + { + if (lpSV) + lpSV->Refresh(); + + return S_OK; + } + + SendMessageW(hwndSV, WM_COMMAND, MAKEWPARAM(LOWORD(lpcmi->lpVerb), 0), 0); + + return S_OK; +} + +HRESULT +IDefaultContextMenuImpl::DoPaste( + LPCMINVOKECOMMANDINFO lpcmi) +{ + IDataObject * pda; + STGMEDIUM medium; + FORMATETC formatetc; + LPITEMIDLIST * apidl; + LPITEMIDLIST pidl; + IShellFolder *psfFrom = NULL, *psfDesktop, *psfTarget = NULL; + LPIDA lpcida; + ISFHelper *psfhlpdst, *psfhlpsrc; + HRESULT hr; + + if (OleGetClipboard(&pda) != S_OK) + return E_FAIL; + + InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_SHELLIDLIST), TYMED_HGLOBAL); + hr = pda->GetData(&formatetc,&medium); + + if (FAILED(hr)) + { + pda->Release(); + return E_FAIL; + } + + /* lock the handle */ + lpcida = (LPIDA)GlobalLock(medium.hGlobal); + if (!lpcida) + { + ReleaseStgMedium(&medium); + pda->Release(); + return E_FAIL; + } + + /* convert the data into pidl */ + apidl = _ILCopyCidaToaPidl(&pidl, lpcida); + + if (!apidl) + return E_FAIL; + + if (FAILED(SHGetDesktopFolder(&psfDesktop))) + { + SHFree(pidl); + _ILFreeaPidl(apidl, lpcida->cidl); + ReleaseStgMedium(&medium); + pda->Release(); + return E_FAIL; + } + + if (_ILIsDesktop(pidl)) + { + /* use desktop shellfolder */ + psfFrom = psfDesktop; + } + else if (FAILED(psfDesktop->BindToObject(pidl, NULL, IID_IShellFolder, (LPVOID*)&psfFrom))) + { + ERR("no IShellFolder\n"); + + psfDesktop->Release(); + SHFree(pidl); + _ILFreeaPidl(apidl, lpcida->cidl); + ReleaseStgMedium(&medium); + pda->Release(); + + return E_FAIL; + } + + if (dcm.cidl) + { + psfDesktop->Release(); + hr = dcm.psf->BindToObject(dcm.apidl[0], NULL, IID_IShellFolder, (LPVOID*)&psfTarget); + } + else + { + IPersistFolder2 *ppf2 = NULL; + LPITEMIDLIST pidl; + + /* cidl is zero due to explorer view */ + hr = dcm.psf->QueryInterface (IID_IPersistFolder2, (LPVOID *) &ppf2); + if (SUCCEEDED(hr)) + { + hr = ppf2->GetCurFolder (&pidl); + ppf2->Release(); + if (SUCCEEDED(hr)) + { + if (_ILIsDesktop(pidl)) + { + /* use desktop shellfolder */ + psfTarget = psfDesktop; + } + else + { + /* retrieve target desktop folder */ + hr = psfDesktop->BindToObject(pidl, NULL, IID_IShellFolder, (LPVOID*)&psfTarget); + } + TRACE("psfTarget %x %p, Desktop %u\n", hr, psfTarget, _ILIsDesktop(pidl)); + ILFree(pidl); + } + } + } + + if (FAILED(hr)) + { + ERR("no IShellFolder\n"); + + psfFrom->Release(); + SHFree(pidl); + _ILFreeaPidl(apidl, lpcida->cidl); + ReleaseStgMedium(&medium); + pda->Release(); + + return E_FAIL; + } + + + /* get source and destination shellfolder */ + if (FAILED(psfTarget->QueryInterface(IID_ISFHelper, (LPVOID*)&psfhlpdst))) + { + ERR("no IID_ISFHelper for destination\n"); + + psfFrom->Release(); + psfTarget->Release(); + SHFree(pidl); + _ILFreeaPidl(apidl, lpcida->cidl); + ReleaseStgMedium(&medium); + pda->Release(); + + return E_FAIL; + } + + if (FAILED(psfFrom->QueryInterface(IID_ISFHelper, (LPVOID*)&psfhlpsrc))) + { + ERR("no IID_ISFHelper for source\n"); + + psfhlpdst->Release(); + psfFrom->Release(); + psfTarget->Release(); + SHFree(pidl); + _ILFreeaPidl(apidl, lpcida->cidl); + ReleaseStgMedium(&medium); + pda->Release(); + return E_FAIL; + } + + /* FIXXME + * do we want to perform a copy or move ??? + */ + hr = psfhlpdst->CopyItems(psfFrom, lpcida->cidl, (LPCITEMIDLIST*)apidl); + + psfhlpdst->Release(); + psfhlpsrc->Release(); + psfFrom->Release(); + psfTarget->Release(); + SHFree(pidl); + _ILFreeaPidl(apidl, lpcida->cidl); + ReleaseStgMedium(&medium); + pda->Release(); + TRACE("CP result %x\n",hr); + return S_OK; +} + +HRESULT +IDefaultContextMenuImpl::DoOpenOrExplore( + LPCMINVOKECOMMANDINFO lpcmi) +{ + + + return E_FAIL; +} + +BOOL +GetUniqueFileName(LPWSTR szBasePath, LPWSTR szExt, LPWSTR szTarget, BOOL bShortcut) +{ + UINT RetryCount = 0, Length; + WCHAR szLnk[40]; + HANDLE hFile; + + if (!bShortcut) + { + Length = LoadStringW(shell32_hInstance, IDS_LNK_FILE, szLnk, sizeof(szLnk)/sizeof(WCHAR)); + } + + do + { + if (!bShortcut) + { + if (RetryCount) + swprintf(szTarget, L"%s%s(%u).%s", szLnk, szBasePath, RetryCount, szExt); + else + swprintf(szTarget, L"%s%s.%s", szLnk, szBasePath, szExt); + } + else + { + if (RetryCount) + swprintf(szTarget, L"%s(%u).%s", szBasePath, RetryCount, szExt); + else + swprintf(szTarget, L"%s.%s", szBasePath, szExt); + } + + hFile = CreateFileW(szTarget, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile != INVALID_HANDLE_VALUE) + { + CloseHandle(hFile); + return TRUE; + } + + }while(RetryCount++ < 100); + + return FALSE; + +} + +HRESULT +IDefaultContextMenuImpl::DoCreateLink( + LPCMINVOKECOMMANDINFO lpcmi) +{ + WCHAR szPath[MAX_PATH]; + WCHAR szTarget[MAX_PATH] = {0}; + WCHAR szDirPath[MAX_PATH]; + LPWSTR pszFile; + STRRET strFile; + LPWSTR pszExt; + HRESULT hr; + IShellLinkW * nLink; + IPersistFile * ipf; + static WCHAR szLnk[] = L"lnk"; + + if (dcm.psf->GetDisplayNameOf(dcm.apidl[0], SHGDN_FORPARSING, &strFile) != S_OK) + { + ERR("IShellFolder_GetDisplayNameOf failed for apidl\n"); + return E_FAIL; + } + + if (StrRetToBufW(&strFile, dcm.apidl[0], szPath, MAX_PATH) != S_OK) + return E_FAIL; + + pszExt = wcsrchr(szPath, L'.'); + + if (pszExt && !wcsicmp(pszExt + 1, szLnk)) + { + if (!GetUniqueFileName(szPath, pszExt + 1, szTarget, TRUE)) + return E_FAIL; + + hr = IShellLink_ConstructFromFile(NULL, IID_IPersistFile, dcm.apidl[0], (LPVOID*)&ipf); + if (hr != S_OK) + { + return hr; + } + hr = ipf->Save(szTarget, FALSE); + ipf->Release(); + NotifyShellViewWindow(lpcmi, TRUE); + return hr; + } + else + { + if (!GetUniqueFileName(szPath, szLnk, szTarget, TRUE)) + return E_FAIL; + + hr = ShellLink::_CreatorClass::CreateInstance(NULL, IID_IShellLinkW, (void**)&nLink); + if (hr != S_OK) + { + return E_FAIL; + } + + GetFullPathName(szPath, MAX_PATH, szDirPath, &pszFile); + if (pszFile) pszFile[0] = 0; + + if (SUCCEEDED(nLink->SetPath(szPath)) && + SUCCEEDED(nLink->SetWorkingDirectory(szDirPath))) + { + if (SUCCEEDED(nLink->QueryInterface(IID_IPersistFile, (LPVOID*)&ipf))) + { + hr = ipf->Save(szTarget, TRUE); + ipf->Release(); + } + } + nLink->Release(); + NotifyShellViewWindow(lpcmi, TRUE); + return hr; + } +} + +HRESULT +IDefaultContextMenuImpl::DoDelete( + LPCMINVOKECOMMANDINFO lpcmi) +{ + HRESULT hr; + STRRET strTemp; + WCHAR szPath[MAX_PATH]; + LPWSTR wszPath, wszPos; + SHFILEOPSTRUCTW op; + int ret; + LPSHELLBROWSER lpSB; + HWND hwnd; + + + hr = dcm.psf->GetDisplayNameOf(dcm.apidl[0], SHGDN_FORPARSING, &strTemp); + if(hr != S_OK) + { + ERR("IShellFolder_GetDisplayNameOf failed with %x\n", hr); + return hr; + } + ZeroMemory(szPath, sizeof(szPath)); + hr = StrRetToBufW(&strTemp, dcm.apidl[0], szPath, MAX_PATH); + if (hr != S_OK) + { + ERR("StrRetToBufW failed with %x\n", hr); + return hr; + } + + /* Only keep the base path */ + wszPos = strrchrW(szPath, '\\'); + if (wszPos != NULL) + { + *(wszPos + 1) = '\0'; + } + + wszPath = build_paths_list(szPath, dcm.cidl, dcm.apidl); + + ZeroMemory(&op, sizeof(op)); + op.hwnd = GetActiveWindow(); + op.wFunc = FO_DELETE; + op.pFrom = wszPath; + op.fFlags = FOF_ALLOWUNDO; + ret = SHFileOperationW(&op); + + if (ret) + { + ERR("SHFileOperation failed with 0x%x for %s\n", GetLastError(), debugstr_w(wszPath)); + return S_OK; + } + + /* get the active IShellView */ + if ((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0))) + { + /* is the treeview focused */ + if (SUCCEEDED(lpSB->GetControlWindow(FCW_TREE, &hwnd))) + { + HTREEITEM hItem = TreeView_GetSelection(hwnd); + if (hItem) + { + (void)TreeView_DeleteItem(hwnd, hItem); + } + } + } + NotifyShellViewWindow(lpcmi, TRUE); + + HeapFree(GetProcessHeap(), 0, wszPath); + return S_OK; + +} + +HRESULT +IDefaultContextMenuImpl::DoCopyOrCut( + LPCMINVOKECOMMANDINFO lpcmi, + BOOL bCopy) +{ + LPSHELLBROWSER lpSB; + LPSHELLVIEW lpSV; + LPDATAOBJECT pDataObj; + HRESULT hr; + + if (SUCCEEDED(SHCreateDataObject(dcm.pidlFolder, dcm.cidl, dcm.apidl, NULL, IID_IDataObject, (void**)&pDataObj))) + { + hr = OleSetClipboard(pDataObj); + pDataObj->Release(); + return hr; + } + + lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0); + if (!lpSB) + { + TRACE("failed to get shellbrowser\n"); + return E_FAIL; + } + + hr = lpSB->QueryActiveShellView(&lpSV); + if (FAILED(hr)) + { + TRACE("failed to query the active shellview\n"); + return hr; + } + + hr = lpSV->GetItemObject(SVGIO_SELECTION, IID_IDataObject, (LPVOID*)&pDataObj); + if (FAILED(hr)) + { + TRACE("failed to get item object\n"); + return hr; + } + + hr = OleSetClipboard(pDataObj); + if (FAILED(hr)) + { + WARN("OleSetClipboard failed"); + } + pDataObj->Release(); + lpSV->Release(); + return S_OK; +} + +HRESULT +IDefaultContextMenuImpl::DoRename( + LPCMINVOKECOMMANDINFO lpcmi) +{ + LPSHELLBROWSER lpSB; + LPSHELLVIEW lpSV; + HWND hwnd; + + /* get the active IShellView */ + if ((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0))) + { + /* is the treeview focused */ + if (SUCCEEDED(lpSB->GetControlWindow(FCW_TREE, &hwnd))) + { + HTREEITEM hItem = TreeView_GetSelection(hwnd); + if (hItem) + { + (void)TreeView_EditLabel(hwnd, hItem); + } + } + + if(SUCCEEDED(lpSB->QueryActiveShellView(&lpSV))) + { + lpSV->SelectItem(dcm.apidl[0], + SVSI_DESELECTOTHERS|SVSI_EDIT|SVSI_ENSUREVISIBLE|SVSI_FOCUSED|SVSI_SELECT); + lpSV->Release(); + return S_OK; + } + } + return E_FAIL; +} + +HRESULT +IDefaultContextMenuImpl::DoProperties( + LPCMINVOKECOMMANDINFO lpcmi) +{ + WCHAR szDrive[MAX_PATH]; + STRRET strFile; + + if (dcm.cidl &&_ILIsMyComputer(dcm.apidl[0])) + { + ShellExecuteW(lpcmi->hwnd, L"open", L"rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl", NULL, NULL, SW_SHOWNORMAL); + return S_OK; + } + else if (dcm.cidl == 0 && _ILIsDesktop(dcm.pidlFolder)) + { + ShellExecuteW(lpcmi->hwnd, L"open", L"rundll32.exe shell32.dll,Control_RunDLL desk.cpl", NULL, NULL, SW_SHOWNORMAL); + return S_OK; + } + else if (_ILIsDrive(dcm.apidl[0])) + { + ILGetDisplayName(dcm.apidl[0], szDrive); + SH_ShowDriveProperties(szDrive, dcm.pidlFolder, dcm.apidl); + return S_OK; + } + else if (_ILIsNetHood(dcm.apidl[0])) + { + //FIXME path! + ShellExecuteW(NULL, L"open", L"explorer.exe", + L"/n,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}", + NULL, SW_SHOWDEFAULT); + return S_OK; + } + else if (_ILIsBitBucket(dcm.apidl[0])) + { + /* FIXME + * detect the drive path of bitbucket if appropiate + */ + + SH_ShowRecycleBinProperties(L'C'); + return S_OK; + } + + if (dcm.cidl > 1) + WARN("SHMultiFileProperties is not yet implemented\n"); + + if (dcm.psf->GetDisplayNameOf(dcm.apidl[0], SHGDN_FORPARSING, &strFile) != S_OK) + { + ERR("IShellFolder_GetDisplayNameOf failed for apidl\n"); + return E_FAIL; + } + + if (StrRetToBufW(&strFile, dcm.apidl[0], szDrive, MAX_PATH) != S_OK) + return E_FAIL; + + return SH_ShowPropertiesDialog(szDrive, dcm.pidlFolder, dcm.apidl); +} + +HRESULT +IDefaultContextMenuImpl::DoFormat( + LPCMINVOKECOMMANDINFO lpcmi) +{ + char sDrive[5] = {0}; + + if (!_ILGetDrive(dcm.apidl[0], sDrive, sizeof(sDrive))) + { + ERR("pidl is not a drive\n"); + return E_FAIL; + } + + SHFormatDrive(lpcmi->hwnd, sDrive[0] - 'A', SHFMT_ID_DEFAULT, 0); + return S_OK; +} + +HRESULT +IDefaultContextMenuImpl::DoDynamicShellExtensions( + LPCMINVOKECOMMANDINFO lpcmi) +{ + UINT verb = LOWORD(lpcmi->lpVerb); + PDynamicShellEntry pCurrent = dhead; + + TRACE("verb %p first %x last %x", lpcmi->lpVerb, iIdSHEFirst, iIdSHELast); + + while(pCurrent && verb > pCurrent->iIdCmdFirst + pCurrent->NumIds) + pCurrent = pCurrent->Next; + + if (!pCurrent) + return E_FAIL; + + if (verb >= pCurrent->iIdCmdFirst && verb <= pCurrent->iIdCmdFirst + pCurrent->NumIds) + { + /* invoke the dynamic context menu */ + lpcmi->lpVerb = MAKEINTRESOURCEA(verb - pCurrent->iIdCmdFirst); + return pCurrent->CMenu->InvokeCommand(lpcmi); + } + + return E_FAIL; +} + + +HRESULT +IDefaultContextMenuImpl::DoStaticShellExtensions( + LPCMINVOKECOMMANDINFO lpcmi) +{ + STRRET strFile; + WCHAR szPath[MAX_PATH]; + WCHAR szDir[MAX_PATH]; + SHELLEXECUTEINFOW sei; + PStaticShellEntry pCurrent = shead; + int verb = LOWORD(lpcmi->lpVerb) - iIdSCMFirst; + + + while(pCurrent && verb-- > 0) + pCurrent = pCurrent->Next; + + if (verb > 0) + return E_FAIL; + + + if (dcm.psf->GetDisplayNameOf(dcm.apidl[0], SHGDN_FORPARSING, &strFile) != S_OK) + { + ERR("IShellFolder_GetDisplayNameOf failed for apidl\n"); + return E_FAIL; + } + + if (StrRetToBufW(&strFile, dcm.apidl[0], szPath, MAX_PATH) != S_OK) + return E_FAIL; + + wcscpy(szDir, szPath); + PathRemoveFileSpec(szDir); + + ZeroMemory(&sei, sizeof(sei)); + sei.cbSize = sizeof(sei); + sei.fMask = SEE_MASK_CLASSNAME; + sei.lpClass = pCurrent->szClass; + sei.hwnd = lpcmi->hwnd; + sei.nShow = SW_SHOWNORMAL; + sei.lpVerb = pCurrent->szVerb; + sei.lpFile = szPath; + sei.lpDirectory = szDir; + ShellExecuteExW(&sei); + return S_OK; + +} + +HRESULT +WINAPI +IDefaultContextMenuImpl::InvokeCommand( + LPCMINVOKECOMMANDINFO lpcmi) +{ + switch(LOWORD(lpcmi->lpVerb)) + { + case FCIDM_SHVIEW_BIGICON: + case FCIDM_SHVIEW_SMALLICON: + case FCIDM_SHVIEW_LISTVIEW: + case FCIDM_SHVIEW_REPORTVIEW: + case 0x30: /* FIX IDS in resource files */ + case 0x31: + case 0x32: + case 0x33: + case FCIDM_SHVIEW_AUTOARRANGE: + case FCIDM_SHVIEW_SNAPTOGRID: + case FCIDM_SHVIEW_REFRESH: + return NotifyShellViewWindow(lpcmi, FALSE); + case FCIDM_SHVIEW_INSERT: + case FCIDM_SHVIEW_INSERTLINK: + return DoPaste(lpcmi); + case FCIDM_SHVIEW_OPEN: + case FCIDM_SHVIEW_EXPLORE: + return DoOpenOrExplore(lpcmi); + case FCIDM_SHVIEW_COPY: + case FCIDM_SHVIEW_CUT: + return DoCopyOrCut(lpcmi, LOWORD(lpcmi->lpVerb) == FCIDM_SHVIEW_COPY); + case FCIDM_SHVIEW_CREATELINK: + return DoCreateLink(lpcmi); + case FCIDM_SHVIEW_DELETE: + return DoDelete(lpcmi); + case FCIDM_SHVIEW_RENAME: + return DoRename(lpcmi); + case FCIDM_SHVIEW_PROPERTIES: + return DoProperties(lpcmi); + case 0x7ABC: + return DoFormat(lpcmi); + } + + if (iIdSHEFirst && iIdSHELast) + { + if (LOWORD(lpcmi->lpVerb) >= iIdSHEFirst && LOWORD(lpcmi->lpVerb) <= iIdSHELast) + { + return DoDynamicShellExtensions(lpcmi); + } + } + + if (iIdSCMFirst && iIdSCMLast) + { + if (LOWORD(lpcmi->lpVerb) >= iIdSCMFirst && LOWORD(lpcmi->lpVerb) <= iIdSCMLast) + { + return DoStaticShellExtensions(lpcmi); + } + } + + FIXME("Unhandled Verb %xl\n",LOWORD(lpcmi->lpVerb)); + return E_UNEXPECTED; +} + +HRESULT +WINAPI +IDefaultContextMenuImpl::GetCommandString( + UINT_PTR idCommand, + UINT uFlags, + UINT* lpReserved, + LPSTR lpszName, + UINT uMaxNameLen) +{ + + return S_OK; +} + +HRESULT +WINAPI +IDefaultContextMenuImpl::HandleMenuMsg( + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + + return S_OK; +} + +static +HRESULT +IDefaultContextMenu_Constructor( + const DEFCONTEXTMENU *pdcm, + REFIID riid, + void **ppv) +{ + CComObject *theContextMenu; + CComPtr result; + HRESULT hResult; + + if (ppv == NULL) + return E_POINTER; + *ppv = NULL; + ATLTRY (theContextMenu = new CComObject); + if (theContextMenu == NULL) + return E_OUTOFMEMORY; + hResult = theContextMenu->QueryInterface (riid, (void **)&result); + if (FAILED (hResult)) + { + delete theContextMenu; + return hResult; + } + hResult = theContextMenu->Initialize (pdcm); + if (FAILED (hResult)) + return hResult; + *ppv = result.Detach (); + TRACE("This(%p)(%x) cidl %u\n", *ppv, hResult, pdcm->cidl); + return S_OK; +} + +/************************************************************************* + * SHCreateDefaultContextMenu [SHELL32.325] Vista API + * + */ + +HRESULT +WINAPI +SHCreateDefaultContextMenu( + const DEFCONTEXTMENU *pdcm, + REFIID riid, + void **ppv) +{ + HRESULT hr = E_FAIL; + + *ppv = NULL; + hr = IDefaultContextMenu_Constructor( pdcm, riid, ppv ); + + TRACE("pcm %p hr %x\n", pdcm, hr); + return hr; +} + +/************************************************************************* + * CDefFolderMenu_Create2 [SHELL32.701] + * + */ + +HRESULT +WINAPI +CDefFolderMenu_Create2( + LPCITEMIDLIST pidlFolder, + HWND hwnd, + UINT cidl, + LPCITEMIDLIST *apidl, + IShellFolder *psf, + LPFNDFMCALLBACK lpfn, + UINT nKeys, + const HKEY *ahkeyClsKeys, + IContextMenu **ppcm) +{ + DEFCONTEXTMENU pdcm; + HRESULT hr; + + pdcm.hwnd = hwnd; + pdcm.pcmcb = NULL; + pdcm.pidlFolder = pidlFolder; + pdcm.psf = psf; + pdcm.cidl = cidl; + pdcm.apidl = apidl; + pdcm.punkAssociationInfo = NULL; + pdcm.cKeys = nKeys; + pdcm.aKeys = ahkeyClsKeys; + + hr = SHCreateDefaultContextMenu(&pdcm, IID_IContextMenu, (void**)ppcm); + return hr; +} + diff --git a/reactos/dll/win32/shell32_new/shv_item_new.cpp b/reactos/dll/win32/shell32_new/shv_item_new.cpp new file mode 100644 index 00000000000..86b810fb440 --- /dev/null +++ b/reactos/dll/win32/shell32_new/shv_item_new.cpp @@ -0,0 +1,720 @@ +/* + * provides new shell item service + * + * Copyright 2007 Johannes Anderwald (janderwald@reactos.org) + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include +#include "shv_item_new.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +static WCHAR szNew[MAX_PATH]; + +CNewMenu::CNewMenu() +{ + s_SnHead = NULL; +} + +CNewMenu::~CNewMenu() +{ +} + +static +BOOL +GetKeyDescription(LPWSTR szKeyName, LPWSTR szResult) +{ + HKEY hKey; + DWORD dwDesc, dwError; + WCHAR szDesc[100]; + + static const WCHAR szFriendlyTypeName[] = { '\\','F','r','i','e','n','d','l','y','T','y','p','e','N','a','m','e',0 }; + + TRACE("GetKeyDescription: keyname %s\n", debugstr_w(szKeyName)); + + if (RegOpenKeyExW(HKEY_CLASSES_ROOT,szKeyName,0, KEY_READ | KEY_QUERY_VALUE,&hKey) != ERROR_SUCCESS) + return FALSE; + + if (RegLoadMUIStringW(hKey,szFriendlyTypeName,szResult,MAX_PATH,&dwDesc,0,NULL) == ERROR_SUCCESS) + { + TRACE("result %s\n", debugstr_w(szResult)); + RegCloseKey(hKey); + return TRUE; + } + /* fetch default value */ + dwDesc = sizeof(szDesc); + dwError = RegGetValueW(hKey,NULL,NULL, RRF_RT_REG_SZ,NULL,szDesc,&dwDesc); + if(dwError == ERROR_SUCCESS) + { + if (wcsncmp(szKeyName, szDesc, dwDesc / sizeof(WCHAR))) + { + /* recurse for to a linked key */ + if (!GetKeyDescription(szDesc, szResult)) + { + /* use description */ + wcscpy(szResult, szDesc); + } + } + else + { + /* use default value as description */ + wcscpy(szResult, szDesc); + } + } + else + { + /* registry key w/o default key?? */ + TRACE("RegGetValue failed with %x\n", dwError); + wcscpy(szResult, szKeyName); + } + + RegCloseKey(hKey); + return TRUE; +} + + +CNewMenu::SHELLNEW_ITEM *CNewMenu::LoadItem(LPWSTR szKeyName) +{ + HKEY hKey; + DWORD dwIndex; + WCHAR szName[MAX_PATH]; + WCHAR szCommand[MAX_PATH]; + WCHAR szDesc[MAX_PATH] = {0}; + WCHAR szIcon[MAX_PATH] = {0}; + DWORD dwName, dwCommand; + LONG result; + SHELLNEW_ITEM *pNewItem; + + static const WCHAR szShellNew[] = { '\\','S','h','e','l','l','N','e','w',0 }; + static const WCHAR szCmd[] = { 'C','o','m','m','a','n','d',0 }; + static const WCHAR szData[] = { 'D','a','t','a',0 }; + static const WCHAR szFileName[] = { 'F','i','l','e','N','a','m','e', 0 }; + static const WCHAR szNullFile[] = { 'N','u','l','l','F','i','l','e', 0 }; + + + wcscpy(szName, szKeyName); + GetKeyDescription(szKeyName, szDesc); + wcscat(szName, szShellNew); + result = RegOpenKeyExW(HKEY_CLASSES_ROOT,szName,0,KEY_READ,&hKey); + + //TRACE("LoadItem dwName %d keyname %s szName %s szDesc %s szIcon %s\n", dwName, debugstr_w(szKeyName), debugstr_w(szName), debugstr_w(szDesc), debugstr_w(szIcon)); + + if (result != ERROR_SUCCESS) + { + return NULL; + } + + dwIndex = 0; + pNewItem = NULL; + + do + { + dwName = MAX_PATH; + dwCommand = MAX_PATH; + result = RegEnumValueW(hKey,dwIndex,szName,&dwName,NULL,NULL,(LPBYTE)szCommand, &dwCommand); + if (result == ERROR_SUCCESS) + { + SHELLNEW_TYPE type = SHELLNEW_TYPE_INVALID; + LPWSTR szTarget = szCommand; + //TRACE("szName %s szCommand %s\n", debugstr_w(szName), debugstr_w(szCommand)); + if (!wcsicmp(szName, szCmd)) + { + type = SHELLNEW_TYPE_COMMAND; + }else if (!wcsicmp(szName, szData)) + { + type = SHELLNEW_TYPE_DATA; + } + else if (!wcsicmp(szName, szFileName)) + { + type = SHELLNEW_TYPE_FILENAME; + } + else if (!wcsicmp(szName, szNullFile)) + { + type = SHELLNEW_TYPE_NULLFILE; + szTarget = NULL; + } + if (type != SHELLNEW_TYPE_INVALID) + { + pNewItem = (SHELLNEW_ITEM *)HeapAlloc(GetProcessHeap(), 0, sizeof(SHELLNEW_ITEM)); + pNewItem->Type = type; + if (szTarget) + pNewItem->szTarget = _wcsdup(szTarget); + else + pNewItem->szTarget = NULL; + + pNewItem->szDesc = _wcsdup(szDesc); + pNewItem->szIcon = _wcsdup(szIcon); + pNewItem->szExt = _wcsdup(szKeyName); + pNewItem->Next = NULL; + break; + } + } + dwIndex++; + }while(result != ERROR_NO_MORE_ITEMS); + RegCloseKey(hKey); + return pNewItem; +} + + +BOOL +CNewMenu::LoadShellNewItems() +{ + DWORD dwIndex; + WCHAR szName[MAX_PATH]; + LONG result; + SHELLNEW_ITEM *pNewItem; + SHELLNEW_ITEM *pCurItem = NULL; + static WCHAR szLnk[] = { '.','l','n','k',0 }; + + /* insert do new folder action */ + if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, szNew, sizeof(szNew) / sizeof(WCHAR))) + szNew[0] = 0; + szNew[MAX_PATH-1] = 0; + + dwIndex = 0; + do + { + result = RegEnumKeyW(HKEY_CLASSES_ROOT,dwIndex,szName,MAX_PATH); + if (result == ERROR_SUCCESS) + { + pNewItem = LoadItem(szName); + if (pNewItem) + { + if (!wcsicmp(pNewItem->szExt, szLnk)) + { + if (s_SnHead) + { + pNewItem->Next = s_SnHead; + s_SnHead = pNewItem; + } + else + { + s_SnHead = pCurItem = pNewItem; + } + } + else + { + if (pCurItem) + { + pCurItem->Next = pNewItem; + pCurItem = pNewItem; + } + else + { + pCurItem = s_SnHead = pNewItem; + } + } + } + } + dwIndex++; + }while(result != ERROR_NO_MORE_ITEMS); + + if (s_SnHead == NULL) + return FALSE; + else + return TRUE; +} + +UINT +CNewMenu::InsertShellNewItems(HMENU hMenu, UINT idFirst, UINT idMenu) +{ + MENUITEMINFOW mii; + SHELLNEW_ITEM *pCurItem; + UINT i; + WCHAR szBuffer[MAX_PATH]; + + if (s_SnHead == NULL) + { + if (!LoadShellNewItems()) + return 0; + } + + ZeroMemory(&mii, sizeof(mii)); + mii.cbSize = sizeof(mii); + + /* insert do new shortcut action */ + if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEWFOLDER, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]))) + szBuffer[0] = 0; + szBuffer[MAX_PATH-1] = 0; + mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA; + mii.fType = MFT_STRING; + mii.dwTypeData = szBuffer; + mii.cch = wcslen(mii.dwTypeData); + mii.wID = idFirst++; + InsertMenuItemW(hMenu, idMenu++, TRUE, &mii); + + /* insert do new shortcut action */ + if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEWLINK, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]))) + szBuffer[0] = 0; + szBuffer[MAX_PATH-1] = 0; + mii.dwTypeData = szBuffer; + mii.cch = wcslen(mii.dwTypeData); + mii.wID = idFirst++; + InsertMenuItemW(hMenu, idMenu++, TRUE, &mii); + + /* insert seperator for custom new action */ + mii.fMask = MIIM_TYPE | MIIM_ID; + mii.fType = MFT_SEPARATOR; + mii.wID = -1; + InsertMenuItemW(hMenu, idMenu++, TRUE, &mii); + + mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA; + /* + * FIXME + * implement loading of icons + * and using MFT_OWNERDRAWN + */ + mii.fType = MFT_STRING; + mii.fState = MFS_ENABLED; + + pCurItem = s_SnHead; + i = 0; + + while(pCurItem) + { + if (i >= 1) + { + TRACE("szDesc %s\n", debugstr_w(pCurItem->szDesc)); + mii.dwTypeData = pCurItem->szDesc; + mii.cch = wcslen(mii.dwTypeData); + mii.wID = idFirst++; + InsertMenuItemW(hMenu, idMenu++, TRUE, &mii); + } + pCurItem = pCurItem->Next; + i++; + } + return (i+2); +} + +HRESULT +CNewMenu::DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi) +{ + SHELLNEW_ITEM *pCurItem = s_SnHead; + IPersistFolder3 * psf; + LPITEMIDLIST pidl; + STRRET strTemp; + WCHAR szTemp[MAX_PATH]; + WCHAR szBuffer[MAX_PATH]; + WCHAR szPath[MAX_PATH]; + STARTUPINFOW sInfo; + PROCESS_INFORMATION pi; + UINT i, target; + HANDLE hFile; + DWORD dwWritten, dwError; + CComPtr folderView; + CComPtr parentFolder; + HRESULT hResult; + + static const WCHAR szP1[] = { '%', '1', 0 }; + static const WCHAR szFormat[] = {'%','s',' ','(','%','d',')','%','s',0 }; + + i = 1; + target = LOWORD(lpcmi->lpVerb); + + while(pCurItem) + { + if (i == target) + break; + + pCurItem = pCurItem->Next; + i++; + } + + if (!pCurItem) + return E_UNEXPECTED; + + if (fSite == NULL) + return E_FAIL; + hResult = IUnknown_QueryService(fSite, SID_IFolderView, IID_IFolderView, (void **)&folderView); + if (FAILED(hResult)) + return hResult; + hResult = folderView->GetFolder(IID_IShellFolder, (void **)&parentFolder); + if (FAILED(hResult)) + return hResult; + + if (parentFolder->QueryInterface(IID_IPersistFolder2, (LPVOID*)&psf) != S_OK) + { + ERR("Failed to get interface IID_IPersistFolder2\n"); + return E_FAIL; + } + if (psf->GetCurFolder(&pidl) != S_OK) + { + ERR("IPersistFolder2_GetCurFolder failed\n"); + return E_FAIL; + } + + if (parentFolder == NULL || parentFolder->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strTemp) != S_OK) + { + ERR("IShellFolder_GetDisplayNameOf failed\n"); + return E_FAIL; + } + StrRetToBufW(&strTemp, pidl, szPath, MAX_PATH); + + switch(pCurItem->Type) + { + case SHELLNEW_TYPE_COMMAND: + { + LPWSTR ptr; + LPWSTR szCmd; + + if (!ExpandEnvironmentStringsW(pCurItem->szTarget, szBuffer, MAX_PATH)) + { + TRACE("ExpandEnvironmentStrings failed\n"); + break; + } + + ptr = wcsstr(szBuffer, szP1); + if (ptr) + { + ptr[1] = 's'; + swprintf(szTemp, szBuffer, szPath); + ptr = szTemp; + } + else + { + ptr = szBuffer; + } + + ZeroMemory(&sInfo, sizeof(sInfo)); + sInfo.cb = sizeof(sizeof(sInfo)); + szCmd = _wcsdup(ptr); + if (!szCmd) + break; + if (CreateProcessW(NULL, szCmd, NULL, NULL,FALSE,0,NULL,NULL,&sInfo, &pi)) + { + CloseHandle( pi.hProcess ); + CloseHandle( pi.hThread ); + } + free(szCmd); + break; + } + case SHELLNEW_TYPE_DATA: + case SHELLNEW_TYPE_FILENAME: + case SHELLNEW_TYPE_NULLFILE: + { + i = 2; + + PathAddBackslashW(szPath); + wcscat(szPath, szNew); + wcscat(szPath, L" "); + wcscat(szPath, pCurItem->szDesc); + wcscpy(szBuffer, szPath); + wcscat(szBuffer, pCurItem->szExt); + do + { + hFile = CreateFileW(szBuffer, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile != INVALID_HANDLE_VALUE) + break; + dwError = GetLastError(); + + TRACE("FileName %s szBuffer %s i %u error %x\n", debugstr_w(szBuffer), debugstr_w(szPath), i, dwError); + swprintf(szBuffer, szFormat, szPath, i, pCurItem->szExt); + i++; + }while(hFile == INVALID_HANDLE_VALUE && dwError == ERROR_FILE_EXISTS); + + if (hFile == INVALID_HANDLE_VALUE) + return E_FAIL; + + if (pCurItem->Type == SHELLNEW_TYPE_DATA) + { + i = WideCharToMultiByte(CP_ACP, 0, pCurItem->szTarget, -1, (LPSTR)szTemp, MAX_PATH*2, NULL, NULL); + if (i) + { + WriteFile(hFile, (LPCVOID)szTemp, i, &dwWritten, NULL); + } + } + CloseHandle(hFile); + if (pCurItem->Type == SHELLNEW_TYPE_FILENAME) + { + if (!CopyFileW(pCurItem->szTarget, szBuffer, FALSE)) + break; + } + TRACE("Notifying fs %s\n", debugstr_w(szBuffer)); + SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW, (LPCVOID)szBuffer, NULL); + break; + case SHELLNEW_TYPE_INVALID: + break; + } + } + return S_OK; +} +/************************************************************************** +* DoMeasureItem +*/ +HRESULT +CNewMenu::DoMeasureItem(HWND hWnd, MEASUREITEMSTRUCT * lpmis) +{ + SHELLNEW_ITEM *pCurItem; + SHELLNEW_ITEM *pItem; + UINT i; + HDC hDC; + SIZE size; + + TRACE("DoMeasureItem entered with id %x\n", lpmis->itemID); + + pCurItem = s_SnHead; + + i = 1; + pItem = NULL; + while(pCurItem) + { + if (i == lpmis->itemID) + { + pItem = pCurItem; + break; + } + pCurItem = pCurItem->Next; + i++; + } + + if (!pItem) + { + TRACE("DoMeasureItem no item found\n"); + return E_FAIL; + } + hDC = GetDC(hWnd); + GetTextExtentPoint32W(hDC, pCurItem->szDesc, wcslen(pCurItem->szDesc), &size); + lpmis->itemWidth = size.cx + 32; + lpmis->itemHeight = max(size.cy, 20); + ReleaseDC (hWnd, hDC); + return S_OK; +} +/************************************************************************** +* DoDrawItem +*/ +HRESULT +CNewMenu::DoDrawItem(HWND hWnd, DRAWITEMSTRUCT * drawItem) +{ + SHELLNEW_ITEM *pCurItem; + SHELLNEW_ITEM *pItem; + UINT i; + pCurItem = s_SnHead; + + TRACE("DoDrawItem entered with id %x\n", drawItem->itemID); + + i = 1; + pItem = NULL; + while(pCurItem) + { + if (i == drawItem->itemID) + { + pItem = pCurItem; + break; + } + pCurItem = pCurItem->Next; + i++; + } + + if (!pItem) + return E_FAIL; + + drawItem->rcItem.left += 20; + + DrawTextW(drawItem->hDC, pCurItem->szDesc, wcslen(pCurItem->szDesc), &drawItem->rcItem, 0); + return S_OK; +} + +/************************************************************************** +* DoNewFolder +*/ +void CNewMenu::DoNewFolder( + IShellView *psv) +{ + ISFHelper * psfhlp; + WCHAR wszName[MAX_PATH]; + CComPtr folderView; + CComPtr parentFolder; + HRESULT hResult; + + if (fSite == NULL) + return; + hResult = IUnknown_QueryService(fSite, SID_IFolderView, IID_IFolderView, (void **)&folderView); + if (FAILED(hResult)) + return; + hResult = folderView->GetFolder(IID_IShellFolder, (void **)&parentFolder); + if (FAILED(hResult)) + return; + + parentFolder->QueryInterface(IID_ISFHelper, (LPVOID*)&psfhlp); + if (psfhlp) + { + LPITEMIDLIST pidl; + + if (psfhlp->GetUniqueName(wszName, MAX_PATH) != S_OK) + return; + if (psfhlp->AddFolder(0, wszName, &pidl) != S_OK) + return; + + if(psv) + { + psv->Refresh(); + /* if we are in a shellview do labeledit */ + psv->SelectItem( + pidl,(SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE + |SVSI_FOCUSED|SVSI_SELECT)); + psv->Refresh(); + } + SHFree(pidl); + + psfhlp->Release(); + } +} + +HRESULT STDMETHODCALLTYPE CNewMenu::SetSite(IUnknown *pUnkSite) +{ + fSite = pUnkSite; + return S_OK; +} + +HRESULT STDMETHODCALLTYPE CNewMenu::GetSite(REFIID riid, void **ppvSite) +{ + if (ppvSite == NULL) + return E_POINTER; + *ppvSite = fSite; + if (fSite.p != NULL) + fSite.p->AddRef(); + return S_OK; +} + +HRESULT +WINAPI +CNewMenu::QueryContextMenu(HMENU hmenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + WCHAR szBuffer[200]; + MENUITEMINFOW mii; + HMENU hSubMenu; + int id = 1; + + TRACE("%p %p %u %u %u %u\n", this, + hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags ); + + if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, szBuffer, 200)) + { + szBuffer[0] = 0; + } + szBuffer[199] = 0; + + hSubMenu = CreateMenu(); + memset( &mii, 0, sizeof(mii) ); + mii.cbSize = sizeof (mii); + mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; + mii.fType = MFT_STRING; + mii.wID = idCmdFirst + id++; + mii.dwTypeData = szBuffer; + mii.cch = wcslen( mii.dwTypeData ); + mii.fState = MFS_ENABLED; + + if (hSubMenu) + { + id += InsertShellNewItems( hSubMenu, idCmdFirst, 0); + mii.fMask |= MIIM_SUBMENU; + mii.hSubMenu = hSubMenu; + } + + + if (!InsertMenuItemW( hmenu, indexMenu, TRUE, &mii )) + return E_FAIL; + + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id ); +} + +HRESULT +WINAPI +CNewMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici) +{ + LPSHELLBROWSER lpSB; + LPSHELLVIEW lpSV = NULL; + HRESULT hr; + + if((lpSB = (LPSHELLBROWSER)SendMessageA(lpici->hwnd, CWM_GETISHELLBROWSER,0,0))) + { + lpSB->QueryActiveShellView(&lpSV); + } + + if (LOWORD(lpici->lpVerb) == 0) + { + DoNewFolder(lpSV); + return S_OK; + } + + hr = DoShellNewCmd(lpici); + if (SUCCEEDED(hr) && lpSV) + { + lpSV->Refresh(); + } + + TRACE("INewItem_IContextMenu_fnInvokeCommand %x\n", hr); + return hr; +} + +HRESULT +WINAPI +CNewMenu::GetCommandString(UINT_PTR idCmd, + UINT uType, + UINT* pwReserved, + LPSTR pszName, + UINT cchMax) +{ + FIXME("%p %lu %u %p %p %u\n", this, + idCmd, uType, pwReserved, pszName, cchMax ); + + return E_NOTIMPL; +} + +HRESULT +WINAPI +CNewMenu::HandleMenuMsg(UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + DRAWITEMSTRUCT * lpids = (DRAWITEMSTRUCT*) lParam; + MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) lParam; + + TRACE("INewItem_IContextMenu_fnHandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",this, uMsg, wParam, lParam); + + + switch(uMsg) + { + case WM_MEASUREITEM: + return DoMeasureItem((HWND)wParam, lpmis); + break; + case WM_DRAWITEM: + return DoDrawItem((HWND)wParam, lpids); + break; + } + return S_OK; + + return E_UNEXPECTED; +} + +HRESULT WINAPI +CNewMenu::Initialize(LPCITEMIDLIST pidlFolder, + IDataObject *pdtobj, HKEY hkeyProgID ) +{ + + return S_OK; +} diff --git a/reactos/dll/win32/shell32_new/shv_item_new.h b/reactos/dll/win32/shell32_new/shv_item_new.h new file mode 100644 index 00000000000..2bedc5bd60b --- /dev/null +++ b/reactos/dll/win32/shell32_new/shv_item_new.h @@ -0,0 +1,94 @@ +/* + * provides new shell item service + * + * Copyright 2007 Johannes Anderwald (janderwald@reactos.org) + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _SHV_ITEM_NEW_H_ +#define _SHV_ITEM_NEW_H_ + +class CNewMenu : + public CComCoClass, + public CComObjectRootEx, + public IObjectWithSite, + public IContextMenu2, + public IShellExtInit +{ +private: + enum SHELLNEW_TYPE + { + SHELLNEW_TYPE_INVALID = -1, + SHELLNEW_TYPE_COMMAND = 1, + SHELLNEW_TYPE_DATA = 2, + SHELLNEW_TYPE_FILENAME = 4, + SHELLNEW_TYPE_NULLFILE = 8 + }; + + struct SHELLNEW_ITEM + { + SHELLNEW_TYPE Type; + LPWSTR szExt; + LPWSTR szTarget; + LPWSTR szDesc; + LPWSTR szIcon; + SHELLNEW_ITEM *Next; + }; + + LPWSTR szPath; + SHELLNEW_ITEM *s_SnHead; + CComPtr fSite; +public: + CNewMenu(); + ~CNewMenu(); + SHELLNEW_ITEM *LoadItem(LPWSTR szKeyName); + BOOL LoadShellNewItems(); + UINT InsertShellNewItems(HMENU hMenu, UINT idFirst, UINT idMenu); + HRESULT DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi); + HRESULT DoMeasureItem(HWND hWnd, MEASUREITEMSTRUCT *lpmis); + HRESULT DoDrawItem(HWND hWnd, DRAWITEMSTRUCT *drawItem); + void DoNewFolder(IShellView *psv); + + // IObjectWithSite + virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite); + virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite); + + // IContextMenu + virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); + virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); + virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen); + + // IContextMenu2 + virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); + + // IShellExtInit + virtual HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID); + +DECLARE_REGISTRY_RESOURCEID(IDR_NEWMENU) +DECLARE_NOT_AGGREGATABLE(CNewMenu) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CNewMenu) + COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2) + COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu) + COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit) +END_COM_MAP() +}; + +#endif // _SHV_ITEM_NEW_H_ diff --git a/reactos/dll/win32/shell32_new/startmenu.cpp b/reactos/dll/win32/shell32_new/startmenu.cpp new file mode 100644 index 00000000000..2b3f81101a0 --- /dev/null +++ b/reactos/dll/win32/shell32_new/startmenu.cpp @@ -0,0 +1,174 @@ +/* + * Start menu object + * + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include "startmenu.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shell32start); + +CStartMenuCallback::CStartMenuCallback() +{ +} + +CStartMenuCallback::~CStartMenuCallback() +{ +} + +HRESULT STDMETHODCALLTYPE CStartMenuCallback::SetSite(IUnknown *pUnkSite) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CStartMenuCallback::GetSite(REFIID riid, void **ppvSite) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CStartMenuCallback::CallbackSM(LPSMDATA psmd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + return E_NOTIMPL; +} + +CMenuBandSite::CMenuBandSite() +{ +} + +CMenuBandSite::~CMenuBandSite() +{ +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::GetWindow(HWND *phwnd) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::ContextSensitiveHelp(BOOL fEnterMode) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::SetDeskBarSite(IUnknown *punkSite) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::SetModeDBC(DWORD dwMode) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::UIActivateDBC(DWORD dwState) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::GetSize(DWORD dwWhich, LPRECT prc) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::UIActivateIO(BOOL fActivate, LPMSG lpMsg) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::HasFocusIO() +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::TranslateAcceleratorIO(LPMSG lpMsg) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::OnFocusChangeIS(IUnknown *punkObj, BOOL fSetFocus) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::OnWinEvent(HWND paramC, UINT param10, WPARAM param14, LPARAM param18, LRESULT *param1C) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::IsWindowOwner(HWND paramC) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryService(REFGUID guidService, REFIID riid, void **ppvObject) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::AddBand(IUnknown *punk) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::EnumBands(UINT uBand, DWORD *pdwBandID) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::QueryBand(DWORD dwBandID, IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::SetBandState(DWORD dwBandID, DWORD dwMask, DWORD dwState) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::RemoveBand(DWORD dwBandID) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::GetBandObject(DWORD dwBandID, REFIID riid, VOID **ppv) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::SetBandSiteInfo(const BANDSITEINFO *pbsinfo) +{ + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE CMenuBandSite::GetBandSiteInfo(BANDSITEINFO *pbsinfo) +{ + return E_NOTIMPL; +} diff --git a/reactos/dll/win32/shell32_new/startmenu.h b/reactos/dll/win32/shell32_new/startmenu.h new file mode 100644 index 00000000000..d9773da4bbd --- /dev/null +++ b/reactos/dll/win32/shell32_new/startmenu.h @@ -0,0 +1,125 @@ +/* + * Start menu object + * + * Copyright 2009 Andrew Hill + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef _STARTMENU_H_ +#define _STARTMENU_H_ + +class CStartMenuCallback : + public CComCoClass, + public CComObjectRootEx, + public IObjectWithSite, + public IShellMenuCallback +{ +private: +public: + CStartMenuCallback(); + ~CStartMenuCallback(); + + // *** IObjectWithSite methods *** + virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite); + virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite); + + // *** IShellMenuCallback methods *** + virtual HRESULT STDMETHODCALLTYPE CallbackSM(LPSMDATA psmd, UINT uMsg, WPARAM wParam, LPARAM lParam); + +DECLARE_NO_REGISTRY() +DECLARE_NOT_AGGREGATABLE(CStartMenuCallback) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CStartMenuCallback) + COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite) + COM_INTERFACE_ENTRY_IID(IID_IShellMenuCallback, IShellMenuCallback) +END_COM_MAP() +}; + +class CMenuBandSite : + public CComCoClass, + public CComObjectRootEx, + public IDeskBarClient, + public IInputObject, + public IInputObjectSite, + public IWinEventHandler, + public IServiceProvider, + public IOleCommandTarget, + public IBandSite +{ +private: +public: + CMenuBandSite(); + ~CMenuBandSite(); + + // *** IOleWindow methods *** + virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd); + virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode); + + // *** IDeskBarClient methods *** + virtual HRESULT STDMETHODCALLTYPE SetDeskBarSite(IUnknown *punkSite); + virtual HRESULT STDMETHODCALLTYPE SetModeDBC(DWORD dwMode); + virtual HRESULT STDMETHODCALLTYPE UIActivateDBC(DWORD dwState); + virtual HRESULT STDMETHODCALLTYPE GetSize(DWORD dwWhich, LPRECT prc); + + // *** IInputObject methods *** + virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg); + virtual HRESULT STDMETHODCALLTYPE HasFocusIO(); + virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg); + + // *** IInputObjectSite methods *** + virtual HRESULT STDMETHODCALLTYPE OnFocusChangeIS(IUnknown *punkObj, BOOL fSetFocus); + + // *** IWinEventHandler methods *** + virtual HRESULT STDMETHODCALLTYPE OnWinEvent(HWND paramC, UINT param10, WPARAM param14, LPARAM param18, LRESULT *param1C); + virtual HRESULT STDMETHODCALLTYPE IsWindowOwner(HWND paramC); + + // *** IServiceProvider methods *** + virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject); + + // *** IOleCommandTarget methods *** + virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText); + virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut); + + // *** IBandSite methods *** + virtual HRESULT STDMETHODCALLTYPE AddBand(IUnknown *punk); + virtual HRESULT STDMETHODCALLTYPE EnumBands(UINT uBand, DWORD *pdwBandID); + virtual HRESULT STDMETHODCALLTYPE QueryBand(DWORD dwBandID, IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName); + virtual HRESULT STDMETHODCALLTYPE SetBandState(DWORD dwBandID, DWORD dwMask, DWORD dwState); + virtual HRESULT STDMETHODCALLTYPE RemoveBand(DWORD dwBandID); + virtual HRESULT STDMETHODCALLTYPE GetBandObject(DWORD dwBandID, REFIID riid, VOID **ppv); + virtual HRESULT STDMETHODCALLTYPE SetBandSiteInfo(const BANDSITEINFO *pbsinfo); + virtual HRESULT STDMETHODCALLTYPE GetBandSiteInfo(BANDSITEINFO *pbsinfo); + +DECLARE_REGISTRY_RESOURCEID(IDR_MENUBANDSITE) +DECLARE_NOT_AGGREGATABLE(CMenuBandSite) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CMenuBandSite) + COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow) + COM_INTERFACE_ENTRY_IID(IID_IDeskBarClient, IDeskBarClient) + COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject) + COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite, IInputObjectSite) + COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler) + COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider) + COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget) + COM_INTERFACE_ENTRY_IID(IID_IBandSite, IBandSite) +END_COM_MAP() +}; + +#endif // _STARTMENU_H_ diff --git a/reactos/dll/win32/shell32_new/stubs.cpp b/reactos/dll/win32/shell32_new/stubs.cpp new file mode 100644 index 00000000000..ab94da13761 --- /dev/null +++ b/reactos/dll/win32/shell32_new/stubs.cpp @@ -0,0 +1,1419 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: shell32.dll + * FILE: dll/win32/shell32/stubs.c + * PURPOSE: shell32.dll stubs + * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org) + * NOTES: If you implement a function, remove it from this file + * UPDATE HISTORY: + * 03/02/2009 Created + */ + + +#include + +WINE_DEFAULT_DEBUG_CHANNEL(shell); + +/* + * Unimplemented + */ +EXTERN_C HLOCAL +WINAPI +SHLocalAlloc(UINT uFlags, SIZE_T uBytes) +{ + FIXME("SHLocalAlloc() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C HLOCAL +WINAPI +SHLocalFree(HLOCAL hMem) +{ + FIXME("SHLocalFree() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C HLOCAL +WINAPI +SHLocalReAlloc(HLOCAL hMem, + SIZE_T uBytes, + UINT uFlags) +{ + FIXME("SHLocalReAlloc() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C LPWSTR +WINAPI +AddCommasW(DWORD dwUnknown, LPWSTR lpNumber) +{ + LPCWSTR lpRetBuf = L"0"; + + FIXME("AddCommasW() stub\n"); + return const_cast(lpRetBuf); +} + +/* + * Unimplemented + */ +EXTERN_C LPWSTR +WINAPI +ShortSizeFormatW(LONGLONG llNumber) +{ + FIXME("ShortSizeFormatW() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHFindComputer(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + FIXME("SHFindComputer() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHLimitInputEdit(HWND hWnd, IShellFolder *psf) +{ + FIXME("SHLimitInputEdit() stub\n"); + return S_FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHLimitInputCombo(HWND hWnd, LPVOID lpUnknown) +{ + FIXME("SHLimitInputCombo() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +PathIsEqualOrSubFolder(LPWSTR lpFolder, LPWSTR lpSubFolder) +{ + FIXME("PathIsEqualOrSubFolder() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHCreateFileExtractIconW(LPCWSTR pszPath, + DWORD dwFileAttributes, + REFIID riid, + void **ppv) +{ + FIXME("SHCreateFileExtractIconW() stub\n"); + return E_FAIL; +} + +EXTERN_C HRESULT +WINAPI +SHGetUnreadMailCountW(HKEY hKeyUser, + LPCWSTR pszMailAddress, + DWORD *pdwCount, + FILETIME *pFileTime, + LPWSTR pszShellExecuteCommand, + int cchShellExecuteCommand) +{ + FIXME("SHGetUnreadMailCountW() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHSetUnreadMailCountW(LPCWSTR pszMailAddress, + DWORD dwCount, + LPCWSTR pszShellExecuteCommand) +{ + FIXME("SHSetUnreadMailCountW() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +CheckDiskSpace(VOID) +{ + FIXME("CheckDiskSpace() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +SHReValidateDarwinCache(VOID) +{ + FIXME("SHReValidateDarwinCache() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +CopyStreamUI(IStream *pSrc, IStream *pDst, IProgressDialog *pProgDlg) +{ + FIXME("CopyStreamUI() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C FILEDESCRIPTOR* +WINAPI +GetFileDescriptor(FILEGROUPDESCRIPTOR *pFileGroupDesc, BOOL bUnicode, INT iIndex, LPWSTR lpName) +{ + FIXME("GetFileDescriptor() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHIsTempDisplayMode(VOID) +{ + FIXME("SHIsTempDisplayMode() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C LONG +WINAPI +SHCreateSessionKey(REGSAM regSam, PHKEY phKey) +{ + FIXME("SHCreateSessionKey() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +MakeShellURLFromPathW(LPCWSTR lpPath, LPWSTR lpUrl, INT cchMax) +{ + FIXME("MakeShellURLFromPathW() stub\n"); + lpUrl = NULL; + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +MakeShellURLFromPathA(LPCSTR lpPath, LPSTR lpUrl, INT cchMax) +{ + FIXME("MakeShellURLFromPathA() stub\n"); + lpUrl = NULL; + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHParseDarwinIDFromCacheW(LPCWSTR lpUnknown1, LPWSTR lpUnknown2) +{ + FIXME("SHParseDarwinIDFromCacheW() stub\n"); + lpUnknown2 = NULL; + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHMultiFileProperties(IDataObject *pDataObject, DWORD dwFlags) +{ + FIXME("SHMultiFileProperties() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHCreatePropertyBag(REFIID refIId, LPVOID *lpUnknown) +{ + /* Call SHCreatePropertyBagOnMemory() from shlwapi.dll */ + FIXME("SHCreatePropertyBag() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHCopyMonikerToTemp(IMoniker *pMoniker, LPCWSTR lpInput, LPWSTR lpOutput, INT cchMax) +{ + /* Unimplemented in XP SP3 */ + TRACE("SHCopyMonikerToTemp() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HLOCAL +WINAPI +CheckWinIniForAssocs(VOID) +{ + FIXME("CheckWinIniForAssocs() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHGetSetFolderCustomSettingsW(LPSHFOLDERCUSTOMSETTINGSW pfcs, + LPCWSTR pszPath, + DWORD dwReadWrite) +{ + FIXME("SHGetSetFolderCustomSettingsW() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHGetSetFolderCustomSettingsA(LPSHFOLDERCUSTOMSETTINGSA pfcs, + LPCSTR pszPath, + DWORD dwReadWrite) +{ + FIXME("SHGetSetFolderCustomSettingsA() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHOpenPropSheetA(LPCSTR lpCaption, + HKEY hKeys[], + UINT uCount, + const CLSID *pClsID, + IDataObject *pDataObject, + IShellBrowser *pShellBrowser, + LPCSTR lpStartPage) +{ + FIXME("SHOpenPropSheetA() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHOpenPropSheetW(LPCWSTR lpCaption, + HKEY hKeys[], + UINT uCount, + const CLSID *pClsID, + IDataObject *pDataObject, + IShellBrowser *pShellBrowser, + LPCWSTR lpStartPage) +{ + FIXME("SHOpenPropSheetW() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +CDefFolderMenu_MergeMenu(HINSTANCE hInstance, + UINT uMainMerge, + UINT uPopupMerge, + LPQCMINFO lpQcmInfo) +{ + FIXME("CDefFolderMenu_MergeMenu() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +CDefFolderMenu_Create(LPITEMIDLIST pidlFolder, + HWND hwnd, + UINT uidl, + PCUITEMID_CHILD_ARRAY *apidl, + IShellFolder *psf, + LPFNDFMCALLBACK lpfn, + HKEY hProgID, + HKEY hBaseProgID, + IContextMenu **ppcm) +{ + FIXME("CDefFolderMenu_Create() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHChangeRegistrationReceive(LPVOID lpUnknown1, DWORD dwUnknown2) +{ + FIXME("SHChangeRegistrationReceive() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +SHWaitOp_Operate(LPVOID lpUnknown1, DWORD dwUnknown2) +{ + FIXME("SHWaitOp_Operate() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +SHChangeNotifyReceive(LONG lUnknown, UINT uUnknown, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + FIXME("SHChangeNotifyReceive() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +RealDriveTypeFlags(INT iDrive, BOOL bUnknown) +{ + FIXME("RealDriveTypeFlags() stub\n"); + return 1; +} + +/* + * Unimplemented + */ +EXTERN_C LPWSTR +WINAPI +StrRStrW(LPWSTR lpSrc, LPWSTR lpLast, LPWSTR lpSearch) +{ + FIXME("StrRStrW() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C LPWSTR +WINAPI +StrRStrA(LPSTR lpSrc, LPSTR lpLast, LPSTR lpSearch) +{ + FIXME("StrRStrA() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C LONG +WINAPI +ShellHookProc(INT iCode, WPARAM wParam, LPARAM lParam) +{ + /* Unimplemented in WinXP SP3 */ + TRACE("ShellHookProc() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +ShellExec_RunDLL(HWND hwnd, HINSTANCE hInstance, LPWSTR pszCmdLine, int nCmdShow) +{ + FIXME("ShellExec_RunDLL() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +ShellExec_RunDLLA(HWND hwnd, HINSTANCE hInstance, LPSTR pszCmdLine, int nCmdShow) +{ + FIXME("ShellExec_RunDLLA() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +ShellExec_RunDLLW(HWND hwnd, HINSTANCE hInstance, LPWSTR pszCmdLine, int nCmdShow) +{ + FIXME("ShellExec_RunDLLW() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SheShortenPathW(LPWSTR lpPath, BOOL bShorten) +{ + FIXME("SheShortenPathW() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SheShortenPathA(LPSTR lpPath, BOOL bShorten) +{ + FIXME("SheShortenPathA() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +SheSetCurDrive(INT iIndex) +{ + FIXME("SheSetCurDrive() stub\n"); + return 1; +} + +/* + * Unimplemented + */ +EXTERN_C LPWSTR +WINAPI +SheRemoveQuotesW(LPWSTR lpInput) +{ + FIXME("SheRemoveQuotesW() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C LPSTR +WINAPI +SheRemoveQuotesA(LPSTR lpInput) +{ + FIXME("SheRemoveQuotesA() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +SheGetPathOffsetW(LPWSTR lpPath) +{ + FIXME("SheGetPathOffsetW() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SheGetDirExW(LPWSTR lpDrive, + LPDWORD lpCurDirLen, + LPWSTR lpCurDir) +{ + FIXME("SheGetDirExW() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +SheGetCurDrive(VOID) +{ + FIXME("SheGetCurDrive() stub\n"); + return 1; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +SheFullPathW(LPWSTR lpFullName, DWORD dwPathSize, LPWSTR lpBuffer) +{ + FIXME("SheFullPathW() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +SheFullPathA(LPSTR lpFullName, DWORD dwPathSize, LPSTR lpBuffer) +{ + FIXME("SheFullPathA() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SheConvertPathW(LPWSTR lpCmd, LPWSTR lpFileName, UINT uCmdLen) +{ + FIXME("SheConvertPathW() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +SheChangeDirExW(LPWSTR lpDir) +{ + FIXME("SheChangeDirExW() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +SheChangeDirExA(LPSTR lpDir) +{ + FIXME("SheChangeDirExA() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHInvokePrinterCommandW(HWND hwnd, + UINT uAction, + LPCWSTR lpBuf1, + LPCWSTR lpBuf2, + BOOL fModal) +{ + FIXME("SHInvokePrinterCommandW() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHInvokePrinterCommandA(HWND hwnd, + UINT uAction, + LPCSTR lpBuf1, + LPCSTR lpBuf2, + BOOL fModal) +{ + FIXME("SHInvokePrinterCommandA() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHCreateQueryCancelAutoPlayMoniker(IMoniker **ppmoniker) +{ + FIXME("SHCreateQueryCancelAutoPlayMoniker() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHCreateProcessAsUserW(PSHCREATEPROCESSINFOW pscpi) +{ + FIXME("SHCreateProcessAsUserW() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHChangeNotifySuspendResume(BOOL bSuspend, + LPITEMIDLIST pidl, + BOOL bRecursive, + DWORD dwReserved) +{ + FIXME("SHChangeNotifySuspendResume() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +RegenerateUserEnvironment(LPVOID *lpUnknown, BOOL bUnknown) +{ + FIXME("RegenerateUserEnvironment() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C HINSTANCE +WINAPI +RealShellExecuteExA(HWND hwnd, + LPCSTR lpOperation, + LPCSTR lpFile, + LPCSTR lpParameters, + LPCSTR lpDirectory, + LPSTR lpReturn, + LPCSTR lpTitle, + LPSTR lpReserved, + WORD nShowCmd, + HANDLE *lpProcess, + DWORD dwFlags) +{ + FIXME("RealShellExecuteExA() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C HINSTANCE +WINAPI +RealShellExecuteExW(HWND hwnd, + LPCWSTR lpOperation, + LPCWSTR lpFile, + LPCWSTR lpParameters, + LPCWSTR lpDirectory, + LPWSTR lpReturn, + LPCWSTR lpTitle, + LPWSTR lpReserved, + WORD nShowCmd, + HANDLE *lpProcess, + DWORD dwFlags) +{ + FIXME("RealShellExecuteExW() stub\n"); + return NULL; +} + +/* + * Implemented + */ +EXTERN_C HINSTANCE +WINAPI +RealShellExecuteA(HWND hwnd, + LPCSTR lpOperation, + LPCSTR lpFile, + LPCSTR lpParameters, + LPCSTR lpDirectory, + LPSTR lpReturn, + LPCSTR lpTitle, + LPSTR lpReserved, + WORD nShowCmd, + HANDLE *lpProcess) +{ + return RealShellExecuteExA(hwnd, + lpOperation, + lpFile, + lpParameters, + lpDirectory, + lpReturn, + lpTitle, + lpReserved, + nShowCmd, + lpProcess, + 0); +} + +/* + * Implemented + */ +EXTERN_C HINSTANCE +WINAPI +RealShellExecuteW(HWND hwnd, + LPCWSTR lpOperation, + LPCWSTR lpFile, + LPCWSTR lpParameters, + LPCWSTR lpDirectory, + LPWSTR lpReturn, + LPCWSTR lpTitle, + LPWSTR lpReserved, + WORD nShowCmd, + HANDLE *lpProcess) +{ + return RealShellExecuteExW(hwnd, + lpOperation, + lpFile, + lpParameters, + lpDirectory, + lpReturn, + lpTitle, + lpReserved, + nShowCmd, + lpProcess, + 0); +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +PrintersGetCommand_RunDLL(HWND hwnd, HINSTANCE hInstance, LPWSTR pszCmdLine, int nCmdShow) +{ + FIXME("PrintersGetCommand_RunDLL() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +PrintersGetCommand_RunDLLA(HWND hwnd, HINSTANCE hInstance, LPSTR pszCmdLine, int nCmdShow) +{ + FIXME("PrintersGetCommand_RunDLLA() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +PrintersGetCommand_RunDLLW(HWND hwnd, HINSTANCE hInstance, LPWSTR pszCmdLine, int nCmdShow) +{ + FIXME("PrintersGetCommand_RunDLLW() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C IShellFolderViewCB* +WINAPI +SHGetShellFolderViewCB(HWND hwnd) +{ + FIXME("SHGetShellFolderViewCB() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +SHLookupIconIndexA(LPCSTR lpName, INT iIndex, UINT uFlags) +{ + FIXME("SHLookupIconIndexA() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +SHLookupIconIndexW(LPCWSTR lpName, INT iIndex, UINT uFlags) +{ + FIXME("SHLookupIconIndexW() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C HANDLE +WINAPI +PifMgr_OpenProperties(LPCWSTR lpAppPath, LPCWSTR lpPifPath, UINT hInfIndex, UINT options) +{ + FIXME("PifMgr_OpenProperties() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +PifMgr_GetProperties(HANDLE hHandle, LPCSTR lpName, LPVOID lpUnknown, INT iUnknown, UINT uUnknown) +{ + FIXME("PifMgr_GetProperties() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +PifMgr_SetProperties(HANDLE hHandle, LPCSTR lpName, LPCVOID lpUnknown, INT iUnknown, UINT uUnknown) +{ + FIXME("PifMgr_SetProperties() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHStartNetConnectionDialogA(HWND hwnd, + LPCSTR pszRemoteName, + DWORD dwType) +{ + FIXME("SHStartNetConnectionDialogA() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHStartNetConnectionDialogW(HWND hwnd, + LPCWSTR pszRemoteName, + DWORD dwType) +{ + FIXME("SHStartNetConnectionDialogW() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HANDLE +WINAPI +PifMgr_CloseProperties(HANDLE hHandle, UINT uUnknown) +{ + FIXME("PifMgr_CloseProperties() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +DAD_DragEnterEx2(HWND hwndTarget, + POINT ptStart, + IDataObject *pdtObject) +{ + FIXME("DAD_DragEnterEx2() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +IsSuspendAllowed(VOID) +{ + FIXME("IsSuspendAllowed() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C UINT +WINAPI +SHGetNetResource(LPVOID lpUnknown1, UINT iIndex, LPVOID lpUnknown2, UINT cchMax) +{ + FIXME("SHGetNetResource() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +DragQueryInfo(HDROP hDrop, DRAGINFO *pDragInfo) +{ + FIXME("DragQueryInfo() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C LPVOID +WINAPI +DDECreatePostNotify(LPVOID lpUnknown) +{ + FIXME("DDECreatePostNotify() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHIsBadInterfacePtr(LPVOID pv, UINT ucb) +{ + FIXME("SHIsBadInterfacePtr() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +Activate_RunDLL(DWORD dwProcessId, LPVOID lpUnused1, LPVOID lpUnused2, LPVOID lpUnused3) +{ + FIXME("Activate_RunDLL() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +AppCompat_RunDLLW(HWND hwnd, HINSTANCE hInstance, LPWSTR pszCmdLine, int nCmdShow) +{ + FIXME("AppCompat_RunDLLW() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +Control_RunDLLAsUserW(HWND hwnd, HINSTANCE hInstance, LPWSTR pszCmdLine, int nCmdShow) +{ + FIXME("Control_RunDLLAsUserW() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C UINT +WINAPI +DragQueryFileAorW(HDROP hDrop, UINT iIndex, LPWSTR lpFile, UINT ucb, BOOL bUnicode, BOOL bShorten) +{ + FIXME("DragQueryFileAorW() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C DWORD +WINAPI +SHNetConnectionDialog(HWND hwndOwner, + LPCWSTR lpstrRemoteName, + DWORD dwType) +{ + FIXME("SHNetConnectionDialog() stub\n"); + return ERROR_INVALID_PARAMETER; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +DAD_SetDragImageFromListView(HWND hwnd, POINT pt) +{ + FIXME("DAD_SetDragImageFromListView() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C void +WINAPI +SHHandleDiskFull(HWND hwndOwner, UINT uDrive) +{ + FIXME("SHHandleDiskFull() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +ILGetPseudoNameW(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, LPWSTR szStr, INT iUnknown) +{ + /* Unimplemented in WinXP SP3 */ + TRACE("ILGetPseudoNameW() stub\n"); + *szStr = 0; + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C VOID +WINAPI +SHGlobalDefect(DWORD dwUnknown) +{ + /* Unimplemented in WinXP SP3 */ + TRACE("SHGlobalDefect() stub\n"); +} + +/* + * Unimplemented + */ +EXTERN_C LPITEMIDLIST +WINAPI +Printers_GetPidl(LPCITEMIDLIST pidl, LPCWSTR lpName) +{ + FIXME("Printers_GetPidl() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +Int64ToString(LONGLONG llInt64, + LPWSTR lpOut, + UINT uSize, + BOOL bUseFormat, + NUMBERFMT *pNumberFormat, + DWORD dwNumberFlags) +{ + FIXME("Int64ToString() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C INT +WINAPI +LargeIntegerToString(LARGE_INTEGER *pLargeInt, + LPWSTR lpOut, + UINT uSize, + BOOL bUseFormat, + NUMBERFMT *pNumberFormat, + DWORD dwNumberFlags) +{ + FIXME("LargeIntegerToString() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C LONG +WINAPI +Printers_AddPrinterPropPages(LPVOID lpUnknown1, LPVOID lpUnknown2) +{ + FIXME("Printers_AddPrinterPropPages() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C WORD +WINAPI +ExtractIconResInfoA(HANDLE hHandle, + LPSTR lpFile, + WORD wIndex, + LPWORD lpSize, + LPHANDLE lpIcon) +{ + FIXME("ExtractIconResInfoA() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C WORD +WINAPI +ExtractIconResInfoW(HANDLE hHandle, + LPWSTR lpFile, + WORD wIndex, + LPWORD lpSize, + LPHANDLE lpIcon) +{ + FIXME("ExtractIconResInfoW() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C DWORD +WINAPI +ExtractVersionResource16W(LPWSTR lpName, LPHANDLE lpHandle) +{ + FIXME("ExtractVersionResource16W() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL* +WINAPI +FindExeDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + FIXME("FindExeDlgProc() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C HANDLE +WINAPI +InternalExtractIconListW(HANDLE hHandle, + LPWSTR lpFileName, + LPINT lpCount) +{ + FIXME("InternalExtractIconListW() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C HANDLE +WINAPI +InternalExtractIconListA(HANDLE hHandle, + LPSTR lpFileName, + LPINT lpCount) +{ + FIXME("InternalExtractIconListA() stub\n"); + return NULL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +FirstUserLogon(LPWSTR lpUnknown1, LPWSTR lpUnknown2) +{ + FIXME("FirstUserLogon() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHSetFolderPathA(int csidl, + HANDLE hToken, + DWORD dwFlags, + LPCSTR pszPath) +{ + FIXME("SHSetFolderPathA() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHSetFolderPathW(int csidl, + HANDLE hToken, + DWORD dwFlags, + LPCWSTR pszPath) +{ + FIXME("SHSetFolderPathW() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHGetUserPicturePathW(LPCWSTR lpPath, int csidl, LPVOID lpUnknown) +{ + FIXME("SHGetUserPicturePathW() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C HRESULT +WINAPI +SHSetUserPicturePathW(LPCWSTR lpPath, int csidl, LPVOID lpUnknown) +{ + FIXME("SHGetUserPicturePathA() stub\n"); + return E_FAIL; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHOpenEffectiveToken(LPVOID Token) +{ + FIXME("SHOpenEffectiveToken() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHTestTokenPrivilegeW(HANDLE hToken, LPDWORD ReturnLength) +{ + FIXME("SHTestTokenPrivilegeW() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHShouldShowWizards(LPVOID lpUnknown) +{ + FIXME("SHShouldShowWizards() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +PathIsSlowW(LPCWSTR pszFile, DWORD dwFileAttr) +{ + FIXME("PathIsSlowW() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +PathIsSlowA(LPCSTR pszFile, DWORD dwFileAttr) +{ + FIXME("PathIsSlowA() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C DWORD +WINAPI +SHGetUserDisplayName(LPWSTR lpName, PULONG puSize) +{ + FIXME("SHGetUserDisplayName() stub\n"); + wcscpy(lpName, L"UserName"); + return ERROR_SUCCESS; +} + +/* + * Unimplemented + */ +EXTERN_C DWORD +WINAPI +SHGetProcessDword(DWORD dwUnknown1, DWORD dwUnknown2) +{ + /* Unimplemented in WinXP SP3 */ + TRACE("SHGetProcessDword() stub\n"); + return 0; +} + +/* + * Unimplemented + */ +EXTERN_C BOOL +WINAPI +SHTestTokenMembership(HANDLE TokenHandle, ULONG SidToCheck) +{ + FIXME("SHTestTokenMembership() stub\n"); + return FALSE; +} + +/* + * Unimplemented + */ +EXTERN_C LPVOID +WINAPI +SHGetUserSessionId(HANDLE hHandle) +{ + FIXME("SHGetUserSessionId() stub\n"); + return NULL; +} diff --git a/reactos/dll/win32/shell32_new/systray.cpp b/reactos/dll/win32/shell32_new/systray.cpp new file mode 100644 index 00000000000..81297a78907 --- /dev/null +++ b/reactos/dll/win32/shell32_new/systray.cpp @@ -0,0 +1,196 @@ +/* + * Systray handling + * + * Copyright 1999 Kai Morich + * Copyright 2004 Mike Hearn, for CodeWeavers + * Copyright 2005 Robert Shearman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define NONAMELESSUNION +#define NONAMELESSSTRUCT + +#include + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winnls.h" +#include "winuser.h" +#include "shellapi.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(systray); + +static const WCHAR classname[] = /* Shell_TrayWnd */ {'S','h','e','l','l','_','T','r','a','y','W','n','d','\0'}; + +/************************************************************************* + * Shell_NotifyIcon [SHELL32.296] + * Shell_NotifyIconA [SHELL32.297] + */ +BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA pnid) +{ + NOTIFYICONDATAW nidW; + INT cbSize; + + /* Validate the cbSize as Windows XP does */ + if (pnid->cbSize != NOTIFYICONDATAA_V1_SIZE && + pnid->cbSize != NOTIFYICONDATAA_V2_SIZE && + pnid->cbSize != NOTIFYICONDATAA_V3_SIZE && + pnid->cbSize != sizeof(NOTIFYICONDATAA)) + { + WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n", + pnid->cbSize, NOTIFYICONDATAA_V1_SIZE); + cbSize = NOTIFYICONDATAA_V1_SIZE; + } + else + cbSize = pnid->cbSize; + + ZeroMemory(&nidW, sizeof(nidW)); + nidW.cbSize = sizeof(nidW); + nidW.hWnd = pnid->hWnd; + nidW.uID = pnid->uID; + nidW.uFlags = pnid->uFlags; + nidW.uCallbackMessage = pnid->uCallbackMessage; + nidW.hIcon = pnid->hIcon; + + /* szTip */ + if (pnid->uFlags & NIF_TIP) + MultiByteToWideChar(CP_ACP, 0, pnid->szTip, -1, nidW.szTip, sizeof(nidW.szTip)/sizeof(WCHAR)); + + if (cbSize >= NOTIFYICONDATAA_V2_SIZE) + { + nidW.dwState = pnid->dwState; + nidW.dwStateMask = pnid->dwStateMask; + + /* szInfo, szInfoTitle */ + if (pnid->uFlags & NIF_INFO) + { + MultiByteToWideChar(CP_ACP, 0, pnid->szInfo, -1, nidW.szInfo, sizeof(nidW.szInfo)/sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, pnid->szInfoTitle, -1, nidW.szInfoTitle, sizeof(nidW.szInfoTitle)/sizeof(WCHAR)); + } + + nidW.u.uTimeout = pnid->u.uTimeout; + nidW.dwInfoFlags = pnid->dwInfoFlags; + } + + if (cbSize >= NOTIFYICONDATAA_V3_SIZE) + nidW.guidItem = pnid->guidItem; + + if (cbSize >= sizeof(NOTIFYICONDATAA)) + nidW.hBalloonIcon = pnid->hBalloonIcon; + return Shell_NotifyIconW(dwMessage, &nidW); +} + +/************************************************************************* + * Shell_NotifyIconW [SHELL32.298] + */ +BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW nid) +{ + HWND tray; + COPYDATASTRUCT cds; + char *buffer = NULL; + BOOL ret; + + TRACE("dwMessage = %d, nid->cbSize=%d\n", dwMessage, nid->cbSize); + + /* Validate the cbSize so that WM_COPYDATA doesn't crash the application */ + if (nid->cbSize != NOTIFYICONDATAW_V1_SIZE && + nid->cbSize != NOTIFYICONDATAW_V2_SIZE && + nid->cbSize != NOTIFYICONDATAW_V3_SIZE && + nid->cbSize != sizeof(NOTIFYICONDATAW)) + { + NOTIFYICONDATAW newNid; + + WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n", + nid->cbSize, NOTIFYICONDATAW_V1_SIZE); + CopyMemory(&newNid, nid, NOTIFYICONDATAW_V1_SIZE); + newNid.cbSize = NOTIFYICONDATAW_V1_SIZE; + return Shell_NotifyIconW(dwMessage, &newNid); + } + + tray = FindWindowExW(0, NULL, classname, NULL); + if (!tray) return FALSE; + + cds.dwData = dwMessage; + + /* FIXME: if statement only needed because we don't support interprocess + * icon handles */ + if (nid->uFlags & NIF_ICON) + { + ICONINFO iconinfo; + BITMAP bmMask; + BITMAP bmColour; + LONG cbMaskBits; + LONG cbColourBits; + + if (!GetIconInfo(nid->hIcon, &iconinfo)) + goto noicon; + + if (!GetObjectW(iconinfo.hbmMask, sizeof(bmMask), &bmMask) || + !GetObjectW(iconinfo.hbmColor, sizeof(bmColour), &bmColour)) + { + DeleteObject(iconinfo.hbmMask); + DeleteObject(iconinfo.hbmColor); + goto noicon; + } + + cbMaskBits = (bmMask.bmPlanes * bmMask.bmWidth * bmMask.bmHeight * bmMask.bmBitsPixel) / 8; + cbColourBits = (bmColour.bmPlanes * bmColour.bmWidth * bmColour.bmHeight * bmColour.bmBitsPixel) / 8; + cds.cbData = nid->cbSize + 2*sizeof(BITMAP) + cbMaskBits + cbColourBits; + buffer = HeapAlloc(GetProcessHeap(), 0, cds.cbData); + if (!buffer) + { + DeleteObject(iconinfo.hbmMask); + DeleteObject(iconinfo.hbmColor); + return FALSE; + } + cds.lpData = buffer; + + memcpy(buffer, nid, nid->cbSize); + buffer += nid->cbSize; + memcpy(buffer, &bmMask, sizeof(bmMask)); + buffer += sizeof(bmMask); + memcpy(buffer, &bmColour, sizeof(bmColour)); + buffer += sizeof(bmColour); + GetBitmapBits(iconinfo.hbmMask, cbMaskBits, buffer); + buffer += cbMaskBits; + GetBitmapBits(iconinfo.hbmColor, cbColourBits, buffer); + + /* Reset pointer to allocated block so it can be freed later. + * Note that cds.lpData cannot be passed to HeapFree since it + * points to nid when no icon info is found. */ + buffer = cds.lpData; + + DeleteObject(iconinfo.hbmMask); + DeleteObject(iconinfo.hbmColor); + } + else + { +noicon: + cds.cbData = nid->cbSize; + cds.lpData = nid; + } + + ret = SendMessageW(tray, WM_COPYDATA, (WPARAM)nid->hWnd, (LPARAM)&cds); + + /* FIXME: if statement only needed because we don't support interprocess + * icon handles */ + HeapFree(GetProcessHeap(), 0, buffer); + + return ret; +} diff --git a/reactos/dll/win32/shell32_new/toolband.cpp b/reactos/dll/win32/shell32_new/toolband.cpp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/toolband.h b/reactos/dll/win32/shell32_new/toolband.h new file mode 100644 index 00000000000..e69de29bb2d diff --git a/reactos/dll/win32/shell32_new/undocshell.h b/reactos/dll/win32/shell32_new/undocshell.h new file mode 100644 index 00000000000..a51af2224fa --- /dev/null +++ b/reactos/dll/win32/shell32_new/undocshell.h @@ -0,0 +1,537 @@ +/* + * Copyright 1999, 2000 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_UNDOCSHELL_H +#define __WINE_UNDOCSHELL_H + +#include + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "commctrl.h" +#include "shlobj.h" + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +/**************************************************************************** + * IDList Functions + */ +BOOL WINAPI ILGetDisplayName( + LPCITEMIDLIST pidl, + LPVOID path); + +/* type parameter for ILGetDisplayNameEx() */ +#define ILGDN_FORPARSING 0 +#define ILGDN_NORMAL 1 +#define ILGDN_INFOLDER 2 + +BOOL WINAPI ILGetDisplayNameEx( + LPSHELLFOLDER psf, + LPCITEMIDLIST pidl, + LPVOID path, + DWORD type); + +LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl); +void WINAPI ILGlobalFree(LPITEMIDLIST pidl); +LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath); //FIXME +LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath); + +HRESULT WINAPI SHILCreateFromPathA ( + LPCSTR path, + LPITEMIDLIST * ppidl, + DWORD *attributes); + +HRESULT WINAPI SHILCreateFromPathW ( + LPCWSTR path, + LPITEMIDLIST * ppidl, + DWORD *attributes); + +/* + string functions +*/ +BOOL WINAPI StrRetToStrNA(LPSTR,DWORD,LPSTRRET,const ITEMIDLIST*); +BOOL WINAPI StrRetToStrNW(LPWSTR,DWORD,LPSTRRET,const ITEMIDLIST*); + +/**************************************************************************** + * Shell Common Dialogs + */ + +/* RunFileDlg flags */ +#define RFF_NOBROWSE 0x01 +#define RFF_NODEFAULT 0x02 +#define RFF_CALCDIRECTORY 0x04 +#define RFF_NOLABEL 0x08 +#define RFF_NOSEPARATEMEM 0x20 /* NT only */ + +#define DE_SAMEFILE 0x71 + +/* RunFileFlg notification structure */ +typedef struct +{ + NMHDR hdr; + LPCSTR lpFile; + LPCSTR lpDirectory; + int nShow; +} NM_RUNFILEDLG, * LPNM_RUNFILEDLG; + +/* RunFileDlg notification return values */ +#define RF_OK 0x00 +#define RF_CANCEL 0x01 +#define RF_RETRY 0x02 + +void WINAPI RunFileDlg( + HWND hwndOwner, + HICON hIcon, + LPCSTR lpstrDirectory, + LPCSTR lpstrTitle, + LPCSTR lpstrDescription, + UINT uFlags); + +void WINAPI ExitWindowsDialog(HWND hwndOwner); + +BOOL WINAPI SHFindComputer( + LPCITEMIDLIST pidlRoot, + LPCITEMIDLIST pidlSavedSearch); + +void WINAPI SHHandleDiskFull(HWND hwndOwner, + UINT uDrive); + +int WINAPI SHOutOfMemoryMessageBox( + HWND hwndOwner, + LPCSTR lpCaption, + UINT uType); + +DWORD WINAPI SHNetConnectionDialog( + HWND hwndOwner, + LPCWSTR lpstrRemoteName, + DWORD dwType); + +/**************************************************************************** + * Cabinet Window Messages + */ + +#define CWM_SETPATH (WM_USER + 2) +#define CWM_WANTIDLE (WM_USER + 3) +#define CWM_GETSETCURRENTINFO (WM_USER + 4) +#define CWM_SELECTITEM (WM_USER + 5) +#define CWM_SELECTITEMSTR (WM_USER + 6) +#define CWM_GETISHELLBROWSER (WM_USER + 7) +#define CWM_TESTPATH (WM_USER + 9) +#define CWM_STATECHANGE (WM_USER + 10) +#define CWM_GETPATH (WM_USER + 12) + +/* CWM_TESTPATH types */ +#define CWTP_ISEQUAL 0 +#define CWTP_ISCHILD 1 + +/* CWM_TESTPATH structure */ +typedef struct +{ + DWORD dwType; + ITEMIDLIST idl; +} CWTESTPATHSTRUCT,* LPCWTESTPATHSTRUCT; + +/**************************************************************************** + * System Imagelist Routines + */ + +int WINAPI Shell_GetCachedImageIndexA( + LPCSTR lpszFileName, + int nIconIndex, + UINT bSimulateDoc); + +BOOL WINAPI Shell_GetImageLists( + HIMAGELIST *lphimlLarge, + HIMAGELIST *lphimlSmall); + +HICON WINAPI SHGetFileIcon( + DWORD dwReserved, + LPCSTR lpszPath, + DWORD dwFileAttributes, + UINT uFlags); + +BOOL WINAPI FileIconInit(BOOL bFullInit); + +/**************************************************************************** + * File Menu Routines + */ +/* FileMenu_Create nSelHeight constants */ +#define FM_DEFAULT_SELHEIGHT -1 +#define FM_FULL_SELHEIGHT 0 + +/* FileMenu_Create flags */ +#define FMF_SMALL_ICONS 0x00 +#define FMF_LARGE_ICONS 0x08 +#define FMF_NO_COLUMN_BREAK 0x10 + +HMENU WINAPI FileMenu_Create( + COLORREF crBorderColor, + int nBorderWidth, + HBITMAP hBorderBmp, + int nSelHeight, + UINT uFlags); + +void WINAPI FileMenu_Destroy(HMENU hMenu); + +/* FileMenu_AppendItem constants */ +#define FM_SEPARATOR (LPCSTR)1 +#define FM_BLANK_ICON -1 +#define FM_DEFAULT_HEIGHT 0 + +BOOL WINAPI FileMenu_AppendItem( + HMENU hMenu, + LPCSTR lpszText, + UINT uID, + int iIcon, + HMENU hMenuPopup, + int nItemHeight); + +/* FileMenu_InsertUsingPidl flags */ +#define FMF_NO_EMPTY_ITEM 0x01 +#define FMF_NO_PROGRAM_GROUPS 0x04 + +/* FileMenu_InsertUsingPidl callback function */ +typedef void (CALLBACK *LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile); + +int WINAPI FileMenu_InsertUsingPidl( + HMENU hMenu, + UINT uID, + LPCITEMIDLIST pidl, + UINT uFlags, + UINT uEnumFlags, + LPFNFMCALLBACK lpfnCallback); + +int WINAPI FileMenu_ReplaceUsingPidl( + HMENU hMenu, + UINT uID, + LPCITEMIDLIST pidl, + UINT uEnumFlags, + LPFNFMCALLBACK lpfnCallback); + +void WINAPI FileMenu_Invalidate(HMENU hMenu); + +HMENU WINAPI FileMenu_FindSubMenuByPidl( + HMENU hMenu, + LPCITEMIDLIST pidl); + +BOOL WINAPI FileMenu_TrackPopupMenuEx( + HMENU hMenu, + UINT uFlags, + int x, + int y, + HWND hWnd, + LPTPMPARAMS lptpm); + +BOOL WINAPI FileMenu_GetLastSelectedItemPidls( + UINT uReserved, + LPCITEMIDLIST *ppidlFolder, + LPCITEMIDLIST *ppidlItem); + +LRESULT WINAPI FileMenu_MeasureItem( + HWND hWnd, + LPMEASUREITEMSTRUCT lpmis); + +LRESULT WINAPI FileMenu_DrawItem( + HWND hWnd, + LPDRAWITEMSTRUCT lpdis); + +BOOL WINAPI FileMenu_InitMenuPopup(HMENU hMenu); + +void WINAPI FileMenu_AbortInitMenu(void); + +LRESULT WINAPI FileMenu_HandleMenuChar( + HMENU hMenu, + WPARAM wParam); + +BOOL WINAPI FileMenu_DeleteAllItems(HMENU hMenu); + +BOOL WINAPI FileMenu_DeleteItemByCmd( + HMENU hMenu, + UINT uID); + +BOOL WINAPI FileMenu_DeleteItemByIndex( + HMENU hMenu, + UINT uPos); + +BOOL WINAPI FileMenu_DeleteMenuItemByFirstID( + HMENU hMenu, + UINT uID); + +BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu); + +BOOL WINAPI FileMenu_EnableItemByCmd( + HMENU hMenu, + UINT uID, + BOOL bEnable); + +DWORD WINAPI FileMenu_GetItemExtent( + HMENU hMenu, + UINT uPos); + +int WINAPI FileMenu_AppendFilesForPidl( + HMENU hMenu, + LPCITEMIDLIST pidl, + BOOL bAddSeparator); + +int WINAPI FileMenu_AddFilesForPidl( + HMENU hMenu, + UINT uReserved, + UINT uID, + LPCITEMIDLIST pidl, + UINT uFlags, + UINT uEnumFlags, + LPFNFMCALLBACK lpfnCallback); + +/**************************************************************************** + * Drag And Drop Routines + */ + +HRESULT WINAPI SHRegisterDragDrop( + HWND hWnd, + LPDROPTARGET lpDropTarget); + +HRESULT WINAPI SHRevokeDragDrop(HWND hWnd); + +BOOL WINAPI DAD_DragEnter(HWND hWnd); + +BOOL WINAPI DAD_SetDragImageFromListView( + HWND hWnd, + POINT pt); + +BOOL WINAPI DAD_ShowDragImage(BOOL bShow); + +/**************************************************************************** + * Path Manipulation Routines + */ + +BOOL WINAPI PathAppendAW(LPVOID lpszPath1, LPCVOID lpszPath2); + +LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile); + +LPVOID WINAPI PathAddBackslashAW(LPVOID path); + +LPVOID WINAPI PathBuildRootAW(LPVOID lpszPath, int drive); + +LPVOID WINAPI PathFindExtensionAW(LPCVOID path); + +LPVOID WINAPI PathFindFileNameAW(LPCVOID path); + +LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath, DWORD void1, DWORD void2); + +LPVOID WINAPI PathGetArgsAW(LPVOID lpszPath); + +BOOL WINAPI PathRemoveFileSpecAW(LPVOID lpszPath); + +void WINAPI PathRemoveBlanksAW(LPVOID lpszPath); + +VOID WINAPI PathQuoteSpacesAW(LPVOID path); + +void WINAPI PathUnquoteSpacesAW(LPVOID lpszPath); + +BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath); + +BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath); + +BOOL WINAPI PathIsRootAW(LPCVOID x); + +BOOL WINAPI PathIsExeAW(LPCVOID lpszPath); + +BOOL WINAPI PathIsDirectoryAW(LPCVOID lpszPath); + +BOOL WINAPI PathFileExistsAW(LPCVOID lpszPath); + +BOOL WINAPI PathMatchSpecAW(LPVOID lpszPath, LPVOID lpszSpec); + +BOOL WINAPI PathMakeUniqueNameAW( + LPVOID lpszBuffer, + DWORD dwBuffSize, + LPCVOID lpszShortName, + LPCVOID lpszLongName, + LPCVOID lpszPathName); + +BOOL WINAPI PathYetAnotherMakeUniqueName( + LPWSTR lpszBuffer, + LPCWSTR lpszPathName, + LPCWSTR lpszShortName, + LPCWSTR lpszLongName); + +BOOL WINAPI PathQualifyA(LPCSTR path); +BOOL WINAPI PathQualifyW(LPCWSTR path); +#define PathQualify WINELIB_NAME_AW(PathQualify) +BOOL WINAPI PathQualifyAW(LPCVOID path); + + +/* PathResolve flags */ +#define PRF_CHECKEXISTANCE 0x01 +#define PRF_EXECUTABLE 0x02 +#define PRF_QUALIFYONPATH 0x04 +#define PRF_WINDOWS31 0x08 + +BOOL WINAPI PathResolveAW(LPVOID lpszPath, LPCVOID *alpszPaths, DWORD dwFlags); + +VOID WINAPI PathSetDlgItemPathAW(HWND hDlg, int nIDDlgItem, LPCVOID lpszPath); + +/* PathProcessCommand flags */ +#define PPCF_QUOTEPATH 0x01 /* implies PPCF_INCLUDEARGS */ +#define PPCF_INCLUDEARGS 0x02 +//#define PPCF_NODIRECTORIES 0x10 move to shlobj +#define PPCF_DONTRESOLVE 0x20 +#define PPCF_PATHISRELATIVE 0x40 + +HRESULT WINAPI PathProcessCommandAW(LPCVOID lpszPath, LPVOID lpszBuff, + DWORD dwBuffSize, DWORD dwFlags); + +void WINAPI PathStripPathAW(LPVOID lpszPath); + +BOOL WINAPI PathStripToRootAW(LPVOID lpszPath); + +void WINAPI PathRemoveArgsAW(LPVOID lpszPath); + +void WINAPI PathRemoveExtensionAW(LPVOID lpszPath); + +int WINAPI PathParseIconLocationAW(LPVOID lpszPath); + +BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2); + +BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID *sOtherDirs); + +/**************************************************************************** + * Shell Namespace Routines + */ + +/* Generic structure used by several messages */ +typedef struct +{ + DWORD dwReserved; + DWORD dwReserved2; + LPCITEMIDLIST pidl; + LPDWORD lpdwUser; +} SFVCBINFO, * LPSFVCBINFO; +typedef const SFVCBINFO * LPCSFVCBINFO; + +/* SFVCB_SELECTIONCHANGED structure */ +typedef struct +{ + UINT uOldState; + UINT uNewState; + LPCITEMIDLIST pidl; + LPDWORD lpdwUser; +} SFVSELECTSTATE, * LPSFVSELECTSTATE; +typedef const SFVSELECTSTATE * LPCSFVSELECTSTATE; + +/* SFVCB_COPYHOOKCALLBACK structure */ +typedef struct +{ + HWND hwnd; + UINT wFunc; + UINT wFlags; + LPCSTR pszSrcFile; + DWORD dwSrcAttribs; + LPCSTR pszDestFile; + DWORD dwDestAttribs; +} SFVCOPYHOOKINFO, * LPSFVCOPYHOOKINFO; +typedef const SFVCOPYHOOKINFO * LPCSFVCOPYHOOKINFO; + +/* SFVCB_GETDETAILSOF structure */ +typedef struct +{ + LPCITEMIDLIST pidl; + int fmt; + int cx; + STRRET lpText; +} SFVCOLUMNINFO, * LPSFVCOLUMNINFO; + +/**************************************************************************** + * Misc Stuff + */ + +/* SHWaitForFileToOpen flags */ +#define SHWFF_ADD 0x01 +#define SHWFF_REMOVE 0x02 +#define SHWFF_WAIT 0x04 + +BOOL WINAPI SHWaitForFileToOpen( + LPCITEMIDLIST pidl, + DWORD dwFlags, + DWORD dwTimeout); + +WORD WINAPI ArrangeWindows( + HWND hwndParent, + DWORD dwReserved, + LPCRECT lpRect, + WORD cKids, + CONST HWND * lpKids); + +/* RegisterShellHook types */ +#define RSH_DEREGISTER 0 +#define RSH_REGISTER 1 +#define RSH_REGISTER_PROGMAN 2 +#define RSH_REGISTER_TASKMAN 3 + +BOOL WINAPI RegisterShellHook( + HWND hWnd, + DWORD dwType); + +/* SHCreateDefClassObject callback function */ +typedef HRESULT (CALLBACK *LPFNCDCOCALLBACK)( + LPUNKNOWN pUnkOuter, + REFIID riidObject, + LPVOID *ppvObject); + +HRESULT WINAPI SHCreateDefClassObject( + REFIID riidFactory, + LPVOID *ppvFactory, + LPFNCDCOCALLBACK lpfnCallback, + LPDWORD lpdwUsage, + REFIID riidObject); + +void WINAPI SHFreeUnusedLibraries(void); + +/* SHCreateLinks flags */ +#define SHCLF_PREFIXNAME 0x01 +#define SHCLF_CREATEONDESKTOP 0x02 + +HRESULT WINAPI SHCreateLinks( + HWND hWnd, + LPCSTR lpszDir, + LPDATAOBJECT lpDataObject, + UINT uFlags, + LPITEMIDLIST *lppidlLinks); + +DWORD WINAPI CheckEscapesA(LPSTR string, DWORD len); +DWORD WINAPI CheckEscapesW(LPWSTR string, DWORD len); + +/* policy functions */ +BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey); + +/* Shell Desktop functions */ + +#define WM_GETISHELLBROWSER (WM_USER+7) + +BOOL WINAPI SHDesktopMessageLoop(HANDLE); + +#define CSIDL_FOLDER_MASK 0x00ff + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + +#endif /* __WINE_UNDOCSHELL_H */ diff --git a/reactos/dll/win32/shell32_new/version.h b/reactos/dll/win32/shell32_new/version.h new file mode 100644 index 00000000000..cd0d8dbb9c7 --- /dev/null +++ b/reactos/dll/win32/shell32_new/version.h @@ -0,0 +1,28 @@ +/* + * Shared Resource/DllGetVersion version information + * + * Copyright (C) 2004 Robert Shearman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define WINE_FILEVERSION_MAJOR 5 +#define WINE_FILEVERSION_MINOR 0 +#define WINE_FILEVERSION_BUILD 3900 +#define WINE_FILEVERSION_PLATFORMID 6975 + +/* FIXME: when libs/wpp gets fixed to support concatenation we can remove + * this and define it in version.rc */ +#define WINE_FILEVERSION_STR "5.0.3900.6975" diff --git a/reactos/dll/win32/shell32_new/version.rc b/reactos/dll/win32/shell32_new/version.rc new file mode 100644 index 00000000000..a5e23ddce39 --- /dev/null +++ b/reactos/dll/win32/shell32_new/version.rc @@ -0,0 +1,27 @@ +/* + * version information for shell32.dll + * + * Copyright (C) 2003 John K. Hohm + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "version.h" + +#define WINE_OLESELFREGISTER +#define WINE_FILEVERSION WINE_FILEVERSION_MAJOR,WINE_FILEVERSION_MINOR,WINE_FILEVERSION_BUILD,WINE_FILEVERSION_PLATFORMID +#define WINE_FILENAME_STR "shell32.dll" + +#include diff --git a/reactos/dll/win32/shell32_new/xdg.h b/reactos/dll/win32/shell32_new/xdg.h new file mode 100644 index 00000000000..6c083c66e32 --- /dev/null +++ b/reactos/dll/win32/shell32_new/xdg.h @@ -0,0 +1,51 @@ +/* + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ +#ifndef __XDG_H__ +#define __XDG_H__ + +/* + * XDG directories access + */ +#define XDG_DATA_HOME 0 +#define XDG_CONFIG_HOME 1 +#define XDG_DATA_DIRS 2 +#define XDG_CONFIG_DIRS 3 +#define XDG_CACHE_HOME 4 + +const char *XDG_GetPath(int path_id); +char *XDG_BuildPath(int root_id, const char *subpath); +int XDG_MakeDirs(const char *path); + +#define XDG_URLENCODE 0x1 +BOOL XDG_WriteDesktopStringEntry(int fd, const char *keyName, DWORD dwFlags, const char *value); + +typedef struct tagXDG_PARSED_FILE XDG_PARSED_FILE; + +XDG_PARSED_FILE *XDG_ParseDesktopFile(int fd); +char *XDG_GetStringValue(XDG_PARSED_FILE *file, const char *group_name, const char *value_name, DWORD dwFlags); +void XDG_FreeParsedFile(XDG_PARSED_FILE *file); + +/* implemented in trash.c */ +typedef struct tagTRASH_ELEMENT TRASH_ELEMENT; + +BOOL TRASH_CanTrashFile(LPCWSTR wszPath); +BOOL TRASH_TrashFile(LPCWSTR wszPath); +HRESULT TRASH_UnpackItemID(LPCSHITEMID id, TRASH_ELEMENT *element, WIN32_FIND_DATAW *data); +HRESULT TRASH_EnumItems(LPITEMIDLIST **pidls, int *count); +void TRASH_DisposeElement(TRASH_ELEMENT *element); + + +#endif /* ndef __XDG_H__ */