home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / SDMEVACC.C < prev    next >
Text File  |  1990-08-28  |  3KB  |  97 lines

  1. /*
  2.     sdmevacc.c  11/28/89
  3.  
  4.     % sedmev_acceptoffer
  5.     Extracted by Ted from sed mouse handlers that Joe wrote.
  6.  
  7.     Standard functions for handling the tricky business of accepting
  8.     mouse offer messages.
  9.  
  10.     C-scape 3.2
  11.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  12.     ALL RIGHTS RESERVED.
  13.  
  14.     Revision History:
  15.     -----------------
  16.      1/04/90 jmd    re-vised, removed jump window, split files
  17.      1/24/90 ted    added sedmev_greedyclip function.
  18.      3/03/90 ted/pmcm Added support for sed_FindField -2 return in case of protected fields.
  19.      3/28/90 jmd    ansi-fied
  20.      5/12/90 jmd    greedyclip now returns an int
  21.      8/27/90 ted    Added code to stash next field for mev win instead of
  22.                      actually setting it here.
  23. */
  24.  
  25. #include <stdio.h>
  26. #include "cscape.h"
  27. #include "scancode.h"
  28. /* -------------------------------------------------------------------------- */
  29.  
  30. int sedmev_acceptoffer(sed_type sed, mev_struct *mev, boolean goanyway)
  31. /*
  32.     Accepts a mouse offer message, generating a request to the current window
  33.     to become the new current window.
  34.     Returns the number of the field under the mouse.
  35.     If no field is under the mouse and the goanyway flag is set, the offer
  36.     is accepted and -1 is returned.
  37.     If no field is under the mouse and the goanyway flag is not set, the offer
  38.     is not accepted and -2 is returned.
  39.  
  40.     'goanyway'    flag to go even if no field is under mouse
  41. */
  42. {
  43.     int      fld;
  44.     ocbox      mbox;
  45.  
  46.     /* Figure out where in the selected sed we want to jump to */
  47.     mbox.toprow = mbox.botrow = mev_GetRow(mev) + sed_GetYoffset(sed);
  48.     mbox.leftcol = mbox.rightcol = mev_GetCol(mev) + sed_GetXoffset(sed);
  49.  
  50.     if ((fld = sed_FindField(sed, &mbox, OAK_DOWN)) >= 0) {
  51.         if (fld != sed_GetFieldNo(sed)) {
  52.             win_SetNextChild(sed, fld);
  53.         }
  54.     }
  55.     else if (!goanyway) {
  56.         /* Mouse isn't over a field, ignore it unless goanyway flag is set */
  57.         mev_ClearEvent(mev);
  58.         return(-2);
  59.     }
  60.  
  61.     /* Don't clear mev event - accept the offer, make the request */
  62.  
  63.     /* If no unprotected field is under the mouse but we're going anyway, return -1 */
  64.     return((fld < 0) ? -1 : fld);
  65. }
  66. /* -------------------------------------------------------------------------- */
  67.  
  68. int sedmev_greedyclip(sed_type sed, mev_struct *mev)
  69. {
  70.     opbox bbox;
  71.  
  72.     /* If the event is inside our window or border, return MOU_HERE. */
  73.     bord_GetPixBox(sed, &bbox);
  74.     if (mev_GetX(mev) >= bbox.xmin && mev_GetY(mev) >= bbox.ymin &&
  75.         mev_GetX(mev) <  bbox.xmax && mev_GetY(mev) <  bbox.ymax) {
  76.  
  77.         return(MOU_HERE);
  78.     }
  79.     else {     /* Otherwise exit if button is clicked */
  80.         if (!mev_IsButtonDown(mev)) {
  81.             win_SetDebounced(sed, FALSE);
  82.         }
  83.         else {
  84.             if (!win_GetDebounced(sed)) {
  85.                 win_SetDebounced(sed, TRUE);
  86.  
  87.                 /* Mouse has been clicked outside the window; return
  88.                    MOU_THERE so that the popup can be removed */
  89.                 return(MOU_THERE);
  90.             }
  91.         }
  92.     }
  93.     return(MOU_IGNORE);
  94. }
  95. /* -------------------------------------------------------------------------- */
  96.  
  97.