diff --git a/reactos/dll/cpl/main/lang/cs-CZ.rc b/reactos/dll/cpl/main/lang/cs-CZ.rc index b91fd17f544..f98d652dcd2 100644 --- a/reactos/dll/cpl/main/lang/cs-CZ.rc +++ b/reactos/dll/cpl/main/lang/cs-CZ.rc @@ -161,4 +161,6 @@ BEGIN IDS_HAND "Výbìr odkazu" IDS_NONE "(Není)" IDS_SYSTEM_SCHEME "(systémové schéma)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/de-DE.rc b/reactos/dll/cpl/main/lang/de-DE.rc index f6b4513557f..09b4ebe0b07 100644 --- a/reactos/dll/cpl/main/lang/de-DE.rc +++ b/reactos/dll/cpl/main/lang/de-DE.rc @@ -163,4 +163,6 @@ BEGIN IDS_HAND "Verknüpfungsauswahl" IDS_NONE "(Kein)" IDS_SYSTEM_SCHEME "(Systemschema)" + IDS_BROWSE_FILTER "Cursor (*.ani, *.cur)\0*.ani;*.cur\0Animierte Cursor (*.ani)\0*.ani\0Statische Cursor (*.cur)\0*.cur\0Alle Dateien\0*.*\0\0" + IDS_BROWSE_TITLE "Durchsuchen" END diff --git a/reactos/dll/cpl/main/lang/en-US.rc b/reactos/dll/cpl/main/lang/en-US.rc index b0c12b5b7be..336b550d5b6 100644 --- a/reactos/dll/cpl/main/lang/en-US.rc +++ b/reactos/dll/cpl/main/lang/en-US.rc @@ -161,4 +161,6 @@ BEGIN IDS_HAND "Link Select" IDS_NONE "(None)" IDS_SYSTEM_SCHEME "(system scheme)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/es-ES.rc b/reactos/dll/cpl/main/lang/es-ES.rc index b0891046e2e..89b0cfe677e 100644 --- a/reactos/dll/cpl/main/lang/es-ES.rc +++ b/reactos/dll/cpl/main/lang/es-ES.rc @@ -162,4 +162,6 @@ BEGIN IDS_HAND "Link Select" IDS_NONE "(None)" IDS_SYSTEM_SCHEME "(system scheme)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/fr-FR.rc b/reactos/dll/cpl/main/lang/fr-FR.rc index c75da369991..6be9fe69f12 100644 --- a/reactos/dll/cpl/main/lang/fr-FR.rc +++ b/reactos/dll/cpl/main/lang/fr-FR.rc @@ -162,4 +162,6 @@ BEGIN IDS_HAND "Sélection de lien" IDS_NONE "(Aucun)" IDS_SYSTEM_SCHEME "(Arrangement système)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/hu-HU.rc b/reactos/dll/cpl/main/lang/hu-HU.rc index 39daf52cc33..618a74b5444 100644 --- a/reactos/dll/cpl/main/lang/hu-HU.rc +++ b/reactos/dll/cpl/main/lang/hu-HU.rc @@ -162,4 +162,6 @@ BEGIN IDS_HAND "Link Select" IDS_NONE "(None)" IDS_SYSTEM_SCHEME "(system scheme)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/id-ID.rc b/reactos/dll/cpl/main/lang/id-ID.rc index 3475ec4524d..1a4ab91fef2 100644 --- a/reactos/dll/cpl/main/lang/id-ID.rc +++ b/reactos/dll/cpl/main/lang/id-ID.rc @@ -161,4 +161,6 @@ BEGIN IDS_HAND "Memilih Link" IDS_NONE "(tidak ada)" IDS_SYSTEM_SCHEME "(skema sistem)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/it-IT.rc b/reactos/dll/cpl/main/lang/it-IT.rc index 58ff7884668..82c1ea76668 100644 --- a/reactos/dll/cpl/main/lang/it-IT.rc +++ b/reactos/dll/cpl/main/lang/it-IT.rc @@ -163,4 +163,6 @@ BEGIN IDS_HAND "Seleziona collegamento" IDS_NONE "(Nessuna)" IDS_SYSTEM_SCHEME "(Schema di sistema)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/ja-JP.rc b/reactos/dll/cpl/main/lang/ja-JP.rc index 7729fe8bb35..a0928bafce2 100644 --- a/reactos/dll/cpl/main/lang/ja-JP.rc +++ b/reactos/dll/cpl/main/lang/ja-JP.rc @@ -161,4 +161,6 @@ BEGIN IDS_HAND "Link Select" IDS_NONE "(None)" IDS_SYSTEM_SCHEME "(system scheme)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/nl-NL.rc b/reactos/dll/cpl/main/lang/nl-NL.rc index 9b7cc44bf29..6afbf56bddb 100644 --- a/reactos/dll/cpl/main/lang/nl-NL.rc +++ b/reactos/dll/cpl/main/lang/nl-NL.rc @@ -160,4 +160,6 @@ BEGIN IDS_HAND "Link Select" IDS_NONE "(None)" IDS_SYSTEM_SCHEME "(system scheme)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/ru-RU.rc b/reactos/dll/cpl/main/lang/ru-RU.rc index 03d10c6a143..e8fd5f6678f 100644 --- a/reactos/dll/cpl/main/lang/ru-RU.rc +++ b/reactos/dll/cpl/main/lang/ru-RU.rc @@ -162,4 +162,6 @@ BEGIN IDS_HAND "Link Select" IDS_NONE "(None)" IDS_SYSTEM_SCHEME "(system scheme)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/lang/uk-UA.rc b/reactos/dll/cpl/main/lang/uk-UA.rc index 02f641da57d..f8f4627a405 100644 --- a/reactos/dll/cpl/main/lang/uk-UA.rc +++ b/reactos/dll/cpl/main/lang/uk-UA.rc @@ -169,4 +169,6 @@ BEGIN IDS_HAND "Âèá³ð ïîñèëàííÿ" IDS_NONE "(Íåìàº)" IDS_SYSTEM_SCHEME "(ñèñòåìíà ñõåìà)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Browse" END diff --git a/reactos/dll/cpl/main/mouse.c b/reactos/dll/cpl/main/mouse.c index e4e9e78e310..2e7681e6389 100644 --- a/reactos/dll/cpl/main/mouse.c +++ b/reactos/dll/cpl/main/mouse.c @@ -26,12 +26,8 @@ */ //TODO: -//detect slider changes - for apply stuff -// cursor icon shows - may need overriden items -// implement Pointer-APPLY -// implement Pointer-Browser -// add missing icons -// Options- pointer precision +// add missing icons +// Options- pointer precision #define WINVER 0x0501 @@ -135,8 +131,6 @@ CURSOR_DATA g_CursorData[] = {IDS_HAND, IDC_HAND, 0, _T(""), _T("")}}; -TCHAR g_szNewScheme[MAX_PATH]; - #if 0 static VOID DebugMsg(LPTSTR fmt, ...) @@ -517,8 +511,6 @@ EnumerateCursorSchemes(HWND hwndDlg) *p = 0; } -// DebugMsg(_T("szCurrentScheme: \"%s\"\nszValueName: \"%s\""), szCurrentScheme, szValueName); - if (_tcscmp(szValueName, szCurrentScheme) == 0) { nSchemeIndex = (INT)i; @@ -619,16 +611,23 @@ SaveSchemeProc(IN HWND hwndDlg, IN WPARAM wParam, IN LPARAM lParam) { - HWND hDlgCtrl; - UNREFERENCED_PARAMETER(lParam); + LPTSTR pSchemeName; - switch(uMsg) + switch (uMsg) { + case WM_INITDIALOG: + pSchemeName = (LPTSTR)lParam; + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pSchemeName); + SendDlgItemMessage(hwndDlg, IDC_EDIT_SCHEME_NAME, WM_SETTEXT, + 0, (LPARAM)pSchemeName); + break; + case WM_COMMAND: if (LOWORD(wParam) == IDOK) { - hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_SCHEME_NAME); - SendMessage(hDlgCtrl, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)g_szNewScheme); + pSchemeName = (LPTSTR)GetWindowLongPtr(hwndDlg, DWLP_USER); + SendDlgItemMessage(hwndDlg, IDC_EDIT_SCHEME_NAME, WM_GETTEXT, + (WPARAM)MAX_PATH, (LPARAM)pSchemeName); EndDialog(hwndDlg, TRUE); } else if (LOWORD(wParam) == IDCANCEL) @@ -642,26 +641,103 @@ SaveSchemeProc(IN HWND hwndDlg, } +static BOOL +SaveCursorScheme(HWND hwndDlg) +{ + TCHAR szSystemScheme[MAX_PATH]; + TCHAR szSchemeName[MAX_PATH]; + INT nSel; + INT index, i, nLength; + LPTSTR lpSchemeData; + HKEY hCuKey; + HKEY hCuCursorKey; + LONG lResult = ERROR_SUCCESS; + + nSel = SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETCURSEL, 0, 0); + if (nSel == CB_ERR) + return FALSE; + + if (nSel == 0) + { + szSchemeName[0] = 0; + } + else + { + SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETLBTEXT, nSel, (LPARAM)szSchemeName); + + LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH); + + if (_tcsstr(szSchemeName, szSystemScheme)) + { + szSchemeName[_tcslen(szSchemeName) - _tcslen(szSystemScheme) - 1] = 0; + } + } + + if (DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_CURSOR_SCHEME_SAVEAS), + hwndDlg, SaveSchemeProc, (LPARAM)szSchemeName)) + { + /* Save the cursor scheme */ + nLength = 0; + for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++) + { + if (i > 0) + nLength++; + nLength += _tcslen(g_CursorData[i].szCursorPath); + } + nLength++; + + lpSchemeData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nLength * sizeof(TCHAR)); + + for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++) + { + if (i > 0) + _tcscat(lpSchemeData, _T(",")); + _tcscat(lpSchemeData, g_CursorData[i].szCursorPath); + } + + if (RegOpenCurrentUser(KEY_READ | KEY_SET_VALUE, &hCuKey) != ERROR_SUCCESS) + return FALSE; + + if (RegOpenKeyEx(hCuKey, _T("Control Panel\\Cursors\\Schemes"), 0, KEY_READ | KEY_SET_VALUE, &hCuCursorKey) != ERROR_SUCCESS) + { + RegCloseKey(hCuKey); + return FALSE; + } + + lResult = RegSetValueEx(hCuCursorKey, szSchemeName, 0, REG_EXPAND_SZ, + (LPBYTE)lpSchemeData, nLength * sizeof(TCHAR)); + + RegCloseKey(hCuCursorKey); + RegCloseKey(hCuKey); + + HeapFree(GetProcessHeap(), 0, lpSchemeData); + } + + return (lResult == ERROR_SUCCESS); +} + + static BOOL BrowseCursor(HWND hwndDlg) { TCHAR szFileName[MAX_PATH]; + TCHAR szFilter[MAX_PATH]; + TCHAR szTitle[MAX_PATH]; OPENFILENAME ofn; INT nSel; - /* FIXME load text resources from string */ - static TCHAR szFilter[] = _T("Cursors\0*.ani;*.cur\0Animated Cursors\0*.ani\0Static Cursors\0*.cur\0All Files\0*.*\0\0"); + LoadString(hApplet, IDS_BROWSE_FILTER, szFilter, MAX_PATH); + LoadString(hApplet, IDS_BROWSE_TITLE, szTitle, MAX_PATH); memset(szFileName, 0x0, sizeof(szFileName)); nSel = SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_GETCURSEL, 0, 0); if (nSel == LB_ERR) { - MessageBox(hwndDlg, _T("LB_ERR"), _T(""),MB_ICONERROR); + MessageBox(hwndDlg, _T("LB_ERR"), _T(""), MB_ICONERROR); return FALSE; } ZeroMemory(&ofn, sizeof(OPENFILENAME)); - ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwndDlg; ofn.lpstrFilter = szFilter; @@ -669,7 +745,7 @@ BrowseCursor(HWND hwndDlg) ofn.lpstrFile = szFileName; ofn.nMaxFile = MAX_PATH; ofn.lpstrInitialDir = _T("%WINDIR%\\Cursors"); - ofn.lpstrTitle = _T("Browse"); /* FIXME load text resources from string */ + ofn.lpstrTitle = szTitle; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST; if (!GetOpenFileName(&ofn)) @@ -844,6 +920,15 @@ LoadNewCursorScheme(HWND hwndDlg, BOOL bInit) } +static BOOL +ApplyCursorScheme(HWND hwndDlg) +{ + /* FIXME: Apply the cursor scheme */ + + return TRUE; +} + + static INT_PTR CALLBACK PointerProc(IN HWND hwndDlg, IN UINT uMsg, @@ -898,6 +983,7 @@ PointerProc(IN HWND hwndDlg, lppsn = (LPPSHNOTIFY) lParam; if (lppsn->hdr.code == PSN_APPLY) { + ApplyCursorScheme(hwndDlg); #if (WINVER >= 0x0500) SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bDropShadow, SPIF_SENDCHANGE); #endif @@ -920,20 +1006,34 @@ PointerProc(IN HWND hwndDlg, break; case IDC_LISTBOX_CURSOR: - if (HIWORD(wParam) == LBN_SELCHANGE) + switch (HIWORD(wParam)) { - nSel = SendMessage((HWND)lParam, LB_GETCURSEL, 0, 0); - SendDlgItemMessage(hwndDlg, IDC_IMAGE_CURRENT_CURSOR, STM_SETIMAGE, IMAGE_CURSOR, - (LPARAM)g_CursorData[nSel].hCursor); - EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR), - (g_CursorData[nSel].szCursorPath[0] != 0)); + case LBN_SELCHANGE: + nSel = SendMessage((HWND)lParam, LB_GETCURSEL, 0, 0); + SendDlgItemMessage(hwndDlg, IDC_IMAGE_CURRENT_CURSOR, STM_SETIMAGE, IMAGE_CURSOR, + (LPARAM)g_CursorData[nSel].hCursor); + EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR), + (g_CursorData[nSel].szCursorPath[0] != 0)); + break; + + case LBN_DBLCLK: + if (BrowseCursor(hwndDlg)) + { + /* Update cursor list and preview */ + ReloadCurrentCursorScheme(); + RefreshCursorList(hwndDlg, FALSE); + + /* Enable the "Set Default" button */ + EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR), TRUE); + } + break; } break; case IDC_BUTTON_SAVEAS_SCHEME: - if (DialogBox(hApplet, MAKEINTRESOURCE(IDD_CURSOR_SCHEME_SAVEAS), hwndDlg, SaveSchemeProc)) + if (SaveCursorScheme(hwndDlg)) { - /* FIXME: save the cursor scheme */ + } break; diff --git a/reactos/dll/cpl/main/resource.h b/reactos/dll/cpl/main/resource.h index 1e77f8783e3..ed9ccbbea7e 100644 --- a/reactos/dll/cpl/main/resource.h +++ b/reactos/dll/cpl/main/resource.h @@ -25,7 +25,6 @@ #define IDS_CPLDESCRIPTION_1 1001 #define IDS_CPLNAME_2 1002 #define IDS_CPLDESCRIPTION_2 1003 - #define IDS_ARROW 1016 #define IDS_HELP 1017 #define IDS_APPSTARTING 1018 @@ -43,6 +42,8 @@ #define IDS_HAND 1030 #define IDS_NONE 1031 #define IDS_SYSTEM_SCHEME 1032 +#define IDS_BROWSE_FILTER 1033 +#define IDS_BROWSE_TITLE 1034 #define IDC_SWAP_MOUSE_BUTTONS 2000