menubar.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /* $Id: menubar.c,v 1.11 2001/05/03 23:17:47 kilobug Exp $ */
  2. #include "mclient.h"
  3. #define ZLOCK_COMMAND "zlock -immed"
  4. static void menu_disp_about(GtkWidget *wi, void *data)
  5. {
  6. GtkWidget *dialog;
  7. GtkWidget *widget;
  8. GtkAccelGroup *accel_group;
  9. dialog = gtk_dialog_new();
  10. accel_group = gtk_accel_group_new();
  11. gtk_window_add_accel_group(GTK_WINDOW(&(GTK_DIALOG(dialog)->window)),
  12. accel_group);
  13. gtk_container_set_border_width(GTK_CONTAINER(&(GTK_DIALOG(dialog)->window)),
  14. 7);
  15. gtk_window_set_title(GTK_WINDOW(&(GTK_DIALOG(dialog)->window)),
  16. "Finale Prologin 2001");
  17. widget = create_label("Meta-client version "VERSION
  18. "\n\nContact: info@prologin.org");
  19. gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), widget, TRUE, TRUE, 9);
  20. widget = gtk_button_new_with_label(" OK ");
  21. gtk_widget_add_accelerator(widget, "clicked", accel_group, GDK_Return, 0,
  22. GTK_ACCEL_VISIBLE);
  23. gtk_widget_show(widget);
  24. gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), widget, TRUE,
  25. TRUE, 0);
  26. gtk_signal_connect(GTK_OBJECT(widget), "clicked",
  27. GTK_SIGNAL_FUNC(destroy_widget), dialog);
  28. gtk_widget_show(dialog);
  29. }
  30. static void menu_zlock(GtkWidget *wi, void *data)
  31. {
  32. set_my_status(STATUT_ZLOCKE);
  33. system(ZLOCK_COMMAND);
  34. set_my_status(STATUT_PRESENT);
  35. }
  36. static void menu_set_pseudo(GtkWidget *wi, GtkWidget *entry)
  37. {
  38. mysql_do_query(gl_config->mysql,
  39. "UPDATE Bitmaps SET pseudo='%s' WHERE id=%d",
  40. gtk_entry_get_text(GTK_ENTRY(entry)), getuid());
  41. bmp_refresh(NULL, NULL);
  42. }
  43. static void menu_pseudo(GtkWidget *wi, void *data)
  44. {
  45. static GtkWidget *dialog = NULL;
  46. GtkWidget *widget, *hbox, *entry;
  47. char *s;
  48. if (dialog == NULL)
  49. {
  50. hbox = gtk_hbox_new(FALSE, 3);
  51. gtk_widget_show(hbox);
  52. widget = create_label("Pseudo: ");
  53. s = mysql_get_str(gl_config->mysql,
  54. "SELECT pseudo FROM Bitmaps WHERE id=%d", getuid());
  55. gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 9);
  56. entry = create_entry(s, 80);
  57. g_free(s);
  58. gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 9);
  59. dialog = create_dialog("Choix d'un pseudo", hbox,
  60. " Valider ", " Annuler ",
  61. menu_set_pseudo, entry, hide_widget);
  62. gtk_signal_connect(GTK_OBJECT(entry), "activate", menu_set_pseudo,
  63. entry);
  64. gtk_signal_connect_after(GTK_OBJECT(entry), "activate", hide_widget,
  65. dialog);
  66. }
  67. gtk_widget_show(dialog);
  68. }
  69. static void menu_upall(GtkWidget *wi, void *data)
  70. {
  71. bmp_refresh(wi, data);
  72. prg_refresh(wi, data);
  73. map_refresh(wi, data);
  74. mat_refresh(wi, data);
  75. }
  76. static void menu_runmatch(GtkWidget *wi, void *data)
  77. {
  78. gtk_widget_show(start_match_box());
  79. }
  80. static void menu_runtournois(GtkWidget *wi, void *data)
  81. {
  82. gtk_widget_show(start_tournois_box());
  83. }
  84. static void menu_ttip(GtkCheckMenuItem *wi, void *data)
  85. {
  86. if (wi->active)
  87. gtk_tooltips_enable(gl_config->tooltips);
  88. else
  89. gtk_tooltips_disable(gl_config->tooltips);
  90. }
  91. static void menu_nb(GtkCheckMenuItem *wi, void *data, int page)
  92. {
  93. if (wi->active)
  94. gtk_notebook_set_page(gl_config->notebook, page - 1);
  95. }
  96. static GtkItemFactoryEntry gtk_menu_items[] = {
  97. { "/_Système", NULL, NULL, 0, "<Branch>" },
  98. { "/Système/Choisir un _Pseudo", "<control>P", menu_pseudo, 0, NULL },
  99. { "/Système/_Zlock", "<control>Z", menu_zlock, 0, NULL },
  100. { "/Système/Tout _Actualiser", "<control>A", menu_upall, 0, NULL },
  101. { "/Système/sep1", NULL, NULL, 0, "<Separator>" },
  102. { "/Système/_Quitter", "<control>Q", byebye, 0, NULL },
  103. { "/_Section", NULL, NULL, 0, "<Branch>" },
  104. { "/Section/_Personnes", "F1", menu_nb, 1, "<RadioItem>" },
  105. { "/Section/_Cartes", "F2", menu_nb, 2,
  106. "<main>/Section/Personnes" },
  107. { "/Section/C_hampions", "F3", menu_nb, 3,
  108. "<main>/Section/Personnes" },
  109. { "/Section/_Matchs en cours", "F4", menu_nb, 4,
  110. "<main>/Section/Personnes" },
  111. { "/_Match", NULL, NULL, 0, "<Branch>" },
  112. { "/Match/_Lancer", "<control>L", menu_runmatch, 0, NULL },
  113. { "/Match/_Tournois", "<control>T", menu_runtournois, 0, NULL },
  114. { "/_Aide", NULL, NULL, 0, "<LastBranch>" },
  115. { "/_Aide/_Bulles d'aide", "<control>B", menu_ttip, 10, "<ToggleItem>" },
  116. { "/_Aide/_A propos", NULL, menu_disp_about, 0, NULL },
  117. };
  118. GtkWidget *create_menubar()
  119. {
  120. GtkItemFactory *item_factory = NULL;
  121. GtkAccelGroup *accel_group = NULL;
  122. GtkWidget *widget = NULL, *ttip = NULL;
  123. int nmenu_items, i;
  124. nmenu_items = sizeof (gtk_menu_items) / sizeof (gtk_menu_items[0]);
  125. accel_group = gtk_accel_group_new();
  126. item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>",
  127. accel_group);
  128. gtk_item_factory_create_items_ac(item_factory, nmenu_items, gtk_menu_items,
  129. NULL, 2);
  130. gtk_window_add_accel_group(GTK_WINDOW(gl_config->window), accel_group);
  131. widget = gtk_item_factory_get_widget(item_factory, "<main>");
  132. ttip = gtk_item_factory_get_widget_by_action(item_factory, 10);
  133. gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ttip), TRUE);
  134. for (i = 0; i < NOTEBOOK_PAGE_NUM; i++)
  135. gl_config->menunb[i] = gtk_item_factory_get_widget_by_action(item_factory,
  136. i + 1);
  137. gtk_widget_show(widget);
  138. return widget;
  139. }