VirtualBox

source: vbox/trunk/src/VBox/Debugger/VBoxDbgBase.h@ 78071

Last change on this file since 78071 was 77412, checked in by vboxsync, 6 years ago

VBoxDbg: Moved the title management to the VBoxDbgBaseWindow class, combining the approaches in the console and statistics windows.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.2 KB
Line 
1/* $Id: VBoxDbgBase.h 77412 2019-02-21 18:25:37Z vboxsync $ */
2/** @file
3 * VBox Debugger GUI - Base classes.
4 */
5
6/*
7 * Copyright (C) 2006-2019 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef DEBUGGER_INCLUDED_SRC_VBoxDbgBase_h
19#define DEBUGGER_INCLUDED_SRC_VBoxDbgBase_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24
25#include <VBox/vmm/stam.h>
26#include <VBox/vmm/vmapi.h>
27#include <VBox/dbg.h>
28#include <iprt/thread.h>
29#include <QString>
30#include <QWidget>
31
32class VBoxDbgGui;
33
34
35/**
36 * VBox Debugger GUI Base Class.
37 *
38 * The purpose of this class is to hide the VM handle, abstract VM
39 * operations, and finally to make sure the GUI won't crash when
40 * the VM dies.
41 */
42class VBoxDbgBase
43{
44public:
45 /**
46 * Construct the object.
47 *
48 * @param a_pDbgGui Pointer to the debugger gui object.
49 */
50 VBoxDbgBase(VBoxDbgGui *a_pDbgGui);
51
52 /**
53 * Destructor.
54 */
55 virtual ~VBoxDbgBase();
56
57
58 /**
59 * Checks if the VM is OK for normal operations.
60 * @returns true if ok, false if not.
61 */
62 bool isVMOk() const
63 {
64 return m_pUVM != NULL;
65 }
66
67 /**
68 * Checks if the current thread is the GUI thread or not.
69 * @return true/false accordingly.
70 */
71 bool isGUIThread() const
72 {
73 return m_hGUIThread == RTThreadNativeSelf();
74 }
75
76 /** @name Operations
77 * @{ */
78 /**
79 * Wrapper for STAMR3Reset().
80 */
81 int stamReset(const QString &rPat);
82 /**
83 * Wrapper for STAMR3Enum().
84 */
85 int stamEnum(const QString &rPat, PFNSTAMR3ENUM pfnEnum, void *pvUser);
86 /**
87 * Wrapper for DBGCCreate().
88 */
89 int dbgcCreate(PDBGCBACK pBack, unsigned fFlags);
90 /** @} */
91
92
93protected:
94 /** @name Signals
95 * @{ */
96 /**
97 * Called when the VM is being destroyed.
98 */
99 virtual void sigDestroying();
100 /**
101 * Called when the VM has been terminated.
102 */
103 virtual void sigTerminated();
104 /** @} */
105
106
107private:
108 /** @callback_method_impl{FNVMATSTATE} */
109 static DECLCALLBACK(void) atStateChange(PUVM pUVM, VMSTATE enmState, VMSTATE enmOldState, void *pvUser);
110
111private:
112 /** Pointer to the debugger GUI object. */
113 VBoxDbgGui *m_pDbgGui;
114 /** The user mode VM handle. */
115 PUVM volatile m_pUVM;
116 /** The handle of the GUI thread. */
117 RTNATIVETHREAD m_hGUIThread;
118};
119
120
121/**
122 * VBox Debugger GUI Base Window Class.
123 *
124 * This is just a combination of QWidget and VBoxDbgBase with some additional
125 * functionality for window management. This class is not intended for control
126 * widgets, only normal top-level windows.
127 */
128class VBoxDbgBaseWindow : public QWidget, public VBoxDbgBase
129{
130public:
131 /**
132 * Construct the object.
133 *
134 * @param a_pDbgGui Pointer to the debugger gui object.
135 * @param a_pParent Pointer to the parent object.
136 * @param a_pszTitle The window title string (persistent, not copied).
137 */
138 VBoxDbgBaseWindow(VBoxDbgGui *a_pDbgGui, QWidget *a_pParent, const char *a_pszTitle);
139
140 /**
141 * Destructor.
142 */
143 virtual ~VBoxDbgBaseWindow();
144
145 /**
146 * Shows the window and gives it focus.
147 */
148 void vShow();
149
150 /**
151 * Repositions the window, taking the frame decoration into account.
152 *
153 * @param a_x The new x coordinate.
154 * @param a_y The new x coordinate.
155 * @param a_cx The total width.
156 * @param a_cy The total height.
157 * @param a_fResize Whether to resize it as well.
158 */
159 void vReposition(int a_x, int a_y, unsigned a_cx, unsigned a_cy, bool a_fResize);
160
161protected:
162 /**
163 * For polishing the window size (X11 mess).
164 *
165 * @returns true / false.
166 * @param a_pEvt The event.
167 */
168 virtual bool event(QEvent *a_pEvt);
169
170 /**
171 * Event filter for various purposes (mainly title bar).
172 *
173 * @param pWatched The object event came to.
174 * @param pEvent The event being handled.
175 */
176 virtual bool eventFilter(QObject *pWatched, QEvent *pEvent);
177
178 /**
179 * Internal worker for polishing the size and position (X11 hacks).
180 */
181 void vPolishSizeAndPos();
182
183 /**
184 * Internal worker that guesses the border sizes.
185 */
186 QSize vGuessBorderSizes();
187
188private:
189 /** The Window title string (inflexible, read only). */
190 const char *m_pszTitle;
191 /** Whether we've done the size polishing in showEvent or not. */
192 bool m_fPolished;
193 /** The desired x coordinate. */
194 int m_x;
195 /** The desired y coordinate. */
196 int m_y;
197 /** The desired width. */
198 unsigned m_cx;
199 /** The desired height. */
200 unsigned m_cy;
201
202 /** Best effort x border size (for X11). */
203 static unsigned m_cxBorder;
204 /** Best effort y border size (for X11). */
205 static unsigned m_cyBorder;
206};
207
208#endif /* !DEBUGGER_INCLUDED_SRC_VBoxDbgBase_h */
209
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette