/// <summary>
 /// コンストラクタ
 /// </summary>
 public MainWindowViewModel()
 {
     server = new Server(false, false, SendData);
     _      = ClosedCommand.Subscribe(Close).AddTo(Disposable);
     _      = OpenCommand.Subscribe(tcpOpne).AddTo(Disposable);
     _      = CloseCommand.Subscribe(tcpClose).AddTo(Disposable);
 }
        public MainPageViewModel(INavigationService navigationService)
            : base(navigationService)
        {
            //ViweModel→Model
            this.ServerSwitch = ReactiveProperty.FromObject(socket, x => x.IsServer).AddTo(this.Disposable);
            this.IpAddress    = ReactiveProperty.FromObject(socket, x => x.IpAddress).AddTo(this.Disposable);
            this.Port         = ReactiveProperty.FromObject(socket, x => x.Port).AddTo(this.Disposable);
            //ViewModel←Model
            this.SettingIsEnabled = socket.ObserveProperty(x => x.IsOpen).Select(x => !x).ToReactiveProperty().AddTo(this.Disposable);
            this.CloseCommand     = socket.ObserveProperty(x => x.IsOpen).ToReactiveCommand().AddTo(this.Disposable);
            this.OpenCommand      = socket.ObserveProperty(x => x.IsOpen).Select(x => !x).ToReactiveCommand().AddTo(this.Disposable);
            this.SendCommand      = socket.ObserveProperty(x => x.IsOpen).ToReactiveCommand().AddTo(this.Disposable);
            this.ActionView       = socket.ActionInfo.ToReadOnlyReactiveCollection().AddTo(this.Disposable);
            //ViewModel=Model
            this.SendData = socket.ToReactivePropertyAsSynchronized(x => x.SendData).AddTo(this.Disposable);

            //ViweModel内
            this.ServerSwitchInfo          = this.ServerSwitch.Select(x => x ? "サーバー" : "クライアント").ToReactiveProperty().AddTo(this.Disposable);
            this.IPAddressSettingIsEnabled = this.SettingIsEnabled.CombineLatest(this.ServerSwitch, (x, y) => x && !y) //クライアント且つCLOSE時のみIPアドレスは入力編集が可能
                                             .ToReactiveProperty().AddTo(this.Disposable);

            //ボタン
            OpenCommand.Subscribe(_ => socket.Open());
            CloseCommand.Subscribe(_ => socket.Close());
            SendCommand.Subscribe(_ => socket.Send());
        }
示例#3
0
        public EditingViewModel(Pack selectedPack, PhraseItem phraseItem, string author, ObservableAsPropertyHelper <ReactiveList <PhraseItem> > phrases)
        {
            _selectedPack = selectedPack;
            _author       = author;
            _phrases      = phrases;
            _oldPhrase    = phraseItem;
            _isEditing    = phraseItem != null;
            if (_isEditing)
            {
                Phrase      = phraseItem.Phrase;
                Complexity  = (int)phraseItem.Complexity;
                Description = phraseItem.Description;
            }

            SaveCommand = ReactiveCommand.Create();
            SaveCommand.Subscribe(_ =>
            {
                if (!Save(out string message))
                {
                    ShowError(message);
                }
                else
                {
                    Close?.Invoke();
                }
            });

            CloseCommand = ReactiveCommand.Create();
            CloseCommand.Subscribe(_ =>
            {
                Close?.Invoke();
            });
        }
        public PopUp(bool isPopup, bool isPage)
        {
            InitializeComponent();

            CloseCommand.Subscribe(() => PopupNavigation.PopAsync());
            BackCommand.Subscribe(() => App.Current.MainPage = new MainPage());
            Items.Value        = new string[] { "001 -- ika", "002 -- tako", "003 -- wakame" };
            this.IsPopup.Value = isPopup;
            this.IsPage.Value  = isPage;
        }
        public DocumentTabViewModel(T model) : base(model)
        {
            CloseCommand = ReactiveCommand.Create();

            CloseCommand.Subscribe((o) =>
            {
                IoC.Get <IShell>().RemoveDocument(this);
            });

            IsVisible = true;
        }
