players.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /* $Id: players.c,v 1.10 2001/04/25 14:31:33 kilobug Exp $ */
  2. #include "client.h"
  3. static int pl_sort(GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
  4. {
  5. switch (clist->sort_column)
  6. {
  7. case 1:
  8. return clist_compare_str(clist, ptr1, ptr2);
  9. case 0: case 2:
  10. return clist_compare_float(clist, ptr1, ptr2);
  11. }
  12. return 0;
  13. }
  14. void player_list_refresh(const conf_t *conf)
  15. {
  16. char score[10];
  17. player_t *pl;
  18. int i;
  19. if (conf->map->players == NULL)
  20. return;
  21. gtk_clist_freeze(GTK_CLIST(conf->pl));
  22. for (i = 0; i < conf->map->nb_players; i++)
  23. {
  24. pl = gtk_clist_get_row_data(GTK_CLIST(conf->pl), i);
  25. g_snprintf(score, 10, "%.2f", pl->score);
  26. gtk_clist_set_text(GTK_CLIST(conf->pl), i, 2, score);
  27. }
  28. gtk_clist_sort(GTK_CLIST(conf->pl));
  29. gtk_clist_thaw(GTK_CLIST(conf->pl));
  30. gtk_progress_configure(GTK_PROGRESS(conf->turn_bar), conf->map->turn_num,
  31. 0, conf->map->nb_turns);
  32. }
  33. void pl_make_color(GdkColor *col, int r, int g, int b)
  34. {
  35. col->pixel = 0;
  36. col->red = r * 257;
  37. col->green = g * 257;
  38. col->blue = b * 257;
  39. gdk_colormap_alloc_color(gdk_colormap_get_system(), col, FALSE, TRUE);
  40. }
  41. void player_list_make(conf_t *conf)
  42. {
  43. char **tb;
  44. char id[4], score[10];
  45. player_t *pl;
  46. int i, j;
  47. if (conf->map->players == NULL)
  48. return;
  49. gtk_clist_freeze(GTK_CLIST(conf->pl));
  50. gtk_clist_clear(GTK_CLIST(conf->pl));
  51. tb = g_malloc(sizeof(*tb) * 4);
  52. tb[0] = id;
  53. tb[2] = score;
  54. tb[3] = NULL;
  55. for (i = 1; i <= conf->map->nb_players; i++)
  56. {
  57. pl = conf->map->players[i];
  58. tb[1] = pl->name;
  59. g_snprintf(id, 4, "%d", pl->id);
  60. g_snprintf(score, 10, "%.2f", pl->score);
  61. j = gtk_clist_append(GTK_CLIST(conf->pl), tb);
  62. gtk_clist_set_row_data(GTK_CLIST(conf->pl), j, pl);
  63. gtk_clist_set_foreground(GTK_CLIST(conf->pl), j, pl->gdkcol);
  64. gtk_clist_set_compare_func(GTK_CLIST(conf->pl), pl_sort);
  65. }
  66. g_free(tb);
  67. gtk_clist_thaw(GTK_CLIST(conf->pl));
  68. gtk_progress_configure(GTK_PROGRESS(conf->turn_bar), conf->map->turn_num,
  69. 0, conf->map->nb_turns);
  70. }
  71. GtkWidget *create_players_list(conf_t *conf)
  72. {
  73. GtkWidget *frame, *vbox;
  74. frame = create_frame("Général");
  75. conf->pl = create_clist(3, 2,
  76. "Equipe", "Nom", "Score",
  77. 40, 100, 60,
  78. GTK_SORT_ASCENDING,
  79. GTK_SORT_ASCENDING,
  80. GTK_SORT_DESCENDING);
  81. clist_set_tooltips(GTK_CLIST(conf->pl), conf->tooltips, "Trier par équipe",
  82. "Trier par nom", "Trier par score", NULL);
  83. conf->turn_bar = gtk_progress_bar_new();
  84. gtk_progress_set_format_string(GTK_PROGRESS(conf->turn_bar),
  85. "%v/%u (%p %%)");
  86. gtk_progress_set_show_text(GTK_PROGRESS(conf->turn_bar), TRUE);
  87. gtk_progress_configure(GTK_PROGRESS(conf->turn_bar), 0, 0, 1);
  88. gtk_widget_show(conf->turn_bar);
  89. vbox = gtk_vbox_new(FALSE, 5);
  90. gtk_box_pack_start(GTK_BOX(vbox), conf->pl, TRUE, TRUE, 5);
  91. gtk_box_pack_start(GTK_BOX(vbox), conf->turn_bar, TRUE, TRUE, 5);
  92. gtk_widget_show(vbox);
  93. gtk_container_add(GTK_CONTAINER(frame), vbox);
  94. return frame;
  95. }