VBoxMedium.h revision 822c2eab7ded4b35b85c651009b119801db4b0be
/** @file
*
* VBox frontends: Qt GUI ("VirtualBox"):
* VBoxMedium class declaration
*/
/*
* Copyright (C) 2009 Sun Microsystems, Inc.
*
* 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.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 USA or visit http://www.sun.com if you need
* additional information or have any questions.
*/
#ifndef __VBoxMedium_h__
#define __VBoxMedium_h__
#include "COMDefs.h"
#include <QPixmap>
/**
* 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 KMediaState_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 KMediaState_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 KMediaState_NotCreated.
*/
, mIsReadOnly (false), mIsUsedInSnapshots (false)
/**
* Creates a media descriptor associated with the given medium.
*
* The state field remain KMediaState_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.
*/
{
}
/**
* 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.
* which case #usage() will contain a string with comma-sparated VM names.
*/
bool isUsedInSnapshots() const { return mIsUsedInSnapshots; }
/**
* Returns @c true if this medium is attached to the given machine in the
* current state.
*/
/**
* Returns a vector of IDs of all machines this medium is attached
* to in their current state (i.e. excluding snapshots).
*/
{ return mCurStateMachineIds; }
/**
* Returns a parent medium. For non-hard disk media, this is always NULL.
*/
VBoxMedium &root() const;
/** Shortcut to <tt>#toolTip (aNoDiffs, true)</tt>. */
/** Shortcut to <tt>#icon (aNoDiffs, true)</tt>. */
bool aUseHTML = false) const;
/** Shortcut to <tt>#details (aNoDiffs, aPredictDiff, true)</tt>. */
/** Returns @c true if this media descriptor is a null object. */
void init();
void checkNoDiffs (bool aNoDiffs);
bool mIsReadOnly : 1;
bool mIsUsedInSnapshots : 1;
/**
* Used to override some attributes in the user-friendly "don't show diffs"
* mode.
*/
struct NoDiffs
{
bool isSet : 1;
}
};
#endif /* __VBoxMedium_h__ */