[gnome-disk-utility] start working on a details view for the grid playground



commit e2f7ad927a17011a9bda9f8ee955d28137baac7a
Author: David Zeuthen <davidz redhat com>
Date:   Tue Mar 31 16:04:25 2009 -0400

    start working on a details view for the grid playground
---
 src/playground/grid/Makefile.am        |    1 +
 src/playground/grid/gdu-grid-element.c |    1 -
 src/playground/grid/gdu-grid-hbox.c    |    2 +-
 src/playground/grid/gdu-grid-types.h   |    1 +
 src/playground/grid/gdu-grid-view.c    |   37 ++++++++++++++++++++++++++++++++
 src/playground/grid/gdu-grid-view.h    |    4 +++
 src/playground/grid/grid.c             |   22 +++++++-----------
 7 files changed, 53 insertions(+), 15 deletions(-)

diff --git a/src/playground/grid/Makefile.am b/src/playground/grid/Makefile.am
index a07e341..123e550 100644
--- a/src/playground/grid/Makefile.am
+++ b/src/playground/grid/Makefile.am
@@ -9,6 +9,7 @@ grid_SOURCES = 										\
 	gdu-grid-element.h			gdu-grid-element.c			\
 	gdu-grid-hbox.h				gdu-grid-hbox.c				\
 	gdu-grid-view.h				gdu-grid-view.c				\
+	gdu-grid-details.h			gdu-grid-details.c			\
 	$(NULL)
 
 grid_CPPFLAGS = 					\
diff --git a/src/playground/grid/gdu-grid-element.c b/src/playground/grid/gdu-grid-element.c
index 5f8b506..3878025 100644
--- a/src/playground/grid/gdu-grid-element.c
+++ b/src/playground/grid/gdu-grid-element.c
@@ -6,7 +6,6 @@
 #include <gdk/gdkx.h>
 #include <X11/XKBlib.h>
 
-#define GDU_GTK_API_IS_SUBJECT_TO_CHANGE
 #include <gdu-gtk/gdu-gtk.h>
 
 #include "gdu-grid-view.h"
diff --git a/src/playground/grid/gdu-grid-hbox.c b/src/playground/grid/gdu-grid-hbox.c
index 38890c4..587561d 100644
--- a/src/playground/grid/gdu-grid-hbox.c
+++ b/src/playground/grid/gdu-grid-hbox.c
@@ -85,7 +85,7 @@ gdu_grid_hbox_size_allocate (GtkWidget      *widget,
          * then assign extra space based on the percentage
          */
         desired_width = get_desired_width (GDU_GRID_HBOX (widget));
-        if (desired_width < allocation->width)
+        if (desired_width < (guint) allocation->width)
                 extra_space = allocation->width - desired_width;
         else
                 extra_space = 0;
diff --git a/src/playground/grid/gdu-grid-types.h b/src/playground/grid/gdu-grid-types.h
index 14d969d..0dd79fc 100644
--- a/src/playground/grid/gdu-grid-types.h
+++ b/src/playground/grid/gdu-grid-types.h
@@ -11,6 +11,7 @@ G_BEGIN_DECLS
 typedef struct GduGridView        GduGridView;
 typedef struct GduGridHBox        GduGridHBox;
 typedef struct GduGridElement     GduGridElement;
+typedef struct GduGridDetails     GduGridDetails;
 
 G_END_DECLS
 
diff --git a/src/playground/grid/gdu-grid-view.c b/src/playground/grid/gdu-grid-view.c
index 936e2ad..7a1d967 100644
--- a/src/playground/grid/gdu-grid-view.c
+++ b/src/playground/grid/gdu-grid-view.c
@@ -21,6 +21,14 @@ enum
         PROP_POOL,
 };
 
+enum
+{
+        SELECTION_CHANGED_SIGNAL,
+        LAST_SIGNAL,
+};
+
+static guint signals[LAST_SIGNAL] = {0};
+
 static void on_presentable_added   (GduPool        *pool,
                                     GduPresentable *presentable,
                                     GduGridView    *view);
@@ -291,6 +299,26 @@ gdu_grid_view_class_init (GduGridViewClass *klass)
         object_class->constructed  = gdu_grid_view_constructed;
         object_class->finalize     = gdu_grid_view_finalize;
 
