Mercurial > pidgin
annotate plugins/contact_priority.c @ 12301:39fca2edf7da
[gaim-migrate @ 14605]
I only caught this as I was committing, and besides I forgot to mention what
sadrul's patch did. It puts the emblem for the active status on the accounts
in the Accounts menu (he put them in the Remove menu as well but that felt
wrong to me.)
committer: Tailor Script <tailor@pidgin.im>
| author | Etan Reisner <pidgin@unreliablesource.net> |
|---|---|
| date | Sat, 03 Dec 2005 06:50:41 +0000 |
| parents | 281ab2ecc08c |
| children | 3169cd6727ad |
| rev | line source |
|---|---|
| 7421 | 1 /* |
| 2 * Contact priority settings plugin. | |
| 3 * | |
| 4 * Copyright (C) 2003 Etan Reisner, <deryni9@users.sourceforge.net>. | |
| 5 * | |
| 6 * This program is free software; you can redistribute it and/or | |
| 7 * modify it under the terms of the GNU General Public License as | |
| 8 * published by the Free Software Foundation; either version 2 of the | |
| 9 * License, or (at your option) any later version. | |
| 10 * | |
| 11 * This program is distributed in the hope that it will be useful, | |
| 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 * GNU General Public License for more details. | |
| 15 * | |
| 16 * You should have received a copy of the GNU General Public License | |
| 17 * along with this program; if not, write to the Free Software | |
| 18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
| 19 */ | |
| 20 | |
| 9821 | 21 #include "internal.h" |
| 22 #include "gtkgaim.h" | |
| 7421 | 23 #include "gtkplugin.h" |
| 24 #include "gtkutils.h" | |
| 25 #include "prefs.h" | |
| 9954 | 26 #include "version.h" |
| 7421 | 27 |
| 28 #define CONTACT_PRIORITY_PLUGIN_ID "gtk-contact-priority" | |
| 29 | |
| 30 static void | |
| 31 select_account(GtkWidget *widget, GaimAccount *account, gpointer data) | |
| 32 { | |
| 33 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data), | |
| 34 (gdouble)gaim_account_get_int(account, "score", 0)); | |
| 35 } | |
| 36 | |
| 37 static void | |
| 38 account_update(GtkWidget *widget, GtkOptionMenu *optmenu) | |
| 39 { | |
| 40 GaimAccount *account = NULL; | |
| 41 | |
| 42 account = g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(optmenu)))), "account"); | |
| 43 gaim_account_set_int(account, "score", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget))); | |
| 44 } | |
| 45 | |
| 46 static void | |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
47 pref_update(GtkWidget *widget, char *pref) |
| 7421 | 48 { |
| 49 if (gaim_prefs_get_type(pref) == GAIM_PREF_INT) | |
| 50 gaim_prefs_set_int(pref, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget))); | |
| 51 if (gaim_prefs_get_type(pref) == GAIM_PREF_BOOLEAN) | |
| 52 gaim_prefs_set_bool(pref, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))); | |
| 53 } | |
| 54 | |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
55 static struct GaimContactPriorityStatuses |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
56 { |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
57 const char *id; |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
58 const char *description; |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
59 } const statuses[] = |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
60 { |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
61 { "idle", N_("Buddy is idle") }, |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
62 { "away", N_("Buddy is away") }, |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
63 { "extended_away", N_("Buddy is \"extended\" away") }, |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
64 { "offline", N_("Buddy is offline") }, |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
65 { NULL, NULL } |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
66 }; |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
67 |
| 7421 | 68 static GtkWidget * |
| 69 get_config_frame(GaimPlugin *plugin) | |
| 70 { | |
| 71 GtkWidget *ret = NULL, *hbox = NULL, *frame = NULL, *vbox = NULL; | |
| 72 GtkWidget *label = NULL, *spin = NULL, *check = NULL; | |
| 73 GtkWidget *optmenu = NULL; | |
| 74 GtkObject *adj = NULL; | |
| 75 GtkSizeGroup *sg = NULL; | |
| 76 GaimAccount *account = NULL; | |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
77 int i; |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
78 |
| 7421 | 79 gboolean last_match = gaim_prefs_get_bool("/core/contact/last_match"); |
| 80 | |
| 81 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); | |
| 82 | |
| 83 ret = gtk_vbox_new(FALSE, 18); | |
| 84 gtk_container_set_border_width(GTK_CONTAINER(ret), 12); | |
| 85 | |
| 86 frame = gaim_gtk_make_frame(ret, _("Point values to use when...")); | |
| 87 | |
| 88 vbox = gtk_vbox_new(FALSE, 5); | |
| 89 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
| 90 | |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
91 /* Status Spinboxes */ |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
92 for (i = 0 ; statuses[i].id != NULL && statuses[i].description != NULL ; i++) |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
93 { |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
94 char *pref = g_strconcat("/core/status/scores/", statuses[i].id, NULL); |
| 7421 | 95 |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
96 hbox = gtk_hbox_new(FALSE, 5); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
97 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
98 |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
99 label = gtk_label_new_with_mnemonic(_(statuses[i].description)); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
100 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
101 gtk_size_group_add_widget(sg, label); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
102 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
103 |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
104 adj = gtk_adjustment_new(gaim_prefs_get_int(pref), -500, 500, 1, 1, 1); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
105 spin = gtk_spin_button_new((GtkAdjustment *)adj, 1, 0); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
106 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_update), pref); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
107 gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); |
| 7421 | 108 |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
109 g_free(pref); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
110 } |
| 7421 | 111 |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
112 /* Explanation */ |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
113 label = gtk_label_new(NULL); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
114 gtk_label_set_markup(GTK_LABEL(label), _("The buddy with the <i>largest score</i> is the buddy who will have priority in the contact.\n")); |
|
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
115 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
| 7421 | 116 |
| 117 /* Last match */ | |
| 118 hbox = gtk_hbox_new(FALSE, 5); | |
| 119 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
| 120 | |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
121 check = gtk_check_button_new_with_label(_("Use last buddy when scores are equal")); |
| 7421 | 122 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), last_match); |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
123 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_update), "/core/contact/last_match"); |
| 7421 | 124 gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); |
| 125 | |
| 10729 | 126 frame = gaim_gtk_make_frame(ret, _("Point values to use for account...")); |
| 7421 | 127 |
| 128 vbox = gtk_vbox_new(FALSE, 5); | |
| 129 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
| 130 | |
| 131 /* Account */ | |
| 132 hbox = gtk_hbox_new(FALSE, 5); | |
| 133 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
| 134 | |
| 135 /* make this here so I can use it in the option menu callback, we'll | |
| 136 * actually set it up later */ | |
|
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
137 adj = gtk_adjustment_new(0, -500, 500, 1, 1, 1); |
| 7421 | 138 spin = gtk_spin_button_new((GtkAdjustment *)adj, 1, 0); |
| 139 | |
| 140 optmenu = gaim_gtk_account_option_menu_new(NULL, TRUE, | |
| 141 G_CALLBACK(select_account), | |
| 142 NULL, spin); | |
| 143 gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0); | |
| 144 | |
| 145 /* this is where we set up the spin button we made above */ | |
| 146 account = g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu))))), | |
| 147 "account"); | |
| 148 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), | |
| 149 (gdouble)gaim_account_get_int(account, "score", 0)); | |
| 150 gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(spin), GTK_ADJUSTMENT(adj)); | |
| 151 g_signal_connect(G_OBJECT(spin), "value-changed", | |
| 152 G_CALLBACK(account_update), optmenu); | |
| 153 gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); | |
| 154 | |
| 155 gtk_widget_show_all(ret); | |
| 156 | |
| 157 return ret; | |
| 158 } | |
| 159 | |
| 160 static GaimGtkPluginUiInfo ui_info = | |
| 161 { | |
| 162 get_config_frame | |
| 163 }; | |
| 164 | |
| 165 static GaimPluginInfo info = | |
| 166 { | |
| 9954 | 167 GAIM_PLUGIN_MAGIC, |
| 168 GAIM_MAJOR_VERSION, | |
| 169 GAIM_MINOR_VERSION, | |
| 7421 | 170 GAIM_PLUGIN_STANDARD, /**< type */ |
| 171 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ | |
| 172 0, /**< flags */ | |
| 173 NULL, /**< dependencies */ | |
| 174 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
| 175 | |
| 176 CONTACT_PRIORITY_PLUGIN_ID, /**< id */ | |
| 177 N_("Contact Priority"), /**< name */ | |
| 178 VERSION, /**< version */ | |
| 179 /**< summary */ | |
| 180 N_("Allows for controlling the values associated with different buddy states."), | |
| 181 /**< description */ | |
| 182 N_("Allows for changing the point values of idle/away/offline states for buddies in contact priority computations."), | |
| 183 "Etan Reisner <deryni@eden.rutgers.edu>", /**< author */ | |
| 184 GAIM_WEBSITE, /**< homepage */ | |
| 185 | |
| 186 NULL, /**< load */ | |
| 187 NULL, /**< unload */ | |
| 188 NULL, /**< destroy */ | |
| 189 &ui_info, /**< ui_info */ | |
| 190 NULL /**< extra_info */ | |
| 191 }; | |
| 192 | |
| 193 static void | |
| 194 init_plugin(GaimPlugin *plugin) | |
| 195 { | |
| 196 } | |
| 197 | |
| 198 GAIM_INIT_PLUGIN(contactpriority, init_plugin, info) |
