Merge pull request #467 from TingPing/bancol

Add type column to banlist
This commit is contained in:
RichardHitt 2013-03-24 01:31:04 -07:00
commit b693c58e9f
2 changed files with 22 additions and 17 deletions

View File

@ -57,7 +57,7 @@ static void supports_quiet (banlist_info *, int);
static mode_info modes[MODE_CT] = { static mode_info modes[MODE_CT] = {
{ {
N_("Bans"), N_("Bans"),
"(b) ", N_("Ban"),
'b', 'b',
RPL_BANLIST, RPL_BANLIST,
RPL_ENDOFBANLIST, RPL_ENDOFBANLIST,
@ -66,7 +66,7 @@ static mode_info modes[MODE_CT] = {
} }
,{ ,{
N_("Exempts"), N_("Exempts"),
"(e) ", N_("Exempt"),
'e', 'e',
RPL_EXCEPTLIST, RPL_EXCEPTLIST,
RPL_ENDOFEXCEPTLIST, RPL_ENDOFEXCEPTLIST,
@ -75,7 +75,7 @@ static mode_info modes[MODE_CT] = {
} }
,{ ,{
N_("Invites"), N_("Invites"),
"(I) ", N_("Invite"),
'I', 'I',
RPL_INVITELIST, RPL_INVITELIST,
RPL_ENDOFINVITELIST, RPL_ENDOFINVITELIST,
@ -84,7 +84,7 @@ static mode_info modes[MODE_CT] = {
} }
,{ ,{
N_("Quiets"), N_("Quiets"),
"(q) ", N_("Quiet"),
'q', 'q',
RPL_QUIETLIST, RPL_QUIETLIST,
RPL_ENDOFQUIETLIST, RPL_ENDOFQUIETLIST,
@ -96,6 +96,7 @@ static mode_info modes[MODE_CT] = {
/* model for the banlist tree */ /* model for the banlist tree */
enum enum
{ {
TYPE_COLUMN,
MASK_COLUMN, MASK_COLUMN,
FROM_COLUMN, FROM_COLUMN,
DATE_COLUMN, DATE_COLUMN,
@ -215,7 +216,6 @@ fe_add_ban_list (struct session *sess, char *mask, char *who, char *when, int rp
int i; int i;
GtkListStore *store; GtkListStore *store;
GtkTreeIter iter; GtkTreeIter iter;
char buf[512];
if (!banl) if (!banl)
return FALSE; return FALSE;
@ -233,8 +233,8 @@ fe_add_ban_list (struct session *sess, char *mask, char *who, char *when, int rp
store = get_store (sess); store = get_store (sess);
gtk_list_store_append (store, &iter); gtk_list_store_append (store, &iter);
g_snprintf (buf, sizeof buf, "%s%s", modes[i].tag, mask); gtk_list_store_set (store, &iter, TYPE_COLUMN, _(modes[i].type), MASK_COLUMN, mask,
gtk_list_store_set (store, &iter, 0, buf, 1, who, 2, when, -1); FROM_COLUMN, who, DATE_COLUMN, when, -1);
banl->line_ct++; banl->line_ct++;
return TRUE; return TRUE;
@ -407,8 +407,8 @@ banlist_unban_inner (gpointer none, banlist_info *banl, int mode_num)
GtkTreeSelection *sel; GtkTreeSelection *sel;
GtkTreeIter iter; GtkTreeIter iter;
char tbuf[2048]; char tbuf[2048];
char **masks, *mask; char **masks, *mask, *type;
int num_sel, taglen, i; int num_sel, i;
/* grab the list of selected items */ /* grab the list of selected items */
@ -418,7 +418,6 @@ banlist_unban_inner (gpointer none, banlist_info *banl, int mode_num)
if (!gtk_tree_model_get_iter_first (model, &iter)) if (!gtk_tree_model_get_iter_first (model, &iter))
return 0; return 0;
taglen = strlen (modes[mode_num].tag);
masks = g_malloc (sizeof (char *) * banl->line_ct); masks = g_malloc (sizeof (char *) * banl->line_ct);
num_sel = 0; num_sel = 0;
do do
@ -426,15 +425,16 @@ banlist_unban_inner (gpointer none, banlist_info *banl, int mode_num)
if (gtk_tree_selection_iter_is_selected (sel, &iter)) if (gtk_tree_selection_iter_is_selected (sel, &iter))
{ {
/* Get the mask part of this selected line */ /* Get the mask part of this selected line */
gtk_tree_model_get (model, &iter, MASK_COLUMN, &mask, -1); gtk_tree_model_get (model, &iter, TYPE_COLUMN, &type, MASK_COLUMN, &mask, -1);
/* If it's the wrong type of mask, just continue */ /* If it's the wrong type of mask, just continue */
if (strncmp (modes[mode_num].tag, mask, taglen) != 0) if (strcmp (_(modes[mode_num].type), type) != 0)
continue; continue;
/* Otherwise add it to our array of mask pointers */ /* Otherwise add it to our array of mask pointers */
masks[num_sel++] = g_strdup (mask + taglen); masks[num_sel++] = g_strdup (mask);
g_free (mask); g_free (mask);
g_free (type);
} }
} }
while (gtk_tree_model_iter_next (model, &iter)); while (gtk_tree_model_iter_next (model, &iter));
@ -643,13 +643,14 @@ banlist_treeview_new (GtkWidget *box, banlist_info *banl)
GtkTreeSortable *sortable; GtkTreeSortable *sortable;
store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_STRING); G_TYPE_STRING, G_TYPE_STRING);
g_return_val_if_fail (store != NULL, NULL); g_return_val_if_fail (store != NULL, NULL);
sortable = GTK_TREE_SORTABLE (store); sortable = GTK_TREE_SORTABLE (store);
gtk_tree_sortable_set_sort_func (sortable, 2, banlist_date_sort, GINT_TO_POINTER (2), NULL); gtk_tree_sortable_set_sort_func (sortable, 2, banlist_date_sort, GINT_TO_POINTER (2), NULL);
view = gtkutil_treeview_new (box, GTK_TREE_MODEL (store), NULL, view = gtkutil_treeview_new (box, GTK_TREE_MODEL (store), NULL,
TYPE_COLUMN, _("Type"),
MASK_COLUMN, _("Mask"), MASK_COLUMN, _("Mask"),
FROM_COLUMN, _("From"), FROM_COLUMN, _("From"),
DATE_COLUMN, _("Date"), -1); DATE_COLUMN, _("Date"), -1);
@ -661,6 +662,10 @@ banlist_treeview_new (GtkWidget *box, banlist_info *banl)
gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
gtk_tree_view_column_set_resizable (col, TRUE); gtk_tree_view_column_set_resizable (col, TRUE);
col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), TYPE_COLUMN);
gtk_tree_view_column_set_alignment (col, 0.5);
gtk_tree_view_column_set_sort_column_id (col, TYPE_COLUMN);
col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), FROM_COLUMN); col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), FROM_COLUMN);
gtk_tree_view_column_set_alignment (col, 0.5); gtk_tree_view_column_set_alignment (col, 0.5);
gtk_tree_view_column_set_sort_column_id (col, FROM_COLUMN); gtk_tree_view_column_set_sort_column_id (col, FROM_COLUMN);

View File

@ -28,7 +28,7 @@ typedef struct banlist_info_s banlist_info;
typedef struct mode_info_s { typedef struct mode_info_s {
char *name; /* Checkbox name, e.g. "Bans" */ char *name; /* Checkbox name, e.g. "Bans" */
char *tag; /* Prefix line with this, e.g. "(EX) " for MODE_EXEMPT */ char *type; /* Type for type column, e.g. "Ban" */
char letter; /* /mode-command letter, e.g. 'b' for MODE_BAN */ char letter; /* /mode-command letter, e.g. 'b' for MODE_BAN */
int code; /* rfc RPL_foo code, e.g. 367 for RPL_BANLIST */ int code; /* rfc RPL_foo code, e.g. 367 for RPL_BANLIST */
int endcode; /* rfc RPL_ENDOFfoo code, e.g. 368 for RPL_ENDOFBANLIST */ int endcode; /* rfc RPL_ENDOFfoo code, e.g. 368 for RPL_ENDOFBANLIST */