home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1991 / 08 / dflat5 / lists.c < prev    next >
Text File  |  1991-06-10  |  4KB  |  184 lines

  1. /* --------------- focus.c -------------- */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <conio.h>
  7. #include <dos.h>
  8. #include "dflat.h"
  9.  
  10. struct LinkedList Focus = {NULLWND, NULLWND};
  11. struct LinkedList Built = {NULLWND, NULLWND};
  12.  
  13. void SetPrevFocus(WINDOW wnd)
  14. {
  15.     if (wnd != NULLWND && wnd == inFocus)    {
  16.         WINDOW wnd1 = wnd;
  17.         while (TRUE)    {
  18.             if ((wnd1 = PrevWindow(wnd1)) == NULLWND)
  19.                 wnd1 = Focus.LastWindow;
  20.             if (wnd1 == wnd)
  21.                 return;
  22.             if (wnd1 != NULLWND)
  23.                 break;
  24.         }
  25.         if (wnd1 != NULLWND)
  26.             SendMessage(wnd1, SETFOCUS, TRUE, 0);
  27.     }
  28. }
  29.  
  30. /* this function assumes that wnd is in the Focus linked list */
  31. WINDOW SearchFocusNext(WINDOW wnd, WINDOW pwnd)
  32. {
  33.     WINDOW wnd1 = wnd;
  34.  
  35.     if (wnd != NULLWND)    {
  36.         while (TRUE)    {
  37.             if ((wnd1 = NextWindow(wnd1)) == NULLWND)
  38.                 wnd1 = Focus.FirstWindow;
  39.             if (wnd1 == wnd)
  40.                 return NULLWND;
  41.             if (wnd1 != NULLWND)
  42.                 if (pwnd == NULLWND || pwnd == GetParent(wnd1))
  43.                     break;
  44.         }
  45.     }
  46.     return wnd1;
  47. }
  48.  
  49. void SetNextFocus(WINDOW wnd)
  50. {
  51.     WINDOW wnd1;
  52.  
  53.     if (wnd != inFocus)
  54.         return;
  55.     if ((wnd1 = SearchFocusNext(wnd, GetParent(wnd))) == NULLWND)
  56.         wnd1 = SearchFocusNext(wnd, NULLWND);
  57.     if (wnd1 != NULLWND)
  58.         SendMessage(wnd1, SETFOCUS, TRUE, 0);
  59. }
  60.  
  61. void RemoveBuiltWindow(WINDOW wnd)
  62. {
  63.     if (wnd != NULLWND)    {
  64.         if (PrevWindowBuilt(wnd) != NULLWND)
  65.             NextWindowBuilt(PrevWindowBuilt(wnd)) = NextWindowBuilt(wnd);
  66.         if (NextWindowBuilt(wnd) != NULLWND)
  67.             PrevWindowBuilt(NextWindowBuilt(wnd)) = PrevWindowBuilt(wnd);
  68.         if (wnd == Built.FirstWindow)
  69.             Built.FirstWindow = NextWindowBuilt(wnd);
  70.         if (wnd == Built.LastWindow)
  71.             Built.LastWindow = PrevWindowBuilt(wnd);
  72.     }
  73. }
  74.  
  75. void RemoveFocusWindow(WINDOW wnd)
  76. {
  77.     if (wnd != NULLWND)    {
  78.         if (PrevWindow(wnd) != NULLWND)
  79.             NextWindow(PrevWindow(wnd)) = NextWindow(wnd);
  80.         if (NextWindow(wnd) != NULLWND)
  81.             PrevWindow(NextWindow(wnd)) = PrevWindow(wnd);
  82.         if (wnd == Focus.FirstWindow)
  83.             Focus.FirstWindow = NextWindow(wnd);
  84.         if (wnd == Focus.LastWindow)
  85.             Focus.LastWindow = PrevWindow(wnd);
  86.     }
  87. }
  88.  
  89. void AppendBuiltWindow(WINDOW wnd)
  90. {
  91.     if (wnd != NULLWND)    {
  92.         if (Built.FirstWindow == NULLWND)
  93.             Built.FirstWindow = wnd;
  94.         if (Built.LastWindow != NULLWND)
  95.             NextWindowBuilt(Built.LastWindow) = wnd;
  96.         PrevWindowBuilt(wnd) = Built.LastWindow;
  97.         NextWindowBuilt(wnd) = NULLWND;
  98.         Built.LastWindow = wnd;
  99.     }
  100. }
  101.  
  102. void AppendFocusWindow(WINDOW wnd)
  103. {
  104.     if (wnd != NULLWND)    {
  105.         if (Focus.FirstWindow == NULLWND)
  106.             Focus.FirstWindow = wnd;
  107.         if (Focus.LastWindow != NULLWND)
  108.             NextWindow(Focus.LastWindow) = wnd;
  109.         PrevWindow(wnd) = Focus.LastWindow;
  110.         NextWindow(wnd) = NULLWND;
  111.         Focus.LastWindow = wnd;
  112.     }
  113. }
  114.  
  115. WINDOW GetFirstChild(WINDOW wnd)
  116. {
  117.     WINDOW ThisWindow = Built.FirstWindow;
  118.     while (ThisWindow != NULLWND)    {
  119.         if (GetParent(ThisWindow) == wnd)
  120.             break;
  121.         ThisWindow = NextWindowBuilt(ThisWindow);
  122.     }
  123.     return ThisWindow;
  124. }
  125.  
  126. WINDOW GetNextChild(WINDOW wnd, WINDOW ThisWindow)
  127. {
  128.     if (ThisWindow != NULLWND)    {
  129.         do    {
  130.             if ((ThisWindow = NextWindowBuilt(ThisWindow)) != NULLWND)
  131.                 if (GetParent(ThisWindow) == wnd)
  132.                     break;
  133.         }    while (ThisWindow != NULLWND);
  134.     }
  135.     return ThisWindow;
  136. }
  137.  
  138. WINDOW GetFirstFocusChild(WINDOW wnd)
  139. {
  140.     WINDOW ThisWindow = Focus.FirstWindow;
  141.     while (ThisWindow != NULLWND)    {
  142.         if (GetParent(ThisWindow) == wnd)
  143.             break;
  144.         ThisWindow = NextWindow(ThisWindow);
  145.     }
  146.     return ThisWindow;
  147. }
  148.  
  149. WINDOW GetNextFocusChild(WINDOW wnd, WINDOW ThisWindow)
  150. {
  151.     while (ThisWindow != NULLWND)    {
  152.         ThisWindow = NextWindow(ThisWindow);
  153.         if (ThisWindow != NULLWND)
  154.             if (GetParent(ThisWindow) == wnd)
  155.                 break;
  156.     }
  157.     return ThisWindow;
  158. }
  159.  
  160. WINDOW GetLastChild(WINDOW wnd)
  161. {
  162.     WINDOW ThisWindow = Built.LastWindow;
  163.     while (ThisWindow != NULLWND)    {
  164.         if (GetParent(ThisWindow) == wnd)
  165.             break;
  166.         ThisWindow = PrevWindowBuilt(ThisWindow);
  167.     }
  168.     return ThisWindow;
  169. }
  170.  
  171. WINDOW GetPrevChild(WINDOW wnd, WINDOW ThisWindow)
  172. {
  173.     if (ThisWindow != NULLWND)    {
  174.         do    {
  175.             if ((ThisWindow = PrevWindowBuilt(ThisWindow)) != NULLWND)
  176.                 if (GetParent(ThisWindow) == wnd)
  177.                     break;
  178.         }    while (ThisWindow != NULLWND);
  179.     }
  180.     return ThisWindow;
  181. }
  182.  
  183.  
  184.