From 9cbe8626f3cdd0946ca9aadf1e36b47cd4f5d069 Mon Sep 17 00:00:00 2001 From: "andres.delikat" Date: Sat, 17 Sep 2011 16:39:43 +0000 Subject: [PATCH] Ram poke - Implement memory domain selection, on memory domain selection set addressbox length, reset address & value. Hex Editor - when show frozen addresses, check that addresses is in the selected memory domain. Cheat Window - update memory domain selection when clicking a cheat list item --- BizHawk.MultiClient/tools/Cheats.cs | 17 ++++ BizHawk.MultiClient/tools/HexEditor.cs | 10 ++- BizHawk.MultiClient/tools/RamPoke.Designer.cs | 38 +++++++-- BizHawk.MultiClient/tools/RamPoke.cs | 78 ++++++++++++++++--- 4 files changed, 122 insertions(+), 21 deletions(-) diff --git a/BizHawk.MultiClient/tools/Cheats.cs b/BizHawk.MultiClient/tools/Cheats.cs index d0081d1a96..9a181609d2 100644 --- a/BizHawk.MultiClient/tools/Cheats.cs +++ b/BizHawk.MultiClient/tools/Cheats.cs @@ -684,6 +684,7 @@ namespace BizHawk.MultiClient NameBox.Text = Global.CheatList.Cheat(indexes[0]).name; AddressBox.Text = Global.CheatList.FormatAddress(Global.CheatList.Cheat(indexes[0]).address); ValueBox.Text = String.Format("{0:X2}", Global.CheatList.Cheat(indexes[0]).value); + SetDomainSelection(Global.CheatList.Cheat(indexes[0]).domain.ToString()); CheatListView.Refresh(); } } @@ -996,5 +997,21 @@ namespace BizHawk.MultiClient } } } + + private void SetDomainSelection(string domainStr) + { + //Counts should always be the same, but just in case, let's check + int max; + if (Global.Emulator.MemoryDomains.Count < DomainComboBox.Items.Count) + max = Global.Emulator.MemoryDomains.Count; + else + max = DomainComboBox.Items.Count; + + for (int x = 0; x < max; x++) + { + if (domainStr == DomainComboBox.Items[x].ToString()) + DomainComboBox.SelectedIndex = x; + } + } } } diff --git a/BizHawk.MultiClient/tools/HexEditor.cs b/BizHawk.MultiClient/tools/HexEditor.cs index 945b060405..fba4e00570 100644 --- a/BizHawk.MultiClient/tools/HexEditor.cs +++ b/BizHawk.MultiClient/tools/HexEditor.cs @@ -232,6 +232,7 @@ namespace BizHawk.MultiClient } UpdateGroupBoxTitle(); ResetScrollBar(); + MemoryViewerBox.Refresh(); } private void UpdateGroupBoxTitle() @@ -787,9 +788,12 @@ namespace BizHawk.MultiClient { if (IsVisible(Global.CheatList.cheatList[x].address)) { - Rectangle rect = new Rectangle(GetAddressCoordinates(Global.CheatList.cheatList[x].address), new Size(15 * Global.Config.HexEditorDataSize, fontHeight)); - e.Graphics.DrawRectangle(new Pen(Brushes.Black), rect); - e.Graphics.FillRectangle(Brushes.LightBlue, rect); + if (Domain.ToString() == Global.CheatList.cheatList[x].domain.ToString()) + { + Rectangle rect = new Rectangle(GetAddressCoordinates(Global.CheatList.cheatList[x].address), new Size(15 * Global.Config.HexEditorDataSize, fontHeight)); + e.Graphics.DrawRectangle(new Pen(Brushes.Black), rect); + e.Graphics.FillRectangle(Brushes.LightBlue, rect); + } } } if (addressHighlighted >= 0 && IsVisible(addressHighlighted)) diff --git a/BizHawk.MultiClient/tools/RamPoke.Designer.cs b/BizHawk.MultiClient/tools/RamPoke.Designer.cs index ffa199b9f5..d9819fdd62 100644 --- a/BizHawk.MultiClient/tools/RamPoke.Designer.cs +++ b/BizHawk.MultiClient/tools/RamPoke.Designer.cs @@ -48,6 +48,8 @@ this.ValeLabel = new System.Windows.Forms.Label(); this.ValueBox = new System.Windows.Forms.TextBox(); this.ValueHexLabel = new System.Windows.Forms.Label(); + this.DomainComboBox = new System.Windows.Forms.ComboBox(); + this.label6 = new System.Windows.Forms.Label(); this.DataTypeGroupBox.SuspendLayout(); this.DataSizeBox.SuspendLayout(); this.EndianBox.SuspendLayout(); @@ -200,22 +202,24 @@ // // OK // - this.OK.Location = new System.Drawing.Point(12, 253); + this.OK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OK.Location = new System.Drawing.Point(12, 293); this.OK.Name = "OK"; this.OK.Size = new System.Drawing.Size(75, 23); - this.OK.TabIndex = 7; + this.OK.TabIndex = 8; this.OK.Text = "&Poke"; this.OK.UseVisualStyleBackColor = true; this.OK.Click += new System.EventHandler(this.OK_Click); // // Cancel // + this.Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.Cancel.Location = new System.Drawing.Point(123, 253); + this.Cancel.Location = new System.Drawing.Point(123, 293); this.Cancel.Name = "Cancel"; this.Cancel.Size = new System.Drawing.Size(75, 23); - this.Cancel.TabIndex = 8; - this.Cancel.Text = "Close"; + this.Cancel.TabIndex = 9; + this.Cancel.Text = "&Close"; this.Cancel.UseVisualStyleBackColor = true; this.Cancel.Click += new System.EventHandler(this.Cancel_Click); // @@ -257,13 +261,33 @@ this.ValueHexLabel.TabIndex = 11; this.ValueHexLabel.Text = "0x"; // + // DomainComboBox + // + this.DomainComboBox.FormattingEnabled = true; + this.DomainComboBox.Location = new System.Drawing.Point(12, 261); + this.DomainComboBox.Name = "DomainComboBox"; + this.DomainComboBox.Size = new System.Drawing.Size(141, 21); + this.DomainComboBox.TabIndex = 7; + this.DomainComboBox.SelectedIndexChanged += new System.EventHandler(this.DomainComboBox_SelectedIndexChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(11, 245); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(83, 13); + this.label6.TabIndex = 13; + this.label6.Text = "Memory Domain"; + // // RamPoke // this.AcceptButton = this.OK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.Cancel; - this.ClientSize = new System.Drawing.Size(213, 292); + this.ClientSize = new System.Drawing.Size(213, 332); + this.Controls.Add(this.label6); + this.Controls.Add(this.DomainComboBox); this.Controls.Add(this.ValueHexLabel); this.Controls.Add(this.ValueBox); this.Controls.Add(this.ValeLabel); @@ -314,5 +338,7 @@ private System.Windows.Forms.Label ValeLabel; private System.Windows.Forms.TextBox ValueBox; private System.Windows.Forms.Label ValueHexLabel; + private System.Windows.Forms.ComboBox DomainComboBox; + private System.Windows.Forms.Label label6; } } \ No newline at end of file diff --git a/BizHawk.MultiClient/tools/RamPoke.cs b/BizHawk.MultiClient/tools/RamPoke.cs index 3200a5d04f..eb0f2ba209 100644 --- a/BizHawk.MultiClient/tools/RamPoke.cs +++ b/BizHawk.MultiClient/tools/RamPoke.cs @@ -14,7 +14,6 @@ namespace BizHawk.MultiClient { //TODO: //If signed/unsigned/hex radios selected, auto-change the value box - //Memory domain selection public Watch watch = new Watch(); public MemoryDomain domain = Global.Emulator.MainMemory; public Point location = new Point(); @@ -32,6 +31,7 @@ namespace BizHawk.MultiClient private void RamPoke_Load(object sender, EventArgs e) { + PopulateMemoryDomainComboBox(); SetTypeRadio(watch.type); SetSignedRadio(watch.signed); if (watch.signed == asigned.HEX) @@ -43,14 +43,9 @@ namespace BizHawk.MultiClient BigEndianRadio.Checked = true; else LittleEndianRadio.Checked = true; - AddressBox.Text = String.Format("{0:X" + - GetNumDigits(watch.address) + "}", watch.address); - if (HexRadio.Checked) - ValueBox.Text = String.Format("{0:X" + - GetValueNumDigits() + "}", watch.value); - else - ValueBox.Text = watch.value.ToString(); + SetValueBox(); + SetAddressBox(); AddressBox.MaxLength = GetNumDigits(domain.Size); ValueBox.MaxLength = GetValueNumDigits(); @@ -58,6 +53,27 @@ namespace BizHawk.MultiClient if (location.X > 0 && location.Y > 0) this.Location = location; + UpdateTitleText(); + SetDomainSelection(); + } + + private void SetValueBox() + { + if (HexRadio.Checked) + ValueBox.Text = String.Format("{0:X" + + GetValueNumDigits() + "}", watch.value); + else + ValueBox.Text = watch.value.ToString(); + } + + private void SetAddressBox() + { + AddressBox.Text = String.Format("{0:X" + + GetNumDigits(watch.address) + "}", watch.address); + } + + private void UpdateTitleText() + { Text = "Ram Poke - " + domain.ToString(); } @@ -299,15 +315,53 @@ namespace BizHawk.MultiClient private int GetNumDigits(Int32 i) { - //if (i == 0) return 0; - //if (i < 0x10) return 1; - //if (i < 0x100) return 2; - //if (i < 0x1000) return 3; //adelikat: commenting these out because I decided that regardless of domain, 4 digits should be the minimum if (i < 0x10000) return 4; if (i < 0x100000) return 5; if (i < 0x1000000) return 6; if (i < 0x10000000) return 7; else return 8; } + + private void PopulateMemoryDomainComboBox() + { + DomainComboBox.Items.Clear(); + if (Global.Emulator.MemoryDomains.Count > 0) + { + for (int x = 0; x < Global.Emulator.MemoryDomains.Count; x++) + { + string str = Global.Emulator.MemoryDomains[x].ToString(); + DomainComboBox.Items.Add(str); + } + } + SetDomainSelection(); + } + + private void DomainComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + domain = Global.Emulator.MemoryDomains[DomainComboBox.SelectedIndex]; + UpdateTitleText(); + int x = GetNumDigits(domain.Size); + watch.address = 0; + watch.value = 0; + SetAddressBox(); + SetValueBox(); + AddressBox.MaxLength = GetNumDigits(domain.Size); + } + + private void SetDomainSelection() + { + //Counts should always be the same, but just in case, let's check + int max; + if (Global.Emulator.MemoryDomains.Count < DomainComboBox.Items.Count) + max = Global.Emulator.MemoryDomains.Count; + else + max = DomainComboBox.Items.Count; + + for (int x = 0; x < max; x++) + { + if (domain.ToString() == DomainComboBox.Items[x].ToString()) + DomainComboBox.SelectedIndex = x; + } + } } }