示例#6
0
        public OldToolViewModel(string contentId, string name) : base(contentId)
        {
            Name      = name;
            ToolTitle = name;

            CloseCommand = ReactiveCommand.Create();
            CloseCommand.Subscribe(o =>
            {
                // Workspace.Instance.Tools.Remove (this);
            });
        }
示例#7
0
        public ProjectConfigurationDialogViewModel(IProject project, Action onClose)
        {
            Title = project.Name;

            ConfigPages = new List <object>();
            ConfigPages.AddRange(project.ConfigurationPages);

            CloseCommand.Subscribe(_ =>
            {
                onClose();
            });
        }
        public ChildPageViewModel(INavigationService navigation)
        {
            _navigationService = navigation;

            MsgText.Value = "ChildPage";

            CloseCommand.Subscribe(_ => OnCloseCommandAsync());
            NextPageCommand.Subscribe(_ => OnNextPageCommandAsync());

            TitleText1.Value = "たいとる1";
            TitleText2.Value = "たいとる2";
            TitleText3.Value = "たいとる3";
        }
示例#9
0
        public EditorViewModel()
        {
            InstanceCount++;
            ShellViewModel.Instance.InstanceCount = InstanceCount;
            text = "This is some text.";

            CloseCommand = ReactiveCommand.Create();

            CloseCommand.Subscribe(_ =>
            {
                ShellViewModel.Instance.Documents.Remove(this);
            });
        }
示例#10
0
        public EditorViewModel()
        {
            disposables = new CompositeDisposable();

            disposables.Add(CloseCommand.Subscribe(_ =>
            {
                IoC.Get <IShell>().InvalidateErrors();
            }));

            AddWatchCommand = ReactiveCommand.Create();
            disposables.Add(AddWatchCommand.Subscribe(_ => { IoC.Get <IWatchList>()?.AddWatch(_editor?.GetWordAtOffset(_editor.CaretOffset)); }));

            Dock = Dock.Right;
        }
示例#11
0
        public EditorViewModel()
        {
            _shell = IoC.Get <ShellViewModel>();

            disposables = new CompositeDisposable
            {
                CloseCommand.Subscribe(_ =>
                {
                    _shell.InvalidateErrors();
                })
            };

            AddWatchCommand = ReactiveCommand.Create();
            disposables.Add(AddWatchCommand.Subscribe(_ => { IoC.Get <IWatchList>()?.AddWatch(_editor?.GetWordAtOffset(_editor.CaretOffset)); }));

            Dock = Dock.Right;

            _fontSize = 14;
            ZoomLevel = _shell.GlobalZoomLevel;
        }
