コード例 #1
0
 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);
         }
     }
 }
コード例 #2
0
        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();
        }
コード例 #3
0
ファイル: DialogWindow.xaml.cs プロジェクト: whilke/dcomposer
        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();
        }
コード例 #4
0
ファイル: DialogWindow.xaml.cs プロジェクト: whilke/dcomposer
        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);
        }
コード例 #5
0
ファイル: DialogWindow.xaml.cs プロジェクト: whilke/dcomposer
        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;
            }
        }
コード例 #6
0
ファイル: DialogLoader.cs プロジェクト: whilke/dcomposer
        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);
                }
            }
        }
コード例 #7
0
ファイル: DialogWindow.xaml.cs プロジェクト: whilke/dcomposer
        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);
                }
            }
        }
コード例 #8
0
ファイル: DialogPage.cs プロジェクト: whilke/dcomposer
        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);
        }
コード例 #9
0
        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);
            }
        }
コード例 #10
0
ファイル: DialogLoader.cs プロジェクト: whilke/dcomposer
        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);
        }
コード例 #11
0
ファイル: DialogLoader.cs プロジェクト: whilke/dcomposer
        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);
            }
        }