예제 #1
0
ItemTreeNode::ItemTreeNode( TblNav *tblnav, char *name, int index,
			    brow_tNode dest, flow_eDest dest_code) :
  ItemBase(tblnav_eItemType_TreeNode), idx(index)
{
  brow_CreateNode( tblnav->brow->ctx, "TreeNode", tblnav->brow->nc_attr, 
		   dest, dest_code, (void *) this, 1, &node);

  if ( tblnav->tree[idx].fch)
    brow_SetAnnotPixmap( node, 0, tblnav->brow->pixmap_map);
  else
    brow_SetAnnotPixmap( node, 0, tblnav->brow->pixmap_leaf);

  brow_SetAnnotation( node, 0, name, strlen(name));
}
예제 #2
0
int ItemTreeNode::open_children( TblNav *tblnav, double x, double y)
{
  double	node_x, node_y;

  brow_GetNodePosition( node, &node_x, &node_y);

  if ( brow_IsOpen( node) & tblnav_mOpen_Children) {
    // Attributes is open, close
    brow_SetNodraw( tblnav->brow->ctx);
    brow_CloseNode( tblnav->brow->ctx, node);
    brow_ResetOpen( node, tblnav_mOpen_Children);
    brow_RemoveAnnotPixmap( node, 1);
    brow_ResetNodraw( tblnav->brow->ctx);
    brow_Redraw( tblnav->brow->ctx, node_y);
  }
  else {

    brow_SetNodraw( tblnav->brow->ctx);
    for ( int i = tblnav->tree[idx].fch; i; i = tblnav->tree[i].fws) {
      if ( tblnav->tree[i].deleted)
	continue;

      if ( tblnav->tree[i].item)
	  new ItemTreeLocal( tblnav, tblnav->tree[i].item, i, node, flow_eDest_IntoLast);
      else
	  new ItemTreeNode( tblnav, tblnav->tree[i].sname, i, node, flow_eDest_IntoLast);
    }
    brow_SetOpen( node, tblnav_mOpen_Children);
    brow_SetAnnotPixmap( node, 1, tblnav->brow->pixmap_openmap);
    brow_ResetNodraw( tblnav->brow->ctx);
    brow_Redraw( tblnav->brow->ctx, node_y);
  }
  return 1;
}
예제 #3
0
ItemDevice::ItemDevice(PnViewerNav* item_viewernav, const char* item_name,
    unsigned char* item_ipaddress, unsigned char* item_macaddress,
    char* item_devname, int vendorid, int deviceid, brow_tNode dest,
    flow_eDest dest_code)
    : viewernav(item_viewernav)
{
  type = viewitem_eItemType_Device;

  strcpy(infotext, "");
  strcpy(family, "");
  strncpy(devname, item_devname, sizeof(devname));
  memcpy(ipaddress, item_ipaddress, sizeof(ipaddress));
  memcpy(macaddress, item_macaddress, sizeof(macaddress));
  sprintf(ipaddress_str, "%hhu.%hhu.%hhu.%hhu", item_ipaddress[3],
      item_ipaddress[2], item_ipaddress[1], item_ipaddress[0]);
  sprintf(macaddress_str, "%02hhX:%02hhX:%02hhX:%02hhX:%02hhX:%02hhX",
      item_macaddress[5], item_macaddress[4], item_macaddress[3],
      item_macaddress[2], item_macaddress[1], item_macaddress[0]);
  sprintf(deviceid_str, "%d", deviceid);
  viewernav->vendorid_to_str(vendorid, vendorid_str, sizeof(vendorid_str));
  viewernav->get_device_info(
      vendorid, deviceid, infotext, sizeof(infotext), family, sizeof(family));

  brow_CreateNode(viewernav->brow->ctx, (char*)"Device",
      viewernav->brow->nc_device, dest, dest_code, (void*)this, 1, &node);

  brow_SetAnnotation(node, 0, devname, strlen(devname));
  brow_SetAnnotation(node, 1, vendorid_str, strlen(vendorid_str));
  brow_SetAnnotation(node, 2, family, strlen(family));
  brow_SetAnnotation(node, 3, infotext, strlen(infotext));

  brow_SetAnnotPixmap(node, 0, viewernav->brow->pixmap_map);
}
예제 #4
0
ItemSubGraph::ItemSubGraph( SubGraphs *subgraphs, 
	char *item_name, int *item_extern_p, void *item_nodeclass,
	brow_tNode dest, flow_eDest dest_code) :
	SubGraphBaseItem(subgraphs_eItemType_SubGraph), 
	nodeclass(item_nodeclass), extern_p( item_extern_p), 
	old_extern(0), first_scan(0)
	
