home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Libraries / stdwin / Appls / test / multiwin.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-14  |  2.1 KB  |  131 lines  |  [TEXT/????]

  1. /* Multiple windows, menus */
  2.  
  3. #include "stdwin.h"
  4.  
  5. #define NW 10            /* Max # of windows */
  6.  
  7. struct {
  8.     WINDOW *win;
  9.     TEXTEDIT *tb;
  10.     int bottom;
  11. } wlist[NW];            /* Window list */
  12.  
  13. drawproc(win, l, tl, r, b)
  14.     WINDOW *win;
  15. {
  16.     int i= wgettag(win);
  17.     tedraw(wlist[i].tb);
  18. }
  19.  
  20. newwin()
  21. {
  22.     int i;
  23.     
  24.     for (i= 0; i < NW; ++i) {
  25.         if (wlist[i].win == 0) {
  26.             char title[20];
  27.             int width, height;
  28.             WINDOW *win;
  29.             sprintf(title, "Untitled-%d", i);
  30.             wlist[i].win= win= wopen(title, drawproc);
  31.             wsettag(win, i);
  32.             wgetwinsize(win, &width, &height);
  33.             wlist[i].tb= tealloc(win, 0, 0, width);
  34.             wlist[i].bottom= tegetbottom(wlist[i].tb);
  35.             wsetdocsize(win, width, wlist[i].bottom);
  36.             return;
  37.         }
  38.     }
  39.     
  40.     wmessage("Can't open another window");
  41. }
  42.  
  43. closewin(win)
  44.     WINDOW *win;
  45. {
  46.     int i= wgettag(win);
  47.     tefree(wlist[i].tb);
  48.     wclose(wlist[i].win);
  49.     wlist[i].win= 0;
  50. }
  51.  
  52. main(argc, argv)
  53.     int argc;
  54.     char **argv;
  55. {
  56.     MENU *mp;
  57.     int inew, iquit;
  58.     int stop= 0;
  59.     
  60.     winitargs(&argc, &argv);
  61.     
  62.     mp= wmenucreate(1, "File");
  63.     inew= wmenuadditem(mp, "New", 'N');
  64.     (void) wmenuadditem(mp, "", -1);
  65.     iquit= wmenuadditem(mp, "Quit", 'Q');
  66.     
  67.     newwin();        /* Initial window */
  68.     
  69.     while (!stop) {
  70.         EVENT e;
  71.         
  72.         wgetevent(&e);
  73.         
  74.         if (e.window != 0) {
  75.             int i= wgettag(e.window);
  76.             if (teevent(wlist[i].tb, &e)) {
  77.                 /*if (tegetbottom(wlist[i].tb) !=
  78.                         wlist[i].bottom)*/
  79.                 wsetdocsize(wlist[i].win,
  80.                     tegetright(wlist[i].tb),
  81.                     tegetbottom(wlist[i].tb));
  82.                 continue;
  83.             }
  84.         }
  85.         
  86.         switch (e.type) {
  87.         
  88.         case WE_MENU:
  89.             switch (e.u.m.id) {
  90.             case 1:
  91.                 if (e.u.m.item == inew)
  92.                     newwin();
  93.                 else if (e.u.m.item == iquit)
  94.                     stop= 1;
  95.                 break;
  96.             }
  97.             break;
  98.         
  99.         case WE_COMMAND:
  100.             switch (e.u.command) {
  101.             
  102.             case WC_CLOSE:
  103.                 closewin(e.window);
  104.                 break;
  105.             
  106.             }
  107.             break;
  108.         
  109.         case WE_CLOSE:
  110.             closewin(e.window);
  111.             break;
  112.  
  113.         case WE_SIZE:
  114.             {
  115.                 int i= wgettag(e.window);
  116.                 int width, height;
  117.                 wgetwinsize(e.window, &width, &height);
  118.                 temove(wlist[i].tb, 0, 0, width);
  119.                 wlist[i].bottom= tegetbottom(wlist[i].tb);
  120.                 wsetdocsize(wlist[i].win,
  121.                     width, wlist[i].bottom);
  122.             }
  123.             break;
  124.         }
  125.     }
  126.     
  127.     wdone();
  128.     exit(0);
  129. }
  130.  
  131.