/** * KKMulticopterFlashTool, a avrdude GUI for flashing KK boards and other * equipment. * Copyright (C) 2011 Christian Moll * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.lazyzero.kkMulticopterFlashTool.gui.widgets; import static lu.tudor.santec.i18n.Translatrix._; import java.awt.Color; import java.awt.Component; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.ListCellRenderer; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import de.lazyzero.kkMulticopterFlashTool.KKMulticopterFlashTool; import de.lazyzero.kkMulticopterFlashTool.utils.Firmware; public class FirmwareListCellRenderer implements ListCellRenderer { private static final long serialVersionUID = 1L; private boolean hasPot; private boolean hasLCD; private boolean hasPIEZO; private boolean hasMEMS; private boolean hasACC; private boolean hasCPPM; private boolean hasLVA; @Override public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JPanel panel = new JPanel(); // create the CellContraints CellConstraints cc = new CellConstraints(); // create the Layout for Panel this String panelColumns = "3dlu,fill:pref:grow"; String panelRows = "1dlu,pref:grow,2dlu,pref:grow,2dlu,pref:grow,2dlu,pref:grow,1dlu"; FormLayout panelLayout = new FormLayout(panelColumns, panelRows); panel.setLayout(panelLayout); if (value == null) { value = _("firmware.FirmwareCombobox.nonAvailable"); } Color bg = isSelected ? list.getSelectionBackground() : list.getBackground().brighter(); Color fg = Color.black; if (value instanceof Firmware) setRequirementsAndFeatures((Firmware)value); panel.setBackground(bg); if (!System.getProperty("os.name").toLowerCase().contains("mac")) { fg = isSelected ? list.getSelectionForeground() : list.getForeground(); panel.setForeground(fg); } panel.setFont(list.getFont()); if (value instanceof Firmware) { Firmware f = ((Firmware)value); JLabel line1; if (f.getController().equals(KKMulticopterFlashTool.WIIESC) || f.getController().equals(KKMulticopterFlashTool.WIIESC_EEPROM)){ line1 = new JLabel(f.getName() + " " + f.getVersion() + " " + f.getVersionName() + " by " + f.getAuthor()); } else { String versionPrefix = f.getVersion().startsWith("daily")?" ":" V"; line1 = new JLabel(f.getName() + versionPrefix + f.getVersion() + " " + f.getVersionName() + " by " + f.getAuthor()); } line1.setForeground(fg); JLabel line2 = new JLabel(f.getServer()); line2.setFont(line2.getFont().deriveFont(line2.getFont().getSize2D()-2)); line2.setForeground(fg); panel.add(line1, cc.xy(2, 2)); panel.add(line2, cc.xy(2, 4)); if (f.getTarget() == Firmware.TARGET_KK) { JPanel line3 = getLine(f, fg, bg); panel.add(line3, cc.xy(2, 6)); } if (f.getTarget() == Firmware.TARGET_OPENAERO) { JPanel line3 = getLine(f, fg, bg); JLabel line4 = new JLabel(f.getFileName()); line4.setFont(line4.getFont().deriveFont(line4.getFont().getSize2D()-2)); line4.setForeground(fg); panel.add(line3, cc.xy(2, 6)); panel.add(line4, cc.xy(2, 8)); } if (f.getTarget() == Firmware.TARGET_RX3S) { JPanel line3 = getLine(f, fg, bg); panel.add(line3, cc.xy(2, 6)); } } else { JLabel warning = new JLabel((String) value); warning.setForeground(fg); panel.add(warning, cc.xy(2, 2)); } return panel; } private JPanel getLine(Firmware firmware, Color fg, Color bg) { int target = firmware.getTarget(); JPanel panel = new JPanel(); // create the CellContraints CellConstraints cc = new CellConstraints(); // create the Layout for Panel this String panelRows = "pref"; if (target == Firmware.TARGET_KK || target == Firmware.TARGET_OPENAERO) { String panelColumns = "pref,3dlu,pref,3dlu,pref,3dlu,pref,3dlu,pref,3dlu,pref,3dlu,pref"; FormLayout panelLayout = new FormLayout(panelColumns, panelRows); panel.setLayout(panelLayout); panel.setForeground(fg); panel.setBackground(bg); panel.add(new ToggledLable("pot", hasPot, fg, bg), cc.xy(1, 1)); panel.add(new ToggledLable("LCD", hasLCD, fg, bg), cc.xy(3, 1)); panel.add(new ToggledLable("piezo", hasPIEZO, fg, bg), cc.xy(5, 1)); panel.add(new ToggledLable("MEMS", hasMEMS, fg, bg), cc.xy(7, 1)); panel.add(new ToggledLable("acc", hasACC, fg, bg), cc.xy(9, 1)); panel.add(new ToggledLable("CPPM", hasCPPM, fg, bg), cc.xy(11, 1)); panel.add(new ToggledLable("LVA", hasLVA, fg, bg), cc.xy(13, 1)); } else if (target == Firmware.TARGET_RX3S) { String panelColumns = "pref"; FormLayout panelLayout = new FormLayout(panelColumns, panelRows); panel.setLayout(panelLayout); panel.setForeground(fg); panel.setBackground(bg); panel.add(new ToggledLable(_("flightstab.voltageWarning"), true, fg, bg), cc.xy(1, 1)); } else { } panel.setOpaque(true); return panel; } private void setRequirementsAndFeatures(Firmware firmware) { int features = firmware.getFeatures(); int target = firmware.getTarget(); if (target == Firmware.TARGET_KK || target == Firmware.TARGET_OPENAERO) { if (features != -1) { hasPot = (features & Firmware.POT) != 0; hasLCD = (features & Firmware.LCD) != 0; hasPIEZO = (features & Firmware.PIEZO) != 0; hasMEMS = (features & Firmware.MEMS) != 0; hasACC = (features & Firmware.ACC) != 0; hasCPPM = (features & Firmware.CPPM) != 0; hasLVA = (features & Firmware.LVA) != 0; } else { hasPot = false; hasLCD = false; hasPIEZO = false; hasMEMS = false; hasACC = false; hasCPPM = false; hasLVA = false; } } else if (target == Firmware.TARGET_ESC) { } } }