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(); } } }
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); }