ExtPackManagerImpl.h revision 73045e3d71f04f3d399e70e89fbd6395c4402821
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/* $Id$ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/** @file
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/*
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * Copyright (C) 2010 Oracle Corporation
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync *
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * available from http://www.virtualbox.org. This file is free software;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * you can redistribute it and/or modify it under the terms of the GNU
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * General Public License (GPL) as published by the Free Software
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#ifndef ____H_EXTPACKMANAGERIMPL
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#define ____H_EXTPACKMANAGERIMPL
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#include "VirtualBoxBase.h"
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#include <VBox/ExtPack/ExtPack.h>
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/**
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * An extension pack.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync *
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * This
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncclass ATL_NO_VTABLE ExtPack :
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync public VirtualBoxBase,
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync VBOX_SCRIPTABLE_IMPL(IExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync{
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncpublic:
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name COM and internal init/term/mapping cruft.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPack, IExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_NOT_AGGREGATABLE(ExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync BEGIN_COM_MAP(ExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync COM_INTERFACE_ENTRY(IExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync COM_INTERFACE_ENTRY(IDispatch)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync END_COM_MAP()
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_EMPTY_CTOR_DTOR(ExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync HRESULT FinalConstruct();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync void FinalRelease();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync HRESULT init(const char *a_pszName, const char *a_pszParentDir);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync void uninit();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name IExtPack interfaces
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name Internal interfaces used by ExtPackManager.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync void *getCallbackTable();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncprivate:
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync struct Data;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** Pointer to the private instance. */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync Data *m;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync friend class ExtPackManager;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync};
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/**
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * Extension pack manager.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncclass ATL_NO_VTABLE ExtPackManager :
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync public VirtualBoxBase,
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync VBOX_SCRIPTABLE_IMPL(IExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync{
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name COM and internal init/term/mapping cruft.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackManager, IExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_NOT_AGGREGATABLE(ExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync BEGIN_COM_MAP(ExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync COM_INTERFACE_ENTRY(IExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync COM_INTERFACE_ENTRY(IDispatch)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync END_COM_MAP()
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_EMPTY_CTOR_DTOR(ExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync HRESULT FinalConstruct();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync void FinalRelease();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync HRESULT init();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync void uninit();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name IExtPack interfaces
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(InstalledExtPacks))(ComSafeArrayOut(IExtPack *, a_paExtPacks));
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(Find)(IN_BSTR a_bstrName, IExtPack **a_pExtPack);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(Install)(IN_BSTR a_bstrTarball, BSTR *a_pbstrName);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(Uninstall)(IN_BSTR a_bstrName, BOOL a_fForcedRemoval);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name Internal interfaces used by other Main classes.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync int callAllConfigHooks(IConsole *a_pConsole, PVM a_pVM);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync int callAllNewMachineHooks(IMachine *a_pMachine);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncprivate:
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync struct Data;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** Pointer to the private instance. */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync Data *m;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync};
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#endif
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */