001package jmri.jmrix.dccpp.swing.virtuallcd.configurexml; 002 003import java.awt.Dimension; 004import java.util.*; 005 006import jmri.configurexml.JmriConfigureXmlException; 007import jmri.jmrix.dccpp.DCCppSystemConnectionMemo; 008import jmri.jmrix.dccpp.swing.virtuallcd.VirtualLCDConfiguration; 009import jmri.jmrix.dccpp.swing.virtuallcd.VirtualLCDConfiguration.DisplayConfig; 010 011import org.jdom2.Element; 012 013/** 014 * Handle configuration for VirtualLCDConfiguration objects. 015 * 016 * @author Howard G. Penny Copyright (c) 2005 017 * @author Daniel Bergqvist Copyright (c) 2026 018 */ 019public class VirtualLCDConfigurationXml { 020 021 public static Element store(VirtualLCDConfiguration p) { 022 023 Element element = new Element("virtual_lcd_config"); 024 025 if (p.getMemo() != null) { 026 element.addContent(new Element("systemConnection") 027 .addContent(p.getMemo().getSystemPrefix())); 028 } 029 Dimension lcdSize = p.getLCDSize(); 030 if (lcdSize != null) { 031 element.addContent(new Element("numColumns") 032 .addContent(Integer.toString(lcdSize.width))); 033 element.addContent(new Element("numRows") 034 .addContent(Integer.toString(lcdSize.height))); 035 } 036 element.addContent(new Element("displayConfig") 037 .addContent(p.getDisplayConfig().name())); 038 element.addContent(new Element("displayNo") 039 .addContent(Integer.toString(p.getDisplayNo()))); 040 element.addContent(new Element("minDisplayNo") 041 .addContent(Integer.toString(p.getMinDisplayNo()))); 042 element.addContent(new Element("maxDisplayNo") 043 .addContent(Integer.toString(p.getMaxDisplayNo()))); 044 045 Element selectedDisplays = new Element("selectedDisplays"); 046 for (int display : p.getSelectedDisplays()) { 047 selectedDisplays.addContent(new Element("displayNo") 048 .addContent(Integer.toString(display))); 049 } 050 element.addContent(selectedDisplays); 051 052 return element; 053 } 054 055 public static void load(VirtualLCDConfiguration p, Element elem, boolean ignoreMemo) 056 throws JmriConfigureXmlException { 057 058 Element element = elem.getChild("virtual_lcd_config"); 059 060 DCCppSystemConnectionMemo memo = null; 061 062 List<DCCppSystemConnectionMemo> systemConnections = 063 jmri.InstanceManager.getList(DCCppSystemConnectionMemo.class); 064 065 String systemConnectionName = "Unknown connection"; 066 067 if (!ignoreMemo) { 068 Element systemConnection = element.getChild("systemConnection"); 069 if (systemConnection != null) { 070 systemConnectionName = systemConnection.getTextTrim(); 071 072 for (DCCppSystemConnectionMemo m : systemConnections) { 073 if (m.getSystemPrefix().equals(systemConnectionName)) { 074 memo = m; 075 break; 076 } 077 } 078 } 079 080 if (memo == null) { 081 throw new JmriConfigureXmlException("Cannot find connection: " + systemConnectionName); 082 } 083 084 p.setMemo(memo); 085 } 086 087 Element numColumnsElement = element.getChild("numColumns"); 088 Element numRowsElement = element.getChild("numRows"); 089 if (numColumnsElement != null && numRowsElement != null) { 090 int numColumns = Integer.parseInt(numColumnsElement.getTextTrim()); 091 int numRows = Integer.parseInt(numRowsElement.getTextTrim()); 092 p.setLCDSize(new Dimension(numColumns, numRows)); 093 } 094 095 String displayConfigName = element.getChild("displayConfig").getTextTrim(); 096 p.setDisplayConfig(DisplayConfig.valueOf(displayConfigName)); 097 098 p.setDisplayNo(Integer.parseInt(element.getChild("displayNo").getTextTrim())); 099 p.setMinDisplayNo(Integer.parseInt(element.getChild("minDisplayNo").getTextTrim())); 100 p.setMaxDisplayNo(Integer.parseInt(element.getChild("maxDisplayNo").getTextTrim())); 101 102 Set<Integer> selectedDisplaysSet = new HashSet<>(); 103 Element selectedDisplays = element.getChild("selectedDisplays"); 104 for (Element e : selectedDisplays.getChildren()) { 105 selectedDisplaysSet.add(Integer.valueOf(e.getTextTrim())); 106 } 107 p.setSelectedDisplays(selectedDisplaysSet); 108 } 109 110// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(VirtualLCDConfigurationXml.class); 111}