public MainViewModel(ScriptViewModel scriptViewModel, ShaderGenerator generator, UrhoContext context,
                             GraphValidator validator, ConfigurationRepository <AppConfiguration> config)
        {
            _backgroundScheduler = new EventLoopScheduler();
            _disposables.Add(_backgroundScheduler);
            _generator             = generator;
            _context               = context;
            _validator             = validator;
            _config                = config;
            NewCommand             = new ScriptingCommand(New);
            NewEmptyCommand        = new ScriptingCommand(NewEmpty);
            OpenCommand            = new ScriptingCommand(Open);
            MergeCommand           = new ScriptingCommand(Merge);
            SaveCommand            = new ScriptingCommand(Save);
            SaveAsCommand          = new ScriptingCommand(SaveAs);
            ExportCommand          = new ScriptingCommand(Export);
            OpenSceneCommand       = new ScriptingCommand <string>(OpenScene);
            OpenMDLCommand         = new ScriptingCommand <string>(OpenMDL);
            OpenAnimatedMDLCommand = new ScriptingCommand <string>(OpenAnimatedMDL);

            SetResourcePathCommand   = new ScriptingCommand(SetResourcePath);
            ExitCommand              = new ScriptingCommand(Exit);
            SetRenderPathCommand     = new ScriptingCommand <string>(SetRenderPath);
            SetShadowQualityCommand  = new ScriptingCommand <string>(SetShadowQuality);
            _rearrangeCommand        = new ScriptingCommand(() => ScriptViewModel.Rearrange());
            _centerGraphCommand      = new ScriptingCommand(() => ToCenter());
            SaveSelectedAsCommand    = new ScriptingCommand(SaveSelectedAs);
            RunScriptAnalizerCommand = new ScriptingCommand(RunScriptAnalizer);
            TestAllNodeTypesCommand  = new ScriptingCommand(TestAllNodeTypes);
            TestNodesCommand         = new ScriptingCommand(TestNodes);
            TestPerformanceCommand   = new ScriptingCommand(TestPerformance);
            ScriptViewModel          = scriptViewModel;

            _errors = new Subject <MaterialCompilationException>();
            _disposables.Add(_errors.ObserveOnDispatcher().Subscribe(HandleError));

            _preview = new Subject <PreviewData>();
            _disposables.Add(_preview.Throttle(TimeSpan.FromSeconds(0.1f)).ObserveOn(_backgroundScheduler)
                             .Subscribe(new Generator(this)));

            ScriptViewModel.ScriptChanged    += OnScriptViewModelOnScriptChanged;
            ScriptViewModel.SelectionChanged += OnScriptViewModelOnSelectionChanged;
            New();
        }