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

  1. /*
  2.     menudrow.c     4/10/88
  3.  
  4.     % menu_DeleteRows
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1988, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      6/07/88 jmd    added call to tb_DeleteRow
  13.      6/24/88 jmd    converted to new xarray/iarray calls
  14.  
  15.      4/16/89 jmd     adjusted for jarray
  16.      4/22/89 jmd    moved DelTBrow to the end
  17.  
  18.      3/28/90 jmd    ansi-fied
  19. */
  20.  
  21. #include "menu.h"
  22.  
  23. void menu_DeleteRows(menu_type menu, int row, int count)
  24. /*
  25.     Deletes count rows in the menu starting with row.
  26. */
  27. {
  28.     register int     i;
  29.     int             fno, rfld;
  30.  
  31.     /* test menu and row number */
  32.     cs_Assert(menu_Ok(menu), CS_M_DR_MENU, 0);    /* passed bad menu */
  33.     cs_Assert(row >= 0 && row < menu_GetRowCount(menu), CS_M_DR_ARG, 0);    /* passed bad args */
  34.  
  35.     /* check count */
  36.     if (count <= 0) {
  37.         return;
  38.     }
  39.     else {
  40.         count = (count > menu_GetRowCount(menu) - row) ? menu_GetRowCount(menu) - row : count;
  41.     }
  42.  
  43.     /* delete all the fields in the rows */
  44.     for (i = row + count - 1; i >= row; i--) {
  45.         if ((fno = ia_Get((menu)->fgrid, i)) > 0) {
  46.             for (fno = fno - 1; fno >= 0; fno = rfld) {
  47.                 /* get fno BEFORE deleting field */
  48.                 rfld = menu_GetFieldRight(menu, fno);
  49.                 menu_DeleteField(menu, fno);
  50.                 /* compensate for deleted field */
  51.                 if (rfld > fno) {
  52.                     rfld--;
  53.                 }
  54.             }
  55.         }
  56.     }
  57.  
  58.     /* adjust the row position for all the fields below */
  59.     /* slide the row array */
  60.     for (i = row; i <= menu_GetRowCount(menu) - count; i++) {
  61.         fno = ia_Get((menu)->fgrid, i + count);
  62.         ia_Put((menu)->fgrid, i, fno);
  63.         if (fno > 0) {
  64.             for (fno = fno - 1; fno >= 0; fno = menu_GetFieldRight(menu, fno)) {
  65.                 field_SetRow(menu_GetField(menu, fno), i);
  66.             }
  67.         }
  68.     }
  69.     
  70.     /* clear the now unused area of the row array */
  71.     fno = 0;
  72.     for (i = menu_GetRowCount(menu) - count; i < menu->frowcount; i++) {
  73.         ia_Put((menu)->fgrid, i, fno);
  74.     }
  75.     menu->frowcount -= count;
  76.  
  77.     /* delete the text in the rows */
  78.     for (i = 0; i < count; i++) {
  79.         menu_DelRowTB(menu, row, 0);
  80.     }
  81.  
  82.     /* menu size is now incorrect */
  83.     menu_SetDirty(menu, TRUE);
  84. }
  85.