| 
									
										
										
										
											2018-02-14 23:25:01 +01:00
										 |  |  | // Copyright 2018 Dolphin Emulator Project
 | 
					
						
							|  |  |  | // Licensed under GPLv2+
 | 
					
						
							|  |  |  | // Refer to the license.txt file included.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <vector>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QTableWidget>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "Common/CommonTypes.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class QKeyEvent; | 
					
						
							|  |  |  | class QMouseEvent; | 
					
						
							|  |  |  | class QResizeEvent; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CodeViewWidget : public QTableWidget | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   Q_OBJECT | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-05-05 18:17:06 -04:00
										 |  |  |   enum class SetAddressUpdate | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     WithUpdate, | 
					
						
							|  |  |  |     WithoutUpdate | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-14 23:25:01 +01:00
										 |  |  |   explicit CodeViewWidget(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   u32 GetAddress() const; | 
					
						
							|  |  |  |   u32 GetContextAddress() const; | 
					
						
							| 
									
										
										
										
											2018-05-05 18:17:06 -04:00
										 |  |  |   void SetAddress(u32 address, SetAddressUpdate update); | 
					
						
							| 
									
										
										
										
											2018-02-14 23:25:01 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   void Update(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void ToggleBreakpoint(); | 
					
						
							|  |  |  |   void AddBreakpoint(); | 
					
						
							|  |  |  | signals: | 
					
						
							|  |  |  |   void RequestPPCComparison(u32 addr); | 
					
						
							|  |  |  |   void SymbolsChanged(); | 
					
						
							|  |  |  |   void BreakpointsChanged(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-05-13 18:24:30 -04:00
										 |  |  |   enum class ReplaceWith | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     BLR, | 
					
						
							|  |  |  |     NOP | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void ReplaceAddress(u32 address, ReplaceWith replace); | 
					
						
							| 
									
										
										
										
											2018-02-14 23:25:01 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   void resizeEvent(QResizeEvent*) override; | 
					
						
							|  |  |  |   void keyPressEvent(QKeyEvent* event) override; | 
					
						
							|  |  |  |   void mousePressEvent(QMouseEvent* event) override; | 
					
						
							|  |  |  |   void wheelEvent(QWheelEvent* event) override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void OnContextMenu(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void OnFollowBranch(); | 
					
						
							|  |  |  |   void OnCopyAddress(); | 
					
						
							|  |  |  |   void OnCopyFunction(); | 
					
						
							|  |  |  |   void OnCopyCode(); | 
					
						
							|  |  |  |   void OnCopyHex(); | 
					
						
							|  |  |  |   void OnRenameSymbol(); | 
					
						
							| 
									
										
										
										
											2018-05-05 04:21:15 -04:00
										 |  |  |   void OnSelectionChanged(); | 
					
						
							| 
									
										
										
										
											2018-02-14 23:25:01 +01:00
										 |  |  |   void OnSetSymbolSize(); | 
					
						
							|  |  |  |   void OnSetSymbolEndAddress(); | 
					
						
							|  |  |  |   void OnRunToHere(); | 
					
						
							|  |  |  |   void OnAddFunction(); | 
					
						
							|  |  |  |   void OnPPCComparison(); | 
					
						
							|  |  |  |   void OnInsertBLR(); | 
					
						
							|  |  |  |   void OnInsertNOP(); | 
					
						
							|  |  |  |   void OnReplaceInstruction(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   struct ReplStruct | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     u32 address; | 
					
						
							|  |  |  |     u32 old_value; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   std::vector<ReplStruct> m_repl_list; | 
					
						
							|  |  |  |   bool m_updating = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   u32 m_address = 0; | 
					
						
							|  |  |  |   u32 m_context_address = 0; | 
					
						
							|  |  |  | }; |