OSDN Git Service

Please enter the commit message for your changes. Lines starting
[eos/base.git] / util / src / TclTk / tk8.6.4 / win / tkWinTest.c
diff --git a/util/src/TclTk/tk8.6.4/win/tkWinTest.c b/util/src/TclTk/tk8.6.4/win/tkWinTest.c
deleted file mode 100644 (file)
index d824ee4..0000000
+++ /dev/null
@@ -1,580 +0,0 @@
-/*
- * tkWinTest.c --
- *
- *     Contains commands for platform specific tests for the Windows
- *     platform.
- *
- * Copyright (c) 1997 Sun Microsystems, Inc.
- * Copyright (c) 2000 by Scriptics Corporation.
- * Copyright (c) 2001 by ActiveState Corporation.
- *
- * See the file "license.terms" for information on usage and redistribution of
- * this file, and for a DISCLAIMER OF ALL WARRANTIES.
- */
-
-#undef USE_TCL_STUBS
-#define USE_TCL_STUBS
-#undef USE_TK_STUBS
-#define USE_TK_STUBS
-#include "tkWinInt.h"
-
-HWND tkWinCurrentDialog;
-
-/*
- * Forward declarations of functions defined later in this file:
- */
-
-static int             TestclipboardObjCmd(ClientData clientData,
-                           Tcl_Interp *interp, int objc,
-                           Tcl_Obj *const objv[]);
-static int             TestwineventObjCmd(ClientData clientData,
-                           Tcl_Interp *interp, int objc,
-                           Tcl_Obj *const objv[]);
-static int             TestfindwindowObjCmd(ClientData clientData,
-                           Tcl_Interp *interp, int objc,
-                           Tcl_Obj *const objv[]);
-static int             TestgetwindowinfoObjCmd(ClientData clientData,
-                           Tcl_Interp *interp, int objc,
-                           Tcl_Obj *const objv[]);
-static int             TestwinlocaleObjCmd(ClientData clientData,
-                           Tcl_Interp *interp, int objc,
-                           Tcl_Obj *const objv[]);
-static Tk_GetSelProc           SetSelectionResult;
-\f
-/*
- *----------------------------------------------------------------------
- *
- * TkplatformtestInit --
- *
- *     Defines commands that test platform specific functionality for Windows
- *     platforms.
- *
- * Results:
- *     A standard Tcl result.
- *
- * Side effects:
- *     Defines new commands.
- *
- *----------------------------------------------------------------------
- */
-
-int
-TkplatformtestInit(
-    Tcl_Interp *interp)                /* Interpreter to add commands to. */
-{
-    /*
-     * Add commands for platform specific tests on MacOS here.
-     */
-
-    Tcl_CreateObjCommand(interp, "testclipboard", TestclipboardObjCmd,
-           (ClientData) Tk_MainWindow(interp), NULL);
-    Tcl_CreateObjCommand(interp, "testwinevent", TestwineventObjCmd,
-           (ClientData) Tk_MainWindow(interp), NULL);
-    Tcl_CreateObjCommand(interp, "testfindwindow", TestfindwindowObjCmd,
-           (ClientData) Tk_MainWindow(interp), NULL);
-    Tcl_CreateObjCommand(interp, "testgetwindowinfo", TestgetwindowinfoObjCmd,
-           (ClientData) Tk_MainWindow(interp), NULL);
-    Tcl_CreateObjCommand(interp, "testwinlocale", TestwinlocaleObjCmd,
-           (ClientData) Tk_MainWindow(interp), NULL);
-    return TCL_OK;
-}
-\f
-struct TestFindControlState {
-    int  id;
-    HWND control;
-};
-
-/* Callback for window enumeration - used for TestFindControl */
-BOOL CALLBACK TestFindControlCallback(
-    HWND hwnd,
-    LPARAM lParam
-)
-{
-    struct TestFindControlState *fcsPtr = (struct TestFindControlState *)lParam;
-    fcsPtr->control = GetDlgItem(hwnd, fcsPtr->id);
-    /* If we have found the control, return FALSE to stop the enumeration */
-    return fcsPtr->control == NULL ? TRUE : FALSE;
-}
-
-/*
- * Finds the descendent control window with the specified ID and returns
- * its HWND.
- */
-HWND TestFindControl(HWND root, int id)
-{
-    struct TestFindControlState fcs;
-
-    fcs.control = GetDlgItem(root, id);
-    if (fcs.control == NULL) {
-        /* Control is not a direct child. Look in descendents */
-        fcs.id = id;
-        fcs.control = NULL;
-        EnumChildWindows(root, TestFindControlCallback, (LPARAM) &fcs);
-    }
-    return fcs.control;
-}
-
-\f
-/*
- *----------------------------------------------------------------------
- *
- * AppendSystemError --
- *
- *     This routine formats a Windows system error message and places it into
- *     the interpreter result. Originally from tclWinReg.c.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------
- */
-
-static void
-AppendSystemError(
-    Tcl_Interp *interp,                /* Current interpreter. */
-    DWORD error)               /* Result code from error. */
-{
-    int length;
-    WCHAR *wMsgPtr, **wMsgPtrPtr = &wMsgPtr;
-    const char *msg;
-    char id[TCL_INTEGER_SPACE], msgBuf[24 + TCL_INTEGER_SPACE];
-    Tcl_DString ds;
-    Tcl_Obj *resultPtr = Tcl_GetObjResult(interp);
-
-    if (Tcl_IsShared(resultPtr)) {
-       resultPtr = Tcl_DuplicateObj(resultPtr);
-    }
-    length = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
-           | FORMAT_MESSAGE_IGNORE_INSERTS
-           | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, error,
-           MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (WCHAR *) wMsgPtrPtr,
-           0, NULL);
-    if (length == 0) {
-       char *msgPtr;
-
-       length = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM
-               | FORMAT_MESSAGE_IGNORE_INSERTS
-               | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, error,
-               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (char *) &msgPtr,
-               0, NULL);
-       if (length > 0) {
-           wMsgPtr = (WCHAR *) LocalAlloc(LPTR, (length + 1) * sizeof(WCHAR));
-           MultiByteToWideChar(CP_ACP, 0, msgPtr, length + 1, wMsgPtr,
-                   length + 1);
-           LocalFree(msgPtr);
-       }
-    }
-    if (length == 0) {
-       if (error == ERROR_CALL_NOT_IMPLEMENTED) {
-           strcpy(msgBuf, "function not supported under Win32s");
-       } else {
-           sprintf(msgBuf, "unknown error: %ld", error);
-       }
-       msg = msgBuf;
-    } else {
-       Tcl_Encoding encoding;
-       char *msgPtr;
-
-       encoding = Tcl_GetEncoding(NULL, "unicode");
-       Tcl_ExternalToUtfDString(encoding, (char *) wMsgPtr, -1, &ds);
-       Tcl_FreeEncoding(encoding);
-       LocalFree(wMsgPtr);
-
-       msgPtr = Tcl_DStringValue(&ds);
-       length = Tcl_DStringLength(&ds);
-
-       /*
-        * Trim the trailing CR/LF from the system message.
-        */
-
-       if (msgPtr[length-1] == '\n') {
-           --length;
-       }
-       if (msgPtr[length-1] == '\r') {
-           --length;
-       }
-       msgPtr[length] = 0;
-       msg = msgPtr;
-    }
-
-    sprintf(id, "%ld", error);
-    Tcl_SetErrorCode(interp, "WINDOWS", id, msg, NULL);
-    Tcl_AppendToObj(resultPtr, msg, length);
-    Tcl_SetObjResult(interp, resultPtr);
-
-    if (length != 0) {
-       Tcl_DStringFree(&ds);
-    }
-}
-\f
-/*
- *----------------------------------------------------------------------
- *
- * TestclipboardObjCmd --
- *
- *     This function implements the testclipboard command. It provides a way
- *     to determine the actual contents of the Windows clipboard.
- *
- * Results:
- *     A standard Tcl result.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------
- */
-
-static int
-SetSelectionResult(
-    ClientData dummy,
-    Tcl_Interp *interp,
-    const char *selection)
-{
-    Tcl_AppendResult(interp, selection, NULL);
-    return TCL_OK;
-}
-
-static int
-TestclipboardObjCmd(
-    ClientData clientData,     /* Main window for application. */
-    Tcl_Interp *interp,                /* Current interpreter. */
-    int objc,                  /* Number of arguments. */
-    Tcl_Obj *const objv[])     /* Argument values. */
-{
-    Tk_Window tkwin = (Tk_Window) clientData;
-
-    if (objc != 1) {
-       Tcl_WrongNumArgs(interp, 1, objv, NULL);
-       return TCL_ERROR;
-    }
-    return TkSelGetSelection(interp, tkwin, Tk_InternAtom(tkwin, "CLIPBOARD"),
-           XA_STRING, SetSelectionResult, NULL);
-}
-\f
-/*
- *----------------------------------------------------------------------
- *
- * TestwineventObjCmd --
- *
- *     This function implements the testwinevent command. It provides a way
- *     to send messages to windows dialogs.
- *
- * Results:
- *     A standard Tcl result.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------
- */
-
-static int
-TestwineventObjCmd(
-    ClientData clientData,     /* Main window for application. */
-    Tcl_Interp *interp,                /* Current interpreter. */
-    int objc,                  /* Number of arguments. */
-    Tcl_Obj *const objv[])             /* Argument strings. */
-{
-    HWND hwnd = 0;
-    HWND child = 0;
-    HWND control;
-    int id;
-    char *rest;
-    UINT message;
-    WPARAM wParam;
-    LPARAM lParam;
-    LRESULT result;
-    static const TkStateMap messageMap[] = {
-       {WM_LBUTTONDOWN,        "WM_LBUTTONDOWN"},
-       {WM_LBUTTONUP,          "WM_LBUTTONUP"},
-       {WM_CHAR,               "WM_CHAR"},
-       {WM_GETTEXT,            "WM_GETTEXT"},
-       {WM_SETTEXT,            "WM_SETTEXT"},
-       {WM_COMMAND,            "WM_COMMAND"},
-       {-1,                    NULL}
-    };
-
-    if ((objc == 3) && (strcmp(Tcl_GetString(objv[1]), "debug") == 0)) {
-       int b;
-
-       if (Tcl_GetBoolean(interp, Tcl_GetString(objv[2]), &b) != TCL_OK) {
-           return TCL_ERROR;
-       }
-       TkWinDialogDebug(b);
-       return TCL_OK;
-    }
-
-    if (objc < 4) {
-       return TCL_ERROR;
-    }
-
-    hwnd = INT2PTR(strtol(Tcl_GetString(objv[1]), &rest, 0));
-    if (rest == Tcl_GetString(objv[1])) {
-       hwnd = FindWindowA(NULL, Tcl_GetString(objv[1]));
-       if (hwnd == NULL) {
-           Tcl_SetObjResult(interp, Tcl_NewStringObj("no such window", -1));
-           return TCL_ERROR;
-       }
-    }
-    UpdateWindow(hwnd);
-
-    id = strtol(Tcl_GetString(objv[2]), &rest, 0);
-    if (rest == Tcl_GetString(objv[2])) {
-       char buf[256];
-
-       child = GetWindow(hwnd, GW_CHILD);
-       while (child != NULL) {
-           SendMessageA(child, WM_GETTEXT, (WPARAM) sizeof(buf), (LPARAM) buf);
-           if (strcasecmp(buf, Tcl_GetString(objv[2])) == 0) {
-               id = GetDlgCtrlID(child);
-               break;
-           }
-           child = GetWindow(child, GW_HWNDNEXT);
-       }
-       if (child == NULL) {
-           Tcl_AppendResult(interp, "could not find a control matching \"",
-               Tcl_GetString(objv[2]), "\"", NULL);
-           return TCL_ERROR;
-       }
-    }
-
-    message = TkFindStateNum(NULL, NULL, messageMap, Tcl_GetString(objv[3]));
-    wParam = 0;
-    lParam = 0;
-
-    if (objc > 4) {
-       wParam = strtol(Tcl_GetString(objv[4]), NULL, 0);
-    }
-    if (objc > 5) {
-       lParam = strtol(Tcl_GetString(objv[5]), NULL, 0);
-    }
-
-    switch (message) {
-    case WM_GETTEXT: {
-       Tcl_DString ds;
-       char buf[256];
-
-#if 0
-       GetDlgItemTextA(hwnd, id, buf, 256);
-#else
-        control = TestFindControl(hwnd, id);
-        if (control == NULL) {
-            Tcl_SetObjResult(interp,
-                             Tcl_ObjPrintf("Could not find control with id %d", id));
-            return TCL_ERROR;
-        }
-        buf[0] = 0;
-        SendMessageA(control, WM_GETTEXT, (WPARAM)sizeof(buf),
-                     (LPARAM) buf);
-#endif
-       Tcl_ExternalToUtfDString(NULL, buf, -1, &ds);
-       Tcl_AppendResult(interp, Tcl_DStringValue(&ds), NULL);
-       Tcl_DStringFree(&ds);
-       break;
-    }
-    case WM_SETTEXT: {
-       Tcl_DString ds;
-
-        control = TestFindControl(hwnd, id);
-        if (control == NULL) {
-            Tcl_SetObjResult(interp,
-                             Tcl_ObjPrintf("Could not find control with id %d", id));
-            return TCL_ERROR;
-        }
-       Tcl_UtfToExternalDString(NULL, Tcl_GetString(objv[4]), -1, &ds);
-        result = SendMessageA(control, WM_SETTEXT, 0,
-                                  (LPARAM) Tcl_DStringValue(&ds));
-       Tcl_DStringFree(&ds);
-       if (result == 0) {
-            Tcl_SetObjResult(interp, Tcl_NewStringObj("failed to send text to dialog: ", -1));
-            AppendSystemError(interp, GetLastError());
-            return TCL_ERROR;
-       }
-       break;
-    }
-    case WM_COMMAND: {
-       char buf[TCL_INTEGER_SPACE];
-       if (objc < 5) {
-           wParam = MAKEWPARAM(id, 0);
-           lParam = (LPARAM)child;
-       }
-       sprintf(buf, "%d", (int) SendMessageA(hwnd, message, wParam, lParam));
-       Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, -1));
-       break;
-    }
-    default: {
-       char buf[TCL_INTEGER_SPACE];
-
-       sprintf(buf, "%d",
-               (int) SendDlgItemMessageA(hwnd, id, message, wParam, lParam));
-       Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, -1));
-       break;
-    }
-    }
-    return TCL_OK;
-}
-\f
-/*
- *  testfindwindow title ?class?
- *     Find a Windows window using the FindWindow API call. This takes the window
- *     title and optionally the window class and if found returns the HWND and
- *     raises an error if the window is not found.
- *     eg: testfindwindow Console TkTopLevel
- *         Can find the console window if it is visible.
- *     eg: testfindwindow "TkTest #10201" "#32770"
- *         Can find a messagebox window with this title.
- */
-
-static int
-TestfindwindowObjCmd(
-    ClientData clientData,     /* Main window for application. */
-    Tcl_Interp *interp,                /* Current interpreter. */
-    int objc,                  /* Number of arguments. */
-    Tcl_Obj *const objv[])     /* Argument values. */
-{
-    const TCHAR  *title = NULL, *class = NULL;
-    Tcl_DString titleString, classString;
-    HWND hwnd = NULL;
-    int r = TCL_OK;
-    DWORD myPid;
-
-    Tcl_DStringInit(&classString);
-    Tcl_DStringInit(&titleString);
-
-    if (objc < 2 || objc > 3) {
-        Tcl_WrongNumArgs(interp, 1, objv, "title ?class?");
-        return TCL_ERROR;
-    }
-
-    title = Tcl_WinUtfToTChar(Tcl_GetString(objv[1]), -1, &titleString);
-    if (objc == 3) {
-        class = Tcl_WinUtfToTChar(Tcl_GetString(objv[2]), -1, &classString);
-    }
-    if (title[0] == 0)
-        title = NULL;
-#if 0
-    hwnd  = FindWindow(class, title);
-#else
-    /* We want find a window the belongs to us and not some other process */
-    hwnd = NULL;
-    myPid = GetCurrentProcessId();
-    while (1) {
-        DWORD pid, tid;
-        hwnd = FindWindowEx(NULL, hwnd, class, title);
-        if (hwnd == NULL)
-            break;
-        tid = GetWindowThreadProcessId(hwnd, &pid);
-        if (tid == 0) {
-            /* Window has gone */
-            hwnd = NULL;
-            break;
-        }
-        if (pid == myPid)
-            break;              /* Found it */
-    }
-
-#endif
-
-    if (hwnd == NULL) {
-       Tcl_SetObjResult(interp, Tcl_NewStringObj("failed to find window: ", -1));
-       AppendSystemError(interp, GetLastError());
-       r = TCL_ERROR;
-    } else {
-        Tcl_SetObjResult(interp, Tcl_NewLongObj(PTR2INT(hwnd)));
-    }
-
-    Tcl_DStringFree(&titleString);
-    Tcl_DStringFree(&classString);
-    return r;
-
-}
-\f
-static BOOL CALLBACK
-EnumChildrenProc(
-    HWND hwnd,
-    LPARAM lParam)
-{
-    Tcl_Obj *listObj = (Tcl_Obj *) lParam;
-
-    Tcl_ListObjAppendElement(NULL, listObj, Tcl_NewLongObj(PTR2INT(hwnd)));
-    return TRUE;
-}
-
-static int
-TestgetwindowinfoObjCmd(
-    ClientData clientData,
-    Tcl_Interp *interp,
-    int objc,
-    Tcl_Obj *const objv[])
-{
-    long hwnd;
-    Tcl_Obj *dictObj = NULL, *classObj = NULL, *textObj = NULL;
-    Tcl_Obj *childrenObj = NULL;
-    TCHAR buf[512];
-    int cch, cchBuf = 256;
-
-    if (objc != 2) {
-       Tcl_WrongNumArgs(interp, 1, objv, "hwnd");
-       return TCL_ERROR;
-    }
-
-    if (Tcl_GetLongFromObj(interp, objv[1], &hwnd) != TCL_OK)
-       return TCL_ERROR;
-
-    cch = GetClassName(INT2PTR(hwnd), buf, cchBuf);
-    if (cch == 0) {
-       Tcl_SetObjResult(interp, Tcl_NewStringObj("failed to get class name: ", -1));
-       AppendSystemError(interp, GetLastError());
-       return TCL_ERROR;
-    } else {
-       Tcl_DString ds;
-       Tcl_WinTCharToUtf(buf, -1, &ds);
-       classObj = Tcl_NewStringObj(Tcl_DStringValue(&ds), Tcl_DStringLength(&ds));
-       Tcl_DStringFree(&ds);
-    }
-
-    dictObj = Tcl_NewDictObj();
-    Tcl_DictObjPut(interp, dictObj, Tcl_NewStringObj("class", 5), classObj);
-    Tcl_DictObjPut(interp, dictObj, Tcl_NewStringObj("id", 2),
-       Tcl_NewLongObj(GetWindowLongA(INT2PTR(hwnd), GWL_ID)));
-
-    cch = GetWindowText(INT2PTR(hwnd), (LPTSTR)buf, cchBuf);
-    textObj = Tcl_NewUnicodeObj((LPCWSTR)buf, cch);
-
-    Tcl_DictObjPut(interp, dictObj, Tcl_NewStringObj("text", 4), textObj);
-    Tcl_DictObjPut(interp, dictObj, Tcl_NewStringObj("parent", 6),
-       Tcl_NewLongObj(PTR2INT(GetParent((INT2PTR(hwnd))))));
-
-    childrenObj = Tcl_NewListObj(0, NULL);
-    EnumChildWindows(INT2PTR(hwnd), EnumChildrenProc, (LPARAM)childrenObj);
-    Tcl_DictObjPut(interp, dictObj, Tcl_NewStringObj("children", -1), childrenObj);
-
-    Tcl_SetObjResult(interp, dictObj);
-    return TCL_OK;
-}
-\f
-static int
-TestwinlocaleObjCmd(
-    ClientData clientData,     /* Main window for application. */
-    Tcl_Interp *interp,                /* Current interpreter. */
-    int objc,                  /* Number of arguments. */
-    Tcl_Obj *const objv[])     /* Argument values. */
-{
-    if (objc != 1) {
-       Tcl_WrongNumArgs(interp, 1, objv, NULL);
-       return TCL_ERROR;
-    }
-    Tcl_SetObjResult(interp, Tcl_NewIntObj((int)GetThreadLocale()));
-    return TCL_OK;
-}
-\f
-/*
- * Local Variables:
- * mode: c
- * c-basic-offset: 4
- * fill-column: 78
- * End:
- */