/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package diagramas.logico;

import controlador.Diagrama;
import controlador.inspector.InspectorProperty;
import desenho.preAnyDiagrama.PreCardinalidade;
import java.util.ArrayList;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 *
 * @author ccandido
 */
public class LogicoCardinalidade  extends PreCardinalidade {

    private static final long serialVersionUID = 1456264234125393022L;

    public LogicoCardinalidade(Diagrama modelo) {
        super(modelo);
        setCanBeDeleted(false);
    }
    
    public LogicoCardinalidade(Diagrama modelo, String texto) {
        super(modelo, texto);
        setCanBeDeleted(false);
    }

    @Override
    public ArrayList<InspectorProperty> GenerateProperty() {
        ArrayList<InspectorProperty> res = super.GenerateProperty();

        String[] afetados = new String[]{"setWidth", "setHeight"};

        InspectorProperty tmp = InspectorProperty.FindByProperty(res, "setHeight");
        int p = res.indexOf(tmp) + 1;

        res.add(p, InspectorProperty.PropertyFactorySN("cardinalidade.tamanhoautmatico", "setTamanhoAutmatico", isTamanhoAutmatico()).AddCondicaoForFalse(afetados));
        res.add(p + 1, InspectorProperty.PropertyFactorySN("cardinalidade.movimentacaomanual", "setMovimentacaoManual", isMovimentacaoManual()));

        //res.add(InspectorProperty.PropertyFactorySeparador("mer"));
        ArrayList<String> strCards = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            strCards.add(CardToString(IntToCard(i)));
        }
        res.add(InspectorProperty.PropertyFactoryMenu("cardinalidade.card", "setCard", CardToInt(), strCards));

        return res;

    }

    @Override
    protected void ToXmlValores(Document doc, Element me) {
        super.ToXmlValores(doc, me);
        me.appendChild(util.XMLGenerate.ValorBoolean(doc, "TamanhoAutmatico", isTamanhoAutmatico()));
        me.appendChild(util.XMLGenerate.ValorInteger(doc, "Card", CardToInt()));
        me.appendChild(util.XMLGenerate.ValorBoolean(doc, "MovimentacaoManual", isMovimentacaoManual()));
        me.appendChild(util.XMLGenerate.ValorString(doc, "Papel", getPapel()));
        me.appendChild(util.XMLGenerate.ValorFonte(doc, getFont()));
        //me.appendChild(util.XMLGenerate.ValorRefFormElementar(doc, "LigadoA", getLigadoA()));
    }

    @Override
    public boolean LoadFromXML(Element me, boolean colando) {
        if (!super.LoadFromXML(me, colando)) {
            return false;
        }
        int l = util.XMLGenerate.getValorIntegerFrom(me, "Card");
        if (l != -1) {
            setCard(l);
        }
        setTamanhoAutmatico(util.XMLGenerate.getValorBooleanFrom(me, "TamanhoAutmatico"));
        setMovimentacaoManual(util.XMLGenerate.getValorBooleanFrom(me, "MovimentacaoManual"));
        String tmp = util.XMLGenerate.getValorStringFrom(me, "Papel");
        setPapel(tmp);

        return true;
    }

    @Override
    public void setCard(TiposCard Card) {
        if (Card != this.getCard()) {
            super.setCard(Card);
            if (getLigadoA() instanceof LogicoLinha) {
                LogicoLinha lin = ((LogicoLinha)getLigadoA());
                lin.AlterCard(this);
                lin.ajusteSeta();
            }
        }
    }
    
    @Override
    public boolean isAlinhavel() {
        return false;
    }

}