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


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 Window  *AppWindWnd;
extern APTR   VisualInfo;
extern struct Screen *Scr;
extern struct Gadget *AppWindGadgets[3];
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 CreateAppWindLists(void);
struct NameNode
{
  struct Node nn_Node;
  UBYTE nn_Data[255];
};
extern UBYTE *IconsLabels[];

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

struct List *AppWindLists[1];

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 CreateAppWindLists(void)
{
  short i;

  i=0;
  while (IconsLabels[i])
     AddNewNode(AppWindLists[0], IconsLabels[i++]);

}

			 /* gadget functions */

int clearObj(struct VAobject VAObject)
{
//detach list first

  GT_SetGadgetAttrs(AppWindGadgets[ID_iconlist], AppWindWnd, NULL,
       GTLV_Labels, ~0, TAG_DONE);    

//free all the icon names and create a new list
  FreeList(AppWindLists[0]);
  AppWindLists[0]=GetNewList();
  
//now attach the new list to the listview  
  GT_SetGadgetAttrs(AppWindGadgets[ID_iconlist], AppWindWnd, NULL,
       GTLV_Labels, AppWindLists[0], TAG_DONE);
  return(1);
}
/*	Button  Clear		 */ 

int okObj(struct VAobject VAObject)
{
  return(-1L);
}
/*	Button  OK		 */ 

int iconlistObj(struct VAobject VAObject)
{
  return(1L);
}
/*	ListView  Program Names		 */ 

