tkUnixDialog.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * tkUnixDialog.c --
  3.  *
  4.  * Contains the Unix implementation of the common dialog boxes:
  5.  *
  6.  * Copyright (c) 1996 Sun Microsystems, Inc.
  7.  *
  8.  * See the file "license.terms" for information on usage and redistribution
  9.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10.  *
  11.  * RCS: @(#) $Id: tkUnixDialog.c,v 1.3 2001/08/01 16:21:12 dgp Exp $
  12.  *
  13.  */
  14.  
  15. #include "tkPort.h"
  16. #include "tkInt.h"
  17. #include "tkUnixInt.h"
  18. /*
  19.  *----------------------------------------------------------------------
  20.  *
  21.  * EvalArgv --
  22.  *
  23.  * Invokes the Tcl procedure with the arguments. argv[0] is set by
  24.  * the caller of this function. It may be different than cmdName.
  25.  * The TCL command will see argv[0], not cmdName, as its name if it
  26.  * invokes [lindex [info level 0] 0]
  27.  *
  28.  * Results:
  29.  * TCL_ERROR if the command does not exist and cannot be autoloaded.
  30.  * Otherwise, return the result of the evaluation of the command.
  31.  *
  32.  * Side effects:
  33.  * The command may be autoloaded.
  34.  *
  35.  *----------------------------------------------------------------------
  36.  */
  37. static int EvalArgv(interp, cmdName, argc, argv)
  38.     Tcl_Interp *interp; /* Current interpreter. */
  39.     char * cmdName; /* Name of the TCL command to call */
  40.     int argc; /* Number of arguments. */
  41.     char **argv; /* Argument strings. */
  42. {
  43.     Tcl_CmdInfo cmdInfo;
  44.     if (!Tcl_GetCommandInfo(interp, cmdName, &cmdInfo)) {
  45. char * cmdArgv[2];
  46. /*
  47.  * This comand is not in the interpreter yet -- looks like we
  48.  * have to auto-load it
  49.  */
  50. if (!Tcl_GetCommandInfo(interp, "auto_load", &cmdInfo)) {
  51.     Tcl_ResetResult(interp);
  52.     Tcl_AppendResult(interp, "cannot execute command "auto_load"",
  53. NULL);
  54.     return TCL_ERROR;
  55. }
  56. cmdArgv[0] = "auto_load";
  57. cmdArgv[1] = cmdName;
  58. if ((*cmdInfo.proc)(cmdInfo.clientData, interp, 2, cmdArgv)!= TCL_OK){ 
  59.     return TCL_ERROR;
  60. }
  61. if (!Tcl_GetCommandInfo(interp, cmdName, &cmdInfo)) {
  62.     Tcl_ResetResult(interp);
  63.     Tcl_AppendResult(interp, "cannot auto-load command "",
  64. cmdName, """,NULL);
  65.     return TCL_ERROR;
  66. }
  67.     }
  68.     return (*cmdInfo.proc)(cmdInfo.clientData, interp, argc, argv);
  69. }
  70. /*
  71.  *----------------------------------------------------------------------
  72.  *
  73.  * Tk_ChooseColorCmd --
  74.  *
  75.  * This procedure implements the color dialog box for the Unix
  76.  * platform. See the user documentation for details on what it
  77.  * does.
  78.  *
  79.  * Results:
  80.  * See user documentation.
  81.  *
  82.  * Side effects:
  83.  * A dialog window is created the first time this procedure is called.
  84.  * This window is not destroyed and will be reused the next time the
  85.  * application invokes the "tk_chooseColor" command.
  86.  *
  87.  *----------------------------------------------------------------------
  88.  */
  89. int
  90. Tk_ChooseColorCmd(clientData, interp, argc, argv)
  91.     ClientData clientData; /* Main window associated with interpreter. */
  92.     Tcl_Interp *interp; /* Current interpreter. */
  93.     int argc; /* Number of arguments. */
  94.     char **argv; /* Argument strings. */
  95. {
  96.     return EvalArgv(interp, "tk::ColorDialog", argc, argv);
  97. }
  98. /*
  99.  *----------------------------------------------------------------------
  100.  *
  101.  * Tk_GetOpenFileCmd --
  102.  *
  103.  * This procedure implements the "open file" dialog box for the
  104.  * Unix platform. See the user documentation for details on what
  105.  * it does.
  106.  *
  107.  * Results:
  108.  * See user documentation.
  109.  *
  110.  * Side effects:
  111.  * A dialog window is created the first this procedure is called.
  112.  * This window is not destroyed and will be reused the next time
  113.  * the application invokes the "tk_getOpenFile" or
  114.  * "tk_getSaveFile" command.
  115.  *
  116.  *----------------------------------------------------------------------
  117.  */
  118. int
  119. Tk_GetOpenFileCmd(clientData, interp, argc, argv)
  120.     ClientData clientData; /* Main window associated with interpreter. */
  121.     Tcl_Interp *interp; /* Current interpreter. */
  122.     int argc; /* Number of arguments. */
  123.     char **argv; /* Argument strings. */
  124. {
  125.     Tk_Window tkwin = (Tk_Window)clientData;
  126.     if (Tk_StrictMotif(tkwin)) {
  127. return EvalArgv(interp, "tk::MotifFDialog", argc, argv);
  128.     } else {
  129. return EvalArgv(interp, "tk::FDialog", argc, argv);
  130.     }
  131. }
  132. /*
  133.  *----------------------------------------------------------------------
  134.  *
  135.  * Tk_GetSaveFileCmd --
  136.  *
  137.  * Same as Tk_GetOpenFileCmd but opens a "save file" dialog box
  138.  * instead
  139.  *
  140.  * Results:
  141.  * Same as Tk_GetOpenFileCmd.
  142.  *
  143.  * Side effects:
  144.  * Same as Tk_GetOpenFileCmd.
  145.  *
  146.  *----------------------------------------------------------------------
  147.  */
  148. int
  149. Tk_GetSaveFileCmd(clientData, interp, argc, argv)
  150.     ClientData clientData; /* Main window associated with interpreter. */
  151.     Tcl_Interp *interp; /* Current interpreter. */
  152.     int argc; /* Number of arguments. */
  153.     char **argv; /* Argument strings. */
  154. {
  155.     Tk_Window tkwin = (Tk_Window)clientData;
  156.     if (Tk_StrictMotif(tkwin)) {
  157. return EvalArgv(interp, "tk::MotifFDialog", argc, argv);
  158.     } else {
  159. return EvalArgv(interp, "tk::FDialog", argc, argv);
  160.     }
  161. }
  162. /*
  163.  *----------------------------------------------------------------------
  164.  *
  165.  * Tk_MessageBoxCmd --
  166.  *
  167.  * This procedure implements the MessageBox window for the
  168.  * Unix platform. See the user documentation for details on what
  169.  * it does.
  170.  *
  171.  * Results:
  172.  * See user documentation.
  173.  *
  174.  * Side effects:
  175.  * None. The MessageBox window will be destroy before this procedure
  176.  * returns.
  177.  *
  178.  *----------------------------------------------------------------------
  179.  */
  180. int
  181. Tk_MessageBoxCmd(clientData, interp, argc, argv)
  182.     ClientData clientData; /* Main window associated with interpreter. */
  183.     Tcl_Interp *interp; /* Current interpreter. */
  184.     int argc; /* Number of arguments. */
  185.     char **argv; /* Argument strings. */
  186. {
  187.     return EvalArgv(interp, "tk::MessageBox", argc, argv);
  188. }