Skip to content

Commit

Permalink
ticket:5760 Preserve the scroll position in documentation browser
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Jan 9, 2020
1 parent cd8ea0d commit 13ffc70
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 2 deletions.
48 changes: 48 additions & 0 deletions OMEdit/OMEdit/OMEditGUI/Modeling/DocumentationWidget.cpp
Expand Up @@ -379,6 +379,8 @@ DocumentationWidget::DocumentationWidget(QWidget *pParent)
// navigation history list
mpDocumentationHistoryList = new QList<DocumentationHistory>();
mDocumentationHistoryPos = -1;
setExecutingPreviousNextButtons(false);
setScrollPosition(QPoint(0, 0));
// Documentation viewer layout
QGridLayout *pGridLayout = new QGridLayout;
pGridLayout->setContentsMargins(0, 0, 0, 0);
Expand Down Expand Up @@ -422,6 +424,18 @@ void DocumentationWidget::showDocumentation(LibraryTreeItem *pLibraryTreeItem)
saveDocumentation(pLibraryTreeItem);
return;
}
// write the scroll position
if (!isExecutingPreviousNextButtons()) {
saveScrollPosition();
}
// read the scroll position
int index = mpDocumentationHistoryList->indexOf(DocumentationHistory(pLibraryTreeItem));
if (index > -1 && isExecutingPreviousNextButtons()) {
setScrollPosition(mpDocumentationHistoryList->at(index).mScrollPosition);
} else {
setScrollPosition(QPoint(0, 0));
}
// read documentation
QString documentation = MainWindow::instance()->getOMCProxy()->getDocumentationAnnotation(pLibraryTreeItem);
writeDocumentationFile(documentation);
mpDocumentationViewer->setUrl(QUrl::fromLocalFile(mDocumentationFile.fileName()));
Expand Down Expand Up @@ -507,6 +521,19 @@ QString DocumentationWidget::queryCommandValue(const QString &commandName)
return result.toString();
}

/*!
* \brief DocumentationWidget::saveScrollPosition
* Saves the scroll position of the current page.
*/
void DocumentationWidget::saveScrollPosition()
{
if (mDocumentationHistoryPos > -1 && mpDocumentationHistoryList->size() > 0) {
DocumentationHistory documentationHistory = mpDocumentationHistoryList->at(mDocumentationHistoryPos);
documentationHistory.mScrollPosition = mpDocumentationViewer->page()->mainFrame()->scrollPosition();
mpDocumentationHistoryList->replace(mDocumentationHistoryPos, documentationHistory);
}
}

/*!
* \brief DocumentationWidget::createPixmapForToolButton
* Creates a new pixmap which contains the QIcon and the QColor in the bottom.
Expand Down Expand Up @@ -631,9 +658,12 @@ void DocumentationWidget::updateDocumentationHistory(LibraryTreeItem *pLibraryTr
void DocumentationWidget::previousDocumentation()
{
if (mDocumentationHistoryPos > 0) {
saveScrollPosition();
mDocumentationHistoryPos--;
setExecutingPreviousNextButtons(true);
LibraryTreeModel *pLibraryTreeModel = MainWindow::instance()->getLibraryWidget()->getLibraryTreeModel();
pLibraryTreeModel->showModelWidget(mpDocumentationHistoryList->at(mDocumentationHistoryPos).mpLibraryTreeItem);
setExecutingPreviousNextButtons(false);
}
}

Expand All @@ -645,9 +675,12 @@ void DocumentationWidget::previousDocumentation()
void DocumentationWidget::nextDocumentation()
{
if ((mDocumentationHistoryPos + 1) < mpDocumentationHistoryList->count()) {
saveScrollPosition();
mDocumentationHistoryPos++;
setExecutingPreviousNextButtons(true);
LibraryTreeModel *pLibraryTreeModel = MainWindow::instance()->getLibraryWidget()->getLibraryTreeModel();
pLibraryTreeModel->showModelWidget(mpDocumentationHistoryList->at(mDocumentationHistoryPos).mpLibraryTreeItem);
setExecutingPreviousNextButtons(false);
}
}

Expand Down Expand Up @@ -1140,6 +1173,9 @@ DocumentationViewer::DocumentationViewer(DocumentationWidget *pDocumentationWidg
connect(page(), SIGNAL(linkClicked(QUrl)), SLOT(processLinkClick(QUrl)));
connect(page(), SIGNAL(linkHovered(QString,QString,QString)), SLOT(processLinkHover(QString,QString,QString)));
createActions();
if (!isContentEditable) {
connect(this, SIGNAL(loadFinished(bool)), SLOT(pageLoaded(bool)));
}
}

/*!
Expand Down Expand Up @@ -1267,6 +1303,18 @@ void DocumentationViewer::showContextMenu(QPoint point)
menu.exec(mapToGlobal(point));
}

/*!
* \brief DocumentationViewer::pageLoaded
* Scrolls the page after its finished loading.
* \param ok
*/
void DocumentationViewer::pageLoaded(bool ok)
{
Q_UNUSED(ok);
const QPoint scrollPosition = mpDocumentationWidget->getScrollPosition();
page()->mainFrame()->scroll(scrollPosition.x(), scrollPosition.y());
}

