diff options
author | David Zeuthen <davidz@redhat.com> | 2009-04-11 17:15:39 -0400 |
---|---|---|
committer | David Zeuthen <davidz@redhat.com> | 2009-04-11 17:15:39 -0400 |
commit | 01b800c41e0684d50ac60b3a54766f1e2cb4814c (patch) | |
tree | 7b541d058854c3fff34133ab106d249aa8231fe5 | |
parent | 94f27580d508812b533bc85170d48e3c33a8625c (diff) | |
download | gnome-disk-utility-01b800c41e0684d50ac60b3a54766f1e2cb4814c.tar.gz gnome-disk-utility-01b800c41e0684d50ac60b3a54766f1e2cb4814c.tar.xz gnome-disk-utility-01b800c41e0684d50ac60b3a54766f1e2cb4814c.zip |
grid: misc changes
-rw-r--r-- | src/playground/grid/gdu-grid-details.c | 100 | ||||
-rw-r--r-- | src/playground/grid/grid.c | 2 |
2 files changed, 88 insertions, 14 deletions
diff --git a/src/playground/grid/gdu-grid-details.c b/src/playground/grid/gdu-grid-details.c index 390a91c..d8a9797 100644 --- a/src/playground/grid/gdu-grid-details.c +++ b/src/playground/grid/gdu-grid-details.c @@ -5,11 +5,14 @@ #include "gdu-grid-view.h" #include "gdu-grid-details.h" +#define NUM_ROWS 6 + struct GduGridDetailsPrivate { GduGridView *view; - GtkWidget *notebook; + GtkWidget *table_key_label[NUM_ROWS]; + GtkWidget *table_value_label[NUM_ROWS]; }; enum @@ -20,11 +23,14 @@ enum G_DEFINE_TYPE (GduGridDetails, gdu_grid_details, GTK_TYPE_VBOX) +static void on_selection_changed (GduGridView *view, gpointer user_data); + static void gdu_grid_details_finalize (GObject *object) { GduGridDetails *details = GDU_GRID_DETAILS (object); + g_signal_handlers_disconnect_by_func (details->priv->view, on_selection_changed, details); g_object_unref (details->priv->view); if (G_OBJECT_CLASS (gdu_grid_details_parent_class)->finalize != NULL) @@ -71,21 +77,40 @@ static void gdu_grid_details_constructed (GObject *object) { GduGridDetails *details = GDU_GRID_DETAILS (object); - GtkWidget *notebook; - GtkWidget *no_media_page; + GtkWidget *hbox; + GtkWidget *table; GtkWidget *label; + guint row; + + hbox = gtk_hbox_new (TRUE, 12); + + table = gtk_table_new (NUM_ROWS, 2, TRUE); + gtk_table_set_col_spacings (GTK_TABLE (table), 12); + gtk_box_pack_start (GTK_BOX (hbox), table, TRUE, TRUE, 0); + + for (row = 0; row < NUM_ROWS; row++) { + label = gtk_label_new (NULL); + gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); + gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, + GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 2, 2); + details->priv->table_key_label[row] = label; + + label = gtk_label_new (NULL); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row + 1, + GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 2, 2); + details->priv->table_value_label[row] = label; + } - no_media_page = gtk_alignment_new (0.5, 0.5, 0, 0); - label = gtk_label_new (_("No media detected")); - gtk_container_add (GTK_CONTAINER (no_media_page), label); + label = gtk_label_new (_("Operations should go here")); + gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); - notebook = gtk_notebook_new (); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), - no_media_page, - NULL); - details->priv->notebook = notebook; + gtk_container_add (GTK_CONTAINER (details), hbox); - gtk_container_add (GTK_CONTAINER (details), notebook); + g_signal_connect (details->priv->view, + "selection-changed", + G_CALLBACK (on_selection_changed), + details); if (G_OBJECT_CLASS (gdu_grid_details_parent_class)->constructed != NULL) G_OBJECT_CLASS (gdu_grid_details_parent_class)->constructed (object); @@ -127,3 +152,54 @@ gdu_grid_details_new (GduGridView *view) "view", view, NULL)); } + +static void +set_kv (GduGridDetails *details, + guint row, + const gchar *key, + const gchar *value) +{ + gchar *s; + + g_return_if_fail (row < NUM_ROWS); + + s = g_strdup_printf ("<b>%s</b>", key); + gtk_label_set_markup (GTK_LABEL (details->priv->table_key_label[row]), s); + g_free (s); + + gtk_label_set_markup (GTK_LABEL (details->priv->table_value_label[row]), value); +} + +static void +on_selection_changed (GduGridView *view, + gpointer user_data) +{ + GduGridDetails *details = GDU_GRID_DETAILS (user_data); + GList *selection; + guint n; + + for (n = 0; n < NUM_ROWS; n++) { + gtk_label_set_text (GTK_LABEL (details->priv->table_key_label[n]), ""); + gtk_label_set_text (GTK_LABEL (details->priv->table_value_label[n]), ""); + } + + selection = gdu_grid_view_selection_get (view); + + g_debug ("selection has %d items", g_list_length (selection)); + if (g_list_length (selection) == 1) { + GduPresentable *p = GDU_PRESENTABLE (selection->data); + GduDevice *d; + + d = gdu_presentable_get_device (p); + + if (GDU_IS_VOLUME (p) && d != NULL) { + set_kv (details, 0, _("Device:"), gdu_device_get_device_file (d)); + } + + if (d != NULL) + g_object_unref (d); + } + + g_list_foreach (selection, (GFunc) g_object_unref, NULL); + g_list_free (selection); +} diff --git a/src/playground/grid/grid.c b/src/playground/grid/grid.c index 853c48e..8358fe6 100644 --- a/src/playground/grid/grid.c +++ b/src/playground/grid/grid.c @@ -37,14 +37,12 @@ main (int argc, char *argv[]) TRUE, 0); -#if 0 details = gdu_grid_details_new (GDU_GRID_VIEW (view)); gtk_box_pack_start (GTK_BOX (vbox), details, TRUE, TRUE, 0); -#endif gtk_window_set_default_size (GTK_WINDOW (window), 600, 400); gtk_widget_show_all (window); |