public LineEndingChoice(string fileName, LineEndingsChanger.LineEndings defaultLineEnding)
        {
            InitializeComponent();
            this.Title = fileName;

            switch (defaultLineEnding)
            {
                case LineEndingsChanger.LineEndings.Dominant:
                    this.Dominant_RadioButton.IsChecked = true;
                    break;
                case LineEndingsChanger.LineEndings.Linux:
                    this.Linux_RadioButton.IsChecked = true;
                    break;
                case LineEndingsChanger.LineEndings.Macintosh:
                    this.Macintosh_RadioButton.IsChecked = true;
                    break;
                case LineEndingsChanger.LineEndings.Windows:
                    this.Windows_RadioButton.IsChecked = true;
                    break;
                default:
                    break;
            }
        }
        private void UnifyLineEndingsInProjectItem(ProjectItem item, LineEndingsChanger.LineEndings lineEndings, ref int numberOfChanges, bool saveAllWasHit = false)
        {
            Window documentWindow = null;

            if (!item.IsOpen)
            {
                if (!saveAllWasHit || (saveAllWasHit && !this.OptionsPage.UnifyOnlyOpenFiles))
                {
                    documentWindow = item.Open();
                }
            }

            var document = item.Document;
            if (document != null)
            {
                var numberOfIndividualChanges = 0;
                var numberOfAllLineEndings = 0;

                var textDocument = document.Object("TextDocument") as TextDocument;
                UnifyLineEndingsInDocument(textDocument, lineEndings, ref numberOfChanges, out numberOfIndividualChanges, out numberOfAllLineEndings);
                if (this.OptionsPage.SaveFilesAfterUnifying)
                {
                    this.isUnifyingLocked = true;
                    document.Save();
                    this.isUnifyingLocked = false;
                }

                Output(string.Format("{0}: changed {1} out of {2} line endings\n", document.FullName, numberOfIndividualChanges, numberOfAllLineEndings));
            }

            if (documentWindow != null)
            {
                documentWindow.Close();
            }
        }
        private void UnifyLineEndingsInProjectItems(ProjectItems projectItems, LineEndingsChanger.LineEndings lineEndings, ref int numberOfChanges, bool saveAllWasHit = false)
        {
            var supportedFileFormats = this.SupportedFileFormats;
            var supportedFileNames = this.SupportedFileNames;

            foreach (ProjectItem item in projectItems)
            {
                if (item.ProjectItems != null && item.ProjectItems.Count > 0)
                {
                    UnifyLineEndingsInProjectItems(item.ProjectItems, lineEndings, ref numberOfChanges, saveAllWasHit);
                }
                else
                {
                    if (item.Name.EndsWithAny(supportedFileFormats) || item.Name.EqualsAny(supportedFileNames))
                    {
                        UnifyLineEndingsInProjectItem(item, lineEndings, ref numberOfChanges, saveAllWasHit);
                    }
                }
            }
        }
        private void UnifyLineEndingsInDocument(TextDocument textDocument, LineEndingsChanger.LineEndings lineEndings, ref int numberOfChanges, out int numberOfIndividualChanges, out int numberOfAllLineEndings)
        {
            var startPoint = textDocument.StartPoint.CreateEditPoint();
            var endPoint = textDocument.EndPoint.CreateEditPoint();

            var text = startPoint.GetText(endPoint.AbsoluteCharOffset);
            var changedText = LineEndingsChanger.ChangeLineEndings(text, lineEndings, ref numberOfChanges, out numberOfIndividualChanges, out numberOfAllLineEndings);
            startPoint.ReplaceText(text.Length, changedText, (int)vsEPReplaceTextOptions.vsEPReplaceTextKeepMarkers);
        }