private void OpenScript(object parameter) { OpenFileDialog dialog = new OpenFileDialog() { Multiselect = false, InitialDirectory = ModuleCatalogPath, Filter = "Script files (.json)|*.json" }; var result = dialog.ShowDialog(); if (result != true) { return; } string filePath = dialog.FileName; string json = File.ReadAllText(filePath); if (string.IsNullOrWhiteSpace(json)) { return; } SyntaxTreeJsonSerializer _serializer = new SyntaxTreeJsonSerializer(); var knownTypes = _serializer.Binder.KnownTypes; foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.FullName.StartsWith("OneCSharp") && a.GetName().Name.EndsWith("Model"))) { foreach (Type type in assembly.GetTypes() .Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(SyntaxNode)))) { knownTypes.Add(type.FullName, type); } } if (knownTypes.Count == 0) { return; } SyntaxNode syntaxNode = _serializer.FromJson(json); CodeEditor editor = new CodeEditor() { DataContext = SyntaxTreeController.Current.CreateSyntaxNode(null, syntaxNode) }; Shell.AddTabItem("SCRIPT FROM FILE", editor); }
private void SaveScript(object parameter) { ConceptNodeViewModel concept = Shell.SelectedTabViewModel as ConceptNodeViewModel; if (concept == null) { MessageBox.Show("Script is not selected!", ONE_C_SHARP, MessageBoxButton.OK, MessageBoxImage.Information); return; } if (!(concept.SyntaxNode is ScriptConcept script)) { return; } SyntaxTreeJsonSerializer _serializer = new SyntaxTreeJsonSerializer(); var knownTypes = _serializer.Binder.KnownTypes; knownTypes.Add(typeof(ScriptConcept).FullName, typeof(ScriptConcept)); knownTypes.Add(typeof(LanguageConcept).FullName, typeof(LanguageConcept)); foreach (LanguageConcept language in script.Languages) { if (language.Assembly == null) { continue; } foreach (Type type in language.Assembly.GetTypes() .Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(SyntaxNode)))) { knownTypes.Add(type.FullName, type); } } if (knownTypes.Count == 0) { return; } string filePath = ScriptFilePath; string json = _serializer.ToJson(script); using (StreamWriter writer = File.CreateText(filePath)) { writer.Write(json); } MessageBox.Show("Script has been saved successfully!", ONE_C_SHARP, MessageBoxButton.OK, MessageBoxImage.Information); }