VirtualBox

Changeset 37956 in vbox


Ignore:
Timestamp:
Jul 14, 2011 12:28:48 PM (13 years ago)
Author:
vboxsync
Message:

FE/Qt: 5769: Make it possible to manually configure the port count of the SATA controller.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp

    r37834 r37956  
    386386    , mCtrName (aName)
    387387    , mCtrType (0)
     388    , mPortCount (0)
    388389    , mUseIoCache (false)
    389390{
     
    444445}
    445446
     447uint ControllerItem::portCount()
     448{
     449    /* Recalculate actual port count: */
     450    for (int i = 0; i < mAttachments.size(); ++i)
     451    {
     452        AttachmentItem *pItem = static_cast<AttachmentItem*>(mAttachments[i]);
     453        if (mPortCount < (uint)pItem->attSlot().port + 1)
     454            mPortCount = (uint)pItem->attSlot().port + 1;
     455    }
     456    return mPortCount;
     457}
     458
    446459bool ControllerItem::ctrUseIoCache() const
    447460{
     
    457470{
    458471    mCtrType->setCtrType (aCtrType);
     472}
     473
     474void ControllerItem::setPortCount (uint aPortCount)
     475{
     476    /* Limit maximum port count: */
     477    mPortCount = qMin(aPortCount, (uint)vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(ctrBusType()));
    459478}
    460479
     
    10471066            return result;
    10481067        }
     1068        case R_CtrPortCount:
     1069        {
     1070            if (AbstractItem *item = static_cast <AbstractItem*> (aIndex.internalPointer()))
     1071                if (item->rtti() == AbstractItem::Type_ControllerItem)
     1072                    return static_cast <ControllerItem*> (item)->portCount();
     1073            return 0;
     1074        }
    10491075        case R_CtrIoCache:
    10501076        {
     
    12621288                {
    12631289                    static_cast <ControllerItem*> (item)->setCtrType (aValue.value <KStorageControllerType>());
     1290                    emit dataChanged (aIndex, aIndex);
     1291                    return true;
     1292                }
     1293            return false;
     1294        }
     1295        case R_CtrPortCount:
     1296        {
     1297            if (AbstractItem *item = static_cast <AbstractItem*> (aIndex.internalPointer()))
     1298                if (item->rtti() == AbstractItem::Type_ControllerItem)
     1299                {
     1300                    static_cast <ControllerItem*> (item)->setPortCount (aValue.toUInt());
    12641301                    emit dataChanged (aIndex, aIndex);
    12651302                    return true;
     
    17751812    QMenu *pOpenMediumMenu = new QMenu(this);
    17761813    mTbOpen->setMenu(pOpenMediumMenu);
     1814
     1815    /* Controller pane initialization: */
     1816    mSbPortCount->setValue(0);
    17771817
    17781818    /* Info Pane initialization */
     
    18241864    connect (mCbType, SIGNAL (activated (int)), this, SLOT (setInformation()));
    18251865    connect (mCbSlot, SIGNAL (activated (int)), this, SLOT (setInformation()));
     1866    connect (mSbPortCount, SIGNAL (valueChanged (int)), this, SLOT (setInformation()));
    18261867    connect (mCbIoCache, SIGNAL (stateChanged (int)), this, SLOT (setInformation()));
    18271868    connect (m_pMediumIdHolder, SIGNAL (sigChanged()), this, SLOT (setInformation()));
     
    18761917            storageControllerData.m_controllerBus = controller.GetBus();
    18771918            storageControllerData.m_controllerType = controller.GetControllerType();
     1919            storageControllerData.m_uPortCount = controller.GetPortCount();
    18781920            storageControllerData.m_fUseHostIOCache = controller.GetUseHostIOCache();
    18791921
     
    19381980                                                                   controllerData.m_controllerType);
    19391981        QUuid controllerId = QUuid(mStorageModel->data(controllerIndex, StorageModel::R_ItemId).toString());
     1982        mStorageModel->setData(controllerIndex, controllerData.m_uPortCount, StorageModel::R_CtrPortCount);
    19401983        mStorageModel->setData(controllerIndex, controllerData.m_fUseHostIOCache, StorageModel::R_CtrIoCache);
    19411984
     
    19932036        controllerData.m_controllerBus = mStorageModel->data(controllerIndex, StorageModel::R_CtrBusType).value<KStorageBus>();
    19942037        controllerData.m_controllerType = mStorageModel->data(controllerIndex, StorageModel::R_CtrType).value<KStorageControllerType>();
     2038        controllerData.m_uPortCount = mStorageModel->data(controllerIndex, StorageModel::R_CtrPortCount).toUInt();
    19952039        controllerData.m_fUseHostIOCache = mStorageModel->data(controllerIndex, StorageModel::R_CtrIoCache).toBool();
    19962040
     
    23862430                int ctrPos = mCbType->findText (vboxGlobal().toString (type));
    23872431                mCbType->setCurrentIndex (ctrPos == -1 ? 0 : ctrPos);
     2432
     2433                KStorageBus bus = mStorageModel->data (index, StorageModel::R_CtrBusType).value <KStorageBus>();
     2434                mLbPortCount->setVisible (bus == KStorageBus_SATA);
     2435                mSbPortCount->setVisible (bus == KStorageBus_SATA);
     2436                uint uPortCount = mStorageModel->data (index, StorageModel::R_CtrPortCount).toUInt();
     2437                mSbPortCount->setValue (uPortCount);
    23882438
    23892439                bool isUseIoCache = mStorageModel->data (index, StorageModel::R_CtrIoCache).toBool();
     
    24982548                mStorageModel->setData (index, QVariant::fromValue (vboxGlobal().toControllerType (mCbType->currentText())),
    24992549                                        StorageModel::R_CtrType);
     2550            else if (sdr == mSbPortCount)
     2551                mStorageModel->setData (index, mSbPortCount->value(), StorageModel::R_CtrPortCount);
    25002552            else if (sdr == mCbIoCache)
    25012553                mStorageModel->setData (index, mCbIoCache->isChecked(), StorageModel::R_CtrIoCache);
     
    32453297        KStorageBus controllerBus = controllerData.m_controllerBus;
    32463298        KStorageControllerType controllerType = controllerData.m_controllerType;
     3299        ULONG uPortCount = controllerData.m_uPortCount;
    32473300        bool fUseHostIOCache = controllerData.m_fUseHostIOCache;
    32483301
     
    32633316                controller.SetControllerType(controllerType);
    32643317                controller.SetUseHostIOCache(fUseHostIOCache);
    3265 
    3266                 /* Set port count to max possible initially: */
    32673318                if (controllerData.m_controllerBus == KStorageBus_SATA)
    32683319                {
    3269                     CSystemProperties properties = vboxGlobal().virtualBox().GetSystemProperties();
    3270                     controller.SetPortCount(properties.GetMaxPortCountForStorageBus(KStorageBus_SATA));
     3320                    uPortCount = qMax(uPortCount, controller.GetMinPortCount());
     3321                    uPortCount = qMin(uPortCount, controller.GetMaxPortCount());
     3322                    controller.SetPortCount(uPortCount);
    32713323                }
    3272 
    3273                 /* Prepare max used port for SATA controller: */
    3274                 int cMaxUsedPort = -1;
    32753324
    32763325                /* For each storage attachment: */
     
    32833332                    if (!attachmentCache.wasRemoved())
    32843333                        fSuccess = createStorageAttachment(controllerCache, attachmentCache);
    3285 
    3286                     /* Check that machine is OK: */
    3287                     if (fSuccess)
    3288                     {
    3289                         /* Get storage attachment data: */
    3290                         const UIDataSettingsMachineStorageAttachment &attachmentData = attachmentCache.data();
    3291                         /* Calculate the number of used ports: */
    3292                         cMaxUsedPort = attachmentData.m_iAttachmentPort > cMaxUsedPort ? attachmentData.m_iAttachmentPort : cMaxUsedPort;
    3293                     }
    3294                 }
    3295 
    3296                 /* Set max used port for SATA controller: */
    3297                 if (fSuccess && controllerData.m_controllerBus == KStorageBus_SATA)
    3298                 {
    3299                     ULONG uSataPortsCount = cMaxUsedPort + 1;
    3300                     uSataPortsCount = qMax(uSataPortsCount, controller.GetMinPortCount());
    3301                     uSataPortsCount = qMin(uSataPortsCount, controller.GetMaxPortCount());
    3302                     controller.SetPortCount(uSataPortsCount);
    33033334                }
    33043335            }
     
    33223353        KStorageBus controllerBus = controllerData.m_controllerBus;
    33233354        KStorageControllerType controllerType = controllerData.m_controllerType;
     3355        ULONG uPortCount = controllerData.m_uPortCount;
    33243356        bool fUseHostIOCache = controllerData.m_fUseHostIOCache;
    33253357
     
    33333365            controller.SetControllerType(controllerType);
    33343366            controller.SetUseHostIOCache(fUseHostIOCache);
    3335 
    3336             /* Set port count to max possible initially: */
    33373367            if (controllerData.m_controllerBus == KStorageBus_SATA)
    33383368            {
    3339                 CSystemProperties properties = vboxGlobal().virtualBox().GetSystemProperties();
    3340                 controller.SetPortCount(properties.GetMaxPortCountForStorageBus(KStorageBus_SATA));
     3369                uPortCount = qMax(uPortCount, controller.GetMinPortCount());
     3370                uPortCount = qMin(uPortCount, controller.GetMaxPortCount());
     3371                controller.SetPortCount(uPortCount);
    33413372            }
    3342 
    3343             /* Prepare max used port for SATA controller: */
    3344             int cMaxUsedPort = -1;
    33453373
    33463374            /* For each storage attachment: */
     
    33573385                if (attachmentCache.wasUpdated() && isAttachmentCouldBeUpdated(attachmentCache))
    33583386                    fSuccess = updateStorageAttachment(controllerCache, attachmentCache);
    3359 
    3360                 /* Check that machine is OK: */
    3361                 if (fSuccess && (attachmentCache.wasCreated() || attachmentCache.wasUpdated()))
    3362                 {
    3363                     /* Get storage attachment data: */
    3364                     const UIDataSettingsMachineStorageAttachment &attachmentData = attachmentCache.data();
    3365                     /* Calculate the number of used ports: */
    3366                     cMaxUsedPort = attachmentData.m_iAttachmentPort > cMaxUsedPort ? attachmentData.m_iAttachmentPort : cMaxUsedPort;
    3367                 }
    3368             }
    3369 
    3370             /* Set max used port for SATA controller: */
    3371             if (fSuccess && controllerBus == KStorageBus_SATA)
    3372             {
    3373                 ULONG uSataPortsCount = cMaxUsedPort + 1;
    3374                 uSataPortsCount = qMax(uSataPortsCount, controller.GetMinPortCount());
    3375                 uSataPortsCount = qMin(uSataPortsCount, controller.GetMaxPortCount());
    3376                 controller.SetPortCount(uSataPortsCount);
    33773387            }
    33783388        }
     
    36273637    mLbType->setEnabled(isMachineOffline());
    36283638    mCbType->setEnabled(isMachineOffline());
     3639    mLbPortCount->setEnabled(isMachineOffline());
     3640    mSbPortCount->setEnabled(isMachineOffline());
    36293641    mCbIoCache->setEnabled(isMachineOffline());
    36303642    /* Attachments pane: */
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.h

    r37824 r37956  
    311311    KStorageControllerType ctrType() const;
    312312    ControllerTypeList ctrTypes() const;
     313    uint portCount();
    313314    bool ctrUseIoCache() const;
    314315
    315316    void setCtrName (const QString &aCtrName);
    316317    void setCtrType (KStorageControllerType aCtrType);
     318    void setPortCount (uint aPortCount);
    317319    void setCtrUseIoCache (bool aUseIoCache);
    318320
     
    338340    QString mCtrName;
    339341    AbstractControllerType *mCtrType;
     342    uint mPortCount;
    340343    bool mUseIoCache;
    341344    QList <AbstractItem*> mAttachments;
     
    441444        R_CtrDevices,
    442445        R_CtrBusType,
     446        R_CtrPortCount,
    443447        R_CtrIoCache,
    444448
     
    601605        , m_controllerBus(KStorageBus_Null)
    602606        , m_controllerType(KStorageControllerType_Null)
     607        , m_uPortCount(0)
    603608        , m_fUseHostIOCache(false) {}
    604609    /* Functions: */
     
    608613               (m_controllerBus == other.m_controllerBus) &&
    609614               (m_controllerType == other.m_controllerType) &&
     615               (m_uPortCount == other.m_uPortCount) &&
    610616               (m_fUseHostIOCache == other.m_fUseHostIOCache);
    611617    }
     
    617623    KStorageBus m_controllerBus;
    618624    KStorageControllerType m_controllerType;
     625    uint m_uPortCount;
    619626    bool m_fUseHostIOCache;
    620627};
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.ui

    r37824 r37956  
    209209         </widget>
    210210        </item>
     211        <item row="3" column="1" >
     212         <widget class="QLabel" name="mLbPortCount" >
     213          <property name="text" >
     214           <string>&amp;Port Count:</string>
     215          </property>
     216          <property name="buddy" >
     217           <cstring>mSbPortCount</cstring>
     218          </property>
     219          <property name="alignment" >
     220           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     221          </property>
     222         </widget>
     223        </item>
    211224        <item row="3" column="2" >
     225         <widget class="QSpinBox" name="mSbPortCount" >
     226          <property name="whatsThis" >
     227           <string>Selects the port count of the SATA storage controller currently selected in the Storage Tree. This value can't be less than the maximum used port number + 1.</string>
     228          </property>
     229          <property name="sizePolicy" >
     230           <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
     231            <horstretch>0</horstretch>
     232            <verstretch>0</verstretch>
     233           </sizepolicy>
     234          </property>
     235         </widget>
     236        </item>
     237        <item row="4" column="2" >
    212238         <widget class="QCheckBox" name="mCbIoCache" >
    213239          <property name="whatsThis" >
     
    219245         </widget>
    220246        </item>
    221         <item row="4" column="0" colspan="3" >
     247        <item row="5" column="0" colspan="3" >
    222248         <spacer name="mSp3" >
    223249          <property name="orientation" >
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