char *rcsid_gtk2_metaserver_c = "$Id: metaserver.c,v 1.2 2005/07/04 22:42:03 mwedel Exp $"; /* Crossfire client, a client program for the crossfire program. Copyright (C) 2005 Mark Wedel & Crossfire Development Team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. The author can be reached via e-mail to crossfire@metalforge.org */ #ifdef HAVE_CONFIG_H # include #endif #include #include "client.h" #include "image.h" #include "gtk2proto.h" #include "interface.h" #include "support.h" #include "metaserver.h" #include "main.h" static GtkWidget *metaserver_window, *treeview_metaserver, *metaserver_button, *metaserver_status; static GtkListStore *store_metaserver; static GtkTreeSelection *metaserver_selection; enum { LIST_HOSTNAME, LIST_IPADDR, LIST_IDLETIME, LIST_PLAYERS, LIST_VERSION, LIST_COMMENT }; gboolean metaserver_selection_func ( GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer userdata) { gtk_widget_set_sensitive(metaserver_button, TRUE); return TRUE; } char *get_metaserver() { static int has_init=0; GtkTreeIter iter; char idle[256], nplayers[256]; int i; if (!has_init) { GtkTreeViewColumn *column; GtkCellRenderer *renderer; metaserver_window = create_metaserver_window(); gtk_window_set_transient_for(GTK_WINDOW(metaserver_window), GTK_WINDOW(window_root)); treeview_metaserver = lookup_widget(metaserver_window, "treeview_metaserver"); metaserver_button = lookup_widget(metaserver_window, "metaserver_select"); metaserver_status = lookup_widget(metaserver_window, "metaserver_status"); store_metaserver = gtk_list_store_new (6, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(treeview_metaserver), GTK_TREE_MODEL(store_metaserver)); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Hostname", renderer, "text", LIST_HOSTNAME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_metaserver), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("IP Addr", renderer, "text", LIST_IPADDR, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_metaserver), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Last Update (Sec)", renderer, "text", LIST_IDLETIME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_metaserver), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("# Players", renderer, "text", LIST_PLAYERS, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_metaserver), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Version", renderer, "text", LIST_VERSION, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_metaserver), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Server Comment", renderer, "text", LIST_COMMENT, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_metaserver), column); gtk_widget_realize(metaserver_window); metaserver_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_metaserver)); gtk_tree_selection_set_mode (metaserver_selection, GTK_SELECTION_BROWSE); gtk_tree_selection_set_select_function(metaserver_selection, metaserver_selection_func, NULL, NULL); has_init=1; } gtk_widget_show(metaserver_window); gtk_label_set_text(GTK_LABEL(metaserver_status), "Waiting for user selection"); gtk_widget_set_sensitive(metaserver_button, FALSE); gtk_list_store_clear(store_metaserver); if (cached_servers_num) { for ( i = 0; i < cached_servers_num; i++ ) { gtk_list_store_append(store_metaserver, &iter); gtk_list_store_set(store_metaserver, &iter, LIST_HOSTNAME, cached_servers_name[i], LIST_IPADDR, cached_servers_ip[i], LIST_COMMENT, "Cached server entry", -1); } } for (i=0; i