示例#1
0
        private void EnBotónEliminarPdis(object sender, EventArgs e)
        {
            // Suspende notificaciones.
            ManejadorDeMapa.SuspendeEventos();

            // Obtiene la lista de PDIs a eliminar.
            List <Pdi> pdisAEliminar = new List <Pdi>();

            foreach (ListViewItem item in miLista.Items)
            {
                if (item.Checked)
                {
                    pdisAEliminar.Add(((ElementoConEtiqueta)item.Tag).ElementoDelMapa as Pdi);
                }
            }

            // Pregunta si se quiere eliminar los PDIs.
            string       texto     = string.Format("Está seguro que quiere borrar los {0} PDIs seleccionados?", pdisAEliminar.Count);
            DialogResult respuesta = MessageBox.Show(
                texto,
                "Eliminar PDIs",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Warning);

            // Elimina los PDIs si el usuario dice que si.
            if (respuesta == DialogResult.Yes)
            {
                foreach (Pdi pdi in pdisAEliminar)
                {
                    pdi.Elimina("Manualmente eliminado en la pestaña de 'Posibles Duplicados'");
                }

                // Restablece notificaciones.
                ManejadorDeMapa.RestableceEventos();

                // Busca otra vez los PDIs duplicados tomando en cuenta
                // los que se acaban de eliminar.
                miBuscadorDeDuplicados.Procesa();
            }
            else
            {
                // Restablece notificaciones.
                ManejadorDeMapa.RestableceEventos();
            }
        }
示例#2
0
        private void EnMenúMarcarComoNodosDesconectados(object elEnviador, EventArgs losArgumentos)
        {
            // Retornamos si no hay Vías seleccionadas.
            int númeroDeNodosSeleccionados = miLista.SelectedIndices.Count;

            if (númeroDeNodosSeleccionados == 0)
            {
                return;
            }

            if (númeroDeNodosSeleccionados > 1)
            {
                // Pregunta si se quiere marcar los nodos como desconectados.
                DialogResult respuesta = MessageBox.Show(
                    string.Format("Está seguro que quiere marcar los {0} Nodos seleccionados como nodos desconectados?",
                                  númeroDeNodosSeleccionados),
                    "Marcar como Nodos Desconectados",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Warning);

                if (respuesta != DialogResult.Yes)
                {
                    return;
                }
            }

            #region Marca Nodos como Desconectados.
            // Añade el attributo a los nodos.
            ManejadorDeMapa.SuspendeEventos();
            IList <InformaciónNodoDesconectado> posibleNodoDesconectados = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneEtiquetasSeleccionadas <InformaciónNodoDesconectado>();
            foreach (InformaciónNodoDesconectado posibleNodoDesconectado in posibleNodoDesconectados)
            {
                string atributo = BuscadorDePosiblesNodosDesconectados.AtributoNodoDesconectado
                                  + ',' + posibleNodoDesconectado.PosibleNodoDesconectado.Indice;
                posibleNodoDesconectado.PosibleNodoDesconectado.Vía.AñadeAtributo(atributo);
            }
            ManejadorDeMapa.RestableceEventos();

            // Notifica la edición.
            miMenú.EnvíaEventoEditó();
            #endregion
        }
示例#3
0
        private void AñadeAttributo(string elTítulo, string laPregunta, string elAtributo)
        {
            ListView lista = miInterfaseListaConMapaDePdis.InterfaseListaDePdis;

            // Retornamos si no hay PDIs seleccionados.
            int númeroDePdisSeleccionados = lista.SelectedIndices.Count;

            if (númeroDePdisSeleccionados == 0)
            {
                return;
            }

            // Pregunta si se quiere Ignorarque el PDI no tenga coordenadas a Nivel 0.
            DialogResult respuesta = MessageBox.Show(
                string.Format(
                    laPregunta,
                    númeroDePdisSeleccionados),
                elTítulo,
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Warning);

            #region Estandarizar el Límite de Velocidad si el usuario dice que si.
            if (respuesta != DialogResult.Yes)
            {
                return;
            }

            // Añade los attributos.
            ManejadorDeMapa.SuspendeEventos();
            IList <Pdi> pdis = miInterfaseListaConMapaDePdis.MenuEditorDePdis.ObtieneElementosSeleccionados <Pdi>();
            foreach (Pdi pdi in pdis)
            {
                pdi.AñadeAtributo(elAtributo);
            }
            ManejadorDeMapa.RestableceEventos();

            // Busca errores otra vez.
            miBuscadorDeErrores.Procesa();
            #endregion
        }
