[evince/wip/recent-view: 8/10] ev-toolbar: Implement toolbar with multiple modes



commit 1ea15fd0cf828b1e5d4fd9a5b1b995dcfd6e2088
Author: Germán Poo-Caamaño <gpoo gnome org>
Date:   Tue Jul 1 13:01:16 2014 -0700

    ev-toolbar: Implement toolbar with multiple modes
    
    Given the restrictions of GtkHeaderBar for reparenting, we must
    implement multiple modes for the toolbar, which can be customized
    for Recent View, Full Screen, Preview and Document (normal).
    
    For now, Full Screen, Preview and Document are the same.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=633501

 shell/ev-toolbar.c |   85 +++++++++++++++++++++++++++++++++++++++++++++++-----
 shell/ev-toolbar.h |   18 ++++++++---
 2 files changed, 90 insertions(+), 13 deletions(-)
---
diff --git a/shell/ev-toolbar.c b/shell/ev-toolbar.c
index 6bb98e9..566cdb8 100644
--- a/shell/ev-toolbar.c
+++ b/shell/ev-toolbar.c
@@ -1,7 +1,8 @@
 /* ev-toolbar.h
  *  this file is part of evince, a gnome document viewer
  *
- * Copyright (C) 2012 Carlos Garcia Campos <carlosgc gnome org>
+ * Copyright (C) 2012-2014 Carlos Garcia Campos <carlosgc gnome org>
+ * Copyright (C) 2014 Germán Poo-Caamaño <gpoo gnome org>
  *
  * Evince is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by
@@ -48,7 +49,13 @@ struct _EvToolbarPrivate {
         GtkWidget *history_action;
         GtkWidget *zoom_action;
         GtkWidget *page_selector;
+        GtkWidget *navigation_action;
+        GtkWidget *find_button;
+        GtkWidget *recent_view_button;
+        GtkWidget *open_button;
         GMenu *bookmarks_section;
+
+        EvToolbarMode toolbar_mode;
 };
 
 G_DEFINE_TYPE (EvToolbar, ev_toolbar, GTK_TYPE_HEADER_BAR)
@@ -211,8 +218,30 @@ ev_toolbar_constructed (GObject *object)
 
         builder = gtk_builder_new_from_resource ("/org/gnome/evince/shell/ui/menus.ui");
 
+        /* View of recent items */
+        button = ev_toolbar_create_toggle_button (ev_toolbar, "win.recent-view",
+                                                  "view-grid-symbolic",
+                                                  _("Toggle between view of recent items and open 
document"));
+        ev_toolbar->priv->recent_view_button = button;
+        if (rtl)
+                gtk_widget_set_margin_left (button, 6);
+        else
+                gtk_widget_set_margin_right (button, 6);
+        gtk_container_add (GTK_CONTAINER (ev_toolbar), button);
+
+        button = ev_toolbar_create_button (ev_toolbar, "win.open",
+                                           "document-open-symbolic",
+                                           _("Open an existenting document"));
+        ev_toolbar->priv->open_button = button;
+        gtk_container_add (GTK_CONTAINER (ev_toolbar), button);
+        if (rtl)
+                gtk_widget_set_margin_left (button, 6);
+        else
+                gtk_widget_set_margin_right (button, 6);
+
         /* Navigation */
         hbox = ev_toolbar_create_button_group (ev_toolbar);
+        ev_toolbar->priv->navigation_action = hbox;
 
         button = ev_toolbar_create_button (ev_toolbar, "win.go-previous-page",
                                            "go-up-symbolic", _("Previous Page"));
@@ -228,7 +257,6 @@ ev_toolbar_constructed (GObject *object)
         else
                 gtk_widget_set_margin_right (hbox, 6);
         gtk_header_bar_pack_start (GTK_HEADER_BAR (ev_toolbar), hbox);
-        gtk_widget_show (hbox);
 
         /* Page selector */
         /* Use EvPageActionWidget for now, since the page selector action is also used by the previewer */
@@ -241,7 +269,6 @@ ev_toolbar_constructed (GObject *object)
         else
                 gtk_widget_set_margin_right (tool_item, 6);
         gtk_header_bar_pack_start (GTK_HEADER_BAR (ev_toolbar), tool_item);
-        gtk_widget_show (tool_item);
 
         /* History */
         hbox = ev_history_action_new (ev_window_get_history (ev_toolbar->priv->window));
@@ -251,17 +278,16 @@ ev_toolbar_constructed (GObject *object)
         else
                 gtk_widget_set_margin_right (hbox, 6);
         gtk_header_bar_pack_start (GTK_HEADER_BAR (ev_toolbar), hbox);
-        gtk_widget_show (hbox);
 
         /* Find */
         button = ev_toolbar_create_toggle_button (ev_toolbar, "win.toggle-find", "edit-find-symbolic",
                                                   _("Find a word or phrase in the document"));
+        ev_toolbar->priv->find_button = button;
         if (rtl)
                 gtk_widget_set_margin_left (button, 6);
         else
                 gtk_widget_set_margin_right (button, 6);
         gtk_header_bar_pack_start (GTK_HEADER_BAR (ev_toolbar), button);
-        gtk_widget_show (button);
 
         /* Action Menu */
         menu = G_MENU_MODEL (gtk_builder_get_object (builder, "action-menu"));
@@ -270,7 +296,6 @@ ev_toolbar_constructed (GObject *object)
         gtk_widget_set_tooltip_text (button, _("File options"));
         ev_toolbar->priv->action_menu_button = button;
         gtk_header_bar_pack_end (GTK_HEADER_BAR (ev_toolbar), button);
-        gtk_widget_show (button);
 
         /* View Menu */
         menu = G_MENU_MODEL (gtk_builder_get_object (builder, "view-menu"));
@@ -279,7 +304,6 @@ ev_toolbar_constructed (GObject *object)
         gtk_widget_set_tooltip_text (button, _("View options"));
         ev_toolbar->priv->view_menu_button = button;
         gtk_header_bar_pack_end (GTK_HEADER_BAR (ev_toolbar), button);
-        gtk_widget_show (button);
 
         /* Zoom selector */
         vbox = ev_zoom_action_new (ev_window_get_document_model (ev_toolbar->priv->window),
@@ -293,7 +317,6 @@ ev_toolbar_constructed (GObject *object)
         else
                 gtk_widget_set_margin_right (vbox, 6);
         gtk_header_bar_pack_end (GTK_HEADER_BAR (ev_toolbar), vbox);
-        gtk_widget_show (vbox);
 
         recent_menu_model = ev_recent_menu_model_new (gtk_recent_manager_get_default (),
                                                       "win.open-recent",
@@ -338,6 +361,7 @@ static void
 ev_toolbar_init (EvToolbar *ev_toolbar)
 {
         ev_toolbar->priv = G_TYPE_INSTANCE_GET_PRIVATE (ev_toolbar, EV_TYPE_TOOLBAR, EvToolbarPrivate);
+        ev_toolbar->priv->toolbar_mode = EV_TOOLBAR_MODE_NORMAL;
 }
 
 GtkWidget *
@@ -393,3 +417,48 @@ ev_toolbar_get_page_selector (EvToolbar *ev_toolbar)
 
         return ev_toolbar->priv->page_selector;
 }
+
+void
+ev_toolbar_set_mode (EvToolbar     *ev_toolbar,
+                     EvToolbarMode  mode)
+{
+        EvToolbarPrivate *priv;
+
+        g_return_if_fail (EV_IS_TOOLBAR (ev_toolbar));
+
+        priv = ev_toolbar->priv;
+        priv->toolbar_mode = mode;
+
+        switch (mode) {
+        case EV_TOOLBAR_MODE_NORMAL:
+                gtk_widget_show (priv->view_menu_button);
+                gtk_widget_show (priv->action_menu_button);
+                gtk_widget_show (priv->history_action);
+                gtk_widget_show (priv->zoom_action);
+                gtk_widget_show (priv->page_selector);
+                gtk_widget_show (priv->navigation_action);
+                gtk_widget_show (priv->find_button);
+                gtk_widget_show (priv->recent_view_button);
+                gtk_widget_hide (priv->open_button);
+                break;
+        case EV_TOOLBAR_MODE_RECENT_VIEW:
+                gtk_widget_hide (priv->view_menu_button);
+                gtk_widget_hide (priv->action_menu_button);
+                gtk_widget_hide (priv->history_action);
+                gtk_widget_hide (priv->zoom_action);
+                gtk_widget_hide (priv->page_selector);
+                gtk_widget_hide (priv->navigation_action);
+                gtk_widget_hide (priv->find_button);
+                gtk_widget_show (priv->recent_view_button);
+                gtk_widget_show (priv->open_button);
+                break;
+        }
+}
+       
+EvToolbarMode
+ev_toolbar_get_mode (EvToolbar *ev_toolbar)
+{
+        g_return_val_if_fail (EV_IS_TOOLBAR (ev_toolbar), EV_TOOLBAR_MODE_NORMAL);
+
+        return ev_toolbar->priv->toolbar_mode;
+}
diff --git a/shell/ev-toolbar.h b/shell/ev-toolbar.h
index 8eba914..e0f1fc0 100644
--- a/shell/ev-toolbar.h
+++ b/shell/ev-toolbar.h
@@ -26,6 +26,11 @@
 
 G_BEGIN_DECLS
 
+typedef enum {
+       EV_TOOLBAR_MODE_NORMAL,
+       EV_TOOLBAR_MODE_RECENT_VIEW,
+} EvToolbarMode;
+
 #define EV_TYPE_TOOLBAR              (ev_toolbar_get_type())
 #define EV_TOOLBAR(object)           (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_TOOLBAR, EvToolbar))
 #define EV_IS_TOOLBAR(object)        (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_TOOLBAR))
@@ -47,11 +52,14 @@ struct _EvToolbarClass {
         GtkHeaderBarClass base_class;
 };
 
-GType      ev_toolbar_get_type           (void);
-GtkWidget *ev_toolbar_new                (EvWindow *window);
-gboolean   ev_toolbar_has_visible_popups (EvToolbar *ev_toolbar);
-void       ev_toolbar_action_menu_popup  (EvToolbar *ev_toolbar);
-GtkWidget *ev_toolbar_get_page_selector  (EvToolbar *ev_toolbar);
+GType         ev_toolbar_get_type           (void);
+GtkWidget    *ev_toolbar_new                (EvWindow *window);
+gboolean      ev_toolbar_has_visible_popups (EvToolbar *ev_toolbar);
+void          ev_toolbar_action_menu_popup  (EvToolbar *ev_toolbar);
+GtkWidget    *ev_toolbar_get_page_selector  (EvToolbar *ev_toolbar);
+void          ev_toolbar_set_mode           (EvToolbar     *ev_toolbar,
+                                            EvToolbarMode  mode);
+EvToolbarMode ev_toolbar_get_mode           (EvToolbar     *ev_toolbar);
 
 G_END_DECLS
 


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