/* C code generated by:							*/
/* Visual Arts Version 1.0						*/
/* Copyright 1994 Danny Y. Wong  All rights reserved			*/
/* Calgary, Alberta (CANADA)                        			*/


struct WindowNode
{
	struct Node nn_Node;
	UBYTE nn_Data[80];
	struct Window *nn_Window;
	short ID;
	APTR UserData;
};


struct VAobject {
  struct Window *va_Window;
  struct Gadget *va_Gadget;
  struct IntuiMessage *va_IntuiMsg;
  ULONG va_Flags;
  APTR va_UserData;
};

#define GetString(gad)	(((struct StringInfo *)gad->SpecialInfo)->Buffer)
#define GetUndoString(gad)	(((struct StringInfo *)gad->SpecialInfo)->UndoBuffer)
#define GetNumber(gad)	(((struct StringInfo *)gad->SpecialInfo)->LongInt)

extern int GetFileName(BOOL save, struct Window *window, char *title, char *path, char *dir, char *file);
extern void SetRPortFill(struct Window *Wind, short Type);
extern void ButtonSelected(struct Window *wind, struct Gadget *gad);
extern struct WindowNode  *ModelsActiveWind;
extern APTR   VisualInfo;
extern struct Screen *Scr;
extern struct Gadget *ModelsGadgets[1];
extern struct WindowNode *AddWindowNode(struct List *list, char name[80], APTR handler);
extern int DelWindowNode(struct List *list, char name[80]);
extern struct WindowNode *FindWindowNode(struct List *list, char name[80]);
extern void FreeWindowList(struct List *list);
extern void ReMakeWindowID(struct List *list);
extern UWORD ModelsTotalWindows;
extern int AddNewNode(struct List *list, char name[255]);
extern int DeleteNewNode(struct List *list, char name[255]);
extern struct List *GetNewList(void);
extern struct NameNode *FindNodeName(struct List *list, char name[255]);
extern void FreeList(struct List *list);

extern void CreateModelsLists(void);
struct NameNode
{
  struct Node nn_Node;
  UBYTE nn_Data[255];
};
extern UBYTE *ModelsLabels[];

ULONG LinePatterns[6] = { 0xffff, 0x0cccc, 0xaaaa, 0x8888, 0x3333, 0xffff};

struct List *ModelsLists[1];

struct WindowNode *AddWindowNode(struct List *list, char name[80], APTR handler)
{
  struct WindowNode *winnode;

  if (!( winnode = AllocMem(sizeof(struct WindowNode), MEMF_CLEAR)))
      return(NULL);
  strcpy(winnode->nn_Data, name);
  winnode->nn_Node.ln_Name=winnode->nn_Data;
  winnode->nn_Node.ln_Type=0;
  winnode->nn_Node.ln_Pri=0;
  ++ModelsTotalWindows;
  winnode->ID = ModelsTotalWindows;
  winnode->UserData = handler;
  AddTail((struct List *)list, (struct Node *)winnode);
  return(winnode);
}

int DelWindowNode(struct List *list, char name[80])
{
  struct Node *node;

  node=FindName(list, name);
  if (node)
  {
      Remove(node);
      FreeMem((struct WindowNode *)node, sizeof(struct WindowNode));
      --ModelsTotalWindows;
      return(0L);
  }
  return(1L);
}

struct WindowNode *FindWindowNode(struct List *list, char name[80])
{
  struct WindowNode *worknode, *nextnode;

  worknode=(struct WindowNode *)(list->lh_Head);
  while (nextnode=(struct WindowNode *)(worknode->nn_Node.ln_Succ))
  {
    if (strcmp(worknode->nn_Data, name) == 0)
       return(worknode);
     worknode=nextnode;
  }
  return(NULL);
}

void FreeWindowList(struct List *list)
{
  struct WindowNode *worknode, *nextnode;

  worknode=(struct WindowNode *)(list->lh_Head);
  while (nextnode=(struct WindowNode *)(worknode->nn_Node.ln_Succ))
  {
     FreeMem(worknode, sizeof(struct WindowNode));
     worknode=nextnode;
  }
  FreeMem(list, sizeof(struct List));
  list=NULL;
}

void ReMakeWindowID(struct List *list)
{
  struct WindowNode *worknode, *nextnode;
  short id = 1;

  worknode = (struct WindowNode *)(list->lh_Head);
  while (nextnode = (struct WindowNode *)(worknode->nn_Node.ln_Succ))
  {
	worknode->ID = id++;
	worknode = nextnode;
  }
}

struct List *GetNewList(void)
{
   struct List *list;

   if (!( list = AllocMem(sizeof(struct List), MEMF_CLEAR)))
       return(NULL);
   NewList(list);
   return(list);
}

int AddNewNode(struct List *list, char name[255])
{
  struct NameNode *namenode;

  if (!( namenode = AllocMem(sizeof(struct NameNode), MEMF_CLEAR)))
      return(1L);
  strcpy(namenode->nn_Data, name);
  namenode->nn_Node.ln_Name=namenode->nn_Data;
  namenode->nn_Node.ln_Type=0;
  namenode->nn_Node.ln_Pri=0;
  AddTail((struct List *)list, (struct Node *)namenode);
  return(0L);
}

int DeleteNode(struct List *list, char name[255])
{
  struct Node *node;

  node=FindName(list, name);
  if (node)
  {
      Remove(node);
      FreeMem((struct NameNode *)node, sizeof(struct NameNode));
      return(0L);
  }
  return(1L);
}

struct NameNode *FindNodeName(struct List *list, char name[255])
{
  struct NameNode *worknode, *nextnode;

  worknode=(struct NameNode *)(list->lh_Head);
  while (nextnode=(struct NameNode *)(worknode->nn_Node.ln_Succ))
  {
    if (strcmp(worknode->nn_Data, name) == 0)
       return(worknode);
     worknode=nextnode;
  }
  return(NULL);
}

void FreeList(struct List *list)
{
  struct NameNode *worknode, *nextnode;

  worknode=(struct NameNode *)(list->lh_Head);
  while (nextnode=(struct NameNode *)(worknode->nn_Node.ln_Succ))
  {
     FreeMem(worknode, sizeof(struct NameNode));
     worknode=nextnode;
  }
  FreeMem(list, sizeof(struct List));
  list=NULL;
}

void CreateModelsLists(void)
{
  short i;

  i=0;
  while (ModelsLabels[i])
     AddNewNode(ModelsLists[0], ModelsLabels[i++]);

}

void ButtonSelected(struct Window *wind, struct Gadget *gad)
{
  gad->Flags ^= GFLG_SELECTED;
  RefreshGList(gad, wind, NULL, 1);
  Delay(4);
  gad->Flags ^= GFLG_SELECTED;
  RefreshGList(gad, wind, NULL, 1);
}


			 /* gadget functions */

int modelsObj(struct VAobject VAObject)
{
  return(1L);
}
/*	ListView  		 */ 

