001package jmri.jmrit.display.layoutEditor.configurexml;
002
003import jmri.InstanceManager;
004import jmri.configurexml.AbstractXmlAdapter;
005import jmri.jmrit.display.layoutEditor.LayoutTrackView;
006import jmri.jmrit.logixng.LogixNG_Manager;
007
008import org.jdom2.Element;
009
010/**
011 * Base class for Xml classes for classes that inherits LayoutTrackView.
012 * @author Daniel Bergqvist (C) 2022
013 */
014public abstract class LayoutTrackViewXml extends AbstractXmlAdapter {
015
016    public void storeLogixNG_Data(LayoutTrackView ltv, Element element) {
017        if (ltv.getLogixNG() == null) return;
018
019        // Don't save LogixNG data if we don't have any ConditionalNGs
020        if (ltv.getLogixNG().getNumConditionalNGs() == 0) return;
021        Element logixNG_Element = new Element("LogixNG");
022        logixNG_Element.addContent(new Element("InlineLogixNG_SystemName").addContent(ltv.getLogixNG().getSystemName()));
023        element.addContent(logixNG_Element);
024    }
025
026    public void loadLogixNG_Data(LayoutTrackView ltv, Element element) {
027        Element logixNG_Element = element.getChild("LogixNG");
028        if (logixNG_Element == null) return;
029        Element inlineLogixNG = logixNG_Element.getChild("InlineLogixNG_SystemName");
030        if (inlineLogixNG != null) {
031            String systemName = inlineLogixNG.getTextTrim();
032            ltv.setLogixNG_SystemName(systemName);
033            InstanceManager.getDefault(LogixNG_Manager.class).registerSetupTask(() -> {
034                ltv.setupLogixNG();
035            });
036        }
037    }
038
039    /**
040     * Common routine to round a floating point value
041     * to a specific number of digits before storing it.
042     */
043    protected double roundForStore(double value) {
044        if (shortenPrecision) {
045            return Math.round(value * 100.0) / 100.0;
046        } else {
047            return value;
048        }
049    }
050    boolean shortenPrecision = jmri.InstanceManager.getDefault(jmri.configurexml.LoadAndStorePreferences.class).isShortenLayoutEditorWrites();
051
052}