[gnome-calendar] Reworked internal structure of GcalWindow.
- From: Erick PÃrez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] Reworked internal structure of GcalWindow.
- Date: Mon, 27 Aug 2012 19:53:03 +0000 (UTC)
commit 070d10bf4701a70c177dd610bee716032b620046
Author: Erick PÃrez Castellanos <erick red gmail com>
Date: Sat Aug 25 00:35:12 2012 -0400
Reworked internal structure of GcalWindow.
Removed unneeded widgets. Removed unneeded layouts managers.
Added constraints to handle actors sizing.
Renamed main_toolbar attribute to toolbar_actor
Added searchbar_actor. Initial approach.
src/gcal-window.c | 228 ++++++++++++++++++++++++++++++++---------------------
1 files changed, 139 insertions(+), 89 deletions(-)
---
diff --git a/src/gcal-window.c b/src/gcal-window.c
index 3e54c35..9e9663f 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -40,7 +40,9 @@
struct _GcalWindowPrivate
{
- ClutterActor *main_toolbar;
+ ClutterActor *toolbar_actor;
+ ClutterActor *searchbar_actor;
+
ClutterActor *contents_actor;
ClutterActor *notebook_actor;
ClutterActor *sources_actor;
@@ -86,6 +88,10 @@ static void gcal_window_get_property (GObject *o
GValue *value,
GParamSpec *pspec);
+static void gcal_window_stage_notify_cb (ClutterActor *actor,
+ GParamSpec *pspec,
+ gpointer user_data);
+
static GcalManager* gcal_window_get_manager (GcalWindow *window);
static void gcal_window_set_active_view (GcalWindow *window,
@@ -95,15 +101,15 @@ static void gcal_window_set_sources_view (GcalWindow *w
static void gcal_window_init_edit_dialog (GcalWindow *window);
-static void gcal_window_view_changed (GcalToolbar *main_toolbar,
+static void gcal_window_view_changed (GcalToolbar *toolbar_actor,
GcalWindowViewType view_type,
gpointer user_data);
-static void gcal_window_sources_shown (GcalToolbar *main_toolbar,
+static void gcal_window_sources_shown (GcalToolbar *toolbar_actor,
gboolean visible,
gpointer user_data);
-static void gcal_window_add_event (GcalToolbar *main_toolbar,
+static void gcal_window_add_event (GcalToolbar *toolbar_actor,
gpointer user_data);
static void gcal_window_back_last_view (GtkWidget *widget,
@@ -177,23 +183,25 @@ gcal_window_class_init(GcalWindowClass *klass)
object_class->set_property = gcal_window_set_property;
object_class->get_property = gcal_window_get_property;
- g_object_class_install_property (object_class,
- PROP_ACTIVE_VIEW,
- g_param_spec_enum ("active-view",
- "Active View",
- "The active view, eg: month, week, etc.",
- GCAL_WINDOW_VIEW_TYPE,
- GCAL_WINDOW_VIEW_MONTH,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class,
- PROP_ACTIVE_DATE,
- g_param_spec_boxed ("active-date",
- "Date",
- "The active/selected date",
- ICAL_TIME_TYPE,
- G_PARAM_CONSTRUCT |
- G_PARAM_READWRITE));
+ g_object_class_install_property (
+ object_class,
+ PROP_ACTIVE_VIEW,
+ g_param_spec_enum ("active-view",
+ "Active View",
+ "The active view, eg: month, week, etc.",
+ GCAL_WINDOW_VIEW_TYPE,
+ GCAL_WINDOW_VIEW_MONTH,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_ACTIVE_DATE,
+ g_param_spec_boxed ("active-date",
+ "Date",
+ "The active/selected date",
+ ICAL_TIME_TYPE,
+ G_PARAM_CONSTRUCT |
+ G_PARAM_READWRITE));
g_type_class_add_private((gpointer)klass, sizeof(GcalWindowPrivate));
}
@@ -220,12 +228,8 @@ gcal_window_constructed (GObject *object)
GtkWidget *embed;
ClutterActor *stage;
- ClutterActor *base;
- ClutterLayoutManager *base_layout_manager;
- ClutterActor *body_actor;
- ClutterLayoutManager *body_layout_manager;
- ClutterLayoutManager *contents_layout_manager;
GtkWidget *holder;
+ GtkWidget *entry;
GtkStyleContext *context;
@@ -244,57 +248,80 @@ gcal_window_constructed (GObject *object)
gtk_container_add (GTK_CONTAINER (object), embed);
stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (embed));
- /* base */
- base_layout_manager = clutter_box_layout_new ();
- clutter_box_layout_set_orientation (CLUTTER_BOX_LAYOUT (base_layout_manager),
- CLUTTER_ORIENTATION_VERTICAL);
- base = clutter_actor_new ();
- clutter_actor_set_layout_manager (base, base_layout_manager);
- clutter_actor_add_constraint (base,
- clutter_bind_constraint_new (stage,
- CLUTTER_BIND_SIZE,
- 0));
- clutter_actor_add_child (stage, base);
-
- /* body_actor */
- body_layout_manager = clutter_box_layout_new ();
- clutter_box_layout_set_orientation (CLUTTER_BOX_LAYOUT (body_layout_manager),
- CLUTTER_ORIENTATION_VERTICAL);
-
- body_actor = clutter_actor_new ();
- clutter_actor_set_layout_manager (body_actor, body_layout_manager);
- clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (base_layout_manager),
- body_actor,
- TRUE,
- TRUE,
- TRUE,
- CLUTTER_BOX_ALIGNMENT_CENTER,
- CLUTTER_BOX_ALIGNMENT_CENTER);
-
- /* main_toolbar */
- priv->main_toolbar = gcal_toolbar_new ();
- clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (body_layout_manager),
- priv->main_toolbar,
- FALSE,
- TRUE,
- FALSE,
- CLUTTER_BOX_ALIGNMENT_START,
- CLUTTER_BOX_ALIGNMENT_START);
-
- /* contents */
- contents_layout_manager =
- clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,
- CLUTTER_BIN_ALIGNMENT_CENTER);
+ /* toolbar_actor */
+ priv->toolbar_actor = gcal_toolbar_new ();
+ clutter_actor_add_child (stage, priv->toolbar_actor);
+ clutter_actor_set_position (priv->toolbar_actor, 0, 0);
+ clutter_actor_add_constraint_with_name (
+ priv->toolbar_actor,
+ "width-bind",
+ clutter_bind_constraint_new (stage,
+ CLUTTER_BIND_WIDTH,
+ 0.0));
+
+ /* searchbar_actor */
+ holder = gtk_grid_new ();
+ entry = gtk_search_entry_new ();
+ gtk_widget_set_hexpand (entry, TRUE);
+ gtk_widget_set_vexpand (entry, TRUE);
+ gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
+ gtk_widget_set_size_request (entry, 360, -1);
+ gtk_container_set_border_width (GTK_CONTAINER (holder), 12);
+ gtk_container_add (GTK_CONTAINER (holder), entry);
+ gtk_widget_show_all (holder);
+
+ priv->searchbar_actor = gtk_clutter_actor_new_with_contents (holder);
+ clutter_actor_add_child (stage, priv->searchbar_actor);
+ clutter_actor_set_x (priv->searchbar_actor, 0);
+ clutter_actor_add_constraint_with_name (
+ priv->searchbar_actor,
+ "width-bind",
+ clutter_bind_constraint_new (stage,
+ CLUTTER_BIND_WIDTH,
+ 0.0));
+ clutter_actor_add_constraint_with_name (
+ priv->searchbar_actor,
+ "height-bind",
+ clutter_bind_constraint_new (priv->toolbar_actor,
+ CLUTTER_BIND_HEIGHT,
+ 0.0));
+ clutter_actor_add_constraint_with_name (
+ priv->searchbar_actor,
+ "bottom-snap",
+ clutter_snap_constraint_new (priv->toolbar_actor,
+ CLUTTER_SNAP_EDGE_BOTTOM,
+ CLUTTER_SNAP_EDGE_TOP,
+ 0.0));
+ /* contents_actor */
priv->contents_actor = clutter_actor_new ();
- clutter_actor_set_layout_manager (priv->contents_actor,
- contents_layout_manager);
- clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (body_layout_manager),
- priv->contents_actor,
- TRUE,
- TRUE,
- TRUE,
- CLUTTER_BOX_ALIGNMENT_CENTER,
- CLUTTER_BOX_ALIGNMENT_CENTER);
+ clutter_actor_set_layout_manager (
+ priv->contents_actor,
+ clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,
+ CLUTTER_BIN_ALIGNMENT_CENTER));
+ clutter_actor_set_x (priv->contents_actor, 0);
+ clutter_actor_add_constraint_with_name (
+ priv->contents_actor,
+ "width-bind",
+ clutter_bind_constraint_new (stage,
+ CLUTTER_BIND_WIDTH,
+ 0.0));
+ clutter_actor_add_constraint_with_name (
+ priv->contents_actor,
+ "y-bind",
+ clutter_bind_constraint_new (
+ stage,
+ CLUTTER_BIND_Y,
+ 0.0));
+ clutter_actor_add_constraint_with_name (
+ priv->contents_actor,
+ "bottom-snap",
+ clutter_snap_constraint_new (stage,
+ CLUTTER_SNAP_EDGE_BOTTOM,
+ CLUTTER_SNAP_EDGE_BOTTOM,
+ 0.0));
+ clutter_actor_add_child (stage, priv->contents_actor);
+
/* notebook widget for holding views */
holder = gtk_frame_new (NULL);
@@ -385,20 +412,25 @@ gcal_window_constructed (GObject *object)
clutter_actor_hide (priv->new_event_actor);
/* signals connection/handling */
- g_signal_connect (priv->main_toolbar,
+ g_signal_connect (stage,
+ "notify::allocation",
+ G_CALLBACK (gcal_window_stage_notify_cb),
+ object);
+
+ g_signal_connect (priv->toolbar_actor,
"view-changed",
G_CALLBACK (gcal_window_view_changed),
object);
- g_signal_connect (priv->main_toolbar,
+ g_signal_connect (priv->toolbar_actor,
"sources-shown",
G_CALLBACK (gcal_window_sources_shown),
object);
- g_signal_connect (priv->main_toolbar,
+ g_signal_connect (priv->toolbar_actor,
"add-event",
G_CALLBACK (gcal_window_add_event),
object);
- g_signal_connect (priv->main_toolbar,
+ g_signal_connect (priv->toolbar_actor,
"back",
G_CALLBACK (gcal_window_back_last_view),
object);
@@ -478,6 +510,24 @@ gcal_window_get_property (GObject *object,
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
+static void
+gcal_window_stage_notify_cb (ClutterActor *actor,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GcalWindowPrivate *priv;
+ ClutterConstraint *constraint;
+
+ priv = GCAL_WINDOW (user_data)->priv;
+
+ /* Updating constraints */
+ constraint = clutter_actor_get_constraint (priv->contents_actor,
+ "y-bind");
+ clutter_bind_constraint_set_offset (
+ CLUTTER_BIND_CONSTRAINT (constraint),
+ clutter_actor_get_height (priv->toolbar_actor));
+}
+
static GcalManager*
gcal_window_get_manager (GcalWindow *window)
{
@@ -658,9 +708,9 @@ gcal_window_init_edit_dialog (GcalWindow *window)
}
static void
-gcal_window_view_changed (GcalToolbar *main_toolbar,
- GcalWindowViewType view_type,
- gpointer user_data)
+gcal_window_view_changed (GcalToolbar *toolbar_actor,
+ GcalWindowViewType view_type,
+ gpointer user_data)
{
GcalWindowPrivate *priv;
@@ -671,9 +721,9 @@ gcal_window_view_changed (GcalToolbar *main_toolbar,
}
static void
-gcal_window_sources_shown (GcalToolbar *main_toolbar,
- gboolean visible,
- gpointer user_data)
+gcal_window_sources_shown (GcalToolbar *toolbar_actor,
+ gboolean visible,
+ gpointer user_data)
{
GcalWindowPrivate *priv;
priv = GCAL_WINDOW (user_data)->priv;
@@ -699,7 +749,7 @@ gcal_window_sources_shown (GcalToolbar *main_toolbar,
}
static void
-gcal_window_add_event (GcalToolbar *main_toolbar,
+gcal_window_add_event (GcalToolbar *toolbar_actor,
gpointer user_data)
{
GcalWindowPrivate *priv;
@@ -725,7 +775,7 @@ gcal_window_back_last_view (GtkWidget *widget,
priv = GCAL_WINDOW (user_data)->priv;
- gcal_toolbar_set_mode (GCAL_TOOLBAR (priv->main_toolbar),
+ gcal_toolbar_set_mode (GCAL_TOOLBAR (priv->toolbar_actor),
GCAL_TOOLBAR_OVERVIEW);
if ((activated_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook),
@@ -1230,7 +1280,7 @@ gcal_window_new_with_view (GcalApplication *app,
G_CALLBACK (gcal_window_event_created),
win);
- gcal_toolbar_set_active_view (GCAL_TOOLBAR (win->priv->main_toolbar),
+ gcal_toolbar_set_active_view (GCAL_TOOLBAR (win->priv->toolbar_actor),
view_type);
return GTK_WIDGET (win);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]