internal ActionNodePropertiesEditor(ActionNodeConfiguration node, NodeSelectionManager nodeSelectionManager)
        {
            InitializeComponent();
            this.node = node;
            this.nodeSelectionManager = nodeSelectionManager;

            uiName.Text = node.Name;

            #region Prepare next node selector
            uiNextNodeSelector.Initialize(nodeSelectionManager, node, () => node.NextNode, delegate(NodeConfiguration nextNode) {
                node.NextNode = nextNode;
            });
            #endregion

            #region Prepare actions editing
            uiActionsListEditor.Initialize(AddAction);
            uiActionsListEditor.ItemRemoved += RemoveAction;
            uiActionsListEditor.ItemSelected += SetActiveAction;

            uiActionConfigurationRegion.Visibility = Visibility.Collapsed;
            foreach (ActionConfiguration action in node.Actions) {
                uiActionsListEditor.AddItem(CreateActionRepresentation(action));
            }
            uiActionsListEditor.SelectItem(uiActionsListEditor.Items.FirstOrDefault());
            #endregion
        }
Beispiel #2
0
        /// <summary>
        /// Initializes an action node.
        /// </summary>
        /// <param name="configuration">ActionNodeConfiguration is expected
        /// </param>
        public override void InitializeCore(NodeConfiguration configuration)
        {
            Config = (ActionNodeConfiguration)configuration;

            foreach (ActionConfiguration actionConfig in Config.Actions)
            {
                ActionType actionType = ProcessorService.Configuration.GetActionType(actionConfig.ActionTypeName);
                IActionPlugin action = TypeUtils.CreateTypeInstance<IActionPlugin>(actionType.ClrTypeAndAssembly);

                ObjectConfigurator.Configurator.LoadConfiguration(action, actionConfig.Configuration);

                action.Initialize(ProcessorService);
                actions.Add(action);
            }
        }
        private ContextMenu CreateGraphCanvasContextMenu()
        {
            ContextMenu result = new ContextMenu();

            MenuItem menuItemAddActionNode = new MenuItem {
                Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/XRouter.Gui;component/Resources/Actions-tool-animator-icon.png")), Height = 20 },
                Header = new TextBlock { Text = "Action", FontSize = 14, FontWeight = FontWeights.Bold }
            };
            menuItemAddActionNode.Click += delegate {
                AddNode("Action", result, delegate {
                    ActionNodeConfiguration newActionNode = new ActionNodeConfiguration();
                    #region Add a default action
                    ActionType actionType = ConfigManager.Configuration.GetActionTypes().First();
                    ActionConfiguration action = new ActionConfiguration(actionType.Name) {
                        Configuration = new SerializableXDocument(new XDocument(new XElement(XName.Get("objectConfig"))))
                    };
                    newActionNode.Actions.Add(action);
                    #endregion
                    return newActionNode;
                });
            };

            MenuItem menuItemAddCbrNode = new MenuItem {
                Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/XRouter.Gui;component/Resources/nfs-unmount-icon.png")), Height = 20 },
                Header = new TextBlock { Text = "CBR", FontSize = 14, FontWeight = FontWeights.Bold }
            };
            menuItemAddCbrNode.Click += delegate {
                AddNode("CBR", result, delegate { return new CbrNodeConfiguration(); });
            };

            MenuItem menuItemAddTerminatorNode = new MenuItem {
                Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/XRouter.Gui;component/Resources/Button-exit-icon.png")), Height = 20 },
                Header = new TextBlock { Text = "Terminator", FontSize = 14, FontWeight = FontWeights.Bold }
            };
            menuItemAddTerminatorNode.Click += delegate {
                Point menuLocationOnCanvas = result.TranslatePoint(new Point(), graphCanvas.Canvas);
                AddNode("Terminator", result, delegate { return new TerminatorNodeConfiguration(); });
            };

            MenuItem menuItemAdd = new MenuItem {
                Header = new TextBlock { Text = "Add node...", FontSize = 14 }  
            };
            menuItemAdd.Items.Add(menuItemAddActionNode);
            menuItemAdd.Items.Add(menuItemAddCbrNode);
            menuItemAdd.Items.Add(menuItemAddTerminatorNode);

            result.Items.Add(menuItemAdd);
            return result;
        }