- Add the ability to save cursor schemes.

- Open the browse dialog upon double-click on a cursor in the cursor list.
- Localize the filter string and the title string of the browse dialog.

svn path=/trunk/; revision=26464
This commit is contained in:
Eric Kohl 2007-04-22 15:11:04 +00:00
parent 9ff0fd619e
commit d9543390bb
14 changed files with 154 additions and 29 deletions

View file

@ -161,4 +161,6 @@ BEGIN
IDS_HAND "Výbìr odkazu" IDS_HAND "Výbìr odkazu"
IDS_NONE "(Není)" IDS_NONE "(Není)"
IDS_SYSTEM_SCHEME "(systémové schéma)" 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 END

View file

@ -163,4 +163,6 @@ BEGIN
IDS_HAND "Verknüpfungsauswahl" IDS_HAND "Verknüpfungsauswahl"
IDS_NONE "(Kein)" IDS_NONE "(Kein)"
IDS_SYSTEM_SCHEME "(Systemschema)" 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 END

View file

@ -161,4 +161,6 @@ BEGIN
IDS_HAND "Link Select" IDS_HAND "Link Select"
IDS_NONE "(None)" IDS_NONE "(None)"
IDS_SYSTEM_SCHEME "(system scheme)" 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 END

View file

@ -162,4 +162,6 @@ BEGIN
IDS_HAND "Link Select" IDS_HAND "Link Select"
IDS_NONE "(None)" IDS_NONE "(None)"
IDS_SYSTEM_SCHEME "(system scheme)" 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 END

View file

@ -162,4 +162,6 @@ BEGIN
IDS_HAND "Sélection de lien" IDS_HAND "Sélection de lien"
IDS_NONE "(Aucun)" IDS_NONE "(Aucun)"
IDS_SYSTEM_SCHEME "(Arrangement système)" 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 END

View file

@ -162,4 +162,6 @@ BEGIN
IDS_HAND "Link Select" IDS_HAND "Link Select"
IDS_NONE "(None)" IDS_NONE "(None)"
IDS_SYSTEM_SCHEME "(system scheme)" 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 END

View file

@ -161,4 +161,6 @@ BEGIN
IDS_HAND "Memilih Link" IDS_HAND "Memilih Link"
IDS_NONE "(tidak ada)" IDS_NONE "(tidak ada)"
IDS_SYSTEM_SCHEME "(skema sistem)" 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 END

View file

@ -163,4 +163,6 @@ BEGIN
IDS_HAND "Seleziona collegamento" IDS_HAND "Seleziona collegamento"
IDS_NONE "(Nessuna)" IDS_NONE "(Nessuna)"
IDS_SYSTEM_SCHEME "(Schema di sistema)" 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 END

View file

@ -161,4 +161,6 @@ BEGIN
IDS_HAND "Link Select" IDS_HAND "Link Select"
IDS_NONE "(None)" IDS_NONE "(None)"
IDS_SYSTEM_SCHEME "(system scheme)" 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 END

View file

@ -160,4 +160,6 @@ BEGIN
IDS_HAND "Link Select" IDS_HAND "Link Select"
IDS_NONE "(None)" IDS_NONE "(None)"
IDS_SYSTEM_SCHEME "(system scheme)" 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 END

View file

@ -162,4 +162,6 @@ BEGIN
IDS_HAND "Link Select" IDS_HAND "Link Select"
IDS_NONE "(None)" IDS_NONE "(None)"
IDS_SYSTEM_SCHEME "(system scheme)" 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 END

View file

@ -169,4 +169,6 @@ BEGIN
IDS_HAND "Âèá³ð ïîñèëàííÿ" IDS_HAND "Âèá³ð ïîñèëàííÿ"
IDS_NONE "(Íåìàº)" IDS_NONE "(Íåìàº)"
IDS_SYSTEM_SCHEME "(ñèñòåìíà ñõåìà)" 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 END

View file

