VirtualBox

Changeset 86813 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Nov 5, 2020 4:00:00 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
141255
Message:

FE/Qt: bugref:9831. Find in page widget can be dragged

File:
1 edited

Legend:

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

    r86812 r86813  
    141141
    142142    void retranslateUi();
     143    bool isRectInside(const QRect &rect, int iMargin) const;
     144    void moveFindWidgetIn(int iMargin);
    143145    const QHelpEngine* m_pHelpEngine;
     146
    144147    UIFindInPageWidget *m_pFindInPageWidget;
    145148    /* Initilized as false and set to true once the find widget is positioned during first resize. */
    146149    bool m_fFindWidgetPositioned;
     150    const int m_iMarginForFindWidget;
    147151};
    148152
     
    556560    , m_pFindInPageWidget(new UIFindInPageWidget(this))
    557561    , m_fFindWidgetPositioned(false)
     562    , m_iMarginForFindWidget(qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin))
    558563{
    559564    connect(m_pFindInPageWidget, &UIFindInPageWidget::sigDragging,
     
    604609void UIHelpBrowserViewer::paintEvent(QPaintEvent *pEvent)
    605610{
    606     // if (m_pFindInPageWidget)
    607     // {
    608     //     m_pFindInPageWidget->show();
    609     //     m_pFindInPageWidget->update();
    610     // }
    611611    QIWithRetranslateUI<QTextBrowser>::paintEvent(pEvent);
    612612}
     
    614614void UIHelpBrowserViewer::resizeEvent(QResizeEvent *pEvent)
    615615{
    616     printf("resize %d\n", width());
    617     if (m_pFindInPageWidget && !m_fFindWidgetPositioned)
    618     {
    619         m_pFindInPageWidget->move(width() - m_pFindInPageWidget->width() - 50, 10);
    620         m_fFindWidgetPositioned = true;
     616    if (m_pFindInPageWidget)
     617    {
     618        if (!m_fFindWidgetPositioned)
     619        {
     620            m_pFindInPageWidget->move(width() - m_pFindInPageWidget->width() - 50, 0);
     621            m_fFindWidgetPositioned = true;
     622        }
     623        else
     624            if (!isRectInside(m_pFindInPageWidget->geometry(), m_iMarginForFindWidget))
     625                moveFindWidgetIn(m_iMarginForFindWidget);
    621626    }
    622627    QIWithRetranslateUI<QTextBrowser>::resizeEvent(pEvent);
     
    626631void UIHelpBrowserViewer::retranslateUi()
    627632{
     633}
     634
     635void UIHelpBrowserViewer::moveFindWidgetIn(int iMargin)
     636{
     637    if (!m_pFindInPageWidget)
     638        return;
     639
     640    QRect  rect = m_pFindInPageWidget->geometry();
     641    if (rect.left() < iMargin)
     642        rect.translate(-rect.left() + iMargin, 0);
     643    if (rect.right() > width() - iMargin)
     644        rect.translate((width() - iMargin - rect.right()), 0);
     645    if (rect.top() < iMargin)
     646        rect.translate(0, -rect.top() + iMargin);
     647
     648    if (rect.bottom() > height() - iMargin)
     649        rect.translate(0, (height() - iMargin - rect.bottom()));
     650    m_pFindInPageWidget->setGeometry(rect);
     651}
     652
     653 bool UIHelpBrowserViewer::isRectInside(const QRect &rect, int iMargin) const
     654{
     655    if (rect.left() < iMargin || rect.top() < iMargin)
     656        return false;
     657    if (rect.right() > width() - iMargin || rect.bottom() > height() - iMargin)
     658        return false;
     659    return true;
    628660}
    629661
     
    644676    QRect geo = m_pFindInPageWidget->geometry();
    645677    geo.translate(delta);
    646     int margin = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin);
    647     bool fIn = true;
    648     if (geo.left() < margin || geo.top() < margin)
    649         fIn = false;
    650     if (geo.right() > width() - margin || geo.bottom() > height() - margin)
    651         fIn = false;
    652     if (fIn)
     678
     679    /* Allow the move if m_pFindInPageWidget stays inside after the move: */
     680    if (isRectInside(geo, m_iMarginForFindWidget))
    653681        m_pFindInPageWidget->move(m_pFindInPageWidget->pos() + delta);
    654682    update();
Note: See TracChangeset for help on using the changeset viewer.

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