示例#4
0
        private void EnMenúIgnorarCambiosBruscosDeClaseDeRuta(object elEnviador, EventArgs losArgumentos)
        {
            // Retornamos si no hay Vías seleccionadas.
            int númeroDeVíasSeleccionadas = miLista.SelectedIndices.Count;

            if (númeroDeVíasSeleccionadas == 0)
            {
                return;
            }

            if (númeroDeVíasSeleccionadas > 1)
            {
                // Pregunta si se quiere ignorar los cambios bruscos de clase de ruta.
                DialogResult respuesta = MessageBox.Show(
                    string.Format("Está seguro que quiere ignorar los cambios bruscos de clase de ruta en las {0} Vías seleccionadas?",
                                  númeroDeVíasSeleccionadas),
                    "Ignorar Cambios Bruscos de Clase de Ruta",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Warning);

                if (respuesta != DialogResult.Yes)
                {
                    return;
                }
            }

            // Añade el attributo a las vías.
            ManejadorDeMapa.SuspendeEventos();
            IList <Vía> vías = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneElementosSeleccionados <Vía>();

            foreach (Vía vía in vías)
            {
                vía.AñadeAtributo(BuscadorDePosiblesErroresDeRuteo.AtributoIgnorarCambioBruscoDeClaseDeRuta);
            }
            ManejadorDeMapa.RestableceEventos();

            // Notifica la edición.
            miMenú.EnvíaEventoEditó();
        }
示例#5
0
        private void EnMenúExcluirDeBúsquedaDeParámetrosDeRutaEstándar(object elEnviador, EventArgs losArgumentos)
        {
            ListView lista = miInterfaseListaConMapaDeVías.InterfaseListaDeVías;

            // Retornamos si no hay Vías seleccionadas.
            int númeroDeVíasSeleccionadas = lista.SelectedIndices.Count;

            if (númeroDeVíasSeleccionadas == 0)
            {
                return;
            }

            // Pregunta si se quiere Estandarizar el Límite de Velocidad.
            DialogResult respuesta = MessageBox.Show(
                string.Format("Está seguro que quiere Excluir las {0} Vías seleccionadas de próximas búsquedas de Parámetros de Ruta Estándar?", númeroDeVíasSeleccionadas),
                "Excluir de Búsqueda de Parámetros de Ruta Estándar",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Warning);

            #region Estandarizar el Límite de Velocidad si el usuario dice que si.
            if (respuesta != DialogResult.Yes)
            {
                return;
            }

            // Cambia las vías.
            ManejadorDeMapa.SuspendeEventos();
            IList <Vía> vías = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneElementosSeleccionados <Vía>();
            foreach (Vía vía in vías)
            {
                vía.AñadeAtributo(BuscadorDeAlertas.AtributoNoParámetrosDeRutaEstándar);
            }
            ManejadorDeMapa.RestableceEventos();

            // Busca inconguencias otra vez.
            miBuscadorDeAlertas.Procesa();
            #endregion
        }