{

  strcpy( name, item_name);

  brow_CreateNode( subgraphs->brow->ctx, item_name, 
		subgraphs->brow->nc_object, 
		dest, dest_code, (void *) this, 1, &node);

  brow_SetAnnotPixmap( node, 0, subgraphs->brow->pixmap_leaf);

  brow_SetAnnotation( node, 0, item_name, strlen(item_name));

  if ( *extern_p)
    brow_SetAnnotation( node, 1, "Extern", strlen("Extern"));
  else
    brow_SetAnnotation( node, 1, "Intern", strlen("Intern"));
  brow_SetTraceAttr( node, item_name, "", flow_eTraceType_User);
}
예제 #5
0
int ItemMenu::open_children( SubPalette *subpalette, double x, double y)
{
  int		action_open;

  if ( !is_root)
  {
    if ( !brow_IsOpen( node))
      action_open = 1;
    else 
      action_open = 0;
  }
  if ( action_open || is_root)
  {
    // Display childlist
    double	node_x, node_y;
    Item 		*item;
    subpalette_sMenu	*menu;

    if ( !is_root)
      brow_GetNodePosition( node, &node_x, &node_y);
    else
      node_y = 0;
    brow_SetNodraw( subpalette->brow->ctx);
    menu = *child_list;
    while ( menu)
    {
      switch ( menu->item_type)
      {
        case subpalette_eItemType_Menu:
          item = (Item *) new ItemMenu( subpalette, menu->title, node, 
		flow_eDest_IntoLast, &menu->child_list,
		0);
          break;
        case subpalette_eItemType_File:
          item = (Item *) new ItemFile( subpalette, menu->title, menu->file,
		menu->pixmap, node, flow_eDest_IntoLast);
          break;
        case subpalette_eItemType_LocalSubGraphs:
          item = (Item *) new ItemLocalSubGraphs( subpalette, 
		menu->title, menu->file, node, flow_eDest_IntoLast);
          break;
    
        default:
          ;
      }
      menu = menu->next;
      if ( !is_root)
      {
        brow_SetOpen( node, subpalette_mOpen_Children);
        brow_SetAnnotPixmap( node, 0, subpalette->brow->pixmap_openmap);
      }
    }
    brow_ResetNodraw( subpalette->brow->ctx);
    brow_Redraw( subpalette->brow->ctx, node_y);
  }
  else
    close( subpalette, x, y);
  return 1;
}
예제 #6
0
ItemMsgObjectPlc::ItemMsgObjectPlc( MsgList *item_msglist, const char *item_name,
			      char *item_text, int item_severity, pwr_tOid item_oid,
			      brow_tNode dest, flow_eDest dest_code):
    ItemMsg( item_msglist, item_name, item_text, item_severity, dest, dest_code),
    oid(item_oid)
{
  brow_SetAnnotPixmap( node, 0, msglist->brow->pixmap_morehelp);
}
예제 #7
0
ItemLog::ItemLog( CoLogWNav *item_logwnav, const char *item_name,
		  pwr_tTime item_time, char *item_category, char *item_user, 
		  char *item_comment, brow_tNode dest, flow_eDest dest_code):
  logwnav(item_logwnav), time(item_time)
{
  char time_str[40];
  char *s;

  type = logwitem_eItemType_Log;

  strncpy( category, item_category, sizeof(category));
  strncpy( user, item_user, sizeof(user));
  if ( item_comment)
    strncpy( comment, item_comment, sizeof(comment));
  else
    strcpy( comment, "");

  brow_CreateNode( logwnav->brow->ctx, (char *)"Log", logwnav->brow->nc_log,
		dest, dest_code, (void *) this, 1, &node);

  time_AtoAscii( &time, time_eFormat_ComprDateAndTime, time_str, 
	sizeof(time_str));
  time_str[17] = 0;

  int annot = 0;
  brow_SetAnnotation( node, annot++, time_str, strlen(time_str));
  brow_SetAnnotation( node, annot++, category, strlen(category));
  brow_SetAnnotation( node, annot++, user, strlen(user));
  if ( logwnav->show_item)
    brow_SetAnnotation( node, annot++, item_name, strlen(item_name));
  if ( item_comment)
    brow_SetAnnotation( node, annot++, item_comment, strlen(item_comment));

  if ( (s = strstr( category, "Save")))
    brow_SetAnnotPixmap( node, 0, logwnav->brow->pixmap_save);
  else if ( (s = strstr( category, "Build")))
    brow_SetAnnotPixmap( node, 0, logwnav->brow->pixmap_build);
  else if ( (s = strstr( category, "Copy")))
    brow_SetAnnotPixmap( node, 0, logwnav->brow->pixmap_copy);
  else if ( (s = strstr( category, "Package")))
    brow_SetAnnotPixmap( node, 0, logwnav->brow->pixmap_package);
  else if ( (s = strstr( category, "Export")))
    brow_SetAnnotPixmap( node, 0, logwnav->brow->pixmap_export);
           
}
예제 #8
0
ItemFile::ItemFile( SubPalette *subpalette, 
	char *item_name, char *item_filename, int item_pixmap,
	brow_tNode dest, flow_eDest dest_code) :
	Item(subpalette_eItemType_File), pixmap(item_pixmap)
{

  strcpy( name, item_name);
  strcpy( filename, item_filename);

  brow_CreateNode( subpalette->brow->ctx, item_name, 
		subpalette->brow->nc_sub, 
		dest, dest_code, (void *) this, 1, &node);

  brow_SetAnnotPixmap( node, 0, subpalette->brow->pixmap_leaf);
  if ( 0 <= (pixmap-1) && (pixmap-1) < SUBP_PIXMAPS_SIZE && 
       subpalette->brow->pixmaps[pixmap-1])
    brow_SetAnnotPixmap( node, 1, subpalette->brow->pixmaps[pixmap-1]);

  brow_SetAnnotation( node, 0, item_name, strlen(item_name));
}
예제 #9
0
ItemLocalAttr::ItemLocalAttr( TblNav *tblnav, const char *name, char *value,
			      brow_tNode dest, flow_eDest dest_code) :
  ItemBase( tblnav_eItemType_LocalAttr)
{
  brow_CreateNode( tblnav->brow->ctx, "LocalItemAttr", tblnav->brow->nc_attr, 
		   dest, dest_code, (void *) this, 1, &node);

  brow_SetAnnotPixmap( node, 0, tblnav->brow->pixmap_attr);

  brow_SetAnnotation( node, 0, name, strlen(name));
  brow_SetAnnotation( node, 1, value, strlen(value));
}
예제 #10
0
int ItemDevice::open_children(PnViewerNav* viewernav)
{
  double node_x, node_y;

  brow_GetNodePosition(node, &node_x, &node_y);

  if (brow_IsOpen(node)) {
    // Close
    brow_SetNodraw(viewernav->brow->ctx);
    brow_CloseNode(viewernav->brow->ctx, node);
    brow_SetAnnotPixmap(node, 0, viewernav->brow->pixmap_map);
    brow_ResetOpen(node, 1);
    brow_ResetNodraw(viewernav->brow->ctx);
    brow_Redraw(viewernav->brow->ctx, node_y);
  } else {
    // Create some children
    brow_SetNodraw(viewernav->brow->ctx);

    new ItemDeviceAttr(viewernav, "DeviceName", pwr_eType_String, devname, node,
        flow_eDest_IntoLast);
    new ItemDeviceAttr(viewernav, "IP Address", pwr_eType_String, ipaddress_str,
        node, flow_eDest_IntoLast);
    new ItemDeviceAttr(viewernav, "MAC Address", pwr_eType_String,
        macaddress_str, node, flow_eDest_IntoLast);
    new ItemDeviceAttr(viewernav, "Vendor Id", pwr_eType_String, vendorid_str,
        node, flow_eDest_IntoLast);
    new ItemDeviceAttr(viewernav, "Device Id", pwr_eType_String, deviceid_str,
        node, flow_eDest_IntoLast);
    new ItemDeviceAttr(viewernav, "Family", pwr_eType_String, family, node,
        flow_eDest_IntoLast);
    new ItemDeviceAttr(viewernav, "InfoText", pwr_eType_String, infotext, node,
        flow_eDest_IntoLast);

    brow_SetOpen(node, 1);
    brow_SetAnnotPixmap(node, 0, viewernav->brow->pixmap_openmap);
    brow_ResetNodraw(viewernav->brow->ctx);
    brow_Redraw(viewernav->brow->ctx, node_y);
  }
  return 1;
}
예제 #11
0
ItemMenu::ItemMenu( SubPalette *subpalette, const char *item_name, 
	brow_tNode dest, flow_eDest dest_code, subpalette_sMenu **item_child_list,
	int item_is_root) :
	Item( subpalette_eItemType_Menu), child_list(item_child_list), 
	is_root(item_is_root)
{
  type = subpalette_eItemType_Menu;
  strcpy( name, item_name);
  if ( !is_root)
  {
    brow_CreateNode( subpalette->brow->ctx, name, subpalette->brow->nc_object,
		dest, dest_code, (void *)this, 1, &node);

    // Set pixmap
    if ( *child_list)
      brow_SetAnnotPixmap( node, 0, subpalette->brow->pixmap_map);
    else
      brow_SetAnnotPixmap( node, 0, subpalette->brow->pixmap_leaf);
    // Set object name annotation
    brow_SetAnnotation( node, 0, name, strlen(name));
  }
}
예제 #12
0
ItemDeviceAttr::ItemDeviceAttr(PnViewerNav* viewernav, const char* item_name,
    pwr_eType item_attr_type, void* item_p, brow_tNode dest,
    flow_eDest dest_code)
    : attr_type(item_attr_type), p(item_p)
{
  char value[80];

  type = viewitem_eItemType_DeviceAttr;
  strcpy(name, item_name);

  brow_CreateNode(viewernav->brow->ctx, (char*)"DeviceAttr",
      viewernav->brow->nc_attr, dest, dest_code, (void*)this, 1, &node);

  strncpy(value, (char*)p, sizeof(value));

  brow_SetAnnotation(node, 0, name, strlen(name));
  brow_SetAnnotation(node, 1, value, strlen(value));

  brow_SetAnnotPixmap(node, 0, viewernav->brow->pixmap_attr);
  if (viewernav->type == viewer_eType_Network
      && (streq(item_name, "DeviceName")
             || streq(item_name, "IP Address")))
    brow_SetAnnotPixmap(node, 1, viewernav->brow->pixmap_edit);
}
예제 #13
0
void ItemDevice::close(PnViewerNav* viewernav)
{
  double node_x, node_y;

  if (brow_IsOpen(node)) {
    // Close
    brow_GetNodePosition(node, &node_x, &node_y);
    brow_SetNodraw(viewernav->brow->ctx);
    brow_CloseNode(viewernav->brow->ctx, node);
    brow_SetAnnotPixmap(node, 0, viewernav->brow->pixmap_map);
    brow_ResetOpen(node, 1);
    brow_ResetNodraw(viewernav->brow->ctx);
    brow_Redraw(viewernav->brow->ctx, node_y);
  }
}
예제 #14
0
int ItemLocalSubGraphs::close( SubPalette *subpalette, double x, double y)
{
  double	node_x, node_y;

  if ( brow_IsOpen( node))
  {
    // Close
    brow_GetNodePosition( node, &node_x, &node_y);
    brow_SetNodraw( subpalette->brow->ctx);
    brow_CloseNode( subpalette->brow->ctx, node);
    brow_SetAnnotPixmap( node, 0, subpalette->brow->pixmap_map);
    brow_ResetOpen( node, subpalette_mOpen_All);
    brow_ResetNodraw( subpalette->brow->ctx);
    brow_Redraw( subpalette->brow->ctx, node_y);
  }
  return 1;
}
예제 #15
0
ItemLocalSubGraphs::ItemLocalSubGraphs( SubPalette *subpalette, 
	char *item_name, char *item_filename,
	brow_tNode dest, flow_eDest dest_code) :
	Item(subpalette_eItemType_LocalSubGraphs)
{

  strcpy( name, item_name);
  strcpy( filename, item_filename);

  brow_CreateNode( subpalette->brow->ctx, item_name, 
		subpalette->brow->nc_object, 
		dest, dest_code, (void *) this, 1, &node);

  brow_SetAnnotPixmap( node, 0, subpalette->brow->pixmap_map);

  brow_SetAnnotation( node, 0, item_name, strlen(item_name));
}
예제 #16
0
int ItemLocal::close( TblNav *tblnav, double x, double y)
{
  double	node_x, node_y;

  brow_GetNodePosition( node, &node_x, &node_y);

  if ( brow_IsOpen( node)) {
    // Close
    brow_SetNodraw( tblnav->brow->ctx);
    brow_CloseNode( tblnav->brow->ctx, node);
    brow_SetAnnotPixmap( node, 0, tblnav->brow->pixmap_leaf);
    brow_ResetOpen( node, tblnav_mOpen_All);
    brow_ResetNodraw( tblnav->brow->ctx);
    brow_Redraw( tblnav->brow->ctx, node_y);
  }
  return 1;
}
예제 #17
0
int ItemMenu::close( SubPalette *subpalette, double x, double y)
{
  double	node_x, node_y;

  if ( brow_IsOpen( node))
  {
    // Close
    brow_GetNodePosition( node, &node_x, &node_y);
    brow_SetNodraw( subpalette->brow->ctx);
    brow_CloseNode( subpalette->brow->ctx, node);
    if ( brow_IsOpen( node) & subpalette_mOpen_Attributes)
      brow_RemoveAnnotPixmap( node, 1);
    if ( brow_IsOpen( node) & subpalette_mOpen_Children)
      brow_SetAnnotPixmap( node, 0, subpalette->brow->pixmap_map);
    brow_ResetOpen( node, subpalette_mOpen_All);
    brow_ResetNodraw( subpalette->brow->ctx);
    brow_Redraw( subpalette->brow->ctx, node_y);
  }
  return 1;
}
예제 #18
0
ItemLocal::ItemLocal( TblNav *tblnav, TblNav_sevhistobject *xitem,
		      brow_tNode dest, flow_eDest dest_code) : 
  ItemBase( tblnav_eItemType_Local), item(*xitem)
{
  type = tblnav_eItemType_Local;
  pwr_tAName aname;
  
  brow_CreateNode( tblnav->brow->ctx, "LocalItem", tblnav->brow->nc_object, 
		   dest, dest_code, (void *) this, 1, &node);

  brow_SetAnnotPixmap( node, 0, tblnav->brow->pixmap_leaf);

  strcpy( aname, item.oname);
  if( item.attrnum == 1 ) {
    strcat( aname, ".");
    strcat( aname, item.objectattrlist[0].aname);
  }
  brow_SetAnnotation( node, 0, aname, strlen(aname));
  brow_SetAnnotation( node, 1, item.description, strlen(item.description));
}
예제 #19
0
int ItemLocal::open_attributes( TblNav *tblnav, double x, double y)
{
  double	node_x, node_y;

  brow_GetNodePosition( node, &node_x, &node_y);

  if ( brow_IsOpen( node)) {
    // Close
    brow_SetNodraw( tblnav->brow->ctx);
    brow_CloseNode( tblnav->brow->ctx, node);
    brow_SetAnnotPixmap( node, 0, tblnav->brow->pixmap_leaf);
    brow_ResetOpen( node, tblnav_mOpen_All);
    brow_ResetNodraw( tblnav->brow->ctx);
    brow_Redraw( tblnav->brow->ctx, node_y);
  }
  else {
    char value[256];
    char txt[80];

    brow_SetNodraw( tblnav->brow->ctx);

    
    new ItemLocalAttr( tblnav, "Description", item.description, node, flow_eDest_IntoLast);

    strcpy( value, "");
    cdh_ObjidToString( value, item.oid, 1);
    new ItemLocalAttr( tblnav, "Oid", value, node, flow_eDest_IntoLast);

    new ItemLocalAttr( tblnav, "Object", item.oname, node, flow_eDest_IntoLast);

    time_DtoAscii( &item.storagetime, 0, value, sizeof(value));
    new ItemLocalAttr( tblnav, "StorageTime", value, node, flow_eDest_IntoLast);

    time_AtoAscii( &item.creatime, time_eFormat_DateAndTime, value, sizeof(value));
    new ItemLocalAttr( tblnav, "CreationTime", value, node, flow_eDest_IntoLast);

    time_AtoAscii( &item.modtime, time_eFormat_DateAndTime, value, sizeof(value));
    new ItemLocalAttr( tblnav, "ModificationTime", value, node, flow_eDest_IntoLast);

    sprintf( value, "%f", item.scantime);
    new ItemLocalAttr( tblnav, "ScanTime", value, node, flow_eDest_IntoLast);

    strcpy( value, "");
    if ( item.options & pwr_mSevOptionsMask_PosixTime)
      strcat( value, " PosixTime");
    if ( item.options & pwr_mSevOptionsMask_HighTimeResolution)
      strcat( value, " HighTimeResolution");
    if ( item.options & pwr_mSevOptionsMask_ReadOptimized)
      strcat( value, " ReadOptimized");
    if ( item.options & pwr_mSevOptionsMask_UseDeadBand)
      strcat( value, " UseDeadBand");
    new ItemLocalAttr( tblnav, "Options", value, node, flow_eDest_IntoLast);

    sprintf( value, "%f", item.deadband);
    new ItemLocalAttr( tblnav, "Deadband", value, node, flow_eDest_IntoLast);

    for ( int i = 0; i < (int)item.objectattrlist.size(); i++) {
      sprintf( txt, "Attr[%d].Name", i);
      new ItemLocalAttr( tblnav, txt, item.objectattrlist[i].aname, node, flow_eDest_IntoLast);

      switch ( item.objectattrlist[i].type) {
      case pwr_eType_Int64: strcpy( value, "Int64"); break;
      case pwr_eType_Int32: strcpy( value, "Int32"); break;
      case pwr_eType_Int16: strcpy( value, "Int16"); break;
      case pwr_eType_Int8: strcpy( value, "Int8"); break;
      case pwr_eType_UInt64: strcpy( value, "UInt64"); break;
      case pwr_eType_UInt32: strcpy( value, "UInt32"); break;
      case pwr_eType_UInt16: strcpy( value, "UInt16"); break;
      case pwr_eType_UInt8: strcpy( value, "UInt8"); break;
      case pwr_eType_Boolean: strcpy( value, "Boolean"); break;
      case pwr_eType_Char: strcpy( value, "Char"); break;
      case pwr_eType_Float32: strcpy( value, "Float32"); break;
      case pwr_eType_Float64: strcpy( value, "Float64"); break;
      case pwr_eType_String: strcpy( value, "String"); break;
      case pwr_eType_Time: strcpy( value, "Time"); break;
      case pwr_eType_DeltaTime: strcpy( value, "DeltaTime"); break;
      default: strcpy( value, "Unknown");
      }
      sprintf( txt, "Attr[%d].DataType", i);
      new ItemLocalAttr( tblnav, txt, value, node, flow_eDest_IntoLast);

      sprintf( txt, "Attr[%d].DataSize", i);
      sprintf( value, "%d", item.objectattrlist[i].size);
      new ItemLocalAttr( tblnav, txt, value, node, flow_eDest_IntoLast);
    
      sprintf( txt, "Attr[%d].Unit", i);
      new ItemLocalAttr( tblnav, txt, item.objectattrlist[i].unit, node, flow_eDest_IntoLast);
    }
    brow_SetOpen( node, tblnav_mOpen_Attributes);
    brow_ResetNodraw( tblnav->brow->ctx);
    brow_Redraw( tblnav->brow->ctx, node_y);
  }
  return 1;
}
예제 #20
0
int ItemLocalSubGraphs::open_children( SubPalette *subpalette, double x, double y)
{
  double	node_x, node_y;
  int		child_exist;

  brow_GetNodePosition( node, &node_x, &node_y);

  if ( brow_IsOpen( node))
  {
    // Close
    brow_SetNodraw( subpalette->brow->ctx);
    brow_CloseNode( subpalette->brow->ctx, node);
    if ( brow_IsOpen( node) & subpalette_mOpen_Attributes)
      brow_RemoveAnnotPixmap( node, 1);
    if ( brow_IsOpen( node) & subpalette_mOpen_Children)
      brow_SetAnnotPixmap( node, 0, subpalette->brow->pixmap_map);
    brow_ResetOpen( node, subpalette_mOpen_All);
    brow_ResetNodraw( subpalette->brow->ctx);
    brow_Redraw( subpalette->brow->ctx, node_y);
  }
  else
  {
    int			sts;
    char		found_file[120];
    char		fname[120];
    char		dev[80], dir[80], file[80], type[80];
    int			version;
    char		text[80];
    char		*s;
    int			idx;
    char		file_str[5][80];
    int		        nr;
    int                 i;
    vector<LocalFile> fvect;

    // Create some children
    brow_SetNodraw( subpalette->brow->ctx);

    child_exist = 0;

    nr = dcli_parse( filename, ",", "", (char *)file_str,
		sizeof( file_str) / sizeof( file_str[0]), sizeof( file_str[0]), 0);
    for ( i = 0; i < nr; i++) {
      dcli_translate_filename( fname, file_str[i]);
      sts = dcli_search_file( fname, found_file, DCLI_DIR_SEARCH_INIT);
      if ( ODD(sts)) {
	LocalFile f;
	strcpy( f.name, found_file);
	fvect.push_back( f);
      }
      while ( ODD(sts)) {
        sts = dcli_search_file( fname, found_file, DCLI_DIR_SEARCH_NEXT);
        if ( ODD(sts)) {
	  LocalFile f;
	  strcpy( f.name, found_file);
	  fvect.push_back( f);
	}
      }
      dcli_search_file( fname, found_file, DCLI_DIR_SEARCH_END);
    }

    subpalette_sort( fvect);

    for ( i = 0; i < (int) fvect.size(); i++) {
      dcli_parse_filename( fvect[i].name, dev, dir, file, type, &version);
      cdh_ToLower( text, file);
      text[0] = toupper( text[0]);
      
      // Skip next pages in animations
      if ( !((s = strstr( text, "__p")) && sscanf( s+3, "%d", &idx))) {
	new ItemFile( subpalette, text, fvect[i].name, 0, node, flow_eDest_IntoLast);
	child_exist = 1;
      }
    }

    if ( child_exist)
    {
      brow_SetOpen( node, subpalette_mOpen_Children);
      brow_SetAnnotPixmap( node, 0, subpalette->brow->pixmap_openmap);
    }
    brow_ResetNodraw( subpalette->brow->ctx);
    if ( child_exist)
      brow_Redraw( subpalette->brow->ctx, node_y);
  }
  return 1;
}