示例#12
0
        public EditorViewModel(EditorModel model) : base(model)
        {
            disposables      = new CompositeDisposable();
            highlightingData = new ObservableCollection <OffsetSyntaxHighlightingData>();

            BeforeTextChangedCommand = ReactiveCommand.Create();
            disposables.Add(BeforeTextChangedCommand.Subscribe(model.OnBeforeTextChanged));

            TextChangedCommand = ReactiveCommand.Create();
            disposables.Add(TextChangedCommand.Subscribe(model.OnTextChanged));

            SaveCommand = ReactiveCommand.Create();
            disposables.Add(SaveCommand.Subscribe(param => Save()));

            disposables.Add(CloseCommand.Subscribe(_ =>
            {
                Model.ProjectFile.FileModifiedExternally -= ProjectFile_FileModifiedExternally;
                Model.Editor.CaretChangedByPointerClick  -= Editor_CaretChangedByPointerClick;
                Save();
                Model.ShutdownBackgroundWorkers();
                Model.UnRegisterLanguageService();

                intellisenseManager?.Dispose();
                intellisenseManager = null;

                Diagnostics?.Clear();

                ShellViewModel.Instance.InvalidateErrors();

                Model.Dispose();
                Intellisense.Dispose();
                disposables.Dispose();

                Model.TextDocument = null;
            }));

            AddWatchCommand = ReactiveCommand.Create();
            disposables.Add(AddWatchCommand.Subscribe(_ => { IoC.Get <IWatchList>()?.AddWatch(WordAtCaret); }));

            tabCharacter = "    ";

            model.DocumentLoaded += (sender, e) =>
            {
                model.ProjectFile.FileModifiedExternally -= ProjectFile_FileModifiedExternally;
                Model.Editor.CaretChangedByPointerClick  -= Editor_CaretChangedByPointerClick;

                foreach (var bgRenderer in languageServiceBackgroundRenderers)
                {
                    BackgroundRenderers.Remove(bgRenderer);
                }

                languageServiceBackgroundRenderers.Clear();

                foreach (var transformer in languageServiceDocumentLineTransformers)
                {
                    DocumentLineTransformers.Remove(transformer);
                }

                languageServiceDocumentLineTransformers.Clear();

                if (model.LanguageService != null)
                {
                    languageServiceBackgroundRenderers.AddRange(model.LanguageService.GetBackgroundRenderers(model.ProjectFile));

                    foreach (var bgRenderer in languageServiceBackgroundRenderers)
                    {
                        BackgroundRenderers.Add(bgRenderer);
                    }

                    languageServiceDocumentLineTransformers.AddRange(
                        model.LanguageService.GetDocumentLineTransformers(model.ProjectFile));

                    foreach (var textTransformer in languageServiceDocumentLineTransformers)
                    {
                        DocumentLineTransformers.Add(textTransformer);
                    }

                    intellisenseManager = new IntellisenseManager(Model.Editor, Intellisense, Intellisense.CompletionAssistant, model.LanguageService, model.ProjectFile);

                    EventHandler <KeyEventArgs> tunneledKeyUpHandler = (send, ee) =>
                    {
                        if (caretIndex > 0)
                        {
                            intellisenseManager.OnKeyUp(ee, CaretIndex, CaretTextLocation.Line, CaretTextLocation.Column);
                        }
                    };

                    EventHandler <KeyEventArgs> tunneledKeyDownHandler = (send, ee) =>
                    {
                        if (caretIndex > 0)
                        {
                            intellisenseManager.OnKeyDown(ee, CaretIndex, CaretTextLocation.Line, CaretTextLocation.Column);
                        }
                    };

                    EventHandler <TextInputEventArgs> tunneledTextInputHandler = (send, ee) =>
                    {
                        if (caretIndex > 0)
                        {
                            intellisenseManager.OnTextInput(ee, CaretIndex, CaretTextLocation.Line, CaretTextLocation.Column);
                        }
                    };

                    Model.Editor.CaretChangedByPointerClick += Editor_CaretChangedByPointerClick;

                    disposables.Add(Model.Editor.AddHandler(InputElement.KeyDownEvent, tunneledKeyDownHandler, RoutingStrategies.Tunnel));
                    disposables.Add(Model.Editor.AddHandler(InputElement.KeyUpEvent, tunneledKeyUpHandler, RoutingStrategies.Tunnel));
                    disposables.Add(Model.Editor.AddHandler(InputElement.TextInputEvent, tunneledTextInputHandler, RoutingStrategies.Bubble));
                }

                model.CodeAnalysisCompleted += (s, ee) =>
                {
                    Diagnostics = model.CodeAnalysisResults.Diagnostics;

                    HighlightingData =
                        new ObservableCollection <OffsetSyntaxHighlightingData>(model.CodeAnalysisResults.SyntaxHighlightingData);

                    IndexItems         = new ObservableCollection <IndexEntry>(model.CodeAnalysisResults.IndexItems);
                    selectedIndexEntry = IndexItems.FirstOrDefault();
                    this.RaisePropertyChanged(nameof(SelectedIndexEntry));

                    ShellViewModel.Instance.InvalidateErrors();
                };

                model.ProjectFile.FileModifiedExternally += ProjectFile_FileModifiedExternally;

                TextDocument = model.TextDocument;

                Title = Model.ProjectFile.Name;
            };

            model.TextChanged += (sender, e) =>
            {
                if (ShellViewModel.Instance.DocumentTabs.TemporaryDocument == this)
                {
                    Dock = Dock.Left;

                    ShellViewModel.Instance.DocumentTabs.TemporaryDocument = null;
                }

                IsDirty = model.IsDirty;
            };

            intellisense = new IntellisenseViewModel(model, this);

            documentLineTransformers = new ObservableCollection <IDocumentLineTransformer>();

            backgroundRenderers = new ObservableCollection <IBackgroundRenderer>();
            backgroundRenderers.Add(new SelectedLineBackgroundRenderer());

            DebugLineHighlighter = new SelectedDebugLineBackgroundRenderer();
            backgroundRenderers.Add(DebugLineHighlighter);

            backgroundRenderers.Add(new ColumnLimitBackgroundRenderer());
            wordAtCaretHighlighter = new SelectedWordBackgroundRenderer();
            backgroundRenderers.Add(wordAtCaretHighlighter);
            backgroundRenderers.Add(new SelectionBackgroundRenderer());

            margins = new ObservableCollection <TextViewMargin>();

            Dock = Dock.Right;
        }
