VBoxProblemReporter.h revision 94eb4c40aabf9f75b9b827c9069a789015f33b81
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard/** @file
19d8729755d7f4d9503029a628dacbbdabcd2264wrowe *
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * VBox frontends: Qt GUI ("VirtualBox"):
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * VBoxProblemReporter class declaration
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard */
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard/*
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * Copyright (C) 2006-2008 Sun Microsystems, Inc.
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard *
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * This file is part of VirtualBox Open Source Edition (OSE), as
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * available from http://www.virtualbox.org. This file is free software;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * you can redistribute it and/or modify it under the terms of the GNU
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * General Public License (GPL) as published by the Free Software
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * Foundation, in version 2 as it comes in the "COPYING" file of the
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard *
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * Clara, CA 95054 USA or visit http://www.sun.com if you need
5a4b3207b395b426c5a9066f4afea8d3fa8c6660stoddard * additional information or have any questions.
5a4b3207b395b426c5a9066f4afea8d3fa8c6660stoddard */
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard#ifndef __VBoxProblemReporter_h__
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard#define __VBoxProblemReporter_h__
19d8729755d7f4d9503029a628dacbbdabcd2264wrowe
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard#include "COMDefs.h"
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard#include "QIMessageBox.h"
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard/* Qt icludes */
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard#include <QObject>
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddardclass VBoxMedium;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddardclass QAction;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddardclass QMenu;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard// VBoxHelpActions class
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard////////////////////////////////////////////////////////////////////////////////
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard/**
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * Help Menu action container.
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard *
1f2f357528d122de2c7886a073b4eee8766d5c95wrowe * Contains actions for all help menu items and methods to insert them to a
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * QMenu and to perform NLS string translation.
bb65aeae7af1d33b64252bbc1b966942d757ac60wrowe *
56e85d89d42a6980f31b800266649efbed338da3wrowe * Instances of this class are to be created as members of QWidget classes that
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * need a Help menu. The containing class usually passes itself as an argument
37ad54b8fd2611b7a4f2b269eec3d27ed784a25dwrowe * to the #setup() method and then calls #addTo() to add actions to its Help
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * menu. The #retranslateUi() method is called when it is necessary to
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * re-translate all action NLS according to the current language.
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard */
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddardstruct VBoxHelpActions
a751155a30bbd9ccb739c1b052635b14d39038c2wrowe{
a751155a30bbd9ccb739c1b052635b14d39038c2wrowe VBoxHelpActions()
94b262d3639149df0b02642a9daa6db8bff58577wrowe : contentsAction (NULL), webAction (NULL)
94b262d3639149df0b02642a9daa6db8bff58577wrowe , resetMessagesAction (NULL), registerAction (NULL)
94b262d3639149df0b02642a9daa6db8bff58577wrowe , updateAction (NULL), aboutAction (NULL)
94b262d3639149df0b02642a9daa6db8bff58577wrowe {}
b17d863d3cc7f7afa03ea7f1bad65e0389713032tdonovan
94b262d3639149df0b02642a9daa6db8bff58577wrowe void setup (QObject *aParent);
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard void addTo (QMenu *aMenu);
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard void retranslateUi();
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard QAction *contentsAction;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard QAction *webAction;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard QAction *resetMessagesAction;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard QAction *registerAction;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard QAction *updateAction;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard QAction *aboutAction;
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard};
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard// VBoxProblemReporter class
1f2f357528d122de2c7886a073b4eee8766d5c95wrowe////////////////////////////////////////////////////////////////////////////////
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
5ac28f3fe2417368757f29cf381338357605fd52wrowe/**
e1ad80c048e29e968221817698529d73098f07a4wrowe * The VBoxProblemReporter class is a central place to handle all problem/error
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * situations that happen during application runtime and require the user's
37ad54b8fd2611b7a4f2b269eec3d27ed784a25dwrowe * attention.
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard *
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * The role of this class is to describe the problem and/or the cause of the
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * error to the user and give him the opportunity to select an action (when
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard * appropriate).
a751155a30bbd9ccb739c1b052635b14d39038c2wrowe *
a751155a30bbd9ccb739c1b052635b14d39038c2wrowe * Every problem sutiation has its own (correspondingly named) method in this
94b262d3639149df0b02642a9daa6db8bff58577wrowe * class that takes a list of arguments necessary to describe the situation and
94b262d3639149df0b02642a9daa6db8bff58577wrowe * to provide the appropriate actions. The method then returns the choice to the
94b262d3639149df0b02642a9daa6db8bff58577wrowe * caller.
94b262d3639149df0b02642a9daa6db8bff58577wrowe */
b17d863d3cc7f7afa03ea7f1bad65e0389713032tdonovanclass VBoxProblemReporter : public QObject
94b262d3639149df0b02642a9daa6db8bff58577wrowe{
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard Q_OBJECT
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddardpublic:
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard enum Type
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard {
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard Info = 1,
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard Question,
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard Warning,
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard Error,
aa1fc08e9f6acaa9de8f1301962c2dca202377fbwrowe Critical,
aa1fc08e9f6acaa9de8f1301962c2dca202377fbwrowe GuruMeditation
aa1fc08e9f6acaa9de8f1301962c2dca202377fbwrowe };
8c8173f49dd7122e10636b3d20ae841551bd0b43wrowe
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard enum
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard {
96d86960482354ffa1c192ea3df73a4cd46f0d82stoddard AutoConfirmed = 0x8000
};
static VBoxProblemReporter &instance();
bool isValid();
// helpers
int message (QWidget *aParent, Type aType, const QString &aMessage,
const QString &aDetails = QString::null,
const char *aAutoConfirmId = 0,
int aButton1 = 0, int aButton2 = 0, int aButton3 = 0,
const QString &aText1 = QString::null,
const QString &aText2 = QString::null,
const QString &aText3 = QString::null);
int message (QWidget *aParent, Type aType, const QString &aMessage,
const char *aAutoConfirmId,
int aButton1 = 0, int aButton2 = 0, int aButton3 = 0,
const QString &aText1 = QString::null,
const QString &aText2 = QString::null,
const QString &aText3 = QString::null)
{
return message (aParent, aType, aMessage, QString::null, aAutoConfirmId,
aButton1, aButton2, aButton3, aText1, aText2, aText3);
}
bool messageYesNo (QWidget *aParent, Type aType, const QString &aMessage,
const QString &aDetails = QString::null,
const char *aAutoConfirmId = 0,
const QString &aYesText = QString::null,
const QString &aNoText = QString::null)
{
return (message (aParent, aType, aMessage, aDetails, aAutoConfirmId,
QIMessageBox::Yes | QIMessageBox::Default,
QIMessageBox::No | QIMessageBox::Escape,
0,
aYesText, aNoText, QString::null) &
QIMessageBox::ButtonMask) == QIMessageBox::Yes;
}
bool messageYesNo (QWidget *aParent, Type aType, const QString &aMessage,
const char *aAutoConfirmId,
const QString &aYesText = QString::null,
const QString &aNoText = QString::null)
{
return messageYesNo (aParent, aType, aMessage, QString::null,
aAutoConfirmId, aYesText, aNoText);
}
bool messageOkCancel (QWidget *aParent, Type aType, const QString &aMessage,
const QString &aDetails = QString::null,
const char *aAutoConfirmId = 0,
const QString &aOkText = QString::null,
const QString &aCancelText = QString::null)
{
return (message (aParent, aType, aMessage, aDetails, aAutoConfirmId,
QIMessageBox::Ok | QIMessageBox::Default,
QIMessageBox::Cancel | QIMessageBox::Escape,
0,
aOkText, aCancelText, QString::null) &
QIMessageBox::ButtonMask) == QIMessageBox::Ok;
}
bool messageOkCancel (QWidget *aParent, Type aType, const QString &aMessage,
const char *aAutoConfirmId,
const QString &aOkText = QString::null,
const QString &aCancelText = QString::null)
{
return messageOkCancel (aParent, aType, aMessage, QString::null,
aAutoConfirmId, aOkText, aCancelText);
}
bool showModalProgressDialog (CProgress &aProgress, const QString &aTitle,
QWidget *aParent, int aMinDuration = 2000);
QWidget *mainWindowShown();
// problem handlers
#ifdef Q_WS_X11
void cannotFindLicenseFiles (const QString &aPath);
void cannotOpenLicenseFile (QWidget *aParent, const QString &aPath);
#endif
void cannotOpenURL (const QString &aURL);
void cannotCopyFile (const QString &aSrc, const QString &aDst, int aVRC);
void cannotFindLanguage (const QString &aLangID, const QString &aNlsPath);
void cannotLoadLanguage (const QString &aLangFile);
void cannotInitCOM (HRESULT rc);
void cannotCreateVirtualBox (const CVirtualBox &vbox);
void cannotSaveGlobalSettings (const CVirtualBox &vbox,
QWidget *parent = 0);
void cannotLoadGlobalConfig (const CVirtualBox &vbox, const QString &error);
void cannotSaveGlobalConfig (const CVirtualBox &vbox);
void cannotSetSystemProperties (const CSystemProperties &props);
void cannotAccessUSB (const COMBaseWithEI &aObj);
void cannotCreateMachine (const CVirtualBox &vbox,
QWidget *parent = 0);
void cannotCreateMachine (const CVirtualBox &vbox, const CMachine &machine,
QWidget *parent = 0);
void cannotApplyMachineSettings (const CMachine &machine, const COMResult &res);
void cannotSaveMachineSettings (const CMachine &machine,
QWidget *parent = 0);
void cannotLoadMachineSettings (const CMachine &machine,
bool strict = true,
QWidget *parent = 0);
void cannotStartMachine (const CConsole &console);
void cannotStartMachine (const CProgress &progress);
void cannotPauseMachine (const CConsole &console);
void cannotResumeMachine (const CConsole &console);
void cannotACPIShutdownMachine (const CConsole &console);
void cannotSaveMachineState (const CConsole &console);
void cannotSaveMachineState (const CProgress &progress);
void cannotTakeSnapshot (const CConsole &console);
void cannotTakeSnapshot (const CProgress &progress);
void cannotStopMachine (const CConsole &console);
void cannotStopMachine (const CProgress &progress);
void cannotDeleteMachine (const CVirtualBox &vbox, const CMachine &machine);
void cannotDiscardSavedState (const CConsole &console);
void cannotSendACPIToMachine();
bool warnAboutVirtNotEnabled();
void cannotSetSnapshotFolder (const CMachine &aMachine, const QString &aPath);
void cannotDiscardSnapshot (const CConsole &aConsole,
const QString &aSnapshotName);
void cannotDiscardSnapshot (const CProgress &aProgress,
const QString &aSnapshotName);
void cannotDiscardCurrentState (const CConsole &console);
void cannotDiscardCurrentState (const CProgress &progress);
void cannotDiscardCurrentSnapshotAndState (const CConsole &console);
void cannotDiscardCurrentSnapshotAndState (const CProgress &progress);
void cannotFindMachineByName (const CVirtualBox &vbox, const QString &name);
void cannotEnterSeamlessMode (ULONG aWidth, ULONG aHeight,
ULONG aBpp, ULONG64 aMinVRAM);
int cannotEnterFullscreenMode (ULONG aWidth, ULONG aHeight,
ULONG aBpp, ULONG64 aMinVRAM);
bool confirmMachineDeletion (const CMachine &machine);
bool confirmDiscardSavedState (const CMachine &machine);
bool confirmReleaseMedium (QWidget *aParent, const VBoxMedium &aMedium,
const QString &aUsage);
bool confirmRemoveMedium (QWidget *aParent, const VBoxMedium &aMedium);
void sayCannotOverwriteHardDiskStorage (QWidget *aParent,
const QString &aLocation);
int confirmDeleteHardDiskStorage (QWidget *aParent,
const QString &aLocation);
void cannotDeleteHardDiskStorage (QWidget *aParent, const CHardDisk2 &aHD,
const CProgress &aProgress);
int confirmDetachSATASlots (QWidget *aParent);
int confirmRunNewHDWzdOrVDM (QWidget* aParent);
void cannotCreateHardDiskStorage (QWidget *aParent, const CVirtualBox &aVBox,
const QString &aLocaiton,
const CHardDisk2 &aHD,
const CProgress &aProgress);
void cannotAttachHardDisk (QWidget *aParent, const CMachine &aMachine,
const QString &aLocation, KStorageBus aBus,
LONG aChannel, LONG aDevice);
void cannotDetachHardDisk (QWidget *aParent, const CMachine &aMachine,
const QString &aLocation, KStorageBus aBus,
LONG aChannel, LONG aDevice);
void cannotMountMedium (QWidget *aParent, const CMachine &aMachine,
const VBoxMedium &aMedium, const COMResult &aResult);
void cannotUnmountMedium (QWidget *aParent, const CMachine &aMachine,
const VBoxMedium &aMedium, const COMResult &aResult);
void cannotOpenMedium (QWidget *aParent, const CVirtualBox &aVBox,
VBoxDefs::MediaType aType, const QString &aLocation);
void cannotCloseMedium (QWidget *aParent, const VBoxMedium &aMedium,
const COMResult &aResult);
void cannotOpenSession (const CSession &session);
void cannotOpenSession (const CVirtualBox &vbox, const CMachine &machine,
const CProgress &progress = CProgress());
void cannotGetMediaAccessibility (const VBoxMedium &aMedium);
#if defined Q_WS_WIN
void cannotCreateHostInterface (const CHost &host, const QString &name,
QWidget *parent = 0);
void cannotCreateHostInterface (const CProgress &progress, const QString &name,
QWidget *parent = 0);
void cannotRemoveHostInterface (const CHost &host,
const CHostNetworkInterface &iface,
QWidget *parent = 0);
void cannotRemoveHostInterface (const CProgress &progress,
const CHostNetworkInterface &iface,
QWidget *parent = 0);
#endif
void cannotAttachUSBDevice (const CConsole &console, const QString &device);
void cannotAttachUSBDevice (const CConsole &console, const QString &device,
const CVirtualBoxErrorInfo &error);
void cannotDetachUSBDevice (const CConsole &console, const QString &device);
void cannotDetachUSBDevice (const CConsole &console, const QString &device,
const CVirtualBoxErrorInfo &error);
void cannotCreateSharedFolder (QWidget *, const CMachine &,
const QString &, const QString &);
void cannotRemoveSharedFolder (QWidget *, const CMachine &,
const QString &, const QString &);
void cannotCreateSharedFolder (QWidget *, const CConsole &,
const QString &, const QString &);
void cannotRemoveSharedFolder (QWidget *, const CConsole &,
const QString &, const QString &);
int cannotFindGuestAdditions (const QString &aSrc1, const QString &aSrc2);
void cannotDownloadGuestAdditions (const QString &aURL,
const QString &aReason);
bool confirmDownloadAdditions (const QString &aURL, ulong aSize);
bool confirmMountAdditions (const QString &aURL, const QString &aSrc);
void warnAboutTooOldAdditions (QWidget *, const QString &, const QString &);
void warnAboutOldAdditions (QWidget *, const QString &, const QString &);
void warnAboutNewAdditions (QWidget *, const QString &, const QString &);
void cannotConnectRegister (QWidget *aParent,
const QString &aURL,
const QString &aReason);
void showRegisterResult (QWidget *aParent,
const QString &aResult);
void showUpdateSuccess (QWidget *aParent,
const QString &aVersion,
const QString &aLink);
void showUpdateFailure (QWidget *aParent,
const QString &aReason);
void showUpdateNotFound (QWidget *aParent);
bool confirmInputCapture (bool *aAutoConfirmed = NULL);
void remindAboutAutoCapture();
void remindAboutMouseIntegration (bool aSupportsAbsolute);
bool remindAboutPausedVMInput();
int warnAboutAutoConvertedSettings (const QString &aFormatVersion,
const QString &aFileList,
bool aAfterRefresh);
bool remindAboutInaccessibleMedia();
bool confirmGoingFullscreen (const QString &aHotKey);
bool confirmGoingSeamless (const QString &aHotKey);
void remindAboutWrongColorDepth (ulong aRealBPP, ulong aWantedBPP);
bool remindAboutGuruMeditation (const CConsole &aConsole,
const QString &aLogFolder);
bool confirmVMReset (QWidget *aParent);
bool confirmHardDisklessMachine (QWidget *aParent);
void cannotRunInSelectorMode();
void cannotImportAppliance (const CAppliance &aAppliance);
void cannotImportAppliance (const CProgress &aProgress, const CAppliance &aAppliance);
void showRuntimeError (const CConsole &console, bool fatal,
const QString &errorID,
const QString &errorMsg);
static QString toAccusative (VBoxDefs::MediaType aType);
static QString formatRC (HRESULT aRC);
static QString formatErrorInfo (const COMErrorInfo &aInfo,
HRESULT aWrapperRC = S_OK);
static QString formatErrorInfo (const CVirtualBoxErrorInfo &aInfo)
{
return formatErrorInfo (COMErrorInfo (aInfo));
}
static QString formatErrorInfo (const COMBaseWithEI &aWrapper)
{
Assert (aWrapper.lastRC() != S_OK);
return formatErrorInfo (aWrapper.errorInfo(), aWrapper.lastRC());
}
static QString formatErrorInfo (const COMResult &aRC)
{
Assert (aRC.rc() != S_OK);
return formatErrorInfo (aRC.errorInfo(), aRC.rc());
}
public slots:
void showHelpWebDialog();
void showHelpAboutDialog();
void showHelpHelpDialog();
void resetSuppressedMessages();
private:
friend VBoxProblemReporter &vboxProblem();
static QString doFormatErrorInfo (const COMErrorInfo &aInfo,
HRESULT aWrapperRC = S_OK);
};
/**
* Shortcut to the static VBoxProblemReporter::instance() method, for
* convenience.
*/
inline VBoxProblemReporter &vboxProblem() { return VBoxProblemReporter::instance(); }
#endif // __VBoxProblemReporter_h__