[evince/wip/recent-view: 11/13] ev-toolbar: Implement toolbar with multiple modes
- From: Germán Poó Caamaño <gpoo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince/wip/recent-view: 11/13] ev-toolbar: Implement toolbar with multiple modes
- Date: Mon, 21 Jul 2014 21:50:27 +0000 (UTC)
commit af6d9e44e595ece91589453841e9dcfc52dc13dc
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 | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++-
shell/ev-toolbar.h | 21 +++++++++---
2 files changed, 103 insertions(+), 6 deletions(-)
---
diff --git a/shell/ev-toolbar.c b/shell/ev-toolbar.c
index 6bb98e9..4a8c2eb 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,33 @@ 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);
+ gtk_widget_show (button);
+
+ /* Don't show the open button by detault, only when activated,
+ only when requested explicitly according to the toolbar mode */
+ 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"));
@@ -256,6 +288,7 @@ ev_toolbar_constructed (GObject *object)
/* 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
@@ -310,6 +343,7 @@ ev_toolbar_constructed (GObject *object)
ev_toolbar);
ev_toolbar_setup_bookmarks_menu (ev_toolbar, bookmarks_submenu_model);
+ ev_toolbar->priv->toolbar_mode = EV_TOOLBAR_MODE_NORMAL;
g_object_unref (builder);
}
@@ -393,3 +427,55 @@ 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;
+
+ if (mode == priv->toolbar_mode)
+ return;
+
+ priv->toolbar_mode = mode;
+
+ switch (mode) {
+ case EV_TOOLBAR_MODE_NORMAL:
+ case EV_TOOLBAR_MODE_FULL_SCREEN:
+ case EV_TOOLBAR_MODE_PRESENTATION:
+ case EV_TOOLBAR_MODE_PREVIEW:
+ 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..e9060fd 100644
--- a/shell/ev-toolbar.h
+++ b/shell/ev-toolbar.h
@@ -26,6 +26,14 @@
G_BEGIN_DECLS
+typedef enum {
+ EV_TOOLBAR_MODE_NORMAL,
+ EV_TOOLBAR_MODE_FULL_SCREEN,
+ EV_TOOLBAR_MODE_PRESENTATION,
+ EV_TOOLBAR_MODE_PREVIEW,
+ 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 +55,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]