UIMediumManager.cpp revision a9b62afc62b28da7a1a77f34259f8013892d9664
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* $Id$ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VBox Qt GUI - UIMediumManager class implementation.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
c97989161fbe75bc14cea477a5443bbf474dd3advboxsync * Copyright (C) 2006-2014 Oracle Corporation
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
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 */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef VBOX_WITH_PRECOMPILED_HEADERS
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include <precomp.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#else /* !VBOX_WITH_PRECOMPILED_HEADERS */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* Qt includes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include <QFrame>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include <QLabel>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include <QMenuBar>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include <QHeaderView>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include <QPushButton>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include <QProgressBar>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* GUI includes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "VBoxGlobal.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "UIMediumManager.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "UIWizardCloneVD.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "UIMessageCenter.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "QITabWidget.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "QITreeWidget.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "QILabel.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "QIDialogButtonBox.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "UIToolBar.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "UIIconPool.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "UIMediumTypeChangeDialog.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "UIMedium.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* COM includes: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync# include "COMEnums.h"
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync# include "CMachine.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "CMediumFormat.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "CStorageController.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "CMediumAttachment.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# ifdef Q_WS_MAC
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# include "UIWindowMenuManager.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** QTreeWidgetItem extension representing Medium Manager item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass UIMediumItem : public QTreeWidgetItem
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** UIMediumItem type for rtti needs. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync enum { Type = QTreeWidgetItem::UserType + 1 };
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for top-level item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem(const UIMedium &medium, QTreeWidget *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync : QTreeWidgetItem(pParent, Type)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_medium(medium)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync { refresh(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for child item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem(const UIMedium &medium, UIMediumItem *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync : QTreeWidgetItem(pParent, Type)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_medium(medium)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync { refresh(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
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 {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Refresh: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refreshAll();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure medium was not released yet: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (medium().curStateMachineIds().isEmpty())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Confirm release: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!msgCenter().confirmMediumRelease(medium(), treeWidget()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Release: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (const QString &strMachineID, medium().curStateMachineIds())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!releaseFrom(strMachineID))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Refresh item fully. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void refreshAll()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_medium.refresh();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refresh();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
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 void setMedium(const UIMedium &medium)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_medium = medium;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refresh();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns UIMediumType of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumType mediumType() const { return m_medium.type(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns KMediumState of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync KMediumState state() const { return m_medium.state(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>ID</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString id() const { return m_medium.id(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>location</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString location() const { return m_medium.location(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
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
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>storage details</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString details() const { return m_medium.storageDetails(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>tool-tip</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString toolTip() const { return m_medium.toolTip(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns QString <i>usage</i> of the wrapped UIMedium. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString usage() const { return m_medium.usage(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns whether wrapped UIMedium is used or not. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool isUsed() const { return m_medium.isUsed(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns whether wrapped UIMedium is used in snapshots or not. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool isUsedInSnapshots() const { return m_medium.isUsedInSnapshots(); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Operator< reimplementation used for sorting purposes. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool operator<(const QTreeWidgetItem &other) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int column = treeWidget()->sortColumn();
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 }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprotected:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual @a machine. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync virtual bool releaseFrom(CMachine machine) = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Refresh item information such as icon, text and tool-tip. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void refresh()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Fill-in columns: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setIcon(0, m_medium.icon());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setText(0, m_medium.name());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setText(1, m_medium.logicalSize());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setText(2, m_medium.size());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* All columns get the same tooltip: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strToolTip = m_medium.toolTip();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < treeWidget()->columnCount(); ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setToolTip(i, strToolTip);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual machine with @a strMachineID. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool releaseFrom(const QString &strMachineID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Open session: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync CSession session = vboxGlobal().openSession(strMachineID);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync if (session.isNull())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get machine: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMachine machine = session.GetMachine();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare result: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fSuccess = false;
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Release medium from machine: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync if (releaseFrom(machine))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Save machine settings: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync machine.SaveSettings();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!machine.isOk())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotSaveMachineSettings(machine, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fSuccess = true;
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Close session: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync session.UnlockMachine();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return result: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return fSuccess;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMedium m_medium;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** UIMediumItem extension representing hard-disk item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass UIMediumItemHD : public UIMediumItem
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for top-level item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItemHD(const UIMedium &medium, QTreeWidget *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync : UIMediumItem(medium, pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for child item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItemHD(const UIMedium &medium, UIMediumItem *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync : UIMediumItem(medium, pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprotected:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Copy UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool copy()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show Clone VD wizard: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UISafePointerWizard pWizard = new UIWizardCloneVD(treeWidget(), medium().medium());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pWizard->prepare();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pWizard->exec();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Delete if still exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pWizard)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync delete pWizard;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Modify UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool modify()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* False by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fResult = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show Modify VD dialog: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UISafePointerDialog pDialog = new UIMediumTypeChangeDialog(treeWidget(), id());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pDialog->exec() == QDialog::Accepted)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refreshAll();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Change to passed: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fResult = true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Delete if still exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pDialog)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync delete pDialog;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return result: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return fResult;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Remove UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool remove()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Confirm medium removal: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!msgCenter().confirmMediumRemoval(medium(), treeWidget()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember some of hard-disk attributes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMedium hardDisk = medium().medium();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strMediumID = id();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Propose to remove medium storage: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!maybeRemoveStorage())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Close hard-disk: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync hardDisk.Close();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!hardDisk.isOk())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotCloseMedium(medium(), hardDisk, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove UIMedium finally: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync vboxGlobal().deleteMedium(strMediumID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual @a machine. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool releaseFrom(CMachine machine)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enumerate attachments: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMediumAttachmentVector attachments = machine.GetMediumAttachments();
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync foreach (const CMediumAttachment &attachment, attachments)
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip non-hard-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (attachment.GetType() != KDeviceType_HardDisk)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync continue;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip unrelated hard-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (attachment.GetMedium().GetId() != id())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync continue;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember controller: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CStorageController controller = machine.GetStorageControllerByName(attachment.GetController());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to detach device: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync machine.DetachDevice(attachment.GetController(), attachment.GetPort(), attachment.GetDevice());
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync if (!machine.isOk())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotDetachDevice(machine, UIMediumType_HardDisk, location(),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync StorageSlot(controller.GetBus(), attachment.GetPort(), attachment.GetDevice()),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync treeWidget());
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return success: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* False by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Proposes user to remove CMedium storage wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool maybeRemoveStorage()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember some of hard-disk attributes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMedium hardDisk = medium().medium();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strLocation = location();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
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 bool fDeleteStorage = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync qulonglong uCapability = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QVector<KMediumFormatCapabilities> capabilities = hardDisk.GetMediumFormat().GetCapabilities();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (KMediumFormatCapabilities capability, capabilities)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uCapability |= capability;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (state() != KMediumState_Inaccessible && uCapability & MediumFormatCapabilities_File)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = msgCenter().confirmDeleteHardDiskStorage(strLocation, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (rc == AlertButton_Cancel)
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync return false;
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync fDeleteStorage = rc == AlertButton_Choice1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If user wish to delete storage: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (fDeleteStorage)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* Prepare delete storage progress: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CProgress progress = hardDisk.DeleteStorage();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!hardDisk.isOk())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotDeleteHardDiskStorage(hardDisk, strLocation, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show delete storage progress: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().showModalProgressDialog(progress, UIMediumManager::tr("Removing medium..."),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ":/progress_media_delete_90px.png", treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!progress.isOk() || progress.GetResultCode() != 0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotDeleteHardDiskStorage(progress, strLocation, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** UIMediumItem extension representing optical-disk item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass UIMediumItemCD : public UIMediumItem
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for top-level item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItemCD(const UIMedium &medium, QTreeWidget *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync : UIMediumItem(medium, pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprotected:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Copy UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool copy()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Modify UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool modify()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Remove UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool remove()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Confirm medium removal: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!msgCenter().confirmMediumRemoval(medium(), treeWidget()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember some of optical-disk attributes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMedium image = medium().medium();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strMediumID = id();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Close optical-disk: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync image.Close();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!image.isOk())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotCloseMedium(medium(), image, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove UIMedium finally: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync vboxGlobal().deleteMedium(strMediumID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual @a machine. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool releaseFrom(CMachine machine)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enumerate attachments: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMediumAttachmentVector attachments = machine.GetMediumAttachments();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (const CMediumAttachment &attachment, attachments)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip non-optical-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (attachment.GetType() != KDeviceType_DVD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync continue;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip unrelated optical-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (attachment.GetMedium().GetId() != id())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync continue;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to unmount device: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync machine.MountMedium(attachment.GetController(), attachment.GetPort(), attachment.GetDevice(), CMedium(), false /* force */);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!machine.isOk())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotRemountMedium(machine, medium(), false /* mount? */, false /* retry? */, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return success: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** UIMediumItem extension representing floppy-disk item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass UIMediumItemFD : public UIMediumItem
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor for top-level item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItemFD(const UIMedium &medium, QTreeWidget *pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync : UIMediumItem(medium, pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprotected:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Copy UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool copy()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Modify UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool modify()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Remove UIMedium wrapped by <i>this</i> item. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool remove()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Confirm medium removal: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!msgCenter().confirmMediumRemoval(medium(), treeWidget()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember some of floppy-disk attributes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMedium image = medium().medium();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strMediumID = id();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
f02b41a7e54fc4e6b714f4e60260d94614d6e2e7vboxsync /* Close floppy-disk: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync image.Close();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!image.isOk())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotCloseMedium(medium(), image, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove UIMedium finally: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync vboxGlobal().deleteMedium(strMediumID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* True by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Release UIMedium wrapped by <i>this</i> item from virtual @a machine. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool releaseFrom(CMachine machine)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enumerate attachments: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CMediumAttachmentVector attachments = machine.GetMediumAttachments();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (const CMediumAttachment &attachment, attachments)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip non-floppy-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (attachment.GetType() != KDeviceType_Floppy)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync continue;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip unrelated floppy-disks: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (attachment.GetMedium().GetId() != id())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync continue;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to unmount device: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync machine.MountMedium(attachment.GetController(), attachment.GetPort(), attachment.GetDevice(), CMedium(), false /* force */);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!machine.isOk())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync msgCenter().cannotRemountMedium(machine, medium(), false /* mount? */, false /* retry? */, treeWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return success: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return failure: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Functor allowing to check if passed UIMediumItem is suitable by @a strID. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass CheckIfSuitableByID : public CheckIfSuitableBy
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor accepting @a strID to compare with. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CheckIfSuitableByID(const QString &strID) : m_strID(strID) {}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
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 QString m_strID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Functor allowing to check if passed UIMediumItem is suitable by @a state. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass CheckIfSuitableByState : public CheckIfSuitableBy
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor accepting @a state to compare with. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CheckIfSuitableByState(KMediumState state) : m_state(state) {}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
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 KMediumState m_state;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Medium manager progress-bar.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Reflects medium-enumeration progress, stays hidden otherwise. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass UIEnumerationProgressBar : public QWidget
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Q_OBJECT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Constructor on the basis of passed @a pParent. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIEnumerationProgressBar(QWidget *pParent = 0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync : QWidget(pParent)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepare();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Defines progress-bar label-text. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void setText(const QString &strText) { m_pLabel->setText(strText); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
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
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Prepares progress-bar content. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void prepare()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QHBoxLayout *pLayout = new QHBoxLayout(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pLayout->setContentsMargins(0, 0, 0, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create label: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pLabel = new QLabel;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar = new QProgressBar;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->setTextVisible(false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add widgets into layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pLayout->addWidget(m_pLabel);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pLayout->addWidget(m_pProgressBar);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Progress-bar label. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QLabel *m_pLabel;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Progress-bar itself. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QProgressBar *m_pProgressBar;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync};
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumManager* UIMediumManager::m_spInstance = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumManager* UIMediumManager::instance() { return m_spInstance; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumManager::UIMediumManager(QWidget *pCenterWidget, bool fRefresh /* = true */)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync : QIWithRetranslateUI<QMainWindow>(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_pPseudoParentWidget(pCenterWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_fRefresh(fRefresh)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_fPreventChangeCurrentItem(false)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_pTabWidget(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_iTabCount(3)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_fInaccessibleHD(false)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_fInaccessibleCD(false)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_fInaccessibleFD(false)
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 , m_pToolBar(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_pContextMenu(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_pMenu(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_pActionCopy(0), m_pActionModify(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_pActionRemove(0), m_pActionRelease(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_pActionRefresh(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_pButtonBox(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync , m_pProgressBar(0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepare();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumManager::~UIMediumManager()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Cleanup: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync cleanup();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Cleanup instance: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_spInstance = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::showModeless(QWidget *pCenterWidget /* = 0 */, bool fRefresh /* = true */)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create instance if not yet created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!m_spInstance)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_spInstance = new UIMediumManager(pCenterWidget, fRefresh);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show instance: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_spInstance->show();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_spInstance->setWindowState(m_spInstance->windowState() & ~Qt::WindowMinimized);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_spInstance->activateWindow();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumCreated(const QString &strMediumID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for corresponding medium: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMedium medium = vboxGlobal().medium(strMediumID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ignore non-interesting mediums: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (medium.isNull() || medium.isHostDrive())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ignore mediums (and their children) which are
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * marked as hidden or attached to hidden machines only: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMedium::isMediumAttachedToHiddenMachinesOnly(medium))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create medium-item for corresponding medium: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = createMediumItem(medium);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure medium-item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
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 if ( !m_fPreventChangeCurrentItem
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync && ( !vboxGlobal().isMediumEnumerationInProgress()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || !mediumItem(medium.type())))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(treeWidget(medium.type()), pMediumItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumDeleted(const QString &strMediumID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding medium-item deleted: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync deleteMediumItem(strMediumID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumEnumerationStart()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Disable 'refresh' action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRefresh)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRefresh->setEnabled(false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Reset and show progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pProgressBar)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->setMaximum(vboxGlobal().mediumIDs().size());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->setValue(0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->show();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Reset inaccessibility flags: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_fInaccessibleHD =
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_fInaccessibleCD =
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_fInaccessibleFD = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Reset tab-widget icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pTabWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Repopulate tree-widgets content: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync repopulateTreeWidgets();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch all current medium-items: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentMediumItems();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumEnumerated(const QString &strMediumID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for corresponding medium: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMedium medium = vboxGlobal().medium(strMediumID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ignore non-interesting mediums: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (medium.isNull() || medium.isHostDrive())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Ignore mediums (and their children) which are
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * marked as hidden or attached to hidden machines only: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMedium::isMediumAttachedToHiddenMachinesOnly(medium))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update medium-item for corresponding medium: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateMediumItem(medium);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Advance progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pProgressBar)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->setValue(m_pProgressBar->value() + 1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleMediumEnumerationFinish()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Hide progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pProgressBar)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->hide();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable 'refresh' action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRefresh)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRefresh->setEnabled(true);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch all current medium-items: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentMediumItems();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltCopyMedium()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = currentMediumItem();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgReturnVoid(pMediumItem, ("Current item must not be null"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturnVoid(!pMediumItem->id().isNull());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Copy current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem->copy();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltModifyMedium()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = currentMediumItem();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgReturnVoid(pMediumItem, ("Current item must not be null"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturnVoid(!pMediumItem->id().isNull());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Modify current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fResult = pMediumItem->modify();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update HD information-panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (fResult)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateInformationFieldsHD();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltRemoveMedium()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = currentMediumItem();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgReturnVoid(pMediumItem, ("Current item must not be null"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturnVoid(!pMediumItem->id().isNull());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem->remove();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltReleaseMedium()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = currentMediumItem();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgReturnVoid(pMediumItem, ("Current item must not be null"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturnVoid(!pMediumItem->id().isNull());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remove current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fResult = pMediumItem->release();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Refetch currently chosen medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (fResult)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentChosenMediumItem();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltRefreshAll()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* Start medium-enumeration: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync vboxGlobal().startMediumEnumeration();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleCurrentTabChanged()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = currentTreeWidget();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If another tree-widget was focused before,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * move focus to current tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (qobject_cast<QTreeWidget*>(focusWidget()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setFocus();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update action icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateActionIcons();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch currently chosen medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentChosenMediumItem();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleCurrentItemChanged()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
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
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch current medium-item of required type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentMediumItem(mediumType(pTreeWidget));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleDoubleClick()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Skip for non-hard-drives: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (currentMediumType() != UIMediumType_HardDisk)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Call for modify-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sltModifyMedium();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltHandleContextMenuCall(const QPoint &position)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = currentTreeWidget();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure underlaying item was found: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidgetItem *pItem = pTreeWidget->itemAt(position);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure that item is current one: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidget, pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Show item context menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pContextMenu)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pContextMenu->exec(pTreeWidget->viewport()->mapToGlobal(position));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::sltPerformTablesAdjustment()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get all the tree-widgets: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const QList<QTreeWidget*> trees = m_trees.values();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Calculate deduction for every header: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QList<int> deductions;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (QTreeWidget *pTreeWidget, trees)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iDeduction = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int iHeaderIndex = 1; iHeaderIndex < pTreeWidget->header()->count(); ++iHeaderIndex)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync iDeduction += pTreeWidget->header()->sectionSize(iHeaderIndex);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync deductions << iDeduction;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Adjust the table's first column: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int iTreeIndex = 0; iTreeIndex < trees.size(); ++iTreeIndex)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = trees[iTreeIndex];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iSize0 = pTreeWidget->viewport()->width() - deductions[iTreeIndex];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidget->header()->sectionSize(0) != iSize0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->header()->resizeSection(0, iSize0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepare()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare this: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareThis();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate dialog: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync retranslateUi();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef Q_WS_MAC
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare Mac window-menu.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Should go *after* translation! */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareMacWindowMenu();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Center according pseudo-parent widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VBoxGlobal::centerWidget(this, m_pPseudoParentWidget, false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Initialize information-panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateInformationFields(UIMediumType_All);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Start medium-enumeration (if necessary): */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_fRefresh && !vboxGlobal().isMediumEnumerationInProgress())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync vboxGlobal().startMediumEnumeration();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Emulate medium-enumeration otherwise: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Start medium-enumeration: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sltHandleMediumEnumerationStart();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Finish medium-enumeration (if necessary): */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!vboxGlobal().isMediumEnumerationInProgress())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sltHandleMediumEnumerationFinish();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareThis()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Initial size: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync resize(620, 460);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Dialog should delete itself on 'close': */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setAttribute(Qt::WA_DeleteOnClose);
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 setAttribute(Qt::WA_QuitOnClose, false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Apply window icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setWindowIcon(UIIconPool::iconSetFull(":/diskimage_32px.png", ":/diskimage_16px.png"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare connections: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareConnections();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare actions: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareActions();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare central-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareCentralWidget();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareConnections()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
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
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure medium-enumeration connections: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(&vboxGlobal(), SIGNAL(sigMediumEnumerationStarted()),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltHandleMediumEnumerationStart()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(&vboxGlobal(), SIGNAL(sigMediumEnumerated(const QString&)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltHandleMediumEnumerated(const QString&)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(&vboxGlobal(), SIGNAL(sigMediumEnumerationFinished()),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltHandleMediumEnumerationFinish()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareActions()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create copy-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionCopy = new QAction(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pActionCopy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure copy-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionCopy->setShortcut(QKeySequence("Ctrl+O"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionCopy, SIGNAL(triggered()), this, SLOT(sltCopyMedium()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create modify-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionModify = new QAction(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pActionModify);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure modify-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionModify->setShortcut(QKeySequence("Ctrl+Space"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionModify, SIGNAL(triggered()), this, SLOT(sltModifyMedium()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create remove-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRemove = new QAction(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pActionRemove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure remove-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRemove->setShortcut(QKeySequence(QKeySequence::Delete));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionRemove, SIGNAL(triggered()), this, SLOT(sltRemoveMedium()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create release-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease = new QAction(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pActionRelease);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure release-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease->setShortcut(QKeySequence("Ctrl+L"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionRelease, SIGNAL(triggered()), this, SLOT(sltReleaseMedium()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create refresh-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRefresh = new QAction(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pActionRefresh);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure refresh-action: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRefresh->setShortcut(QKeySequence(QKeySequence::Refresh));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(m_pActionRefresh, SIGNAL(triggered()), this, SLOT(sltRefreshAll()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update action icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateActionIcons();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare menu-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareMenuBar();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare context-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareContextMenu();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareMenuBar()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create menu-bar-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pMenu = menuBar()->addMenu(QString());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pMenu);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure menu-bar-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pMenu->addAction(m_pActionCopy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pMenu->addAction(m_pActionModify);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pMenu->addAction(m_pActionRemove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pMenu->addAction(m_pActionRelease);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pMenu->addAction(m_pActionRefresh);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareContextMenu()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create context-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pContextMenu = new QMenu(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pContextMenu);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure contex-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pContextMenu->addAction(m_pActionCopy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pContextMenu->addAction(m_pActionModify);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pContextMenu->addAction(m_pActionRemove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pContextMenu->addAction(m_pActionRelease);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareCentralWidget()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create central-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCentralWidget(new QWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(centralWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create main-layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync new QVBoxLayout(centralWidget());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(centralWidget()->layout());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareToolBar();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare tab-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareTabWidget();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare button-box: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareButtonBox();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareToolBar()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar = new UIToolBar(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pToolBar);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->setIconSize(QSize(22, 22));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add tool-bar actions: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionCopy)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->addAction(m_pActionCopy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionModify)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->addAction(m_pActionModify);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRemove)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->addAction(m_pActionRemove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRelease)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->addAction(m_pActionRelease);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRefresh)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->addAction(m_pActionRefresh);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Integrate tool-bar into dialog: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#if MAC_LEOPARD_STYLE
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable unified tool-bars on Mac OS X. Available on Qt >= 4.3: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync addToolBar(m_pToolBar);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->enableMacToolbar();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* No spacing/margin on the Mac: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMainLayout->setContentsMargins(0, 0, 0, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMainLayout->insertSpacing(0, 10);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#else /* MAC_LEOPARD_STYLE */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add the tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMainLayout->insertWidget(0, m_pToolBar);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Set spacing/margin like in the selector window: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMainLayout->setSpacing(5);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMainLayout->setContentsMargins(5, 5, 5, 5);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* !MAC_LEOPARD_STYLE */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareTabWidget()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tab-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget = new QITabWidget;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pTabWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tabs: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < m_iTabCount; ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareTab(mediumType(i));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure tab-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setFocusPolicy(Qt::TabFocus);
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 if (currentTreeWidget())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync currentTreeWidget()->setFocus();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update other widgets according chosen tab: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sltHandleCurrentTabChanged();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareTab(UIMediumType type)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tab: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->addTab(new QWidget, QString());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QWidget *pTab = tab(type);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync AssertPtrReturnVoid(pTab);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tab layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync new QVBoxLayout(pTab);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(pTab->layout());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareTreeWidget(type, type == UIMediumType_HardDisk ? 3 : 2);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare information-container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync prepareInformationContainer(type, type == UIMediumType_HardDisk ? 5 : 2);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareTreeWidget(UIMediumType type, int iColumns)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_trees.insert(tabIndex(type), new QITreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = treeWidget(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setAlternatingRowColors(true);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setAllColumnsShowFocus(true);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setAcceptDrops(true);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setColumnCount(iColumns);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->sortItems(0, Qt::AscendingOrder);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (iColumns > 0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->header()->setResizeMode(0, QHeaderView::Fixed);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (iColumns > 1)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->header()->setResizeMode(1, QHeaderView::ResizeToContents);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (iColumns > 2)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->header()->setResizeMode(2, QHeaderView::ResizeToContents);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->header()->setStretchLastSection(false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setSortingEnabled(true);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(pTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltHandleCurrentItemChanged()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync connect(pTreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync this, SLOT(sltHandleDoubleClick()));
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: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync tab(type)->layout()->addWidget(pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareInformationContainer(UIMediumType type, int iFields)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create information-container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iIndex = tabIndex(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_containers.insert(iIndex, new QFrame);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QFrame *pInformationContainer = infoContainer(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(pInformationContainer);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure information-container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainer->setFrameShape(QFrame::Box);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainer->setFrameShadow(QFrame::Sunken);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create information-container layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync new QGridLayout(pInformationContainer);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync QGridLayout *pInformationContainerLayout = qobject_cast<QGridLayout*>(pInformationContainer->layout());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(pInformationContainerLayout);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create information-label: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_labels[iIndex] << new QLabel;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QLabel *pLabel = infoLabel(type, i);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(pLabel);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create information-field: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_fields[iIndex] << new QILabel;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QILabel *pField = infoField(type, i);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(pField);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure information-field: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pField->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pField->setFullSizeSelection(true);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add information-container labels & fields into container layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainerLayout->addWidget(pLabel, i, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pInformationContainerLayout->addWidget(pField, i, 1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add information-container into tab layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync tab(type)->layout()->addWidget(pInformationContainer);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareButtonBox()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create button-box: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pButtonBox = new QIDialogButtonBox;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pButtonBox);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 prepareProgressBar();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareProgressBar()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar = new UIEnumerationProgressBar;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(m_pProgressBar);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Configure progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->hide();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Add progress-bar into button-box layout: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pButtonBox->addExtraWidget(m_pProgressBar);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef Q_WS_MAC
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::prepareMacWindowMenu()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create window-menu for menu-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync menuBar()->addMenu(UIWindowMenuManager::instance()->createMenu(this));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIWindowMenuManager::instance()->addWindow(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::repopulateTreeWidgets()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Remember current medium-items: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pMediumItem = mediumItem(UIMediumType_HardDisk))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_strCurrentIdHD = pMediumItem->id();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pMediumItem = mediumItem(UIMediumType_DVD))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_strCurrentIdCD = pMediumItem->id();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pMediumItem = mediumItem(UIMediumType_Floppy))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_strCurrentIdFD = pMediumItem->id();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Clear tree-widgets: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetHD = treeWidget(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetHD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidgetHD, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetHD->clear();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetCD = treeWidget(UIMediumType_DVD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetCD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidgetCD, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetCD->clear();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetFD = treeWidget(UIMediumType_Floppy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetFD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidgetFD, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetFD->clear();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create medium-items (do not change current one): */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_fPreventChangeCurrentItem = true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (const QString &strMediumID, vboxGlobal().mediumIDs())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sltHandleMediumCreated(strMediumID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_fPreventChangeCurrentItem = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Select first item as current one if nothing selected: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetHD && !mediumItem(UIMediumType_HardDisk))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (QTreeWidgetItem *pItem = pTreeWidgetHD->topLevelItem(0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidgetHD, pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetCD && !mediumItem(UIMediumType_DVD))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (QTreeWidgetItem *pItem = pTreeWidgetCD->topLevelItem(0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidgetCD, pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetFD && !mediumItem(UIMediumType_Floppy))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (QTreeWidgetItem *pItem = pTreeWidgetFD->topLevelItem(0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidgetFD, pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::refetchCurrentMediumItem(UIMediumType type)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get corresponding medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = mediumItem(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef Q_WS_MAC
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Set the file for the proxy icon: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pMediumItem == currentMediumItem())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setWindowFilePath(pMediumItem ? pMediumItem->location() : QString());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure current medium-item visible: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync treeWidget(type)->scrollToItem(pMediumItem, QAbstractItemView::EnsureVisible);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update actions: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateActions();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update corresponding information-panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateInformationFields(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::refetchCurrentChosenMediumItem()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentMediumItem(currentMediumType());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::refetchCurrentMediumItems()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentMediumItem(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentMediumItem(UIMediumType_DVD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentMediumItem(UIMediumType_Floppy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateActions()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = currentMediumItem();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Calculate actions accessibility: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fNotInEnumeration = !vboxGlobal().isMediumEnumerationInProgress();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Apply actions accessibility: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionCopy)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fActionEnabledCopy = currentMediumType() == UIMediumType_HardDisk &&
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Copy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionCopy->setEnabled(fActionEnabledCopy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionModify)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fActionEnabledModify = currentMediumType() == UIMediumType_HardDisk &&
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Modify);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionModify->setEnabled(fActionEnabledModify);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRemove)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fActionEnabledRemove = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Remove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRemove->setEnabled(fActionEnabledRemove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRelease)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fActionEnabledRelease = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Release);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease->setEnabled(fActionEnabledRelease);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateActionIcons()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strPrefix = "hd";
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pTabWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync switch (currentMediumType())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_HardDisk: strPrefix = "hd"; break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_DVD: strPrefix = "cd"; break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_Floppy: strPrefix = "fd"; break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionCopy)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionCopy->setIcon(UIIconPool::iconSetFull(QString(":/%1_copy_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_copy_16px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_copy_disabled_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_copy_disabled_16px.png").arg(strPrefix)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionModify)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionModify->setIcon(UIIconPool::iconSetFull(QString(":/%1_modify_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_modify_16px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_modify_disabled_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_modify_disabled_16px.png").arg(strPrefix)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRemove)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRemove->setIcon(UIIconPool::iconSetFull(QString(":/%1_remove_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_remove_16px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_remove_disabled_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_remove_disabled_16px.png").arg(strPrefix)));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRelease)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pActionRelease->setIcon(UIIconPool::iconSetFull(QString(":/%1_release_22px.png").arg(strPrefix),
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString(":/%1_release_16px.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"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateTabIcons(UIMediumItem *pMediumItem, Action action)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure medium-item is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturnVoid(pMediumItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Prepare data for tab: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const QIcon *pIcon = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool *pfInaccessible = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const UIMediumType mediumType = pMediumItem->mediumType();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync switch (mediumType)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_HardDisk:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pIcon = &m_iconHD;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pfInaccessible = &m_fInaccessibleHD;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_DVD:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pIcon = &m_iconCD;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pfInaccessible = &m_fInaccessibleCD;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_Floppy:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pIcon = &m_iconFD;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pfInaccessible = &m_fInaccessibleFD;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertFailed();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturnVoid(pIcon && pfInaccessible);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync switch (action)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case Action_Add:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Does it change the overall state? */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (*pfInaccessible || pMediumItem->state() != KMediumState_Inaccessible)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break; /* no */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *pfInaccessible = true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pTabWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(mediumType), vboxGlobal().warningIcon());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case Action_Edit:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case Action_Remove:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fCheckRest = false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (action == Action_Edit)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Does it change the overall state? */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ((*pfInaccessible && pMediumItem->state() == KMediumState_Inaccessible) ||
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync (!*pfInaccessible && pMediumItem->state() != KMediumState_Inaccessible))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break; /* no */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Is the given item in charge? */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!*pfInaccessible && pMediumItem->state() == KMediumState_Inaccessible)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *pfInaccessible = true; /* yes */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fCheckRest = true; /* no */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync fCheckRest = true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (fCheckRest)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Find the first KMediumState_Inaccessible item to be in charge: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CheckIfSuitableByState lookForState(KMediumState_Inaccessible);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CheckIfSuitableByID ignoreID(pMediumItem->id());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pInaccessibleMediumItem = searchItem(pMediumItem->treeWidget(), lookForState, &ignoreID);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *pfInaccessible = !!pInaccessibleMediumItem;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pTabWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (*pfInaccessible)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(mediumType), vboxGlobal().warningIcon());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pTabWidget->setTabIcon(tabIndex(mediumType), *pIcon);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateInformationFields(UIMediumType type /* = UIMediumType_Invalid */)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure type is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (type == UIMediumType_Invalid)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync type = currentMediumType();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Depending on required type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync switch (type)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_HardDisk: updateInformationFieldsHD(); break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_DVD: updateInformationFieldsCD(); break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_Floppy: updateInformationFieldsFD(); break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_All:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateInformationFieldsHD();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateInformationFieldsCD();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateInformationFieldsFD();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateInformationFieldsHD()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current hard-drive medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pCurrentItem = mediumItem(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is not set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pCurrentItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Just clear information panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < m_fields[tabIndex(UIMediumType_HardDisk)].size(); ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_HardDisk, i)->clear();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Acquire required details: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strDetails = pCurrentItem->details();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strUsage = pCurrentItem->usage().isNull() ?
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync formatFieldText(QApplication::translate("VBoxMediaManagerDlg", "<i>Not&nbsp;Attached</i>"), false) :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync formatFieldText(pCurrentItem->usage());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoField(UIMediumType_HardDisk, 0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_HardDisk, 0)->setText(pCurrentItem->hardDiskType());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoField(UIMediumType_HardDisk, 1))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_HardDisk, 1)->setText(formatFieldText(pCurrentItem->location(), true, "end"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoField(UIMediumType_HardDisk, 2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_HardDisk, 2)->setText(pCurrentItem->hardDiskFormat());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoField(UIMediumType_HardDisk, 3))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_HardDisk, 3)->setText(strDetails);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoField(UIMediumType_HardDisk, 4))
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync infoField(UIMediumType_HardDisk, 4)->setText(strUsage);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable/disable information-panes container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoContainer(UIMediumType_HardDisk))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoContainer(UIMediumType_HardDisk)->setEnabled(pCurrentItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateInformationFieldsCD()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current optical medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pCurrentItem = mediumItem(UIMediumType_DVD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is not set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pCurrentItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Just clear information panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < m_fields[tabIndex(UIMediumType_DVD)].size(); ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_DVD, i)->clear();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update required details: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strUsage = pCurrentItem->usage().isNull() ?
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync formatFieldText(QApplication::translate("VBoxMediaManagerDlg", "<i>Not&nbsp;Attached</i>"), false) :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync formatFieldText(pCurrentItem->usage());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoField(UIMediumType_DVD, 0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_DVD, 0)->setText(formatFieldText(pCurrentItem->location(), true, "end"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoField(UIMediumType_DVD, 1))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_DVD, 1)->setText(strUsage);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable/disable information-panes container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoContainer(UIMediumType_DVD))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoContainer(UIMediumType_DVD)->setEnabled(pCurrentItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateInformationFieldsFD()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get current floppy medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pCurrentItem = mediumItem(UIMediumType_Floppy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is not set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pCurrentItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Just clear information panes: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync for (int i = 0; i < m_fields[tabIndex(UIMediumType_Floppy)].size(); ++i)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_Floppy, i)->clear();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If current item is set: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update required details: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strUsage = pCurrentItem->usage().isNull() ?
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync formatFieldText(QApplication::translate("VBoxMediaManagerDlg", "<i>Not&nbsp;Attached</i>"), false) :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync formatFieldText(pCurrentItem->usage());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoField(UIMediumType_Floppy, 0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_Floppy, 0)->setText(formatFieldText(pCurrentItem->location(), true, "end"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoField(UIMediumType_Floppy, 1))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoField(UIMediumType_Floppy, 1)->setText(strUsage);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Enable/disable information-panes container: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoContainer(UIMediumType_Floppy))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoContainer(UIMediumType_Floppy)->setEnabled(pCurrentItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef Q_WS_MAC
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::cleanupMacWindowMenu()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Destroy window-menu of menu-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIWindowMenuManager::instance()->removeWindow(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIWindowMenuManager::instance()->destroyMenu(this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::cleanup()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef Q_WS_MAC
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Cleanup Mac window-menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync cleanupMacWindowMenu();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::retranslateUi()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
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
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate window title: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setWindowTitle(QApplication::translate("VBoxMediaManagerDlg", "Virtual Media Manager"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate menu: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pMenu)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pMenu->setTitle(QApplication::translate("VBoxMediaManagerDlg", "&Actions"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate actions: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionCopy)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionModify)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRemove)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRelease)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pActionRefresh)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate tool-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef Q_WS_MAC
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# ifdef QT_MAC_USE_COCOA
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 if (m_pToolBar)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pToolBar->updateLayout();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# endif /* QT_MAC_USE_COCOA */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate tab-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pTabWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate HD tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetHD = treeWidget(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetHD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate HD information-labels: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoLabel(UIMediumType_HardDisk, 0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 0)->setText(QApplication::translate("VBoxMediaManagerDlg", "Type:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoLabel(UIMediumType_HardDisk, 1))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 1)->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoLabel(UIMediumType_HardDisk, 2))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 2)->setText(QApplication::translate("VBoxMediaManagerDlg", "Format:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoLabel(UIMediumType_HardDisk, 3))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 3)->setText(QApplication::translate("VBoxMediaManagerDlg", "Storage details:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoLabel(UIMediumType_HardDisk, 4))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_HardDisk, 4)->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate CD tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetCD = treeWidget(UIMediumType_DVD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetCD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetCD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetCD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Size"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate CD information-labels: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoLabel(UIMediumType_DVD, 0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_DVD, 0)->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoLabel(UIMediumType_DVD, 1))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_DVD, 1)->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate FD tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidgetFD = treeWidget(UIMediumType_Floppy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidgetFD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetFD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidgetFD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Size"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate FD information-labels: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoLabel(UIMediumType_Floppy, 0))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_Floppy, 0)->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (infoLabel(UIMediumType_Floppy, 1))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync infoLabel(UIMediumType_Floppy, 1)->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Translate progress-bar: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pProgressBar)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->setText(QApplication::translate("VBoxMediaManagerDlg", "Checking accessibility"));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef Q_WS_MAC
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure that the widgets aren't jumping around
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * while the progress-bar get visible. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pProgressBar->adjustSize();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int h = m_pProgressBar->height();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (m_pButtonBox)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_pButtonBox->setMinimumHeight(h + 12);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* Q_WS_MAC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Full refresh if there is at least one item present: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ( (pTreeWidgetHD && pTreeWidgetHD->topLevelItemCount())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || (pTreeWidgetCD && pTreeWidgetCD->topLevelItemCount())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync || (pTreeWidgetFD && pTreeWidgetFD->topLevelItemCount()))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync sltRefreshAll();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::createMediumItem(const UIMedium &medium)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumType type = medium.type();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync switch (type)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Of hard-drive type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_HardDisk:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding tree-widget exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = treeWidget(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Recursively create hard-drive item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = createHardDiskItem(medium);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pMediumItem->id() == m_strCurrentIdHD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidget, pMediumItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_strCurrentIdHD = QString();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Of optical-image type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_DVD:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding tree-widget exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = treeWidget(UIMediumType_DVD);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create optical-disk item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = new UIMediumItemCD(medium, pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Optical medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pMediumItem->id() == m_strCurrentIdCD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidget, pMediumItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_strCurrentIdCD = QString();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Of floppy-image type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_Floppy:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding tree-widget exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = treeWidget(UIMediumType_Floppy);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
19b725c530eb49600728765de7ed451cbe290740vboxsync /* Create floppy-disk item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = new UIMediumItemFD(medium, pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Floppy medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync if (pMediumItem->id() == m_strCurrentIdFD)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidget, pMediumItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync m_strCurrentIdFD = QString();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: AssertMsgFailed(("Medium-type unknown: %d\n", type)); break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update tab-icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateTabIcons(pMediumItem, Action_Add);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch medium-item if it is current one created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pMediumItem == mediumItem(type))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentMediumItem(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return created medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pMediumItem;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::createHardDiskItem(const UIMedium &medium)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure passed medium is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(!medium.medium().isNull(), 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding tree-widget exists: */
19b725c530eb49600728765de7ed451cbe290740vboxsync QTreeWidget *pTreeWidget = treeWidget(UIMediumType_HardDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pTreeWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for existing medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(medium.id()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* If medium-item do not exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If medium have a parent: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (medium.parentID() != UIMedium::nullID())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to find parent medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pParentMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(medium.parentID()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If parent medium-item was not found: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pParentMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure corresponding parent medium is already cached! */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMedium parentMedium = vboxGlobal().medium(medium.parentID());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (parentMedium.isNull())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertMsgFailed(("Parent medium with ID={%s} was not found!\n", medium.parentID().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Try to create parent medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pParentMediumItem = createHardDiskItem(parentMedium);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If parent medium-item was found: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pParentMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = new UIMediumItemHD(medium, pParentMediumItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Child hard-drive medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Else just create item as top-level one: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = new UIMediumItemHD(medium, pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Root hard-drive medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return created medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pMediumItem;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::updateMediumItem(const UIMedium &medium)
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumType type = medium.type();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for existing medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = searchItem(treeWidget(type), CheckIfSuitableByID(medium.id()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Create item if doesn't exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = createMediumItem(medium);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was created: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem->setMedium(medium);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Medium-item with ID={%s} updated.\n", medium.id().toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync /* Update tab-icons: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync updateTabIcons(pMediumItem, Action_Edit);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch medium-item if it is current one updated: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pMediumItem == mediumItem(type))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentMediumItem(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::deleteMediumItem(const QString &strMediumID)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for corresponding tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QList<UIMediumType> types;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync types << UIMediumType_HardDisk << UIMediumType_DVD << UIMediumType_Floppy;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QTreeWidget *pTreeWidget = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UIMediumItem *pMediumItem = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync foreach (UIMediumType type, types)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get iterated tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget = treeWidget(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Search for existing medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(strMediumID));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure item was found: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pMediumItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Update tab-icons: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync updateTabIcons(pMediumItem, Action_Remove);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Delete medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync delete pMediumItem;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LogRel2(("UIMediumManager: Medium-item with ID={%s} deleted.\n", strMediumID.toAscii().constData()));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If there is no current medium-item now selected
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * we have to choose first-available medium-item as current one: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pTreeWidget->currentItem())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setCurrentItem(pTreeWidget, pTreeWidget->topLevelItem(0));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQWidget* UIMediumManager::tab(UIMediumType type) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iIndex = tabIndex(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return tab for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (iIndex >= 0 && iIndex < m_iTabCount)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return iIndex < m_pTabWidget->count() ? m_pTabWidget->widget(iIndex) : 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQTreeWidget* UIMediumManager::treeWidget(UIMediumType type) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iIndex = tabIndex(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return tree-widget for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (iIndex >= 0 && iIndex < m_iTabCount)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return m_trees.value(iIndex, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsyncUIMediumItem* UIMediumManager::mediumItem(UIMediumType type) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Get corresponding tree-widget: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync QTreeWidget *pTreeWidget = treeWidget(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return corresponding medium-item: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync return pTreeWidget ? toMediumItem(pTreeWidget->currentItem()) : 0;
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQFrame* UIMediumManager::infoContainer(UIMediumType type) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iIndex = tabIndex(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return information-container for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (iIndex >= 0 && iIndex < m_iTabCount)
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync return m_containers.value(iIndex, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Null by default: */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQLabel* UIMediumManager::infoLabel(UIMediumType type, int iLabelIndex) const
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iIndex = tabIndex(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Look for corresponding information-label list for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (iIndex >= 0 && iIndex < m_iTabCount)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const QList<QLabel*> labels = m_labels.value(iIndex, QList<QLabel*>());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return information-label for known index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return labels.value(iLabelIndex, 0);
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQILabel* UIMediumManager::infoField(UIMediumType type, int iFieldIndex) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index for passed medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iIndex = tabIndex(type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync /* Look for corresponding information-field list for known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (iIndex >= 0 && iIndex < m_iTabCount)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const QList<QILabel*> fields = m_fields.value(iIndex, QList<QILabel*>());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return information-field for known index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return fields.value(iFieldIndex, 0);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumType UIMediumManager::mediumType(QTreeWidget *pTreeWidget) const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Determine tab index of passed tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int iIndex = m_trees.key(pTreeWidget, -1);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return medium type for known tab index: */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync if (iIndex >= 0 && iIndex < m_iTabCount)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return mediumType(iIndex);
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Invalid by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertFailedReturn(UIMediumType_Invalid);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsyncUIMediumType UIMediumManager::currentMediumType() const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Invalid if tab-widget doesn't exists: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!m_pTabWidget)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return UIMediumType_Invalid;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return current medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return mediumType(m_pTabWidget->currentIndex());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQTreeWidget* UIMediumManager::currentTreeWidget() const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return current tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return treeWidget(currentMediumType());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::currentMediumItem() const
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* Return current medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return mediumItem(currentMediumType());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid UIMediumManager::setCurrentItem(QTreeWidget *pTreeWidget, QTreeWidgetItem *pItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure passed tree-widget is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertPtrReturnVoid(pTreeWidget);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make passed item current for passed tree-widget: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->setCurrentItem(pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* If non NULL item was passed: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure it's also selected, and visible: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pItem->setSelected(true);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pTreeWidget->scrollToItem(pItem, QAbstractItemView::EnsureVisible);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Re-fetch currently chosen medium-item: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync refetchCurrentChosenMediumItem();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncint UIMediumManager::tabIndex(UIMediumType type)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return tab index corresponding to known medium type: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync switch (type)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_HardDisk: return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_DVD: return 1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case UIMediumType_Floppy: return 2;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* -1 by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return -1;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumType UIMediumManager::mediumType(int iIndex)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return medium type corresponding to known tab index: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync switch (iIndex)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case 0: return UIMediumType_HardDisk;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case 1: return UIMediumType_DVD;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case 2: return UIMediumType_Floppy;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default: break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Invalid by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return UIMediumType_Invalid;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::searchItem(QTreeWidget *pTreeWidget, const CheckIfSuitableBy &condition, CheckIfSuitableBy *pException)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure argument is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pTreeWidget)
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Return wrapper: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return searchItem(pTreeWidget->invisibleRootItem(), condition, pException);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::searchItem(QTreeWidgetItem *pParentItem, const CheckIfSuitableBy &condition, CheckIfSuitableBy *pException)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure argument is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!pParentItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Verify passed item if it is of 'medium' type too: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (UIMediumItem *pMediumParentItem = toMediumItem(pParentItem))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ( condition.isItSuitable(pMediumParentItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync && (!pException || !pException->isItSuitable(pMediumParentItem)))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pMediumParentItem;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
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))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pRequiredMediumChildItem;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync /* Null by default: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncbool UIMediumManager::checkMediumFor(UIMediumItem *pItem, Action action)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Make sure passed ID is valid: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturn(pItem, false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync switch (action)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case Action_Edit:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
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 switch (pItem->state())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case KMediumState_NotCreated:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case KMediumState_Inaccessible:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case KMediumState_LockedRead:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case KMediumState_LockedWrite:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return false;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync default:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync break;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return true;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case Action_Copy:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* False for children: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pItem->medium().parentID() == UIMedium::nullID();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case Action_Modify:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* False for children: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pItem->medium().parentID() == UIMedium::nullID();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case Action_Remove:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Removable if not attached to anything: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return !pItem->isUsed();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync case Action_Release:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Releasable if attached but not in snapshots: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pItem->isUsed() && !pItem->isUsedInSnapshots();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertFailedReturn(false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncUIMediumItem* UIMediumManager::toMediumItem(QTreeWidgetItem *pItem)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Cast passed QTreeWidgetItem to UIMediumItem if possible: */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pItem && pItem->type() == UIMediumItem::Type ? static_cast<UIMediumItem*>(pItem) : 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* static */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncQString UIMediumManager::formatFieldText(const QString &strText, bool fCompact /* = true */,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const QString &strElipsis /* = "middle" */)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString compactString = QString("<compact elipsis=\"%1\">").arg(strElipsis);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QString strInfo = QString("<nobr>%1%2%3</nobr>")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync .arg(fCompact ? compactString : "")
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync .arg(strText.isEmpty() ?
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync QApplication::translate("VBoxMediaManagerDlg", "--", "no info") :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync strText)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync .arg(fCompact ? "</compact>" : "");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return strInfo;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "UIMediumManager.moc"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync