示例#1
0
        public WpfTextViewHandler(IWpfTextView textView)
        {
            _textView        = textView;
            _compilerService = CompilerService.Instance;

            textView.TextBuffer.Properties.TryGetProperty(typeof(ITextDocument), out _document);

            if (_document != null)
            {
                FilePath = _document.FilePath;

                var bufferChanged = Observable.FromEventPattern <TextContentChangedEventArgs>(s => _textView.TextBuffer.Changed += s,
                                                                                              s => _textView.TextBuffer.Changed -= s);

                var fileAction = Observable.FromEventPattern <TextDocumentFileActionEventArgs>(s => _document.FileActionOccurred += s,
                                                                                               s => _document.FileActionOccurred -= s);

                bufferChanged.Select(_ => false)
                .Merge(fileAction.Where(a => a.EventArgs.FileActionType == FileActionTypes.ContentSavedToDisk)
                       .Select(_ => true))
                .Subscribe(Recompile)
                .AddTo(_disposer);

                _compilerService.Listeners.AddListener(this);
                _compilerService.DocumentOpened(_document);
            }
            else
            {
                FilePath = "<unknown>";
            }

            var layer = _textView.GetAdornmentLayer("AdornmentLayer0");

            if (layer != null)
            {
                _layer0 = new AdornmentLayer0(_textView, layer);
            }

            textView.Closed += Closed;
        }