summaryrefslogtreecommitdiff
path: root/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
diff options
context:
space:
mode:
authorvboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2019-04-29 17:19:02 +0000
committervboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2019-04-29 17:19:02 +0000
commit9ba68b7ee1d5f383696ecee9a22dc3dc12fc9e8a (patch)
tree3bfab489e6ddac59cb7c12b4c45b2330b1755978 /src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
parentd7c5628ea6ba91bc39075d8da3a5d49d8ef5c436 (diff)
downloadVirtualBox-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.cpp35
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)