+        /**
+         * GduGridView::selection-changed:
+         * @view: The view emitting the signal.
+         *
+         * Emitted when the selection in @view chanes.
+         **/
+        signals[SELECTION_CHANGED_SIGNAL] = g_signal_new ("selection-changed",
+                                                          GDU_TYPE_GRID_VIEW,
+                                                          G_SIGNAL_RUN_LAST,
+                                                          G_STRUCT_OFFSET (GduGridViewClass, selection_changed),
+                                                          NULL,
+                                                          NULL,
+                                                          g_cclosure_marshal_VOID__VOID,
+                                                          G_TYPE_NONE,
+                                                          0);
+        /**
+         * GduGridView:pool:
+         *
+         * The pool of devices to show.
+         */
         g_object_class_install_property (object_class,
                                          PROP_POOL,
                                          g_param_spec_object ("pool",
@@ -395,6 +423,7 @@ gdu_grid_view_selection_add (GduGridView    *view,
         if (e != NULL) {
                 gtk_widget_queue_draw (GTK_WIDGET (e));
         }
+        g_signal_emit (view, signals[SELECTION_CHANGED_SIGNAL], 0);
 }
 
 void
@@ -411,6 +440,7 @@ gdu_grid_view_selection_remove (GduGridView    *view,
                         }
                         view->priv->selected = g_list_remove (view->priv->selected, presentable);
                         g_object_unref (presentable);
+                        g_signal_emit (view, signals[SELECTION_CHANGED_SIGNAL], 0);
                         break;
                 }
         }
@@ -439,6 +469,8 @@ void
 gdu_grid_view_selection_clear (GduGridView *view)
 {
         GList *l;
+        gboolean changed;
+
         for (l = view->priv->selected; l != NULL; l = l->next) {
                 GduGridElement *e;
                 e = get_element_for_presentable (view, l->data);
@@ -447,9 +479,14 @@ gdu_grid_view_selection_clear (GduGridView *view)
                 }
         }
 
+        changed = (view->priv->selected != NULL);
+
         g_list_foreach (view->priv->selected, (GFunc) g_object_unref, NULL);
         g_list_free (view->priv->selected);
         view->priv->selected = NULL;
+
+        if (changed)
+                g_signal_emit (view, signals[SELECTION_CHANGED_SIGNAL], 0);
 }
 
 /* ---------------------------------------------------------------------------------------------------- */
diff --git a/src/playground/grid/gdu-grid-view.h b/src/playground/grid/gdu-grid-view.h
index 9e00e54..5a6f4dc 100644
--- a/src/playground/grid/gdu-grid-view.h
+++ b/src/playground/grid/gdu-grid-view.h
@@ -28,6 +28,10 @@ struct GduGridView
 struct GduGridViewClass
 {
         GtkVBoxClass parent_class;
+
+        /*< public >*/
+        /* signals */
+        void (*selection_changed) (GduGridView *view);
 };
 
 GType           gdu_grid_view_get_type         (void) G_GNUC_CONST;
diff --git a/src/playground/grid/grid.c b/src/playground/grid/grid.c
index 7a86120..8358fe6 100644
--- a/src/playground/grid/grid.c
+++ b/src/playground/grid/grid.c
@@ -4,6 +4,7 @@
 #include <gdu/gdu.h>
 
 #include "gdu-grid-view.h"
+#include "gdu-grid-details.h"
 
 int
 main (int argc, char *argv[])
@@ -12,7 +13,8 @@ main (int argc, char *argv[])
         GtkWidget *window;
         GtkWidget *vbox;
         GtkWidget *scrolled_window;
-        GtkWidget *grid_view;
+        GtkWidget *view;
+        GtkWidget *details;
 
         gtk_init (&argc, &argv);
 
@@ -23,29 +25,23 @@ main (int argc, char *argv[])
         vbox = gtk_vbox_new (FALSE, 0);
         gtk_container_add (GTK_CONTAINER (window), vbox);
 
-        grid_view = gdu_grid_view_new (pool);
-
+        view = gdu_grid_view_new (pool);
         scrolled_window = gtk_scrolled_window_new (NULL, NULL);
         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
                                         GTK_POLICY_NEVER,
                                         GTK_POLICY_AUTOMATIC);
-        gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), grid_view);
+        gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), view);
         gtk_box_pack_start (GTK_BOX (vbox),
                             scrolled_window,
                             TRUE,
                             TRUE,
                             0);
 
-        /* add a dummy button box for now.. just to test focus */
-        GtkWidget *button_box;
-        button_box = gtk_hbutton_box_new ();
-        gtk_container_add (GTK_CONTAINER (button_box), gtk_button_new_from_stock (GTK_STOCK_OK));
-        gtk_container_add (GTK_CONTAINER (button_box), gtk_button_new_from_stock (GTK_STOCK_APPLY));
-        gtk_container_add (GTK_CONTAINER (button_box), gtk_button_new_from_stock (GTK_STOCK_CANCEL));
+        details = gdu_grid_details_new (GDU_GRID_VIEW (view));
         gtk_box_pack_start (GTK_BOX (vbox),
-                            button_box,
-                            FALSE,
-                            FALSE,
+                            details,
+                            TRUE,
+                            TRUE,
                             0);
 
         gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);



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