VBoxMedium.h revision e64031e20c39650a7bc902a3e1aba613b9415dee
/** @file
*
* VBox frontends: Qt GUI ("VirtualBox"):
* VBoxMedium class declaration
*/
/*
* Copyright (C) 2009 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#ifndef __VBoxMedium_h__
#define __VBoxMedium_h__
/* Global includes */
#include <QPixmap>
#include <QLinkedList>
/* Local includes */
#include "COMDefs.h"
/**
* Cache used to override some attributes in the user-friendly "don't show diffs" mode.
*/
struct NoDiffsCache
{
{
return *this;
}
bool isSet : 1;
};
/**
* Media descriptor for the GUI.
*
* Maintains the results of the last state (accessibility) check and precomposes
* string parameters such as location, size which can be used in various GUI
* controls.
*
* Many getter methods take the boolean @a aNoDiffs argument. Unless explicitly
* stated otherwise, this argument, when set to @c true, will cause the
* corresponding property of this object's root medium to be returned instead of
* its own one. This is useful when hard disk media is represented in the
* user-friendly "don't show diffs" mode. For non-hard disk media, the value of
* this argument is irrelevant because the root object for such medium is
* the medium itself.
*
* Note that this class "abuses" the KMediumState_NotCreated state value to
* indicate that the accessibility check of the given medium (see
* #blockAndQueryState()) has not been done yet and therefore some parameters
* such as #size() are meaningless because they can be read only from the
* accessible medium. The real KMediumState_NotCreated state is not necessary
* because this class is only used with created (existing) media.
*/
{
/**
* Creates a null medium descriptor which is not associated with any medium.
* The state field is set to KMediumState_NotCreated.
*/
, mIsReadOnly (false)
, mIsUsedInSnapshots (false)
/**
* Creates a media descriptor associated with the given medium.
*
* The state field remain KMediumState_NotCreated until #blockAndQueryState()
* is called. All precomposed strings are filled up by implicitly calling
* #refresh(), see the #refresh() details for more info.
*
* One of the hardDisk, dvdImage, or floppyImage members is assigned from
* aMedium according to aType. @a aParent must be always NULL for non-hard
* disk media.
*/
, mIsReadOnly (false)
, mIsUsedInSnapshots (false)
/**
* Similar to the other non-null constructor but sets the media state to
* @a aState. Suitable when the media state is known such as right after
* creation.
*/
, mIsReadOnly (false)
, mIsUsedInSnapshots (false)
void blockAndQueryState();
void refresh();
/**
* Media state. In "don't show diffs" mode, this is the worst state (in
* terms of inaccessibility) detected on the given hard disk chain.
*
* @param aNoDiffs @c true to enable user-friendly "don't show diffs" mode.
*/
{
}
/**
* Result of the last blockAndQueryState() call. Will indicate an error and
* contain a proper error info if the last state check fails. In "don't show
* diffs" mode, this is the worst result (in terms of inaccessibility)
* detected on the given hard disk chain.
*
* @param aNoDiffs @c true to enable user-friendly "don't show diffs" mode.
*/
{
}
QString logicalSize (bool aNoDiffs = false) const { return aNoDiffs ? root().mLogicalSize : mLogicalSize; }
QString hardDiskFormat (bool aNoDiffs = false) const { return aNoDiffs ? root().mHardDiskFormat : mHardDiskFormat; }
QString hardDiskType (bool aNoDiffs = false) const { return aNoDiffs ? root().mHardDiskType : mHardDiskType; }
/**
* Returns @c true if this medium is read-only (either because it is
* Immutable or because it has child hard disks). Read-only media can only
* be attached indirectly.
*/
bool isReadOnly() const { return mIsReadOnly; }
/**
* Returns @c true if this medium is attached to any VM (in the current
* state or in a snapshot) in which case #usage() will contain a string with
* comma-sparated VM names (with snapshot names, if any, in parenthesis).
*/
/**
* Returns @c true if this medium is attached to any VM in any snapshot.
*/
bool isUsedInSnapshots() const { return mIsUsedInSnapshots; }
/**
* Returns @c true if this medium corresponds to real host drive.
*/
bool isHostDrive() const { return mIsHostDrive; }
/**
* Returns @c true if this medium is attached to the given machine in the current state.
*/
bool isAttachedInCurStateTo (const QString &aMachineId) const { return mCurStateMachineIds.indexOf (aMachineId) >= 0; }
/**
* Returns a vector of IDs of all machines this medium is attached
* to in their current state (i.e. excluding snapshots).
*/
/**
* Returns a parent medium. For non-hard disk media, this is always NULL.
*/
VBoxMedium& root() const;
/** Shortcut to <tt>#toolTip (aNoDiffs, true)</tt>. */
QString toolTipCheckRO (bool aNoDiffs = false, bool aNullAllowed = false) const { return toolTip (aNoDiffs, true, aNullAllowed); }
/** Shortcut to <tt>#icon (aNoDiffs, true)</tt>. */
/** Shortcut to <tt>#details (aNoDiffs, aPredictDiff, true)</tt>. */
QString detailsHTML (bool aNoDiffs = false, bool aPredictDiff = false) const { return details (aNoDiffs, aPredictDiff, true); }
/** Returns @c true if this media descriptor is a null object. */
void checkNoDiffs (bool aNoDiffs);
bool mIsReadOnly : 1;
bool mIsUsedInSnapshots : 1;
bool mIsHostDrive : 1;
};
#endif /* __VBoxMedium_h__ */