VBoxGlobal.h revision 1a9aff24299a7252e97aacbc1f9bd42663380155
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/** @file
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * VBox frontends: Qt GUI ("VirtualBox"):
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * VBoxGlobal class declaration
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * available from http://www.virtualbox.org. This file is free software;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * you can redistribute it and/or modify it under the terms of the GNU
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * General Public License (GPL) as published by the Free Software
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * additional information or have any questions.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#ifndef __VBoxGlobal_h__
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define __VBoxGlobal_h__
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include "COMDefs.h"
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include "VBoxGlobalSettings.h"
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/* Qt includes */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <QApplication>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <QLayout>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <QHash>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <QPixmap>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <QMenu>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <QStyle>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <QProcess>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <QLinkedList>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass QAction;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass QLabel;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass QToolButton;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync// Auxiliary types
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync////////////////////////////////////////////////////////////////////////////////
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Media descriptor for the GUI.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Maintains the results of the last state (accessibility) check and precomposes
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * string parameters such as location, size which can be used in various GUI
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * controls.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Many getter methods take the boolean @a aNoDiffs argument. Unless explicitly
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * stated otherwise, this argument, when set to @c true, will cause the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * corresponding property of this object's root medium to be returned instead of
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * its own one. This is useful when hard disk media is represented in the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * user-friendly "don't show diffs" mode. For non-hard disk media, the value of
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * this argument is irrelevant because the root object for such medium is
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * the medium itself.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Note that this class "abuses" the KMediaState_NotCreated state value to
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * indicate that the accessibility check of the given medium (see
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * #blockAndQueryState()) has not been done yet and therefore some parameters
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * such as #size() are meaningless because they can be read only from the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * accessible medium. The real KMediaState_NotCreated state is not necessary
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * because this class is only used with created (existing) media.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxMedium
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Creates a null medium descriptor which is not associated with any medium.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * The state field is set to KMediaState_NotCreated.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMedium()
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : mType (VBoxDefs::MediaType_Invalid)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mState (KMediaState_NotCreated)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mIsReadOnly (false), mIsUsedInSnapshots (false)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mParent (NULL) {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Creates a media descriptor associated with the given medium.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * The state field remain KMediaState_NotCreated until #blockAndQueryState()
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * is called. All precomposed strings are filled up by implicitly calling
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * #refresh(), see the #refresh() details for more info.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * One of the hardDisk, dvdImage, or floppyImage members is assigned from
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * aMedium according to aType. @a aParent must be always NULL for non-hard
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * disk media.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMedium (const CMedium &aMedium, VBoxDefs::MediaType aType,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMedium *aParent = NULL)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : mMedium (aMedium), mType (aType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mState (KMediaState_NotCreated)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mIsReadOnly (false), mIsUsedInSnapshots (false)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mParent (aParent) { init(); }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Similar to the other non-null constructor but sets the media state to
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @a aState. Suitable when the media state is known such as right after
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * creation.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMedium (const CMedium &aMedium, VBoxDefs::MediaType aType,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync KMediaState aState)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : mMedium (aMedium), mType (aType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mState (aState)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mIsReadOnly (false), mIsUsedInSnapshots (false)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mParent (NULL) { init(); }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync void blockAndQueryState();
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync void refresh();
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const CMedium &medium() const { return mMedium; };
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxDefs::MediaType type() const { return mType; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Media state. In "don't show diffs" mode, this is the worst state (in
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * terms of inaccessibility) detected on the given hard disk chain.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param aNoDiffs @c true to enable user-friendly "don't show diffs" mode.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync KMediaState state (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unconst (this)->checkNoDiffs (aNoDiffs);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync return aNoDiffs ? mNoDiffs.state : mState;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString lastAccessError() const { return mLastAccessError; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Result of the last blockAndQueryState() call. Will indicate an error and
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * contain a proper error info if the last state check fails. In "don't show
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * diffs" mode, this is the worst result (in terms of inaccessibility)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * detected on the given hard disk chain.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param aNoDiffs @c true to enable user-friendly "don't show diffs" mode.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const COMResult &result (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unconst (this)->checkNoDiffs (aNoDiffs);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync return aNoDiffs ? mNoDiffs.result : mResult;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const CHardDisk2 &hardDisk() const { return mHardDisk; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const CDVDImage &dvdImage() const { return mDVDImage; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const CFloppyImage2 &floppyImage() const { return mFloppyImage; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QUuid id() const { return mId; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString location (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return aNoDiffs ? root().mLocation : mLocation; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString name (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return aNoDiffs ? root().mName : mName; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString size (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return aNoDiffs ? root().mSize : mSize; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString hardDiskFormat (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return aNoDiffs ? root().mHardDiskFormat : mHardDiskFormat; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString hardDiskType (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return aNoDiffs ? root().mHardDiskType : mHardDiskType; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString logicalSize (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return aNoDiffs ? root().mLogicalSize : mLogicalSize; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString usage (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return aNoDiffs ? root().mUsage : mUsage; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Returns @c true if this medium is read-only (either because it is
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Immutable or because it has child hard disks). Read-only media can only
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * be attached indirectly.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool isReadOnly() const { return mIsReadOnly; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Returns @c true if this medium is attached to any VM (in the current
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * state or in a snapshot) in which case #usage() will contain a string with
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * comma-sparated VM names (with snapshot names, if any, in parenthesis).
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool isUsed() const { return !mUsage.isNull(); }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Returns @c true if this medium is attached to any VM in any snapshot.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * which case #usage() will contain a string with comma-sparated VM names.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool isUsedInSnapshots() const { return mIsUsedInSnapshots; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Returns @c true if this medium is attached to the given machine in the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * current state.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool isAttachedInCurStateTo (const QUuid &aMachineId) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return mCurStateMachineIds.indexOf (aMachineId) >= 0; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Returns a vector of IDs of all machines this medium is attached
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * to in their current state (i.e. excluding snapshots).
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const QList <QUuid> &curStateMachineIds() const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return mCurStateMachineIds; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Returns a parent medium. For non-hard disk media, this is always NULL.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMedium *parent() const { return mParent; }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMedium &root() const;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString toolTip(bool aNoDiffs = false, bool aCheckRO = false) const;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QPixmap icon (bool aNoDiffs = false, bool aCheckRO = false) const;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /** Shortcut to <tt>#toolTip (aNoDiffs, true)</tt>. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString toolTipCheckRO (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return toolTip (aNoDiffs, true); }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /** Shortcut to <tt>#icon (aNoDiffs, true)</tt>. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QPixmap iconCheckRO (bool aNoDiffs = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return icon (aNoDiffs, true); }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString details (bool aNoDiffs = false, bool aPredictDiff = false,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool aUseHTML = false) const;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /** Shortcut to <tt>#details (aNoDiffs, aPredictDiff, true)</tt>. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString detailsHTML (bool aNoDiffs = false, bool aPredictDiff = false) const
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync { return details (aNoDiffs, aPredictDiff, true); }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /** Returns @c true if this media descriptor is a null object. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool isNull() const { return mMedium.isNull(); }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncprivate:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync void init();
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync void checkNoDiffs (bool aNoDiffs);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CMedium mMedium;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxDefs::MediaType mType;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync KMediaState mState;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString mLastAccessError;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync COMResult mResult;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CHardDisk2 mHardDisk;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CDVDImage mDVDImage;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync CFloppyImage2 mFloppyImage;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QUuid mId;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString mLocation;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString mName;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString mSize;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString mHardDiskFormat;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString mHardDiskType;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString mLogicalSize;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString mUsage;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString mToolTip;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool mIsReadOnly : 1;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool mIsUsedInSnapshots : 1;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QList <QUuid> mCurStateMachineIds;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMedium *mParent;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Used to override some attributes in the user-friendly "don't show diffs"
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * mode.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync struct NoDiffs
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync NoDiffs() : isSet (false), state (KMediaState_NotCreated) {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool isSet : 1;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync KMediaState state;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync COMResult result;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QString toolTip;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync mNoDiffs;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef QLinkedList <VBoxMedium> VBoxMediaList;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync// VirtualBox callback events
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync////////////////////////////////////////////////////////////////////////////////
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxMachineStateChangeEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMachineStateChangeEvent (const QUuid &aId, KMachineState aState)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::MachineStateChangeEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , id (aId), state (aState)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const QUuid id;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const KMachineState state;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxMachineDataChangeEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMachineDataChangeEvent (const QUuid &aId)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::MachineDataChangeEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , id (aId)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const QUuid id;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxMachineRegisteredEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMachineRegisteredEvent (const QUuid &aId, bool aRegistered)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::MachineRegisteredEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , id (aId), registered (aRegistered)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const QUuid id;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const bool registered;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxSessionStateChangeEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxSessionStateChangeEvent (const QUuid &aId, KSessionState aState)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::SessionStateChangeEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , id (aId), state (aState)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const QUuid id;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const KSessionState state;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxSnapshotEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync enum What { Taken, Discarded, Changed };
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxSnapshotEvent (const QUuid &aMachineId, const QUuid &aSnapshotId,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync What aWhat)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::SnapshotEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , what (aWhat)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , machineId (aMachineId), snapshotId (aSnapshotId)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const What what;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const QUuid machineId;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const QUuid snapshotId;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxCanShowRegDlgEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxCanShowRegDlgEvent (bool aCanShow)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::CanShowRegDlgEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mCanShow (aCanShow)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const bool mCanShow;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxCanShowUpdDlgEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxCanShowUpdDlgEvent (bool aCanShow)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::CanShowUpdDlgEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mCanShow (aCanShow)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const bool mCanShow;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxChangeGUILanguageEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxChangeGUILanguageEvent (QString aLangId)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::ChangeGUILanguageEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mLangId (aLangId)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const QString mLangId;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#ifdef VBOX_GUI_WITH_SYSTRAY
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxMainWindowCountChangeEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxMainWindowCountChangeEvent (int aCount)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::MainWindowCountChangeEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mCount (aCount)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const int mCount;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxCanShowTrayIconEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxCanShowTrayIconEvent (bool aCanShow)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::CanShowTrayIconEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mCanShow (aCanShow)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const bool mCanShow;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxShowTrayIconEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxShowTrayIconEvent (bool aShow)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::ShowTrayIconEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mShow (aShow)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const bool mShow;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxChangeTrayIconEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxChangeTrayIconEvent (bool aChanged)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::TrayIconChangeEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mChanged (aChanged)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const bool mChanged;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#endif
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass VBoxChangeDockIconUpdateEvent : public QEvent
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync VBoxChangeDockIconUpdateEvent (bool aChanged)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync : QEvent ((QEvent::Type) VBoxDefs::ChangeDockIconUpdateEventType)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync , mChanged (aChanged)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {}
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync const bool mChanged;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync};
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncclass Process : public QProcess
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Q_OBJECT;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncpublic:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync static QByteArray singleShot (const QString &aProcessName,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int aTimeout = 5000
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* wait for data maximum 5 seconds */)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync {
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /* Why is it really needed is because of Qt4.3 bug with QProcess.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * This bug is about QProcess sometimes (~70%) do not receive
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * notification about process was finished, so this makes
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * 'bool QProcess::waitForFinished (int)' block the GUI thread and
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * never dismissed with 'true' result even if process was really
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * started&finished. So we just waiting for some information
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * on process output and destroy the process with force. Due to
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * QProcess::~QProcess() has the same 'waitForFinished (int)' blocker
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * we have to change process state to QProcess::NotRunning. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync QByteArray result;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Process process;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync process.start (aProcessName);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync bool firstShotReady = process.waitForReadyRead (aTimeout);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync if (firstShotReady)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync result = process.readAllStandardOutput();
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync process.setProcessState (QProcess::NotRunning);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync return result;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync }
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncprotected:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
Process (QWidget *aParent = 0) : QProcess (aParent) {}
};
// VBoxGlobal class
////////////////////////////////////////////////////////////////////////////////
class VBoxSelectorWnd;
class VBoxConsoleWnd;
class VBoxRegistrationDlg;
class VBoxUpdateDlg;
class VBoxGlobal : public QObject
{
Q_OBJECT
public:
typedef QHash <ulong, QString> QULongStringHash;
typedef QHash <long, QString> QLongStringHash;
static VBoxGlobal &instance();
bool isValid() { return mValid; }
QString versionString() { return mVerString; }
CVirtualBox virtualBox() const { return mVBox; }
const VBoxGlobalSettings &settings() const { return gset; }
bool setSettings (const VBoxGlobalSettings &gs);
VBoxSelectorWnd &selectorWnd();
VBoxConsoleWnd &consoleWnd();
/* main window handle storage */
void setMainWindow (QWidget *aMainWindow) { mMainWindow = aMainWindow; }
QWidget *mainWindow() const { return mMainWindow; }
bool isVMConsoleProcess() const { return !vmUuid.isNull(); }
#ifdef VBOX_GUI_WITH_SYSTRAY
bool isTrayMenu() const;
void setTrayMenu(bool aIsTrayMenu);
void trayIconShowSelector();
bool trayIconInstall();
#endif
QUuid managedVMUuid() const { return vmUuid; }
VBoxDefs::RenderMode vmRenderMode() const { return vm_render_mode; }
const char *vmRenderModeStr() const { return vm_render_mode_str; }
#ifdef VBOX_WITH_DEBUGGER_GUI
bool isDebuggerEnabled() const { return mDbgEnabled; }
bool isDebuggerAutoShowEnabled() const { return mDbgAutoShow; }
RTLDRMOD getDebuggerModule() const { return mhVBoxDbg; }
#else
bool isDebuggerAutoShowEnabled() const { return false; }
#endif
/* VBox enum to/from string/icon/color convertors */
QList <CGuestOSType> vmGuestOSFamilyList() const;
QList <CGuestOSType> vmGuestOSTypeList (const QString &aFamilyId) const;
QPixmap vmGuestOSTypeIcon (const QString &aTypeId) const;
CGuestOSType vmGuestOSType (const QString &aTypeId,
const QString &aFamilyId = QString::null) const;
QString vmGuestOSTypeDescription (const QString &aTypeId) const;
QPixmap toIcon (KMachineState s) const
{
QPixmap *pm = mVMStateIcons.value (s);
AssertMsg (pm, ("Icon for VM state %d must be defined", s));
return pm ? *pm : QPixmap();
}
const QColor &toColor (KMachineState s) const
{
static const QColor none;
AssertMsg (mVMStateColors.value (s), ("No color for %d", s));
return mVMStateColors.value (s) ? *mVMStateColors.value (s) : none;
}
QString toString (KMachineState s) const
{
AssertMsg (!mMachineStates.value (s).isNull(), ("No text for %d", s));
return mMachineStates.value (s);
}
QString toString (KSessionState s) const
{
AssertMsg (!mSessionStates.value (s).isNull(), ("No text for %d", s));
return mSessionStates.value (s);
}
/**
* Returns a string representation of the given KStorageBus enum value.
* Complementary to #toStorageBusType (const QString &) const.
*/
QString toString (KStorageBus aBus) const
{
AssertMsg (!mStorageBuses.value (aBus).isNull(), ("No text for %d", aBus));
return mStorageBuses [aBus];
}
/**
* Returns a KStorageBus enum value corresponding to the given string
* representation. Complementary to #toString (KStorageBus) const.
*/
KStorageBus toStorageBusType (const QString &aBus) const
{
QULongStringHash::const_iterator it =
qFind (mStorageBuses.begin(), mStorageBuses.end(), aBus);
AssertMsg (it != mStorageBuses.end(), ("No value for {%s}",
aBus.toLatin1().constData()));
return KStorageBus (it.key());
}
QString toString (KStorageBus aBus, LONG aChannel) const;
LONG toStorageChannel (KStorageBus aBus, const QString &aChannel) const;
QString toString (KStorageBus aBus, LONG aChannel, LONG aDevice) const;
LONG toStorageDevice (KStorageBus aBus, LONG aChannel, const QString &aDevice) const;
QString toFullString (KStorageBus aBus, LONG aChannel, LONG aDevice) const;
QString toString (KHardDiskType t) const
{
AssertMsg (!mDiskTypes.value (t).isNull(), ("No text for %d", t));
return mDiskTypes.value (t);
}
/**
* Similar to toString (KHardDiskType), but returns 'Differencing' for
* normal hard disks that have a parent.
*/
QString hardDiskTypeString (const CHardDisk2 &aHD) const
{
if (!aHD.GetParent().isNull())
{
Assert (aHD.GetType() == KHardDiskType_Normal);
return mDiskTypes_Differencing;
}
return toString (aHD.GetType());
}
QString toString (KVRDPAuthType t) const
{
AssertMsg (!mVRDPAuthTypes.value (t).isNull(), ("No text for %d", t));
return mVRDPAuthTypes.value (t);
}
QString toString (KPortMode t) const
{
AssertMsg (!mPortModeTypes.value (t).isNull(), ("No text for %d", t));
return mPortModeTypes.value (t);
}
QString toString (KUSBDeviceFilterAction t) const
{
AssertMsg (!mUSBFilterActionTypes.value (t).isNull(), ("No text for %d", t));
return mUSBFilterActionTypes.value (t);
}
QString toString (KClipboardMode t) const
{
AssertMsg (!mClipboardTypes.value (t).isNull(), ("No text for %d", t));
return mClipboardTypes.value (t);
}
KClipboardMode toClipboardModeType (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mClipboardTypes.begin(), mClipboardTypes.end(), s);
AssertMsg (it != mClipboardTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KClipboardMode (it.key());
}
QString toString (KIDEControllerType t) const
{
AssertMsg (!mIDEControllerTypes.value (t).isNull(), ("No text for %d", t));
return mIDEControllerTypes.value (t);
}
KIDEControllerType toIDEControllerType (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mIDEControllerTypes.begin(), mIDEControllerTypes.end(), s);
AssertMsg (it != mIDEControllerTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KIDEControllerType (it.key());
}
KVRDPAuthType toVRDPAuthType (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mVRDPAuthTypes.begin(), mVRDPAuthTypes.end(), s);
AssertMsg (it != mVRDPAuthTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KVRDPAuthType (it.key());
}
KPortMode toPortMode (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mPortModeTypes.begin(), mPortModeTypes.end(), s);
AssertMsg (it != mPortModeTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KPortMode (it.key());
}
KUSBDeviceFilterAction toUSBDevFilterAction (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mUSBFilterActionTypes.begin(), mUSBFilterActionTypes.end(), s);
AssertMsg (it != mUSBFilterActionTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KUSBDeviceFilterAction (it.key());
}
QString toString (KDeviceType t) const
{
AssertMsg (!mDeviceTypes.value (t).isNull(), ("No text for %d", t));
return mDeviceTypes.value (t);
}
KDeviceType toDeviceType (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mDeviceTypes.begin(), mDeviceTypes.end(), s);
AssertMsg (it != mDeviceTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KDeviceType (it.key());
}
QStringList deviceTypeStrings() const;
QString toString (KAudioDriverType t) const
{
AssertMsg (!mAudioDriverTypes.value (t).isNull(), ("No text for %d", t));
return mAudioDriverTypes.value (t);
}
KAudioDriverType toAudioDriverType (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mAudioDriverTypes.begin(), mAudioDriverTypes.end(), s);
AssertMsg (it != mAudioDriverTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KAudioDriverType (it.key());
}
QString toString (KAudioControllerType t) const
{
AssertMsg (!mAudioControllerTypes.value (t).isNull(), ("No text for %d", t));
return mAudioControllerTypes.value (t);
}
KAudioControllerType toAudioControllerType (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mAudioControllerTypes.begin(), mAudioControllerTypes.end(), s);
AssertMsg (it != mAudioControllerTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KAudioControllerType (it.key());
}
QString toString (KNetworkAdapterType t) const
{
AssertMsg (!mNetworkAdapterTypes.value (t).isNull(), ("No text for %d", t));
return mNetworkAdapterTypes.value (t);
}
KNetworkAdapterType toNetworkAdapterType (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mNetworkAdapterTypes.begin(), mNetworkAdapterTypes.end(), s);
AssertMsg (it != mNetworkAdapterTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KNetworkAdapterType (it.key());
}
QString toString (KNetworkAttachmentType t) const
{
AssertMsg (!mNetworkAttachmentTypes.value (t).isNull(), ("No text for %d", t));
return mNetworkAttachmentTypes.value (t);
}
KNetworkAttachmentType toNetworkAttachmentType (const QString &s) const
{
QULongStringHash::const_iterator it =
qFind (mNetworkAttachmentTypes.begin(), mNetworkAttachmentTypes.end(), s);
AssertMsg (it != mNetworkAttachmentTypes.end(), ("No value for {%s}",
s.toLatin1().constData()));
return KNetworkAttachmentType (it.key());
}
QString toString (KUSBDeviceState aState) const
{
AssertMsg (!mUSBDeviceStates.value (aState).isNull(), ("No text for %d", aState));
return mUSBDeviceStates.value (aState);
}
QStringList COMPortNames() const;
QString toCOMPortName (ulong aIRQ, ulong aIOBase) const;
bool toCOMPortNumbers (const QString &aName, ulong &aIRQ, ulong &aIOBase) const;
QStringList LPTPortNames() const;
QString toLPTPortName (ulong aIRQ, ulong aIOBase) const;
bool toLPTPortNumbers (const QString &aName, ulong &aIRQ, ulong &aIOBase) const;
QPixmap snapshotIcon (bool online) const
{
return online ? mOnlineSnapshotIcon : mOfflineSnapshotIcon;
}
QPixmap warningIcon() const { return mWarningIcon; }
QPixmap errorIcon() const { return mErrorIcon; }
/* details generators */
QString details (const CHardDisk2 &aHD, bool aPredictDiff);
QString details (const CUSBDevice &aDevice) const;
QString toolTip (const CUSBDevice &aDevice) const;
QString toolTip (const CUSBDeviceFilter &aFilter) const;
QString detailsReport (const CMachine &aMachine, bool aIsNewVM,
bool aWithLinks);
QString platformInfo();
/* VirtualBox helpers */
#if defined(Q_WS_X11) && !defined(VBOX_OSE)
double findLicenseFile (const QStringList &aFilesList, QRegExp aPattern, QString &aLicenseFile) const;
bool showVirtualBoxLicense();
#endif
bool checkForAutoConvertedSettings (bool aAfterRefresh = false);
void checkForAutoConvertedSettingsAfterRefresh()
{ checkForAutoConvertedSettings (true); }
CSession openSession (const QUuid &aId, bool aExisting = false);
/** Shortcut to openSession (aId, true). */
CSession openExistingSession (const QUuid &aId) { return openSession (aId, true); }
bool startMachine (const QUuid &id);
void startEnumeratingMedia();
/**
* Returns a list of all currently registered media. This list is used to
* globally track the accessiblity state of all media on a dedicated thread.
*
* Note that the media list is initially empty (i.e. before the enumeration
* process is started for the first time using #startEnumeratingMedia()).
* See #startEnumeratingMedia() for more information about how meida are
* sorted in the returned list.
*/
const VBoxMediaList &currentMediaList() const { return mMediaList; }
/** Returns true if the media enumeration is in progress. */
bool isMediaEnumerationStarted() const { return mMediaEnumThread != NULL; }
void addMedium (const VBoxMedium &);
void updateMedium (const VBoxMedium &);
void removeMedium (VBoxDefs::MediaType, const QUuid &);
bool findMedium (const CMedium &, VBoxMedium &) const;
/** Compact version of #findMediumTo(). Asserts if not found. */
VBoxMedium getMedium (const CMedium &aObj) const
{
VBoxMedium medium;
if (!findMedium (aObj, medium))
AssertFailed();
return medium;
}
/* Returns the number of current running Fe/Qt4 main windows. */
int mainWindowCount();
/* various helpers */
QString languageName() const;
QString languageCountry() const;
QString languageNameEnglish() const;
QString languageCountryEnglish() const;
QString languageTranslators() const;
void retranslateUi();
/** @internal made public for internal purposes */
void cleanup();
/* public static stuff */
static bool isDOSType (const QString &aOSTypeId);
static void adoptLabelPixmap (QLabel *);
static QString languageId();
static void loadLanguage (const QString &aLangId = QString::null);
QString helpFile() const;
static QIcon iconSet (const char *aNormal,
const char *aDisabled = NULL,
const char *aActive = NULL);
static QIcon iconSetOnOff (const char *aNormal, const char *aNormalOff,
const char *aDisabled = NULL,
const char *aDisabledOff = NULL,
const char *aActive = NULL,
const char *aActiveOff = NULL);
static QIcon iconSetFull (const QSize &aNormalSize, const QSize &aSmallSize,
const char *aNormal, const char *aSmallNormal,
const char *aDisabled = NULL,
const char *aSmallDisabled = NULL,
const char *aActive = NULL,
const char *aSmallActive = NULL);
static QIcon standardIcon (QStyle::StandardPixmap aStandard, QWidget *aWidget = NULL);
static void setTextLabel (QToolButton *aToolButton, const QString &aTextLabel);
static QRect normalizeGeometry (const QRect &aRectangle, const QRegion &aBoundRegion,
bool aCanResize = true);
static QRect getNormalized (const QRect &aRectangle, const QRegion &aBoundRegion,
bool aCanResize = true);
static QRegion flip (const QRegion &aRegion);
static void centerWidget (QWidget *aWidget, QWidget *aRelative,
bool aCanResize = true);
static QChar decimalSep();
static QString sizeRegexp();
static quint64 parseSize (const QString &);
static QString formatSize (quint64 aSize, uint aDecimal = 2,
VBoxDefs::FormatSize aMode = VBoxDefs::FormatSize_Round);
static quint64 requiredVideoMemory (CMachine *aMachine = 0);
static QString locationForHTML (const QString &aFileName);
static QString highlight (const QString &aStr, bool aToolTip = false);
static QString systemLanguageId();
static QString getExistingDirectory (const QString &aDir, QWidget *aParent,
const QString &aCaption = QString::null,
bool aDirOnly = TRUE,
bool resolveSymlinks = TRUE);
static QString getOpenFileName (const QString &aStartWith, const QString &aFilters, QWidget *aParent,
const QString &aCaption, QString *aSelectedFilter = NULL,
bool aResolveSymLinks = true);
static QStringList getOpenFileNames (const QString &aStartWith, const QString &aFilters, QWidget *aParent,
const QString &aCaption, QString *aSelectedFilter = NULL,
bool aResolveSymLinks = true,
bool aSingleFile = false);
static QString getFirstExistingDir (const QString &);
static bool activateWindow (WId aWId, bool aSwitchDesktop = true);
static QString removeAccelMark (const QString &aText);
static QString insertKeyToActionText (const QString &aText, const QString &aKey);
static QString extractKeyFromActionText (const QString &aText);
static QPixmap joinPixmaps (const QPixmap &aPM1, const QPixmap &aPM2);
static QWidget *findWidget (QWidget *aParent, const char *aName,
const char *aClassName = NULL,
bool aRecursive = false);
static QList <QPair <QString, QString> > HDDBackends();
/* Qt 4.2.0 support function */
static inline void setLayoutMargin (QLayout *aLayout, int aMargin)
{
#if QT_VERSION < 0x040300
/* Deprecated since > 4.2 */
aLayout->setMargin (aMargin);
#else
/* New since > 4.2 */
aLayout->setContentsMargins (aMargin, aMargin, aMargin, aMargin);
#endif
}
signals:
/**
* Emitted at the beginning of the enumeration process started by
* #startEnumeratingMedia().
*/
void mediumEnumStarted();
/**
* Emitted when a new medium item from the list has updated its
* accessibility state.
*/
void mediumEnumerated (const VBoxMedium &aMedum);
/**
* Emitted at the end of the enumeration process started by
* #startEnumeratingMedia(). The @a aList argument is passed for
* convenience, it is exactly the same as returned by #currentMediaList().
*/
void mediumEnumFinished (const VBoxMediaList &aList);
/** Emitted when a new media is added using #addMedia(). */
void mediumAdded (const VBoxMedium &);
/** Emitted when the media is updated using #updateMedia(). */
void mediumUpdated (const VBoxMedium &);
/** Emitted when the media is removed using #removeMedia(). */
void mediumRemoved (VBoxDefs::MediaType, const QUuid &);
/* signals emitted when the VirtualBox callback is called by the server
* (note that currently these signals are emitted only when the application
* is the in the VM selector mode) */
void machineStateChanged (const VBoxMachineStateChangeEvent &e);
void machineDataChanged (const VBoxMachineDataChangeEvent &e);
void machineRegistered (const VBoxMachineRegisteredEvent &e);
void sessionStateChanged (const VBoxSessionStateChangeEvent &e);
void snapshotChanged (const VBoxSnapshotEvent &e);
#ifdef VBOX_GUI_WITH_SYSTRAY
void mainWindowCountChanged (const VBoxMainWindowCountChangeEvent &e);
void trayIconCanShow (const VBoxCanShowTrayIconEvent &e);
void trayIconShow (const VBoxShowTrayIconEvent &e);
void trayIconChanged (const VBoxChangeTrayIconEvent &e);
#endif
void dockIconUpdateChanged (const VBoxChangeDockIconUpdateEvent &e);
void canShowRegDlg (bool aCanShow);
void canShowUpdDlg (bool aCanShow);
public slots:
bool openURL (const QString &aURL);
void showRegistrationDialog (bool aForce = true);
void showUpdateDialog (bool aForce = true);
void perDayNewVersionNotifier();
protected:
bool event (QEvent *e);
bool eventFilter (QObject *, QEvent *);
private:
VBoxGlobal();
~VBoxGlobal();
void init();
bool mValid;
CVirtualBox mVBox;
VBoxGlobalSettings gset;
VBoxSelectorWnd *mSelectorWnd;
VBoxConsoleWnd *mConsoleWnd;
QWidget* mMainWindow;
#ifdef VBOX_WITH_REGISTRATION
VBoxRegistrationDlg *mRegDlg;
#endif
VBoxUpdateDlg *mUpdDlg;
QUuid vmUuid;
#ifdef VBOX_GUI_WITH_SYSTRAY
bool mIsTrayMenu : 1; /*< Tray icon active/desired? */
bool mIncreasedWindowCounter : 1;
#endif
QThread *mMediaEnumThread;
VBoxMediaList mMediaList;
VBoxDefs::RenderMode vm_render_mode;
const char * vm_render_mode_str;
#ifdef VBOX_WITH_DEBUGGER_GUI
/** Whether the debugger should be accessible or not.
* Use --dbg, the env.var. VBOX_GUI_DBG_ENABLED, --debug or the env.var.
* VBOX_GUI_DBG_AUTO_SHOW to enable. */
bool mDbgEnabled;
/** Whether to show the debugger automatically with the console.
* Use --debug or the env.var. VBOX_GUI_DBG_AUTO_SHOW to enable. */
bool mDbgAutoShow;
/** VBoxDbg module handle. */
RTLDRMOD mhVBoxDbg;
#endif
#if defined (Q_WS_WIN32)
DWORD dwHTMLHelpCookie;
#endif
CVirtualBoxCallback callback;
QString mVerString;
QList <QString> mFamilyIDs;
QList <QList <CGuestOSType> > mTypes;
QHash <QString, QPixmap *> mOsTypeIcons;
QHash <ulong, QPixmap *> mVMStateIcons;
QHash <ulong, QColor *> mVMStateColors;
QPixmap mOfflineSnapshotIcon, mOnlineSnapshotIcon;
QULongStringHash mMachineStates;
QULongStringHash mSessionStates;
QULongStringHash mDeviceTypes;
QULongStringHash mStorageBuses;
QLongStringHash mStorageBusChannels;
QLongStringHash mStorageBusDevices;
QULongStringHash mDiskTypes;
QString mDiskTypes_Differencing;
QULongStringHash mVRDPAuthTypes;
QULongStringHash mPortModeTypes;
QULongStringHash mUSBFilterActionTypes;
QULongStringHash mAudioDriverTypes;
QULongStringHash mAudioControllerTypes;
QULongStringHash mNetworkAdapterTypes;
QULongStringHash mNetworkAttachmentTypes;
QULongStringHash mClipboardTypes;
QULongStringHash mIDEControllerTypes;
QULongStringHash mUSBDeviceStates;
QString mUserDefinedPortName;
QPixmap mWarningIcon, mErrorIcon;
mutable bool mDetailReportTemplatesReady;
friend VBoxGlobal &vboxGlobal();
friend class VBoxCallback;
};
inline VBoxGlobal &vboxGlobal() { return VBoxGlobal::instance(); }
// Helper classes
////////////////////////////////////////////////////////////////////////////////
/**
* Generic asyncronous event.
*
* This abstract class is intended to provide a conveinent way to execute
* code on the main GUI thread asynchronously to the calling party. This is
* done by putting necessary actions to the #handle() function in a subclass
* and then posting an instance of the subclass using #post(). The instance
* must be allocated on the heap using the <tt>new</tt> operation and will be
* automatically deleted after processing. Note that if you don't call #post()
* on the created instance, you have to delete it yourself.
*/
class VBoxAsyncEvent : public QEvent
{
public:
VBoxAsyncEvent() : QEvent ((QEvent::Type) VBoxDefs::AsyncEventType) {}
/**
* Worker function. Gets executed on the GUI thread when the posted event
* is processed by the main event loop.
*/
virtual void handle() = 0;
/**
* Posts this event to the main event loop.
* The caller loses ownership of this object after this method returns
* and must not delete the object.
*/
void post()
{
QApplication::postEvent (&vboxGlobal(), this);
}
};
/**
* USB Popup Menu class.
* This class provides the list of USB devices attached to the host.
*/
class VBoxUSBMenu : public QMenu
{
Q_OBJECT
public:
VBoxUSBMenu (QWidget *);
const CUSBDevice& getUSB (QAction *aAction);
void setConsole (const CConsole &);
private slots:
void processAboutToShow();
private:
bool event(QEvent *aEvent);
QMap <QAction *, CUSBDevice> mUSBDevicesMap;
CConsole mConsole;
};
/**
* Enable/Disable Menu class.
* This class provides enable/disable menu items.
*/
class VBoxSwitchMenu : public QMenu
{
Q_OBJECT
public:
VBoxSwitchMenu (QWidget *, QAction *, bool aInverted = false);
void setToolTip (const QString &);
private slots:
void processAboutToShow();
private:
QAction *mAction;
bool mInverted;
};
#endif /* __VBoxGlobal_h__ */