From b06b8290bef019462a45f36de6f10abfe8b13c6d Mon Sep 17 00:00:00 2001 From: Alan F Date: Mon, 3 Feb 2014 14:06:16 +0000 Subject: hide the country and city columns if the databases have not been opened (probably because the file doesn't exist). --- src/trg-peers-model.c | 24 ++++++++++++++++++++++-- src/trg-peers-model.h | 5 +++++ src/trg-peers-tree-view.c | 18 +++++++++++++----- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/trg-peers-model.c b/src/trg-peers-model.c index d64c74d..0137c9d 100644 --- a/src/trg-peers-model.c +++ b/src/trg-peers-model.c @@ -336,8 +336,21 @@ static gboolean trg_peers_model_add_city_foreach(GtkTreeModel *model, return FALSE; } +#if HAVE_GEOIP +gboolean trg_peers_model_has_city_db(TrgPeersModel *model) { + TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(model); + return priv->geoipcity != NULL; +} + +gboolean trg_peers_model_has_country_db(TrgPeersModel *model) { + TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(model); + return priv->geoip != NULL; +} + void trg_peers_model_add_city_column(TrgPeersModel *model) { - gtk_tree_model_foreach(GTK_TREE_MODEL(model), trg_peers_model_add_city_foreach, NULL); + TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(model); + if (priv->geoipcity) + gtk_tree_model_foreach(GTK_TREE_MODEL(model), trg_peers_model_add_city_foreach, NULL); } static gboolean trg_peers_model_add_country_foreach(GtkTreeModel *model, @@ -345,15 +358,22 @@ static gboolean trg_peers_model_add_country_foreach(GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { gchar *address = NULL; + gtk_tree_model_get(GTK_TREE_MODEL(model), iter, PEERSCOL_IP, &address, -1); gtk_list_store_set(GTK_LIST_STORE(model), iter, PEERSCOL_COUNTRY, lookup_country(TRG_PEERS_MODEL(model), address), -1); + g_free(address); + return FALSE; } void trg_peers_model_add_country_column(TrgPeersModel *model) { - gtk_tree_model_foreach(GTK_TREE_MODEL(model), trg_peers_model_add_country_foreach, NULL); + TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(model); + if (priv->geoip) + gtk_tree_model_foreach(GTK_TREE_MODEL(model), trg_peers_model_add_country_foreach, NULL); } +#endif + TrgPeersModel *trg_peers_model_new() { diff --git a/src/trg-peers-model.h b/src/trg-peers-model.h index e080cc1..22d4efe 100644 --- a/src/trg-peers-model.h +++ b/src/trg-peers-model.h @@ -84,8 +84,13 @@ enum { void trg_peers_model_update(TrgPeersModel * model, TrgTreeView * tv, gint64 updateSerial, JsonObject * t, gboolean first); + +#if HAVE_GEOIP void trg_peers_model_add_city_column(TrgPeersModel *model); void trg_peers_model_add_country_column(TrgPeersModel *model); +gboolean trg_peers_model_has_city_db(TrgPeersModel *model); +gboolean trg_peers_model_has_country_db(TrgPeersModel *model); +#endif #endif /* TRG_PEERS_MODEL_H_ */ diff --git a/src/trg-peers-tree-view.c b/src/trg-peers-tree-view.c index 7ed5645..9385d32 100644 --- a/src/trg-peers-tree-view.c +++ b/src/trg-peers-tree-view.c @@ -40,7 +40,11 @@ trg_peers_tree_view_class_init(TrgPeersTreeViewClass * klass G_GNUC_UNUSED) { } -static void trg_peers_tree_view_init(TrgPeersTreeView * self) +static void trg_peers_tree_view_init(TrgPeersTreeView * self) { + +} + +static void trg_peers_tree_view_setup_columns(TrgPeersTreeView * self, TrgPeersModel *model) { TrgTreeView *ttv = TRG_TREE_VIEW(self); trg_column_description *desc; @@ -54,11 +58,13 @@ static void trg_peers_tree_view_init(TrgPeersTreeView * self) _("Host"), "host", 0); #ifdef HAVE_GEOIP - trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_COUNTRY, - _("Country"), "country", 0); - trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_CITY, - _("City"), "city", 0); + 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); @@ -91,6 +97,8 @@ TrgPeersTreeView *trg_peers_tree_view_new(TrgPrefs * prefs, "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)); -- cgit v1.2.3