📄 addhvacunitpage.java
字号:
* * Some units have it, some don't - depends on the way the unit was * installed. * * <p> * * This control is applicable only for a heat pump. */ public final JCheckBox emergencyBox = new JCheckBox("Emergency Heat available"); /** * Multistage unit selector. * * If the unit is multistage, this box should be checked. */ public final JCheckBox multistageBox = new JCheckBox("Multistage unit"); /** * Variable speed blower selector. * * If the unit has a variable speed blower, this box should be checked. */ public final JCheckBox vsBox = new JCheckBox("Variable Speed Blower"); /** * Unit driver control panel. */ public final HvacDriverPanel driverPanel; /** * Create an instance. * * It is assumed that a new control panel will be created every time * the unit is selected. * * @param owner Wizard page that owns this panel. * * @param ud Unit descriptor. */ public HvacUnitConfPanel(WizardPage owner, UnitDescriptor ud) { hvacTypeCombo.addItem("Pure A/C (no heating)"); hvacTypeCombo.addItem("Heat Pump (heating and cooling)"); hvacTypeCombo.addItem("Furnace (no cooling)"); hvacTypeCombo.addItem("Boiler (no cooling)"); hvacTypeCombo.setSelectedIndex(1); energizeCombo.addItem("Energize to Cool"); energizeCombo.addItem("Energize to Heat"); energizeCombo.setSelectedIndex(0); defaultModeCombo.addItem("Default mode: cooling"); defaultModeCombo.addItem("Default mode: heating"); defaultModeCombo.setSelectedIndex(0); GridBagLayout layout = new GridBagLayout(); GridBagConstraints cs = new GridBagConstraints(); setLayout(layout); JPanel filler1 = new JPanel(); JPanel filler2 = new JPanel(); cs.fill = GridBagConstraints.BOTH; cs.gridx = 0; cs.gridy = 0; cs.weightx = 1; cs.weighty = 1; layout.setConstraints(filler1, cs); add(filler1); cs.gridy++; cs.fill = GridBagConstraints.HORIZONTAL; cs.weighty = 0; JPanel typePanel = new JPanel(); typePanel.setLayout(new GridLayout(6, 1)); typePanel.setBorder(BorderFactory.createTitledBorder("Unit Options")); layout.setConstraints(typePanel, cs); add(typePanel); typePanel.add(hvacTypeCombo); typePanel.add(emergencyBox); typePanel.add(multistageBox); typePanel.add(vsBox); typePanel.add(energizeCombo); typePanel.add(defaultModeCombo); cs.gridy++; driverPanel = new HvacDriverPanel(owner); driverPanel.driverCombo.setEnabled(false); layout.setConstraints(driverPanel, cs); add(driverPanel); cs.gridy++; cs.fill = GridBagConstraints.BOTH; cs.weighty = 1; layout.setConstraints(filler2, cs); add(filler2); addListener(this); addListener(owner); syncFrom(ud); } /** * Add a listener to this panel's elements. * * @param listener Listener to add. */ private void addListener(ItemListener listener) { hvacTypeCombo.addItemListener(listener); energizeCombo.addItemListener(listener); driverPanel.driverCombo.addItemListener(listener); emergencyBox.addItemListener(listener); multistageBox.addItemListener(listener); vsBox.addItemListener(listener); } /** * Handle the unit type. * * Depending on what unit type is selected, different set of options * and drivers is available. * * @param e Event to handle. */ public void itemStateChanged(ItemEvent e) { Object source = e.getSource(); if ( source == hvacTypeCombo ) { driverPanel.setType(hvacTypeCombo.getSelectedIndex()); // VT: FIXME: This is rather redundant... switch ( hvacTypeCombo.getSelectedIndex() ) { case 0: // There's no cool/heat switch, and there's no // emergency heat emergencyBox.setEnabled(false); multistageBox.setEnabled(true); vsBox.setEnabled(true); energizeCombo.setEnabled(false); defaultModeCombo.setEnabled(false); driverPanel.driverCombo.setSelectedIndex(0); driverPanel.driverCombo.setEnabled(false); break; case 1: // It's all good emergencyBox.setEnabled(true); multistageBox.setEnabled(true); vsBox.setEnabled(true); energizeCombo.setEnabled(true); defaultModeCombo.setEnabled(true); driverPanel.driverCombo.setSelectedIndex(0); driverPanel.driverCombo.setEnabled(false); break; case 2: // There's no cool/heat switch, and I don't think // there'e emergency heat emergencyBox.setEnabled(false); multistageBox.setEnabled(true); vsBox.setEnabled(true); energizeCombo.setEnabled(false); defaultModeCombo.setEnabled(false); driverPanel.driverCombo.setSelectedIndex(0); driverPanel.driverCombo.setEnabled(false); break; case 3: // There's no cool/heat switch, and I doubt they can // be multistage and/or have blowers at all. Also, // this is the only one that can be driven by DTR // driver. emergencyBox.setEnabled(false); multistageBox.setEnabled(false); vsBox.setEnabled(false); energizeCombo.setEnabled(false); defaultModeCombo.setEnabled(false); driverPanel.driverCombo.setEnabled(true); break; } } else if ( source == energizeCombo ) { // VT: FIXME: It seems to me that there's nothing to be // done, but I'd better verify this } else if ( source == driverPanel.driverCombo ) { // VT: FIXME: Need to figure out what to do here } } /** * Get a type of the unit currently selected. * * @return Unit type as a string. */ public String getType() { // VT: FIXME: These must be made immutable, not free type // strings. switch ( hvacTypeCombo.getSelectedIndex() ) { case 0: return "ac"; case 1: return "heat pump"; case 2: return "furnace"; case 3: return "boiler"; default: complain(LOG_ERR, CH_WP, "No type selected???"); return "heat pump"; } } /** * Move the {@link #hvacTypeCombo HVAC type selector} into * appropriate position, corresponding to the unit type. * * @param type Unit type to select. */ public void selectType(String type) { if ( "ac".equals(type) ) { hvacTypeCombo.setSelectedIndex(0); } else if ( "heat pump".equals(type) ) { hvacTypeCombo.setSelectedIndex(1); } else if ( "furnace".equals(type) ) { hvacTypeCombo.setSelectedIndex(2); } else if ( "boiler".equals(type) ) { hvacTypeCombo.setSelectedIndex(3); } else { hvacTypeCombo.setSelectedIndex(1); complain(LOG_ERR, CH_WP, "Unknown HVAC type '" + type + "'"); } } public void selectEnergize(String energize) { if ( "cool".equals(energize) ) { energizeCombo.setSelectedIndex(0); } else if ( "heat".equals(energize) ) { energizeCombo.setSelectedIndex(1); } } public String getEnergize() { return (energizeCombo.getSelectedIndex() == 0) ? "cool" : "heat"; } public void selectDriver(String driver) { if ( "1-wire".equals(driver) ) { driverPanel.driverCombo.setSelectedIndex(0); } else if ( "serial".equals(driver) ) { driverPanel.driverCombo.setSelectedIndex(1); } } public String getDriver() { return (driverPanel.driverCombo.getSelectedIndex() == 0) ? "1-wire" : "serial"; } /** * Dump the unit descriptor content into the panel. * * @param ud Unit descriptor to display. */ private void syncFrom(UnitDescriptor ud) { String type = (String)ud.propertyMap.get("type"); Boolean _emergency = (Boolean)ud.propertyMap.get("emergency"); Boolean _multistage = (Boolean)ud.propertyMap.get("multistage"); Boolean _vs = (Boolean)ud.propertyMap.get("vs"); String energize = (String)ud.propertyMap.get("energize"); String driver = (String)ud.propertyMap.get("driver"); // Let's see if we have to set some defaults if ( type == null ) { type = "heat pump"; } boolean emergency = (_emergency == null) ? false : _emergency.booleanValue(); boolean multistage = (_multistage == null) ? false : _multistage.booleanValue(); boolean vs = (_vs == null) ? false : _vs.booleanValue(); if ( energize == null ) { energize = "cool"; } if ( driver == null ) { driver = "1-wire"; } // Now, let's set the controls selectType(type); emergencyBox.setSelected(emergency); multistageBox.setSelected(multistage); vsBox.setSelected(vs); selectEnergize(energize); selectDriver(driver); driverPanel.syncFrom(ud); complain(LOG_NOTICE, CH_WP, "unit2conf: " + ud.propertyMap); } /** * Dump the panel content into the unit descriptor. * * @param ud Unit descriptor to dump the panel content into. */ public void syncTo(UnitDescriptor ud) { ud.propertyMap.put("type", getType()); ud.propertyMap.put("emergency", new Boolean(emergencyBox.isSelected())); ud.propertyMap.put("multistage", new Boolean(multistageBox.isSelected())); ud.propertyMap.put("vs", new Boolean(vsBox.isSelected())); ud.propertyMap.put("energize", getEnergize()); ud.propertyMap.put("driver", getDriver()); driverPanel.syncTo(ud); complain(LOG_DEBUG, CH_WP, "conf2unit: " + ud.propertyMap); } } protected class HvacDriverPanel extends JPanel implements ActionListener, ItemListener, ListSelectionListener { private WizardPage owner; public final JComboBox driverCombo = new JComboBox(); private JPanel onewirePanel = new JPanel(); private JPanel dtrPanel = new JPanel(); public final JList switchList = new JList(); private JLabel modeLabel = new JLabel("Mode"); private JLabel compressorLabel = new JLabel("Compressor"); private JLabel fanLabel = new JLabel("Fan"); private JLabel modeAddressLabel = new JLabel(); private JLabel compressorAddressLabel = new JLabel(); private JLabel fanAddressLabel = new JLabel(); private JButton modeButton = new JButton("Assign"); private JButton compressorButton = new JButton("Assign"); private JButton fanButton = new JButton("Assign"); public HvacDriverPanel(WizardPage owner) { this.owner = owner; GridBagLayout layout = new GridBagLayout(); GridBagConstraints cs = new GridBagConstraints(); setLayout(layout);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -