VBoxVMSettingsHD.cpp revision 5121d7b92c528533366ef68027d2bc5b4dc0af78
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * VBox frontends: Qt4 GUI ("VirtualBox"):
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * VBoxVMSettingsHD class implementation
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * Copyright (C) 2006-2010 Oracle Corporation
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * available from http://www.virtualbox.org. This file is free software;
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * you can redistribute it and/or modify it under the terms of the GNU
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * General Public License (GPL) as published by the Free Software
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync/* Local Includes */
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync/* Global Includes */
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync/* String Tags */
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync/* Type converters */
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsyncVBoxDefs::MediumType typeToLocal (KDeviceType aType)
17ef1920962b3df57bf6d2704ced1586396d96f0vboxsync VBoxDefs::MediumType result = VBoxDefs::MediumType_Invalid;
case KDeviceType_HardDisk:
case KDeviceType_DVD:
case KDeviceType_Floppy:
return result;
if (!mThis)
return mThis;
AbstractControllerType::AbstractControllerType (KStorageBus aBusType, KStorageControllerType aCtrType)
for (int i = 0; i < State_MAX; ++ i)
switch (mBusType)
case KStorageBus_IDE:
case KStorageBus_SATA:
case KStorageBus_SCSI:
case KStorageBus_Floppy:
case KStorageBus_SAS:
return mBusType;
return mCtrType;
return result;
return vboxGlobal().virtualBox().GetSystemProperties().GetDeviceTypesForStorageBus (mBusType).toList();
return KStorageControllerType_PIIX3;
return KStorageControllerType_IntelAhci;
return KStorageControllerType_LsiLogic;
return KStorageControllerType_I82078;
return mParent;
return mId;
return mMachineId;
: AbstractItem (0)
++ result;
return result;
return Type_RootItem;
for (int i = 0; i < childCount(); ++ i)
return mControllers [i];
return QString();
return QString();
return QPixmap();
, mCtrType (0)
switch (aBusType)
case KStorageBus_IDE:
case KStorageBus_SATA:
case KStorageBus_SCSI:
case KStorageBus_Floppy:
case KStorageBus_SAS:
mUseIoCache = vboxGlobal().virtualBox().GetSystemProperties().GetDefaultIoCacheSettingForStorageController (aControllerType);
delete mCtrType;
return mCtrName;
return mUseIoCache;
return allSlots;
return usedSlots;
return allMediums;
return usedImages;
return Type_ControllerItem;
for (int i = 0; i < childCount(); ++ i)
return mAttachments [i];
return ctrName();
, mAttIsShowDiffs (false)
, mAttIsHostDrive (false)
, mAttIsPassthrough (false)
return mAttSlot;
return allSlots;
return mAttDeviceType;
return mAttMediumId;
if (aFilter)
return allMediumIds;
return mAttIsShowDiffs;
return mAttIsHostDrive;
return mAttIsPassthrough;
cache();
cache();
return mAttSize;
return mAttLogicalSize;
return mAttLocation;
return mAttFormat;
return mAttUsage;
return Type_AttachmentItem;
return mAttName;
return mAttTip;
switch (mAttDeviceType)
case KDeviceType_HardDisk:
case KDeviceType_DVD:
case KDeviceType_Floppy:
return mAttPixmap;
delete mRootItem;
return index (0, 0);
return QModelIndex();
return QModelIndex();
if (parentOfItem)
return QModelIndex();
return QVariant();
switch (aRole)
switch (mToolTipType)
case ExpanderToolTip:
case HDAdderToolTip:
case CDAdderToolTip:
case FDAdderToolTip:
return tip;
return QString();
case R_ItemId:
case R_ItemPixmap:
return QPixmap();
case R_ItemPixmapRect:
case R_ItemName:
return QString();
case R_ItemNamePoint:
case R_ItemType:
return result;
case R_IsController:
case R_IsAttachment:
case R_ToolTipType:
case R_CtrName:
return QString();
case R_CtrType:
return result;
case R_CtrTypes:
return result;
case R_CtrDevices:
return result;
case R_CtrBusType:
return result;
case R_CtrIoCache:
case R_AttSlot:
return result;
case R_AttSlots:
return result;
case R_AttDevice:
return result;
case R_AttMediumId:
return QString();
case R_AttIsShowDiffs:
case R_AttIsHostDrive:
case R_AttIsPassthrough:
case R_AttSize:
return QString();
case R_AttLogicalSize:
return QString();
case R_AttLocation:
return QString();
case R_AttFormat:
return QString();
case R_AttUsage:
return QString();
case R_Margin:
case R_Spacing:
case R_IconSize:
case R_HDPixmapEn:
case R_CDPixmapEn:
case R_FDPixmapEn:
case R_HDPixmapAddEn:
case R_HDPixmapAddDis:
case R_CDPixmapAddEn:
case R_CDPixmapAddDis:
case R_FDPixmapAddEn:
case R_FDPixmapAddDis:
case R_HDPixmapRect:
case R_CDPixmapRect:
case R_FDPixmapRect:
return QVariant();
switch (aRole)
case R_ToolTipType:
case R_CtrName:
case R_CtrType:
case R_CtrIoCache:
case R_AttSlot:
sort();
case R_AttDevice:
case R_AttMediumId:
case R_AttIsShowDiffs:
case R_AttIsPassthrough:
QModelIndex StorageModel::addController (const QString &aCtrName, KStorageBus aBusType, KStorageControllerType aCtrType)
delete item;
return QModelIndex();
delete item;
int iInsertPosition = 0;
if (iItemLevel2Count)
QModelIndex StorageModel::attachmentBySlot(QModelIndex controllerIndex, StorageSlot attachmentStorageSlot)
AssertMsg(pParentItem->rtti() == AbstractItem::Type_ControllerItem, ("Parent item should be of 'controller' type!\n"));
return curAttachmentIndex;
return QModelIndex();
void StorageDelegate::paint (QPainter *aPainter, const QStyleOptionViewItem &aOption, const QModelIndex &aIndex) const
bool isGrayOnLoosingFocus = QApplication::style()->styleHint (QStyle::SH_ItemView_ChangeHighlightOnFocus, &aOption) != 0;
DeviceTypeList devicesList (model->data (aIndex, StorageModel::R_CtrDevices).value <DeviceTypeList>());
switch (deviceType)
case KDeviceType_HardDisk:
case KDeviceType_DVD:
case KDeviceType_Floppy:
: mValidator (0)
, mIsPolished (false)
mAddCtrAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::ControllerAddEn),
mAddIDECtrAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::IDEControllerAddEn),
mAddSATACtrAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::SATAControllerAddEn),
mAddSCSICtrAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::SCSIControllerAddEn),
mAddFloppyCtrAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::FloppyControllerAddEn),
mAddSASCtrAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::SATAControllerAddEn),
mDelCtrAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::ControllerDelEn),
mAddAttAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::AttachmentAddEn),
mAddHDAttAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::HDAttachmentAddEn),
mAddCDAttAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::CDAttachmentAddEn),
mAddFDAttAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::FDAttachmentAddEn),
mDelAttAction->setIcon(UIIconPool::iconSet(PixmapPool::pool()->pixmap (PixmapPool::AttachmentDelEn),
#ifdef Q_WS_MAC
mSplitter->setSizes (QList<int>() << (int) (0.45 * minimumWidth()) << (int) (0.55 * minimumWidth()));
QModelIndex ctrIndex = mStorageModel->addController (controllerName, controller.GetBus(), controller.GetControllerType());
mStorageModel->setData (attIndex, QVariant::fromValue (StorageSlot (controller.GetBus(), attachment.GetPort(), attachment.GetDevice())), StorageModel::R_AttSlot);
KStorageBus ctrBusType = mStorageModel->data (ctrIndex, StorageModel::R_CtrBusType).value <KStorageBus>();
KStorageControllerType ctrType = mStorageModel->data (ctrIndex, StorageModel::R_CtrType).value <KStorageControllerType>();
StorageSlot attStorageSlot = mStorageModel->data (attIndex, StorageModel::R_AttSlot).value <StorageSlot>();
KDeviceType attDeviceType = mStorageModel->data (attIndex, StorageModel::R_AttDevice).value <KDeviceType>();
StorageSlot attSlot = mStorageModel->data (attIndex, StorageModel::R_AttSlot).value <StorageSlot>();
KDeviceType attDevice = mStorageModel->data (attIndex, StorageModel::R_AttDevice).value <KDeviceType>();
if (!mIsPolished)
mIsPolished = true;
int maxWidth = 0;
addControllerWrapper (generateUniqueName (tr ("IDE Controller")), KStorageBus_IDE, KStorageControllerType_PIIX4);
addControllerWrapper (generateUniqueName (tr ("SATA Controller")), KStorageBus_SATA, KStorageControllerType_IntelAhci);
addControllerWrapper (generateUniqueName (tr ("SCSI Controller")), KStorageBus_SCSI, KStorageControllerType_LsiLogic);
addControllerWrapper (generateUniqueName (tr ("Floppy Controller")), KStorageBus_Floppy, KStorageControllerType_I82078);
addControllerWrapper (generateUniqueName (tr ("SAS Controller")), KStorageBus_SAS, KStorageControllerType_LsiLogicSas);
mStorageModel->delController (QUuid (mStorageModel->data (index, StorageModel::R_ItemId).toString()));
DeviceTypeList deviceTypeList (mStorageModel->data (index, StorageModel::R_CtrDevices).value <DeviceTypeList>());
switch (deviceType)
case KDeviceType_HardDisk:
if (justTrigger)
if (showMenu)
case KDeviceType_DVD:
if (justTrigger)
if (showMenu)
case KDeviceType_Floppy:
if (justTrigger)
if (showMenu)
if (showMenu)
mStorageModel->delAttachment (QUuid (mStorageModel->data (parent, StorageModel::R_ItemId).toString()),
mIsLoadingInProgress = true;
ControllerTypeList controllerTypeList (mStorageModel->data (index, StorageModel::R_CtrTypes).value <ControllerTypeList>());
KStorageControllerType type = mStorageModel->data (index, StorageModel::R_CtrType).value <KStorageControllerType>();
switch (device)
case KDeviceType_HardDisk:
case KDeviceType_DVD:
case KDeviceType_Floppy:
mCbPassthrough->setChecked (isHostDrive && mStorageModel->data (index, StorageModel::R_AttIsPassthrough).toBool());
mLbHDVirtualSizeValue->setText (compressText (mStorageModel->data (index, StorageModel::R_AttLogicalSize).toString()));
mLbHDActualSizeValue->setText (compressText (mStorageModel->data (index, StorageModel::R_AttSize).toString()));
mLbSizeValue->setText (compressText (mStorageModel->data (index, StorageModel::R_AttSize).toString()));
mLbLocationValue->setText (compressText (mStorageModel->data (index, StorageModel::R_AttLocation).toString()));
mLbHDFormatValue->setText (compressText (mStorageModel->data (index, StorageModel::R_AttFormat).toString()));
mLbUsageValue->setText (compressText (mStorageModel->data (index, StorageModel::R_AttUsage).toString()));
mIsLoadingInProgress = false;
mStorageModel->setData (index, QVariant::fromValue (vboxGlobal().toControllerType (mCbType->currentText())),
QModelIndex theSameIndexAtNewPosition = mStorageModel->attachmentBySlot(controllerIndex, attachmentStorageSlot);
bool isIDEPossible = mStorageModel->data (index, StorageModel::R_IsMoreIDEControllersPossible).toBool();
bool isSATAPossible = mStorageModel->data (index, StorageModel::R_IsMoreSATAControllersPossible).toBool();
bool isSCSIPossible = mStorageModel->data (index, StorageModel::R_IsMoreSCSIControllersPossible).toBool();
bool isFloppyPossible = mStorageModel->data (index, StorageModel::R_IsMoreFloppyControllersPossible).toBool();
bool isSASPossible = mStorageModel->data (index, StorageModel::R_IsMoreSASControllersPossible).toBool();
bool isAttachmentsPossible = mStorageModel->data (index, StorageModel::R_IsMoreAttachmentsPossible).toBool();
mAddCtrAction->setEnabled (isIDEPossible || isSATAPossible || isSCSIPossible || isFloppyPossible || isSASPossible);
KDeviceType deviceType = mStorageModel->data (index, StorageModel::R_AttDevice).value <KDeviceType>();
DeviceTypeList deviceTypeList (mStorageModel->data (index, StorageModel::R_CtrDevices).value <DeviceTypeList>());
switch (deviceType)
case KDeviceType_HardDisk:
case KDeviceType_DVD:
case KDeviceType_Floppy:
void VBoxVMSettingsHD::onDrawItemBranches (QPainter *aPainter, const QRect &aRect, const QModelIndex &aIndex)
* because QCommonStyle performs branch painting as opposed to particular inherited sub-classing styles. */
qobject_cast <QCommonStyle*> (style())->QCommonStyle::drawPrimitive (QStyle::PE_IndicatorBranch, &options, aPainter);
if (mStorageModel->data (index, StorageModel::R_ToolTipType).value <StorageModel::ToolTipType>() != StorageModel::ExpanderToolTip)
mStorageModel->setData (index, QVariant::fromValue (StorageModel::ExpanderToolTip), StorageModel::R_ToolTipType);
DeviceTypeList devicesList (mStorageModel->data (index, StorageModel::R_CtrDevices).value <DeviceTypeList>());
switch (deviceType)
case KDeviceType_HardDisk:
case KDeviceType_DVD:
case KDeviceType_Floppy:
switch (deviceType)
case KDeviceType_HardDisk:
if (mStorageModel->data (index, StorageModel::R_ToolTipType).value <StorageModel::ToolTipType>() != StorageModel::HDAdderToolTip)
mStorageModel->setData (index, QVariant::fromValue (StorageModel::HDAdderToolTip), StorageModel::R_ToolTipType);
case KDeviceType_DVD:
if (mStorageModel->data (index, StorageModel::R_ToolTipType).value <StorageModel::ToolTipType>() != StorageModel::CDAdderToolTip)
mStorageModel->setData (index, QVariant::fromValue (StorageModel::CDAdderToolTip), StorageModel::R_ToolTipType);
case KDeviceType_Floppy:
if (mStorageModel->data (index, StorageModel::R_ToolTipType).value <StorageModel::ToolTipType>() != StorageModel::FDAdderToolTip)
mStorageModel->setData (index, QVariant::fromValue (StorageModel::FDAdderToolTip), StorageModel::R_ToolTipType);
if (mStorageModel->data (index, StorageModel::R_ToolTipType).value <StorageModel::ToolTipType>() != StorageModel::DefaultToolTip)
DeviceTypeList devicesList (mStorageModel->data (index, StorageModel::R_CtrDevices).value <DeviceTypeList>());
switch (deviceType)
case KDeviceType_HardDisk:
case KDeviceType_DVD:
case KDeviceType_Floppy:
void VBoxVMSettingsHD::addControllerWrapper (const QString &aName, KStorageBus aBus, KStorageControllerType aType)
switch (aBus)
case KStorageBus_IDE:
case KStorageBus_SATA:
case KStorageBus_SCSI:
case KStorageBus_SAS:
case KStorageBus_Floppy:
mStorageModel->addAttachment (QUuid (mStorageModel->data (index, StorageModel::R_ItemId).toString()), aDevice);
int maxNumber = 0;
bool isConverted = false;
KDeviceType attDevice = mStorageModel->data (attIndex, StorageModel::R_AttDevice).value <KDeviceType>();
++cDevices;
return cDevices;