/// <summary> /// Crea un menu contextual para cierto elemento del diagrama. /// Permite eliminar el elemento, conectar a otro, etc. /// </summary> /// <param name="chart">Elemento al que se le aplican las opciones.</param> /// <returns>Un objeto ContextMenu con las opciones.</returns> private ContextMenu GetContextMenuFor(ChartElement chart) { var cm = new ContextMenu(); foreach (Connection c in chart.Connections) // para cada conexion del elemento { var item = new MenuItem(); // se crea un nuevo MenuItem. item.Text = "Connect " + c.Label + " to..."; // el texto del menu es la etiqueta de la conexion. item.Tag = c; // se almacena la conexion como un objeto asociado al MenuItem. item.Click += new EventHandler(item_Click); // se determina que accion se ejecuta para el click del MenuItem. cm.MenuItems.Add(item); // se agrega el menu item a los menuItems del menu contextual. } var sep = new MenuItem(); sep.Text = "-"; cm.MenuItems.Add(sep); var removeMenuItem = new MenuItem(); removeMenuItem.Text = "Remove"; removeMenuItem.Tag = chart; removeMenuItem.Click += new EventHandler(removeMenuItem_Click); cm.MenuItems.Add(removeMenuItem); return(cm); }
/// <summary> /// Inicializa una coleccion de pines de cierto tipo, para determinado elemento. /// </summary> /// <param name="chart">Elemento poseedor de los pines.</param> /// <param name="count">Cantidad de pines de la coleccion.</param> /// <param name="type">Tipo de pin de la coleccion.</param> internal PinCollection(ChartElement chart, int count, PinType type) { this.pins = new Pin[count]; for (int i = 0; i < this.pins.Length; i++) { this.pins[i] = new Pin(chart, i, type); } }
void builderMenuItem_Click(object sender, EventArgs e) { MenuItem item = sender as MenuItem; ChartElementBuilder builder = item.Tag as ChartElementBuilder; // se recupera el Builder a partir //del menu item. ChartElement element = builder.Build(); // se crea un nuevo elemento utilizando ese builder. this.Charts.Add(element); // se agrega a la coleccion de elementos del diagrama. if (GraphChanged != null) { GraphChanged(); } }
private void builderMenuItem_Click(object sender, EventArgs e) { var item = sender as MenuItem; var builder = item.Tag as ChartElementBuilder; // se recupera el Builder a partir del menu item. ChartElement element = builder.Build(item.Index); // se crea un nuevo elemento utilizando ese builder. if (element is BeginChartElement && Charts.First != null) { if (AddedASecondBeginElement != null) { AddedASecondBeginElement.Invoke(this, EventArgs.Empty); } } else { Charts.Add(element); // se agrega a la coleccion de elementos del diagrama. } Invalidate(); }
/// <summary> /// Crea un menu contextual para cierto elemento del diagrama. /// Permite eliminar el elemento, conectar a otro, etc. /// </summary> /// <param name="chart">Elemento al que se le aplican las opciones.</param> /// <returns>Un objeto ContextMenu con las opciones.</returns> private ContextMenu GetContextMenuFor(ChartElement chart) { ContextMenu cm = new ContextMenu(); MenuItem node = new MenuItem(); node.Text = "Insert conditional probabilities"; node.Tag = chart; node.Click += new EventHandler(Probability_Click); cm.MenuItems.Add(node); MenuItem removeMenuItem = new MenuItem(); removeMenuItem.Text = "Remove"; removeMenuItem.Tag = chart; removeMenuItem.Click += new EventHandler(removeMenuItem_Click); cm.MenuItems.Add(removeMenuItem); foreach (Connection c in chart.Connections) // para cada conexion del elemento { MenuItem item = new MenuItem(); // se crea un nuevo MenuItem. item.Text = "Connect " + c.Label; // el texto del menu es la etiqueta de la conexion. item.Tag = c; // se almacena la conexion como un objeto asociado al MenuItem. item.Click += item_Click; // se determina que accion se ejecuta para el click del MenuItem. cm.MenuItems.Add(item); // se agrega el menu item a los menuItems del menu contextual. } MenuItem sep = new MenuItem(); sep.Text = "-"; cm.MenuItems.Add(sep); return(cm); }
/// <summary> /// Permite inicializar un pin. Observe que el uso de internal esta dado porque el elemento del diagrama es el que sabe que pines debe tener. /// </summary> internal Pin(ChartElement chart, int index, PinType type) { this.ChartElement = chart; this.Index = index; this.PinType = type; }
/// <summary> /// Metodo que se invoca cuando se presiona un boton del mouse. /// </summary> /// <param name="e"></param> protected override void OnMouseDown(MouseEventArgs e) { lastMousePlace = FromClientToCanvas(e.Location); ChartElement nextSelected = null; foreach (ChartElement c in Charts) { if (c.Display.Contains(FromClientToCanvas(e.Location))) { nextSelected = c; } } if (SelectedItem != null) { SelectedItem.Selected = false; } SelectedItem = nextSelected; if (SelectedItem != null) { SelectedItem.Selected = true; } if (e.Button == System.Windows.Forms.MouseButtons.Right) { isConnecting = false; modifyingConnection = null; if (SelectedItem != null) { ContextMenu cm = GetContextMenuFor(SelectedItem); this.ContextMenu = cm; } else { ContextMenu cm = GetGlobalContextMenu(FromClientToCanvas(e.Location)); this.ContextMenu = cm; } } else { if (isConnecting) { Pin nearestInput = null; if (SelectedItem != null) { foreach (Pin input in SelectedItem.ValidInputs) { if (nearestInput == null || Distance(input.Position, FromClientToCanvas(e.Location)) < Distance(nearestInput.Position, FromClientToCanvas(e.Location))) { nearestInput = input; } } } var before = modifyingConnection.To; modifyingConnection.To = nearestInput; if (nearestInput != null) //le pongo el padre { ((BayesianNodeChartElement)nearestInput.ChartElement).Parents.Add((BayesianNodeChartElement)modifyingConnection.From.ChartElement); ((BayesianNodeChartElement)nearestInput.ChartElement).Condicional_Probabilities = null; } if (before != null) //le quito el antiguo padre { ((BayesianNodeChartElement)before.ChartElement).Parents.Remove( modifyingConnection.From.ChartElement as BayesianNodeChartElement); ((BayesianNodeChartElement)before.ChartElement).Condicional_Probabilities = null; } isConnecting = false; modifyingConnection = null; } } Invalidate(); base.OnMouseDown(e); }
/// <summary> /// Crea un menu contextual para cierto elemento del diagrama. /// Permite eliminar el elemento, conectar a otro, etc. /// </summary> /// <param name="chart">Elemento al que se le aplican las opciones.</param> /// <returns>Un objeto ContextMenu con las opciones.</returns> private ContextMenu GetContextMenuFor(ChartElement chart) { var cm = new ContextMenu(); foreach (Connection c in chart.Connections) // para cada conexion del elemento { var item = new MenuItem(); // se crea un nuevo MenuItem. item.Text = "Connect " + c.Label + " to..."; // el texto del menu es la etiqueta de la conexion. item.Tag = c; // se almacena la conexion como un objeto asociado al MenuItem. item.Click += new EventHandler(item_Click); // se determina que accion se ejecuta para el click del MenuItem. cm.MenuItems.Add(item); // se agrega el menu item a los menuItems del menu contextual. } var sep = new MenuItem(); sep.Text = "-"; cm.MenuItems.Add(sep); var removeMenuItem = new MenuItem(); removeMenuItem.Text = "Remove"; removeMenuItem.Tag = chart; removeMenuItem.Click += new EventHandler(removeMenuItem_Click); cm.MenuItems.Add(removeMenuItem); return cm; }
/// <summary> /// Metodo que se invoca cuando se presiona un boton del mouse. /// </summary> /// <param name="e"></param> protected override void OnMouseDown(MouseEventArgs e) { lastMousePlace = FromClientToCanvas(e.Location); ChartElement nextSelected = null; foreach (ChartElement c in Charts) if (c.Display.Contains(FromClientToCanvas(e.Location))) nextSelected = c; if (SelectedItem != null) SelectedItem.Selected = false; SelectedItem = nextSelected; if (SelectedItem != null) SelectedItem.Selected = true; if (e.Button == MouseButtons.Right) { isConnecting = false; modifyingConnection = null; if (SelectedItem != null) { ContextMenu cm = GetContextMenuFor(SelectedItem); ContextMenu = cm; } else { ContextMenu cm = GetGlobalContextMenu(FromClientToCanvas(e.Location)); ContextMenu = cm; } } else { if (isConnecting) { Pin nearestInput = null; if (SelectedItem != null) foreach (Pin input in SelectedItem.ValidInputs) if (nearestInput == null || Distance(input.Position, FromClientToCanvas(e.Location)) < Distance(nearestInput.Position, FromClientToCanvas(e.Location))) nearestInput = input; modifyingConnection.To = nearestInput; isConnecting = false; modifyingConnection = null; } } Invalidate(); base.OnMouseDown(e); }
/// <summary> /// Metodo que se invoca cuando se presiona un boton del mouse. /// </summary> /// <param name="e"></param> protected override void OnMouseDown(MouseEventArgs e) { lastMousePlace = FromClientToCanvas(e.Location); ChartElement nextSelected = null; foreach (ChartElement c in Charts) { if (c.Display.Contains(FromClientToCanvas(e.Location))) { nextSelected = c; } } if (SelectedItem != null) { SelectedItem.Selected = false; } SelectedItem = nextSelected; if (SelectedItem != null) { SelectedItem.Selected = true; } if (e.Button == MouseButtons.Right) { isConnecting = false; modifyingConnection = null; if (SelectedItem != null) { ContextMenu cm = GetContextMenuFor(SelectedItem); ContextMenu = cm; } else { ContextMenu cm = GetGlobalContextMenu(FromClientToCanvas(e.Location)); ContextMenu = cm; } } else { if (isConnecting) { Pin nearestInput = null; if (SelectedItem != null) { foreach (Pin input in SelectedItem.ValidInputs) { if (nearestInput == null || Distance(input.Position, FromClientToCanvas(e.Location)) < Distance(nearestInput.Position, FromClientToCanvas(e.Location))) { nearestInput = input; } } } modifyingConnection.To = nearestInput; isConnecting = false; modifyingConnection = null; } } Invalidate(); base.OnMouseDown(e); }
/// <summary> /// Crea un menu contextual para cierto elemento del diagrama. /// Permite eliminar el elemento, conectar a otro, etc. /// </summary> /// <param name="chart">Elemento al que se le aplican las opciones.</param> /// <returns>Un objeto ContextMenu con las opciones.</returns> private ContextMenu GetContextMenuFor(ChartElement chart) { ContextMenu cm = new ContextMenu(); MenuItem node = new MenuItem(); node.Text = "Insert conditional probabilities"; node.Tag = chart; node.Click += new EventHandler(Probability_Click); cm.MenuItems.Add(node); MenuItem removeMenuItem = new MenuItem(); removeMenuItem.Text = "Remove"; removeMenuItem.Tag = chart; removeMenuItem.Click += new EventHandler(removeMenuItem_Click); cm.MenuItems.Add(removeMenuItem); foreach (Connection c in chart.Connections) // para cada conexion del elemento { MenuItem item = new MenuItem(); // se crea un nuevo MenuItem. item.Text ="Connect "+ c.Label; // el texto del menu es la etiqueta de la conexion. item.Tag = c; // se almacena la conexion como un objeto asociado al MenuItem. item.Click += item_Click; // se determina que accion se ejecuta para el click del MenuItem. cm.MenuItems.Add(item); // se agrega el menu item a los menuItems del menu contextual. } MenuItem sep = new MenuItem (); sep.Text = "-"; cm.MenuItems.Add(sep); return cm; }