@ -26,12 +26,8 @@
*/ */
//TODO: //TODO:
//detect slider changes - for apply stuff // add missing icons
// cursor icon shows - may need overriden items // Options- pointer precision
// implement Pointer-APPLY
// implement Pointer-Browser
// add missing icons
// Options- pointer precision
#define WINVER 0x0501 #define WINVER 0x0501
@ -135,8 +131,6 @@ CURSOR_DATA g_CursorData[] =
{IDS_HAND, IDC_HAND, 0, _T(""), _T("")}}; {IDS_HAND, IDC_HAND, 0, _T(""), _T("")}};
TCHAR g_szNewScheme[MAX_PATH];
#if 0 #if 0
static VOID static VOID
DebugMsg(LPTSTR fmt, ...) DebugMsg(LPTSTR fmt, ...)
@ -517,8 +511,6 @@ EnumerateCursorSchemes(HWND hwndDlg)
*p = 0; *p = 0;
} }
// DebugMsg(_T("szCurrentScheme: \"%s\"\nszValueName: \"%s\""), szCurrentScheme, szValueName);
if (_tcscmp(szValueName, szCurrentScheme) == 0) if (_tcscmp(szValueName, szCurrentScheme) == 0)
{ {
nSchemeIndex = (INT)i; nSchemeIndex = (INT)i;
@ -619,16 +611,23 @@ SaveSchemeProc(IN HWND hwndDlg,
IN WPARAM wParam, IN WPARAM wParam,
IN LPARAM lParam) IN LPARAM lParam)
{ {
HWND hDlgCtrl; LPTSTR pSchemeName;
UNREFERENCED_PARAMETER(lParam);
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: case WM_COMMAND:
if (LOWORD(wParam) == IDOK) if (LOWORD(wParam) == IDOK)
{ {
hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_SCHEME_NAME); pSchemeName = (LPTSTR)GetWindowLongPtr(hwndDlg, DWLP_USER);
SendMessage(hDlgCtrl, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)g_szNewScheme); SendDlgItemMessage(hwndDlg, IDC_EDIT_SCHEME_NAME, WM_GETTEXT,
(WPARAM)MAX_PATH, (LPARAM)pSchemeName);
EndDialog(hwndDlg, TRUE); EndDialog(hwndDlg, TRUE);
} }
else if (LOWORD(wParam) == IDCANCEL) 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 static BOOL
BrowseCursor(HWND hwndDlg) BrowseCursor(HWND hwndDlg)
{ {
TCHAR szFileName[MAX_PATH]; TCHAR szFileName[MAX_PATH];
TCHAR szFilter[MAX_PATH];
TCHAR szTitle[MAX_PATH];
OPENFILENAME ofn; OPENFILENAME ofn;
INT nSel; INT nSel;
/* FIXME load text resources from string */ LoadString(hApplet, IDS_BROWSE_FILTER, szFilter, MAX_PATH);
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_TITLE, szTitle, MAX_PATH);
memset(szFileName, 0x0, sizeof(szFileName)); memset(szFileName, 0x0, sizeof(szFileName));
nSel = SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_GETCURSEL, 0, 0); nSel = SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_GETCURSEL, 0, 0);
if (nSel == LB_ERR) if (nSel == LB_ERR)
{ {
MessageBox(hwndDlg, _T("LB_ERR"), _T(""),MB_ICONERROR); MessageBox(hwndDlg, _T("LB_ERR"), _T(""), MB_ICONERROR);
return FALSE; return FALSE;
} }
ZeroMemory(&ofn, sizeof(OPENFILENAME)); ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME); ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwndDlg; ofn.hwndOwner = hwndDlg;
ofn.lpstrFilter = szFilter; ofn.lpstrFilter = szFilter;
@ -669,7 +745,7 @@ BrowseCursor(HWND hwndDlg)
ofn.lpstrFile = szFileName; ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH; ofn.nMaxFile = MAX_PATH;
ofn.lpstrInitialDir = _T("%WINDIR%\\Cursors"); ofn.lpstrInitialDir = _T("%WINDIR%\\Cursors");
ofn.lpstrTitle = _T("Browse"); /* FIXME load text resources from string */ ofn.lpstrTitle = szTitle;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST;
if (!GetOpenFileName(&ofn)) 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 static INT_PTR CALLBACK
PointerProc(IN HWND hwndDlg, PointerProc(IN HWND hwndDlg,
IN UINT uMsg, IN UINT uMsg,
@ -898,6 +983,7 @@ PointerProc(IN HWND hwndDlg,
lppsn = (LPPSHNOTIFY) lParam; lppsn = (LPPSHNOTIFY) lParam;
if (lppsn->hdr.code == PSN_APPLY) if (lppsn->hdr.code == PSN_APPLY)
{ {
ApplyCursorScheme(hwndDlg);
#if (WINVER >= 0x0500) #if (WINVER >= 0x0500)
SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bDropShadow, SPIF_SENDCHANGE); SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bDropShadow, SPIF_SENDCHANGE);
#endif #endif
@ -920,20 +1006,34 @@ PointerProc(IN HWND hwndDlg,
break; break;
case IDC_LISTBOX_CURSOR: case IDC_LISTBOX_CURSOR:
if (HIWORD(wParam) == LBN_SELCHANGE) switch (HIWORD(wParam))
{ {
nSel = SendMessage((HWND)lParam, LB_GETCURSEL, 0, 0); case LBN_SELCHANGE:
SendDlgItemMessage(hwndDlg, IDC_IMAGE_CURRENT_CURSOR, STM_SETIMAGE, IMAGE_CURSOR, nSel = SendMessage((HWND)lParam, LB_GETCURSEL, 0, 0);
(LPARAM)g_CursorData[nSel].hCursor); SendDlgItemMessage(hwndDlg, IDC_IMAGE_CURRENT_CURSOR, STM_SETIMAGE, IMAGE_CURSOR,
EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR), (LPARAM)g_CursorData[nSel].hCursor);
(g_CursorData[nSel].szCursorPath[0] != 0)); 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; break;
case IDC_BUTTON_SAVEAS_SCHEME: case IDC_BUTTON_SAVEAS_SCHEME:
if (DialogBox(hApplet, MAKEINTRESOURCE(IDD_CURSOR_SCHEME_SAVEAS), hwndDlg, SaveSchemeProc)) if (SaveCursorScheme(hwndDlg))
{ {
/* FIXME: save the cursor scheme */
} }
break; break;

View file

@ -25,7 +25,6 @@
#define IDS_CPLDESCRIPTION_1 1001 #define IDS_CPLDESCRIPTION_1 1001
#define IDS_CPLNAME_2 1002 #define IDS_CPLNAME_2 1002
#define IDS_CPLDESCRIPTION_2 1003 #define IDS_CPLDESCRIPTION_2 1003
#define IDS_ARROW 1016 #define IDS_ARROW 1016
#define IDS_HELP 1017 #define IDS_HELP 1017
#define IDS_APPSTARTING 1018 #define IDS_APPSTARTING 1018
@ -43,6 +42,8 @@
#define IDS_HAND 1030 #define IDS_HAND 1030
#define IDS_NONE 1031 #define IDS_NONE 1031
#define IDS_SYSTEM_SCHEME 1032 #define IDS_SYSTEM_SCHEME 1032
#define IDS_BROWSE_FILTER 1033
#define IDS_BROWSE_TITLE 1034
#define IDC_SWAP_MOUSE_BUTTONS 2000 #define IDC_SWAP_MOUSE_BUTTONS 2000