@@ -379,6 +379,8 @@ DocumentationWidget::DocumentationWidget(QWidget *pParent)
379379 // navigation history list
380380 mpDocumentationHistoryList = new QList<DocumentationHistory>();
381381 mDocumentationHistoryPos = -1 ;
382+ setExecutingPreviousNextButtons (false );
383+ setScrollPosition (QPoint (0 , 0 ));
382384 // Documentation viewer layout
383385 QGridLayout *pGridLayout = new QGridLayout;
384386 pGridLayout->setContentsMargins (0 , 0 , 0 , 0 );
@@ -422,6 +424,18 @@ void DocumentationWidget::showDocumentation(LibraryTreeItem *pLibraryTreeItem)
422424 saveDocumentation (pLibraryTreeItem);
423425 return ;
424426 }
427+ // write the scroll position
428+ if (!isExecutingPreviousNextButtons ()) {
429+ saveScrollPosition ();
430+ }
431+ // read the scroll position
432+ int index = mpDocumentationHistoryList->indexOf (DocumentationHistory (pLibraryTreeItem));
433+ if (index > -1 && isExecutingPreviousNextButtons ()) {
434+ setScrollPosition (mpDocumentationHistoryList->at (index).mScrollPosition );
435+ } else {
436+ setScrollPosition (QPoint (0 , 0 ));
437+ }
438+ // read documentation
425439 QString documentation = MainWindow::instance ()->getOMCProxy ()->getDocumentationAnnotation (pLibraryTreeItem);
426440 writeDocumentationFile (documentation);
427441 mpDocumentationViewer->setUrl (QUrl::fromLocalFile (mDocumentationFile .fileName ()));
@@ -507,6 +521,19 @@ QString DocumentationWidget::queryCommandValue(const QString &commandName)
507521 return result.toString ();
508522}
509523
524+ /* !
525+ * \brief DocumentationWidget::saveScrollPosition
526+ * Saves the scroll position of the current page.
527+ */
528+ void DocumentationWidget::saveScrollPosition ()
529+ {
530+ if (mDocumentationHistoryPos > -1 && mpDocumentationHistoryList->size () > 0 ) {
531+ DocumentationHistory documentationHistory = mpDocumentationHistoryList->at (mDocumentationHistoryPos );
532+ documentationHistory.mScrollPosition = mpDocumentationViewer->page ()->mainFrame ()->scrollPosition ();
533+ mpDocumentationHistoryList->replace (mDocumentationHistoryPos , documentationHistory);
534+ }
535+ }
536+
510537/* !
511538 * \brief DocumentationWidget::createPixmapForToolButton
512539 * Creates a new pixmap which contains the QIcon and the QColor in the bottom.
@@ -631,9 +658,12 @@ void DocumentationWidget::updateDocumentationHistory(LibraryTreeItem *pLibraryTr
631658void DocumentationWidget::previousDocumentation ()
632659{
633660 if (mDocumentationHistoryPos > 0 ) {
661+ saveScrollPosition ();
634662 mDocumentationHistoryPos --;
663+ setExecutingPreviousNextButtons (true );
635664 LibraryTreeModel *pLibraryTreeModel = MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel ();
636665 pLibraryTreeModel->showModelWidget (mpDocumentationHistoryList->at (mDocumentationHistoryPos ).mpLibraryTreeItem );
666+ setExecutingPreviousNextButtons (false );
637667 }
638668}
639669
@@ -645,9 +675,12 @@ void DocumentationWidget::previousDocumentation()
645675void DocumentationWidget::nextDocumentation ()
646676{
647677 if ((mDocumentationHistoryPos + 1 ) < mpDocumentationHistoryList->count ()) {
678+ saveScrollPosition ();
648679 mDocumentationHistoryPos ++;
680+ setExecutingPreviousNextButtons (true );
649681 LibraryTreeModel *pLibraryTreeModel = MainWindow::instance ()->getLibraryWidget ()->getLibraryTreeModel ();
650682 pLibraryTreeModel->showModelWidget (mpDocumentationHistoryList->at (mDocumentationHistoryPos ).mpLibraryTreeItem );
683+ setExecutingPreviousNextButtons (false );
651684 }
652685}
653686
@@ -1140,6 +1173,9 @@ DocumentationViewer::DocumentationViewer(DocumentationWidget *pDocumentationWidg
11401173 connect (page (), SIGNAL (linkClicked (QUrl)), SLOT (processLinkClick (QUrl)));
11411174 connect (page (), SIGNAL (linkHovered (QString,QString,QString)), SLOT (processLinkHover (QString,QString,QString)));
11421175 createActions ();
1176+ if (!isContentEditable) {
1177+ connect (this , SIGNAL (loadFinished (bool )), SLOT (pageLoaded (bool )));
1178+ }
11431179}
11441180
11451181/* !
@@ -1267,6 +1303,18 @@ void DocumentationViewer::showContextMenu(QPoint point)
12671303 menu.exec (mapToGlobal (point));
12681304}
12691305
1306+ /* !
1307+ * \brief DocumentationViewer::pageLoaded
1308+ * Scrolls the page after its finished loading.
1309+ * \param ok
1310+ */
1311+ void DocumentationViewer::pageLoaded (bool ok)
1312+ {
1313+ Q_UNUSED (ok);
1314+ const QPoint scrollPosition = mpDocumentationWidget->getScrollPosition ();
1315+ page ()->mainFrame ()->scroll (scrollPosition.x (), scrollPosition.y ());
1316+ }
1317+
12701318/* !
12711319 * \brief DocumentationViewer::createWindow
12721320 * \param type
0 commit comments