home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / term43-source.lha / Extras / Source / gtlayout-Source.lha / LTP_Find.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-21  |  1.9 KB  |  100 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1994 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #include "gtlayout_global.h"
  8.  
  9. ObjectNode * __regargs
  10. LTP_FindNode_Position(ObjectNode *group,LONG x,LONG y)
  11. {
  12.     ObjectNode    *node;
  13.     ULONG         page;
  14.  
  15.     SCANPAGE(group,node,page)
  16.     {
  17.         if(node -> Type == GROUP_KIND)
  18.         {
  19.             ObjectNode *result;
  20.  
  21.             if(result = LTP_FindNode_Position(node,x,y))
  22.                 return(result);
  23.         }
  24.         else
  25.         {
  26.             if(node -> Left <= x && node -> Left + node -> Width > x && node -> Top <= y && node -> Top + node -> Height > y)
  27.             {
  28.                 if(node -> Type == PICKER_KIND)
  29.                     return(node -> Special . Picker . Parent -> UserData);
  30.  
  31.                 if(node -> Type == INCREMENTER_KIND)
  32.                     return(node -> Special . Incrementer . Parent -> UserData);
  33.  
  34.                 return(node);
  35.             }
  36.         }
  37.     }
  38.  
  39.     return(NULL);
  40. }
  41.  
  42.  
  43. /*****************************************************************************/
  44.  
  45.  
  46. ObjectNode * __regargs
  47. LTP_FindNode(ObjectNode *group,LONG id)
  48. {
  49.     ObjectNode *node;
  50.     ObjectNode *result;
  51.  
  52.     SCANGROUP(group,node)
  53.     {
  54.         if(node -> Type == GROUP_KIND)
  55.         {
  56.             if(node -> ID == id)
  57.                 return(node);
  58.  
  59.             if(result = LTP_FindNode(node,id))
  60.                 return(result);
  61.         }
  62.         else
  63.         {
  64.             if((node -> ID == id) && (node -> Type != PICKER_KIND) && (node -> Type != INCREMENTER_KIND))
  65.                 return(node);
  66.         }
  67.     }
  68.  
  69.     return(NULL);
  70. }
  71.  
  72.  
  73. /*****************************************************************************/
  74.  
  75.  
  76. struct Gadget * __regargs
  77. LTP_FindGadget(LayoutHandle *handle,LONG id)
  78. {
  79.     if(handle && handle -> GadgetArray)
  80.     {
  81.         LONG i = handle -> Count;
  82.  
  83.         while(i--)
  84.         {
  85.             if(handle -> GadgetArray[i])
  86.             {
  87.                 if(handle -> GadgetArray[i] -> GadgetID == id && handle -> GadgetArray[i] -> UserData)
  88.                 {
  89.                     register struct ObjectNode *Node = (struct ObjectNode *)handle -> GadgetArray[i] -> UserData;
  90.  
  91.                     if(Node -> PointBack == Node && Node -> Host == handle -> GadgetArray[i])
  92.                         return(handle -> GadgetArray[i]);
  93.                 }
  94.             }
  95.         }
  96.     }
  97.  
  98.     return(NULL);
  99. }
  100.