WinHelp

Eric Pouech eric.pouech at wanadoo.fr
Sun Oct 20 04:50:09 CDT 2002


this patch implements a few more macros for winhelp
A+
-------------- next part --------------
Name:          wh_macro
ChangeLog:     implemented a few more macros for button manipulation (enable/disable/changing macro)
License:       X11
GenDate:       2002/10/20 09:41:43 UTC
ModifiedFiles: programs/winhelp/macro.c
AddedFiles:    
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/winhelp/macro.c,v
retrieving revision 1.11
diff -u -u -r1.11 macro.c
--- programs/winhelp/macro.c	16 Jul 2002 01:46:29 -0000	1.11
+++ programs/winhelp/macro.c	19 Oct 2002 08:35:03 -0000
@@ -27,6 +27,18 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(winhelp);
 
+/*******      helper functions     *******/
+WINHELP_BUTTON**        MACRO_LookupButton(WINHELP_WINDOW* win, LPCSTR name)
+{
+    WINHELP_BUTTON**    b;
+
+    for (b = &win->first_button; *b; b = &(*b)->next)
+        if (!lstrcmpi(name, (*b)->lpszID)) break;
+    return b;
+}
+
+/******* real macro implementation *******/
+
 void MACRO_About(void)
 {
     WINE_FIXME("About()\n");
@@ -78,14 +90,49 @@
     MACRO_CreateButton("BTN_NEXT", "&>>", "Next()");
 }
 
-void MACRO_ChangeButtonBinding(LPCSTR str1, LPCSTR str2)
+void MACRO_ChangeButtonBinding(LPCSTR id, LPCSTR macro)
 {
-    WINE_FIXME("ChangeButtonBinding(\"%s\", \"%s\")\n", str1, str2);
+    WINHELP_WINDOW*     win = Globals.active_win;
+    WINHELP_BUTTON*     button;
+    WINHELP_BUTTON**    b;
+    LONG                size;
+    LPSTR               ptr;
+
+    b = MACRO_LookupButton(win, id);
+    if (!*b) {WINE_FIXME("Couldn't find button '%s'\n", id); return;}
+
+    size = sizeof(WINHELP_BUTTON) + lstrlen(id) + 
+        lstrlen((*b)->lpszName) + lstrlen(macro) + 3;
+
+    button = HeapAlloc(GetProcessHeap(), 0, size);
+    if (!button) return;
+
+    button->next  = (*b)->next;
+    button->hWnd  = (*b)->hWnd;
+    button->wParam = (*b)->wParam;
+
+    ptr = (char*)button + sizeof(WINHELP_BUTTON);
+
+    lstrcpy(ptr, (LPSTR) id);
+    button->lpszID = ptr;
+    ptr += lstrlen(id) + 1;
+
+    lstrcpy(ptr, (LPSTR) (*b)->lpszName);
+    button->lpszName = ptr;
+    ptr += lstrlen((*b)->lpszName) + 1;
+
+    lstrcpy(ptr, (LPSTR) macro);
+    button->lpszMacro = ptr;
+
+    *b = button;
+
+    SendMessage(win->hMainWnd, WM_USER, 0, 0);
 }
 
-void MACRO_ChangeEnable(LPCSTR str1, LPCSTR str2)
+void MACRO_ChangeEnable(LPCSTR id, LPCSTR macro)
 {
-    WINE_FIXME("ChangeEnable(\"%s\", \"%s\")\n", str1, str2);
+    MACRO_ChangeButtonBinding(id, macro);
+    MACRO_EnableButton(id);
 }
 
 void MACRO_ChangeItemBinding(LPCSTR str1, LPCSTR str2)
@@ -193,9 +240,14 @@
     WINE_FIXME("DestroyButton(\"%s\")\n", str);
 }
 
-void MACRO_DisableButton(LPCSTR str)
+void MACRO_DisableButton(LPCSTR id)
 {
-    WINE_FIXME("DisableButton(\"%s\")\n", str);
+    WINHELP_BUTTON**    b;
+
+    b = MACRO_LookupButton(Globals.active_win, id);
+    if (!*b) {WINE_FIXME("Couldn't find button '%s'\n", id); return;}
+
+    EnableWindow((*b)->hWnd, FALSE);
 }
 
 void MACRO_DisableItem(LPCSTR str)
@@ -203,9 +255,14 @@
     WINE_FIXME("DisableItem(\"%s\")\n", str);
 }
 
-void MACRO_EnableButton(LPCSTR str)
+void MACRO_EnableButton(LPCSTR id)
 {
-    WINE_FIXME("EnableButton(\"%s\")\n", str);
+    WINHELP_BUTTON**    b;
+
+    b = MACRO_LookupButton(Globals.active_win, id);
+    if (!*b) {WINE_FIXME("Couldn't find button '%s'\n", id); return;}
+
+    EnableWindow((*b)->hWnd, TRUE);
 }
 
 void MACRO_EnableItem(LPCSTR str)
@@ -251,8 +308,7 @@
 
 BOOL MACRO_FileExist(LPCSTR str)
 {
-    WINE_FIXME("FileExist(\"%s\")\n", str);
-    return TRUE;
+    return GetFileAttributes(str) != 0xFFFFFFFF;
 }
 
 void MACRO_FileOpen(void)


More information about the wine-patches mailing list