Page selector works correctly with Ipe 7.0.14
authorDmitriy Morozov <dmitriy@mrzv.org>
Fri, 24 Jun 2011 09:57:10 -0700
changeset 9 6f17855970fc
parent 8 6e21d1f3b806
child 10 118b5e4e0f9b
Page selector works correctly with Ipe 7.0.14
mainwindow.cpp
--- a/mainwindow.cpp	Mon Jan 17 09:08:22 2011 -0800
+++ b/mainwindow.cpp	Fri Jun 24 09:57:10 2011 -0700
@@ -39,7 +39,7 @@
 // --------------------------------------------------------------------
 
 MainWindow::
-MainWindow(CanvasView* cv, Qt::WFlags f): 
+MainWindow(CanvasView* cv, Qt::WFlags f):
     QMainWindow(0, f), canvas_view(cv)
 {
     setupUi(this);
@@ -49,7 +49,7 @@
     // iFileMenu = menuBar()->addMenu(tr("&File"));
     // iFileMenu->addAction(new IpeAction(EOpen, "Open", "Ctrl+O", this));
     // iFileMenu->addAction(new IpeAction(EQuit, "Quit", "Ctrl+Q", this));
-    
+
     iViewMenu = menuBar()->addMenu(tr("&View"));
     iMoveMenu = menuBar()->addMenu(tr("&Move"));
 
@@ -96,7 +96,7 @@
 
     // connect(currentViewCanvas, SIGNAL(wheelMoved(int)), this, SLOT(wheelZoom(int)));
     // connect(currentViewCanvas, SIGNAL(mouseAction(int)), this, SLOT(startPan(int)));
-  
+
     connect(splitter, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved(int,int)));
     connect(splitter_2, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved(int,int)));
 
@@ -106,7 +106,7 @@
 void MainWindow::cmd(int c)
 {
     ipeDebug("Command %d", c);
-    switch (c) 
+    switch (c)
     {
         case EOpen:
             break;
@@ -156,10 +156,10 @@
             break;
         case EJumpTo:
         {
-            int page = PageSelector::selectPageOrView(iDoc,-1,240,this->width(),this->height());
+            int page = PageSelector::selectPageOrView(iDoc, -1, iPageNo, 240, this->width(), this->height());
             if (page >= 0)
             {
-                int view = PageSelector::selectPageOrView(iDoc, page, 240, this->width(),this->height());
+                int view = PageSelector::selectPageOrView(iDoc, page, (page == iPageNo) ? iViewNo : 0, 240, this->width(),this->height());
                 if (view >= 0)
                 {
                     iPageNo = page;
@@ -183,31 +183,31 @@
     Document *doc = Document::loadWithErrorReport(fname);
     if (!doc)
         return false;
-    
+
     iFileName = String(fname);
     doc->runLatex();
-    
+
     delete iDoc;
     iDoc = doc;
-    
+
     iPageNo = 0;
     iViewNo = 0;
-    
+
     // iDoc->page(iPageNo)->setSelect(0, EPrimarySelected);
     currentViewCanvas->setFontPool(iDoc->fontPool());
     nextViewCanvas->setFontPool(iDoc->fontPool());
-    
+
     currentViewCanvas->setPage(iDoc->page(iPageNo), iPageNo, iViewNo, iDoc->cascade());
     currentViewCanvas->setPan(Vector(300, 400));
     currentViewCanvas->update();
     setNextViewCanvas();
-    
+
     canvas_view->load(doc, iPageNo, iViewNo);
-     
+
     setView();
     return true;
 }
-  
+
 void MainWindow::updateLabel()
 {
     String s = iFileName;
@@ -261,18 +261,18 @@
     const Page *page = iDoc->page(iPageNo);
     int iPageNo = this->iPageNo;
     int iViewNo = this->iViewNo;
-    if (0 <= iViewNo + delta && iViewNo + delta < page->countViews()) 
+    if (0 <= iViewNo + delta && iViewNo + delta < page->countViews())
     {
         iViewNo += delta;
-    } else if (0 <= iPageNo + delta && iPageNo + delta < iDoc->countPages()) 
+    } else if (0 <= iPageNo + delta && iPageNo + delta < iDoc->countPages())
     {
         iPageNo += delta;
         if (delta > 0)
             iViewNo = 0;
         else
             iViewNo = iDoc->page(iPageNo)->countViews() - 1;
-    } 
-    
+    }
+
     return std::make_pair(iPageNo, iViewNo);
 }
 
@@ -324,7 +324,7 @@
 {
     cmd(EFitPage);
 }
-  
+
 void MainWindow::splitterMoved(int pos, int index)
 {
     cmd(EFitPage);
@@ -344,7 +344,7 @@
 
     canvas_view->setView(iPageNo, iViewNo);
     notesText->setPlainText(QIpe(iDoc->page(iPageNo)->notes()));
-    
+
     setNextViewCanvas();
 }
 
@@ -361,23 +361,23 @@
     Platform::initLib(IPELIB_VERSION);
     QApplication a(argc, argv);
     setlocale(LC_NUMERIC, "C");
-    
+
     if (argc != 2)
         usage();
-    
+
     const char *load = argv[1];
-    
+
     CanvasView *cv = new CanvasView();
     MainWindow *mw = new MainWindow(cv);
-    
+
     if (!mw->load(load))
         exit(2);
-    
+
     cv->show();
     mw->show();
-    
+
     mw->cmd(MainWindow::EFitPage);
-    
+
     QObject::connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
     return a.exec();
 }