private void StartCompareDifferenceViewer(SymbolHelper sh, string Filename, int SymbolAddress)
{
DevExpress.XtraBars.Docking.DockPanel dockPanel;
bool pnlfound = false;
foreach (DevExpress.XtraBars.Docking.DockPanel pnl in dockManager1.Panels)
{
if (pnl.Text == "Symbol difference: " + sh.Varname + " [" + Path.GetFileName(Tools.Instance.m_currentfile) + "]")
{
dockPanel = pnl;
pnlfound = true;
dockPanel.Show();
}
}
if (!pnlfound)
{
dockManager1.BeginUpdate();
try
{
dockPanel = dockManager1.AddPanel(new System.Drawing.Point(-500, -500));
dockPanel.Tag = Tools.Instance.m_currentfile;
MapViewerEx tabdet = new MapViewerEx();
tabdet.Map_name = sh.Varname;
tabdet.IsDifferenceViewer = true;
tabdet.AutoUpdateIfSRAM = false;
tabdet.AutoUpdateInterval = 999999;
tabdet.Viewtype = m_appSettings.DefaultViewType;
tabdet.DisableColors = m_appSettings.DisableMapviewerColors;
tabdet.AutoSizeColumns = m_appSettings.AutoSizeColumnsInWindows;
tabdet.GraphVisible = m_appSettings.ShowGraphs;
tabdet.IsRedWhite = m_appSettings.ShowRedWhite;
tabdet.SetViewSize(m_appSettings.DefaultViewSize);
tabdet.Filename = Filename;
tabdet.Map_descr = tabdet.Map_name;
tabdet.Map_cat = XDFCategories.Undocumented;
tabdet.X_axisvalues = GetXaxisValues(Tools.Instance.m_currentfile, Tools.Instance.m_symbols, tabdet.Map_name);
tabdet.Y_axisvalues = GetYaxisValues(Tools.Instance.m_currentfile, Tools.Instance.m_symbols, tabdet.Map_name);
SymbolAxesTranslator axestrans = new SymbolAxesTranslator();
string x_axis = string.Empty;
string y_axis = string.Empty;
string x_axis_descr = string.Empty;
string y_axis_descr = string.Empty;
string z_axis_descr = string.Empty;
tabdet.X_axis_name = sh.X_axis_descr;
tabdet.Y_axis_name = sh.Y_axis_descr;
tabdet.Z_axis_name = sh.Z_axis_descr;
tabdet.XaxisUnits = sh.XaxisUnits;
tabdet.YaxisUnits = sh.YaxisUnits;
tabdet.X_axisAddress = sh.Y_axis_address;
tabdet.Y_axisAddress = sh.X_axis_address;
tabdet.Xaxiscorrectionfactor = sh.X_axis_correction;
tabdet.Yaxiscorrectionfactor = sh.Y_axis_correction;
tabdet.X_axisvalues = GetXaxisValues(Tools.Instance.m_currentfile, Tools.Instance.m_symbols, tabdet.Map_name);
tabdet.Y_axisvalues = GetYaxisValues(Tools.Instance.m_currentfile, Tools.Instance.m_symbols, tabdet.Map_name);
//tabdet.Map_sramaddress = GetSymbolAddressSRAM(SymbolName);
int columns = 8;
int rows = 8;
int tablewidth = GetTableMatrixWitdhByName(Tools.Instance.m_currentfile, Tools.Instance.m_symbols, tabdet.Map_name, out columns, out rows);
int address = Convert.ToInt32(SymbolAddress);
if (address != 0)
{
tabdet.Map_address = address;
int length = sh.Length;
tabdet.Map_length = length;
byte[] mapdata = Tools.Instance.readdatafromfile(Filename, address, length, Tools.Instance.m_currentFileType);
byte[] mapdataorig = Tools.Instance.readdatafromfile(Filename, address, length, Tools.Instance.m_currentFileType);
byte[] mapdata2 = Tools.Instance.readdatafromfile(Tools.Instance.m_currentfile, (int)GetSymbolAddress(Tools.Instance.m_symbols, sh.Varname), GetSymbolLength(Tools.Instance.m_symbols, sh.Varname), Tools.Instance.m_currentFileType);
tabdet.Map_original_content = mapdataorig;
tabdet.Map_compare_content = mapdata2;
if (mapdata.Length == mapdata2.Length)
{
for (int bt = 0; bt < mapdata2.Length; bt += 2)
{
int value1 = Convert.ToInt16(mapdata.GetValue(bt)) * 256 + Convert.ToInt16(mapdata.GetValue(bt + 1));
int value2 = Convert.ToInt16(mapdata2.GetValue(bt)) * 256 + Convert.ToInt16(mapdata2.GetValue(bt + 1));
value1 = Math.Abs((int)value1 - (int)value2);
byte v1 = (byte)(value1 / 256);
byte v2 = (byte)(value1 - (int)v1 * 256);
mapdata.SetValue(v1, bt);
mapdata.SetValue(v2, bt + 1);
}
tabdet.Map_content = mapdata;
tabdet.UseNewCompare = true;
tabdet.Correction_factor = sh.Correction;
tabdet.Correction_offset = sh.Offset;
tabdet.IsUpsideDown = m_appSettings.ShowTablesUpsideDown;
tabdet.ShowTable(columns, true);
tabdet.Dock = DockStyle.Fill;
tabdet.onClose += new MapViewerEx.ViewerClose(tabdet_onClose);
dockPanel.Text = "Symbol difference: " + sh.Varname + " [" + Path.GetFileName(Filename) + "]";
bool isDocked = false;
if (!isDocked)
{
dockPanel.DockTo(dockManager1, DevExpress.XtraBars.Docking.DockingStyle.Right, 0);
if (m_appSettings.AutoSizeNewWindows)
{
if (tabdet.X_axisvalues.Length > 0)
{
dockPanel.Width = 30 + ((tabdet.X_axisvalues.Length + 1) * 45);
}
else
{
//dockPanel.Width = this.Width - dockSymbols.Width - 10;
}
}
if (dockPanel.Width < 400) dockPanel.Width = 400;
// dockPanel.Width = 400;
}
dockPanel.Controls.Add(tabdet);
}
else
{
frmInfoBox info = new frmInfoBox("Map lengths don't match...");
}
}
}
catch (Exception E)
{
Console.WriteLine(E.Message);
}
dockManager1.EndUpdate();
}
}