VirtualBox

Changeset 107759 in vbox for trunk


Ignore:
Timestamp:
Jan 14, 2025 3:36:23 PM (4 weeks ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9831.

  • Implemented a better way of finding target html file for the go home action.
  • Fixed half way broken treeview and text browser sync.
Location:
trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.cpp

    r107708 r107759  
    191191    void sigMouseOverImage(const QString &strImageName);
    192192    void sigZoomRequest(UIHelpViewer::ZoomOperation enmZoomOperation);
     193    void sigGoHome();
    193194
    194195public:
    195196
    196     UIHelpBrowserTab(const QHelpEngine  *pHelpEngine, const QUrl &homeUrl,
    197                      const QUrl &initialUrl, QWidget *pParent = 0);
     197    UIHelpBrowserTab(const QHelpEngine  *pHelpEngine, const QUrl &initialUrl, QWidget *pParent = 0);
    198198
    199199    QUrl source() const;
     
    213213
    214214    void sltFindInPageAction(bool fToggled);
    215     void sltHomeAction();
    216215    void sltForwardAction();
    217216    void sltBackwardAction();
     
    246245    UIHelpViewer *m_pContentViewer;
    247246    const QHelpEngine* m_pHelpEngine;
    248     QUrl m_homeUrl;
    249247};
    250248
     
    270268    void sigHistoryChanged(bool fBackwardAvailable, bool fForwardAvailable);
    271269    void sigMouseOverImage(const QString &strImageName);
     270    void sigGoHome();
    272271
    273272public:
    274273
    275     UIHelpBrowserTabManager(const QHelpEngine  *pHelpEngine, const QUrl &homeUrl,
    276                             const QStringList &urlList, QWidget *pParent = 0);
     274    UIHelpBrowserTabManager(const QHelpEngine  *pHelpEngine, const QStringList &urlList, QWidget *pParent = 0);
    277275    /* Returns the list of urls of all open tabs as QStringList. */
    278276    QStringList tabUrlList() const;
     
    301299    void sltCloseCurrentTab();
    302300    void sltCloseOtherTabs();
    303     void sltHomeAction();
    304301    void sltAddBookmarkAction();
    305302    void sltForwardAction();
     
    332329
    333330    const QHelpEngine* m_pHelpEngine;
    334     QUrl m_homeUrl;
    335331    QStringList m_savedUrlList;
    336332    /** Immediately switch the newly created tab. Otherwise open the tab in background. */
     
    545541*********************************************************************************************************************************/
    546542
    547 UIHelpBrowserTab::UIHelpBrowserTab(const QHelpEngine  *pHelpEngine, const QUrl &homeUrl,
    548                                    const QUrl &initialUrl, QWidget *pParent /* = 0 */)
     543UIHelpBrowserTab::UIHelpBrowserTab(const QHelpEngine  *pHelpEngine, const QUrl &initialUrl, QWidget *pParent /* = 0 */)
    549544    : QWidget(pParent)
    550545    , m_pHomeAction(0)
     
    559554    , m_pContentViewer(0)
    560555    , m_pHelpEngine(pHelpEngine)
    561     , m_homeUrl(homeUrl)
    562556{
    563557    if (initialUrl.isValid())
    564558        prepare(initialUrl);
    565559    else
    566         prepare(m_homeUrl);
     560        prepare(QUrl());
    567561}
    568562
     
    576570void UIHelpBrowserTab::setSource(const QUrl &url)
    577571{
     572    if (url == source())
     573        return;
    578574    if (m_pContentViewer)
    579     {
    580         m_pContentViewer->blockSignals(true);
    581575        m_pContentViewer->setSource(url);
    582         m_pContentViewer->blockSignals(false);
    583         /* emit historyChanged signal explicitly since we have blocked the signals: */
    584         m_pContentViewer->emitHistoryChangedSignal();
    585     }
    586576}
    587577
     
    685675            this, &UIHelpBrowserTab::sltForwardAction);
    686676    connect(m_pContentViewer, &UIHelpViewer::sigGoHome,
    687             this, &UIHelpBrowserTab::sltHomeAction);
     677            this, &UIHelpBrowserTab::sigGoHome);
    688678    connect(m_pContentViewer, &UIHelpViewer::sigAddBookmark,
    689679            this, &UIHelpBrowserTab::sltAddBookmarkAction);
     
    699689            this, &UIHelpBrowserTab::sigZoomRequest);
    700690
    701     m_pContentViewer->setSource(initialUrl);
     691    if (initialUrl.isValid())
     692        m_pContentViewer->setSource(initialUrl);
     693    else
     694        emit sigGoHome();
    702695}
    703696
     
    728721    m_pFindInPageAction->setCheckable(true);
    729722
    730     connect(m_pHomeAction, &QAction::triggered, this, &UIHelpBrowserTab::sltHomeAction);
     723    connect(m_pHomeAction, &QAction::triggered, this, &UIHelpBrowserTab::sigGoHome);
    731724    connect(m_pAddBookmarkAction, &QAction::triggered, this, &UIHelpBrowserTab::sltAddBookmarkAction);
    732725    connect(m_pForwardAction, &QAction::triggered, this, &UIHelpBrowserTab::sltForwardAction);
     
    776769}
    777770
    778 void UIHelpBrowserTab::sltHomeAction()
    779 {
    780     if (!m_pContentViewer)
    781         return;
    782     m_pContentViewer->setSource(m_homeUrl);
    783 }
    784 
    785771void UIHelpBrowserTab::sltForwardAction()
    786772{
     
    887873*********************************************************************************************************************************/
    888874
    889 UIHelpBrowserTabManager::UIHelpBrowserTabManager(const QHelpEngine  *pHelpEngine, const QUrl &homeUrl,
     875UIHelpBrowserTabManager::UIHelpBrowserTabManager(const QHelpEngine  *pHelpEngine,
    890876                                                 const QStringList &urlList, QWidget *pParent /* = 0 */)
    891877    : QITabWidget(pParent)
    892878    , m_pHelpEngine(pHelpEngine)
    893     , m_homeUrl(homeUrl)
    894879    , m_savedUrlList(urlList)
    895880    , m_fSwitchToNewTab(true)
     
    913898    }
    914899#endif
    915     UIHelpBrowserTab *pTabWidget = new  UIHelpBrowserTab(m_pHelpEngine, m_homeUrl, initialUrl);
     900    UIHelpBrowserTab *pTabWidget = new  UIHelpBrowserTab(m_pHelpEngine, initialUrl);
    916901    AssertReturnVoid(pTabWidget);
    917902    pTabWidget->setToolBarVisible(m_fToolBarVisible);
     
    937922   connect(pTabWidget, &UIHelpBrowserTab::sigZoomRequest,
    938923            this, &UIHelpBrowserTabManager::sltHandleZoomRequest);
     924   connect(pTabWidget, &UIHelpBrowserTab::sigGoHome,
     925            this, &UIHelpBrowserTabManager::sigGoHome);
    939926
    940927   pTabWidget->setZoomPercentage(zoomPercentage());
     
    12261213
    12271214    menu.exec(tabBar()->mapToGlobal(pos));
    1228 }
    1229 
    1230 void UIHelpBrowserTabManager::sltHomeAction()
    1231 {
    1232     UIHelpBrowserTab *pTab = qobject_cast<UIHelpBrowserTab*>(currentWidget());
    1233     if (pTab)
    1234         pTab->sltHomeAction();
    12351215}
    12361216
     
    15051485    m_pHomeAction = new QAction(this);
    15061486    connect(m_pHomeAction, &QAction::triggered,
    1507             this, &UIHelpBrowserWidget::sigGoHome);
     1487            this, &UIHelpBrowserWidget::sltGoHome);
    15081488
    15091489    m_pReloadPageAction = new QAction(this);
     
    15261506    if (m_pTabManager)
    15271507    {
    1528         connect(m_pHomeAction, &QAction::triggered, m_pTabManager, &UIHelpBrowserTabManager::sltHomeAction);
     1508        connect(m_pHomeAction, &QAction::triggered, m_pTabManager, &UIHelpBrowserTabManager::sigGoHome);
    15291509        connect(m_pAddBookmarkAction, &QAction::triggered, m_pTabManager, &UIHelpBrowserTabManager::sltAddBookmarkAction);
    15301510        connect(m_pForwardAction, &QAction::triggered, m_pTabManager, &UIHelpBrowserTabManager::sltForwardAction);
     
    15421522    m_pHelpEngine = new QHelpEngine(m_strHelpFilePath, this);
    15431523    m_pBookmarksWidget = new UIBookmarksListContainer(this);
     1524
     1525    m_pContentWidget = m_pHelpEngine->contentWidget();
     1526    m_pIndexWidget = m_pHelpEngine->indexWidget();
     1527    m_pContentModel = m_pHelpEngine->contentModel();
     1528    AssertReturnVoid(m_pContentWidget && m_pIndexWidget && m_pContentModel);
     1529
    15441530    m_pTabWidget = new QITabWidget;
    1545     m_pTabManager = new UIHelpBrowserTabManager(m_pHelpEngine, findIndexHtml(), loadSavedUrlList());
     1531    m_pTabManager = new UIHelpBrowserTabManager(m_pHelpEngine, loadSavedUrlList());
    15461532    m_pTabManager->setHelpFileList(m_pHelpEngine->files(m_pHelpEngine->namespaceName(m_strHelpFilePath), QStringList()));
    1547 
    15481533    AssertReturnVoid(m_pTabWidget &&
    15491534                     m_pHelpEngine &&
     
    15511536                     m_pTabManager);
    15521537
    1553     m_pContentWidget = m_pHelpEngine->contentWidget();
    1554     m_pIndexWidget = m_pHelpEngine->indexWidget();
    1555     m_pContentModel = m_pHelpEngine->contentModel();
    1556 
    1557     AssertReturnVoid(m_pContentWidget && m_pIndexWidget && m_pContentModel);
    15581538    m_pSplitter->addWidget(m_pTabWidget);
    15591539    m_pContentWidget->setContextMenuPolicy(Qt::CustomContextMenu);
     
    15921572    connect(m_pTabManager, &UIHelpBrowserTabManager::sigMouseOverImage,
    15931573            this, &UIHelpBrowserWidget::sltMouseOverImage);
     1574    connect(m_pTabManager, &UIHelpBrowserTabManager::sigGoHome,
     1575            this, &UIHelpBrowserWidget::sltGoHome);
     1576
    15941577
    15951578    connect(m_pHelpEngine, &QHelpEngine::setupFinished,
     
    17521735QUrl UIHelpBrowserWidget::findIndexHtml() const
    17531736{
     1737    if (m_pHelpEngine && m_pHelpEngine->contentModel())
     1738    {
     1739        QModelIndex modelIndex = m_pHelpEngine->contentModel()->index(0, 0);
     1740        if (modelIndex.isValid())
     1741        {
     1742            QUrl url = contentWidgetUrl(modelIndex);
     1743            if (url.isValid())
     1744                return url;
     1745        }
     1746    }
    17541747    QList<QUrl> files = m_pHelpEngine->files(m_pHelpEngine->namespaceName(m_strHelpFilePath), QStringList());
    17551748    int iIndex = -1;
    17561749    for (int i = 0; i < files.size(); ++i)
    17571750    {
    1758         if (QString::compare(files[i].fileName(), "preface.html", Qt::CaseInsensitive) == 0)
     1751        if (files[i].toString().contains(".html", Qt::CaseInsensitive) ||
     1752            files[i].toString().contains(".htm", Qt::CaseInsensitive))
    17591753        {
    17601754            iIndex = i;
     
    17621756        }
    17631757    }
    1764     if (iIndex == -1)
    1765     {
    1766         /* If index html/htm could not be found try to find a html file at least: */
    1767         for (int i = 0; i < files.size(); ++i)
    1768         {
    1769             if (files[i].toString().contains(".html", Qt::CaseInsensitive) ||
    1770                 files[i].toString().contains(".htm", Qt::CaseInsensitive))
    1771             {
    1772                 iIndex = i;
    1773                 break;
    1774             }
    1775         }
    1776     }
     1758
    17771759    if (iIndex != -1 && files.size() > iIndex)
    17781760        return files[iIndex];
     
    17811763}
    17821764
    1783 QUrl UIHelpBrowserWidget::contentWidgetUrl(const QModelIndex &itemIndex)
     1765QUrl UIHelpBrowserWidget::contentWidgetUrl(const QModelIndex &itemIndex) const
    17841766{
    17851767    QHelpContentModel *pContentModel =
     
    19151897}
    19161898
     1899void UIHelpBrowserWidget::sltGoHome()
     1900{
     1901    QUrl homeUrl = findIndexHtml();
     1902    if (homeUrl.isValid() && m_pTabManager)
     1903        m_pTabManager->setSource(homeUrl);
     1904}
     1905
    19171906void UIHelpBrowserWidget::sltHistoryChanged(bool fBackwardAvailable, bool fForwardAvailable)
    19181907{
     
    19981987}
    19991988
     1989QModelIndex findItemByUrl(QHelpContentModel* model, const QModelIndex& parent, const QUrl& targetUrl)
     1990{
     1991    for (int row = 0; row < model->rowCount(parent); ++row)
     1992    {
     1993        QModelIndex index = model->index(row, 0, parent);
     1994        if (!index.isValid())
     1995            continue;
     1996        QHelpContentItem* item = model->contentItemAt(index);
     1997        if (!item)
     1998            continue;
     1999        if (item && item->url() == targetUrl)
     2000            return index;
     2001
     2002        QModelIndex childIndex = findItemByUrl(model, index, targetUrl);
     2003        if (childIndex.isValid())
     2004            return childIndex;
     2005    }
     2006
     2007    return QModelIndex();
     2008}
     2009
    20002010void UIHelpBrowserWidget::sltViewerSourceChange(const QUrl &source)
    20012011{
    20022012    if (m_fModelContentCreated && m_pContentWidget && source.isValid() && m_pContentModel)
    20032013    {
    2004         QModelIndex index = m_pContentWidget->indexOf(source);
    2005         QItemSelectionModel *pSelectionModel = m_pContentWidget->selectionModel();
    2006         if (pSelectionModel && index.isValid())
     2014        QModelIndex index = findItemByUrl(m_pContentModel, QModelIndex(), source);
     2015        if (index.isValid())
    20072016        {
    20082017            m_pContentWidget->blockSignals(true);
    2009             pSelectionModel->select(index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
     2018            m_pContentWidget->setCurrentIndex(index);
    20102019            m_pContentWidget->scrollTo(index, QAbstractItemView::EnsureVisible);
    20112020            m_pContentWidget->expand(index);
  • trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.h

    r107001 r107759  
    6767    void sigGoBackward();
    6868    void sigGoForward();
    69     void sigGoHome();
    7069    void sigReloadPage();
    7170    void sigAddBookmark();
     
    122121    void sltRetranslateUI();
    123122    void sltCommitDataSignalReceived();
     123    void sltGoHome();
    124124
    125125private:
     
    142142    QUrl findIndexHtml() const;
    143143    /* Returns the url of the item with @p itemIndex. */
    144     QUrl contentWidgetUrl(const QModelIndex &itemIndex);
     144    QUrl contentWidgetUrl(const QModelIndex &itemIndex) const;
    145145    void openLinkSlotHandler(QObject *pSenderObject, bool fOpenInNewTab);
    146146    void updateTabsMenu(const QStringList &titleList);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette