Documentation updates
[hildon] / hildon / hildon-edit-toolbar.c
index daf38b3..7db0ecc 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is a part of hildon
  *
- * Copyright (C) 2008 Nokia Corporation, all rights reserved.
+ * Copyright (C) 2008, 2009 Nokia Corporation, all rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser Public License as published by
@@ -16,7 +16,7 @@
 
 /**
  * SECTION:hildon-edit-toolbar
- * @short_description: Widget representing a toolbar for editing.
+ * @short_description: Toolbar for edition of user data.
  *
  * The #HildonEditToolbar is a toolbar which contains a label and two
  * buttons, one of them being an arrow pointing backwards.
  * To add a #HildonEditToolbar to a window use
  * hildon_window_set_edit_toolbar().
  *
+ * This toolbar is meant to replace the window title bar by emulating
+ * its appearance, so you should put the window in full screen mode
+ * with gtk_window_fullscreen().
+ *
  * <example>
  * <title>HildonEditToolbar example</title>
  * <programlisting>
@@ -59,6 +63,8 @@
  */
 
 #include                                        "hildon-edit-toolbar.h"
+#include                                        "hildon-edit-toolbar-private.h"
+#include                                        "hildon-private.h"
 #include                                        "hildon-gtk.h"
 
 G_DEFINE_TYPE                                   (HildonEditToolbar, hildon_edit_toolbar, GTK_TYPE_HBOX);
@@ -66,6 +72,10 @@ G_DEFINE_TYPE                                   (HildonEditToolbar, hildon_edit_
 #define                                         TOOLBAR_LEFT_PADDING 24
 #define                                         TOOLBAR_RIGHT_PADDING 8
 
+#define                                         HILDON_EDIT_TOOLBAR_ANIMATION_FRAMERATE ((float)1000/150)
+#define                                         HILDON_EDIT_TOOLBAR_ANIMATION_TMPL "indicator_update%d"
+#define                                         HILDON_EDIT_TOOLBAR_ANIMATION_NFRAMES 8
+
 #define                                         HILDON_EDIT_TOOLBAR_GET_PRIVATE(obj) \
                                                 (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
                                                 HILDON_TYPE_EDIT_TOOLBAR, HildonEditToolbarPrivate));
@@ -74,7 +84,9 @@ typedef struct                                  _HildonEditToolbarPrivate Hildon
 
 struct                                          _HildonEditToolbarPrivate
 {
+    GtkBox *hbox;
     GtkLabel *label;
+    GtkWidget *animation;
     GtkButton *button;
     GtkButton *arrow;
 };
@@ -209,16 +221,20 @@ hildon_edit_toolbar_init                        (HildonEditToolbar *self)
     GtkWidget *separator;
     GtkAlignment *align;
     GtkBox *hbox = GTK_BOX (self);
-    GtkBox *hbox2;
 
-    hbox2 = GTK_BOX (gtk_hbox_new (FALSE, 0));
+    priv->hbox = GTK_BOX (gtk_hbox_new (FALSE, 0));
     align = GTK_ALIGNMENT (gtk_alignment_new (0, 0.5, 1, 1));
     priv->label = GTK_LABEL (gtk_label_new (NULL));
+    priv->animation = hildon_private_create_animation (
+        HILDON_EDIT_TOOLBAR_ANIMATION_FRAMERATE,
+        HILDON_EDIT_TOOLBAR_ANIMATION_TMPL,
+        HILDON_EDIT_TOOLBAR_ANIMATION_NFRAMES);
     priv->button = GTK_BUTTON (hildon_gtk_button_new (HILDON_SIZE_AUTO));
     separator = gtk_vseparator_new ();
     priv->arrow = GTK_BUTTON (gtk_button_new ());
 
-    gtk_button_set_focus_on_click (priv->arrow, FALSE);
+    g_object_set (priv->button, "can-focus", FALSE, NULL);
+    g_object_set (priv->arrow, "can-focus", FALSE, NULL);
 
     g_signal_connect (priv->button, "clicked", G_CALLBACK (button_clicked_cb), self);
     g_signal_connect (priv->arrow, "clicked", G_CALLBACK (arrow_clicked_cb), self);
@@ -229,15 +245,19 @@ hildon_edit_toolbar_init                        (HildonEditToolbar *self)
     gtk_widget_set_name (GTK_WIDGET (self), "toolbar-edit-mode");
     gtk_widget_set_name (GTK_WIDGET (priv->arrow), "hildon-edit-toolbar-arrow");
 
-    gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (hbox2));
-    gtk_box_pack_start (hbox2, GTK_WIDGET (priv->label), TRUE, TRUE, 0);
-    gtk_box_pack_start (hbox2, GTK_WIDGET (priv->button), FALSE, FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (priv->hbox));
+    gtk_box_pack_start (priv->hbox, GTK_WIDGET (priv->label), TRUE, TRUE, 0);
+    gtk_box_pack_start (priv->hbox, priv->animation, TRUE, TRUE, 10);
+    gtk_box_pack_start (priv->hbox, GTK_WIDGET (priv->button), FALSE, FALSE, 0);
+
+    gtk_widget_set_no_show_all (priv->animation, TRUE);
 
     gtk_box_pack_start (hbox, GTK_WIDGET (align), TRUE, TRUE, 0);
     gtk_box_pack_start (hbox, separator, FALSE, FALSE, 0);
     gtk_box_pack_start (hbox, GTK_WIDGET (priv->arrow), FALSE, FALSE, 0);
 
     gtk_misc_set_alignment (GTK_MISC (priv->label), 0, 0.5);
+    gtk_misc_set_alignment (GTK_MISC (priv->animation), 0, 0.5);
 
     gtk_widget_show_all (GTK_WIDGET (align));
     gtk_widget_show_all (separator);
@@ -322,3 +342,21 @@ hildon_edit_toolbar_new_with_text               (const gchar *label,
 
     return toolbar;
 }
+
+void G_GNUC_INTERNAL
+hildon_edit_toolbar_set_progress_indicator      (HildonEditToolbar *toolbar,
+                                                 gboolean           show)
+{
+    HildonEditToolbarPrivate *priv;
+    g_return_if_fail (HILDON_IS_EDIT_TOOLBAR (toolbar));
+    priv = HILDON_EDIT_TOOLBAR_GET_PRIVATE (toolbar);
+    if (show) {
+        gtk_widget_show (priv->animation);
+        gtk_box_set_child_packing (priv->hbox, GTK_WIDGET (priv->label),
+                                   FALSE, FALSE, 0, GTK_PACK_START);
+    } else {
+        gtk_box_set_child_packing (priv->hbox, GTK_WIDGET (priv->label),
+                                   TRUE, TRUE, 0, GTK_PACK_START);
+        gtk_widget_hide (priv->animation);
+    }
+}