gtk_main.c 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. /* $Id: gtk_main.c,v 1.14 2001/05/07 02:41:36 kilobug Exp $ */
  2. #include "mclient.h"
  3. static void switch_page(GtkNotebook *notebook, GtkNotebookPage *foo,
  4. int page, void *data)
  5. {
  6. if (gl_config->menunb[page] == NULL)
  7. return;
  8. gtk_signal_handler_block_by_func(GTK_OBJECT(notebook),
  9. GTK_SIGNAL_FUNC(switch_page), data);
  10. gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gl_config->menunb[page]),
  11. TRUE);
  12. gtk_signal_handler_unblock_by_func(GTK_OBJECT(notebook),
  13. GTK_SIGNAL_FUNC(switch_page), data);
  14. }
  15. static void create_page(GtkWidget *noteb, GtkWidget *inside, const char *label,
  16. int nb, ...)
  17. {
  18. GtkWidget *hbox, *vbox, *but, *lab, *scroll;
  19. va_list va;
  20. int i;
  21. va_start(va, nb);
  22. hbox = gtk_hbox_new(TRUE, 5);
  23. for (i = 0; i < nb; i++)
  24. {
  25. but = gtk_button_new_with_label(va_arg(va, const char *));
  26. gtk_widget_show(but);
  27. gtk_tooltips_set_tip(gl_config->tooltips, but,
  28. va_arg(va, const char *), "");
  29. gtk_signal_connect(GTK_OBJECT(but), "clicked",
  30. va_arg(va, GtkSignalFunc), NULL);
  31. gtk_box_pack_start(GTK_BOX(hbox), but, TRUE, FALSE, 5);
  32. }
  33. gtk_widget_show(hbox);
  34. vbox = gtk_vbox_new(FALSE, 0);
  35. scroll = gtk_scrolled_window_new(NULL, NULL);
  36. gtk_widget_show(scroll);
  37. gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
  38. GTK_POLICY_AUTOMATIC,
  39. GTK_POLICY_AUTOMATIC);
  40. gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0);
  41. gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
  42. gtk_container_add(GTK_CONTAINER(scroll), inside);
  43. gtk_widget_show(vbox);
  44. lab = create_label(label);
  45. gtk_notebook_append_page_menu(GTK_NOTEBOOK(noteb), vbox,
  46. lab, create_label(label));
  47. }
  48. static GtkWidget *create_main_area()
  49. {
  50. GtkWidget *widget;
  51. widget = gtk_notebook_new();
  52. gl_config->notebook = GTK_NOTEBOOK(widget);
  53. gtk_notebook_popup_enable(gl_config->notebook);
  54. gtk_notebook_set_homogeneous_tabs(gl_config->notebook, TRUE);
  55. gtk_widget_show(widget);
  56. gtk_signal_connect(GTK_OBJECT(widget), "switch-page", switch_page, NULL);
  57. gl_config->bmpl = create_clist(7, 0,
  58. "Login", "Nom", "Prénom", "Pseudo",
  59. "Machine", "Statut", "Type",
  60. 50, 110, 110, 90, 60, 60, 60,
  61. GTK_SORT_ASCENDING,
  62. GTK_SORT_ASCENDING,
  63. GTK_SORT_ASCENDING,
  64. GTK_SORT_ASCENDING,
  65. GTK_SORT_ASCENDING,
  66. GTK_SORT_ASCENDING,
  67. GTK_SORT_ASCENDING);
  68. gtk_clist_set_compare_func(GTK_CLIST(gl_config->bmpl), bmp_sort);
  69. clist_set_tooltips(GTK_CLIST(gl_config->bmpl), gl_config->tooltips,
  70. "Trier par login", "Trier par nom", "Trier par prénom",
  71. "Trier par pseudo", "Trier par machine",
  72. "Trier par satut", "Séparer les orgas des bitmaps", NULL);
  73. create_page(widget, gl_config->bmpl, "Personnes", 2,
  74. " Actualiser ", "Réactualiser la liste", bmp_refresh,
  75. " Ecrire ", "Envoyer un message", bmp_send_message);
  76. gtk_clist_set_selection_mode(GTK_CLIST(gl_config->bmpl),
  77. GTK_SELECTION_EXTENDED);
  78. gl_config->mapl = create_clist(5, 0,
  79. "Nom", "Description", "Joueurs",
  80. "Auteur", "Taille",
  81. 80, 150, 50, 50, 50,
  82. GTK_SORT_ASCENDING,
  83. GTK_SORT_ASCENDING,
  84. GTK_SORT_ASCENDING,
  85. GTK_SORT_ASCENDING,
  86. GTK_SORT_ASCENDING);
  87. create_page(widget, gl_config->mapl, "Cartes", 4,
  88. " Actualiser ", "Réactualiser la liste", map_refresh,
  89. " Ajouter ", "Ajouter une carte perso", map_add,
  90. " Modifier ", "Modifier une carte", map_edit,
  91. " Supprimer ", "Supprimer la carte sélectionnée", map_remove);
  92. gtk_clist_set_compare_func(GTK_CLIST(gl_config->mapl), map_sort);
  93. clist_set_tooltips(GTK_CLIST(gl_config->mapl), gl_config->tooltips,
  94. "Trier par nom", "Trier par description",
  95. "Trier par nombre de joueurs",
  96. "Trier par auteur", "Trier par taille", NULL);
  97. gl_config->mapa =
  98. mysql_adder_make("Maps", "Ajout d'une carte", map_refresh, 6,
  99. "Nom: ", "nom", "Nom de la carte", sql_add_str, 80,
  100. "Description: ", "descr", "Description de la carte",
  101. sql_add_str, 120,
  102. "Nombre de joueurs: ", "joueurs",
  103. "Nombre de joueurs maximum", sql_add_num, 1, 42, 4,
  104. "Taille: ", "taille",
  105. "Taille de la carte (ex: 100x100)", sql_add_str, 40,
  106. "Publique: ", "public",
  107. "Cette carte est-elle visible par les autres?",
  108. sql_add_flag, TRUE,
  109. "Fichier: ", "fichier", "Nom du fichier carte",
  110. sql_add_file, "./maps");
  111. gl_config->prgl = create_clist(5, 0,
  112. "Nom", "Auteur", "Meilleur score",
  113. "Score moyen", "Tournois",
  114. 80, 120, 80, 70, 30,
  115. GTK_SORT_ASCENDING,
  116. GTK_SORT_ASCENDING,
  117. GTK_SORT_DESCENDING,
  118. GTK_SORT_DESCENDING,
  119. GTK_SORT_DESCENDING);
  120. create_page(widget, gl_config->prgl, "Champions", 4,
  121. " Actualiser ", "Réactualiser la liste", prg_refresh,
  122. " Ajouter ", "Ajouter un champion", prg_add,
  123. " Modifier ", "Modifier un champion", prg_edit,
  124. " Supprimer ", "Supprimer les champions sélectionnés",
  125. prg_remove);
  126. clist_set_tooltips(GTK_CLIST(gl_config->prgl), gl_config->tooltips,
  127. "Trier par nom", "Trier par auteur",
  128. "Trier par meilleur score", "Trier par sore moyen",
  129. "", NULL);
  130. gtk_clist_set_selection_mode(GTK_CLIST(gl_config->prgl),
  131. GTK_SELECTION_EXTENDED);
  132. gtk_clist_set_compare_func(GTK_CLIST(gl_config->prgl), prg_sort);
  133. gl_config->prga =
  134. mysql_adder_make("Champions", "Ajout d'un chamion", prg_refresh, 4,
  135. "Nom: ", "nom", "Nom du champion", sql_add_str, 80,
  136. "Publique: ", "public",
  137. "Les autres candidats peuvent-ils tester "
  138. "leur champion contre le tien?", sql_add_flag, TRUE,
  139. "Tournois: ", "tourn",
  140. "Inclure dans les tournois ? ", sql_add_flag, FALSE,
  141. "Fichier: ", "fichier",
  142. "Fichier .so contenant le champion.", sql_add_file,
  143. "./code");
  144. gl_config->matl = create_clist(4, 0,
  145. "Machine", "Bitmap", "Map", "Joueurs",
  146. 70, 120, 80, 80,
  147. GTK_SORT_ASCENDING,
  148. GTK_SORT_ASCENDING,
  149. GTK_SORT_ASCENDING,
  150. GTK_SORT_ASCENDING);
  151. create_page(widget, gl_config->matl, "Matchs en cours", 2,
  152. " Actualiser ", "Réactualiser la liste", mat_refresh,
  153. " Se connecter ",
  154. "Lancer un client graphique sur les matchs sélectionnés",
  155. mat_connect);
  156. clist_set_tooltips(GTK_CLIST(gl_config->prgl), gl_config->tooltips,
  157. "Trier par machine",
  158. "Trier par bitmap (ayant lancé la partie)",
  159. "Trier par carte", "Trier par nombre de joueurs",
  160. NULL);
  161. gtk_clist_set_compare_func(GTK_CLIST(gl_config->matl), mat_sort);
  162. gtk_clist_set_selection_mode(GTK_CLIST(gl_config->matl),
  163. GTK_SELECTION_EXTENDED);
  164. return widget;
  165. }
  166. void create_gtk_stuff()
  167. {
  168. GtkWidget *vbox;
  169. gl_config->tooltips = gtk_tooltips_new();
  170. gl_config->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  171. gtk_signal_connect(GTK_OBJECT(gl_config->window), "delete-event",
  172. GTK_SIGNAL_FUNC(byebye), NULL);
  173. gtk_window_set_title(GTK_WINDOW(gl_config->window),
  174. "Meta-client Prologin 2001");
  175. gtk_window_set_default_size(GTK_WINDOW(gl_config->window), 650, 250);
  176. gtk_widget_show(gl_config->window);
  177. vbox = gtk_vbox_new(FALSE, 4);
  178. gtk_container_add(GTK_CONTAINER(gl_config->window), vbox);
  179. gtk_box_pack_start(GTK_BOX(vbox), create_menubar(), FALSE, FALSE, 0);
  180. gtk_box_pack_start(GTK_BOX(vbox), create_main_area(), TRUE, TRUE, 0);
  181. prg_refresh(NULL, NULL);
  182. bmp_refresh(NULL, NULL);
  183. map_refresh(NULL, NULL);
  184. mat_refresh(NULL, NULL);
  185. gtk_widget_show(vbox);
  186. }