Author: jghali
Date: Sat Jun  8 16:03:28 2019
New Revision: 23009

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23009
Log:
#15670: PDF Link annotations not updated when inserting/removing pages

Modified:
    trunk/Scribus/scribus/scribus.cpp
    trunk/Scribus/scribus/scribusdoc.cpp
    trunk/Scribus/scribus/scribusdoc.h

Modified: trunk/Scribus/scribus/scribus.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23009&path=/trunk/Scribus/scribus/scribus.cpp
==============================================================================
--- trunk/Scribus/scribus/scribus.cpp   (original)
+++ trunk/Scribus/scribus/scribus.cpp   Sat Jun  8 16:03:28 2019
@@ -5321,9 +5321,15 @@
        slotNewPage(wo, templ); //master page is applied now
        //applyNewMaster(templ);
        if (where == 2)
+       {
+               doc->addPageToAnnotLinks(wo, where, 1);
                doc->addPageToSection(wo, where, 1);
+       }
        else
-               doc->addPageToSection(wo+1, where, 1);
+       {
+               doc->addPageToAnnotLinks(wo + 1, where, 1);
+               doc->addPageToSection(wo + 1, where, 1);
+       }
 
        doc->updateEndnotesFrames();
        doc->changed();
@@ -5447,13 +5453,14 @@
                //CB If we want to add this master page setting into the 
slotnewpage call, the pagenumber must be +1 I think
        
//Apply_MasterPage(base[(doc->currentPage()->pageNr()+doc->pageSets[doc->currentPageLayout].FirstPage)
 % doc->pageSets[doc->currentPageLayout].Columns],
 //                                              doc->currentPage()->pageNr(), 
false); // this Apply_MasterPage avoids DreawNew and PagePalette->ReBuild, 
which is much faster for 100 pp :-)
-               wot ++;
+               ++wot;
        }
        doc->setCurrentPage(currentPage);
        view->updatesOn(true);
        qApp->restoreOverrideCursor();
        //Use wo, the dialog currently returns a page Index +1 due to old 
numbering scheme, function now does the -1 as required
        doc->changed();
+       doc->addPageToAnnotLinks(wot, where, numPages);
        doc->addPageToSection(wo, where, numPages);
        doc->reformPages();
        doc->updateEndnotesFrames();
@@ -6227,7 +6234,10 @@
                else
                        doc->deletePage(a);
                if (!isMasterPage) // Master pages are not added to sections 
when created
+               {
+                       doc->removePageFromAnnotLinks(a);
                        doc->removePageFromSection(a);
+               }
        }
        pageSelector->setMaximum(doc->Pages->count());
        pageSelector->blockSignals(b);

Modified: trunk/Scribus/scribus/scribusdoc.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23009&path=/trunk/Scribus/scribus/scribusdoc.cpp
==============================================================================
--- trunk/Scribus/scribus/scribusdoc.cpp        (original)
+++ trunk/Scribus/scribus/scribusdoc.cpp        Sat Jun  8 16:03:28 2019
@@ -7043,13 +7043,13 @@
 
 void ScribusDoc::updateSectionPageNumbersToPages()
 {
-       int docPageCount=DocPages.count();
-       for (int i=0; i < docPageCount; ++i)
+       int docPageCount = DocPages.count();
+       for (int i = 0; i < docPageCount; ++i)
                
DocPages.at(i)->setPageSectionNumber(getSectionPageNumberForPageIndex(i));
 }
 
 
-void ScribusDoc::addPageToSection(const uint otherPageIndex, const uint 
location, const uint count)
+void ScribusDoc::addPageToSection(uint otherPageIndex, uint location, uint 
count)
 {
        uint fromIndex, toIndex;
        uint searchedIndex = (otherPageIndex > 0) ? (otherPageIndex - 1) : 0;
@@ -7070,7 +7070,7 @@
 }
 
 
-void ScribusDoc::removePageFromSection(const uint pageIndex)
+void ScribusDoc::removePageFromSection(uint pageIndex)
 {
        //Get the section of the new page index.
        uint fromIndex, toIndex;
@@ -7107,6 +7107,63 @@
        updateSectionPageNumbersToPages();
 }
 
+void ScribusDoc::addPageToAnnotLinks(int otherPageIndex, int location, int 
count)
+{
+       int searchedIndex = (otherPageIndex > 0) ? (otherPageIndex - 1) : 0;
+       if ((location == 0) && (searchedIndex > 0))
+               --searchedIndex;
+
+       QList<PageItem*> itemList = DocItems;
+       while (itemList.count() > 0)
+       {
+               PageItem *currItem = itemList.takeLast();
+               if (currItem->isGroup())
+               {
+                       itemList += currItem->groupItemList;
+                       continue;
+               }
+               if (!currItem->isAnnotation())
+                       continue;
+               
+               Annotation& annotation = currItem->annotation();
+               if (annotation.ActionType() != Annotation::Action_GoTo)
+                       continue;
+
+               int targetPage = annotation.Ziel();
+               if (targetPage >= searchedIndex)
+               {
+                       targetPage += count;
+                       annotation.setZiel(targetPage);
+               }
+       }
+}
+
+void ScribusDoc::removePageFromAnnotLinks(int pageIndex)
+{
+       QList<PageItem*> itemList = DocItems;
+       while (itemList.count() > 0)
+       {
+               PageItem *currItem = itemList.takeLast();
+               if (currItem->isGroup())
+               {
+                       itemList += currItem->groupItemList;
+                       continue;
+               }
+               if (!currItem->isAnnotation())
+                       continue;
+               
+               Annotation& annotation = currItem->annotation();
+               if (annotation.ActionType() != Annotation::Action_GoTo)
+                       continue;
+
+               int targetPage = annotation.Ziel();
+               if (targetPage >= pageIndex)
+               {
+                       --targetPage;
+                       annotation.setZiel(targetPage);
+               }
+       }
+}
 
 void ScribusDoc::copyPage(int pageNumberToCopy, int existingPage, int 
whereToInsert, int copyCount)
 {

Modified: trunk/Scribus/scribus/scribusdoc.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23009&path=/trunk/Scribus/scribus/scribusdoc.h
==============================================================================
--- trunk/Scribus/scribus/scribusdoc.h  (original)
+++ trunk/Scribus/scribus/scribusdoc.h  Sat Jun  8 16:03:28 2019
@@ -977,12 +977,11 @@
         */
        void updateSectionPageNumbersToPages();
        /**
-        * 
         * @param otherPageIndex 
         * @param location 
         * @param count 
         */
-       void addPageToSection(const uint otherPageIndex, const uint location, 
const uint count=1);
+       void addPageToSection(uint otherPageIndex, uint location, uint count=1);
        /**
         * 
         * @param pageIndex 
@@ -997,6 +996,16 @@
         * @brief Returns name of section where page is located
         */
        QString getSectionNameForPageIndex(const uint pageIndex) const;
+
+       /**
+        * Update annotation links when a page is added
+        */
+       void addPageToAnnotLinks(int otherPageIndex, int location, int count=1);
+
+       /**
+        * Update annotation links when a page is removed
+        */
+       void removePageFromAnnotLinks(int pageIndex);
 
        //! @brief Some internal align tools
        typedef enum {alignFirst, alignLast, alignPage, alignMargins, 
alignGuide, alignSelection } AlignTo;


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to