示例#6
0
        private void EnMenúConectarNodosDesconectados(object elEnviador, EventArgs losArgumentos)
        {
            // Retornamos si no hay Vías seleccionadas.
            int númeroDeNodosDesconectados = miLista.SelectedIndices.Count;

            if (númeroDeNodosDesconectados == 0)
            {
                return;
            }

            if (númeroDeNodosDesconectados > 1)
            {
                // Pregunta si se quiere Estandarizar el Límite de Velocidad.
                DialogResult respuesta = MessageBox.Show(
                    string.Format("Está seguro que quiere conectar los {0} Nodos seleccionados?", númeroDeNodosDesconectados),
                    "Conectar Nodos Desconectados",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Warning);

                if (respuesta != DialogResult.Yes)
                {
                    return;
                }
            }

            #region Conectar Nodos Desconectados.
            ManejadorDeMapa.SuspendeEventos();
            IList <InformaciónNodoDesconectado> posibleNodoDesconectados = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneEtiquetasSeleccionadas <InformaciónNodoDesconectado>();
            const string razón = "Nodo conectado manualmente.";
            foreach (InformaciónNodoDesconectado posibleNodoDesconectado in posibleNodoDesconectados)
            {
                // Conecta los nodos.
                Vía  vía               = posibleNodoDesconectado.PosibleNodoDesconectado.Vía;
                int  índice            = posibleNodoDesconectado.PosibleNodoDesconectado.Indice;
                Vía  víaDestino        = posibleNodoDesconectado.NodoDestino.Vía;
                int  índiceNodoDestino = posibleNodoDesconectado.NodoDestino.Indice;
                bool laVíaTieneOtroNodoConLasMismasCoordenadas = false;

                #region Cambia las coordenadas del nodo desconectado si no son iguales.
                Coordenadas coordenadasNodo        = posibleNodoDesconectado.PosibleNodoDesconectado.Coordenadas;
                Coordenadas coordenadasNodoDestino = posibleNodoDesconectado.NodoDestino.Coordenadas;
                if (coordenadasNodo != coordenadasNodoDestino)
                {
                    // Antes the cambiar las coordenadas tenemos que asegurarnos que la vía no tiene
                    // otro nodo con esas coordenadas.
                    foreach (Coordenadas coordenadasNodoDeLaVía in vía.Coordenadas)
                    {
                        if (coordenadasNodoDeLaVía == coordenadasNodoDestino)
                        {
                            laVíaTieneOtroNodoConLasMismasCoordenadas = true;
                            break;
                        }
                    }

                    // Si la vía no tiene otro nodo con las mismas coordenadas
                    // entonces lo conectamos.
                    if (!laVíaTieneOtroNodoConLasMismasCoordenadas)
                    {
                        vía.CambiaCoordenadas(
                            coordenadasNodoDestino,
                            índice,
                            razón);
                    }
                }
                #endregion

                // Si la vía tiene otro nodo con las mismas coordenadas
                // entonces avisamos al usuario y no lo conectamos.
                if (laVíaTieneOtroNodoConLasMismasCoordenadas)
                {
                    MessageBox.Show(
                        string.Format("La Vía # {0} tiene otro nodo con las mismas coordenadas ({1}).\nEl nodo no se va a conectar.", vía.Número, coordenadasNodo),
                        "Conecta Nodos Desconectados",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Warning);
                    continue;
                }

                #region Asegurarse que ambos nodos son ruteables.
                Nodo nodo        = vía.Nodos[índice];
                Nodo nodoDestino = víaDestino.Nodos[índiceNodoDestino];

                // Si el posible nodo desconectado es ruteable y el nodo destino
                // no es ruteable entonces usamos el identificador global del
                // posible nodo desconectado para el nodo destino.
                if (nodo.EsRuteable && !nodoDestino.EsRuteable)
                {
                    // Añade el nodo ruteable en la vía destino.
                    víaDestino.AñadeNodoRuteable(
                        índiceNodoDestino,
                        nodo.IdentificadorGlobal,
                        razón);
                }
                // Si el nodo destino es ruteable entonces usamos el identificador
                // global del nodo destino para el nodo desconectado.
                else if (nodoDestino.EsRuteable)
                {
                    // Añade el nodo ruteable en la vía.
                    vía.AñadeNodoRuteable(
                        índice,
                        nodoDestino.IdentificadorGlobal,
                        razón);
                }
                // Si ninguno de los nodos es ruteable entonces generamos un nuevo
                // índentificador global.
                else
                {
                    // Genera un nuevo identificador global.
                    int nuevoIdentificadorGlobal = GeneraNuevoIdentificadorGlobal();

                    // Añade el nodo ruteable a ambas vías.
                    vía.AñadeNodoRuteable(
                        índice,
                        nuevoIdentificadorGlobal,
                        razón);
                    víaDestino.AñadeNodoRuteable(
                        índiceNodoDestino,
                        nuevoIdentificadorGlobal,
                        razón);
                }
                #endregion
            }
            ManejadorDeMapa.RestableceEventos();

            // Notifica la edición.
            miMenú.EnvíaEventoEditó();
            #endregion
        }