dhewm3/neo/tools/debugger/DebuggerWindow.h
Daniel Gibson 6211d6e724 Debugger: Implement List of Breakpoints
Double-clicking an entry opens the script at the correct line.
Single-clicking the breakpoint symbol in the list removes the breakpoint,
and so does selecting the breakpoint in the list and pressing the Del key.
2021-07-13 06:12:44 +02:00

187 lines
5.4 KiB
C++

/*
===========================================================================
Doom 3 GPL Source Code
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
This file is part of the Doom 3 GPL Source Code ("Doom 3 Source Code").
Doom 3 Source Code is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Doom 3 Source Code is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
===========================================================================
*/
#ifndef DEBUGGERWINDOW_H_
#define DEBUGGERWINDOW_H_
#ifndef DEBUGGERSCRIPT_H_
#include "DebuggerScript.h"
#endif
class rvDebuggerWatch
{
public:
idStr mVariable;
idStr mValue;
bool mModified;
};
typedef idList<rvDebuggerWatch*> rvDebuggerWatchList;
class rvDebuggerClient;
class rvDebuggerWindow
{
public:
rvDebuggerWindow ( );
~rvDebuggerWindow ( );
bool Create ( HINSTANCE hInstance );
static bool Activate ( void );
void ProcessNetMessage ( idBitMsg * msg );
void Printf ( const char* format, ... );
HWND GetWindow ( void );
void AddWatch ( const char* name, bool update = true );
HINSTANCE GetInstance ( void );
private:
bool RegisterClass ( void );
void CreateToolbar ( void );
bool InitRecentFiles ( void );
int HandleInitMenu ( WPARAM wParam, LPARAM lParam );
int HandleCommand ( WPARAM wParam, LPARAM lParam );
int HandleCreate ( WPARAM wparam, LPARAM lparam );
int HandleActivate ( WPARAM wparam, LPARAM lparam );
int HandleDrawItem ( WPARAM wparam, LPARAM lparam );
void HandleTooltipGetDispInfo( WPARAM wparam, LPARAM lparam );
void ResizeImageList ( int& widthOut, int& heightOut);
static LRESULT CALLBACK WndProc ( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam );
static LRESULT CALLBACK MarginWndProc ( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam );
static LRESULT CALLBACK ScriptWndProc ( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam );
static INT_PTR CALLBACK AboutDlgProc ( HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam );
static int CALLBACK ScriptWordBreakProc( LPTSTR text, int current, int max, int action );
bool FindPrev ( const char* text = NULL );
bool FindNext ( const char* text = NULL );
void UpdateBreakpointList( void );
void UpdateScriptList ( void );
void UpdateWatch ( void );
void UpdateWindowMenu ( void );
void UpdateScript ( void );
void UpdateToolbar ( void );
void UpdateTitle ( void );
void UpdateCallstack ( void );
void UpdateRecentFiles ( void );
bool OpenScript ( const char* filename, int lineNumber = -1, idProgram* program = nullptr );
void EnableWindows ( bool state );
int GetSelectedText ( idStr& text );
void ToggleBreakpoint ( void );
HWND mWnd;
HWND mWndScript;
HWND mWndOutput;
HWND mWndMargin;
HWND mWndTabs;
HWND mWndBorder;
HWND mWndConsole;
HWND mWndConsoleInput;
HWND mWndCallstack;
HWND mWndScriptList;
HWND mWndBreakList; // list of breakpoints
HWND mWndWatch;
HWND mWndThreads;
HWND mWndToolTips;
HWND mWndToolbar;
HMENU mRecentFileMenu;
int mRecentFileInsertPos;
WNDPROC mOldWatchProc;
WNDPROC mOldScriptProc;
idStr mTooltipVar;
idStr mTooltipValue;
HINSTANCE mInstance;
HIMAGELIST mImageList;
HIMAGELIST mTmpImageList;
RECT mSplitterRect;
bool mSplitterDrag;
idList<rvDebuggerScript*> mScripts;
int mActiveScript;
int mLastActiveScript;
int mCurrentStackDepth;
HMENU mWindowMenu;
int mWindowMenuPos;
int mZoomScaleNum;
int mZoomScaleDem;
int mMarginSize;
idStr mFind;
rvDebuggerClient* mClient;
rvDebuggerWatchList mWatches;
};
/*
================
rvDebuggerWindow::GetWindow
================
*/
ID_INLINE HWND rvDebuggerWindow::GetWindow ( void )
{
return mWnd;
}
/*
================
rvDebuggerWindow::UpdateToolbar
================
*/
ID_INLINE void rvDebuggerWindow::UpdateToolbar ( void )
{
HandleInitMenu ( (WPARAM)GetMenu ( mWnd ), 0 );
}
/*
================
rvDebuggerWindow::GetInstance
================
*/
ID_INLINE HINSTANCE rvDebuggerWindow::GetInstance ( void )
{
return mInstance;
}
#endif // DEBUGGERWINDOW_H_