home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_C / WINCPP.ZIP / WLIST.CPP < prev    next >
C/C++ Source or Header  |  1994-01-22  |  2KB  |  133 lines

  1. #include "window.h"
  2.  
  3. WindowList::WindowList()
  4. {
  5.     Bottom = NULL;
  6.     Top = NULL;
  7.     Current = NULL;
  8. }
  9.  
  10.  
  11. WindowList::~WindowList()
  12. {
  13.     WindowListNode *NextNode;
  14.  
  15.     Current = Bottom;
  16.     while (Current != NULL) {
  17.         NextNode = Current->Next;
  18.         delete Current;
  19.         Current = NextNode;
  20.     }
  21. }
  22.  
  23.  
  24. void WindowList::Add(Window *w)
  25. {
  26.     if (w == NULL)
  27.         return;
  28.     else {
  29.         if (Top == NULL) {
  30.             Top = new WindowListNode;
  31.             if (Top == NULL)
  32.                 Error("Can't allocate Top item");
  33.             Top->Prev = NULL;
  34.             Top->Next = NULL;
  35.             Top->WindowPtr = w;
  36.             Bottom = Top;
  37.         }
  38.         else {
  39.             Top->Next = new WindowListNode;
  40.             if (Top->Next == NULL)
  41.                 Error("can't allocate new item");
  42.             Top->Next->Next = NULL;
  43.             Top->Next->Prev = Top;
  44.             Top = Top->Next;
  45.             Top->WindowPtr = w;
  46.         }
  47.     }
  48. }
  49.  
  50.  
  51. void WindowList::Delete(Window *w)
  52. {
  53.     if (w == NULL)
  54.         return;
  55.     else {
  56.         Current = Bottom;
  57.         while ((Current != NULL) && (Current->WindowPtr != w))
  58.             Current = Current->Next;
  59.         if (Current->WindowPtr == w) {
  60.             if (Current->Prev == NULL)
  61.                 Bottom = Current->Next;
  62.             else
  63.                 Current->Prev->Next = Current->Next;
  64.             if (Current->Next == NULL)
  65.                 Top = Current->Prev;
  66.             else
  67.                 Current->Next->Prev = Current->Prev;
  68.             delete Current;
  69.         }
  70.     }
  71. }
  72.  
  73.  
  74. void WindowList::MoveTop(Window *w)
  75. {
  76.     if (w == NULL)
  77.         return;
  78.     else {
  79.         Delete(w);
  80.         Add(w);
  81.     }
  82. }
  83.  
  84.  
  85. void WindowList::MoveBottom(Window *w)
  86. {
  87.     if (w == NULL)
  88.         return;
  89.     else {
  90.         Delete(w);
  91.         Bottom->Prev = new WindowListNode;
  92.         if (Bottom->Prev == NULL)
  93.             Error("Can't allocate new item");
  94.         Bottom->Prev->Prev = NULL;
  95.         Bottom->Prev->Next = Bottom;
  96.         Bottom->Prev->WindowPtr = w;
  97.         Bottom = Bottom->Prev;
  98.     }
  99. }
  100.  
  101.  
  102. short WindowList::IsTop(Window *w)
  103. {
  104.     if (Top != NULL)
  105.         return(w == Top->WindowPtr);
  106.     else
  107.         return 0;
  108. }
  109.  
  110.  
  111. Window * WindowList::AtBottom()
  112. {
  113.     Current = Bottom;
  114.     if (Current == NULL)
  115.         return NULL;
  116.     else
  117.         return Current->WindowPtr;
  118. }
  119.  
  120.  
  121. Window * WindowList::NextWindow()
  122. {
  123.     if (Current == NULL)
  124.         return NULL;
  125.     else {
  126.         Current = Current->Next;
  127.         if (Current == NULL)
  128.             return NULL;
  129.         else
  130.             return Current->WindowPtr;
  131.     }
  132. }
  133.