[gnome-disk-utility] start working on a details view for the grid playground
- From: David Zeuthen <davidz src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnome-disk-utility] start working on a details view for the grid playground
- Date: Tue, 31 Mar 2009 16:06:51 -0400 (EDT)
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]