8713
+ ��膩��� 1 /**
10297
+ ��膩��� 2 * @file gtkpluginpref.c GTK+ Plugin preferences
+ ��膩��� 3 * @ingroup gtkui
+ ��膩��� 4 *
8713
+ ��膩��� 5 * gaim
+ ��膩��� 6 *
+ ��膩��� 7 * Gaim is the legal property of its developers, whose names are too numerous
+ ��膩��� 8 * to list here. Please refer to the COPYRIGHT file distributed with this
+ ��膩��� 9 * source distribution.
+ ��膩��� 10 *
+ ��膩��� 11 * This program is free software; you can redistribute it and/or modify
+ ��膩��� 12 * it under the terms of the GNU General Public License as published by
+ ��膩��� 13 * the Free Software Foundation; either version 2 of the License, or
+ ��膩��� 14 * (at your option) any later version.
+ ��膩��� 15 *
+ ��膩��� 16 * This program is distributed in the hope that it will be useful,
+ ��膩��� 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ��膩��� 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ��膩��� 19 * GNU General Public License for more details.
+ ��膩��� 20 *
+ ��膩��� 21 * You should have received a copy of the GNU General Public License
+ ��膩��� 22 * along with this program; if not, write to the Free Software
+ ��膩��� 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ ��膩��� 24 */
+ ��膩��� 25 #ifdef HAVE_CONFIG_H
+ ��膩��� 26 # include <config.h>
+ ��膩��� 27 #endif
+ ��膩��� 28
+ ��膩��� 29 #include "debug.h"
+ ��膩��� 30 #include "internal.h"
+ ��膩��� 31 #include "pluginpref.h"
+ ��膩��� 32 #include "prefs.h"
+ ��膩��� 33
+ ��膩��� 34 #include "gtkpluginpref.h"
+ ��膩��� 35 #include "gtkprefs.h"
+ ��膩��� 36 #include "gtkutils.h"
+ ��膩��� 37
+ ��膩��� 38 static gboolean
+ ��膩��� 39 entry_cb(GtkWidget *entry, gpointer data) {
+ ��膩��� 40 char *pref = data;
+ ��膩��� 41
+ ��膩��� 42 gaim_prefs_set_string(pref, gtk_entry_get_text(GTK_ENTRY(entry)));
+ ��膩��� 43
+ ��膩��� 44 return FALSE;
+ ��膩��� 45 }
+ ��膩��� 46
+ ��膩��� 47 static void
+ ��膩��� 48 make_string_pref(GtkWidget *parent, GaimPluginPref *pref, GtkSizeGroup *sg) {
+ ��膩��� 49 GtkWidget *hbox, *gtk_label, *entry;
+ ��膩��� 50 gchar *pref_name, *pref_label;
+ ��膩��� 51
+ ��膩��� 52 pref_name = gaim_plugin_pref_get_name(pref);
+ ��膩��� 53 pref_label = gaim_plugin_pref_get_label(pref);
+ ��膩��� 54
+ ��膩��� 55 switch(gaim_plugin_pref_get_type(pref)) {
+ ��膩��� 56 case GAIM_PLUGIN_PREF_CHOICE:
+ ��膩��� 57 gtk_label = gaim_gtk_prefs_dropdown_from_list(parent, pref_label,
+ ��膩��� 58 GAIM_PREF_STRING, pref_name,
10414
+ ��膩��� 59 gaim_plugin_pref_get_choices(pref));
8713
+ ��膩��� 60 gtk_misc_set_alignment(GTK_MISC(gtk_label), 0, 0.5);
+ ��膩��� 61
+ ��膩��� 62 if(sg)
+ ��膩��� 63 gtk_size_group_add_widget(sg, gtk_label);
+ ��膩��� 64
+ ��膩��� 65 break;
+ ��膩��� 66 case GAIM_PLUGIN_PREF_NONE:
+ ��膩��� 67 default:
11243
+ ��膩��� 68 hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE);
8713
+ ��膩��� 69 gtk_widget_show(hbox);
+ ��膩��� 70 gtk_box_pack_start(GTK_BOX(parent), hbox, FALSE, FALSE, 0);
+ ��膩��� 71
+ ��膩��� 72 gtk_label = gtk_label_new_with_mnemonic(pref_label);
+ ��膩��� 73 gtk_misc_set_alignment(GTK_MISC(gtk_label), 0, 0.5);
+ ��膩��� 74 gtk_widget_show(gtk_label);
+ ��膩��� 75 gtk_box_pack_start(GTK_BOX(hbox), gtk_label, FALSE, FALSE, 0);
+ ��膩��� 76
+ ��膩��� 77 if(sg)
+ ��膩��� 78 gtk_size_group_add_widget(sg, gtk_label);
+ ��膩��� 79
+ ��膩��� 80 entry = gtk_entry_new();
+ ��膩��� 81 gtk_entry_set_text(GTK_ENTRY(entry), gaim_prefs_get_string(pref_name));
+ ��膩��� 82 gtk_entry_set_max_length(GTK_ENTRY(entry),
+ ��膩��� 83 gaim_plugin_pref_get_max_length(pref));
11986
+ ��膩��� 84 if (gaim_plugin_pref_get_masked(pref))
+ ��膩��� 85 {
+ ��膩��� 86 gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
+ ��膩��� 87 gtk_entry_set_invisible_char(GTK_ENTRY(entry), GAIM_INVISIBLE_CHAR);
+ ��膩��� 88 }
8713
+ ��膩��� 89 g_signal_connect(G_OBJECT(entry), "changed",
+ ��膩��� 90 G_CALLBACK(entry_cb),
+ ��膩��� 91 (gpointer)pref_name);
+ ��膩��� 92 gtk_label_set_mnemonic_widget(GTK_LABEL(gtk_label), entry);
+ ��膩��� 93 gtk_widget_show(entry);
+ ��膩��� 94 gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
+ ��膩��� 95
+ ��膩��� 96 break;
+ ��膩��� 97 }
+ ��膩��� 98 }
+ ��膩��� 99
+ ��膩��� 100 static void
+ ��膩��� 101 make_int_pref(GtkWidget *parent, GaimPluginPref *pref, GtkSizeGroup *sg) {
+ ��膩��� 102 GtkWidget *gtk_label;
+ ��膩��� 103 gchar *pref_name, *pref_label;
+ ��膩��� 104 gint max, min;
+ ��膩��� 105
+ ��膩��� 106 pref_name = gaim_plugin_pref_get_name(pref);
+ ��膩��� 107 pref_label = gaim_plugin_pref_get_label(pref);
+ ��膩��� 108
+ ��膩��� 109 switch(gaim_plugin_pref_get_type(pref)) {
+ ��膩��� 110 case GAIM_PLUGIN_PREF_CHOICE:
+ ��膩��� 111 gtk_label = gaim_gtk_prefs_dropdown_from_list(parent, pref_label,
9529
+ ��膩��� 112 GAIM_PREF_INT, pref_name, gaim_plugin_pref_get_choices(pref));
8713
+ ��膩��� 113 gtk_misc_set_alignment(GTK_MISC(gtk_label), 0, 0.5);
+ ��膩��� 114
+ ��膩��� 115 if(sg)
+ ��膩��� 116 gtk_size_group_add_widget(sg, gtk_label);
+ ��膩��� 117
+ ��膩��� 118 break;
+ ��膩��� 119 case GAIM_PLUGIN_PREF_NONE:
+ ��膩��� 120 default:
+ ��膩��� 121 gaim_plugin_pref_get_bounds(pref, &min, &max);
10414
+ ��膩��� 122 gaim_gtk_prefs_labeled_spin_button(parent, pref_label,
9529
+ ��膩��� 123 pref_name, min, max, sg);
8713
+ ��膩��� 124 break;
+ ��膩��� 125 }
+ ��膩��� 126 }
+ ��膩��� 127
9529
+ ��膩��� 128
+ ��膩��� 129 static void
+ ��膩��� 130 make_info_pref(GtkWidget *parent, GaimPluginPref *pref) {
+ ��膩��� 131 GtkWidget *gtk_label = gtk_label_new(gaim_plugin_pref_get_label(pref));
+ ��膩��� 132 gtk_misc_set_alignment(GTK_MISC(gtk_label), 0, 0);
+ ��膩��� 133 gtk_label_set_line_wrap(GTK_LABEL(gtk_label), TRUE);
+ ��膩��� 134 gtk_box_pack_start(GTK_BOX(parent), gtk_label, FALSE, FALSE, 0);
+ ��膩��� 135 gtk_widget_show(gtk_label);
+ ��膩��� 136 }
+ ��膩��� 137
+ ��膩��� 138
8713
+ ��膩��� 139 GtkWidget *
+ ��膩��� 140 gaim_gtk_plugin_pref_create_frame(GaimPluginPrefFrame *frame) {
+ ��膩��� 141 GaimPluginPref *pref;
+ ��膩��� 142 GtkWidget *ret, *parent;
+ ��膩��� 143 GtkSizeGroup *sg;
+ ��膩��� 144 GList *pp;
+ ��膩��� 145 gchar *name, *label;
+ ��膩��� 146
+ ��膩��� 147 g_return_val_if_fail(frame, NULL);
+ ��膩��� 148
+ ��膩��� 149 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+ ��膩��� 150
+ ��膩��� 151 parent = ret = gtk_vbox_new(FALSE, 16);
11243
+ ��膩��� 152 gtk_container_set_border_width(GTK_CONTAINER(ret), GAIM_HIG_BORDER);
8713
+ ��膩��� 153 gtk_widget_show(ret);
+ ��膩��� 154
+ ��膩��� 155 for(pp = gaim_plugin_pref_frame_get_prefs(frame);
+ ��膩��� 156 pp != NULL;
+ ��膩��� 157 pp = pp->next)
+ ��膩��� 158 {
+ ��膩��� 159 pref = (GaimPluginPref *)pp->data;
+ ��膩��� 160
+ ��膩��� 161 name = gaim_plugin_pref_get_name(pref);
+ ��膩��� 162 label = gaim_plugin_pref_get_label(pref);
+ ��膩��� 163
+ ��膩��� 164 if(name == NULL) {
+ ��膩��� 165 if(label == NULL)
+ ��膩��� 166 continue;
9529
+ ��膩��� 167
+ ��膩��� 168 if(gaim_plugin_pref_get_type(pref) == GAIM_PLUGIN_PREF_INFO) {
+ ��膩��� 169 make_info_pref(parent, pref);
+ ��膩��� 170 } else {
+ ��膩��� 171 parent = gaim_gtk_make_frame(ret, label);
+ ��膩��� 172 gtk_widget_show(parent);
+ ��膩��� 173 }
8713
+ ��膩��� 174
+ ��膩��� 175 continue;
+ ��膩��� 176 }
+ ��膩��� 177
+ ��膩��� 178 switch(gaim_prefs_get_type(name)) {
+ ��膩��� 179 case GAIM_PREF_BOOLEAN:
+ ��膩��� 180 gaim_gtk_prefs_checkbox(label, name, parent);
+ ��膩��� 181 break;
+ ��膩��� 182 case GAIM_PREF_INT:
+ ��膩��� 183 make_int_pref(parent, pref, sg);
+ ��膩��� 184 break;
+ ��膩��� 185 case GAIM_PREF_STRING:
+ ��膩��� 186 make_string_pref(parent, pref, sg);
+ ��膩��� 187 break;
+ ��膩��� 188 default:
+ ��膩��� 189 break;
+ ��膩��� 190 }
+ ��膩��� 191 }
+ ��膩��� 192
+ ��膩��� 193 return ret;
+ ��膩��� 194 }