[gnome-disk-utility: 2/4] grid: misc changes



commit 01b800c41e0684d50ac60b3a54766f1e2cb4814c
Author: David Zeuthen <davidz redhat com>
Date:   Sat Apr 11 17:15:39 2009 -0400

    grid: misc changes
---
 src/playground/grid/gdu-grid-details.c |  100 ++++++++++++++++++++++++++++----
 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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]