[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Pan-devel] Server list patch
From: |
Jacob Ilsø Christensen |
Subject: |
Re: [Pan-devel] Server list patch |
Date: |
19 Sep 2002 21:19:38 +0200 |
And to make things look a bit more right, this line:
gtk_container_add (GTK_CONTAINER(w), d->server_tree_view);
should be replaced by this line:
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(w),
d->server_tree_view);
/Jacob
On Thu, 2002-09-19 at 19:36, Jacob Ilsø Christensen wrote:
> Hi.
>
> Attached is a patch against current cvs which changes use of GtkCList
> (deprecated) to GtkTreeView in the server list (this is to warm up for
> the article list conversion ;) ).
> Comments are most welcome (especially since I don't know what
> coding/design guidelines are used in Pan).
>
> /Jacob
>
>
> ----
>
> Index: pan/server-ui.c
> ===================================================================
> RCS file: /cvs/gnome/pan/pan/server-ui.c,v
> retrieving revision 1.27
> diff -u -r1.27 server-ui.c
> --- pan/server-ui.c 2002/09/17 17:36:22 1.27
> +++ pan/server-ui.c 2002/09/19 17:20:32
> @@ -77,11 +77,18 @@
> }
> ServerEditDialog;
>
> +enum
> +{
> + SERVER_NAME_COLUMN,
> + SERVER_DATA_COLUMN,
> + N_COLUMNS
> +};
> +
> typedef struct
> {
> - GtkWidget * server_clist;
> + GtkWidget * server_tree_view;
> GtkWidget * dialog;
> -
> + GtkListStore * servers_store;
> GtkWidget * remove_button;
> GtkWidget * edit_button;
> }
> @@ -472,31 +479,16 @@
> ************* LIST DIALOG
> ************/
>
> -static int
> -get_selected_index (ServerListDialog * d)
> -{
> - int sel;
> - GtkCList * clist;
> -
> - /* find the selected server */
> - pan_lock ();
> - clist = GTK_CLIST(d->server_clist);
> - sel = -1;
> - if (clist->selection != NULL)
> - sel = GPOINTER_TO_INT(clist->selection->data);
> - pan_unlock ();
> -
> - return sel;
> -}
> -
> static Server*
> get_selected_server (ServerListDialog * d)
> {
> - Server * retval = NULL;
> + Server * retval = NULL;
> + GtkTreeSelection * selection =
> gtk_tree_view_get_selection(GTK_TREE_VIEW (d->server_tree_view));
> + GtkTreeIter iter;
> + GtkTreeModel *model;
>
> - const int index = get_selected_index (d);
> - if (index != -1)
> - retval = (Server*) gtk_clist_get_row_data
> (GTK_CLIST(d->server_clist), index);
> + if (gtk_tree_selection_get_selected (selection, &model, &iter))
> + gtk_tree_model_get (model, &iter, SERVER_DATA_COLUMN,
> &retval, -1);
>
> return retval;
> }
> @@ -504,8 +496,7 @@
> static void
> button_refresh (ServerListDialog * d)
> {
> - const int sel = get_selected_index (d);
> - const gboolean have_sel = sel != -1;
> + const gboolean have_sel = (get_selected_server (d) != NULL);
>
> pan_lock ();
> gtk_widget_set_sensitive (d->edit_button, have_sel);
> @@ -540,29 +531,40 @@
> }
>
> static void
> -clist_refresh (ServerListDialog * d)
> +server_tree_view_refresh (ServerListDialog * d)
> {
> - int i;
> - int select_row = -1;
> +
> + GtkTreeSelection * selection =
> gtk_tree_view_get_selection(GTK_TREE_VIEW (d->server_tree_view));
> + gboolean found_selected = FALSE;
> + GtkTreeIter selected_iter;
> Server * selected_server = get_selected_server (d);
> - GtkCList * clist = GTK_CLIST(d->server_clist);
> GPtrArray * a = get_public_server_array ();
> + int i;
>
> - pan_lock ();
> - gtk_clist_freeze (clist);
> - gtk_clist_clear (clist);
> + pan_lock ();
> + gtk_list_store_clear (d->servers_store);
> +
> for (i=0; i<a->len; ++i)
> {
> int row;
> + GtkTreeIter iter;
> Server * server = SERVER (g_ptr_array_index (a, i));
> - row = gtk_clist_insert (clist, -1, &server->name);
> - gtk_clist_set_row_data (clist, row, server);
> - if (server == selected_server)
> - select_row = i;
> +
> + gtk_list_store_append (d->servers_store, &iter);
> + gtk_list_store_set (d->servers_store, &iter,
> + SERVER_NAME_COLUMN, server->name,
> + SERVER_DATA_COLUMN, server,
> + -1);
> +
> + if (server == selected_server) {
> + found_selected = TRUE;
> + selected_iter = iter;
> + }
> }
> - if (select_row != -1)
> - gtk_clist_select_row (clist, select_row, 0);
> - gtk_clist_thaw (clist);
> +
> + if (found_selected)
> + gtk_tree_selection_select_iter (selection, &selected_iter);
> +
> pan_unlock ();
>
> g_ptr_array_free (a, TRUE);
> @@ -582,7 +584,6 @@
> server_list_dialog_destroy_cb (GtkWidget * w, gpointer user_data)
> {
> g_free (user_data);
> -
> server_menu_update ();
> }
>
> @@ -596,10 +597,10 @@
> {
> ServerListDialog * d = (ServerListDialog*) data;
> Server * selected_server = get_selected_server (d);
> - if (selected_server != NULL)
> - {
> +
> + if (selected_server != NULL) {
> serverlist_remove_server (selected_server);
> - clist_refresh (d);
> + server_tree_view_refresh (d);
> button_refresh (d);
> }
> }
> @@ -608,7 +609,7 @@
> server_edit_dialog_destroy_cb (GtkWidget * w, gpointer user_data)
> {
> ServerListDialog * d = (ServerListDialog*) user_data;
> - clist_refresh (d);
> + server_tree_view_refresh (d);
> }
>
> static void
> @@ -629,27 +630,23 @@
> {
> ServerListDialog * d = (ServerListDialog*) user_data;
> Server * selected_server = get_selected_server (d);
> - if (selected_server != NULL)
> - {
> + if (selected_server != NULL) {
> GtkWidget * dialog = server_edit_dialog (d->dialog,
> selected_server);
> g_signal_connect (GTK_OBJECT(dialog), "destroy",
> G_CALLBACK(server_edit_dialog_destroy_cb), d);
> gtk_widget_show_all (dialog);
> }
> }
> +
> static gboolean
> -server_clist_button_press_cb (GtkWidget * w, GdkEventButton * b, gpointer
> data)
> +server_tree_view_button_press_cb (GtkWidget * w, GdkEventButton * b,
> gpointer data)
> {
> if (b->button==1 && b->type==GDK_2BUTTON_PRESS)
> edit_button_clicked_cb (NULL, data);
> return FALSE;
> }
>
> -static void
> -list_selection_changed_cb (GtkCList * clist,
> - int row,
> - int column,
> - GdkEventButton * event,
> - gpointer user_data)
> +static void
> +server_tree_view_selection_changed_cb (GtkTreeSelection * selection,
> gpointer user_data)
> {
> button_refresh ((ServerListDialog*)user_data);
> }
> @@ -664,9 +661,11 @@
> GtkWidget * w;
> GtkWidget * hbox;
> GtkWidget * bbox;
> + GtkTreeViewColumn *column;
> + GtkTreeSelection * selection;
> + GtkCellRenderer * renderer;
> GtkTooltips * tips = gtk_tooltips_new ();
> ServerListDialog * d = g_new0 (ServerListDialog, 1);
> - char * titles [1];
>
> /* dialog */
> w = d->dialog = gtk_dialog_new_with_buttons (_("Pan: Servers"),
> @@ -682,22 +681,38 @@
> hbox = gtk_hbox_new (FALSE, GUI_PAD);
> gtk_container_set_border_width (GTK_CONTAINER(hbox), 12);
> gtk_box_pack_start (GTK_BOX(GTK_DIALOG(w)->vbox), hbox, TRUE, TRUE, 0);
> +
>
> - /* clist */
> - titles[0] = _("Servers");
> - w = d->server_clist= gtk_clist_new_with_titles (1, titles);
> - gtk_clist_set_selection_mode (GTK_CLIST(w), GTK_SELECTION_BROWSE);
> + /* Create the list_store */
> + d->servers_store = gtk_list_store_new (N_COLUMNS,
> + G_TYPE_STRING,
> + G_TYPE_POINTER);
> +
> + /* Create the tree_view */
> + w = d->server_tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL
> (d->servers_store));
> +
> + /* Add the column to the view */
> + renderer = gtk_cell_renderer_text_new ();
> + column = gtk_tree_view_column_new_with_attributes (_("Servers"),
> renderer,
> + "text",
> SERVER_NAME_COLUMN,
> + NULL);
> + gtk_tree_view_append_column (GTK_TREE_VIEW (d->server_tree_view),
> column);
> +
> + /* Set the selection mode */
> + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW
> (d->server_tree_view));
> + gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
> +
> + /* Add callbacks */
> g_signal_connect (w, "button_press_event",
> - G_CALLBACK(server_clist_button_press_cb), d);
> - g_signal_connect (w, "select_row",
> - G_CALLBACK(list_selection_changed_cb), d);
> - g_signal_connect (w, "unselect_row",
> - G_CALLBACK(list_selection_changed_cb), d);
> + G_CALLBACK(server_tree_view_button_press_cb), d);
> + g_signal_connect (G_OBJECT (selection), "changed",
> + G_CALLBACK (server_tree_view_selection_changed_cb),
> + d);
>
>
> w = gtk_scrolled_window_new (NULL, NULL);
> gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(w),
> GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
> - gtk_container_add (GTK_CONTAINER(w), d->server_clist);
> + gtk_container_add (GTK_CONTAINER(w), d->server_tree_view);
> gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
> gtk_widget_set_usize (w, 300, 300);
>
> @@ -725,7 +740,7 @@
> g_signal_connect (w, "clicked", G_CALLBACK(remove_button_clicked_cb),
> d);
> d->remove_button = w;
>
> - clist_refresh (d);
> + server_tree_view_refresh (d);
> button_refresh (d);
> return d->dialog;
> }
- [Pan-devel] Server list patch, Jacob Ilsø Christensen, 2002/09/19
- Re: [Pan-devel] Server list patch,
Jacob Ilsø Christensen <=
- Re: [Pan-devel] Server list patch, Charles Kerr, 2002/09/20
- Re: [Pan-devel] Server list patch, Jacob Ilsø Christensen, 2002/09/21
- [Pan-devel] Read timeouts, James Hawtin, 2002/09/21
- [Pan-devel] Still have an fd leek, James Hawtin, 2002/09/21
- Re: [Pan-devel] Still have an fd leek, John Morris, 2002/09/21
- Re: [Pan-devel] Still have an fd leek, James Hawtin, 2002/09/21
- Re: [Pan-devel] Still have an fd leek, Charles Kerr, 2002/09/21
- Re: [Pan-devel] Still have an fd leek, Charles Kerr, 2002/09/21