bitmaps.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /* $Id: bitmaps.c,v 1.5 2001/04/25 16:37:21 kilobug Exp $ */
  2. #include "mclient.h"
  3. #define SEND_MESSAGE "ns_send_msg"
  4. typedef struct _msg_t
  5. {
  6. GSList *recv;
  7. GtkWidget *dialog;
  8. GtkWidget *entry;
  9. } msg_t;
  10. static void bmp_msg_do_send(GtkWidget *wid, msg_t *msg)
  11. {
  12. GSList *l;
  13. char buf[MYSQL_BUFFER_SIZE];
  14. for (l = msg->recv; l != NULL; l = l->next)
  15. {
  16. g_snprintf(buf, MYSQL_BUFFER_SIZE, "%s %s '%s'",
  17. SEND_MESSAGE, (char *) l->data,
  18. gtk_entry_get_text(GTK_ENTRY(msg->entry)));
  19. system(buf);
  20. }
  21. }
  22. static void bmp_msg_free(msg_t *msg)
  23. {
  24. GSList *l;
  25. for (l = msg->recv; l != NULL; l = l->next)
  26. g_free(l->data);
  27. g_slist_free(msg->recv);
  28. g_free(msg);
  29. }
  30. void bmp_send_message(GtkWidget *wid, void *data)
  31. {
  32. GList *bmps, *l;
  33. msg_t *msg;
  34. int id;
  35. bmps = GTK_CLIST(gl_config->bmpl)->selection;
  36. if (bmps == NULL)
  37. return;
  38. msg = g_malloc(sizeof(*msg));
  39. for (msg->recv = NULL, l = bmps; l != NULL; l = l->next)
  40. {
  41. id = *((int *) gtk_clist_get_row_data(GTK_CLIST(gl_config->bmpl),
  42. GPOINTER_TO_INT(l->data)));
  43. msg->recv = g_slist_prepend(msg->recv,
  44. mysql_get_str(gl_config->mysql,
  45. "SELECT login FROM Bitmaps "
  46. "WHERE id=%d", id));
  47. }
  48. msg->entry = create_entry("", 200);
  49. msg->dialog = create_dialog("Envoyer un message", msg->entry,
  50. "Envoyer", "Annuler", bmp_msg_do_send,
  51. msg, destroy_widget);
  52. gtk_object_set_data_full(GTK_OBJECT(msg->dialog), "42", msg,
  53. (GtkDestroyNotify) bmp_msg_free);
  54. gtk_signal_connect(GTK_OBJECT(msg->entry), "activate",
  55. bmp_msg_do_send, msg);
  56. gtk_signal_connect_after(GTK_OBJECT(msg->entry), "activate",
  57. destroy_widget, msg->dialog);
  58. gtk_widget_show(msg->dialog);
  59. }
  60. int bmp_sort(GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
  61. {
  62. return clist_compare_str(clist, ptr1, ptr2);
  63. }
  64. static char *bmp_statut(const char *val, void *data)
  65. {
  66. switch (atoi(val))
  67. {
  68. case STATUT_ABSENT:
  69. return "Absent";
  70. case STATUT_PRESENT:
  71. return "Présent";
  72. case STATUT_ZLOCKE:
  73. return "Zlocké";
  74. }
  75. return "Inconnu";
  76. }
  77. static char *bmp_type(const char *val, void *data)
  78. {
  79. switch (atoi(val))
  80. {
  81. case 0:
  82. return "Bitmap";
  83. default:
  84. return "Organisateur";
  85. }
  86. }
  87. static const char *bmp_colors[] =
  88. { "#900000", "#009000", "#000090",
  89. "#FF0000", "#00FF00", "#0000FF" };
  90. static GdkColor *bmp_color(const sql_list_t *l, int id, void *data)
  91. {
  92. GdkColor *col = NULL;
  93. int i;
  94. if (mysql_get_int(gl_config->mysql,
  95. "SELECT staff FROM Bitmaps WHERE id=%d", id))
  96. i = 3;
  97. else
  98. i = 0;
  99. switch (mysql_get_int(gl_config->mysql,
  100. "SELECT statut FROM Bitmaps WHERE id=%d", id))
  101. {
  102. case STATUT_ABSENT:
  103. i += 0;
  104. break;
  105. case STATUT_ZLOCKE:
  106. i += 1;
  107. break;
  108. case STATUT_PRESENT:
  109. i += 2;
  110. break;
  111. }
  112. col = g_malloc(sizeof(*col));
  113. gdk_color_parse(bmp_colors[i], col);
  114. gdk_color_alloc(gdk_colormap_get_system(), col);
  115. return col;
  116. }
  117. void bmp_refresh(GtkWidget *wid, void *data)
  118. {
  119. static sql_list_t *lst = NULL;
  120. if (lst == NULL)
  121. {
  122. lst = mysql_list_make("SELECT * FROM Bitmaps WHERE 1",
  123. 8, GTK_CLIST(gl_config->bmpl),
  124. 6, bmp_statut, NULL, NULL,
  125. 7, bmp_type, NULL, NULL, -1);
  126. mysql_list_set_color_func(lst, bmp_color, NULL);
  127. }
  128. mysql_list_refresh(lst, NULL);
  129. }