Object *CreateDropObj(int type)
{ switch (type)
    { case MUIC_DropButton:        return(DropButtonObject("Button"));
      case MUIC_DropText:          return(DropTextObject("Text"));
      case MUIC_DropListview:      return(DropListviewObject);
      case MUIC_DropString:        return(DropStringObject("String"));
      case MUIC_DropCycle:         return(DropCycleObject(entries));
      case MUIC_DropRadio:         return(DropRadioObject(entries));
      case MUIC_DropCheckmark:     return(DropCheckmarkObject);
      case MUIC_DropGroup:         return(DropGroupObject("Group"), Child, HSpace(1), End);
      case MUIC_DropGauge:         return(DropGaugeObject);
      case MUIC_DropScale:         return(DropScaleObject);
      case MUIC_DropBalance:       return(DropBalanceObject);
      case MUIC_DropImage:         return(DropImageObject);
      case MUIC_DropSlider:        return(DropSliderObject);
      case MUIC_DropKnob:          return(DropKnobObject);
      case MUIC_DropLevelmeter:    return(DropLevelmeterObject);
      case MUIC_DropNumericbutton: return(DropNumericbuttonObject);
      default:                     return(NULL);
    }    
}
        
VOID Group_Append(Object *new, Object *group)
{
  if (DoMethod(group,MUIM_Group_InitChange))
  {
    DoMethod(group,OM_ADDMEMBER,new);
    DoMethod(group,MUIM_Group_ExitChange);
  }
}

VOID Group_Remove(Object *obj)
{
  Object *group;
  
  get(obj,MUIA_Parent,&group);
  if (DoMethod(group,MUIM_Group_InitChange))
  { 
    DoMethod(group,OM_REMMEMBER,obj);
    DoMethod(group,MUIM_Group_ExitChange);
  }
}
 
VOID Group_Insert(Object *new, Object *obj, Object *group)
{ 
  if (DoMethod(group,MUIM_Group_InitChange))
  { 
    Insert_Member(new,obj,group);
    DoMethod(group,MUIM_Group_ExitChange);
  }
}

VOID Group_Move(Object *source, Object *dest)
{ 
  Object *oldgroup, *newgroup;
  
  get(source,MUIA_Parent,&oldgroup);
  get(dest,MUIA_Parent,&newgroup);
  
  if (DoMethod(oldgroup,MUIM_Group_InitChange))
  { 
    DoMethod(oldgroup,OM_REMMEMBER,source);
    DoMethod(oldgroup,MUIM_Group_ExitChange);
  }

  if (DoMethod(newgroup,MUIM_Group_InitChange))
  { 
    Insert_Member(source,dest,newgroup);
    DoMethod(newgroup,MUIM_Group_ExitChange);
  }
}

/************************************************************/
/* For now only an objectlist of 100 objects is supported   */
/***********************************************************/
VOID Insert_Member(Object *new, Object *obj, Object *group)
{ 
  Object *child, *childlist=NULL, *objlist[100];
  int i;

    /* Not very elegant, but there really should be a MUIM_Group_Insert */
    get(group,MUIA_Group_ChildList,&childlist);

    /* Get all objects */
    for(i=0;child=NextObject(&childlist);i++)
      objlist[i]=child;
    objlist[i]=NULL;

    /* Skip to the object */
    for(i=0;objlist[i]!=obj;i++);
       
    /* Add the new object */
    DoMethod(group,OM_ADDMEMBER,new);

    /* Remove and then add then remaining objects to the end of the list*/
    for(;objlist[i]!=NULL;i++)
    { DoMethod(group,OM_REMMEMBER,objlist[i]);
      DoMethod(group,OM_ADDMEMBER,objlist[i]);
    }
} 
