diff --git a/src/Xenia.Debug.UI/Controls/BaseDocument.Designer.cs b/src/Xenia.Debug.UI/Controls/BaseDocument.Designer.cs
new file mode 100644
index 000000000..a3ddc9483
--- /dev/null
+++ b/src/Xenia.Debug.UI/Controls/BaseDocument.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Controls {
+ partial class BaseDocument {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "BaseDocument";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Controls/BaseDocument.cs b/src/Xenia.Debug.UI/Controls/BaseDocument.cs
new file mode 100644
index 000000000..79b96f8ac
--- /dev/null
+++ b/src/Xenia.Debug.UI/Controls/BaseDocument.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace Xenia.Debug.UI.Controls {
+ public partial class BaseDocument : DockContent {
+ public BaseDocument() {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Controls/BasePanel.Designer.cs b/src/Xenia.Debug.UI/Controls/BasePanel.Designer.cs
new file mode 100644
index 000000000..3cdffce91
--- /dev/null
+++ b/src/Xenia.Debug.UI/Controls/BasePanel.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Controls {
+ partial class BasePanel {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "BasePanel";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Form1.cs b/src/Xenia.Debug.UI/Controls/BasePanel.cs
similarity index 63%
rename from src/Xenia.Debug.UI/Form1.cs
rename to src/Xenia.Debug.UI/Controls/BasePanel.cs
index d1e76d532..90c30589b 100644
--- a/src/Xenia.Debug.UI/Form1.cs
+++ b/src/Xenia.Debug.UI/Controls/BasePanel.cs
@@ -7,10 +7,11 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
-namespace Xenia.Debug.UI {
- public partial class Form1 : Form {
- public Form1() {
+namespace Xenia.Debug.UI.Controls {
+ public partial class BasePanel : DockContent {
+ public BasePanel() {
InitializeComponent();
}
}
diff --git a/src/Xenia.Debug.UI/MainWindow.Designer.cs b/src/Xenia.Debug.UI/MainWindow.Designer.cs
new file mode 100644
index 000000000..bc11d14c0
--- /dev/null
+++ b/src/Xenia.Debug.UI/MainWindow.Designer.cs
@@ -0,0 +1,121 @@
+namespace Xenia.Debug.UI {
+ partial class MainWindow {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
+ this.mainMenuStrip = new System.Windows.Forms.MenuStrip();
+ this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.mainToolStrip = new System.Windows.Forms.ToolStrip();
+ this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
+ this.statusStrip = new System.Windows.Forms.StatusStrip();
+ this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.mainMenuStrip.SuspendLayout();
+ this.mainToolStrip.SuspendLayout();
+ this.statusStrip.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // mainMenuStrip
+ //
+ this.mainMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.fileToolStripMenuItem});
+ this.mainMenuStrip.Location = new System.Drawing.Point(0, 0);
+ this.mainMenuStrip.Name = "mainMenuStrip";
+ this.mainMenuStrip.Size = new System.Drawing.Size(1571, 24);
+ this.mainMenuStrip.TabIndex = 0;
+ //
+ // fileToolStripMenuItem
+ //
+ this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+ this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
+ this.fileToolStripMenuItem.Text = "&File";
+ //
+ // mainToolStrip
+ //
+ this.mainToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripButton1});
+ this.mainToolStrip.Location = new System.Drawing.Point(0, 24);
+ this.mainToolStrip.Name = "mainToolStrip";
+ this.mainToolStrip.Size = new System.Drawing.Size(1571, 25);
+ this.mainToolStrip.TabIndex = 3;
+ this.mainToolStrip.Text = "toolStrip1";
+ //
+ // toolStripButton1
+ //
+ this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
+ this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton1.Name = "toolStripButton1";
+ this.toolStripButton1.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton1.Text = "toolStripButton1";
+ //
+ // statusStrip
+ //
+ this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripStatusLabel1});
+ this.statusStrip.Location = new System.Drawing.Point(0, 1081);
+ this.statusStrip.Name = "statusStrip";
+ this.statusStrip.Size = new System.Drawing.Size(1571, 22);
+ this.statusStrip.TabIndex = 4;
+ this.statusStrip.Text = "statusStrip1";
+ //
+ // toolStripStatusLabel1
+ //
+ this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
+ this.toolStripStatusLabel1.Size = new System.Drawing.Size(118, 17);
+ this.toolStripStatusLabel1.Text = "toolStripStatusLabel1";
+ //
+ // MainWindow
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1571, 1103);
+ this.Controls.Add(this.statusStrip);
+ this.Controls.Add(this.mainToolStrip);
+ this.Controls.Add(this.mainMenuStrip);
+ this.IsMdiContainer = true;
+ this.MainMenuStrip = this.mainMenuStrip;
+ this.Name = "MainWindow";
+ this.Text = "Xenia Debugger";
+ this.mainMenuStrip.ResumeLayout(false);
+ this.mainMenuStrip.PerformLayout();
+ this.mainToolStrip.ResumeLayout(false);
+ this.mainToolStrip.PerformLayout();
+ this.statusStrip.ResumeLayout(false);
+ this.statusStrip.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.MenuStrip mainMenuStrip;
+ private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
+ private System.Windows.Forms.ToolStrip mainToolStrip;
+ private System.Windows.Forms.ToolStripButton toolStripButton1;
+ private System.Windows.Forms.StatusStrip statusStrip;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
+ private WeifenLuo.WinFormsUI.Docking.DockPanel dockPanel;
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/MainWindow.cs b/src/Xenia.Debug.UI/MainWindow.cs
new file mode 100644
index 000000000..bcff2b7d8
--- /dev/null
+++ b/src/Xenia.Debug.UI/MainWindow.cs
@@ -0,0 +1,104 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Views;
+
+namespace Xenia.Debug.UI {
+ public partial class MainWindow : Form {
+ private DeserializeDockContent deserializeDockContent;
+
+ private BreakpointsPanel breakpointsPanel;
+ private CallstackPanel callstackPanel;
+ private List codeDocuments = new List();
+ private FilesystemPanel filesystemPanel;
+ private FunctionsPanel functionsPanel;
+ private HeapDocument heapDocument;
+ private List memoryDocuments = new List();
+ private ModulesPanel modulesPanel;
+ private ProfilePanel profilePanel;
+ private List registersPanels = new List();
+ private StatisticsDocument statisticsDocument;
+ private ThreadsPanel threadsPanel;
+ private TracePanel tracePanel;
+
+ public Debugger Debugger {
+ get;
+ }
+
+ public MainWindow() {
+ InitializeComponent();
+
+ dockPanel = new DockPanel();
+ dockPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ dockPanel.DockBackColor = System.Drawing.SystemColors.AppWorkspace;
+ dockPanel.DockBottomPortion = 200D;
+ dockPanel.DockLeftPortion = 350D;
+ dockPanel.Name = "dockPanel";
+ Controls.Add(dockPanel);
+ Controls.SetChildIndex(dockPanel, 0);
+
+ this.Debugger = new Debugger();
+
+ breakpointsPanel = new BreakpointsPanel(Debugger);
+ callstackPanel = new CallstackPanel(Debugger);
+ codeDocuments.Add(new CodeDocument(Debugger));
+ filesystemPanel = new FilesystemPanel(Debugger);
+ functionsPanel = new FunctionsPanel(Debugger);
+ heapDocument = new HeapDocument(Debugger);
+ memoryDocuments.Add(new MemoryDocument(Debugger));
+ modulesPanel = new ModulesPanel(Debugger);
+ profilePanel = new ProfilePanel(Debugger);
+ registersPanels.Add(new RegistersPanel(Debugger, RegisterClass.GuestGeneralPurpose));
+ registersPanels.Add(new RegistersPanel(Debugger, RegisterClass.GuestFloatingPoint));
+ registersPanels.Add(new RegistersPanel(Debugger, RegisterClass.GuestVector));
+ statisticsDocument = new StatisticsDocument(Debugger);
+ threadsPanel = new ThreadsPanel(Debugger);
+ tracePanel = new TracePanel(Debugger);
+
+ // deserializeDockContent =
+ // new DeserializeDockContent(GetContentFromPersistString);
+
+ SetupDefaultLayout();
+ }
+
+ private void SetupDefaultLayout() {
+ dockPanel.SuspendLayout(true);
+
+ filesystemPanel.Show(dockPanel, DockState.DockLeft);
+ functionsPanel.Show(filesystemPanel.Pane, filesystemPanel);
+
+ breakpointsPanel.Show(dockPanel, DockState.DockBottom);
+ callstackPanel.Show(breakpointsPanel.Pane, breakpointsPanel);
+
+ modulesPanel.Show(breakpointsPanel.Pane, DockAlignment.Right, 0.5);
+ threadsPanel.Show(modulesPanel.Pane, modulesPanel);
+
+ registersPanels[registersPanels.Count - 1].Show(filesystemPanel.Pane,
+ DockAlignment.Right, 0.5);
+ for (int i = registersPanels.Count - 2; i >= 0; --i) {
+ registersPanels[i].Show(registersPanels[i + 1].Pane, registersPanels[i + 1]);
+ }
+
+ foreach (var codeDocument in codeDocuments) {
+ codeDocument.Show(dockPanel, DockState.Document);
+ }
+
+ heapDocument.Show(codeDocuments[0].Pane, DockAlignment.Right, 0.5);
+ for (int i = 0; i < memoryDocuments.Count; ++i) {
+ memoryDocuments[i].Show(heapDocument.Pane, heapDocument);
+ }
+
+ tracePanel.Show(heapDocument.Pane, DockAlignment.Bottom, 0.5);
+ statisticsDocument.Show(tracePanel.Pane, tracePanel);
+
+ dockPanel.ResumeLayout(true, true);
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/MainWindow.resx b/src/Xenia.Debug.UI/MainWindow.resx
new file mode 100644
index 000000000..9cc3a5399
--- /dev/null
+++ b/src/Xenia.Debug.UI/MainWindow.resx
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ True
+
+
+ 132, 17
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+ 237, 17
+
+
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Program.cs b/src/Xenia.Debug.UI/Program.cs
index 30dc61c97..fd628be77 100644
--- a/src/Xenia.Debug.UI/Program.cs
+++ b/src/Xenia.Debug.UI/Program.cs
@@ -9,7 +9,7 @@ namespace Xenia.Debug.UI {
[STAThread] static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1());
+ Application.Run(new MainWindow());
}
}
}
diff --git a/src/Xenia.Debug.UI/Views/BreakpointsPanel.Designer.cs b/src/Xenia.Debug.UI/Views/BreakpointsPanel.Designer.cs
new file mode 100644
index 000000000..5da37e72b
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/BreakpointsPanel.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class BreakpointsPanel {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Breakpoints";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/BreakpointsPanel.cs b/src/Xenia.Debug.UI/Views/BreakpointsPanel.cs
new file mode 100644
index 000000000..966ce89df
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/BreakpointsPanel.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class BreakpointsPanel : BasePanel {
+ private readonly Debugger debugger;
+
+ public BreakpointsPanel(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/CallstackPanel.Designer.cs b/src/Xenia.Debug.UI/Views/CallstackPanel.Designer.cs
new file mode 100644
index 000000000..c69d8a7ff
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/CallstackPanel.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class CallstackPanel {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Callstack";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/CallstackPanel.cs b/src/Xenia.Debug.UI/Views/CallstackPanel.cs
new file mode 100644
index 000000000..ef1e5fe07
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/CallstackPanel.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class CallstackPanel : BasePanel {
+ private readonly Debugger debugger;
+
+ public CallstackPanel(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/CodeDocument.Designer.cs b/src/Xenia.Debug.UI/Views/CodeDocument.Designer.cs
new file mode 100644
index 000000000..a41e99195
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/CodeDocument.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class CodeDocument {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Code";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/CodeDocument.cs b/src/Xenia.Debug.UI/Views/CodeDocument.cs
new file mode 100644
index 000000000..138b70301
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/CodeDocument.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class CodeDocument : BaseDocument {
+ private readonly Debugger debugger;
+
+ public CodeDocument(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/FilesystemPanel.Designer.cs b/src/Xenia.Debug.UI/Views/FilesystemPanel.Designer.cs
new file mode 100644
index 000000000..8fa9b1f39
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/FilesystemPanel.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class FilesystemPanel {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Filesystem";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/FilesystemPanel.cs b/src/Xenia.Debug.UI/Views/FilesystemPanel.cs
new file mode 100644
index 000000000..4ae872f76
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/FilesystemPanel.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class FilesystemPanel : BasePanel {
+ private readonly Debugger debugger;
+
+ public FilesystemPanel(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/FunctionsPanel.Designer.cs b/src/Xenia.Debug.UI/Views/FunctionsPanel.Designer.cs
new file mode 100644
index 000000000..92627a880
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/FunctionsPanel.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class FunctionsPanel {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Functions";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/FunctionsPanel.cs b/src/Xenia.Debug.UI/Views/FunctionsPanel.cs
new file mode 100644
index 000000000..588b04c67
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/FunctionsPanel.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class FunctionsPanel : BasePanel {
+ private readonly Debugger debugger;
+
+ public FunctionsPanel(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/HeapDocument.Designer.cs b/src/Xenia.Debug.UI/Views/HeapDocument.Designer.cs
new file mode 100644
index 000000000..477b7d23b
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/HeapDocument.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class HeapDocument {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Heap";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/HeapDocument.cs b/src/Xenia.Debug.UI/Views/HeapDocument.cs
new file mode 100644
index 000000000..57abb7ca6
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/HeapDocument.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class HeapDocument : BaseDocument {
+ private readonly Debugger debugger;
+
+ public HeapDocument(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/MemoryDocument.Designer.cs b/src/Xenia.Debug.UI/Views/MemoryDocument.Designer.cs
new file mode 100644
index 000000000..061e1963d
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/MemoryDocument.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class MemoryDocument {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Memory";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/MemoryDocument.cs b/src/Xenia.Debug.UI/Views/MemoryDocument.cs
new file mode 100644
index 000000000..ca937ebf9
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/MemoryDocument.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class MemoryDocument : BaseDocument {
+ private readonly Debugger debugger;
+
+ public MemoryDocument(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/ModulesPanel.Designer.cs b/src/Xenia.Debug.UI/Views/ModulesPanel.Designer.cs
new file mode 100644
index 000000000..1591f6e09
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/ModulesPanel.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class ModulesPanel {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Modules";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/ModulesPanel.cs b/src/Xenia.Debug.UI/Views/ModulesPanel.cs
new file mode 100644
index 000000000..0ff5cf41d
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/ModulesPanel.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class ModulesPanel : BasePanel {
+ private readonly Debugger debugger;
+
+ public ModulesPanel(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/ProfilePanel.Designer.cs b/src/Xenia.Debug.UI/Views/ProfilePanel.Designer.cs
new file mode 100644
index 000000000..31b9b9af7
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/ProfilePanel.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class ProfilePanel {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Profile";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/ProfilePanel.cs b/src/Xenia.Debug.UI/Views/ProfilePanel.cs
new file mode 100644
index 000000000..5a1677538
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/ProfilePanel.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class ProfilePanel : BasePanel {
+ private readonly Debugger debugger;
+
+ public ProfilePanel(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/RegistersPanel.Designer.cs b/src/Xenia.Debug.UI/Views/RegistersPanel.Designer.cs
new file mode 100644
index 000000000..65851374c
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/RegistersPanel.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class RegistersPanel {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Registers";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/RegistersPanel.cs b/src/Xenia.Debug.UI/Views/RegistersPanel.cs
new file mode 100644
index 000000000..0d8d8569f
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/RegistersPanel.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public enum RegisterClass {
+ GuestGeneralPurpose,
+ GuestFloatingPoint,
+ GuestVector,
+ HostGeneralPurpose,
+ HostAvx,
+ }
+
+ public partial class RegistersPanel : BasePanel {
+ private readonly Debugger debugger;
+ private readonly RegisterClass registerClass;
+
+ public RegistersPanel(Debugger debugger, RegisterClass registerClass) {
+ InitializeComponent();
+
+ this.debugger = debugger;
+ this.registerClass = registerClass;
+ switch (registerClass) {
+ case RegisterClass.GuestGeneralPurpose:
+ this.Text = "GPR";
+ break;
+ case RegisterClass.GuestFloatingPoint:
+ this.Text = "FPR";
+ break;
+ case RegisterClass.GuestVector:
+ this.Text = "VR";
+ break;
+ case RegisterClass.HostGeneralPurpose:
+ this.Text = "x64";
+ break;
+ case RegisterClass.HostAvx:
+ this.Text = "AVX";
+ break;
+ default:
+ System.Diagnostics.Debug.Fail("Unhandled case: " + registerClass);
+ break;
+ }
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/StatisticsDocument.Designer.cs b/src/Xenia.Debug.UI/Views/StatisticsDocument.Designer.cs
new file mode 100644
index 000000000..ac427cd60
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/StatisticsDocument.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class StatisticsDocument {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Statistics";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/StatisticsDocument.cs b/src/Xenia.Debug.UI/Views/StatisticsDocument.cs
new file mode 100644
index 000000000..47a2dc58c
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/StatisticsDocument.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class StatisticsDocument : BaseDocument {
+ private readonly Debugger debugger;
+
+ public StatisticsDocument(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Views/ThreadsPanel.Designer.cs b/src/Xenia.Debug.UI/Views/ThreadsPanel.Designer.cs
new file mode 100644
index 000000000..0666df37e
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/ThreadsPanel.Designer.cs
@@ -0,0 +1,33 @@
+namespace Xenia.Debug.UI.Views {
+ partial class ThreadsPanel {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing) {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent() {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Text = "Threads";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/ThreadsPanel.cs b/src/Xenia.Debug.UI/Views/ThreadsPanel.cs
new file mode 100644
index 000000000..93d3c5874
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/ThreadsPanel.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class ThreadsPanel : BasePanel {
+ private readonly Debugger debugger;
+
+ public ThreadsPanel(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Form1.Designer.cs b/src/Xenia.Debug.UI/Views/TracePanel.Designer.cs
similarity index 90%
rename from src/Xenia.Debug.UI/Form1.Designer.cs
rename to src/Xenia.Debug.UI/Views/TracePanel.Designer.cs
index f4307e9c6..e1a0aa7cf 100644
--- a/src/Xenia.Debug.UI/Form1.Designer.cs
+++ b/src/Xenia.Debug.UI/Views/TracePanel.Designer.cs
@@ -1,5 +1,5 @@
-namespace Xenia.Debug.UI {
- partial class Form1 {
+namespace Xenia.Debug.UI.Views {
+ partial class TracePanel {
///
/// Required designer variable.
///
@@ -25,10 +25,9 @@
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.Text = "Form1";
+ this.Text = "Trace";
}
#endregion
}
-}
-
+}
\ No newline at end of file
diff --git a/src/Xenia.Debug.UI/Views/TracePanel.cs b/src/Xenia.Debug.UI/Views/TracePanel.cs
new file mode 100644
index 000000000..841101a14
--- /dev/null
+++ b/src/Xenia.Debug.UI/Views/TracePanel.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using Xenia.Debug.UI.Controls;
+
+namespace Xenia.Debug.UI.Views {
+ public partial class TracePanel : BasePanel {
+ private readonly Debugger debugger;
+
+ public TracePanel(Debugger debugger) {
+ InitializeComponent();
+ this.debugger = debugger;
+ }
+ }
+}
diff --git a/src/Xenia.Debug.UI/Xenia.Debug.UI.csproj b/src/Xenia.Debug.UI/Xenia.Debug.UI.csproj
index f8a2623b1..694409919 100644
--- a/src/Xenia.Debug.UI/Xenia.Debug.UI.csproj
+++ b/src/Xenia.Debug.UI/Xenia.Debug.UI.csproj
@@ -51,14 +51,107 @@
-
+
Form
-
- Form1.cs
+
+ BaseDocument.cs
+
+
+ Form
+
+
+ BasePanel.cs
+
+
+ Form
+
+
+ MainWindow.cs
+
+ Form
+
+
+ BreakpointsPanel.cs
+
+
+ Form
+
+
+ CallstackPanel.cs
+
+
+ Form
+
+
+ CodeDocument.cs
+
+
+ Form
+
+
+ FilesystemPanel.cs
+
+
+ Form
+
+
+ FunctionsPanel.cs
+
+
+ Form
+
+
+ HeapDocument.cs
+
+
+ Form
+
+
+ MemoryDocument.cs
+
+
+ Form
+
+
+ ModulesPanel.cs
+
+
+ Form
+
+
+ ProfilePanel.cs
+
+
+ Form
+
+
+ RegistersPanel.cs
+
+
+ Form
+
+
+ StatisticsDocument.cs
+
+
+ Form
+
+
+ ThreadsPanel.cs
+
+
+ Form
+
+
+ TracePanel.cs
+
+
+ MainWindow.cs
+
ResXFileCodeGenerator
Resources.Designer.cs
diff --git a/src/Xenia.Debug/Breakpoint.cs b/src/Xenia.Debug/Breakpoint.cs
new file mode 100644
index 000000000..4412f5bff
--- /dev/null
+++ b/src/Xenia.Debug/Breakpoint.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class Breakpoint : Changeable {
+ // type code/data/kernel
+ // address+[end address]
+ // conditions? script?
+ // action (suspend, trace, etc)
+ }
+}
diff --git a/src/Xenia.Debug/BreakpointList.cs b/src/Xenia.Debug/BreakpointList.cs
new file mode 100644
index 000000000..a5564e773
--- /dev/null
+++ b/src/Xenia.Debug/BreakpointList.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class BreakpointList : Changeable {
+ private readonly List breakpoints = new List();
+
+ public void Add(Breakpoint breakpoint) {
+ }
+
+ public void Remove(Breakpoint breakpoint) {
+ }
+
+ public void Clear() {
+ }
+ }
+}
diff --git a/src/Xenia.Debug/Callstack.cs b/src/Xenia.Debug/Callstack.cs
new file mode 100644
index 000000000..c9a67ec67
--- /dev/null
+++ b/src/Xenia.Debug/Callstack.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Xenia.Debug {
+ public class Callstack {
+ }
+}
diff --git a/src/Xenia.Debug/DebugClient.cs b/src/Xenia.Debug/DebugClient.cs
new file mode 100644
index 000000000..7ce678035
--- /dev/null
+++ b/src/Xenia.Debug/DebugClient.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Xenia.Debug {
+ public class DebugClient {
+ }
+}
diff --git a/src/Xenia.Debug/Debugger.cs b/src/Xenia.Debug/Debugger.cs
new file mode 100644
index 000000000..0ab55e72a
--- /dev/null
+++ b/src/Xenia.Debug/Debugger.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Xenia.Debug {
+ public class Debugger {
+ public DebugClient DebugClient {
+ get;
+ }
+
+ public BreakpointList BreakpointList {
+ get;
+ }
+ public FunctionList FunctionList {
+ get;
+ }
+ public Memory Memory {
+ get;
+ }
+ public ModuleList ModuleList {
+ get;
+ }
+ public ThreadList ThreadList {
+ get;
+ }
+
+ public Debugger() {
+ this.DebugClient = new DebugClient();
+
+ this.BreakpointList = new BreakpointList();
+ this.FunctionList = new FunctionList();
+ this.Memory = new Memory();
+ this.ModuleList = new ModuleList();
+ this.ThreadList = new ThreadList();
+ }
+
+ public bool Open() {
+ return true;
+ }
+
+ public delegate void ChangedEventHandler(EventArgs e);
+
+ public event ChangedEventHandler Changed;
+
+ private void OnChanged(EventArgs e) {
+ if (Changed != null) {
+ Changed(e);
+ }
+ }
+ }
+}
diff --git a/src/Xenia.Debug/Function.cs b/src/Xenia.Debug/Function.cs
new file mode 100644
index 000000000..cea2b9ef3
--- /dev/null
+++ b/src/Xenia.Debug/Function.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class Function : Changeable {
+ }
+}
diff --git a/src/Xenia.Debug/FunctionList.cs b/src/Xenia.Debug/FunctionList.cs
new file mode 100644
index 000000000..840fd252b
--- /dev/null
+++ b/src/Xenia.Debug/FunctionList.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class FunctionList : Changeable {
+ }
+}
diff --git a/src/Xenia.Debug/Memory.cs b/src/Xenia.Debug/Memory.cs
new file mode 100644
index 000000000..99fb89fa7
--- /dev/null
+++ b/src/Xenia.Debug/Memory.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class Memory : Changeable {
+ public MemoryView CreateView() {
+ return new MemoryView(this);
+ }
+ }
+}
diff --git a/src/Xenia.Debug/MemoryView.cs b/src/Xenia.Debug/MemoryView.cs
new file mode 100644
index 000000000..c13901964
--- /dev/null
+++ b/src/Xenia.Debug/MemoryView.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class MemoryView : Changeable {
+ private readonly Memory memory;
+
+ public MemoryView(Memory memory) {
+ this.memory = memory;
+ }
+ }
+}
diff --git a/src/Xenia.Debug/Module.cs b/src/Xenia.Debug/Module.cs
new file mode 100644
index 000000000..5a2734820
--- /dev/null
+++ b/src/Xenia.Debug/Module.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class Module : Changeable {
+ }
+}
diff --git a/src/Xenia.Debug/ModuleList.cs b/src/Xenia.Debug/ModuleList.cs
new file mode 100644
index 000000000..d292f99fc
--- /dev/null
+++ b/src/Xenia.Debug/ModuleList.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class ModuleList : Changeable {
+ }
+}
diff --git a/src/Xenia.Debug/Thread.cs b/src/Xenia.Debug/Thread.cs
new file mode 100644
index 000000000..bf54810df
--- /dev/null
+++ b/src/Xenia.Debug/Thread.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class ThreadContext {
+ }
+
+ public class Thread : Changeable {
+ }
+}
diff --git a/src/Xenia.Debug/ThreadList.cs b/src/Xenia.Debug/ThreadList.cs
new file mode 100644
index 000000000..3f7cabdff
--- /dev/null
+++ b/src/Xenia.Debug/ThreadList.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xenia.Debug.Utilities;
+
+namespace Xenia.Debug {
+ public class ThreadList : Changeable {
+ }
+}
diff --git a/src/Xenia.Debug/Utilities/Changeable.cs b/src/Xenia.Debug/Utilities/Changeable.cs
new file mode 100644
index 000000000..fe527782c
--- /dev/null
+++ b/src/Xenia.Debug/Utilities/Changeable.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Xenia.Debug.Utilities {
+ public delegate void ChangedEventHandler();
+
+ public class Changeable {
+ private int changeDepth;
+ public event ChangedEventHandler Changed;
+
+ protected void BeginChanging() {
+ ++changeDepth;
+ }
+
+ protected void EndChanging() {
+ if (--changeDepth == 0) {
+ OnChanged();
+ }
+ }
+
+ protected void OnChanged() {
+ System.Diagnostics.Debug.Assert(changeDepth == 0);
+ if (Changed != null) {
+ Changed();
+ }
+ }
+ }
+}
diff --git a/src/Xenia.Debug/Xenia.Debug.csproj b/src/Xenia.Debug/Xenia.Debug.csproj
index cc9d1b93e..b556d6a31 100644
--- a/src/Xenia.Debug/Xenia.Debug.csproj
+++ b/src/Xenia.Debug/Xenia.Debug.csproj
@@ -43,7 +43,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+