home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / yagirc-0.51.tar.gz / yagirc-0.51.tar / yagirc-0.51 / gui_setup_lists.c < prev    next >
C/C++ Source or Header  |  1998-05-05  |  6KB  |  186 lines

  1. /*
  2.  
  3.  gui_setup_lists.c : Notify and ignore list notebook entries for setup
  4.  
  5.     Copyright (C) 1998 Timo Sirainen
  6.  
  7.     This program is free software; you can redistribute it and/or modify
  8.     it under the terms of the GNU General Public License as published by
  9.     the Free Software Foundation; either version 2 of the License, or
  10.     (at your option) any later version.
  11.  
  12.     This program is distributed in the hope that it will be useful,
  13.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.     GNU General Public License for more details.
  16.  
  17.     You should have received a copy of the GNU General Public License
  18.     along with this program; if not, write to the Free Software
  19.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. */
  21.  
  22. #include <stdio.h>
  23. #include <string.h>
  24.  
  25. #include <gtk/gtk.h>
  26. #include <glib.h>
  27.  
  28. #include "os.h"
  29. #include "irc.h"
  30. #include "gui.h"
  31.  
  32. static void sig_list_ok(GtkWidget *widget, GtkWidget *dialog)
  33. {
  34.     GtkWidget *li;
  35.     GtkList *list;
  36.     GtkEntry *entry;
  37.     GList *item, **glist;
  38.     char *text;
  39.  
  40.     list = (GtkList *) gtk_object_get_data(GTK_OBJECT(dialog), "list");
  41.     glist = (GList **) gtk_object_get_data(GTK_OBJECT(list), "list");
  42.     entry = (GtkEntry *) gtk_object_get_data(GTK_OBJECT(dialog), "entry");
  43.  
  44.     text = gtk_entry_get_text(entry);
  45.     *glist = g_list_append(*glist, g_strdup(text));
  46.  
  47.     li = gtk_list_item_new_with_label(text);
  48.     gtk_object_set_data(GTK_OBJECT(li), "item", *glist);
  49.     gtk_widget_show(li);
  50.     item = g_list_append(NULL, li);
  51.     gtk_list_append_items(list, item);
  52.  
  53.     gtk_widget_destroy(dialog);
  54. }
  55.  
  56. static void add_list(GtkWidget *widget, GtkWidget *list)
  57. {
  58.     GtkWidget *win;
  59.     GtkWidget *hbox;
  60.     GtkWidget *label;
  61.     GtkWidget *entry;
  62.     GtkWidget *button;
  63.  
  64.     win = gtk_dialog_new();
  65.     gtk_grab_add (GTK_WIDGET (win));
  66.     gtk_object_set_data(GTK_OBJECT(win), "list", list);
  67.  
  68.     label = gtk_label_new(gtk_object_get_data(GTK_OBJECT(list), "new_title"));
  69.     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(win)->vbox), label, FALSE, FALSE, 5);
  70.     gtk_widget_show(label);
  71.  
  72.     entry = gtk_entry_new();
  73.     gtk_object_set_data(GTK_OBJECT(win), "entry", entry);
  74.     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(win)->vbox), entry, FALSE, FALSE, 5);
  75.     gtk_signal_connect_object (GTK_OBJECT (entry), "activate",
  76.                                GTK_SIGNAL_FUNC (sig_list_ok), GTK_OBJECT(win));
  77.     gtk_widget_show(entry);
  78.  
  79.     hbox = gtk_hbox_new(FALSE, 0);
  80.     gtk_container_border_width(GTK_CONTAINER(hbox), 4);
  81.     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(win)->vbox), hbox, FALSE, FALSE, 5);
  82.     gtk_widget_show(hbox);
  83.  
  84.     button = gtk_button_new_with_label (_("Ok"));
  85.     gtk_box_pack_start (GTK_BOX (GTK_DIALOG(win)->action_area), button, TRUE, FALSE, 0);
  86.     gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
  87.                                GTK_SIGNAL_FUNC (sig_list_ok), GTK_OBJECT(win));
  88.     GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
  89.     gtk_widget_grab_default (button);
  90.     gtk_widget_show (button);
  91.  
  92.     button = gtk_button_new_with_label (_("Cancel"));
  93.     gtk_box_pack_start (GTK_BOX (GTK_DIALOG(win)->action_area), button, TRUE, FALSE, 0);
  94.     gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
  95.                                GTK_SIGNAL_FUNC (gtk_widget_destroy),
  96.                                GTK_OBJECT(win));
  97.     gtk_widget_show (button);
  98.     gtk_widget_grab_focus(entry);
  99.  
  100.     gtk_widget_show(win);
  101. }
  102.  
  103. static void delete_list(GtkWidget *widget, GtkList *list)
  104. {
  105.     GList **glist, *sel;
  106.  
  107.     if (list->selection == NULL) return;
  108.  
  109.     glist = (GList **) gtk_object_get_data(GTK_OBJECT(list), "list");
  110.     sel = gtk_object_get_data(GTK_OBJECT(list->selection->data), "item");
  111.  
  112.     gtk_list_remove_items(list, list->selection);
  113.  
  114.     g_free(sel->data);
  115.     *glist = g_list_remove_link(*glist, sel);
  116. }
  117.  
  118. /* draw alias list section */
  119. static void gui_setup_list(GtkWidget *vbox, GList **list, char *topic)
  120. {
  121.     GtkWidget *hbox;
  122.     GtkWidget *button;
  123.     GtkWidget *scrollwin;
  124.     GtkWidget *wlist;
  125.     GList *tmp, *itemlist;
  126.  
  127.     g_return_if_fail(vbox != NULL);
  128.     g_return_if_fail(list != NULL);
  129.     g_return_if_fail(topic != NULL);
  130.  
  131.     hbox = gtk_hbox_new(FALSE, 0);
  132.     gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
  133.     gtk_widget_show(hbox);
  134.  
  135.     /* create alias list widget here for buttons.. */
  136.     wlist = gtk_list_new();
  137.     gtk_object_set_data(GTK_OBJECT(wlist), "new_title", topic);
  138.     gtk_object_set_data(GTK_OBJECT(wlist), "list", list);
  139.  
  140.     /* add/edit/delete buttons */
  141.     button = gtk_button_new_with_label("Add");
  142.     gtk_signal_connect (GTK_OBJECT (button), "clicked",
  143.                         GTK_SIGNAL_FUNC(add_list), wlist);
  144.     gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 10);
  145.     gtk_widget_show(button);
  146.     button = gtk_button_new_with_label("Delete");
  147.     gtk_signal_connect (GTK_OBJECT (button), "clicked",
  148.                         GTK_SIGNAL_FUNC(delete_list), wlist);
  149.     gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 10);
  150.     gtk_widget_show(button);
  151.  
  152.     scrollwin = gtk_scrolled_window_new(NULL, NULL);
  153.     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
  154.                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
  155.     gtk_box_pack_start(GTK_BOX(vbox), scrollwin, TRUE, TRUE, 10);
  156.     gtk_widget_show(scrollwin);
  157.  
  158.     /* alias list */
  159.     gtk_list_set_selection_mode (GTK_LIST(wlist), GTK_SELECTION_BROWSE);
  160.     gtk_container_add(GTK_CONTAINER(scrollwin), wlist);
  161.     gtk_widget_show(wlist);
  162.  
  163.     itemlist = NULL;
  164.     for (tmp = g_list_first(*list); tmp != NULL; tmp = tmp->next)
  165.     {
  166.         GtkWidget *li;
  167.  
  168.         li = gtk_list_item_new_with_label((char *) tmp->data);
  169.         gtk_object_set_data(GTK_OBJECT(li), "item", tmp);
  170.         gtk_widget_show(li);
  171.         itemlist = g_list_append(itemlist, li);
  172.     }
  173.     gtk_list_append_items(GTK_LIST(wlist), itemlist);
  174. }
  175.  
  176.  
  177. void gui_setup_ignorelist(GtkWidget *vbox)
  178. {
  179.     gui_setup_list(vbox, &ignores, _("Add new member to ignore list in format\n\"<nick> [ALL] [CTCP] [PUBLIC] [PRIVATE]\""));
  180. }
  181.  
  182. void gui_setup_notifylist(GtkWidget *vbox)
  183. {
  184.     gui_setup_list(vbox, ¬ifies, _("Add new nick to notify list"));
  185. }
  186.