VBoxConsoleWnd.h revision aa58cad62dff6a585f0a674bdf7041436d13f52c
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** @file
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * VBox frontends: Qt GUI ("VirtualBox"):
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * VBoxConsoleWnd class declaration
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * available from http://www.virtualbox.org. This file is free software;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * you can redistribute it and/or modify it under the terms of the GNU
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * General Public License (GPL) as published by the Free Software
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * additional information or have any questions.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef __VBoxConsoleWnd_h__
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define __VBoxConsoleWnd_h__
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "COMDefs.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "QIWithRetranslateUI.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "VBoxProblemReporter.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/* Qt includes */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <QMainWindow>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <QMap>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <QColor>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include <QDialog>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef VBOX_WITH_DEBUGGER_GUI
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync# include <VBox/dbggui.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef Q_WS_MAC
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync# undef PAGE_SIZE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync# undef PAGE_SHIFT
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync# include <Carbon/Carbon.h>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass QAction;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass QActionGroup;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass QLabel;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass QSpacerItem;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass QMenu;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass VBoxConsoleView;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass QIStateIndicator;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass VBoxUSBMenu;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass VBoxSwitchMenu;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncclass VBoxConsoleWnd : public QIWithRetranslateUI2<QMainWindow>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync{
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Q_OBJECT;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncpublic:
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync VBoxConsoleWnd (VBoxConsoleWnd **aSelf,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync QWidget* aParent = 0,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Qt::WindowFlags aFlags = Qt::Window);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync virtual ~VBoxConsoleWnd();
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync bool openView (const CSession &session);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void closeView();
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void refreshView();
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync bool isTrueFullscreen() const { return mIsFullscreen; }
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync bool isTrueSeamless() const { return mIsSeamless; }
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void setMouseIntegrationLocked (bool aDisabled);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void popupMainMenu (bool aCenter);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void installGuestAdditionsFrom (const QString &aSource);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void setMask (const QRegion &aRegion);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void clearMask();
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef Q_WS_MAC
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync CGImageRef dockImageState () const;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncpublic slots:
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncprotected:
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync // events
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync bool event (QEvent *e);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void closeEvent (QCloseEvent *e);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#if defined(Q_WS_X11)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync bool x11Event (XEvent *event);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void retranslateUi();
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifdef VBOX_WITH_DEBUGGER_GUI
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync bool dbgCreated();
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void dbgDestroy();
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync void dbgAdjustRelativePos();
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncprotected slots:
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncprivate:
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync enum /* Stuff */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync {
FloppyStuff = 0x01,
DVDStuff = 0x02,
HardDiskStuff = 0x04,
PauseAction = 0x08,
NetworkStuff = 0x10,
DisableMouseIntegrAction = 0x20,
Caption = 0x40,
USBStuff = 0x80,
VRDPStuff = 0x100,
SharedFolderStuff = 0x200,
AllStuff = 0xFFFF,
};
void updateAppearanceOf (int element);
bool toggleFullscreenMode (bool, bool);
private slots:
void finalizeOpenView();
void activateUICustomizations();
void vmFullscreen (bool on);
void vmSeamless (bool on);
void vmAutoresizeGuest (bool on);
void vmAdjustWindow();
void vmTypeCAD();
void vmTypeCABS();
void vmReset();
void vmPause(bool);
void vmACPIShutdown();
void vmClose();
void vmTakeSnapshot();
void vmShowInfoDialog();
void vmDisableMouseIntegr (bool);
void devicesMountFloppyImage();
void devicesUnmountFloppy();
void devicesMountDVDImage();
void devicesUnmountDVD();
void devicesSwitchVrdp (bool);
void devicesOpenSFDialog();
void devicesInstallGuestAdditions();
void prepareFloppyMenu();
void prepareDVDMenu();
void prepareNetworkMenu();
void setDynamicMenuItemStatusTip (QAction *aAction);
void captureFloppy (QAction *aAction);
void captureDVD (QAction *aAction);
void activateNetworkMenu (QAction *aAction);
void switchUSB (QAction *aAction);
void statusTipChanged (const QString &);
void clearStatusBar();
void showIndicatorContextMenu (QIStateIndicator *ind, QContextMenuEvent *e);
void updateDeviceLights();
void updateMachineState (KMachineState state);
void updateMouseState (int state);
void updateAdditionsState (const QString&, bool, bool, bool);
void updateNetworkAdarptersState();
void updateUsbState();
void updateMediaState (VBoxDefs::DiskType aType);
void updateSharedFoldersState();
void tryClose();
void processGlobalSettingChange (const char *publicName, const char *name);
void dbgShowStatistics();
void dbgShowCommandLine();
void dbgLoggingToggled(bool aBool);
void onExitFullscreen();
void unlockActionsSwitch();
void switchToFullscreen (bool aOn, bool aSeamless);
void setViewInSeamlessMode (const QRect &aTargetRect);
private:
/** Popup version of the main menu */
QMenu *mMainMenu;
QActionGroup *mRunningActions;
QActionGroup *mRunningOrPausedActions;
// Machine actions
QAction *vmFullscreenAction;
QAction *vmSeamlessAction;
QAction *vmAutoresizeGuestAction;
QAction *vmAdjustWindowAction;
QAction *vmTypeCADAction;
#if defined(Q_WS_X11)
QAction *vmTypeCABSAction;
#endif
QAction *vmResetAction;
QAction *vmPauseAction;
QAction *vmACPIShutdownAction;
QAction *vmCloseAction;
QAction *vmTakeSnapshotAction;
QAction *vmDisableMouseIntegrAction;
QAction *vmShowInformationDlgAction;
// Devices actions
QAction *devicesMountFloppyImageAction;
QAction *devicesUnmountFloppyAction;
QAction *devicesMountDVDImageAction;
QAction *devicesUnmountDVDAction;
QAction *devicesSwitchVrdpAction;
QAction *devicesSFDialogAction;
QAction *devicesInstallGuestToolsAction;
#ifdef VBOX_WITH_DEBUGGER_GUI
// Debugger actions
QAction *dbgStatisticsAction;
QAction *dbgCommandLineAction;
QAction *dbgLoggingAction;
#endif
// Help actions
VBoxHelpActions mHelpActions;
// Machine popup menus
VBoxSwitchMenu *vmAutoresizeMenu;
VBoxSwitchMenu *vmDisMouseIntegrMenu;
// Devices popup menus
bool waitForStatusBarChange;
bool statusBarChangedInside;
QAction *mDevicesUSBMenuSeparator;
QAction *mDevicesVRDPMenuSeparator;
QAction *mDevicesSFMenuSeparator;
QMenu *mVMMenu;
QMenu *mDevicesMenu;
QMenu *mDevicesMountFloppyMenu;
QMenu *mDevicesMountDVDMenu;
/* see showIndicatorContextMenu for a description of mDevicesSFMenu */
/* QMenu *mDevicesSFMenu; */
QMenu *mDevicesNetworkMenu;
VBoxUSBMenu *mDevicesUSBMenu;
/* VBoxSwitchMenu *mDevicesVRDPMenu; */
#ifdef VBOX_WITH_DEBUGGER_GUI
// Debugger popup menu
QMenu *mDbgMenu;
#endif
QMenu *mHelpMenu;
QSpacerItem *mShiftingSpacerLeft;
QSpacerItem *mShiftingSpacerTop;
QSpacerItem *mShiftingSpacerRight;
QSpacerItem *mShiftingSpacerBottom;
QSize mMaskShift;
CSession csession;
// widgets
VBoxConsoleView *console;
QIStateIndicator *hd_light, *cd_light, *fd_light, *net_light, *usb_light, *sf_light;
QIStateIndicator *mouse_state, *hostkey_state;
QIStateIndicator *autoresize_state;
QIStateIndicator *vrdp_state;
QWidget *hostkey_hbox;
QLabel *hostkey_name;
QTimer *idle_timer;
KMachineState machine_state;
QString caption_prefix;
bool no_auto_close : 1;
QMap <QAction *, CHostDVDDrive> hostDVDMap;
QMap <QAction *, CHostFloppyDrive> hostFloppyMap;
QRect mNormalGeo;
QSize prev_min_size;
#ifdef Q_WS_WIN
QRegion mPrevRegion;
#endif
#ifdef Q_WS_MAC
QRegion mCurrRegion;
EventHandlerRef mDarwinRegionEventHandlerRef;
#endif
// variables for dealing with true fullscreen
QRegion mStrictedRegion;
bool mIsFullscreen : 1;
bool mIsSeamless : 1;
bool mIsSeamlessSupported : 1;
bool mIsGraphicsSupported : 1;
bool mIsWaitingModeResize : 1;
bool was_max : 1;
QObjectList hidden_children;
int console_style;
QPalette mErasePalette;
bool mIsOpenViewFinished : 1;
bool mIsFirstTimeStarted : 1;
bool mIsAutoSaveMedia : 1;
#ifdef VBOX_WITH_DEBUGGER_GUI
/** The handle to the debugger gui. */
PDBGGUI mDbgGui;
/** The virtual method table for the debugger GUI. */
PCDBGGUIVT mDbgGuiVT;
#endif
#ifdef Q_WS_MAC
/* For seamless maximizing */
QRect mNormalGeometry;
Qt::WindowFlags mSavedFlags;
/* Dock images */
CGImageRef dockImgStatePaused;
CGImageRef dockImgStateSaving;
CGImageRef dockImgStateRestoring;
CGImageRef dockImgBack100x75;
CGImageRef dockImgOS;
/* For the fade effect if the the window goes fullscreen */
CGDisplayFadeReservationToken mFadeToken;
#endif
};
class VBoxVMSettingsSF;
class VBoxSFDialog : public QIWithRetranslateUI<QDialog>
{
Q_OBJECT;
public:
VBoxSFDialog (QWidget*, CSession&);
protected:
void retranslateUi();
protected slots:
virtual void accept();
protected:
void showEvent (QShowEvent*);
private:
VBoxVMSettingsSF *mSettings;
CSession &mSession;
};
#endif // __VBoxConsoleWnd_h__