// Project 2
// CS2604 : Data Structures
// Hussein Suleman
// 14 July 1999

// ---------------------------------------------------------------------

#include <stdlib.h>

#include "window.h"
#include "windowl.h"

WindowList::WindowList ()
{
   Head = NULL;
}

WindowList::~WindowList ()
{
   while (Head != NULL)
      DeleteWindow ();
}

void WindowList::Traverse ( void (* Visit )( Window * ) )
{
   if (Head == NULL) return;
   Window *p = Head;
   Visit (p);
   p = p->Next;
   while (p != Head)
   {
      Visit (p);
      p = p->Next;
   }
}

void WindowList::AddWindow ( char *s )
{
   if (Head == NULL)
   {
      Head = new Window (s);
      Head->Next = Head;
      Head->Prev = Head;
   }
   else
   {
      Window *p = new Window (s);
      p->Next = Head;
      p->Prev = Head->Prev;
      Head->Prev->Next = p;
      Head->Prev = p;
      Head = p;
   }
}

void WindowList::DeleteWindow ()
{
   if (Head == NULL)
      return;
   if (Head == Head->Next)
   {
      delete Head;
      Head = NULL;
   }
   else
   {
      Window *p = Head;
      p->Prev->Next = p->Next;
      p->Next->Prev = p->Prev;
      Head = p->Next;
      delete p;
   }
}

void WindowList::NextWindow ()
{
   if (Head != NULL)
      Head = Head->Next;
}

void WindowList::PrevWindow ()
{
   if (Head != NULL)
      Head = Head->Prev;
}
