Mercurial > pidgin
annotate plugins/contact_priority.c @ 12595:3169cd6727ad
[gaim-migrate @ 14925]
I've been meaning to spend the time to commit these changes separately, but it's been a couple days without me finding the time...
1. Allow the creation of GaimStatusTypes by passing NULL for the name and/or id. The core uses the default name and/or id. This eliminates quite a bit of duplication in the prpls.
2. Make statuses more consistent. For example, in some prpls, "Busy" was descended from the UNAVAILABLE primitive and on others it was a case of AWAY. Another example... "On Vacation" is definitely an EXTENDED_AWAY not an AWAY.
3. Rename some pixmaps to elminate some special cases. The names of the pixmaps should now match the primitive default IDs.
4. Rename the HIDDEN primitive to INVISIBLE, since we seem to be using that term everywhere. In conjunction with #1, more duplication was eliminated.
5. Add a MOBILE status primitive. It's not used now. It'll be needed in the (hopefully not-too-distant) future, so I'm planning ahead.
6. Shrink the status select for small blist folks. Now if someone can get rid of that stupid extra padding, we'll be set (well, after we deal with imhtml space issues). I've fought with this for many many hours over several days and I can't get it. It's clear that the combo box is requesting more space than is really necessary, but I don't know why.
This is really my first go at anything significant status-related. Everyone should check their favorite prpls carefully to make sure I didn't break anything.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Wed, 21 Dec 2005 08:24:17 +0000 |
parents | 281ab2ecc08c |
children | ae51c59bf819 |
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") }, |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12164
diff
changeset
|
64 #if 0 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12164
diff
changeset
|
65 /* Not used yet. */ |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12164
diff
changeset
|
66 { "mobile", N_("Buddy is mobile") }, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12164
diff
changeset
|
67 #endif |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
68 { "offline", N_("Buddy is offline") }, |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
69 { NULL, NULL } |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
70 }; |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
71 |
7421 | 72 static GtkWidget * |
73 get_config_frame(GaimPlugin *plugin) | |
74 { | |
75 GtkWidget *ret = NULL, *hbox = NULL, *frame = NULL, *vbox = NULL; | |
76 GtkWidget *label = NULL, *spin = NULL, *check = NULL; | |
77 GtkWidget *optmenu = NULL; | |
78 GtkObject *adj = NULL; | |
79 GtkSizeGroup *sg = NULL; | |
80 GaimAccount *account = NULL; | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
81 int i; |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
82 |
7421 | 83 gboolean last_match = gaim_prefs_get_bool("/core/contact/last_match"); |
84 | |
85 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); | |
86 | |
87 ret = gtk_vbox_new(FALSE, 18); | |
88 gtk_container_set_border_width(GTK_CONTAINER(ret), 12); | |
89 | |
90 frame = gaim_gtk_make_frame(ret, _("Point values to use when...")); | |
91 | |
92 vbox = gtk_vbox_new(FALSE, 5); | |
93 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
94 | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
95 /* Status Spinboxes */ |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
96 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
|
97 { |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
98 char *pref = g_strconcat("/core/status/scores/", statuses[i].id, NULL); |
7421 | 99 |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
100 hbox = gtk_hbox_new(FALSE, 5); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
101 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
102 |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
103 label = gtk_label_new_with_mnemonic(_(statuses[i].description)); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
104 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
105 gtk_size_group_add_widget(sg, label); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
106 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
107 |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
108 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
|
109 spin = gtk_spin_button_new((GtkAdjustment *)adj, 1, 0); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
110 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
|
111 gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); |
7421 | 112 |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
113 g_free(pref); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
114 } |
7421 | 115 |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
116 /* Explanation */ |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
117 label = gtk_label_new(NULL); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
118 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
|
119 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
7421 | 120 |
121 /* Last match */ | |
122 hbox = gtk_hbox_new(FALSE, 5); | |
123 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
124 | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
125 check = gtk_check_button_new_with_label(_("Use last buddy when scores are equal")); |
7421 | 126 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
|
127 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_update), "/core/contact/last_match"); |
7421 | 128 gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); |
129 | |
10729 | 130 frame = gaim_gtk_make_frame(ret, _("Point values to use for account...")); |
7421 | 131 |
132 vbox = gtk_vbox_new(FALSE, 5); | |
133 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
134 | |
135 /* Account */ | |
136 hbox = gtk_hbox_new(FALSE, 5); | |
137 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
138 | |
139 /* make this here so I can use it in the option menu callback, we'll | |
140 * actually set it up later */ | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
141 adj = gtk_adjustment_new(0, -500, 500, 1, 1, 1); |
7421 | 142 spin = gtk_spin_button_new((GtkAdjustment *)adj, 1, 0); |
143 | |
144 optmenu = gaim_gtk_account_option_menu_new(NULL, TRUE, | |
145 G_CALLBACK(select_account), | |
146 NULL, spin); | |
147 gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0); | |
148 | |
149 /* this is where we set up the spin button we made above */ | |
150 account = g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu))))), | |
151 "account"); | |
152 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), | |
153 (gdouble)gaim_account_get_int(account, "score", 0)); | |
154 gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(spin), GTK_ADJUSTMENT(adj)); | |
155 g_signal_connect(G_OBJECT(spin), "value-changed", | |
156 G_CALLBACK(account_update), optmenu); | |
157 gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); | |
158 | |
159 gtk_widget_show_all(ret); | |
160 | |
161 return ret; | |
162 } | |
163 | |
164 static GaimGtkPluginUiInfo ui_info = | |
165 { | |
166 get_config_frame | |
167 }; | |
168 | |
169 static GaimPluginInfo info = | |
170 { | |
9954 | 171 GAIM_PLUGIN_MAGIC, |
172 GAIM_MAJOR_VERSION, | |
173 GAIM_MINOR_VERSION, | |
7421 | 174 GAIM_PLUGIN_STANDARD, /**< type */ |
175 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ | |
176 0, /**< flags */ | |
177 NULL, /**< dependencies */ | |
178 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
179 | |
180 CONTACT_PRIORITY_PLUGIN_ID, /**< id */ | |
181 N_("Contact Priority"), /**< name */ | |
182 VERSION, /**< version */ | |
183 /**< summary */ | |
184 N_("Allows for controlling the values associated with different buddy states."), | |
185 /**< description */ | |
186 N_("Allows for changing the point values of idle/away/offline states for buddies in contact priority computations."), | |
187 "Etan Reisner <deryni@eden.rutgers.edu>", /**< author */ | |
188 GAIM_WEBSITE, /**< homepage */ | |
189 | |
190 NULL, /**< load */ | |
191 NULL, /**< unload */ | |
192 NULL, /**< destroy */ | |
193 &ui_info, /**< ui_info */ | |
194 NULL /**< extra_info */ | |
195 }; | |
196 | |
197 static void | |
198 init_plugin(GaimPlugin *plugin) | |
199 { | |
200 } | |
201 | |
202 GAIM_INIT_PLUGIN(contactpriority, init_plugin, info) |