static int playlist_callback_voice(int selected_item, void *data)
{
    struct playlist_viewer *local_viewer = (struct playlist_viewer *)data;

    int track_num = get_track_num(local_viewer, selected_item);
    struct playlist_entry *track =
        playlist_buffer_get_track(&(local_viewer->buffer), track_num);

    bool enqueue = false;

    if (global_settings.talk_file_clip || global_settings.talk_file == 2)
    {
        if (global_settings.playlist_viewer_indices)
        {
            talk_number(track->display_index, false);
            enqueue = true;
        }
        talk_file_or_spell(NULL, track->name, NULL, enqueue);
    }
    else if (global_settings.talk_file == 1) /* as numbers */
    {
        talk_id(VOICE_FILE, false);
        talk_number(track->display_index, true);
    }

    return 0;
}
static enum themable_icons playlist_callback_icons(int selected_item,
                                                   void *data)
{
    struct playlist_viewer *local_viewer = (struct playlist_viewer *)data;

    int track_num = get_track_num(local_viewer, selected_item);
    struct playlist_entry *track =
        playlist_buffer_get_track(&(local_viewer->buffer), track_num);

    if (track->index == local_viewer->current_playing_track)
    {
        /* Current playing track */
        return Icon_Audio;
    }
    else if (track->index == local_viewer->moving_playlist_index)
    {
        /* Track we are moving */
        return Icon_Moving;
    }
    else if (track->queued)
    {
        /* Queued track */
        return Icon_Queued;
    }
    else
        return Icon_NOICON;
}
static const char* playlist_callback_name(int selected_item,
                                          void *data,
                                          char *buffer,
                                          size_t buffer_len)
{
    struct playlist_viewer *local_viewer = (struct playlist_viewer *)data;

    int track_num = get_track_num(local_viewer, selected_item);
    struct playlist_entry *track =
        playlist_buffer_get_track(&(local_viewer->buffer), track_num);

    format_line(track, buffer, buffer_len);

    return(buffer);
}
Exemplo n.º 4
0
static void drawroute (enum e_draw_net_type draw_net_type) {

/* Draws the nets in the positions fixed by the router.  If draw_net_type is *
 * ALL_NETS, draw all the nets.  If it is HIGHLIGHTED, draw only the nets    *
 * that are not coloured black (useful for drawing over the rr_graph).       */

 /* Next free track in each channel segment if routing is GLOBAL */

 static int **chanx_track = NULL;           /* [1..nx][0..ny] */
 static int **chany_track = NULL;           /* [0..nx][1..ny] */

 int inet, i, j, inode, prev_node, prev_track, itrack;
 short switch_type;
 struct s_trace *tptr;
 t_rr_type rr_type, prev_type;


 if (draw_route_type == GLOBAL) {
   /* Allocate some temporary storage if it's not already available. */
    if (chanx_track == NULL) 
       chanx_track = (int **) alloc_matrix (1, nx, 0, ny, sizeof(int));

    if (chany_track == NULL) 
       chany_track = (int **) alloc_matrix (0, nx, 1, ny, sizeof(int));

    for (i=1;i<=nx;i++)
       for (j=0;j<=ny;j++)
          chanx_track[i][j] = -1;

    for (i=0;i<=nx;i++)
       for (j=1;j<=ny;j++)
          chany_track[i][j] = -1;
 }

 setlinestyle (SOLID);

/* Now draw each net, one by one.      */

 for (inet=0;inet<num_nets;inet++) {
    if (is_global[inet])           /* Don't draw global nets. */
       continue;

    if (trace_head[inet] == NULL)  /* No routing.  Skip.  (Allows me to draw */
       continue;                   /* partially complete routes).            */

    if (draw_net_type == HIGHLIGHTED && net_color[inet] == BLACK) 
       continue;
 
    setcolor (net_color[inet]);
    tptr = trace_head[inet];   /* SOURCE to start */
    inode = tptr->index;
    rr_type = rr_node[inode].type;
    

    while (1) {
       prev_node = inode;
       prev_type = rr_type;
       switch_type = tptr->iswitch;
       tptr = tptr->next;
       inode = tptr->index;
       rr_type = rr_node[inode].type;

       switch (rr_type) {

       case OPIN:
          draw_rr_pin (inode, net_color[inet]);
          break;

       case IPIN:
          draw_rr_pin (inode, net_color[inet]);
          prev_track = get_track_num (prev_node, chanx_track, chany_track);
          draw_pin_to_chan_edge (inode, prev_node, prev_track, FALSE);
          break;

       case CHANX:
          if (draw_route_type == GLOBAL)
             chanx_track[rr_node[inode].xlow][rr_node[inode].ylow]++;

          itrack = get_track_num (inode, chanx_track, chany_track);
          draw_rr_chanx (inode, itrack);

          switch (prev_type) {

          case CHANX:
             prev_track = get_track_num (prev_node, chanx_track, chany_track);
             draw_chanx_to_chanx_edge (prev_node, prev_track, inode, itrack,
                         switch_type);
             break;
 
          case CHANY:
             prev_track = get_track_num (prev_node, chanx_track, chany_track);
             draw_chanx_to_chany_edge (inode, itrack, prev_node, prev_track,
                      FROM_Y_TO_X, switch_type);
             break;

          case OPIN:
             draw_pin_to_chan_edge (prev_node, inode, itrack, FALSE);
             break;

          default:
             printf ("Error in drawroute:  Unexpected connection from an \n"
                "rr_node of type %d to one of type %d.\n", prev_type, rr_type);
             exit (1);
          }

          break;

       case CHANY:
          if (draw_route_type == GLOBAL) 
             chany_track[rr_node[inode].xlow][rr_node[inode].ylow]++;

          itrack = get_track_num (inode, chanx_track, chany_track);
          draw_rr_chany (inode, itrack);
 
          switch (prev_type) {
 
          case CHANX:
             prev_track = get_track_num (prev_node, chanx_track, chany_track);
             draw_chanx_to_chany_edge (prev_node, prev_track, inode, itrack,
                       FROM_X_TO_Y, switch_type);
             break;
 
          case CHANY:
             prev_track = get_track_num (prev_node, chanx_track, chany_track);
             draw_chany_to_chany_edge (prev_node, prev_track, inode, itrack,
                       switch_type);
             break;
 
          case OPIN:
             draw_pin_to_chan_edge (prev_node, inode, itrack, FALSE);
             break;
 
          default:
             printf ("Error in drawroute:  Unexpected connection from an \n"
                "rr_node of type %d to one of type %d.\n", prev_type, rr_type);
             exit (1);
          }
 
          break; 

       default:
          break;
      
       }
      
       if (rr_type == SINK) {   /* Skip the next segment */
          tptr = tptr->next;
          if (tptr == NULL) 
             break;
          inode = tptr->index;
          rr_type = rr_node[inode].type;
       }
       
    } /* End loop over traceback. */
 } /* End for (each net) */
}