private void SeVaAModificarElemento()
        {
            miFuéModificado = true;

            // Guarda el original si todavía no se ha hecho.
            if (miOriginal == null)
            {
                miOriginal = (ElementoDelMapa)Clone();
            }
        }
        /// <summary>
        /// Hace que el elemento se re-genere.
        /// </summary>
        /// <remarks>
        /// <para>
        /// Si el elemento no hay sido modificado o eliminado entonces no pasa nada.
        /// </para>
        /// <para>
        /// Si el elemento ha sido modificado entonces se borra el estado de
        /// modificado y la copia original.
        /// </para>
        /// <para>
        /// Si el elemento ha sido eliminado se genera un excepción.
        /// </para>
        /// </remarks>
        /// <param name="elNuevoNúmeroDelElemento">El nuevo número del Elemento regenerado.</param>
        public void Regenera(int elNuevoNúmeroDelElemento)
        {
            if (miFuéEliminado)
            {
                // Si el elemento ha sido eliminado se genera un excepción.
                throw new InvalidOperationException("No de puede regenerar un elemento que está eliminado: " + ToString());
            }

            if (miFuéModificado)
            {
                // Si el elemento ha sido modificado entonces se borra el estado de
                // modificado y la copia original.
                miFuéModificado = false;
                misModificaciones.Clear();
                miOriginal = null;
                miNúmero   = elNuevoNúmeroDelElemento;
            }
        }
        /// <summary>
        /// Indica que se modificó un elemento del mapa.
        /// </summary>
        public void SeModificóElemento(ElementoDelMapa elElemento)
        {
            // Si los eventos están suspendidos entonces se indica
            // que hay notificaciones pendientes.
            // Si no, entonces se genera el evento.
            bool esPdi = (elElemento is Pdi);
            bool esVía = (elElemento is Vía);

            if (miNúmeroDeSuspensiónDeEventos > 0)
            {
                miHayEventosDeModificaciónDeElementoPendientes = true;

                // Procesa PDIs y Vías.
                if (esPdi)
                {
                    miHayEventosDeModificaciónDePdisPendientes = true;
                }
                else if (esVía)
                {
                    miHayEventosDeModificaciónDeVíasPendientes = true;
                }
            }
            else
            {
                EnvíaEventoElementosModificados();

                // Procesa PDIs y Vías.
                if (esPdi)
                {
                    EnvíaEventoPdisModificados();
                }
                else if (esVía)
                {
                    EnvíaEventoVíasModificadas();
                }
            }
        }
Exemple #4
0
        private void Guarda(ElementoDelMapa elElemento, StreamWriter elEscritor)
        {
            // Inicializa indices.
            var indiceDeNodoRuteable = 1;

            // Escribe la clase.
            string clase = elElemento.Clase;

            elEscritor.WriteLine("[" + clase + "]");

            // Final del elemento.
            string finalDeElemento = "[END]";

            switch (clase)
            {
            case "IMG ID":
            case "Countries":
            case "Regions":
            case "Cities":
            case "ZipCodes":
            case "Restrict":
                finalDeElemento = "[END-" + clase + "]";
                break;
            }

            // Guarda los campos del elemento.
            foreach (var campo in elElemento.Campos)
            {
                CampoComentario       campoComentario;
                CampoNombre           campoNombre;
                CampoCoordenadas      campoCoordenadas;
                CampoNodoRuteable     campoNodo;
                CampoGenérico         campoGenérico;
                CampoTipo             campoTipo;
                CampoParámetrosDeRuta campoParámetrosDeRuta;
                CampoAtributo         campoAtributo;
                CampoEsCiudad         campoCiudad;
                CampoIndiceDeCiudad   campoIndiceDeCiudad;
                if ((campoComentario = campo as CampoComentario) != null)
                {
                    Guarda(campoComentario, elEscritor);
                }
                else if ((campoNombre = campo as CampoNombre) != null)
                {
                    Guarda(campoNombre, elEscritor);
                }
                else if ((campoCoordenadas = campo as CampoCoordenadas) != null)
                {
                    Guarda(campoCoordenadas, elEscritor);
                }
                else if ((campoNodo = campo as CampoNodoRuteable) != null)
                {
                    Guarda(campoNodo, indiceDeNodoRuteable, elEscritor);

                    // Incrementa el índice para el próximo nodo.
                    ++indiceDeNodoRuteable;
                }
                else if ((campoGenérico = campo as CampoGenérico) != null)
                {
                    Guarda(campoGenérico, elEscritor);
                }
                else if ((campoTipo = campo as CampoTipo) != null)
                {
                    Guarda(campoTipo, elEscritor);
                }
                else if ((campoParámetrosDeRuta = campo as CampoParámetrosDeRuta) != null)
                {
                    Guarda(campoParámetrosDeRuta, elEscritor);
                }
                else if ((campoAtributo = campo as CampoAtributo) != null)
                {
                    Guarda(campoAtributo, elEscritor);
                }
                else if ((campoCiudad = campo as CampoEsCiudad) != null)
                {
                    Guarda(campoCiudad, elEscritor);
                }
                else if ((campoIndiceDeCiudad = campo as CampoIndiceDeCiudad) != null)
                {
                    Guarda(campoIndiceDeCiudad, elEscritor);
                }
                else
                {
                    throw new ArgumentException("Campo desconocido: " + campo.GetType());
                }
            }

            // Escribe el final del elemento.
            elEscritor.WriteLine(finalDeElemento);
        }