private void FindPages(DialogPage page, List <DialogPage> pages) { pages.Add(page); foreach (var option in page.Options) { if (option.Target != null) { FindPages(option.Target, pages); } } }
private void Button_Click_3(object sender, RoutedEventArgs e) { DialogOption option = (DialogOption)DataContext; if (!option.Enabled) { return; } RebindWindow rebind = new RebindWindow(); var lstbox = rebind.DialogList; DialogPage parent = null; DialogLabel label = (DialogLabel)option; while (label.Parent != null) { label = label.Parent; } parent = label as DialogPage; List <DialogPage> pages = new List <DialogPage>(); FindPages(parent, pages); foreach (var page in pages) { if (page == option.Parent) { continue; } if (option.Contains(page)) { continue; } lstbox.Items.Add(page); } rebind.Option = option; rebind.ShowDialog(); if (OnRefresh != null) { OnRefresh(sender, e); } var owner = parent.Owner; owner.Rebind(); }
private void MenuItem_New_Click(object sender, RoutedEventArgs e) { SetupGraph(); DialogPage page = new DialogPage(this); mRootNode = createNewVertex(page); mRootNode.Page.Label = "Starting Point"; AddNode(mRootNode); Area.GenerateGraph(true, true); zoomctrl.ZoomToFill(); Area.RelayoutGraph(); }
private void onNodeClick(object node) { DataVertex dv = node as DataVertex; var page = dv.Page; PageEditor pe = new PageEditor(); pe.Owner = this; if (page is DialogPage) { DialogPage dp = page as DialogPage; if (dp.isSubTreeCommand) { var jsonFile = dp.OptionOwner.Command; string codeBase = Assembly.GetExecutingAssembly().CodeBase; string path = Uri.UnescapeDataString(new UriBuilder(codeBase).Path); var file = System.IO.Path.Combine(Directory.GetCurrentDirectory(), jsonFile); Process.Start(new ProcessStartInfo(path, "\"" + file + "\"")); return; } pe.DataContext = page; } else { var option = dv.Page as DialogOption; if (option.Target == null) { option.Target = new DialogPage(this); option.Target.Vertex = option.Vertex; } pe.DataContext = option.Target; } pe.ShowDialog(); Area.RelayoutGraph(); Area.GenerateGraph(true, true); }
void DialogWindow_Loaded(object sender, RoutedEventArgs e) { var args = Environment.GetCommandLineArgs(); if (args.Length > 1) { var json = args[1]; Directory.SetCurrentDirectory(System.IO.Path.GetDirectoryName(json)); this.Title += " " + System.IO.Path.GetFileName(json); if (File.Exists(json)) { Area.ClearLayout(); mGraph.Clear(); var page = DialogLoader.Load(json); BuildGraph(page, null); mRootNode = page.Vertex; Area.GenerateGraph(true, true); zoomctrl.ZoomToFill(); Area.RelayoutGraph(); } else { SetupGraph(); DialogPage page = new DialogPage(this); mRootNode = createNewVertex(page); mRootNode.Page.Label = "Starting Point"; AddNode(mRootNode); Area.GenerateGraph(true, true); zoomctrl.ZoomToFill(); Area.RelayoutGraph(); } mOpenFile = json; } }
public static void Save(DialogPage page, string filename) { dialogs dlgs = new dialogs(); translate_page(page, dlgs); JsonSerializer serializer = new JsonSerializer(); serializer.NullValueHandling = NullValueHandling.Ignore; serializer.Formatting = Formatting.Indented; using (StreamWriter sw = new StreamWriter(filename)) { using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, dlgs); } } }
private void BuildGraph(DialogPage page, DialogLabel parent) { page.setOwner(this); DataVertex dv; if (parent != null) { if (parent is DialogOption) { dv = ((DialogOption)parent).Target.Vertex; } else { dv = parent.Vertex; } } else { dv = createNewVertex(page); AddNode(dv); } foreach (var option in page.Options) { if (option.Target != null) { var optionDv = createNewVertex(option.Target); AddNode(optionDv); LinkNodes(dv, optionDv); option.Enabled = true; option.Target.OptionOwner = option; option.Target.Vertex = optionDv; option.Target.PageOwner = page; option.Target.Label = option.Label; option.Parent = page; option.Command = option.Command; BuildGraph(option.Target, option); } } }
public bool Contains(DialogPage page) { if (Target == null) { return(false); } if (Target == page) { return(true); } foreach (var option in Target.Options) { if (option.Contains(page)) { return(true); } } return(false); }
private void BindOptions() { DialogPage dp = (DialogPage)DataContext; bool needNew = true; var options = dp.Options; foreach (var option in options) { if (String.IsNullOrEmpty(option.Label)) { needNew = false; } DialogOptionControl ctr = new DialogOptionControl(); ctr.OnOpen += ctr_OnOpen; ctr.OnRefresh += ctr_OnRefresh; ctr.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; ctr.DataContext = option; stackPanel.Children.Add(ctr); } if (needNew) { DialogOption option = new DialogOption(); DialogOptionControl ctr = new DialogOptionControl(); ctr.OnOpen += ctr_OnOpen; ctr.OnRefresh += ctr_OnRefresh; ctr.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; ctr.DataContext = option; stackPanel.Children.Add(ctr); dp.AddOption(option); } }
private static DialogPage translate_dialog(dialog dlg) { DialogPage dp = new DialogPage(null); dp.Label = dlg.name; dp.DisplayText = dlg.starting_text; dp.Options = new ObservableCollection <DialogOption>(); foreach (var choice in dlg.choices) { DialogOption option = new DialogOption(); option.LabelBinding = choice.tree; option.DisplayText = choice.text; if (choice.target != "self") { option.Command = choice.target; } for (int i = 0; i < choice.conditions.Count; i++) { option.Conditions[i].Skill = choice.conditions[i].name; option.Conditions[i].Value = choice.conditions[i].value; switch (choice.conditions[i].op) { case "=": option.Conditions[i].Type = ConditionTypes.Equal; break; case "!": option.Conditions[i].Type = ConditionTypes.NotEqual; break; case ">": option.Conditions[i].Type = ConditionTypes.GreaterThan; break; case "<": option.Conditions[i].Type = ConditionTypes.LessThan; break; } } for (int i = 0; i < choice.modifiers.Count; i++) { option.Modifiers[i].Skill = choice.modifiers[i].name; option.Modifiers[i].Value = choice.modifiers[i].value; switch (choice.modifiers[i].op) { case "=": option.Modifiers[i].Type = ModifierTypes.Equal; break; case "+": option.Modifiers[i].Type = ModifierTypes.Add; break; case "-": option.Modifiers[i].Type = ModifierTypes.Subtract; break; case "*": option.Modifiers[i].Type = ModifierTypes.Multiply; break; case "/": option.Modifiers[i].Type = ModifierTypes.Divide; break; case "^": option.Modifiers[i].Type = ModifierTypes.Execute; break; } } dp.Options.Add(option); } return(dp); }
private static void translate_page(DialogPage page, dialogs dlgs) { if (page == null) { return; } dialog dlg = new dialog(); dlgs.items.Add(dlg); dlg.name = page.Label; dlg.starting_text = page.DisplayText; foreach (var option in page.Options) { if (String.IsNullOrWhiteSpace(option.DisplayText)) { continue; } choice ch = new choice(); ch.text = option.DisplayText; ch.tree = option.Label; if (!String.IsNullOrWhiteSpace(option.Command)) { ch.target = option.Command; } else { ch.target = "self"; } foreach (var condition in option.Conditions) { if (String.IsNullOrEmpty(condition.Skill)) { continue; } condition con = new condition(); con.name = condition.Skill; con.op = condition.TypeString; con.value = condition.Value; ch.conditions.Add(con); } foreach (var modifier in option.Modifiers) { if (String.IsNullOrEmpty(modifier.Skill)) { continue; } modifiers mod = new modifiers(); mod.name = modifier.Skill; mod.op = modifier.TypeString; mod.value = modifier.Value; ch.modifiers.Add(mod); } dlg.choices.Add(ch); translate_page(option.Target, dlgs); } }