private void contextCompilerMessage_Opening(object sender, CancelEventArgs e) { copyListToClipboardToolStripMenuItem.Enabled = (listMessages.Items.Count != 0); if (listMessages.SelectedItems.Count == 0) { ignoreWarningToolStripMenuItem.Enabled = false; jumpToFileToolStripMenuItem.Enabled = false; return; } jumpToFileToolStripMenuItem.Enabled = true; copyListToClipboardToolStripMenuItem.Enabled = true; bool hasWarnings = false; foreach (ListViewItem item in listMessages.SelectedItems) { Parser.ParserBase.ParseMessage message = (Parser.ParserBase.ParseMessage)item.Tag; if (message.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.WARNING) { hasWarnings = true; break; } } ignoreWarningToolStripMenuItem.Enabled = hasWarnings; }
private void JumpToFile(ListViewItem Item) { Parser.ParserBase.ParseMessage Message = (Parser.ParserBase.ParseMessage)Item.Tag; int lineNumber = -1; int.TryParse(Item.SubItems[1].Text, out lineNumber); string fileToJumpTo = Item.SubItems[3].Text; if (Message.AlternativeFile != null) { fileToJumpTo = Message.AlternativeFile; lineNumber = Message.AlternativeLineIndex + 1; } // double click override last shown message index int index = 0; foreach (var message in Core.Navigating.CompileMessages) { if (message.Value == Message) { Core.Navigating.LastShownMessageIndex = index; break; } ++index; } Core.Navigating.OpenDocumentAndGotoLine(m_ListProject, Core.Navigating.FindDocumentInfoByPath(fileToJumpTo), lineNumber - 1); }
private void ignoreWarningToolStripMenuItem_Click(object sender, EventArgs e) { foreach (ListViewItem item in listMessages.SelectedItems) { Parser.ParserBase.ParseMessage message = (Parser.ParserBase.ParseMessage)item.Tag; if (message.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.WARNING) { Core.Settings.IgnoredWarnings.Add(message.Code); } } }
public void UpdateFromMessages(Parser.ParserBase Parser, Project ParsedProject) { if (InvokeRequired) { Invoke(new UpdateFromMessagesCallback(UpdateFromMessages), new object[] { Parser, ParsedProject }); return; } m_ListProject = ParsedProject; ClearMessages(); listMessages.BeginUpdate(); SortOrder oldOrder = listMessages.Sorting; listMessages.Sorting = SortOrder.None; listMessages.ListViewItemSorter = null; foreach (var docInfo in Core.MainForm.DocumentInfos) { var compilableDoc = docInfo.CompilableDocument; compilableDoc?.RemoveAllErrorMarkings(); } foreach (System.Collections.Generic.KeyValuePair <int, Parser.ParserBase.ParseMessage> msg in Parser.Messages) { int lineIndex = msg.Key; Parser.ParserBase.ParseMessage message = msg.Value; var msgType = message.Type; if (Core.Settings.IgnoredWarnings.ContainsValue(message.Code)) { // ignore warning continue; } string documentFile = ""; int documentLine = -1; Parser.DocumentAndLineFromGlobalLine(lineIndex, out documentFile, out documentLine); if (message.AlternativeFile == null) { message.AlternativeFile = documentFile; message.AlternativeLineIndex = documentLine; } if (message.CharIndex != -1) { CompilableDocument compilableDoc = null; if (ParsedProject == null) { var sourceDocInfo = Core.MainForm.DetermineDocumentByFileName(documentFile); if (sourceDocInfo != null) { compilableDoc = sourceDocInfo.CompilableDocument; } } else { var sourceElement = ParsedProject.GetElementByFilename(documentFile); if (sourceElement != null) { if (sourceElement.Document != null) { compilableDoc = sourceElement.DocumentInfo.CompilableDocument; } } } compilableDoc?.MarkTextAsError(documentLine, message.CharIndex, message.Length); } ++documentLine; ListViewItem item = new ListViewItem(); if (msgType == C64Studio.Parser.ParserBase.ParseMessage.LineType.ERROR) { item.ImageIndex = 0; item.Text = "0"; } else if (msgType == C64Studio.Parser.ParserBase.ParseMessage.LineType.WARNING) { item.ImageIndex = 1; item.Text = "2"; } else if (msgType == C64Studio.Parser.ParserBase.ParseMessage.LineType.SEVERE_WARNING) { item.ImageIndex = 2; item.Text = "1"; } else { item.Text = "3"; } item.SubItems.Add(documentLine.ToString()); string messageCode = message.Code.ToString(); if (messageCode.Length >= 5) { item.SubItems.Add(messageCode.Substring(0, 5)); } else { item.SubItems.Add(messageCode); } if (documentFile != null) { item.SubItems.Add(documentFile.ToString()); } else { item.SubItems.Add("--"); } item.SubItems.Add(message.Message); item.Tag = message; listMessages.Items.Add(item); if (message.ChildMessages != null) { foreach (var childMessage in message.ChildMessages) { ListViewItem childItem = new ListViewItem(); if (childMessage.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.ERROR) { childItem.ImageIndex = 0; childItem.Text = "0"; } else if (childMessage.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.WARNING) { childItem.ImageIndex = 1; childItem.Text = "2"; } else if (childMessage.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.SEVERE_WARNING) { childItem.ImageIndex = 2; childItem.Text = "1"; } else { childItem.Text = "3"; } childItem.SubItems.Add(documentLine.ToString()); if (childMessage.Code.ToString().Length >= 5) { childItem.SubItems.Add(childMessage.Code.ToString().Substring(0, 5)); } else { childItem.SubItems.Add(childMessage.Code.ToString()); } childItem.SubItems.Add(documentFile.ToString()); childItem.SubItems.Add(childMessage.Message); childItem.Tag = childMessage; listMessages.Items.Add(childItem); } } } listMessages.Sorting = oldOrder; listMessages.ListViewItemSorter = new CompileResultItemComparer(listMessagesSortColumn, listMessages.Sorting); listMessages.EndUpdate(); }
public void UpdateFromMessages(Parser.ParserBase Parser, Project ParsedProject) { if (InvokeRequired) { Invoke(new UpdateFromMessagesCallback(UpdateFromMessages), new object[] { Parser, ParsedProject }); return; } m_ListProject = ParsedProject; ClearMessages(); listMessages.BeginUpdate(); SortOrder oldOrder = listMessages.Sorting; listMessages.Sorting = SortOrder.None; listMessages.ListViewItemSorter = null; foreach (var docInfos in Core.MainForm.DocumentInfos) { if ((docInfos.Type == ProjectElement.ElementType.ASM_SOURCE) && (docInfos.BaseDoc != null)) { SourceASMEx source = (SourceASMEx)docInfos.BaseDoc; source.RemoveAllErrorMarkings(); } } foreach (System.Collections.Generic.KeyValuePair <int, Parser.ParserBase.ParseMessage> msg in Parser.Messages) { int lineIndex = msg.Key; Parser.ParserBase.ParseMessage message = msg.Value; /* * if ( message.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.MESSAGE ) * { * continue; * }*/ if (Core.Settings.IgnoredWarnings.ContainsValue(message.Code)) { // ignore warning continue; } string documentFile = ""; int documentLine = -1; //Debug.Log( "a" ); Parser.DocumentAndLineFromGlobalLine(lineIndex, out documentFile, out documentLine); //Debug.Log( "b" ); if (message.AlternativeFile == null) { message.AlternativeFile = documentFile; message.AlternativeLineIndex = documentLine; } if (message.CharIndex != -1) { if (ParsedProject == null) { var sourceDocInfo = Core.MainForm.DetermineDocumentByFileName(documentFile); if ((sourceDocInfo != null) && (sourceDocInfo.BaseDoc != null) && (sourceDocInfo.Type == ProjectElement.ElementType.ASM_SOURCE)) { var sourceFile = (SourceASMEx)sourceDocInfo.BaseDoc; if (sourceFile != null) { sourceFile.MarkTextAsError(documentLine, message.CharIndex, message.Length); } } } else { var sourceElement = ParsedProject.GetElementByFilename(documentFile); if (sourceElement != null) { var sourceFile = (SourceASMEx)sourceElement.Document; if (sourceFile != null) { sourceFile.MarkTextAsError(documentLine, message.CharIndex, message.Length); } else { // TODO - have no document to mark? } } else { // TODO - have no document to mark? } } } //dh.Log( "Error in " + lineIndex ); ++documentLine; ListViewItem item = new ListViewItem(); if (message.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.ERROR) { item.ImageIndex = 0; item.Text = "0"; } else if (message.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.WARNING) { item.ImageIndex = 1; item.Text = "2"; } else if (message.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.SEVERE_WARNING) { item.ImageIndex = 2; item.Text = "1"; } else { item.Text = "3"; } item.SubItems.Add(documentLine.ToString()); string messageCode = message.Code.ToString(); if (messageCode.Length >= 5) { item.SubItems.Add(messageCode.Substring(0, 5)); } else { item.SubItems.Add(messageCode); } if (documentFile != null) { item.SubItems.Add(documentFile.ToString()); } else { item.SubItems.Add("--"); } item.SubItems.Add(message.Message); item.Tag = message; //Debug.Log( "c" ); listMessages.Items.Add(item); //Debug.Log( "d" ); if (message.ChildMessages != null) { foreach (var childMessage in message.ChildMessages) { ListViewItem childItem = new ListViewItem(); if (childMessage.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.ERROR) { childItem.ImageIndex = 0; childItem.Text = "0"; } else if (childMessage.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.WARNING) { childItem.ImageIndex = 1; childItem.Text = "2"; } else if (childMessage.Type == C64Studio.Parser.ParserBase.ParseMessage.LineType.SEVERE_WARNING) { childItem.ImageIndex = 2; childItem.Text = "1"; } else { childItem.Text = "3"; } childItem.SubItems.Add(documentLine.ToString()); childItem.SubItems.Add(childMessage.Code.ToString().Substring(0, 5)); childItem.SubItems.Add(documentFile.ToString()); childItem.SubItems.Add(childMessage.Message); childItem.Tag = childMessage; //Debug.Log( "c" ); listMessages.Items.Add(childItem); } } } //Debug.Log( "e" ); listMessages.Sorting = oldOrder; listMessages.ListViewItemSorter = new CompileResultItemComparer(listMessagesSortColumn, listMessages.Sorting); //listMessages.Sort(); //Debug.Log( "f" ); listMessages.EndUpdate(); }
public int Compare(object x, object y) { Parser.ParserBase.ParseMessage msg1 = (Parser.ParserBase.ParseMessage)(((ListViewItem)x).Tag); Parser.ParserBase.ParseMessage msg2 = (Parser.ParserBase.ParseMessage)(((ListViewItem)y).Tag); int returnVal = -1; if (msg1 == null) { if (msg2 == null) { returnVal = 0; } returnVal = 1; } else if (msg2 == null) { returnVal = -1; } // prio trumps col content if (msg2.ParentMessage == msg1) { return(-1); } else if (msg1.ParentMessage == msg2) { return(1); } // sort by parent if (msg1.ParentMessage != null) { msg1 = msg1.ParentMessage; } if (msg2.ParentMessage != null) { msg2 = msg2.ParentMessage; } // cols are type, line, code, file, message // sort by cols now if (col == 0) { // Type returnVal = IntCompare((int)msg1.Type, (int)msg2.Type); } else if (col == 1) { // line returnVal = IntCompare((int)msg1.AlternativeLineIndex, (int)msg2.AlternativeLineIndex); } else if (col == 2) { // code returnVal = IntCompare((int)msg1.Code, (int)msg2.Code); } else if (col == 3) { // file returnVal = string.Compare(msg1.AlternativeFile, msg2.AlternativeFile); } else if (col == 4) { // message returnVal = string.Compare(msg1.Message, msg2.Message); } // Determine whether the sort order is descending. if (order == SortOrder.Descending) { // Invert the value returned by String.Compare. returnVal *= -1; } return(returnVal); }