home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gwm18a.zip / wl_menu.c < prev    next >
C/C++ Source or Header  |  1995-07-03  |  3KB  |  124 lines

  1. /* Copyright 1989 GROUPE BULL -- See license conditions in file COPYRIGHT
  2.  * Copyright 1989 Massachusetts Institute of Technology
  3.  */
  4. /*********************\
  5. *               *
  6. *  WOOL_OBJECT: Menu  *
  7. *  BODY              *
  8. *               *
  9. \*********************/
  10.  
  11. #include "EXTERN.h"
  12. #include <stdio.h>
  13. #include "wool.h"
  14. #include "wl_atom.h"
  15. #include "wl_number.h"
  16. #include "wl_string.h"
  17. #include "wl_list.h"
  18. #include "gwm.h"
  19. #include "wl_event.h"
  20. #include "wl_fsm.h"
  21. #include "wl_bar.h"
  22. #include "INTERN.h"
  23. #include "wl_menu.h"
  24.  
  25. extern Menu SetUpMenu();
  26.  
  27. /*
  28.  * Constructor: wool_menu_make callable from wool
  29.  * with direction, bars
  30.  */
  31.  
  32. WOOL_Menu
  33. wool_menu_make(argc, argv)
  34. int        argc;
  35. WOOL_Bar    argv[];
  36. {
  37.     int             i,j;
  38.     WOOL_Menu       menu;
  39.  
  40.     menu = (WOOL_Menu) Malloc(sizeof(struct _WOOL_Menu) +
  41.                 Max(0, argc - 1) * sizeof(WOOL_OBJECT));
  42.     zrt_put(menu);
  43.     menu -> type = WLMenu;
  44.     menu -> direction = DefaultMenuDirection;
  45.     menu -> borderwidth = DefaultBorderWidth;
  46.     menu -> bar_separator = DefaultBarSeparator;
  47.     menu -> borderpixel = Context -> pixel.Border;
  48.     menu -> background = Context -> pixel.Back;
  49.     get_val_from_context(menu -> menu, WA_menu);
  50.     get_val_from_context(menu -> bordertile, WA_bordertile);
  51.     get_val_from_context(menu -> fsm, WA_fsm);
  52.     get_val_from_context(menu -> cursor, WA_cursor);
  53.     get_val_from_context(menu -> property, WA_property);
  54.  
  55.     fix_fsm(&(menu -> fsm));
  56.     menu -> bars_size = argc;
  57.     for (i = 0, j = 0; i < argc; i++, j++) {
  58.     increase_reference(menu -> bars[j] = argv[i]);
  59.     if (NIL == (WOOL_OBJECT) menu -> bars [j]) 
  60.         j--, menu -> bars_size--;
  61.     }
  62.     menu -> wob_menu = SetUpMenu(menu);
  63.     return menu;
  64. }
  65.  
  66. /*
  67.  * WLMenu_print:
  68.  * MENU(text)
  69.  */
  70.  
  71. WOOL_OBJECT
  72. WLMenu_print(obj)
  73. WOOL_Menu       obj;
  74. {
  75.     int i;
  76.  
  77.     wool_printf("{MENU 0x%x: ", obj);
  78.     for (i = 0; i < obj -> bars_size; i++) {
  79.     wool_print((obj -> bars)[i]);
  80.     wool_puts(" ");
  81.     }
  82.     wool_puts("}");
  83.     return (WOOL_OBJECT) obj;
  84. }
  85.  
  86. /*
  87.  * WLMenu_free:
  88.  * recursivly free string and fsm
  89.  */
  90.  
  91. WOOL_OBJECT
  92. WLMenu_free(obj)
  93. WOOL_Menu       obj;
  94. {
  95.     int i;
  96.  
  97.     decrease_reference(obj -> menu);
  98.     decrease_reference(obj -> bordertile);
  99.     decrease_reference(obj -> fsm);
  100.     decrease_reference(obj -> cursor);
  101.     decrease_reference(obj -> property);
  102.     for (i = 0; i < obj -> bars_size; i++)
  103.         decrease_reference(obj -> bars[i]);
  104.     Free(obj);
  105.     return NULL;
  106. }
  107.  
  108. WOOL_OBJECT
  109. WLMenu_get_dimensions(obj, box)
  110. WOOL_Menu obj;
  111. Box     box;                    /* RETURN the dimensions */
  112. {
  113.     return (WOOL_OBJECT) WOOL_send(WOOL_get_dimensions,
  114.              obj -> wob_menu, (obj -> wob_menu, box));
  115. }
  116.  
  117. WOOL_OBJECT
  118. WLMenu_wob(wl_menu)
  119. WOOL_Menu wl_menu;
  120. {
  121.     must_be_menu(wl_menu, 0);
  122.     return (WOOL_OBJECT) WLNumber_make(wl_menu -> wob_menu);
  123. }
  124.