示例#13
0
        // コンストラクタ
        public MainViewModel()
        {
            // picフォルダが存在しない場合は作成する
            if (!Directory.Exists(@"pic\"))
            {
                Directory.CreateDirectory(@"pic\");
            }
            // debugフォルダが存在しない場合は作成する
            if (!Directory.Exists(@"debug\"))
            {
                Directory.CreateDirectory(@"debug\");
            }
            // 設定項目を初期化する
            if (!SettingsStore.Initialize())
            {
                MessageBox.Show("設定を読み込めませんでした。\nデフォルトの設定で起動します。", Utility.SoftwareName, MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
            // 資材データベースを初期化する
            SupplyStore.Initialize();
            // 設定内容を画面に反映する
            SetSettings();

            // プロパティを設定
            ForTwitterFlg.Subscribe(x => { SettingsStore.ForTwitterFlg = x; });
            MainWindowPositionLeft.Subscribe(x => {
                SettingsStore.MainWindowRect[0] = x;
                SettingsStore.ChangeSettingFlg  = true;
            });
            MainWindowPositionTop.Subscribe(x => {
                SettingsStore.MainWindowRect[1] = x;
                SettingsStore.ChangeSettingFlg  = true;
            });
            MainWindowPositionWidth.Subscribe(x => {
                SettingsStore.MainWindowRect[2] = x;
                SettingsStore.ChangeSettingFlg  = true;
            });
            MainWindowPositionHeight.Subscribe(x => {
                SettingsStore.MainWindowRect[3] = x;
                SettingsStore.ChangeSettingFlg  = true;
            });
            MemoryWindowPositionFlg.Subscribe(x => { SettingsStore.MemoryWindowPositionFlg = x; });
            AutoSearchPositionFlg.Subscribe(x => { SettingsStore.AutoSearchPositionFlg = x; });
            AutoSupplyScreenShotFlg.Subscribe(x => { SettingsStore.AutoSupplyScreenShotFlg = x; });
            PutCharacterRecognitionFlg.Subscribe(x => { SettingsStore.PutCharacterRecognitionFlg = x; });
            DragAndDropPictureFlg.Subscribe(x => { SettingsStore.DragAndDropPictureFlg = x; });

            // コマンドを設定
            GetGameWindowPositionCommand.Subscribe(_ => GetGameWindowPosition());
            SaveScreenshotCommand.Subscribe(_ => {
                try {
                    string fileName = $"{Utility.GetTimeStrLong()}.png";
                    ScreenShotProvider.GetScreenshot(ForTwitterFlg.Value).Save($"pic\\{fileName}");
                    PutLog($"スクリーンショット : 成功");
                    PutLog($"ファイル名 : {fileName}");
                } catch (Exception) {
                    PutLog($"スクリーンショット : 失敗");
                }
            });
            CloseCommand.Subscribe(_ => {
                CloseWindow.Value = true;
            });
            SoftwareInfoCommand.Subscribe(_ => {
                // ソフトの情報を返す
                // 参考→http://dobon.net/vb/dotnet/file/myversioninfo.html
                var assembly = Assembly.GetExecutingAssembly();
                // AssemblyTitle
                string asmttl = ((AssemblyTitleAttribute)
                                 Attribute.GetCustomAttribute(assembly,
                                                              typeof(AssemblyTitleAttribute))).Title;
                // AssemblyCopyright
                string asmcpy = ((AssemblyCopyrightAttribute)
                                 Attribute.GetCustomAttribute(assembly,
                                                              typeof(AssemblyCopyrightAttribute))).Copyright;
                // AssemblyProduct
                string asmprd = ((AssemblyProductAttribute)
                                 Attribute.GetCustomAttribute(assembly,
                                                              typeof(AssemblyProductAttribute))).Product;
                // AssemblyVersion
                var asmver = assembly.GetName().Version;
                MessageBox.Show(
                    $"{asmttl} Ver.{asmver}\n{asmcpy}\n{asmprd}",
                    Utility.SoftwareName,
                    MessageBoxButton.OK,
                    MessageBoxImage.Information);
            });
            ImportSettingsCommand.Subscribe(_ => {
                // インスタンスを作成
                var ofd = new OpenFileDialog {
                    // ファイルの種類を設定
                    Filter = "設定ファイル(*.json)|*.json|全てのファイル (*.*)|*.*"
                };
                // ダイアログを表示
                if ((bool)ofd.ShowDialog())
                {
                    // 設定をインポート
                    if (!SettingsStore.LoadSettings(ofd.FileName))
                    {
                        PutLog("エラー:設定を読み込めませんでした");
                    }
                    else
                    {
                        PutLog("設定を読み込みました");
                    }
                    SetSettings();
                }
            });
            ExportSettingsCommand.Subscribe(_ => {
                // インスタンスを作成
                var sfd = new SaveFileDialog {
                    // ファイルの種類を設定
                    Filter = "設定ファイル(*.json)|*.json|全てのファイル (*.*)|*.*"
                };
                // ダイアログを表示
                if ((bool)sfd.ShowDialog())
                {
                    // 設定をエクスポート
                    if (!SettingsStore.SaveSettings(sfd.FileName))
                    {
                        PutLog("エラー:設定を保存できませんでした");
                    }
                    else
                    {
                        PutLog("設定を保存しました");
                    }
                }
            });
            OpenPicFolderCommand.Subscribe(_ => System.Diagnostics.Process.Start(@"pic\"));
            OpenSupplyViewCommand.Subscribe(_ => {
                if (SettingsStore.ShowSupplyWindowFlg)
                {
                    return;
                }
                var vm   = new SupplyViewModel();
                var view = new Views.SupplyView {
                    DataContext = vm
                };
                view.Show();
                SettingsStore.ShowSupplyWindowFlg = true;
            }).AddTo(Disposable);
            OpenTimerViewCommand.Subscribe(_ => {
                if (SettingsStore.ShowTimerWindowFlg)
                {
                    return;
                }
                var vm   = new TimerViewModel();
                var view = new Views.TimerView {
                    DataContext = vm
                };
                view.Show();
                SettingsStore.ShowTimerWindowFlg = true;
            }).AddTo(Disposable);
            ImportMainSupplyCommand.Subscribe(async _ => {
                // 資材のインポート機能(燃料・資金・ダイヤ)
                // インスタンスを作成
                var ofd = new OpenFileDialog {
                    // ファイルの種類を設定
                    Filter   = "設定ファイル(*.csv)|*.csv|全てのファイル (*.*)|*.*",
                    FileName = "MainSupply.csv"
                };
                // ダイアログを表示
                if ((bool)ofd.ShowDialog())
                {
                    // 資材をインポート
                    PutLog("資材データを読み込み開始...");
                    if (await SupplyStore.ImportOldMainSupplyDataAsync(ofd.FileName))
                    {
                        PutLog("資材データを読み込みました");
                    }
                    else
                    {
                        PutLog("エラー:資材データを読み込めませんでした");
                    }
                }
            });
            ImportSubSupply1Command.Subscribe(async _ => await ImportSubSupplyAsync(0));
            ImportSubSupply2Command.Subscribe(async _ => await ImportSubSupplyAsync(1));
            ImportSubSupply3Command.Subscribe(async _ => await ImportSubSupplyAsync(2));
            ImportSubSupply4Command.Subscribe(async _ => await ImportSubSupplyAsync(3));

            // タイマーを初期化し、定時タスクを登録して実行する
            // http://takachan.hatenablog.com/entry/2017/09/09/225342
            var timer = new Timer(200);

            timer.Elapsed += (sender, e) => {
                try{
                    timer.Stop();
                    HelperTaskF();
                }
                finally{ timer.Start(); }
            };
            timer.Start();
            var timer2 = new Timer(1000);

            timer2.Elapsed += (sender, e) => {
                try {
                    timer2.Stop();
                    HelperTaskS();
                }
                finally { timer2.Start(); }
            };
            timer2.Start();

            // ウィンドウ表示関係
            if (SettingsStore.AutoSupplyWindowFlg)
            {
                OpenSupplyViewCommand.Execute();
            }
            if (SettingsStore.AutoTimerWindowFlg)
            {
                OpenTimerViewCommand.Execute();
            }

            // 最新版をチェックする
            CheckSoftwareVer();
        }
示例#14
0
        public EditorViewModel(EditorModel model) : base(model)
        {
            disposables      = new CompositeDisposable();
            highlightingData = new ObservableCollection <OffsetSyntaxHighlightingData>();

            BeforeTextChangedCommand = ReactiveCommand.Create();
            disposables.Add(BeforeTextChangedCommand.Subscribe(model.OnBeforeTextChanged));

            TextChangedCommand = ReactiveCommand.Create();
            disposables.Add(TextChangedCommand.Subscribe(model.OnTextChanged));

            SaveCommand = ReactiveCommand.Create();
            disposables.Add(SaveCommand.Subscribe(param => Save()));

            CloseCommand = ReactiveCommand.Create();

            disposables.Add(CloseCommand.Subscribe(_ =>
            {
                Model.ProjectFile.FileModifiedExternally -= ProjectFile_FileModifiedExternally;
                Save();
                Model.ShutdownBackgroundWorkers();
                Model.UnRegisterLanguageService();

                if (ShellViewModel.Instance.DocumentTabs.TemporaryDocument == this)
                {
                    ShellViewModel.Instance.DocumentTabs.TemporaryDocument = null;
                }

                ShellViewModel.Instance.InvalidateErrors();

                Model.Dispose();
                Intellisense.Dispose();
                disposables.Dispose();

                Model.TextDocument = null;
                ShellViewModel.Instance.DocumentTabs.Documents.Remove(this);
            }));

            AddWatchCommand = ReactiveCommand.Create();
            disposables.Add(AddWatchCommand.Subscribe(_ => { IoC.Get <IWatchList>()?.AddWatch(WordAtCaret); }));

            tabCharacter = "    ";

            model.DocumentLoaded += (sender, e) =>
            {
                model.ProjectFile.FileModifiedExternally -= ProjectFile_FileModifiedExternally;

                foreach (var bgRenderer in languageServiceBackgroundRenderers)
                {
                    BackgroundRenderers.Remove(bgRenderer);
                }

                languageServiceBackgroundRenderers.Clear();

                foreach (var transformer in languageServiceDocumentLineTransformers)
                {
                    DocumentLineTransformers.Remove(transformer);
                }

                languageServiceDocumentLineTransformers.Clear();

                if (model.LanguageService != null)
                {
                    languageServiceBackgroundRenderers.AddRange(model.LanguageService.GetBackgroundRenderers(model.ProjectFile));

                    foreach (var bgRenderer in languageServiceBackgroundRenderers)
                    {
                        BackgroundRenderers.Add(bgRenderer);
                    }

                    languageServiceDocumentLineTransformers.AddRange(
                        model.LanguageService.GetDocumentLineTransformers(model.ProjectFile));

                    foreach (var textTransformer in languageServiceDocumentLineTransformers)
                    {
                        DocumentLineTransformers.Add(textTransformer);
                    }
                }

                model.CodeAnalysisCompleted += (s, ee) =>
                {
                    Diagnostics = model.CodeAnalysisResults.Diagnostics;

                    foreach (var marker in Diagnostics)
                    {
                        if (marker.Length == 0)
                        {
                            var line      = TextDocument.GetLineByOffset(marker.StartOffset);
                            var endoffset = TextUtilities.GetNextCaretPosition(TextDocument, marker.StartOffset,
                                                                               TextUtilities.LogicalDirection.Forward, TextUtilities.CaretPositioningMode.WordBorderOrSymbol);

                            if (endoffset == -1)
                            {
                                marker.Length = line.Length;
                            }
                            else
                            {
                                marker.EndOffset = endoffset;
                            }
                        }
                    }

                    HighlightingData =
                        new ObservableCollection <OffsetSyntaxHighlightingData>(model.CodeAnalysisResults.SyntaxHighlightingData);

                    IndexItems         = new ObservableCollection <IndexEntry>(model.CodeAnalysisResults.IndexItems);
                    selectedIndexEntry = IndexItems.FirstOrDefault();
                    this.RaisePropertyChanged(nameof(SelectedIndexEntry));

                    ShellViewModel.Instance.InvalidateErrors();
                };

                model.ProjectFile.FileModifiedExternally += ProjectFile_FileModifiedExternally;
                TextDocument = model.TextDocument;
                this.RaisePropertyChanged(nameof(Title));
            };

            model.TextChanged += (sender, e) =>
            {
                if (ShellViewModel.Instance.DocumentTabs.TemporaryDocument == this)
                {
                    Dock = Dock.Left;

                    ShellViewModel.Instance.DocumentTabs.TemporaryDocument = null;
                }

                this.RaisePropertyChanged(nameof(Title));
            };

            intellisense = new IntellisenseViewModel(model, this);

            documentLineTransformers = new ObservableCollection <IDocumentLineTransformer>();

            backgroundRenderers = new ObservableCollection <IBackgroundRenderer>();
            backgroundRenderers.Add(new SelectedLineBackgroundRenderer());

            DebugLineHighlighter = new SelectedDebugLineBackgroundRenderer();
            backgroundRenderers.Add(DebugLineHighlighter);

            backgroundRenderers.Add(new ColumnLimitBackgroundRenderer());
            wordAtCaretHighlighter = new SelectedWordBackgroundRenderer();
            backgroundRenderers.Add(wordAtCaretHighlighter);
            backgroundRenderers.Add(new SelectionBackgroundRenderer());

            margins = new ObservableCollection <TextViewMargin>();

            dock = Dock.Right;
        }