Complete.Org: Mailing Lists: Archives: freeciv-dev: March 2003:
[Freeciv-Dev] Re: (PR#3522) Sorting connect dialog
Home

[Freeciv-Dev] Re: (PR#3522) Sorting connect dialog

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: andrearo@xxxxxxxxxxxx
Cc: vasc@xxxxxxxxxxxxxx
Subject: [Freeciv-Dev] Re: (PR#3522) Sorting connect dialog
From: "Raimar Falke" <rf13@xxxxxxxxxxxxxxxxx>
Date: Wed, 26 Mar 2003 13:43:17 -0800
Reply-to: rt@xxxxxxxxxxxxxx

On Wed, Mar 26, 2003 at 11:44:44AM -0800, andrearo@xxxxxxxxxxxx wrote:
> Raimar Falke wrote:
> 
> >On Tue, Feb 25, 2003 at 02:29:41PM -0800, andrearo@xxxxxxxxxxxx wrote:
> >  
> >
> >>Hello,
> >>I've made an attempt at sorting the serverlist in the Connect-dialog,
> >>since the default metaserver list is random. Clicking on a title
> >>sorts the list of servers by that topic, clicking again reverse-sorts it.
> >>    
> >>
> >
> >Cleaned up version attached. I will apply this in the next day(s).
> >
> >     Raimar
> >
> Thanks for reviewing the patch.  I think there's a typo on line 324,
> it's should be:   delete_server_list(server_list);

Uhhh. Very stupid error. Yes I didn't recompiled it.

        Raimar

-- 
 email: rf13@xxxxxxxxxxxxxxxxx
 "Only one human captain has ever survived battle with the Minbari
  fleet. He is behind me. You are in front of me. If you value your 
  lives, be somewhere else."
    -- Ambassador Delenn, "Severed Dreams," Babylon 5

Index: client/gui-gtk/connectdlg.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/client/gui-gtk/connectdlg.c,v
retrieving revision 1.38
diff -u -u -r1.38 connectdlg.c
--- client/gui-gtk/connectdlg.c 2002/11/14 09:14:53     1.38
+++ client/gui-gtk/connectdlg.c 2003/03/26 21:36:54
@@ -38,9 +38,12 @@
 
 static GtkWidget *iname, *ihost, *iport;
 static GtkWidget *connw, *quitw;
+static GtkWidget *server_clist;        /* sorted list of servers */
 
 static GtkWidget *dialog;
+static int sort_column;
 
+
 /* meta Server */
 static bool update_meta_dialog(GtkWidget *meta_list);
 static void meta_list_callback(GtkWidget *w, gint row, gint column);
@@ -48,6 +51,8 @@
 
 static int get_meta_list(GtkWidget *list, char *errbuf, int n_errbuf);
 
+#define DEFAULT_SORT_COLUMN 0  /* default sort column  (server)  */
+
 /**************************************************************************
 ...
 **************************************************************************/
@@ -69,6 +74,21 @@
 }
 
 /**************************************************************************
+ Sort the list of metaservers
+**************************************************************************/
+static void sort_servers_callback(GtkButton * button, gpointer * data)
+{
+  sort_column = GPOINTER_TO_INT(data);
+  if (GTK_CLIST(server_clist)->sort_type == GTK_SORT_ASCENDING) {
+    gtk_clist_set_sort_type(GTK_CLIST(server_clist), GTK_SORT_DESCENDING);
+  } else {
+    gtk_clist_set_sort_type(GTK_CLIST(server_clist), GTK_SORT_ASCENDING);
+  }
+  gtk_clist_set_sort_column(GTK_CLIST(server_clist), sort_column);
+  gtk_clist_sort(GTK_CLIST(server_clist));
+}
+
+/**************************************************************************
 ...
 **************************************************************************/
 static bool update_meta_dialog(GtkWidget *meta_list)
@@ -126,7 +146,7 @@
 **************************************************************************/
 void gui_server_connect(void)
 {
-  GtkWidget *label, *table, *book, *scrolled, *list, *vbox, *update;
+  GtkWidget *label, *table, *book, *scrolled, *vbox, *update;
   static const char *titles_[6]= {N_("Server Name"), N_("Port"), N_("Version"),
                                  N_("Status"), N_("Players"), N_("Comment")};
   static char **titles;
@@ -208,14 +228,14 @@
   vbox=gtk_vbox_new(FALSE, 2);
   gtk_notebook_append_page (GTK_NOTEBOOK (book), vbox, label);
 
-  list=gtk_clist_new_with_titles(6, titles);
-  gtk_clist_column_titles_passive(GTK_CLIST(list));
+  server_clist = gtk_clist_new_with_titles(6, titles);
 
-  for(i=0; i<6; i++)
-    gtk_clist_set_column_auto_resize(GTK_CLIST(list), i, TRUE);
+  for (i = 0; i < 6; i++) {
+    gtk_clist_set_column_auto_resize(GTK_CLIST(server_clist), i, TRUE);
+  }
 
   scrolled=gtk_scrolled_window_new(NULL,NULL);
-  gtk_container_add(GTK_CONTAINER(scrolled), list);
+  gtk_container_add(GTK_CONTAINER(scrolled), server_clist);
   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
   gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0);
@@ -223,12 +243,13 @@
   update=gtk_button_new_with_label(_("Update"));
   gtk_box_pack_start(GTK_BOX(vbox), update, FALSE, FALSE, 2);
 
-  gtk_signal_connect(GTK_OBJECT(list), "select_row",
-                       GTK_SIGNAL_FUNC(meta_list_callback), NULL);
-  gtk_signal_connect(GTK_OBJECT(list), "button_press_event",
+  gtk_signal_connect(GTK_OBJECT(server_clist), "select_row",
+                    GTK_SIGNAL_FUNC(meta_list_callback), NULL);
+  gtk_signal_connect(GTK_OBJECT(server_clist), "button_press_event",
                     GTK_SIGNAL_FUNC(meta_click_callback), NULL);
   gtk_signal_connect(GTK_OBJECT(update), "clicked",
-                       GTK_SIGNAL_FUNC(meta_update_callback), (gpointer)list);
+                    GTK_SIGNAL_FUNC(meta_update_callback),
+                    (gpointer) server_clist);
 
   connw=gtk_button_new_with_label(_("Connect"));
   gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), connw,
@@ -253,7 +274,16 @@
                      GTK_SIGNAL_FUNC(connect_callback), NULL);
   gtk_signal_connect(GTK_OBJECT(quitw), "clicked",
                      GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
+  /*  default sort column  */
+  gtk_clist_set_sort_column(GTK_CLIST(server_clist), DEFAULT_SORT_COLUMN);
 
+  /*  all columns are clickable  */
+  for (i = 0; i <6 ; i++) {
+    gtk_signal_connect(GTK_OBJECT(GTK_CLIST(server_clist)->column[i].button),
+                      "clicked", GTK_SIGNAL_FUNC(sort_servers_callback),
+                      GINT_TO_POINTER(i));
+  }
+    
   gtk_widget_show_all(GTK_DIALOG(dialog)->vbox);
   gtk_widget_show_all(GTK_DIALOG(dialog)->action_area);
 
@@ -273,8 +303,8 @@
   struct server_list *server_list = create_server_list(errbuf, n_errbuf);
   if(!server_list) return -1;
 
-  gtk_clist_freeze(GTK_CLIST(list));
-  gtk_clist_clear(GTK_CLIST(list));
+  gtk_clist_freeze(GTK_CLIST(server_clist));
+  gtk_clist_clear(GTK_CLIST(server_clist));
 
   for (i=0; i<6; i++)
     row[i]=buf[i];
@@ -287,13 +317,18 @@
     sz_strlcpy(buf[4], pserver->players);
     sz_strlcpy(buf[5], pserver->metastring);
 
-    gtk_clist_append(GTK_CLIST(list), row);
+    gtk_clist_append(GTK_CLIST(server_clist), row);
   }
   server_list_iterate_end;
 
   delete_server_list(server_list);
-  gtk_clist_thaw(GTK_CLIST(list));
+  gtk_clist_thaw(GTK_CLIST(server_clist));
 
+  /* sort the list */
+  gtk_clist_set_sort_type(GTK_CLIST(server_clist), GTK_SORT_ASCENDING);
+  gtk_clist_set_sort_column(GTK_CLIST(server_clist), sort_column);
+  gtk_clist_sort(GTK_CLIST(server_clist));
+     
   return 0;
 }
 

[Prev in Thread] Current Thread [Next in Thread]