/[RomCheater]/trunk/RomCheater.RVACalculator/RVACalculatorDockControl.cs
ViewVC logotype

Annotation of /trunk/RomCheater.RVACalculator/RVACalculatorDockControl.cs

Parent Directory Parent Directory | Revision Log Revision Log


Revision 683 - (hide annotations) (download)
Mon Jun 17 08:33:06 2013 UTC (7 years, 10 months ago) by william
File size: 14067 byte(s)

1 william 659 #region Logging Defines
2     // include this any class or method that required logging, and comment-out what is not needed
3    
4     #region Enabled logging levels
5     #define LOGGING_ENABLE_INFO
6     #define LOGGING_ENABLE_WARN
7     #define LOGGING_ENABLE_DEBUG
8     #define LOGGING_ENABLE_VERBOSEDEBUG
9     #define LOGGING_ENABLE_ERROR
10     #define LOGGING_ENABLE_VERBOSEERROR
11     #define LOGGING_ENABLE_PROFILER
12     #endregion
13     #endregion
14     using System;
15     using System.Collections.Generic;
16     using System.ComponentModel;
17     using System.Data;
18     using System.Drawing;
19     using System.Linq;
20     using System.Text;
21     using System.Windows.Forms;
22     using WeifenLuo.WinFormsUI.Docking;
23     using RomCheater.Logging;
24 william 668 using System.IO;
25     using System.Runtime.Serialization.Formatters.Binary;
26 william 683 using RomCheater.PluginFramework.Core;
27 william 659
28     namespace RomCheater.RVACalculator
29     {
30     public partial class RVACalculatorDockControl : DockContent
31     {
32 william 683 private UserControlPlugin plugin;
33     public RVACalculatorDockControl(UserControlPlugin plugin)
34 william 659 {
35 william 683 this.plugin = plugin;
36 william 659 InitializeComponent();
37     }
38    
39     /*
40     * foreach (var col in Enumerable.Range(0, lstCheats.Columns.Count))
41     {
42     lstCheats.AutoResizeColumn(col, ColumnHeaderAutoResizeStyle.ColumnContent);
43     }
44     */
45     private void btnAdd_Click(object sender, EventArgs e)
46     {
47     string name = string.Empty;
48     string address = string.Empty;
49    
50     name = Microsoft.VisualBasic.Interaction.InputBox("Input Dialog", "Enter the cheat name", string.Empty);
51     address = Microsoft.VisualBasic.Interaction.InputBox("Input Dialog", "Enter the cheat address (in hex : 0xXXXXXXXX)", string.Empty);
52 william 666 uint physical = Convert.ToUInt32(address, 16) + txtRVA.ToUInt32();
53 william 659 ListViewItem li = new ListViewItem(name);
54 william 666 li.SubItems.Add(new ListViewItem.ListViewSubItem(li, string.Format("0x{0:x8}", Convert.ToUInt32(address, 16))));
55 william 659 li.SubItems.Add(new ListViewItem.ListViewSubItem(li, string.Format("0x{0:x8}", physical)));
56     lstCheats.Items.Add(li);
57     }
58    
59     private void btnRemove_Click(object sender, EventArgs e)
60     {
61     if (lstCheats.SelectedItems.Count == 0 || lstCheats.SelectedItems.Count > 1) { return; }
62     int index = lstCheats.SelectedIndices[0];
63     lstCheats.Items.RemoveAt(index);
64     }
65    
66     private void btnUpdate_Click(object sender, EventArgs e)
67     {
68     if (lstCheats.SelectedItems.Count == 0 || lstCheats.SelectedItems.Count > 1) { return; }
69     int index = lstCheats.SelectedIndices[0];
70     var li = lstCheats.SelectedItems[0];
71     string name = li.Text;
72     string address = li.SubItems[1].Text;
73    
74     name = Microsoft.VisualBasic.Interaction.InputBox("Input Dialog", "Enter the cheat name", name);
75     address = Microsoft.VisualBasic.Interaction.InputBox("Input Dialog", "Enter the cheat address (in hex : 0xXXXXXXXX)", address);
76 william 666 uint physical = Convert.ToUInt32(address, 16) + txtRVA.ToUInt32();
77     li.Text = name;
78     li.SubItems[1].Text = string.Format("0x{0:x8}", Convert.ToUInt32(address, 16));
79 william 659 li.SubItems[2].Text = string.Format("0x{0:x8}", physical);
80     lstCheats.Items[index] = li;
81     }
82    
83     private void btnCopy_Click(object sender, EventArgs e)
84     {
85 william 667 if (lstCheats.SelectedItems.Count == 0 || lstCheats.SelectedItems.Count > 1) { return; }
86     var li = lstCheats.SelectedItems[0];
87     string physical = li.SubItems[2].Text;
88     Clipboard.SetText(physical);
89 william 659 }
90    
91     private void btnSave_Click(object sender, EventArgs e)
92     {
93 william 668 DialogResult result = CheatSaver.ShowDialog();
94     if (result != DialogResult.OK) { return; }
95 william 659
96 william 668
97 william 669 ICheatList2 list = new ICheatList2();
98 william 668 list.RVA = txtRVA.ToUInt32();
99 william 669 List<ICheatEntry2> cheats = new List<ICheatEntry2>();
100 william 668 foreach (ListViewItem li in lstCheats.Items)
101     {
102 william 669 cheats.Add(new ICheatEntry2(li.Text, Convert.ToUInt32(li.SubItems[1].Text, 16), Convert.ToUInt32(li.SubItems[2].Text, 16)));
103 william 668 }
104    
105     list.Cheats = cheats;
106    
107     try
108     {
109     using (FileStream fs = new FileStream(CheatSaver.FileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read))
110     {
111     try
112     {
113 william 669 fs.Seek(0, SeekOrigin.Begin);
114 william 668 BinaryFormatter bin = new BinaryFormatter();
115     bin.Serialize(fs, list);
116     }
117     catch (Exception ex)
118     {
119     logger.Error.WriteLine("Failed to save file: {0}", CheatSaver.FileName);
120     logger.VerboseError.WriteLine(ex.ToString());
121     MessageBox.Show(string.Format("Failed to save: '{0}'", new FileInfo(CheatSaver.FileName).Name), "", MessageBoxButtons.OK, MessageBoxIcon.Error);
122 william 669 return;
123 william 668 }
124     }
125     MessageBox.Show(string.Format("Successfully saved file: '{0}'", new FileInfo(CheatSaver.FileName).Name), "", MessageBoxButtons.OK, MessageBoxIcon.Information);
126     }
127     catch (Exception ex)
128     {
129     logger.Error.WriteLine("Failed to save file: {0}", CheatSaver.FileName);
130     logger.VerboseError.WriteLine(ex.ToString());
131     MessageBox.Show(string.Format("Failed to save: '{0}'", new FileInfo(CheatSaver.FileName).Name), "", MessageBoxButtons.OK, MessageBoxIcon.Error);
132     }
133 william 659 }
134    
135     private void btnLoad_Click(object sender, EventArgs e)
136     {
137 william 668 DialogResult result = CheatLoader.ShowDialog();
138     if (result != DialogResult.OK) { return; }
139     try
140     {
141     using (FileStream fs = new FileStream(CheatLoader.FileName, FileMode.Open, FileAccess.Read, FileShare.Read))
142     {
143     try
144     {
145 william 669 ICheatList2 list = new ICheatList2();
146 william 668 BinaryFormatter bin = new BinaryFormatter();
147 william 669 try
148     {
149     fs.Seek(0, SeekOrigin.Begin);
150     var t_list = (ICheatList2)bin.Deserialize(fs);
151     list = t_list;
152     }
153     catch (Exception)
154     {
155     fs.Seek(0, SeekOrigin.Begin);
156     var t_list = (ICheatList)bin.Deserialize(fs);
157     list = new ICheatList2(t_list);
158     }
159 william 659
160 william 668 txtRVA.Value = list.RVA;
161 william 670 if (lstCheats.Items.Count > 0)
162 william 668 {
163 william 670 result = MessageBox.Show("Clear existing Cheats?", "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3);
164     if (result == System.Windows.Forms.DialogResult.Cancel)
165     {
166     // assume abort of load
167     logger.Warn.WriteLine("Abored processing of file (by user request): {0}", CheatLoader.FileName);
168     fs.Close();
169     return;
170     }
171     if (result == DialogResult.Yes)
172     {
173     lstCheats.Items.Clear();
174     }
175 william 668 }
176     foreach (var cheat in list.Cheats)
177     {
178     ListViewItem li = new ListViewItem(cheat.CheatName);
179     li.SubItems.Add(new ListViewItem.ListViewSubItem(li, string.Format("0x{0:x8}", cheat.CheatAddress)));
180     uint physical = cheat.CheatAddress + list.RVA;
181     li.SubItems.Add(new ListViewItem.ListViewSubItem(li, string.Format("0x{0:x8}", physical)));
182     lstCheats.Items.Add(li);
183     }
184     btnRefresh.PerformClick(); // do any needed refreshing
185     }
186     catch (Exception ex)
187     {
188     logger.Error.WriteLine("Failed to load file: {0}", CheatLoader.FileName);
189     logger.VerboseError.WriteLine(ex.ToString());
190     MessageBox.Show(string.Format("Failed to open: '{0}'", new FileInfo(CheatLoader.FileName).Name), "", MessageBoxButtons.OK, MessageBoxIcon.Error);
191 william 669 return;
192 william 668 }
193     }
194     MessageBox.Show(string.Format("Successfully opened file: '{0}'", new FileInfo(CheatLoader.FileName).Name), "", MessageBoxButtons.OK, MessageBoxIcon.Information);
195     }
196     catch (Exception ex)
197     {
198     logger.Error.WriteLine("Failed to load file: {0}", CheatLoader.FileName);
199     logger.VerboseError.WriteLine(ex.ToString());
200     MessageBox.Show(string.Format("Failed to open: '{0}'", new FileInfo(CheatLoader.FileName).Name), "", MessageBoxButtons.OK, MessageBoxIcon.Error);
201     }
202 william 659 }
203    
204     private void btnRefresh_Click(object sender, EventArgs e)
205     {
206     int index = 0;
207     foreach (ListViewItem li in lstCheats.Items)
208     {
209     string name = li.Text;
210     string address = li.SubItems[1].Text;
211 william 666 uint physical = Convert.ToUInt32(address, 16) + txtRVA.ToUInt32();
212 william 659 li.SubItems[2].Text = string.Format("0x{0:x8}", physical);
213     lstCheats.Items[index] = li;
214     index++;
215     }
216     }
217 william 669 private void btnCopyAll_Click(object sender, EventArgs e)
218     {
219     ICheatList2 list = new ICheatList2();
220     list.RVA = txtRVA.ToUInt32();
221     List<ICheatEntry2> cheats = new List<ICheatEntry2>();
222     foreach (ListViewItem li in lstCheats.Items)
223     {
224     cheats.Add(new ICheatEntry2(li.Text, Convert.ToUInt32(li.SubItems[1].Text, 16), Convert.ToUInt32(li.SubItems[2].Text, 16)));
225     }
226 william 670 list.Cheats = cheats;
227 william 669 StringBuilder builder = new StringBuilder();
228     builder.AppendFormat("RVA: 0x{0:x8}", list.RVA);
229     builder.AppendLine();
230     foreach (ColumnHeader t in lstCheats.Columns)
231     {
232 william 670 builder.AppendFormat("{0}:\t\t", t.Text);
233 william 669 }
234     builder.AppendLine();
235     foreach (var cheat in list.Cheats)
236     {
237 william 670 builder.AppendFormat("{0}\t\t0x{1:x8}\t\t0x{2:x8}", cheat.CheatName, cheat.CheatAddress, cheat.PhysicalAddress);
238 william 669 builder.AppendLine();
239     }
240     Clipboard.SetText(builder.ToString());
241 william 659
242 william 669 }
243 william 659 private void RVACalculatorDockControl_Shown(object sender, EventArgs e)
244     {
245 william 663 //const int t = 100;
246     ////txtRVA.SuspendLayout();
247     //logger.Debug.WriteLine("txtRva.Width={0}", txtRVA.Width);
248     //logger.Debug.WriteLine("increasing txtRva.Width to {0}", txtRVA.Width + t);
249     //txtRVA.Width = txtRVA.Width + t;
250     //logger.Debug.WriteLine("txtRva.Width={0}", txtRVA.Width);
251     ////txtRVA.ResumeLayout();
252 william 659 }
253    
254 william 668 [Serializable]
255     private struct ICheatEntry
256     {
257     public ICheatEntry(string name, uint address)
258     {
259     CheatName = name;
260     CheatAddress = address;
261     }
262     public string CheatName;
263     public uint CheatAddress;
264     }
265     [Serializable]
266 william 669 private struct ICheatEntry2
267     {
268     public ICheatEntry2(string name, uint address, uint physical)
269     {
270     CheatName = name;
271     CheatAddress = address;
272     PhysicalAddress = physical;
273     }
274     public string CheatName;
275     public uint CheatAddress;
276     public uint PhysicalAddress;
277     }
278     [Serializable]
279 william 668 private struct ICheatList
280     {
281 william 669 public ICheatList(ICheatList2 t)
282     {
283     RVA = t.RVA;
284     List<ICheatEntry> cheats = new List<ICheatEntry>();
285     t.Cheats.ForEach(c => cheats.Add(new ICheatEntry(c.CheatName,c.CheatAddress)));
286     Cheats = cheats;
287     }
288     public ICheatList(uint rva, List<ICheatEntry> cheats)
289     {
290     RVA = rva;
291     Cheats = cheats;
292     }
293 william 668 public uint RVA;
294     public List<ICheatEntry> Cheats;
295     }
296 william 669 [Serializable]
297     private struct ICheatList2
298     {
299     public ICheatList2(ICheatList t)
300     {
301     RVA = t.RVA;
302     List<ICheatEntry2> cheats = new List<ICheatEntry2>();
303     t.Cheats.ForEach(c => cheats.Add(new ICheatEntry2(c.CheatName, c.CheatAddress, c.CheatAddress)));
304     Cheats = cheats;
305     }
306     public ICheatList2(uint rva, List<ICheatEntry2> cheats)
307     {
308     RVA = rva;
309     Cheats = cheats;
310     }
311     public uint RVA;
312     public List<ICheatEntry2> Cheats;
313     }
314 william 672
315     private void txtRVA_ValueChanged(object sender, ValueChangedEventArgs e)
316     {
317     btnRefresh.PerformClick();
318     }
319 william 669
320 william 659
321     }
322     }

  ViewVC Help
Powered by ViewVC 1.1.22