VirtualBox

Changeset 104922 in vbox


Ignore:
Timestamp:
Jun 14, 2024 3:13:48 PM (10 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
163524
Message:

FE/Qt. bugref:10659. Updating cell data of local guests. part 1.

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk

    r104916 r104922  
    10201020        src/manager/chooser/UIChooserAbstractModel.cpp \
    10211021        src/activity/overview/UIVMActivityOverviewWidget.cpp \
     1022        src/activity/overview/UIVMActivityOverviewModelView.cpp \
    10221023        src/networkmanager/UINetworkManager.cpp \
    10231024        src/snapshots/UISnapshotDetailsWidget.cpp \
  • trunk/src/VBox/Frontends/VirtualBox/src/activity/overview/UIVMActivityOverviewModelView.cpp

    r104916 r104922  
    2828/* Qt includes: */
    2929#include <QHeaderView>
    30 
     30#include <QTimer>
    3131
    3232/* GUI includes: */
     33#include "UICommon.h"
    3334#include "UIExtraDataDefs.h"
    3435#include "UIGlobalSession.h"
     36#include "UIVirtualBoxEventHandler.h"
    3537#include "UIVMActivityOverviewModelView.h"
    3638
     
    4143
    4244/* COM includes: */
     45#include "CConsole.h"
     46#include "CGuest.h"
    4347#include "CMachine.h"
     48#include "CMachineDebugger.h"
     49#include "CSession.h"
     50
     51class UIActivityOverviewAccessibleRowLocal : public UIActivityOverviewAccessibleRow
     52{
     53
     54    Q_OBJECT;
     55
     56public:
     57
     58    UIActivityOverviewAccessibleRowLocal(QITableView *pTableView, const QUuid &uMachineId,
     59                                         const QString &strMachineName, KMachineState enmMachineState);
     60    ~UIActivityOverviewAccessibleRowLocal();
     61    virtual void setMachineState(int iState) RT_OVERRIDE RT_FINAL;
     62
     63    virtual bool isRunning() const RT_OVERRIDE RT_FINAL;
     64    virtual bool isCloudVM() const RT_OVERRIDE RT_FINAL;
     65    void resetDebugger();
     66    void updateCells();
     67
     68private:
     69
     70    KMachineState    m_enmMachineState;
     71    CMachineDebugger m_comDebugger;
     72    CSession         m_comSession;
     73    CGuest           m_comGuest;
     74};
     75
     76UIActivityOverviewAccessibleRowLocal::UIActivityOverviewAccessibleRowLocal(QITableView *pTableView, const QUuid &uMachineId,
     77                                                                           const QString &strMachineName, KMachineState enmMachineState)
     78    : UIActivityOverviewAccessibleRow(pTableView, uMachineId, strMachineName)
     79    , m_enmMachineState(enmMachineState)
     80{
     81    if (m_enmMachineState == KMachineState_Running)
     82        resetDebugger();
     83
     84}
     85
     86void UIActivityOverviewAccessibleRowLocal::updateCells()
     87{
     88    // if (m_cells.contains((int) VMActivityOverviewColumn_Name))
     89    // {
     90    //     m_cells[(int)VMActivityOverviewColumn_Name]->setText(m_strMachineName);
     91    // }
     92}
     93
     94UIActivityOverviewAccessibleRowLocal::~UIActivityOverviewAccessibleRowLocal()
     95{
     96    if (!m_comSession.isNull())
     97        m_comSession.UnlockMachine();
     98}
     99
     100void UIActivityOverviewAccessibleRowLocal::resetDebugger()
     101{
     102    m_comSession = uiCommon().openSession(m_uMachineId, KLockType_Shared);
     103    if (!m_comSession.isNull())
     104    {
     105        CConsole comConsole = m_comSession.GetConsole();
     106        if (!comConsole.isNull())
     107        {
     108            m_comGuest = comConsole.GetGuest();
     109            m_comDebugger = comConsole.GetDebugger();
     110        }
     111    }
     112}
     113
     114void UIActivityOverviewAccessibleRowLocal::setMachineState(int iState)
     115{
     116    if (iState <= KMachineState_Null || iState >= KMachineState_Max)
     117        return;
     118    KMachineState enmState = static_cast<KMachineState>(iState);
     119    if (m_enmMachineState == enmState)
     120        return;
     121    m_enmMachineState = enmState;
     122    if (m_enmMachineState == KMachineState_Running)
     123        resetDebugger();
     124}
     125
     126bool UIActivityOverviewAccessibleRowLocal::isRunning() const
     127{
     128    return m_enmMachineState == KMachineState_Running;
     129}
     130
     131bool UIActivityOverviewAccessibleRowLocal::isCloudVM() const
     132{
     133    return false;
     134}
    44135
    45136
     
    84175    :QAbstractTableModel(pParent)
    85176    , m_pTableView(pView)
     177    , m_pLocalVMUpdateTimer(new QTimer(this))
    86178{
    87179    initialize();
     
    91183{
    92184    qDeleteAll(m_rows);
     185}
     186
     187void UIActivityOverviewAccessibleModel::setShouldUpdate(bool fShouldUpdate)
     188{
     189    if (m_pLocalVMUpdateTimer)
     190    {
     191        if (fShouldUpdate)
     192            m_pLocalVMUpdateTimer->start();
     193        else
     194            m_pLocalVMUpdateTimer->stop();
     195    }
    93196}
    94197
     
    109212}
    110213
    111 QVariant UIActivityOverviewAccessibleModel::data(const QModelIndex &/*index*/, int role) const
    112 {
     214QVariant UIActivityOverviewAccessibleModel::data(const QModelIndex &index, int role) const
     215{
     216    int iRow = index.row();
     217    if (iRow < 0 || iRow >= m_rows.size())
     218        return QVariant();
     219    if (!m_rows[iRow])
     220        return QVariant();
     221
    113222    if (role == Qt::DisplayRole)
    114         return "Foo";
     223    {
     224        return m_rows[iRow]->cellText(index.column());
     225
     226    }
    115227    return QVariant();
    116228}
     
    118230void UIActivityOverviewAccessibleModel::initialize()
    119231{
     232    for (int i = 0; i < (int)VMActivityOverviewColumn_Max; ++i)
     233        m_columnDataMaxLength[i] = 0;
     234
     235    if (m_pLocalVMUpdateTimer)
     236    {
     237        connect(m_pLocalVMUpdateTimer, &QTimer::timeout, this, &UIActivityOverviewAccessibleModel::sltLocalVMUpdateTimeout);
     238        m_pLocalVMUpdateTimer->start(1000);
     239    }
     240
     241    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigMachineStateChange,
     242            this, &UIActivityOverviewAccessibleModel::sltMachineStateChanged);
     243    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigMachineRegistered,
     244            this, &UIActivityOverviewAccessibleModel::sltMachineRegistered);
    120245    foreach (const CMachine &comMachine, gpGlobalSession->virtualBox().GetMachines())
    121246    {
     
    128253{
    129254    //QVector<UIActivityOverviewAccessibleRow*> m_rows;
    130     m_rows << new UIActivityOverviewAccessibleRow(m_pTableView, uMachineId, strMachineName, enmState);
     255    m_rows << new UIActivityOverviewAccessibleRowLocal(m_pTableView, uMachineId, strMachineName, enmState);
    131256}
    132257
     
    141266{
    142267    m_columnTitles = captions;
     268}
     269
     270
     271void UIActivityOverviewAccessibleModel::sltMachineStateChanged(const QUuid &uId, const KMachineState state)
     272{
     273    int iIndex = itemIndex(uId);
     274    if (iIndex != -1 && iIndex < m_rows.size())
     275    {
     276        UIActivityOverviewAccessibleRowLocal *pItem = qobject_cast<UIActivityOverviewAccessibleRowLocal*>(m_rows[iIndex]);
     277        if (pItem)
     278        {
     279            pItem->setMachineState(state);
     280            if (state == KMachineState_Running)
     281                pItem->resetDebugger();
     282        }
     283    }
     284}
     285
     286void UIActivityOverviewAccessibleModel::sltMachineRegistered(const QUuid &uId, bool fRegistered)
     287{
     288    if (fRegistered)
     289    {
     290        CMachine comMachine = gpGlobalSession->virtualBox().FindMachine(uId.toString());
     291        if (!comMachine.isNull())
     292            addRow(uId, comMachine.GetName(), comMachine.GetState());
     293    }
     294    else
     295        removeRow(uId);
     296    emit sigDataUpdate();
     297}
     298
     299void UIActivityOverviewAccessibleModel::sltLocalVMUpdateTimeout()
     300{
     301    /* Host's RAM usage is obtained from IHost not from IPerformanceCollector: */
     302    //getHostRAMStats();
     303
     304    /* Use IPerformanceCollector to update VM RAM usage and Host CPU and file IO stats: */
     305    //queryPerformanceCollector();
     306
     307    for (int i = 0; i < m_rows.size(); ++i)
     308    {
     309        UIActivityOverviewAccessibleRowLocal *pItem = qobject_cast<UIActivityOverviewAccessibleRowLocal*>(m_rows[i]);
     310        if (!pItem || !pItem->isRunning())
     311            continue;
     312        pItem->updateCells();
     313    }
     314
     315    // for (int i = 0; i < (int)VMActivityOverviewColumn_Max; ++i)
     316    // {
     317    //     for (int j = 0; j < m_rows.size(); ++j)
     318    //         if (m_columnDataMaxLength.value(i, 0) < m_rows[j]->columnLength(i))
     319    //             m_columnDataMaxLength[i] = m_rows[j]->columnLength(i);
     320    // }
     321
     322    emit sigDataUpdate();
     323    //emit sigHostStatsUpdate(m_hostStats);
     324}
     325
     326int UIActivityOverviewAccessibleModel::itemIndex(const QUuid &uid)
     327{
     328    for (int i = 0; i < m_rows.size(); ++i)
     329    {
     330        if (!m_rows[i])
     331            continue;
     332        if (m_rows[i]->machineId() == uid)
     333            return i;
     334    }
     335    return -1;
     336}
     337
     338void UIActivityOverviewAccessibleModel::removeRow(const QUuid& uMachineId)
     339{
     340    int iIndex = itemIndex(uMachineId);
     341    if (iIndex == -1)
     342        return;
     343    delete m_rows[iIndex];
     344    m_rows.remove(iIndex);
    143345}
    144346
     
    157359*********************************************************************************************************************************/
    158360
    159 UIActivityOverviewAccessibleRow::UIActivityOverviewAccessibleRow(QITableView *pTableView, const QUuid &machineId,
    160                                                                  const QString &strMachineName, KMachineState enmMachineState)
     361UIActivityOverviewAccessibleRow::UIActivityOverviewAccessibleRow(QITableView *pTableView, const QUuid &uMachineId,
     362                                                                 const QString &strMachineName)
    161363    : QITableViewRow(pTableView)
    162     , m_machineId(machineId)
     364    , m_uMachineId(uMachineId)
    163365    , m_strMachineName(strMachineName)
    164     , m_enmMachineState(enmMachineState)
    165 
    166366{
    167367    initCells();
     
    175375QITableViewCell *UIActivityOverviewAccessibleRow::childItem(int iIndex) const
    176376{
    177     if (iIndex < 0 || iIndex >= m_cells.size())
    178         return 0;
    179     return m_cells[iIndex];
     377    return m_cells.value(iIndex, 0);
     378}
     379
     380QString UIActivityOverviewAccessibleRow::cellText(int iColumn) const
     381{
     382    if (!m_cells.contains(iColumn))
     383        return QString();
     384    if (!m_cells[iColumn])
     385        return QString();
     386    return m_cells[iColumn]->text();
    180387}
    181388
     
    188395{
    189396    for (int i = (int) VMActivityOverviewColumn_Name; i < (int) VMActivityOverviewColumn_Max; ++i)
    190     {
    191         m_cells << new UIActivityOverviewAccessibleCell(this, i);
    192     }
     397        m_cells[i] = new UIActivityOverviewAccessibleCell(this, i);
     398    m_cells[VMActivityOverviewColumn_Name]->setText(m_strMachineName);
     399}
     400
     401const QUuid &UIActivityOverviewAccessibleRow::machineId() const
     402{
     403    return m_uMachineId;
    193404}
    194405
     
    206417QString UIActivityOverviewAccessibleCell::text() const
    207418{
    208     return "Foo";
    209 }
     419    return m_strText;
     420}
     421
     422int UIActivityOverviewAccessibleCell::columnLength(int iColumnIndex) const
     423{
     424    return 0;
     425    //return m_columnData.value(iColumnIndex, QString()).length();
     426}
     427
     428void UIActivityOverviewAccessibleCell::setText(const QString &strText)
     429{
     430    printf("%s\n", qPrintable(strText));
     431    m_strText = strText;
     432}
     433
     434#include "UIVMActivityOverviewModelView.moc"
  • trunk/src/VBox/Frontends/VirtualBox/src/activity/overview/UIVMActivityOverviewModelView.h

    r104916 r104922  
    4242/* COM includes: */
    4343#include "KMachineState.h"
     44
     45class QTimer;
    4446class UIActivityOverviewAccessibleCell;
    4547class UIActivityOverviewAccessibleRow;
     
    9092    UIActivityOverviewAccessibleCell(QITableViewRow *pRow, int iColumnIndex);
    9193    virtual QString text() const RT_OVERRIDE RT_FINAL;
     94    int columnLength(int iColumnIndex) const;
     95    void setText(const QString &strText);
    9296
    9397private:
     
    9599    /* VMActivityOverviewColumn enum: */
    96100    int m_iColumnIndex;
    97 
     101    QString m_strText;
    98102};
    99103
     
    105109public:
    106110
    107     UIActivityOverviewAccessibleRow(QITableView *pTableView, const QUuid &machineId,
    108                                     const QString &strMachineName, KMachineState enmMachineState);
     111    UIActivityOverviewAccessibleRow(QITableView *pTableView, const QUuid &uMachineId,
     112                                    const QString &strMachineName);
    109113
     114    const QUuid &machineId() const;
    110115
     116    virtual void setMachineState(int iState) = 0;
     117    virtual bool isRunning() const = 0;
     118    virtual bool isCloudVM() const = 0;
    111119
    112     ~UIActivityOverviewAccessibleRow();
     120    virtual ~UIActivityOverviewAccessibleRow();
    113121    virtual int childCount() const RT_OVERRIDE RT_FINAL;
    114122
    115123    virtual QITableViewCell *childItem(int iIndex) const RT_OVERRIDE RT_FINAL;
    116124
     125    QString cellText(int iColumn) const;
     126
     127protected:
     128
     129    QUuid m_uMachineId;
     130    /* Key is VMActivityOverviewColumn enum item. */
     131    QMap<int, UIActivityOverviewAccessibleCell*> m_cells;
     132
     133    QString m_strMachineName;
    117134private:
    118135
    119136    void initCells();
    120         //const QUuid& uMachineId, const QString& strMachineName, KMachineState enmState)
    121     QVector<UIActivityOverviewAccessibleCell*> m_cells;
    122     QUuid m_machineId;
    123     QString m_strMachineName;
    124     KMachineState m_enmMachineState;
     137
     138
    125139};
    126140
     
    130144{
    131145    Q_OBJECT;
     146
     147signals:
     148
     149    void sigDataUpdate();
    132150
    133151public:
     
    140158    QVariant headerData(int section, Qt::Orientation orientation, int role) const RT_OVERRIDE  RT_FINAL;
    141159    void setColumnCaptions(const QMap<int, QString>& captions);
     160    int itemIndex(const QUuid &uid);
     161    void setShouldUpdate(bool fShouldUpdate);
     162
     163private slots:
     164
     165    void sltMachineStateChanged(const QUuid &uId, const KMachineState state);
     166    void sltMachineRegistered(const QUuid &uId, bool fRegistered);
     167    void sltLocalVMUpdateTimeout();
    142168
    143169private:
     
    145171    void initialize();
    146172    void addRow(const QUuid& uMachineId, const QString& strMachineName, KMachineState enmState);
     173    void removeRow(const QUuid& uMachineId);
    147174    QVector<UIActivityOverviewAccessibleRow*> m_rows;
    148175    QITableView *m_pTableView;
    149176    QMap<int, QString> m_columnTitles;
     177    QTimer *m_pLocalVMUpdateTimer;
     178    /** Maximum length of string length of data displayed in column. Updated in UIActivityOverviewModel::data(..). */
     179    mutable QMap<int, int> m_columnDataMaxLength;
     180
    150181};
    151182
  • trunk/src/VBox/Frontends/VirtualBox/src/activity/overview/UIVMActivityOverviewWidget.cpp

    r104916 r104922  
    17811781    if (m_pModel)
    17821782        m_pModel->setShouldUpdate(fIsCurrentTool);
     1783    if (m_pAccessibleModel)
     1784        m_pAccessibleModel->setShouldUpdate(fIsCurrentTool);
    17831785}
    17841786
     
    19311933    m_pAccessibleTableView->sortByColumn(0, Qt::AscendingOrder);
    19321934    m_pAccessibleTableView->hide();
     1935
    19331936    layout()->addWidget(m_pAccessibleTableView);
    19341937}
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