/*!
* \brief DocumentationViewer::createWindow
* \param type
Expand Down
15 changes: 14 additions & 1 deletion OMEdit/OMEdit/OMEditGUI/Modeling/DocumentationWidget.h
Expand Up @@ -51,7 +51,12 @@ class DocumentationHistory
{
public:
LibraryTreeItem *mpLibraryTreeItem;
DocumentationHistory(LibraryTreeItem *pLibraryTreeItem) {mpLibraryTreeItem = pLibraryTreeItem;}
QPoint mScrollPosition;
DocumentationHistory(LibraryTreeItem *pLibraryTreeItem)
{
mpLibraryTreeItem = pLibraryTreeItem;
mScrollPosition = QPoint(0, 0);
}
bool operator==(const DocumentationHistory &documentationHistory) const
{
return (documentationHistory.mpLibraryTreeItem == this->mpLibraryTreeItem);
Expand Down Expand Up @@ -80,6 +85,11 @@ class DocumentationWidget : public QWidget
void execCommand(const QString &commandName, const QString &valueArgument);
bool queryCommandState(const QString &commandName);
QString queryCommandValue(const QString &commandName);
void saveScrollPosition();
bool isExecutingPreviousNextButtons() const {return mExecutingPreviousNextButtons;}
void setExecutingPreviousNextButtons(bool executingPreviousNextButtons) {mExecutingPreviousNextButtons = executingPreviousNextButtons;}
QPoint getScrollPosition() const {return mScrollPosition;}
void setScrollPosition(const QPoint &scrollPosition) {mScrollPosition = scrollPosition;}
private:
QFile mDocumentationFile;
QAction *mpPreviousAction;
Expand Down Expand Up @@ -126,6 +136,8 @@ class DocumentationWidget : public QWidget
EditType mEditType;
QList<DocumentationHistory> *mpDocumentationHistoryList;
int mDocumentationHistoryPos;
bool mExecutingPreviousNextButtons;
QPoint mScrollPosition;

QPixmap createPixmapForToolButton(QColor color, QIcon icon);
void updatePreviousNextButtons();
Expand Down Expand Up @@ -177,6 +189,7 @@ public slots:
void requestFinished();
void processLinkHover(QString link, QString title, QString textContent);
void showContextMenu(QPoint point);
void pageLoaded(bool ok);
protected:
virtual QWebView* createWindow(QWebPage::WebWindowType type) override;
virtual void keyPressEvent(QKeyEvent *event) override;
Expand Down
1 change: 0 additions & 1 deletion OMEdit/OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp
Expand Up @@ -1816,7 +1816,6 @@ void LibraryTreeModel::showModelWidget(LibraryTreeItem *pLibraryTreeItem, bool s
(pLibraryTreeItem->mClassInformation.preferredView.isEmpty() && pLibraryTreeItem->isDocumentationClass()) ||
(pLibraryTreeItem->mClassInformation.preferredView.isEmpty() &&
OptionsDialog::instance()->getGeneralSettingsPage()->getDefaultView().compare(Helper::documentationView) == 0))) {
MainWindow::instance()->getDocumentationWidget()->showDocumentation(pLibraryTreeItem);
bool state = MainWindow::instance()->getDocumentationDockWidget()->blockSignals(true);
MainWindow::instance()->getDocumentationDockWidget()->show();
MainWindow::instance()->getDocumentationDockWidget()->blockSignals(state);
Expand Down

0 comments on commit 13ffc70

Please sign in to comment.