home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / PUPARMS.C < prev    next >
C/C++ Source or Header  |  1990-12-21  |  3KB  |  108 lines

  1. /*
  2.       puparms.c
  3.  
  4.     % pop_SetParms
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1986, 1987, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      9/15/88 jmd    changed vid_ to disp_
  13.      9/16/88 jmd    updated for 3.0
  14.  
  15.     11/13/89 jmd    added a shadow
  16.      3/28/90 jmd    ansi-fied
  17.      8/27/90 jmd    added popparms_struct
  18.     12/05/90 jdc    fixed default auto-sizing
  19.     12/06/90 jmd    changed default to no shadow
  20.     12/12/90 jmd    fixed syntax error
  21.     12/14/90 jdc    polished auto-sizing
  22.     12/18/90 jmd    fixed auto-sizing clip to display trouble
  23.     12/21/90 ted/jdc fixed popup-positioning calculation.
  24. */
  25.  
  26. #include <stdio.h>
  27.  
  28. #include "cscape.h"
  29. #include "scancode.h"
  30. #include "popdecl.h"
  31.  
  32. popparms_struct popparms = {
  33.  
  34.     0,                                /* shadow for popups */
  35.     0x08,                            /* shadow attr for popups */
  36.  
  37.     DEFAULT_HEIGHT,                    /* popup default height */
  38.     DEFAULT_WIDTH                    /* popup default width */
  39. };
  40.  
  41. void pop_SetParms(sed_type sed, int row, int col, int height, int width, char *title)
  42. /*
  43.     Adjusts the parameters for pop up boxes.
  44.     If any of these arguments (row, col, height, width) are     
  45.     negative default values are used  (centered).
  46. */
  47. {
  48.     int bordwid, bordhgt, w_actual, h_actual;
  49.  
  50.     bordwid = bord_GetWidth(sed) - win_GetWidth(sed);
  51.     if (width < 0) {
  52.         width = popparms.width;
  53.     }
  54.     if (width < 0) {
  55.         /* use menu width */
  56.         w_actual = sed_GetMenuWidth(sed);
  57.     }
  58.     else {
  59.         /* use passed in width value */
  60.         w_actual = width;
  61.     }
  62.  
  63.     bordhgt = bord_GetHeight(sed) - win_GetHeight(sed);
  64.     if (height < 0)  {
  65.         height = popparms.height;
  66.     }
  67.     if (height < 0) {
  68.         /* use menu height */
  69.         h_actual = sed_GetMenuHeight(sed);
  70.     }
  71.     else {
  72.         /* use passed in height value */
  73.         h_actual = height;
  74.     }
  75.  
  76.     /* set up the title before centering */
  77.     if (title != NULL) {
  78.         sed_SetBorderTitle(sed, title);
  79.     }
  80.  
  81.     /* set up the position */
  82.     if (row < 0) {
  83.         row = (disp_GetHeight() - bordhgt - h_actual)/2;
  84.         row = (row < 0) ? 0 : row;
  85.     }
  86.     if (height < 0 && (row + h_actual + bordhgt > disp_GetHeight())) {
  87.         /* if auto height, clip to the display */
  88.         h_actual = disp_GetHeight() - bordhgt - row;
  89.         h_actual = (h_actual < 1) ? 1 : h_actual;
  90.     }
  91.  
  92.     if (col < 0) {
  93.         col = (disp_GetWidth() - bordwid - w_actual)/2;
  94.         col = (col < 0) ? 0 : col;
  95.     }
  96.     if (width < 0 && (col + w_actual + bordwid > disp_GetWidth())) {
  97.         /* if auto width, clip to the display */
  98.         w_actual = disp_GetWidth() - bordwid - col;
  99.         w_actual = (w_actual < 1) ? 1 : w_actual;
  100.     }
  101.  
  102.     sed_SetPosition(sed, row, col);
  103.     win_SetSize(sed, h_actual, w_actual);
  104.  
  105.     sed_SetShadow(sed, popparms.shadow);
  106.     sed_SetShadowAttr(sed, popparms.shadowattr);
  107. }
  108.