[evince/wip/recent-view: 8/10] 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: 8/10] ev-toolbar: Implement toolbar with multiple modes
- Date: Thu, 24 Jul 2014 05:08:40 +0000 (UTC)
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]