public override void Load(NetworkLogViewerBase viewer) { if (m_viewer != null) { throw new InvalidOperationException(); } m_viewer = viewer; viewer.ItemVisualDataQueried += m_itemVisualDataQueriedHandler; var view = m_view = new GridView(); var nColumns = s_columnWidths.Length; var headers = new string[] { NetworkStrings.CH_Number, NetworkStrings.CH_Time, NetworkStrings.CH_Ticks, NetworkStrings.CH_C2S, NetworkStrings.CH_S2C, NetworkStrings.CH_Length, }; if (headers.Length != nColumns) { throw new InvalidOperationException(); } double[] widths = Configuration.GetValue("Column Widths", (double[])null); if (widths == null || widths.Length != nColumns) { widths = s_columnWidths; } int[] columnOrder = Configuration.GetValue("Column Order", (int[])null); if (columnOrder == null || columnOrder.Length != nColumns || columnOrder.Any(val => val >= nColumns || val < 0)) { columnOrder = Enumerable.Range(0, nColumns).ToArray(); } for (int i = 0; i < nColumns; i++) { int col = columnOrder[i]; var item = new GridViewColumnWithId(); item.ColumnId = col; item.Header = headers[col]; item.Width = widths[col]; var dataTemplate = new DataTemplate(); dataTemplate.DataType = typeof(ItemVisualData); var block = new FrameworkElementFactory(typeof(TextBlock)); block.SetValue(TextBlock.TextProperty, new Binding(s_columnBindings[col])); dataTemplate.VisualTree = block; item.CellTemplate = dataTemplate; view.Columns.Add(item); } }
public override void Load(NetworkLogViewerBase viewer) { if (m_viewer != null) throw new InvalidOperationException(); m_viewer = viewer; viewer.ItemVisualDataQueried += m_itemVisualDataQueriedHandler; var view = m_view = new GridView(); var nColumns = s_columnWidths.Length; var headers = new string[] { NetworkStrings.CH_Number, NetworkStrings.CH_Time, NetworkStrings.CH_Ticks, NetworkStrings.CH_C2S, NetworkStrings.CH_S2C, NetworkStrings.CH_Length, }; if (headers.Length != nColumns) throw new InvalidOperationException(); double[] widths = Configuration.GetValue("Column Widths", (double[])null); if (widths == null || widths.Length != nColumns) widths = s_columnWidths; int[] columnOrder = Configuration.GetValue("Column Order", (int[])null); if (columnOrder == null || columnOrder.Length != nColumns || columnOrder.Any(val => val >= nColumns || val < 0)) columnOrder = Enumerable.Range(0, nColumns).ToArray(); for (int i = 0; i < nColumns; i++) { int col = columnOrder[i]; var item = new GridViewColumnWithId(); item.ColumnId = col; item.Header = headers[col]; item.Width = widths[col]; var dataTemplate = new DataTemplate(); dataTemplate.DataType = typeof(ItemVisualData); var block = new FrameworkElementFactory(typeof(TextBlock)); block.SetValue(TextBlock.TextProperty, new Binding(s_columnBindings[col])); dataTemplate.VisualTree = block; item.CellTemplate = dataTemplate; view.Columns.Add(item); } }
public override void Load(NetworkLogViewerBase viewer) { if (m_viewer != null) { throw new InvalidOperationException(); } // Check opcode integrity { Console.WriteLine("Debug: Protocol '{0}' build {1} checking opcode integrity...", this.CodeName, Disassembly.ClientBuild); var fields = typeof(WowOpcodes).GetFields(BindingFlags.Static | BindingFlags.Public); var list = new SortedSet <uint>(); foreach (var field in fields) { var value = (uint)field.GetRawConstantValue(); if (value != SpecialOpcodes.UnknownOpcode) { if (!list.Contains(value)) { list.Add(value); } else { Console.WriteLine("Error: Protocol '{1}' duplicate opcode value {0}", value, this.CodeName); } } } Console.WriteLine( "Debug: Integrity check complete, {0}/{1} ({2:0.00}%) known unique opcode values.", list.Count, fields.Length, list.Count * 100.0 / fields.Length ); } m_viewer = viewer; viewer.ItemVisualDataQueried += m_itemVisualDataQueriedHandler; viewer.ItemParsingDone += m_itemParsingDoneHandler; var view = m_view = new GridView(); var nColumns = s_columnWidths.Length; var headers = new string[] { NetworkStrings.CH_Number, NetworkStrings.CH_Time, NetworkStrings.CH_Ticks, Strings.CH_ConnId, NetworkStrings.CH_C2S, NetworkStrings.CH_S2C, NetworkStrings.CH_Length, Strings.CH_Preview, }; if (headers.Length != nColumns) { throw new InvalidOperationException(); } double[] widths = Configuration.GetValue("Column Widths", (double[])null); if (widths == null || widths.Length != nColumns) { widths = s_columnWidths; } int[] columnOrder = Configuration.GetValue("Column Order", (int[])null); if (columnOrder == null || columnOrder.Length != nColumns || columnOrder.Any(val => val >= nColumns || val < 0)) { columnOrder = Enumerable.Range(0, nColumns).ToArray(); } if (s_customBrush == null) { s_customBrush = new SolidColorBrush(Color.FromRgb(132, 22, 35)); } if (s_freezedBrush == null) { s_freezedBrush = new SolidColorBrush(Color.FromRgb(36, 176, 185)); } for (int i = 0; i < nColumns; i++) { int col = columnOrder[i]; var item = new GridViewColumnWithId(); item.ColumnId = col; item.Header = headers[col]; item.Width = widths[col]; var dataTemplate = new DataTemplate(); dataTemplate.DataType = typeof(ItemVisualData); var block = new FrameworkElementFactory(typeof(TextBlock)); block.Name = "tb"; block.SetValue(TextBlock.TextProperty, new Binding(s_columnBindings[col])); // Opcode if (col == 4 || col == 5) { block.SetValue(TextBlock.FontFamilyProperty, new FontFamily("Lucida Console")); DataTrigger trigger; trigger = new DataTrigger(); trigger.Binding = new Binding(".VisualData.IsCustom"); trigger.Value = true; trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, s_customBrush, "tb")); dataTemplate.Triggers.Add(trigger); trigger = new DataTrigger(); trigger.Binding = new Binding(".VisualData.IsFreezed"); trigger.Value = true; trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, s_freezedBrush, "tb")); dataTemplate.Triggers.Add(trigger); trigger = new DataTrigger(); trigger.Binding = new Binding(".VisualData.IsUndefinedParser"); trigger.Value = true; trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Gray, "tb")); dataTemplate.Triggers.Add(trigger); } // Preview else if (col == 7) { var trigger = new DataTrigger(); trigger.Binding = new Binding(".VisualData.ParsingError"); trigger.Value = true; trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Red, "tb")); dataTemplate.Triggers.Add(trigger); } dataTemplate.VisualTree = block; item.CellTemplate = dataTemplate; view.Columns.Add(item); } }
public override void Load(NetworkLogViewerBase viewer) { if (m_viewer != null) throw new InvalidOperationException(); // Check opcode integrity { Console.WriteLine("Debug: Protocol '{0}' build {1} checking opcode integrity...", this.CodeName, Disassembly.ClientBuild); var fields = typeof(WowOpcodes).GetFields(BindingFlags.Static | BindingFlags.Public); var list = new SortedSet<uint>(); foreach (var field in fields) { var value = (uint)field.GetRawConstantValue(); if (value != SpecialOpcodes.UnknownOpcode) { if (!list.Contains(value)) list.Add(value); else Console.WriteLine("Error: Protocol '{1}' duplicate opcode value {0}", value, this.CodeName); } } Console.WriteLine( "Debug: Integrity check complete, {0}/{1} ({2:0.00}%) known unique opcode values.", list.Count, fields.Length, list.Count * 100.0 / fields.Length ); } m_viewer = viewer; viewer.ItemVisualDataQueried += m_itemVisualDataQueriedHandler; viewer.ItemParsingDone += m_itemParsingDoneHandler; var view = m_view = new GridView(); var nColumns = s_columnWidths.Length; var headers = new string[] { NetworkStrings.CH_Number, NetworkStrings.CH_Time, NetworkStrings.CH_Ticks, Strings.CH_ConnId, NetworkStrings.CH_C2S, NetworkStrings.CH_S2C, NetworkStrings.CH_Length, Strings.CH_Preview, }; if (headers.Length != nColumns) throw new InvalidOperationException(); double[] widths = Configuration.GetValue("Column Widths", (double[])null); if (widths == null || widths.Length != nColumns) widths = s_columnWidths; int[] columnOrder = Configuration.GetValue("Column Order", (int[])null); if (columnOrder == null || columnOrder.Length != nColumns || columnOrder.Any(val => val >= nColumns || val < 0)) columnOrder = Enumerable.Range(0, nColumns).ToArray(); if (s_customBrush == null) s_customBrush = new SolidColorBrush(Color.FromRgb(132, 22, 35)); if (s_freezedBrush == null) s_freezedBrush = new SolidColorBrush(Color.FromRgb(36, 176, 185)); for (int i = 0; i < nColumns; i++) { int col = columnOrder[i]; var item = new GridViewColumnWithId(); item.ColumnId = col; item.Header = headers[col]; item.Width = widths[col]; var dataTemplate = new DataTemplate(); dataTemplate.DataType = typeof(ItemVisualData); var block = new FrameworkElementFactory(typeof(TextBlock)); block.Name = "tb"; block.SetValue(TextBlock.TextProperty, new Binding(s_columnBindings[col])); // Opcode if (col == 4 || col == 5) { block.SetValue(TextBlock.FontFamilyProperty, new FontFamily("Lucida Console")); DataTrigger trigger; trigger = new DataTrigger(); trigger.Binding = new Binding(".VisualData.IsCustom"); trigger.Value = true; trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, s_customBrush, "tb")); dataTemplate.Triggers.Add(trigger); trigger = new DataTrigger(); trigger.Binding = new Binding(".VisualData.IsFreezed"); trigger.Value = true; trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, s_freezedBrush, "tb")); dataTemplate.Triggers.Add(trigger); trigger = new DataTrigger(); trigger.Binding = new Binding(".VisualData.IsUndefinedParser"); trigger.Value = true; trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Gray, "tb")); dataTemplate.Triggers.Add(trigger); } // Preview else if (col == 7) { var trigger = new DataTrigger(); trigger.Binding = new Binding(".VisualData.ParsingError"); trigger.Value = true; trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Red, "tb")); dataTemplate.Triggers.Add(trigger); } dataTemplate.VisualTree = block; item.CellTemplate = dataTemplate; view.Columns.Add(item); } }