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

  1. /*
  2.     slddrows.c
  3.  
  4.     % sled_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.     10/14/88 jdc    created
  13.     11/09/88 jdc    rewrote for sarrays
  14.  
  15.      3/29/89 jmd    converted seds to 'pure' objects, cleaned up macros
  16.      4/13/89 jmd    added Fenter, Fexit support
  17.      8/04/89 gam    changed #include <sledwin.h> to sled.h
  18.      8/05/89 gam    added support for protected/marked rows and columns
  19.      9/01/89 pmc    fixed so properly restores active status
  20.  
  21.      2/22/90 jdc    fixed
  22.      2/24/90 jdc    removed sled_GetHeight
  23.      3/28/90 jmd    ansi-fied
  24.      8/27/90 jdc    fixed backscroll with text at top problem
  25. */
  26.  
  27. #include "sed.h"
  28. #include "sadecl.h"
  29. #include "sled.h"
  30.  
  31. void sled_DeleteRows(sed_type sed, int row, int count)
  32. {
  33.     int col, back = 0, hgt;
  34.     sarray_type sa;
  35.     boolean actflag;
  36.  
  37.     /* Save current field vars */
  38.     sed_DoSexits(sed);
  39.  
  40.     /* = in loop because of extra row marking/protection sarray */
  41.     for (col = 0; col <= sled_GetWidth(sed); col++) {
  42.  
  43.         sa = (sarray_type) xa_Get(sled_GetXa(sed), col);
  44.  
  45.         if (row <= 0 && count >= sled_GetColSize(sed)) {
  46.             /* don't delete the last row, just blank it */
  47.             sa_Blank(sa, (long)row, 1, FALSE);
  48.         }
  49.         else {
  50.             sa_Del(sa, (long)row, (long)count);
  51.         }
  52.     }
  53.  
  54.     /* if the field should appear to be newly entered */
  55.     if (row <= sled_GetRow(sed) && row + count > sled_GetRow(sed)) {
  56.         sed_GoHome(sed);
  57.         sed_DoFieldFenter(sed, sed_GetFieldNo(sed));
  58.     }
  59.  
  60.     /* adjust size */
  61.     if (sled_SetColSize(sed, sled_GetColSize(sed) - count) <= 0) {
  62.         sled_SetColSize(sed, 1);
  63.     }
  64.     sed_SetMenuVHeight(sed, sled_GetColSize(sed));
  65.     hgt = sed_GetMenuHeight(sed) - menu_GetFieldRow(sed_GetMenu(sed), 0);
  66.  
  67.     /* adjust offset */
  68.     if (sled_GetColSize(sed) < hgt) {
  69.         sled_SetOffset(sed, 0);
  70.     }
  71.     else {
  72.         back = ((back = sled_GetOffset(sed) - (sled_GetColSize(sed) - hgt)) < 0)
  73.             ? 0 : back;
  74.         sled_SetOffset(sed, sled_GetOffset(sed) - back);
  75.     }
  76.     /* get the fields pointing at the right vars, and update the records */
  77.     sled_remapper(sed, 0);
  78.     sed_DoSenters(sed);
  79.  
  80.     /* place the field highlight */
  81.     row = sed_GetGridRow(sed, sed_GetFieldNo(sed)) + back;
  82.     if (row + sled_GetOffset(sed) >= sled_GetColSize(sed)) {
  83.         row = sled_GetColSize(sed) - 1 - sled_GetOffset(sed);
  84.     }
  85.     if ((actflag = sed_GetActive(sed)) != FALSE) {
  86.         sed_SetActive(sed, FALSE);
  87.     }
  88.     sed_GotoGridField(sed, row, sed_GetGridCol(sed, sed_GetFieldNo(sed)));
  89.     sed_SetActive(sed, actflag);
  90. }
  91.