private void DisplayResult(ParseResult result)
        {
            if (result.Status != ParseResult.StatusCode.Found)
            {
                var content = new ParseMessageContent();

                switch (result.Status)
                {
                case ParseResult.StatusCode.InvalidInput:
                    content.Message = "Parser had Invalid Input.";
                    break;

                case ParseResult.StatusCode.ParseFailed:
                    content.Message = "Errors found while parsing.\nUpdate the Extension's options as needed for a succesful compilation.\nCheck the 'Struct Layout' output pane for more information.";
                    break;

                case ParseResult.StatusCode.NotFound:
                    content.Message = "No structure found at the given position.\nTry performing the query from a structure definition or initialization.";
                    break;
                }

                content.Log         = result.ParserLog;
                content.ShowOptions = result.Status == ParseResult.StatusCode.ParseFailed;

                CheckForSpecialResults(content);

                ParseMessageWindow.Display(content);
            }
        }
 public ParseMessageWindow(ParseMessageContent content)
 {
     Title = "Struct Layout";
     WindowStartupLocation = WindowStartupLocation.CenterScreen;
     SizeToContent         = SizeToContent.WidthAndHeight;
     ResizeMode            = ResizeMode.NoResize;
     this.Content          = new ParseMessageControl(this, content);
 }
        public ParseMessageControl(Window parentWindow, ParseMessageContent msgContent)
        {
            InitializeComponent();

            ParentWindow = parentWindow;
            MsgContent   = msgContent;
            ShowMessage();
            ShowLog();
            ShowOptionsButton();
            ShowDocumentationButton();
        }
 private void CheckForSpecialResults(ParseMessageContent content)
 {
     if (content.Log != null && content.Log.Length > 0)
     {
         //Special Issue Messages
         if (content.Log.Contains("error: use of overloaded operator '==' is ambiguous (with operand types 'const FName' and 'const FPrimaryAssetType')"))
         {
             content.Doc     = Documentation.Link.UnrealIssue_1;
             content.Message = "Errors found while parsing.\nThis is a known Unreal Engine issue.\nPress the Documentation Button for more details.";
         }
     }
 }
        static public void OpenFile(string filename, uint line, uint column)
        {
            ThreadHelper.ThrowIfNotOnUIThread();
            DTE2 applicationObject = ServiceProvider.GetService(typeof(SDTE)) as DTE2;

            Assumes.Present(applicationObject);

            Window   window = null;
            Document doc    = null;

            try
            {
                window = applicationObject.ItemOperations.OpenFile(filename.Replace('/', '\\'));
            }
            catch (Exception)
            {
                var content = new ParseMessageContent();
                content.Message = "Unable to open file " + filename;
                ParseMessageWindow.Display(content);
                return;
            }

            if (window == null)
            {
                //sometimes it opens but it does not give a window element ( check if opened already )
                Document activeDoc = GetActiveDocument();
                if (activeDoc != null && Path.GetFileName(activeDoc.FullName) == Path.GetFileName(filename))
                {
                    doc = activeDoc;
                }
            }
            else
            {
                window.Activate();
                doc = window.Document;
            }

            if (doc != null)
            {
                TextSelection sel = (TextSelection)doc.Selection;
                sel.MoveTo((int)line, (int)column);
            }
        }
        static public void Display(ParseMessageContent content)
        {
            var messageWin = new ParseMessageWindow(content);

            messageWin.ShowDialog();
        }