diff options
author | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2019-04-29 17:19:02 +0000 |
---|---|---|
committer | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2019-04-29 17:19:02 +0000 |
commit | 9ba68b7ee1d5f383696ecee9a22dc3dc12fc9e8a (patch) | |
tree | 3bfab489e6ddac59cb7c12b4c45b2330b1755978 /src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp | |
parent | d7c5628ea6ba91bc39075d8da3a5d49d8ef5c436 (diff) | |
download | VirtualBox-svn-9ba68b7ee1d5f383696ecee9a22dc3dc12fc9e8a.tar.gz |
FE/Qt: bugref:8400. Disabled some medium editing widgets if the current medium is not editable.
git-svn-id: https://www.virtualbox.org/svn/vbox/trunk@78353 cfe28804-0f27-0410-a406-dd0f0b0b656f
Diffstat (limited to 'src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp')
-rw-r--r-- | src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp index b467365b93e..5c84458d191 100644 --- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp +++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp @@ -42,6 +42,7 @@ #include "UIToolBar.h" #include "UIIconPool.h" #include "UIMedium.h" +#include "UIVirtualBoxEventHandler.h" /* COM includes: */ #include "COMEnums.h" @@ -270,23 +271,23 @@ void UIMediumManagerWidget::sltApplyMediumDetailsChanges() /* Try to assign new medium type: */ if ( comMedium.isOk() - && newData.m_options.m_enmType != oldData.m_options.m_enmType) + && newData.m_options.m_enmMediumType != oldData.m_options.m_enmMediumType) { /* Check if we need to release medium first: */ bool fDo = true; if ( pMediumItem->machineIds().size() > 1 - || ( ( newData.m_options.m_enmType == KMediumType_Immutable - || newData.m_options.m_enmType == KMediumType_MultiAttach) + || ( ( newData.m_options.m_enmMediumType == KMediumType_Immutable + || newData.m_options.m_enmMediumType == KMediumType_MultiAttach) && pMediumItem->machineIds().size() > 0)) fDo = pMediumItem->release(true); if (fDo) { - comMedium.SetType(newData.m_options.m_enmType); + comMedium.SetType(newData.m_options.m_enmMediumType); /* Show error message if necessary: */ if (!comMedium.isOk()) - msgCenter().cannotChangeMediumType(comMedium, oldData.m_options.m_enmType, newData.m_options.m_enmType, this); + msgCenter().cannotChangeMediumType(comMedium, oldData.m_options.m_enmMediumType, newData.m_options.m_enmMediumType, this); } } @@ -485,6 +486,20 @@ void UIMediumManagerWidget::sltHandleMediumEnumerationFinish() refetchCurrentChosenMediumItem(); } +void UIMediumManagerWidget::sltHandleMachineStateChange(const QUuid &uId, const KMachineState state) +{ + UIMediumItem *pCurrentItem = currentMediumItem(); + if (!pCurrentItem) + return; + /* If this machine is not using the current medium then we don't care about its state: */ + if (!pCurrentItem->isMediumAttachedTo(uId)) + return; + bool fMediumIsModifiable = true; + if (state != KMachineState_Aborted && state != KMachineState_PoweredOff) + fMediumIsModifiable = false; + m_pDetailsWidget->enableDisableMediumModificationWidgets(fMediumIsModifiable); +} + void UIMediumManagerWidget::sltAddMedium() { QString strDefaultMachineFolder = vboxGlobal().virtualBox().GetSystemProperties().GetDefaultMachineFolder(); @@ -718,6 +733,10 @@ void UIMediumManagerWidget::prepare() void UIMediumManagerWidget::prepareConnections() { + /* Listen to vm state changed event so that we can disable/enable widgets related to the current medium if neds be: */ + connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigMachineStateChange, + this, &UIMediumManagerWidget::sltHandleMachineStateChange); + /* Configure medium-processing connections: */ connect(&vboxGlobal(), &VBoxGlobal::sigMediumCreated, this, &UIMediumManagerWidget::sltHandleMediumCreated); @@ -1039,7 +1058,11 @@ void UIMediumManagerWidget::refetchCurrentMediumItem(UIMediumDeviceType type) /* Update details-widget: */ if (m_pDetailsWidget) + { m_pDetailsWidget->setData(pMediumItem ? *pMediumItem : UIDataMedium(type)); + if (pMediumItem) + m_pDetailsWidget->enableDisableMediumModificationWidgets(currentMediumItem()->isMediumModifiable()); + } } void UIMediumManagerWidget::refetchCurrentChosenMediumItem() @@ -1593,7 +1616,7 @@ void UIMediumManagerFactory::create(QIManagerDialog *&pDialog, QWidget *pCenterW /********************************************************************************************************************************* -* Class UIMediumManagerFactory implementation. * +* Class UIMediumManager implementation. * *********************************************************************************************************************************/ UIMediumManager::UIMediumManager(QWidget *pCenterWidget, UIActionPool *pActionPool) |