VirtualBox

Changeset 80203 in vbox for trunk/src


Ignore:
Timestamp:
Aug 9, 2019 6:08:55 AM (5 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref: 9510: Adding axis labels

Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime/information
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIPerformanceMonitor.cpp

    r80193 r80203  
    3838
    3939const ULONG iPeriod = 1;
    40 const int iMaximumQueueSize = 100;
     40const int iMaximumQueueSize = 120;
    4141const int iMetricSetupCount = 1;
    4242
     
    8080    QSize m_size;
    8181    QFont m_font;
    82     int m_iMargin;
     82    int m_iMarginLeft;
     83    int m_iMarginRight;
     84    int m_iMarginTop;
     85    int m_iMarginBottom;
    8386    QStringList m_textList;
    8487    int m_iPieChartSize;
     
    105108    m_dataSeriesColor[1] = QColor(Qt::blue);
    106109
    107     m_iMargin = qApp->QApplication::style()->pixelMetric(QStyle::PM_LayoutTopMargin);
     110    m_iMarginLeft = 1 * qApp->QApplication::style()->pixelMetric(QStyle::PM_LayoutTopMargin);
     111    m_iMarginRight = 4 * qApp->QApplication::style()->pixelMetric(QStyle::PM_LayoutTopMargin);
     112    m_iMarginTop = 0.3 * qApp->QApplication::style()->pixelMetric(QStyle::PM_LayoutTopMargin);
     113    m_iMarginBottom = 2 * qApp->QApplication::style()->pixelMetric(QStyle::PM_LayoutTopMargin);
    108114    m_iPieChartSize = 1.5f * qApp->style()->pixelMetric(QStyle::PM_LargeIconSize);
    109     m_pieChartRect = QRect(1.5 * m_iMargin, 1.5 * m_iMargin, m_iPieChartSize, m_iPieChartSize);
    110     m_size = QSize(6 * m_iPieChartSize, 1.8 * m_iPieChartSize);
     115    m_pieChartRect = QRect(1.5 * m_iMarginLeft, 1.5 * m_iMarginTop, m_iPieChartSize, m_iPieChartSize);
     116    m_size = QSize(6 * m_iPieChartSize, 2 * m_iPieChartSize);
    111117}
    112118
     
    214220        do{
    215221            int iWidth = QFontMetrics(m_font).width(strText);
    216             if (iWidth + 2 * m_iMargin > m_size.width())
     222            if (iWidth + m_iMarginLeft + m_iMarginRight > m_size.width())
    217223                --iFontSize;
    218224            else
     
    230236
    231237    /* Draw a rectanglar grid over which we will draw the line graphs: */
    232     float fChartHeight = height() - 2 * m_iMargin;
    233     float fChartWidth = width() - 2 * m_iMargin;
    234     painter.setPen(QColor(120, 120, 120));
    235     painter.drawRect(QRect(m_iMargin, m_iMargin, fChartWidth, fChartHeight));
     238    int iChartHeight = height() - (m_iMarginTop + m_iMarginBottom);
     239    int iChartWidth = width() - (m_iMarginLeft + m_iMarginRight);
     240    QColor mainAxisColor(120, 120, 120);
     241    painter.setPen(mainAxisColor);
     242    painter.drawRect(QRect(m_iMarginLeft, m_iMarginTop, iChartWidth, iChartHeight));
    236243    painter.setPen(QColor(200, 200, 200));
    237     int iYParts = 4;
    238     for (int i = 1; i < iYParts; ++i)
    239         painter.drawLine(m_iMargin, m_iMargin + i *fChartHeight / (float)iYParts, width() - m_iMargin, m_iMargin + i * fChartHeight / (float)iYParts);
    240     int iXParts = 5;
    241     for (int i = 1; i < iXParts; ++i)
    242         painter.drawLine(m_iMargin + i * fChartWidth / (float)iXParts, m_iMargin, m_iMargin + i * fChartWidth / (float)iXParts, height() - m_iMargin);
    243 
     244    /* Y subaxes: */
     245    int iYSubAxisCount = 3;
     246    for (int i = 0; i < iYSubAxisCount; ++i)
     247    {
     248        float fSubAxisY = m_iMarginTop + (i + 1) * iChartHeight / (float) (iYSubAxisCount + 1);
     249        painter.drawLine(m_iMarginLeft, fSubAxisY,
     250                         width() - m_iMarginRight, fSubAxisY);
     251    }
     252    /* X subaxes: */
     253    int iXSubAxisCount = 5;
     254    for (int i = 0; i < iXSubAxisCount; ++i)
     255    {
     256        float fSubAxisX = m_iMarginLeft + (i + 1) * iChartWidth / (float) (iXSubAxisCount + 1);
     257        painter.drawLine(fSubAxisX, m_iMarginTop, fSubAxisX, height() - m_iMarginBottom);
     258    }
     259    /* Draw XAxis tick labels: */
     260    painter.setPen(mainAxisColor);
     261    int iTotalSeconds = iPeriod * iMaximumQueueSize;
     262    QFontMetrics fontMetrics(painter.font());
     263    int iFontHeight = fontMetrics.height();
     264    for (int i = 0; i < iXSubAxisCount + 2; ++i)
     265    {
     266        int iTextX = m_iMarginLeft + i * iChartWidth / (float) (iXSubAxisCount + 1);
     267        QString strCurentSec = QString::number(iTotalSeconds - i * iTotalSeconds / (float)(iXSubAxisCount + 1));
     268        int iTextWidth = fontMetrics.width(strCurentSec);
     269        if (i == 0)
     270        {
     271            strCurentSec += " seconds";
     272            painter.drawText(iTextX, height() - m_iMarginBottom + iFontHeight, strCurentSec);
     273        }
     274        else
     275            painter.drawText(iTextX - 0.5 * iTextWidth, height() - m_iMarginBottom + iFontHeight, strCurentSec);
     276    }
    244277
    245278    /* Draw a half-transparent rectangle over the whole widget to indicate the it is disabled: */
     
    255288
    256289    ULONG iMaximum = m_pSubMetric->maximum();
    257     if (m_pSubMetric->isPercentage())
    258         iMaximum = 100;
    259290    if (iMaximum == 0)
    260291        return;
    261 
     292    /* Draw the data lines: */
    262293    if (isEnabled())
    263294    {
    264         float fBarWidth = fChartWidth / (float) (iMaximumQueueSize - 1);
    265         float fH = fChartHeight / (float)iMaximum;
     295        float fBarWidth = iChartWidth / (float) (iMaximumQueueSize - 1);
     296        float fH = iChartHeight / (float)iMaximum;
    266297        if (m_fUseGradientLineColor)
    267298        {
    268             QLinearGradient gradient(0, 0, 0, fChartHeight);
     299            QLinearGradient gradient(0, 0, 0, iChartHeight);
    269300            gradient.setColorAt(1.0, Qt::green);
    270301            gradient.setColorAt(0.0, Qt::red);
     
    280311                int j = i + 1;
    281312                float fHeight = fH * data->at(i);
    282                 float fX = (width() - m_iMargin) - ((data->size() -i - 1) * fBarWidth);
     313                float fX = (width() - m_iMarginRight) - ((data->size() -i - 1) * fBarWidth);
    283314                float fHeight2 = fH * data->at(j);
    284                 float fX2 = (width() - m_iMargin) - ((data->size() -j - 1) * fBarWidth);
    285                 QLineF bar(fX, height() - (fHeight + m_iMargin), fX2, height() - (fHeight2 + m_iMargin));
     315                float fX2 = (width() - m_iMarginRight) - ((data->size() -j - 1) * fBarWidth);
     316                QLineF bar(fX, height() - (fHeight + m_iMarginBottom), fX2, height() - (fHeight2 + m_iMarginBottom));
    286317                painter.drawLine(bar);
    287318            }
    288319        }
     320    }
     321
     322    /* Draw YAxis tick labels: */
     323    painter.setPen(mainAxisColor);
     324    for (int i = 1; i < iYSubAxisCount + 2; ++i)
     325    {
     326
     327        int iTextY = m_iMarginTop + i * iChartHeight / (float) (iYSubAxisCount + 1);
     328        QString strValue;
     329        ULONG iValue = iMaximum - (i +1) * iMaximum / (float) (iYSubAxisCount + 2);
     330        if (m_pSubMetric->unit().compare("%", Qt::CaseInsensitive) == 0)
     331            strValue = QString::number(iValue);
     332        else if (m_pSubMetric->unit().compare("kb", Qt::CaseInsensitive) == 0)
     333            strValue = uiCommon().formatSize(_1K * (quint64)iValue);
     334        else if (m_pSubMetric->unit().compare("b", Qt::CaseInsensitive) == 0 ||
     335                 m_pSubMetric->unit().compare("b/s", Qt::CaseInsensitive) == 0)
     336            strValue = uiCommon().formatSize(iValue);
     337
     338        // QString strCurentSec = QString::number(iTotalSeconds - i * iTotalSeconds / (float)(iXSubAxisCount + 1));
     339        // int iTextWidth = fontMetrics.width(strCurentSec);
     340        // if (i == 0)
     341        // {
     342        //     strCurentSec += " seconds";
     343        //     painter.drawText(iTextX, height() - m_iMarginBottom + iFontHeight, strCurentSec);
     344        // }
     345        // else
     346        //     painter.drawText(iTextX - 0.5 * iTextWidth, height() - m_iMarginBottom + iFontHeight, strCurentSec);
     347        painter.drawText(width() - 0.9 * m_iMarginRight, iTextY, strValue);
    289348    }
    290349
     
    344403    , m_fRequiresGuestAdditions(false)
    345404{
    346     if (isPercentage())
    347         m_iMaximum = 100;
    348405}
    349406
     
    392449        return 0;
    393450    return &m_data[iDataSeriesIndex];
    394 }
    395 
    396 bool UISubMetric::isPercentage() const
    397 {
    398     return m_strUnit == "%";
    399451}
    400452
     
    655707    UISubMetric &CPUMetric = m_subMetrics[m_strCPUMetricName];
    656708    CPUMetric.addData(0, iLoadPercentage);
     709    CPUMetric.setMaximum(100);
    657710    if (m_infoLabels.contains(m_strCPUMetricName) && m_infoLabels[m_strCPUMetricName])
    658711    {
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIPerformanceMonitor.h

    r80187 r80203  
    6262    void addData(int iDataSeriesIndex, ULONG fData);
    6363    const QQueue<ULONG> *data(int iDataSeriesIndex) const;
    64 
    65     bool isPercentage() const;
    6664
    6765    bool requiresGuestAdditions() const;
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