VirtualBox

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


Ignore:
Timestamp:
Dec 19, 2023 2:13:43 PM (14 months ago)
Author:
vboxsync
Message:

FE/Qt: bugref:10501. Implementing a better tooltip widget.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/activity/vmactivity/UIVMActivityMonitor.cpp

    r102635 r102641  
    6666const int g_iMetricSetupCount = 1;
    6767const int g_iDecimalCount = 2;
     68
     69const int g_iBackgroundTint = 104;
    6870
    6971
     
    246248    int m_iRightMarginCharWidth;
    247249    int m_iMaximumQueueSize;
     250    QLabel *m_pMouseOverLabel;
    248251};
    249252
     
    327330    , m_iRightMarginCharWidth(10)
    328331    , m_iMaximumQueueSize(iMaximumQueueSize)
    329 {
     332    , m_pMouseOverLabel(0)
     333{
     334    QPalette tempPal = palette();
     335    tempPal.setColor(QPalette::Window, tempPal.color(QPalette::Window).lighter(g_iBackgroundTint));
     336    setPalette(tempPal);
     337    setAutoFillBackground(true);
     338
    330339    setToolTipDuration(-1);
    331340    m_axisFont = font();
     
    341350    m_iMarginLeft = 3 * QFontMetricsF(m_axisFont).averageCharWidth();
    342351    m_iMarginRight = m_iRightMarginCharWidth * QFontMetricsF(m_axisFont).averageCharWidth();
    343     m_iMarginTop = 0.3 * qApp->QApplication::style()->pixelMetric(QStyle::PM_LayoutTopMargin);
     352    m_iMarginTop = QFontMetrics(m_axisFont).height();
    344353    m_iMarginBottom = QFontMetrics(m_axisFont).height();
    345354
     
    349358    m_iPieChartRadius = m_size.height() - (m_iMarginTop + m_iMarginBottom + 2 * m_iPieChartSpacing);
    350359
     360    m_pMouseOverLabel = new QLabel(this);
     361    m_pMouseOverLabel->hide();
     362    m_pMouseOverLabel->setFrameStyle(QFrame::Box);
     363    m_pMouseOverLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
     364    m_pMouseOverLabel->setAutoFillBackground(true);
     365    m_pMouseOverLabel->setMargin(0.1 * QStyle::PM_HeaderMargin);
    351366    retranslateUi();
    352367}
     
    496511    if (pEvent->type() == QEvent::Leave)
    497512    {
     513        if (m_pMouseOverLabel)
     514            m_pMouseOverLabel->setVisible(false);
    498515        m_iDataIndexUnderCursor = -1;
    499516        emit sigDataIndexUnderCursor(m_iDataIndexUnderCursor);
     
    502519    {
    503520        QHelpEvent *pToolTipEvent = static_cast<QHelpEvent *>(pEvent);
    504         if (m_iDataIndexUnderCursor == -1)
    505             QToolTip::hideText();
    506         else
    507             QToolTip::showText(pToolTipEvent->globalPos(), toolTipText(), this, m_lineChartRect);
     521        // if (m_iDataIndexUnderCursor == -1)
     522        //     QToolTip::hideText();
     523        // else
     524        //     QToolTip::showText(pToolTipEvent->globalPos(), toolTipText(), this, m_lineChartRect);
     525        if (m_pMouseOverLabel)
     526        {
     527            if (m_iDataIndexUnderCursor == -1)
     528                m_pMouseOverLabel->setVisible(false);
     529            else
     530            {
     531                m_pMouseOverLabel->setText(toolTipText());
     532
     533                //m_pMouseOverLabel->resize(m_pMouseOverLabel->fontMetrics().size(Qt::TextSingleLine, m_pMouseOverLabel->text()));
     534                m_pMouseOverLabel->move(QPoint(pToolTipEvent->pos().x(), pToolTipEvent->pos().y() - m_pMouseOverLabel->height()));
     535                m_pMouseOverLabel->setVisible(true);
     536            }
     537        }
     538
    508539
    509540    }
     
    666697            painter.setPen(mainAxisColor);
    667698            float fX = (width() - m_iMarginRight) - ((data->size() - m_iDataIndexUnderCursor - 1) * fBarWidth);
    668             painter.drawLine(fX, 0, fX, height() - m_iMarginBottom);
     699            painter.drawLine(fX, m_iMarginTop, fX, height() - m_iMarginBottom);
    669700        }
    670701    }
     
    790821    if (m_iDataIndexUnderCursor == -1)
    791822        return QString();
    792     QStringList toolTipStrings;
    793     for (int k = 0; k < DATA_SERIES_SIZE; ++k)
    794     {
    795         const QQueue<quint64> *data = m_pMetric->data(k);
    796         if (data && data->size() > 0 && m_iDataIndexUnderCursor < data->size())
    797             toolTipStrings << YAxisValueLabel(data->at(m_iDataIndexUnderCursor));
    798     }
    799     return toolTipStrings.join(" / ");
     823
     824    if (!m_pMetric->data(0) ||  m_pMetric->data(0)->isEmpty())
     825        return QString();
     826    QString strToolTip;
     827    if (m_pMetric->data(1) &&  !m_pMetric->data(1)->isEmpty())
     828    {
     829        strToolTip = QString("<font color=\"%1\">%2</font> / <font color=\"%3\">%4</font>")
     830            .arg(m_dataSeriesColor[0].name(QColor::HexRgb)).arg(YAxisValueLabel(m_pMetric->data(0)->at(m_iDataIndexUnderCursor)))
     831            .arg(m_dataSeriesColor[1].name(QColor::HexRgb)).arg(YAxisValueLabel(m_pMetric->data(1)->at(m_iDataIndexUnderCursor)));
     832    }
     833    else
     834    {
     835        strToolTip = QString("<font color=\"%1\">%2</font>")
     836            .arg(m_dataSeriesColor[0].name(QColor::HexRgb)).arg(YAxisValueLabel(m_pMetric->data(0)->at(m_iDataIndexUnderCursor)));
     837    }
     838    return strToolTip;
     839    //m_dataSeriesColor[iDataIndex]);
     840    // return pChart->dataSeriesColor(iDataIndex).name(QColor::HexRgb);
     841    // QColor dataSeriesColor(int iDataSeriesIndex, int iDark = 0);
     842    //QString strInfo = QString("<b>%1</b></b><br/> <font color=\"%2\">%3: %4</font><br/> <font color=\"%5\">%6: %7</font>")
     843
     844    // QStringList toolTipStrings;
     845    // for (int k = 0; k < DATA_SERIES_SIZE; ++k)
     846    // {
     847    //     const QQueue<quint64> *data = m_pMetric->data(k);
     848    //     if (data && data->size() > 0 && m_iDataIndexUnderCursor < data->size())
     849    //         toolTipStrings << YAxisValueLabel(data->at(m_iDataIndexUnderCursor));
     850    // }
     851    // return toolTipStrings.join(" / ");
     852    //QString strInfo = QString("<b>%1</b></b><br/> <font color=\"%2\">%3: %4</font><br/> <font color=\"%5\">%6: %7</font>")
    800853}
    801854
     
    11911244
    11921245        QLabel *pLabel = new QLabel(this);
    1193         pLabel->setAlignment(Qt::AlignLeft | Qt::AlignTop);
     1246
     1247        QPalette tempPal = pLabel->palette();
     1248        tempPal.setColor(QPalette::Window, tempPal.color(QPalette::Window).lighter(g_iBackgroundTint));
     1249        pLabel->setPalette(tempPal);
     1250        pLabel->setAutoFillBackground(true);
     1251
     1252        pLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
    11941253        pChartLayout->addWidget(pLabel);
    11951254        m_infoLabels.insert(strMetricName, pLabel);
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