static void trg_peers_tree_view_setup_columns(TrgPeersTreeView * self, TrgPeersModel *model)
{
    TrgTreeView *ttv = TRG_TREE_VIEW(self);
    trg_column_description *desc;

    desc =
        trg_tree_view_reg_column(ttv, TRG_COLTYPE_ICONTEXT,
                                 PEERSCOL_IP, _("IP"), "ip", 0);
    desc->model_column_extra = PEERSCOL_ICON;

    trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_HOST,
                             _("Host"), "host", 0);

#ifdef HAVE_GEOIP
    if (trg_peers_model_has_country_db(model))
        trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_COUNTRY,
                                 _("Country"), "country", 0);

    if (trg_peers_model_has_city_db(model))
        trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_CITY,
                                 _("City"), "city", 0);
#endif
    trg_tree_view_reg_column(ttv, TRG_COLTYPE_SPEED, PEERSCOL_DOWNSPEED,
                             _("Down Speed"), "down-speed", 0);
    trg_tree_view_reg_column(ttv, TRG_COLTYPE_SPEED, PEERSCOL_UPSPEED,
                             _("Up Speed"), "up-speed", 0);
    trg_tree_view_reg_column(ttv, TRG_COLTYPE_PROG, PEERSCOL_PROGRESS,
                             _("Progress"), "progress", 0);
    trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_FLAGS,
                             _("Flags"), "flags", 0);
    trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_CLIENT,
                             _("Client"), "client", 0);

    gtk_tree_view_set_search_column(GTK_TREE_VIEW(self), PEERSCOL_HOST);
}
TrgPeersTreeView *trg_peers_tree_view_new(TrgPrefs * prefs,
        TrgPeersModel * model,
        const gchar * configId)
{
    GObject *obj = g_object_new(TRG_TYPE_PEERS_TREE_VIEW,
                                "config-id", configId,
                                "prefs", prefs, NULL);

    trg_peers_tree_view_setup_columns(TRG_PEERS_TREE_VIEW(obj), model);

    gtk_tree_view_set_model(GTK_TREE_VIEW(obj), GTK_TREE_MODEL(model));
    trg_tree_view_restore_sort(TRG_TREE_VIEW(obj), 0x00);
    trg_tree_view_setup_columns(TRG_TREE_VIEW(obj));

#ifdef HAVE_GEOIP
    g_signal_connect(obj, "column-added", G_CALLBACK(trg_peers_tree_view_column_added), NULL);
#endif

    return TRG_PEERS_TREE_VIEW(obj);
}
static void
trg_tree_view_user_add_column_cb(GtkWidget * w,
                                 trg_column_description * desc)
{
    GtkTreeViewColumn *col = g_object_get_data(G_OBJECT(w), "parent-col");
    TrgTreeView *tv =
        TRG_TREE_VIEW(gtk_tree_view_column_get_tree_view(col));

    trg_tree_view_add_column_after(tv, desc, -1, col);

    g_signal_emit(tv, signals[SIGNAL_COLUMN_ADDED], 0, desc->id);
}