示例#1
0
        /// <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);
            }
                                                          ));
        }
示例#2
0
        void forseAssociareMaschere()
        {
            if (!modalitaAssociazione)
            {
                return;
            }

            // Per poter iniziare l'associazione, ocorre che la riga selezionata, contenga una mascheratura
            Mascheratura mascheratura2 = estraiMascheratura(azioneAutomaticaSelezionata);

            if (mascheratura2 == null)
            {
                dialogProvider.ShowError("L'azione selezionata non contiene Mascheratura", "Azioni non associate", null);
                return;
            }

            // Dalla prima azione, estraggo la mascheratura, perché devo controllare che sia di Orientamento opposto alla prima che ho fissato.
            CorrezioniList correzioni1   = SerializzaUtil.stringToObject <CorrezioniList>(azioneAutoAssociare1.correzioniXml);
            Mascheratura   mascheratura1 = (Mascheratura)correzioni1.ToList <Correzione>().FirstOrDefault(c => c is Mascheratura);

            var ratio1 = mascheratura1.width / mascheratura1.height;
            var ratio2 = mascheratura2.width / mascheratura2.height;

            if ((ratio1 < 1 && ratio2 < 1) || (ratio1 > 1 && ratio2 > 1))
            {
                dialogProvider.ShowError("Le maschere devono ossere di diverso orientamento.\nUna orizzontale ed una verticale!", "Azioni non associate", null);
                return;
            }

            // Ok : adesso posso procedere alla associazione

            MascheraturaOrientabile mo = new MascheraturaOrientabile();

            mo.mascheraturaH = (ratio1 < 1 ? mascheratura2 : mascheratura1);
            mo.mascheraturaV = (ratio1 < 1 ? mascheratura1 : mascheratura2);

            using (new UnitOfWorkScope()) {
                // Sostituisco la correzione nella lista, cercando di mettere quella nuova nella stessa posizione
                int pos = correzioni1.IndexOf(mascheratura1);
                correzioni1.RemoveAt(pos);
                correzioni1.Insert(pos, mo);

                // Rimuovo l'azione2 dalla collezione a video
                AzioneAuto azioneDacanc = azioneAutomaticaSelezionata;
                azioniAutomatiche.Remove(azioneDacanc);

                // Ora vado ad aggiornare l'azione1 con le correzioni nuove
                AzioneAuto azione = azioneAutoAssociare1;
                OrmUtil.forseAttacca <AzioneAuto>(ref azione);
                azioneAutoAssociare1.correzioniXml = SerializzaUtil.objectToString(correzioni1);

                // Elimino dal db la azione2
                OrmUtil.forseAttacca <AzioneAuto>(ref azioneDacanc);

                // Rimuovo l'azione dal database
                UnitOfWorkScope.currentDbContext.AzioniAutomatiche.Remove(azioneDacanc);

                UnitOfWorkScope.currentDbContext.SaveChanges();

                // Torno in modalità normale
                modalitaAssociazione = false;
            }

            // Purtroppo non si aggiornano le icone di overlay. devo ricaricare.
            App.Current.Dispatcher.BeginInvoke(new Action(() => {
                rileggereAzioniAutomaticheCommand.Execute(null);
            }
                                                          ));
        }