home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / MENUSIZE.C < prev    next >
C/C++ Source or Header  |  1990-03-28  |  2KB  |  90 lines

  1. /*
  2.     menusize.c
  3.  
  4.     % menu_RecalcSize
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1988, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      8/23/88 jdc    created
  13.     12/13/88 jdc    handles bobs too
  14.      7/02/89 jdc    added frowcount change
  15.      8/10/89 jmd    convert bobs to wins
  16.  
  17.      3/28/90 jmd    ansi-fied
  18. */
  19.  
  20. #include "menu.h"
  21. #include "bordobj.h"            /* for bord_ calls */
  22.  
  23. void menu_RecalcSize(menu_type menu)
  24. /*
  25.     Recalculates the size of the menu.
  26. */
  27. {
  28.     int         row, count, text_done, fldno, hgt, wid;
  29.     tb_type     tb;
  30.     bob_type     bob;
  31.     field_type  field;
  32.  
  33.  
  34.     if (!menu_IsDirty(menu)) {
  35.         return;
  36.     }
  37.  
  38.     tb = menu_GetTextbuf(menu);
  39.  
  40.     /* reset menu height and width */
  41.     menu->rowcount = menu->frowcount = menu->colcount = 0;
  42.  
  43.     /* loop through all the rows until everything has been checked! */
  44.     for (row = 0, count = menu->fieldcount, text_done = FALSE;
  45.         count > 0 || !text_done;
  46.         row++) {
  47.  
  48.         if (count > 0 && (fldno = menu_GetGRow(menu, row)) > 0) {
  49.             fldno--;
  50.  
  51.             /* check all the fields across the row, include bobs. */
  52.             do {
  53.                 field = menu_GetField(menu, fldno);
  54.  
  55.                 if ((bob = field_GetBob(field)) != NULL && bob_IsDepend(bob)) {
  56.                     hgt = bord_GetHeight(bob);
  57.                     wid = bord_GetWidth(bob);
  58.                 }
  59.                 else {
  60.                     hgt = 1;
  61.                     wid = field_GetWidth(field);
  62.                 }
  63.  
  64.                 if ((wid += field_GetCol(field)) > menu->colcount) {
  65.                     menu->colcount = wid;
  66.                 }
  67.                 if ((hgt += row) > menu->frowcount) {
  68.                     menu->frowcount = hgt;
  69.                 }
  70.                 count--;
  71.             }
  72.             while ((fldno = field_GetRight(field)) >= 0);
  73.         }
  74.         /* check the text too */
  75.         if (tb_FindLine(tb, row) <= 0) {
  76.             text_done = TRUE;
  77.         }
  78.         else {
  79.             if (row >= menu->rowcount) {
  80.                 menu->rowcount = row + 1;
  81.             }
  82.             if (tb->exp_len > menu->colcount) {
  83.                 menu->colcount = tb->exp_len;
  84.             }
  85.         }
  86.     }
  87.     menu_SetDirty(menu, FALSE);
  88. }
  89.  
  90.