#endif
#include "ev-window.h"
-#include "ev-navigation-action.h"
#include "ev-page-action.h"
#include "ev-sidebar.h"
#include "ev-sidebar-links.h"
#include "ev-sidebar-thumbnails.h"
#include "ev-view.h"
+#include "ev-page-view.h"
#include "ev-password.h"
#include "ev-password-view.h"
#include "ev-print-job.h"
GtkWidget *find_bar;
GtkWidget *scrolled_window;
GtkWidget *view;
+ GtkWidget *page_view;
GtkWidget *password_view;
GtkActionGroup *action_group;
GtkUIManager *ui_manager;
EvDocument *document;
+ EvWindowPageMode page_mode;
/* These members are used temporarily when in PAGE_MODE_PASSWORD */
EvDocument *password_document;
GtkWidget *password_dialog;
(G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_WINDOW, EvWindowPrivate))
-#define NAVIGATION_BACK_ACTION "NavigationBack"
-#define NAVIGATION_FORWARD_ACTION "NavigationForward"
#define PAGE_SELECTOR_ACTION "PageSelector"
update_action_sensitivity (EvWindow *ev_window)
{
EvDocument *document;
+ EvWindowPageMode page_mode;
EvView *view;
- gboolean can_go_back = FALSE;
- gboolean can_go_forward = FALSE;
-
document = ev_window->priv->document;
+ page_mode = ev_window->priv->page_mode;
view = EV_VIEW (ev_window->priv->view);
- if (document) {
- can_go_back = ev_view_can_go_back (view);
- can_go_forward = ev_view_can_go_forward (view);
- }
-
/* File menu */
/* "FileOpen": always sensitive */
set_action_sensitive (ev_window, "FileSaveAs", document!=NULL);
set_action_sensitive (ev_window, "ViewPageWidth", document!=NULL);
/* Go menu */
- set_action_sensitive (ev_window, "GoBack", can_go_back);
- set_action_sensitive (ev_window, "GoForward", can_go_forward);
if (document) {
int n_pages;
int page;
set_action_sensitive (ev_window, "GoFirstPage", page > 1);
set_action_sensitive (ev_window, "GoLastPage", page < n_pages);
} else {
- set_action_sensitive (ev_window, "GoFirstPage", FALSE);
+ set_action_sensitive (ev_window, "GoFirstPage", FALSE);
set_action_sensitive (ev_window, "GoPageUp", FALSE);
set_action_sensitive (ev_window, "GoPageDown", FALSE);
set_action_sensitive (ev_window, "GoLastPage", FALSE);
}
+ /* Page View radio group */
+ if (document) {
+ set_action_sensitive (ev_window, "SinglePage", page_mode != PAGE_MODE_PASSWORD);
+ set_action_sensitive (ev_window, "ContinuousPage", page_mode != PAGE_MODE_PASSWORD);
+ } else {
+ set_action_sensitive (ev_window, "SinglePage", FALSE);
+ set_action_sensitive (ev_window, "ContinuousPage", FALSE);
+ }
/* Help menu */
/* "HelpContents": always sensitive */
/* "HelpAbout": always sensitive */
/* Toolbar-specific actions: */
- set_action_sensitive (ev_window, NAVIGATION_BACK_ACTION, can_go_back);
- set_action_sensitive (ev_window, NAVIGATION_FORWARD_ACTION, can_go_forward);
set_action_sensitive (ev_window, PAGE_SELECTOR_ACTION, document!=NULL);
}
ev_window_setup_document (EvWindow *ev_window)
{
EvDocument *document;
- EvHistory *history;
EvView *view = EV_VIEW (ev_window->priv->view);
+ EvPageView *page_view = EV_PAGE_VIEW (ev_window->priv->page_view);
EvSidebar *sidebar = EV_SIDEBAR (ev_window->priv->sidebar);
- GtkAction *action;
document = ev_window->priv->document;
ev_sidebar_set_document (sidebar, document);
ev_view_set_document (view, document);
+ ev_page_view_set_document (page_view, document);
- history = ev_history_new ();
- ev_view_set_history (view, history);
- g_object_unref (history);
-
- action = gtk_action_group_get_action
- (ev_window->priv->action_group, NAVIGATION_BACK_ACTION);
- ev_navigation_action_set_history
- (EV_NAVIGATION_ACTION (action), history);
-
- action = gtk_action_group_get_action
- (ev_window->priv->action_group, NAVIGATION_FORWARD_ACTION);
- ev_navigation_action_set_history
- (EV_NAVIGATION_ACTION (action), history);
-
- update_window_title (ev_window->priv->document, NULL, ev_window);
+ update_window_title (document, NULL, ev_window);
update_total_pages (ev_window);
update_action_sensitivity (ev_window);
}
document = NULL;
else if (!strcmp (mime_type, "application/pdf"))
document = g_object_new (PDF_TYPE_DOCUMENT, NULL);
- else if (!strcmp (mime_type, "application/postscript"))
+ else if (!strcmp (mime_type, "application/postscript") ||
+ !strcmp (mime_type, "image/x-eps"))
document = g_object_new (PS_TYPE_DOCUMENT, NULL);
else if (mime_type_supported_by_gdk_pixbuf (mime_type))
document = g_object_new (PIXBUF_TYPE_DOCUMENT, NULL);
GtkWidget *child = NULL;
GtkWidget *real_child;
+ if (window->priv->page_mode == page_mode)
+ return;
+
+ window->priv->page_mode = page_mode;
+
switch (page_mode) {
case PAGE_MODE_SINGLE_PAGE:
child = window->priv->view;
case PAGE_MODE_PASSWORD:
child = window->priv->password_view;
break;
+ case PAGE_MODE_CONTINUOUS_PAGE:
+ child = window->priv->page_view;
+ break;
default:
- g_warning ("page_mode not implemented yet\n");
g_assert_not_reached ();
}
+
real_child = gtk_bin_get_child (GTK_BIN (window->priv->scrolled_window));
if (child != real_child) {
gtk_container_remove (GTK_CONTAINER (window->priv->scrolled_window),
gtk_container_add (GTK_CONTAINER (window->priv->scrolled_window),
child);
}
+ update_action_sensitivity (window);
}
static void
ev_view_fit_width (EV_VIEW (ev_window->priv->view));
}
-static void
-ev_window_cmd_go_back (GtkAction *action, EvWindow *ev_window)
-{
- g_return_if_fail (EV_IS_WINDOW (ev_window));
-
- ev_view_go_back (EV_VIEW (ev_window->priv->view));
-}
-
-static void
-ev_window_cmd_go_forward (GtkAction *action, EvWindow *ev_window)
-{
- g_return_if_fail (EV_IS_WINDOW (ev_window));
-
- ev_view_go_forward (EV_VIEW (ev_window->priv->view));
-}
-
static void
ev_window_cmd_go_page_up (GtkAction *action, EvWindow *ev_window)
{
find_bar_previous_cb (EggFindBar *find_bar,
EvWindow *ev_window)
{
- /* FIXME - highlight previous result */
- g_printerr ("Find Previous\n");
-
+ ev_view_find_previous (EV_VIEW (ev_window->priv->view));
}
static void
find_bar_next_cb (EggFindBar *find_bar,
EvWindow *ev_window)
{
- /* FIXME - highlight next result */
- g_printerr ("Find Next\n");
+ ev_view_find_next (EV_VIEW (ev_window->priv->view));
}
static void
ev_window_update_fullscreen_popup (ev_window);
}
+static void
+ev_window_page_mode_cb (GtkRadioAction *action,
+ GtkRadioAction *activated_action,
+ EvWindow *window)
+{
+ int mode;
+
+ mode = gtk_radio_action_get_current_value (action);
+
+ g_assert (mode == PAGE_MODE_CONTINUOUS_PAGE ||
+ mode == PAGE_MODE_SINGLE_PAGE);
+
+ ev_window_set_page_mode (window, (EvWindowPageMode) mode);
+}
+
static void
find_bar_search_changed_cb (EggFindBar *find_bar,
GParamSpec *param,
G_CALLBACK (ev_window_cmd_view_page_width) },
/* Go menu */
- { "GoBack", GTK_STOCK_GO_BACK, N_("_Back"), "<mod1>Left",
- N_("Go to the page viewed before this one"),
- G_CALLBACK (ev_window_cmd_go_back) },
- { "GoForward", GTK_STOCK_GO_FORWARD, N_("Fo_rward"), "<mod1>Right",
- N_("Go to the page viewed before this one"),
- G_CALLBACK (ev_window_cmd_go_forward) },
{ "GoPageUp", GTK_STOCK_GO_UP, N_("_Page Up"), "<control>Page_Up",
N_("Go to the previous page"),
G_CALLBACK (ev_window_cmd_go_page_up) },
G_CALLBACK (ev_window_cmd_view_fullscreen) },
};
+static GtkRadioActionEntry page_view_entries[] = {
+ { "SinglePage", GTK_STOCK_DND, N_("Single"), NULL,
+ N_("Show the document one page at a time"),
+ PAGE_MODE_SINGLE_PAGE },
+ { "ContinuousPage", GTK_STOCK_DND_MULTIPLE, N_("Multi"), NULL,
+ N_("Show the full document at once"),
+ PAGE_MODE_CONTINUOUS_PAGE }
+};
+
static void
goto_page_cb (GtkAction *action, int page_number, EvWindow *ev_window)
{
{
GtkAction *action;
- action = g_object_new (EV_TYPE_NAVIGATION_ACTION,
- "name", NAVIGATION_BACK_ACTION,
- "label", _("Back"),
- "stock_id", GTK_STOCK_GO_BACK,
- "tooltip", _("Go back"),
- "arrow-tooltip", _("Back history"),
- "direction", EV_NAVIGATION_DIRECTION_BACK,
- "is_important", TRUE,
- NULL);
- g_signal_connect (action, "activate",
- G_CALLBACK (ev_window_cmd_go_back), window);
- gtk_action_group_add_action (group, action);
- g_object_unref (action);
-
- action = g_object_new (EV_TYPE_NAVIGATION_ACTION,
- "name", NAVIGATION_FORWARD_ACTION,
- "label", _("Forward"),
- "stock_id", GTK_STOCK_GO_FORWARD,
- "tooltip", _("Go forward"),
- "arrow-tooltip", _("Forward history"),
- "direction", EV_NAVIGATION_DIRECTION_FORWARD,
- NULL);
- g_signal_connect (action, "activate",
- G_CALLBACK (ev_window_cmd_go_forward), window);
- gtk_action_group_add_action (group, action);
- g_object_unref (action);
-
action = g_object_new (EV_TYPE_PAGE_ACTION,
"name", PAGE_SELECTOR_ACTION,
"label", _("Page"),
ev_window->priv = EV_WINDOW_GET_PRIVATE (ev_window);
+ ev_window->priv->page_mode = PAGE_MODE_SINGLE_PAGE;
update_window_title (NULL, NULL, ev_window);
ev_window->priv->main_box = gtk_vbox_new (FALSE, 0);
gtk_action_group_add_toggle_actions (action_group, toggle_entries,
G_N_ELEMENTS (toggle_entries),
ev_window);
+ gtk_action_group_add_radio_actions (action_group, page_view_entries,
+ G_N_ELEMENTS (page_view_entries),
+ ev_window->priv->page_mode,
+ G_CALLBACK (ev_window_page_mode_cb),
+ ev_window);
set_short_labels (action_group);
register_custom_actions (ev_window, action_group);
ev_window->priv->scrolled_window);
ev_window->priv->view = ev_view_new ();
+ ev_window->priv->page_view = ev_page_view_new ();
ev_window->priv->password_view = ev_password_view_new ();
g_signal_connect_swapped (ev_window->priv->password_view,
"unlock",
G_CALLBACK (ev_window_popup_password_dialog),
ev_window);
gtk_widget_show (ev_window->priv->view);
+ gtk_widget_show (ev_window->priv->page_view);
gtk_widget_show (ev_window->priv->password_view);
+
/* We own a ref on these widgets, as we can swap them in and out */
g_object_ref (ev_window->priv->view);
+ g_object_ref (ev_window->priv->page_view);
g_object_ref (ev_window->priv->password_view);
gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window),