home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mitsch75.zip / scheme-7_5_17-src.zip / scheme-7.5.17 / src / swat / c / widget-c.c < prev   
C/C++ Source or Header  |  1995-08-02  |  8KB  |  280 lines

  1. #include <stdio.h>
  2. #include "tk.h"
  3. #include "default.h"
  4. #include "tkInt.h"
  5.  
  6. typedef struct
  7. { Tk_Window tkwin;
  8.   Display *display;
  9.   Tcl_Interp *interp;
  10. } All_Widgets;
  11.  
  12.  
  13. int *
  14. MakeButton(Tk_Window tkMainWindow, char *name)
  15. { char      *argv [2];
  16.   Tcl_Interp *tclInterp;
  17.  
  18.   argv [0] = "button";
  19.   argv [1] = name;
  20.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  21.   if (Tk_ButtonCmd ((ClientData) tkMainWindow,
  22.             tclInterp, 2, argv) != TCL_OK)
  23.   { fprintf (stderr, tclInterp->result);
  24.     exit (1);
  25.   }
  26.   return (int *) GetCmdClientData (tclInterp, name);
  27. }
  28.  
  29. int *
  30. MakeCanvas(Tk_Window tkMainWindow, char *name)
  31. { char      *argv [2];
  32.   Tcl_Interp *tclInterp;
  33.  
  34.   argv [0] = "canvas";
  35.   argv [1] = name;
  36.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  37.   if (Tk_CanvasCmd ((ClientData) tkMainWindow,
  38.             tclInterp, 2, argv) != TCL_OK)
  39.   { fprintf (stderr, tclInterp->result);
  40.     exit (1);
  41.   }
  42.   return (int *) GetCmdClientData (tclInterp, name);
  43. }
  44.  
  45. int *
  46. MakeCheckButton(Tk_Window tkMainWindow, char *name)
  47. { char      *argv [2];
  48.   Tcl_Interp *tclInterp;
  49.  
  50.   argv [0] = "checkbutton";
  51.   argv [1] = name;
  52.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  53.   if (Tk_ButtonCmd ((ClientData) tkMainWindow,
  54.             tclInterp, 2, argv) != TCL_OK)
  55.   { fprintf (stderr, tclInterp->result);
  56.     exit (1);
  57.   }
  58.   return (int *) GetCmdClientData (tclInterp, name);
  59. }
  60.  
  61. int *
  62. MakeEntry(Tk_Window tkMainWindow, char *name)
  63. { char      *argv [2];
  64.   Tcl_Interp *tclInterp;
  65.  
  66.   argv [0] = "entry";
  67.   argv [1] = name;
  68.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  69.   if (Tk_EntryCmd ((ClientData) tkMainWindow,
  70.            tclInterp, 2, argv) != TCL_OK)
  71.   { fprintf (stderr, tclInterp->result);
  72.     exit (1);
  73.   }
  74.   return (int *) GetCmdClientData (tclInterp, name);
  75. }
  76.  
  77. int *
  78. MakeLabel(Tk_Window tkMainWindow, char *name)
  79. { char      *argv [2];
  80.   Tcl_Interp *tclInterp;
  81.  
  82.   argv [0] = "label";
  83.   argv [1] = name;
  84.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  85.   if (Tk_ButtonCmd ((ClientData) tkMainWindow,
  86.            tclInterp, 2, argv) != TCL_OK)
  87.   { fprintf (stderr, tclInterp->result);
  88.     exit (1);
  89.   }
  90.   return (int *) GetCmdClientData (tclInterp, name);
  91. }
  92.  
  93. int *
  94. MakeListbox(Tk_Window tkMainWindow, char *name)
  95. { char      *argv [2];
  96.   Tcl_Interp *tclInterp;
  97.  
  98.   argv [0] = "listbox";
  99.   argv [1] = name;
  100.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  101.   if (Tk_ListboxCmd ((ClientData) tkMainWindow,
  102.              tclInterp, 2, argv) != TCL_OK)
  103.   { fprintf (stderr, tclInterp->result);
  104.     exit (1);
  105.   }
  106.   return (int *) GetCmdClientData (tclInterp, name);
  107. }
  108.  
  109. int *
  110. MakeMenu(Tk_Window tkMainWindow, char *name)
  111. { char      *argv [2];
  112.   Tcl_Interp *tclInterp;
  113.  
  114.   argv [0] = "menu";
  115.   argv [1] = name;
  116.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  117.   if (Tk_MenuCmd ((ClientData) tkMainWindow,
  118.            tclInterp, 2, argv) != TCL_OK)
  119.   { fprintf (stderr, tclInterp->result);
  120.     exit (1);
  121.   }
  122.   return (int *) GetCmdClientData (tclInterp, name);
  123. }
  124.  
  125. int *
  126. MakeMenuButton(Tk_Window tkMainWindow, char *name)
  127. { char      *argv [2];
  128.   Tcl_Interp *tclInterp;
  129.  
  130.   argv [0] = "menubutton";
  131.   argv [1] = name;
  132.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  133.   if (Tk_MenubuttonCmd ((ClientData) tkMainWindow,
  134.             tclInterp, 2, argv) != TCL_OK)
  135.   { fprintf (stderr, tclInterp->result);
  136.     exit (1);
  137.   }
  138.   return (int *) GetCmdClientData (tclInterp, name);
  139. }
  140.  
  141. int *
  142. MakeMessage(Tk_Window tkMainWindow, char *name)
  143. { char      *argv [2];
  144.   Tcl_Interp *tclInterp;
  145.  
  146.   argv [0] = "message";
  147.   argv [1] = name;
  148.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  149.   if (Tk_MessageCmd ((ClientData) tkMainWindow,
  150.              tclInterp, 2, argv) != TCL_OK)
  151.   { fprintf (stderr, tclInterp->result);
  152.     exit (1);
  153.   }
  154.   return (int *) GetCmdClientData (tclInterp, name);
  155. }
  156.  
  157. int *
  158. MakeRadioButton(Tk_Window tkMainWindow, char *name)
  159. { char      *argv [2];
  160.   Tcl_Interp *tclInterp;
  161.  
  162.   argv [0] = "radiobutton";
  163.   argv [1] = name;
  164.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  165.   if (Tk_ButtonCmd ((ClientData) tkMainWindow,
  166.             tclInterp, 2, argv) != TCL_OK)
  167.   { fprintf (stderr, tclInterp->result);
  168.     exit (1);
  169.   }
  170.   return (int *) GetCmdClientData (tclInterp, name);
  171. }
  172.  
  173. int *
  174. MakeScale(Tk_Window tkMainWindow, char *name)
  175. { char      *argv [2];
  176.   Tcl_Interp *tclInterp;
  177.  
  178.   argv [0] = "scale";
  179.   argv [1] = name;
  180.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  181.   if (Tk_ScaleCmd ((ClientData) tkMainWindow,
  182.             tclInterp, 2, argv) != TCL_OK)
  183.   { fprintf (stderr, tclInterp->result);
  184.     exit (1);
  185.   }
  186.   
  187.   return (int *) GetCmdClientData (tclInterp, name);
  188. }
  189.  
  190. int *
  191. MakeScrollBar(Tk_Window tkMainWindow, char *name)
  192. { char      *argv [2];
  193.   Tcl_Interp *tclInterp;
  194.  
  195.   argv [0] = "scrollbar";
  196.   argv [1] = name;
  197.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  198.   if (Tk_ScrollbarCmd ((ClientData) tkMainWindow,
  199.                tclInterp, 2, argv) != TCL_OK)
  200.   { fprintf (stderr, tclInterp->result);
  201.     exit (1);
  202.   }
  203.   return (int *) GetCmdClientData (tclInterp, name);
  204. }
  205.  
  206. int *
  207. MakeText(Tk_Window tkMainWindow, char *name)
  208. { char      *argv [2];
  209.   Tcl_Interp *tclInterp;
  210.  
  211.   argv [0] = "text";
  212.   argv [1] = name;
  213.   tclInterp = (((TkWindow *) arg_integer(1))->mainPtr)->interp;
  214.   if (Tk_TextCmd ((ClientData) tkMainWindow,
  215.           tclInterp, 2, argv) != TCL_OK)
  216.   { fprintf (stderr, tclInterp->result);
  217.     exit (1);
  218.   }
  219.   return (int *) GetCmdClientData (tclInterp, name);
  220. }
  221.  
  222. /* These ought to be in tk-c.c but need internal data structures to work */
  223.  
  224. char *
  225. tk_map_widget (All_Widgets *Widget, Tk_Window tkMainWindow, char *name,
  226.            Window xwindow, int x, int y)
  227. /* This better work for all TK widgets or there's trouble */
  228. /* "name" is the name originally given to this widget. */
  229. { TkWindow *win;
  230.  
  231.   win = ((TkWindow *) (Widget->tkwin));
  232.   if ((xwindow != (Window) NULL) &&
  233.       (((win->parentPtr)->window) != xwindow))
  234.   { extern int        NameWindow _ANSI_ARGS_((Tcl_Interp *interp,
  235.                         TkWindow *winPtr,
  236.                         TkWindow *parentPtr,
  237.                         char *name));
  238.     char *argv [3];
  239.     Tcl_Interp *tclInterp = (((TkWindow *) tkMainWindow)->mainPtr)->interp;
  240.     Tk_Window InternalWindow =
  241.       Tk_CreateWindow(tclInterp, tkMainWindow, name, (char *) NULL);
  242.  
  243.     ((TkWindow *) InternalWindow)->window = xwindow;
  244.     if (((win->parentPtr)->window) != (Window) NULL)
  245.       fprintf(stderr, "tk_map_widget: changing parent window!\n");
  246.     NameWindow(tclInterp, (TkWindow *) win,
  247.            (TkWindow *) InternalWindow, name);
  248.     argv[0] = "rename";
  249.     argv[1] = name;
  250.     argv[2] = Tk_PathName((Tk_Window) win);
  251.     if (Tcl_RenameCmd((ClientData) 0, tclInterp, 3, argv) != TCL_OK)
  252.     { fprintf(stderr, "Failed. %s\n", tclInterp->result);
  253.     }
  254.   }
  255.   Tk_MoveWindow ((Tk_Window) win, x, y);
  256.   if (xwindow == (Window) NULL) Tk_UnmapWindow((Tk_Window) win);
  257.   else Tk_MapWindow ((Tk_Window) win);
  258.   return Tk_PathName((Tk_Window) win);
  259. }
  260.  
  261. Tk_Window
  262. tk_tkwin_widget (All_Widgets *Widget)
  263. /* This better work for all TK widgets or there's trouble */
  264. {
  265.     return Widget->tkwin;
  266. }
  267.  
  268. void
  269. tk_destroy_widget (All_Widgets *Widget)
  270. { /* This better work for all TK widgets or there's trouble */
  271.   Tk_DestroyWindow(Widget->tkwin);
  272.   return;
  273. }
  274.  
  275. void
  276.   tk_delete_display (Display *disp)
  277. { Tk_DestroyDisplayByNumber(disp);
  278.   return;
  279. }
  280.