UIMediumManager.cpp revision a9b62afc62b28da7a1a77f34259f8013892d9664
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VBox Qt GUI - UIMediumManager class implementation.
c97989161fbe75bc14cea477a5443bbf474dd3advboxsync * Copyright (C) 2006-2014 Oracle Corporation
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * General Public License (GPL) as published by the Free Software
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#else /* !VBOX_WITH_PRECOMPILED_HEADERS */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* Qt includes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* GUI includes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* COM includes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** QTreeWidgetItem extension representing Medium Manager item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** UIMediumItem type for rtti needs. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for top-level item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem(const UIMedium &medium, QTreeWidget *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for child item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem(const UIMedium &medium, UIMediumItem *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Copy UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual bool copy() = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Modify UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual bool modify() = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Remove UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual bool remove() = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual bool release()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Refresh: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure medium was not released yet: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Confirm release: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!msgCenter().confirmMediumRelease(medium(), treeWidget()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Release: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (const QString &strMachineID, medium().curStateMachineIds())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Refresh item fully. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const UIMedium& medium() const { return m_medium; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Defines UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns UIMediumType of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumType mediumType() const { return m_medium.type(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns KMediumState of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync KMediumState state() const { return m_medium.state(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>ID</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>location</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString location() const { return m_medium.location(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>hard-disk format</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString hardDiskFormat() const { return m_medium.hardDiskFormat(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>hard-disk type</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString hardDiskType() const { return m_medium.hardDiskType(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>storage details</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString details() const { return m_medium.storageDetails(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>tool-tip</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString toolTip() const { return m_medium.toolTip(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>usage</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns whether wrapped UIMedium is used or not. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns whether wrapped UIMedium is used in snapshots or not. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool isUsedInSnapshots() const { return m_medium.isUsedInSnapshots(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Operator< reimplementation used for sorting purposes. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ULONG64 thisValue = vboxGlobal().parseSize( text(column));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ULONG64 thatValue = vboxGlobal().parseSize(other.text(column));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return thisValue && thatValue ? thisValue < thatValue : QTreeWidgetItem::operator<(other);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual @a machine. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Refresh item information such as icon, text and tool-tip. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Fill-in columns: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* All columns get the same tooltip: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < treeWidget()->columnCount(); ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual machine with @a strMachineID. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Open session: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync CSession session = vboxGlobal().openSession(strMachineID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get machine: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare result: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fSuccess = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Release medium from machine: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Save machine settings: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotSaveMachineSettings(machine, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Close session: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return result: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** UIMediumItem extension representing hard-disk item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for top-level item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItemHD(const UIMedium &medium, QTreeWidget *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for child item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItemHD(const UIMedium &medium, UIMediumItem *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Copy UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show Clone VD wizard: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UISafePointerWizard pWizard = new UIWizardCloneVD(treeWidget(), medium().medium());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Delete if still exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Modify UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* False by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fResult = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show Modify VD dialog: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UISafePointerDialog pDialog = new UIMediumTypeChangeDialog(treeWidget(), id());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Change to passed: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Delete if still exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return result: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Remove UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Confirm medium removal: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!msgCenter().confirmMediumRemoval(medium(), treeWidget()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember some of hard-disk attributes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Propose to remove medium storage: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Close hard-disk: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotCloseMedium(medium(), hardDisk, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove UIMedium finally: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual @a machine. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enumerate attachments: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMediumAttachmentVector attachments = machine.GetMediumAttachments();
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync foreach (const CMediumAttachment &attachment, attachments)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip non-hard-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip unrelated hard-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember controller: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CStorageController controller = machine.GetStorageControllerByName(attachment.GetController());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to detach device: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync machine.DetachDevice(attachment.GetController(), attachment.GetPort(), attachment.GetDevice());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotDetachDevice(machine, UIMediumType_HardDisk, location(),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync StorageSlot(controller.GetBus(), attachment.GetPort(), attachment.GetDevice()),
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return success: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* False by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Proposes user to remove CMedium storage wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember some of hard-disk attributes: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* We don't want to try to delete inaccessible storage as it will most likely fail.
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync * Note that UIMessageCenter::confirmMediumRemoval() is aware of that and
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * will give a corresponding hint. Therefore, once the code is changed below,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * the hint should be re-checked for validity. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QVector<KMediumFormatCapabilities> capabilities = hardDisk.GetMediumFormat().GetCapabilities();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (KMediumFormatCapabilities capability, capabilities)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (state() != KMediumState_Inaccessible && uCapability & MediumFormatCapabilities_File)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = msgCenter().confirmDeleteHardDiskStorage(strLocation, treeWidget());
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If user wish to delete storage: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* Prepare delete storage progress: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotDeleteHardDiskStorage(hardDisk, strLocation, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show delete storage progress: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().showModalProgressDialog(progress, UIMediumManager::tr("Removing medium..."),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!progress.isOk() || progress.GetResultCode() != 0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotDeleteHardDiskStorage(progress, strLocation, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** UIMediumItem extension representing optical-disk item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for top-level item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItemCD(const UIMedium &medium, QTreeWidget *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Copy UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Modify UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Remove UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Confirm medium removal: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!msgCenter().confirmMediumRemoval(medium(), treeWidget()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember some of optical-disk attributes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Close optical-disk: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotCloseMedium(medium(), image, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove UIMedium finally: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual @a machine. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enumerate attachments: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMediumAttachmentVector attachments = machine.GetMediumAttachments();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (const CMediumAttachment &attachment, attachments)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip non-optical-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip unrelated optical-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to unmount device: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync machine.MountMedium(attachment.GetController(), attachment.GetPort(), attachment.GetDevice(), CMedium(), false /* force */);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotRemountMedium(machine, medium(), false /* mount? */, false /* retry? */, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return success: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** UIMediumItem extension representing floppy-disk item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for top-level item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItemFD(const UIMedium &medium, QTreeWidget *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Copy UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Modify UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Remove UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Confirm medium removal: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!msgCenter().confirmMediumRemoval(medium(), treeWidget()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember some of floppy-disk attributes: */
f02b41a7e54fc4e6b714f4e60260d94614d6e2e7vboxsync /* Close floppy-disk: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotCloseMedium(medium(), image, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove UIMedium finally: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual @a machine. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enumerate attachments: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMediumAttachmentVector attachments = machine.GetMediumAttachments();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (const CMediumAttachment &attachment, attachments)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip non-floppy-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip unrelated floppy-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to unmount device: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync machine.MountMedium(attachment.GetController(), attachment.GetPort(), attachment.GetDevice(), CMedium(), false /* force */);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotRemountMedium(machine, medium(), false /* mount? */, false /* retry? */, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return success: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Functor allowing to check if passed UIMediumItem is suitable by @a strID. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass CheckIfSuitableByID : public CheckIfSuitableBy
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor accepting @a strID to compare with. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CheckIfSuitableByID(const QString &strID) : m_strID(strID) {}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Determines whether passed UIMediumItem is suitable by @a strID. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool isItSuitable(UIMediumItem *pItem) const { return pItem->id() == m_strID; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Holds the @a strID to compare to. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Functor allowing to check if passed UIMediumItem is suitable by @a state. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass CheckIfSuitableByState : public CheckIfSuitableBy
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor accepting @a state to compare with. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CheckIfSuitableByState(KMediumState state) : m_state(state) {}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Determines whether passed UIMediumItem is suitable by @a state. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool isItSuitable(UIMediumItem *pItem) const { return pItem->state() == m_state; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Holds the @a state to compare to. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Medium manager progress-bar.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Reflects medium-enumeration progress, stays hidden otherwise. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor on the basis of passed @a pParent. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Defines progress-bar label-text. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void setText(const QString &strText) { m_pLabel->setText(strText); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns progress-bar current-value. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int value() const { return m_pProgressBar->value(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Defines progress-bar current-value. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void setValue(int iValue) { m_pProgressBar->setValue(iValue); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Defines progress-bar maximum-value. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void setMaximum(int iValue) { m_pProgressBar->setMaximum(iValue); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Prepares progress-bar content. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create label: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add widgets into layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Progress-bar label. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Progress-bar itself. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumManager* UIMediumManager::instance() { return m_spInstance; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumManager::UIMediumManager(QWidget *pCenterWidget, bool fRefresh /* = true */)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_iconHD(UIIconPool::iconSet(":/hd_16px.png", ":/hd_disabled_16px.png"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_iconCD(UIIconPool::iconSet(":/cd_16px.png", ":/cd_disabled_16px.png"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_iconFD(UIIconPool::iconSet(":/fd_16px.png", ":/fd_disabled_16px.png"))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Cleanup: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Cleanup instance: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::showModeless(QWidget *pCenterWidget /* = 0 */, bool fRefresh /* = true */)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create instance if not yet created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_spInstance = new UIMediumManager(pCenterWidget, fRefresh);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show instance: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_spInstance->setWindowState(m_spInstance->windowState() & ~Qt::WindowMinimized);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumCreated(const QString &strMediumID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for corresponding medium: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMedium medium = vboxGlobal().medium(strMediumID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ignore non-interesting mediums: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ignore mediums (and their children) which are
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * marked as hidden or attached to hidden machines only: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMedium::isMediumAttachedToHiddenMachinesOnly(medium))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create medium-item for corresponding medium: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = createMediumItem(medium);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure medium-item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If medium-item change allowed and
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * 1. medium-enumeration is not currently in progress or
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * 2. if there is no currently medium-item selected
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * we have to choose newly added medium-item as current one: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(treeWidget(medium.type()), pMediumItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumDeleted(const QString &strMediumID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding medium-item deleted: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumEnumerationStart()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Disable 'refresh' action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Reset and show progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->setMaximum(vboxGlobal().mediumIDs().size());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Reset inaccessibility flags: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Reset tab-widget icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(UIMediumType_HardDisk), m_iconHD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(UIMediumType_DVD), m_iconCD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(UIMediumType_Floppy), m_iconFD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Repopulate tree-widgets content: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch all current medium-items: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumEnumerated(const QString &strMediumID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for corresponding medium: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMedium medium = vboxGlobal().medium(strMediumID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ignore non-interesting mediums: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ignore mediums (and their children) which are
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * marked as hidden or attached to hidden machines only: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMedium::isMediumAttachedToHiddenMachinesOnly(medium))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update medium-item for corresponding medium: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Advance progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->setValue(m_pProgressBar->value() + 1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumEnumerationFinish()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Hide progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable 'refresh' action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch all current medium-items: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgReturnVoid(pMediumItem, ("Current item must not be null"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Copy current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgReturnVoid(pMediumItem, ("Current item must not be null"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Modify current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update HD information-panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgReturnVoid(pMediumItem, ("Current item must not be null"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgReturnVoid(pMediumItem, ("Current item must not be null"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Refetch currently chosen medium-item: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* Start medium-enumeration: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If another tree-widget was focused before,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * move focus to current tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update action icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch currently chosen medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get sender() tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = qobject_cast<QTreeWidget*>(sender());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgReturnVoid(pTreeWidget, ("This slot should be called by tree-widget only!\n"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch current medium-item of required type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip for non-hard-drives: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Call for modify-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleContextMenuCall(const QPoint &position)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure underlaying item was found: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidgetItem *pItem = pTreeWidget->itemAt(position);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure that item is current one: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show item context menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pContextMenu->exec(pTreeWidget->viewport()->mapToGlobal(position));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get all the tree-widgets: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const QList<QTreeWidget*> trees = m_trees.values();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Calculate deduction for every header: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int iHeaderIndex = 1; iHeaderIndex < pTreeWidget->header()->count(); ++iHeaderIndex)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync iDeduction += pTreeWidget->header()->sectionSize(iHeaderIndex);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Adjust the table's first column: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int iTreeIndex = 0; iTreeIndex < trees.size(); ++iTreeIndex)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iSize0 = pTreeWidget->viewport()->width() - deductions[iTreeIndex];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidget->header()->sectionSize(0) != iSize0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare this: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate dialog: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare Mac window-menu.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Should go *after* translation! */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Center according pseudo-parent widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VBoxGlobal::centerWidget(this, m_pPseudoParentWidget, false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Initialize information-panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Start medium-enumeration (if necessary): */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_fRefresh && !vboxGlobal().isMediumEnumerationInProgress())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Emulate medium-enumeration otherwise: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Start medium-enumeration: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Finish medium-enumeration (if necessary): */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Initial size: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Dialog should delete itself on 'close': */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* And no need to count it as important for application.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This way it will NOT be taken into account
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * when other top-level windows will be closed: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Apply window icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setWindowIcon(UIIconPool::iconSetFull(":/diskimage_32px.png", ":/diskimage_16px.png"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare connections: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare actions: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare central-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure medium-processing connections: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(&vboxGlobal(), SIGNAL(sigMediumCreated(const QString&)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltHandleMediumCreated(const QString&)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(&vboxGlobal(), SIGNAL(sigMediumDeleted(const QString&)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltHandleMediumDeleted(const QString&)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure medium-enumeration connections: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(&vboxGlobal(), SIGNAL(sigMediumEnumerationStarted()),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(&vboxGlobal(), SIGNAL(sigMediumEnumerated(const QString&)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltHandleMediumEnumerated(const QString&)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(&vboxGlobal(), SIGNAL(sigMediumEnumerationFinished()),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create copy-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure copy-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionCopy->setShortcut(QKeySequence("Ctrl+O"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionCopy, SIGNAL(triggered()), this, SLOT(sltCopyMedium()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create modify-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure modify-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionModify->setShortcut(QKeySequence("Ctrl+Space"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionModify, SIGNAL(triggered()), this, SLOT(sltModifyMedium()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create remove-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure remove-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRemove->setShortcut(QKeySequence(QKeySequence::Delete));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionRemove, SIGNAL(triggered()), this, SLOT(sltRemoveMedium()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create release-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure release-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease->setShortcut(QKeySequence("Ctrl+L"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionRelease, SIGNAL(triggered()), this, SLOT(sltReleaseMedium()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create refresh-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure refresh-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRefresh->setShortcut(QKeySequence(QKeySequence::Refresh));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionRefresh, SIGNAL(triggered()), this, SLOT(sltRefreshAll()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update action icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare menu-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare context-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create menu-bar-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure menu-bar-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create context-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure contex-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create central-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create main-layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare tab-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare button-box: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add tool-bar actions: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Integrate tool-bar into dialog: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable unified tool-bars on Mac OS X. Available on Qt >= 4.3: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* No spacing/margin on the Mac: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#else /* MAC_LEOPARD_STYLE */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add the tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Set spacing/margin like in the selector window: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* !MAC_LEOPARD_STYLE */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tab-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tabs: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < m_iTabCount; ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure tab-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(UIMediumType_HardDisk), m_iconHD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(UIMediumType_DVD), m_iconCD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(UIMediumType_Floppy), m_iconFD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pTabWidget, SIGNAL(currentChanged(int)), this, SLOT(sltHandleCurrentTabChanged()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add tab-widget into central layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync centralWidget()->layout()->addWidget(m_pTabWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Focus current tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update other widgets according chosen tab: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tab: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tab layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareTreeWidget(type, type == UIMediumType_HardDisk ? 3 : 2);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare information-container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareInformationContainer(type, type == UIMediumType_HardDisk ? 5 : 2);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareTreeWidget(UIMediumType type, int iColumns)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->header()->setResizeMode(0, QHeaderView::Fixed);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->header()->setResizeMode(1, QHeaderView::ResizeToContents);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->header()->setResizeMode(2, QHeaderView::ResizeToContents);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->header()->setStretchLastSection(false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(pTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(pTreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(pTreeWidget, SIGNAL(customContextMenuRequested(const QPoint&)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltHandleContextMenuCall(const QPoint&)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(pTreeWidget, SIGNAL(resized(const QSize&, const QSize&)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltPerformTablesAdjustment()), Qt::QueuedConnection);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(pTreeWidget->header(), SIGNAL(sectionResized(int, int, int)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltPerformTablesAdjustment()), Qt::QueuedConnection);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add tree-widget into tab layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareInformationContainer(UIMediumType type, int iFields)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create information-container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QFrame *pInformationContainer = infoContainer(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure information-container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainer->setFrameShadow(QFrame::Sunken);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create information-container layout: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync QGridLayout *pInformationContainerLayout = qobject_cast<QGridLayout*>(pInformationContainer->layout());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure information-container layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainerLayout->setVerticalSpacing(0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainerLayout->setContentsMargins(5, 5, 5, 5);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainerLayout->setColumnStretch(1, 1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create information-container labels & fields: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < iFields; ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create information-label: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create information-field: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure information-field: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pField->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add information-container labels & fields into container layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainerLayout->addWidget(pLabel, i, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainerLayout->addWidget(pField, i, 1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add information-container into tab layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync tab(type)->layout()->addWidget(pInformationContainer);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create button-box: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure button-box: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pButtonBox->setStandardButtons(QDialogButtonBox::Help | QDialogButtonBox::Close);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pButtonBox->button(QDialogButtonBox::Close)->setShortcut(Qt::Key_Escape);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pButtonBox, SIGNAL(helpRequested()), &msgCenter(), SLOT(sltShowHelpHelpDialog()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pButtonBox, SIGNAL(rejected()), this, SLOT(close()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add button-box into central layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync centralWidget()->layout()->addWidget(m_pButtonBox);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add progress-bar into button-box layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create window-menu for menu-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync menuBar()->addMenu(UIWindowMenuManager::instance()->createMenu(this));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember current medium-items: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pMediumItem = mediumItem(UIMediumType_HardDisk))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pMediumItem = mediumItem(UIMediumType_DVD))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pMediumItem = mediumItem(UIMediumType_Floppy))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Clear tree-widgets: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetHD = treeWidget(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetCD = treeWidget(UIMediumType_DVD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetFD = treeWidget(UIMediumType_Floppy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create medium-items (do not change current one): */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (const QString &strMediumID, vboxGlobal().mediumIDs())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Select first item as current one if nothing selected: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetHD && !mediumItem(UIMediumType_HardDisk))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (QTreeWidgetItem *pItem = pTreeWidgetHD->topLevelItem(0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetCD && !mediumItem(UIMediumType_DVD))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (QTreeWidgetItem *pItem = pTreeWidgetCD->topLevelItem(0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetFD && !mediumItem(UIMediumType_Floppy))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (QTreeWidgetItem *pItem = pTreeWidgetFD->topLevelItem(0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::refetchCurrentMediumItem(UIMediumType type)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get corresponding medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Set the file for the proxy icon: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setWindowFilePath(pMediumItem ? pMediumItem->location() : QString());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure current medium-item visible: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync treeWidget(type)->scrollToItem(pMediumItem, QAbstractItemView::EnsureVisible);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update actions: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update corresponding information-panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::refetchCurrentChosenMediumItem()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Calculate actions accessibility: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fNotInEnumeration = !vboxGlobal().isMediumEnumerationInProgress();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Apply actions accessibility: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fActionEnabledCopy = currentMediumType() == UIMediumType_HardDisk &&
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Copy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fActionEnabledModify = currentMediumType() == UIMediumType_HardDisk &&
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Modify);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fActionEnabledRemove = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Remove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fActionEnabledRelease = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Release);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease->setEnabled(fActionEnabledRelease);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_HardDisk: strPrefix = "hd"; break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionCopy->setIcon(UIIconPool::iconSetFull(QString(":/%1_copy_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_copy_disabled_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_copy_disabled_16px.png").arg(strPrefix)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionModify->setIcon(UIIconPool::iconSetFull(QString(":/%1_modify_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_modify_disabled_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_modify_disabled_16px.png").arg(strPrefix)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRemove->setIcon(UIIconPool::iconSetFull(QString(":/%1_remove_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_remove_disabled_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_remove_disabled_16px.png").arg(strPrefix)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease->setIcon(UIIconPool::iconSetFull(QString(":/%1_release_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_release_disabled_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_release_disabled_16px.png").arg(strPrefix)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRefresh && m_pActionRefresh->icon().isNull())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRefresh->setIcon(UIIconPool::iconSetFull(":/refresh_22px.png", ":/refresh_16px.png",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ":/refresh_disabled_22px.png", ":/refresh_disabled_16px.png"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateTabIcons(UIMediumItem *pMediumItem, Action action)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure medium-item is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare data for tab: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const UIMediumType mediumType = pMediumItem->mediumType();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Does it change the overall state? */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (*pfInaccessible || pMediumItem->state() != KMediumState_Inaccessible)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break; /* no */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(mediumType), vboxGlobal().warningIcon());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fCheckRest = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Does it change the overall state? */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ((*pfInaccessible && pMediumItem->state() == KMediumState_Inaccessible) ||
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync (!*pfInaccessible && pMediumItem->state() != KMediumState_Inaccessible))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break; /* no */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Is the given item in charge? */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!*pfInaccessible && pMediumItem->state() == KMediumState_Inaccessible)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Find the first KMediumState_Inaccessible item to be in charge: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CheckIfSuitableByState lookForState(KMediumState_Inaccessible);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pInaccessibleMediumItem = searchItem(pMediumItem->treeWidget(), lookForState, &ignoreID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(mediumType), vboxGlobal().warningIcon());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(mediumType), *pIcon);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateInformationFields(UIMediumType type /* = UIMediumType_Invalid */)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure type is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Depending on required type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_HardDisk: updateInformationFieldsHD(); break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_DVD: updateInformationFieldsCD(); break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_Floppy: updateInformationFieldsFD(); break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current hard-drive medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pCurrentItem = mediumItem(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is not set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Just clear information panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < m_fields[tabIndex(UIMediumType_HardDisk)].size(); ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Acquire required details: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strUsage = pCurrentItem->usage().isNull() ?
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync formatFieldText(QApplication::translate("VBoxMediaManagerDlg", "<i>Not Attached</i>"), false) :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_HardDisk, 0)->setText(pCurrentItem->hardDiskType());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_HardDisk, 1)->setText(formatFieldText(pCurrentItem->location(), true, "end"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_HardDisk, 2)->setText(pCurrentItem->hardDiskFormat());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_HardDisk, 3)->setText(strDetails);
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync infoField(UIMediumType_HardDisk, 4)->setText(strUsage);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable/disable information-panes container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoContainer(UIMediumType_HardDisk)->setEnabled(pCurrentItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current optical medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pCurrentItem = mediumItem(UIMediumType_DVD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is not set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Just clear information panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < m_fields[tabIndex(UIMediumType_DVD)].size(); ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update required details: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strUsage = pCurrentItem->usage().isNull() ?
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync formatFieldText(QApplication::translate("VBoxMediaManagerDlg", "<i>Not Attached</i>"), false) :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_DVD, 0)->setText(formatFieldText(pCurrentItem->location(), true, "end"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable/disable information-panes container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoContainer(UIMediumType_DVD)->setEnabled(pCurrentItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current floppy medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pCurrentItem = mediumItem(UIMediumType_Floppy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is not set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Just clear information panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < m_fields[tabIndex(UIMediumType_Floppy)].size(); ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update required details: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strUsage = pCurrentItem->usage().isNull() ?
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync formatFieldText(QApplication::translate("VBoxMediaManagerDlg", "<i>Not Attached</i>"), false) :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_Floppy, 0)->setText(formatFieldText(pCurrentItem->location(), true, "end"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_Floppy, 1)->setText(strUsage);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable/disable information-panes container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoContainer(UIMediumType_Floppy)->setEnabled(pCurrentItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Destroy window-menu of menu-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIWindowMenuManager::instance()->removeWindow(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIWindowMenuManager::instance()->destroyMenu(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Cleanup Mac window-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync // TODO: Rename translation context in .nls files!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Most of these translations were moved from VBoxMediaManagerDlg.ui file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * to keep old translation context.. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate window title: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setWindowTitle(QApplication::translate("VBoxMediaManagerDlg", "Virtual Media Manager"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pMenu->setTitle(QApplication::translate("VBoxMediaManagerDlg", "&Actions"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate actions: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionCopy->setText(QApplication::translate("VBoxMediaManagerDlg", "&Copy..."));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionCopy->setToolTip(m_pActionCopy->text().remove('&') + QString(" (%1)").arg(m_pActionCopy->shortcut().toString()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionCopy->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Copy an existing disk image file"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionModify->setText(QApplication::translate("VBoxMediaManagerDlg", "&Modify..."));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionModify->setToolTip(m_pActionModify->text().remove('&') + QString(" (%1)").arg(m_pActionModify->shortcut().toString()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionModify->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Modify the attributes of the selected disk image file"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRemove->setText(QApplication::translate("VBoxMediaManagerDlg", "R&emove"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRemove->setToolTip(m_pActionRemove->text().remove('&') + QString(" (%1)").arg(m_pActionRemove->shortcut().toString()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRemove->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Remove the selected disk image file"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease->setText(QApplication::translate("VBoxMediaManagerDlg", "Re&lease"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease->setToolTip(m_pActionRelease->text().remove('&') + QString(" (%1)").arg(m_pActionRelease->shortcut().toString()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Release the selected disk image file by detaching it from the machines"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRefresh->setText(QApplication::translate("VBoxMediaManagerDlg", "Re&fresh"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRefresh->setToolTip(m_pActionRefresh->text().remove('&') + QString(" (%1)").arg(m_pActionRefresh->shortcut().toString()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRefresh->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Refresh the list of disk image files"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* There is a bug in Qt Cocoa which result in showing a "more arrow" when
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync the necessary size of the toolbar is increased. Also for some languages
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync the with doesn't match if the text increase. So manually adjust the size
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync after changing the text. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# endif /* QT_MAC_USE_COCOA */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate tab-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabText(tabIndex(UIMediumType_HardDisk), tr("&Hard drives"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabText(tabIndex(UIMediumType_DVD), tr("&Optical disks"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabText(tabIndex(UIMediumType_Floppy), tr("&Floppy disks"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate HD tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetHD = treeWidget(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetHD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetHD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Virtual Size"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetHD->headerItem()->setText(2, QApplication::translate("VBoxMediaManagerDlg", "Actual Size"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate HD information-labels: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 0)->setText(QApplication::translate("VBoxMediaManagerDlg", "Type:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 1)->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 2)->setText(QApplication::translate("VBoxMediaManagerDlg", "Format:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 3)->setText(QApplication::translate("VBoxMediaManagerDlg", "Storage details:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 4)->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate CD tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetCD = treeWidget(UIMediumType_DVD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetCD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetCD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Size"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate CD information-labels: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_DVD, 0)->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_DVD, 1)->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate FD tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetFD = treeWidget(UIMediumType_Floppy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetFD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetFD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Size"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate FD information-labels: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_Floppy, 0)->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_Floppy, 1)->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->setText(QApplication::translate("VBoxMediaManagerDlg", "Checking accessibility"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure that the widgets aren't jumping around
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * while the progress-bar get visible. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Full refresh if there is at least one item present: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ( (pTreeWidgetHD && pTreeWidgetHD->topLevelItemCount())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || (pTreeWidgetCD && pTreeWidgetCD->topLevelItemCount())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || (pTreeWidgetFD && pTreeWidgetFD->topLevelItemCount()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::createMediumItem(const UIMedium &medium)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Of hard-drive type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding tree-widget exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = treeWidget(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Recursively create hard-drive item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Of optical-image type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding tree-widget exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = treeWidget(UIMediumType_DVD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create optical-disk item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = new UIMediumItemCD(medium, pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Optical medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Of floppy-image type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding tree-widget exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = treeWidget(UIMediumType_Floppy);
19b725c530eb49600728765de7ed451cbe290740vboxsync /* Create floppy-disk item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = new UIMediumItemFD(medium, pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Floppy medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: AssertMsgFailed(("Medium-type unknown: %d\n", type)); break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update tab-icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch medium-item if it is current one created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return created medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::createHardDiskItem(const UIMedium &medium)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure passed medium is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding tree-widget exists: */
19b725c530eb49600728765de7ed451cbe290740vboxsync QTreeWidget *pTreeWidget = treeWidget(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for existing medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(medium.id()));
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* If medium-item do not exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If medium have a parent: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to find parent medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pParentMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(medium.parentID()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If parent medium-item was not found: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding parent medium is already cached! */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMedium parentMedium = vboxGlobal().medium(medium.parentID());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailed(("Parent medium with ID={%s} was not found!\n", medium.parentID().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to create parent medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pParentMediumItem = createHardDiskItem(parentMedium);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If parent medium-item was found: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = new UIMediumItemHD(medium, pParentMediumItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Child hard-drive medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Else just create item as top-level one: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = new UIMediumItemHD(medium, pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Root hard-drive medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return created medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateMediumItem(const UIMedium &medium)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for existing medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = searchItem(treeWidget(type), CheckIfSuitableByID(medium.id()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create item if doesn't exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Medium-item with ID={%s} updated.\n", medium.id().toAscii().constData()));
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync /* Update tab-icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch medium-item if it is current one updated: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::deleteMediumItem(const QString &strMediumID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for corresponding tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync types << UIMediumType_HardDisk << UIMediumType_DVD << UIMediumType_Floppy;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get iterated tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for existing medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(strMediumID));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was found: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update tab-icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Delete medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Medium-item with ID={%s} deleted.\n", strMediumID.toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If there is no current medium-item now selected
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * we have to choose first-available medium-item as current one: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidget, pTreeWidget->topLevelItem(0));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQWidget* UIMediumManager::tab(UIMediumType type) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return tab for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return iIndex < m_pTabWidget->count() ? m_pTabWidget->widget(iIndex) : 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQTreeWidget* UIMediumManager::treeWidget(UIMediumType type) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return tree-widget for known tab index: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync /* Null by default: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsyncUIMediumItem* UIMediumManager::mediumItem(UIMediumType type) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get corresponding tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return corresponding medium-item: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync return pTreeWidget ? toMediumItem(pTreeWidget->currentItem()) : 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQFrame* UIMediumManager::infoContainer(UIMediumType type) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return information-container for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQLabel* UIMediumManager::infoLabel(UIMediumType type, int iLabelIndex) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Look for corresponding information-label list for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const QList<QLabel*> labels = m_labels.value(iIndex, QList<QLabel*>());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return information-label for known index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQILabel* UIMediumManager::infoField(UIMediumType type, int iFieldIndex) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync /* Look for corresponding information-field list for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const QList<QILabel*> fields = m_fields.value(iIndex, QList<QILabel*>());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return information-field for known index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumType UIMediumManager::mediumType(QTreeWidget *pTreeWidget) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index of passed tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return medium type for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Invalid by default: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsyncUIMediumType UIMediumManager::currentMediumType() const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Invalid if tab-widget doesn't exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return current medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQTreeWidget* UIMediumManager::currentTreeWidget() const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return current tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::currentMediumItem() const
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* Return current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::setCurrentItem(QTreeWidget *pTreeWidget, QTreeWidgetItem *pItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure passed tree-widget is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make passed item current for passed tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If non NULL item was passed: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure it's also selected, and visible: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->scrollToItem(pItem, QAbstractItemView::EnsureVisible);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch currently chosen medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return tab index corresponding to known medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* -1 by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumType UIMediumManager::mediumType(int iIndex)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return medium type corresponding to known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Invalid by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::searchItem(QTreeWidget *pTreeWidget, const CheckIfSuitableBy &condition, CheckIfSuitableBy *pException)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure argument is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return wrapper: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return searchItem(pTreeWidget->invisibleRootItem(), condition, pException);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::searchItem(QTreeWidgetItem *pParentItem, const CheckIfSuitableBy &condition, CheckIfSuitableBy *pException)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure argument is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Verify passed item if it is of 'medium' type too: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pMediumParentItem = toMediumItem(pParentItem))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync && (!pException || !pException->isItSuitable(pMediumParentItem)))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Iterate other all the children: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int iChildIndex = 0; iChildIndex < pParentItem->childCount(); ++iChildIndex)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pMediumChildItem = toMediumItem(pParentItem->child(iChildIndex)))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pRequiredMediumChildItem = searchItem(pMediumChildItem, condition, pException))
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncbool UIMediumManager::checkMediumFor(UIMediumItem *pItem, Action action)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure passed ID is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Edit means changing the description and alike; any media that is
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * not being read to or written from can be altered in these terms. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* False for children: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pItem->medium().parentID() == UIMedium::nullID();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* False for children: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pItem->medium().parentID() == UIMedium::nullID();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Removable if not attached to anything: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Releasable if attached but not in snapshots: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pItem->isUsed() && !pItem->isUsedInSnapshots();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::toMediumItem(QTreeWidgetItem *pItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Cast passed QTreeWidgetItem to UIMediumItem if possible: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pItem && pItem->type() == UIMediumItem::Type ? static_cast<UIMediumItem*>(pItem) : 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQString UIMediumManager::formatFieldText(const QString &strText, bool fCompact /* = true */,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString compactString = QString("<compact elipsis=\"%1\">").arg(strElipsis);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QApplication::translate("VBoxMediaManagerDlg", "--", "no info") :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "UIMediumManager.moc"