[passepartout] added menu items for page navigation



commit cf277106d710db4f92faeb8945972bc60fcea8c1
Author: Sven Herzberg <herzi lanedo com>
Date:   Sat May 2 15:27:13 2009 +0200

    added menu items for page navigation
    
    * src/pptout/windowmenus.cc: added menu items for page navigation; properly
      update their sensitivity
---
 src/pptout/windowmenus.cc |   78 +++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 72 insertions(+), 6 deletions(-)

diff --git a/src/pptout/windowmenus.cc b/src/pptout/windowmenus.cc
index 83269f6..7638d69 100644
--- a/src/pptout/windowmenus.cc
+++ b/src/pptout/windowmenus.cc
@@ -85,7 +85,46 @@ namespace {
   void rearrange_selected(DocumentView *view, RearrangeTarget target) {
     nonull(view->get_page())->rearrange_selected(target);
   }
-  
+
+  void
+  page_changed (DocumentView                  * view,
+                Glib::RefPtr<Gtk::ActionGroup>  group)
+  {
+    DocRef document = view->get_document ();
+
+    bool sensitive = document && view->get_current_page_num () > document->get_first_page_num ();
+    group->get_action ("PageFirst")->set_sensitive (sensitive);
+    group->get_action ("PagePrevious")->set_sensitive (sensitive);
+
+    sensitive = document && view->get_current_page_num () < (document->get_first_page_num () + document->get_num_of_pages () - 1);
+    group->get_action ("PageLast")->set_sensitive (sensitive);
+    group->get_action ("PageNext")->set_sensitive (sensitive);
+  }
+
+  void
+  page_first (DocumentView* view)
+  {
+    view->set_current_page_num (view->get_document ()->get_first_page_num ());
+  }
+
+  void
+  page_last (DocumentView* view)
+  {
+    view->set_current_page_num (view->get_document ()->get_first_page_num () + view->get_document ()->get_num_of_pages () - 1);
+  }
+
+  void
+  page_next (DocumentView* view)
+  {
+    view->set_current_page_num (view->get_current_page_num () + 1);
+  }
+
+  void
+  page_previous (DocumentView* view)
+  {
+    view->set_current_page_num (view->get_current_page_num () - 1);
+  }
+
   void insert_page(Gtk::Window *parent, DocumentView *view, bool after) {
     DocRef document = nonull(view->get_document());
     int page_num =
@@ -279,11 +318,33 @@ FrameWindow::create_menus (Gtk::RecentFilter& f)
   // *** page menu ***
   
   main_group->add(Action::create("PageMenu", _("_Page")));
-  
-  page_group->add(Action::create("PageDelete", _("_Delete")),
-		  AccelKey("<Ctrl>Delete"),
-                  mem_fun(document_view, &DocumentView::delete_page));
-  
+
+  page_group->add (Action::create ("PageFirst", Stock::GOTO_FIRST, _("_First Page")),
+                   AccelKey ("<Alt>Home"),
+                   bind<DocumentView*> (sigc::ptr_fun (&page_first), &this->document_view));
+  page_group->add (Action::create ("PagePrevious", Stock::GO_BACK, _("_Previous Page")),
+                   AccelKey ("<Alt>Page_Up"),
+                   bind<DocumentView*> (sigc::ptr_fun (&page_previous), &this->document_view));
+  page_group->add (Action::create ("PageNext", Stock::GO_FORWARD, _("_Next Page")),
+                   AccelKey ("<Alt>Page_Down"),
+                   bind<DocumentView*> (sigc::ptr_fun (&page_next), &this->document_view));
+  page_group->add (Action::create ("PageLast", Stock::GOTO_LAST, _("_Last Page")),
+                   AccelKey ("<Alt>End"),
+                   bind<DocumentView*> (sigc::ptr_fun (&page_last), &this->document_view));
+  sigc::slot< void, DocumentView*, Glib::RefPtr< Gtk::ActionGroup > > one (sigc::ptr_fun (&page_changed));
+  sigc::slot< void, DocumentView* > two (sigc::bind (one, page_group));
+  sigc::slot< void > three (sigc::bind (two, &this->document_view));
+  document_view.current_page_num_changed_signal.connect (three);
+  document_view.document_changed_signal.connect (three);
+  page_changed (&this->document_view, page_group);
+
+  page_group->add (Action::create ("PageDelete", Stock::DELETE, _("_Delete")),
+                   AccelKey ("<Ctrl>Delete"),
+                   mem_fun (document_view, &DocumentView::delete_page));
+
+  /* FIXME: as we display a dialog anyway, we can ask the user for the page's location there
+   * => drop one of these two
+   */
   doc_group->add(Action::create("PageInsertBefore", _("Insert _Before ...")),
                  bind(sigc::ptr_fun(&insert_page),
                       this, &document_view, false /* not after */));
@@ -412,6 +473,11 @@ FrameWindow::create_menus (Gtk::RecentFilter& f)
       "    </menu>"
 
       "    <menu action='PageMenu'>"
+      "      <menuitem action='PageFirst'/>"
+      "      <menuitem action='PagePrevious'/>"
+      "      <menuitem action='PageNext'/>"
+      "      <menuitem action='PageLast'/>"
+      "      <separator/>"
       "      <menuitem action='PageDelete'/>"
       "      <separator/>"
       "      <menuitem action='PageInsertBefore'/>"



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