public void addLogo(Fotografia fotografia, Logo logo, bool salvare) { if (logo == null) { // Rimuovo il logo dalle correzioni // Deserializzo la stringa con le eventuali correzioni attuali if (fotografia.correzioniXml != null) { CorrezioniList correzioni = SerializzaUtil.stringToObject <CorrezioniList>(fotografia.correzioniXml); foreach (Correzione c in correzioni) { if (c is Logo) { correzioni.Remove(c); break; } } // Ora serializzo di nuovo fotografia.correzioniXml = SerializzaUtil.objectToString(correzioni); } } else { // Siccome ho reso il logo sommabile, questa operazione in realtà non aggiunge ma sostituisce. addCorrezione(fotografia, logo, salvare); } // Ricalcolo il provino giusto per poterlo visualizzare AiutanteFoto.creaProvinoFoto(fotografia); }
public void removeCorrezione(Fotografia foto, Type quale) { // Se non ho correzioni è impossibile che ne voglio rimuovere una if (foto.correzioniXml == null) { return; } // Deserializzo la stringa con le eventuali correzioni attuali CorrezioniList correzioni = SerializzaUtil.stringToObject <CorrezioniList>(foto.correzioniXml); bool rimossa = false; foreach (Correzione cor in correzioni) { if (cor.GetType().Equals(quale)) { correzioni.Remove(cor); rimossa = true; break; } } if (!rimossa) { return; } // Ora serializzo di nuovo in stringa tutte le correzioni if (correzioni.Count > 0) { foto.correzioniXml = SerializzaUtil.objectToString(correzioni); } else { foto.correzioniXml = null; } AiutanteFoto.creaProvinoFoto(foto); }
/// <summary> /// Aggiungo una correzione ad una lista di correzione. /// Se la correzione esiste già, gestisco eventuale somma, oppure rimozione in caso che sia inutile (ininfluente) /// </summary> /// <param name="correzioni"></param> /// <param name="correzioneNuova"></param> public void addCorrezione(ref CorrezioniList correzioni, Correzione correzioneNuova) { // Alcune correzioni, non devono andare sempre in aggiunta, ma possono sommarsi l'un l'altra. // Per esempio la rotazione. Se ruoto 90° poi altri 90, l'effetto finale è quello di avere una sola da 180° Correzione daSost = null; Correzione vecchia = null; foreach (Correzione c in correzioni) { if (c.isSommabile(correzioneNuova)) { vecchia = c; daSost = c.somma(correzioneNuova); break; } } if (daSost != null) { // Sostituisco la correzione con quella ricalcolata if (daSost.isInutile) { correzioni.Remove(vecchia); } else { correzioni.sostituire(vecchia, daSost); } } else { // Aggiungo in fondo (se la correzione è inutile, allora non aggiungo nulla) if (!correzioneNuova.isInutile) { correzioni.Add(correzioneNuova); } } }
/// <summary> /// Se una azione automatica contiene una mascheratura orientabile (quindi doppia) /// posso disassociarla e creare una nuova azione /// </summary> void disassociareMascheratura() { CorrezioniList correzioniList = null; AzioneAuto azioneAuto = azioneAutomaticaSelezionata; MascheraturaOrientabile mascheraturaOrientabile = null; // Controllo che l'azione corrente contenga una mascheratura orientabile if (azioneAuto.correzioniXml != null) { correzioniList = SerializzaUtil.stringToObject <CorrezioniList>(azioneAuto.correzioniXml); if (correzioniList != null && correzioniList.Count > 0) { mascheraturaOrientabile = (MascheraturaOrientabile)correzioniList.SingleOrDefault(mo => mo is MascheraturaOrientabile); } } if (mascheraturaOrientabile == null) { dialogProvider.ShowError("L'azione selezionata non contiene una <MascheraturaOrientabile>.\nSolo queste si possono separare!", "Azione non separabile", null); return; } // ok procedo a separare le cornici // Sostituisco la correzione nella lista, cercando di mettere quella nuova nella stessa posizione Mascheratura masH = mascheraturaOrientabile.mascheraturaH; Mascheratura masV = mascheraturaOrientabile.mascheraturaV; // Elimino la mascheratura doppia ... correzioniList.Remove(mascheraturaOrientabile); // aggiungo solo la mascheratura Orizzontale correzioniList.Insert(0, masV); // Aggiorno l'entità sul db OrmUtil.forseAttacca <AzioneAuto>(ref azioneAuto); azioneAuto.correzioniXml = SerializzaUtil.objectToString(correzioniList); // Ora creo l'altra azione CorrezioniList correzioniList2 = new CorrezioniList(); correzioniList2.Add(masH); AzioneAuto azioneV = new AzioneAuto { id = Guid.NewGuid(), attivo = true, nome = "Separata", correzioniXml = SerializzaUtil.objectToString(correzioniList2) }; UnitOfWorkScope.currentDbContext.AzioniAutomatiche.Add(azioneV); // Ora aggiungo anche alla collezione visiva azioniAutomatiche.Add(azioneV); deselezionareTutto(); // Purtroppo non si aggiornano le icone di overlay. devo ricaricare. App.Current.Dispatcher.BeginInvoke(new Action(() => { rileggereAzioniAutomaticheCommand.Execute(null); } )); }