/** * 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; import static lu.tudor.santec.i18n.Translatrix._; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; import javax.swing.DefaultListCellRenderer; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.ListCellRenderer; import javax.swing.ScrollPaneConstants; import avr8_burn_o_mat.AVR; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import de.lazyzero.kkMulticopterFlashTool.KKMulticopterFlashTool; import de.lazyzero.kkMulticopterFlashTool.utils.Firmware; import de.lazyzero.kkMulticopterFlashTool.utils.FirmwareCommit; import de.lazyzero.kkMulticopterFlashTool.utils.XMLwriter; import de.lazyzero.kkMulticopterFlashTool.utils.XmlReaderFirmwares; public class FirmwareCommitForm extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Dimension dimension = new Dimension(640, 540); private CellConstraints cc; private JLabel typeLabel; private XmlReaderFirmwares firmwareLoader; private Vector<String> types = new Vector<String>(); private JComboBox firmwareTypesCombobox; private JLabel versionLabel; private JTextField versionField; private JLabel authorLabel; private JTextField authorField; private JLabel controllerLabel; private JComboBox controllerCombobox; private Vector<AVR> avrs; private JLabel fileComment; private JLabel fileNameLabel; private JTextField fileNameField; private JLabel zipFileComment; private JLabel zipFileNameLabel; private JTextField zipFileNameField; private JTextArea comment; private JScrollPane commentPane; private Component commentLabel; private JLabel commentURLlabel; private JTextField commentURLField; private JLabel commentURLcomment; private JButton submitButton; private JButton cancelButton; public FirmwareCommitForm(XmlReaderFirmwares firmwareLoader){ this.firmwareLoader = firmwareLoader; init(); initGUI(); this.setVisible(true); } private void init() { avrs = new Vector<AVR>(); avrs.add(new AVR("ATmega48/P/PA","m48")); avrs.add(new AVR("ATmega88/P","m88")); avrs.add(new AVR("ATmega168/P/PA","m168")); avrs.add(new AVR("ATmega328P","m328p")); } private void initGUI() { JPanel panel = new JPanel(); // create the CellContraints cc = new CellConstraints(); // create the Layout for Panel this String panelColumns = "3dlu,pref,3dlu,pref,3dlu,pref,3dlu,fill:pref:grow,3dlu,pref,3dlu,pref,3dlu"; String panelRows = "3dlu,pref,3dlu,pref,3dlu,pref,6dlu,pref,3dlu,pref,6dlu,pref,6dlu,pref,3dlu,pref,3dlu,pref,6dlu,pref,3dlu,fill:pref,3dlu,pref,3dlu"; FormLayout panelLayout = new FormLayout(panelColumns, panelRows); panel.setLayout(panelLayout); // <firmware name="1 Sec Clock Test" value="1.0"> // <author name="Eric Flynn" /> // <controller name="m48" /> // <zipfile url="" /> // <file url="http://www.kkmulticopter.com/downloads/resources/KK_Clock_Test.hex" /> // <md5 value="" /> // </firmware> this.typeLabel = new JLabel(_("FirmwareCommitForm.typeLabel")); this.types.add(_("FirmwareCommitForm.selectType")); this.types.addAll(Firmware.getCategories(firmwareLoader.getFirmwares())); firmwareTypesCombobox = new JComboBox(types); firmwareTypesCombobox.setSelectedIndex(0); firmwareTypesCombobox.addActionListener(this); firmwareTypesCombobox.setEditable(true); if (System.getProperty("os.name").toLowerCase().contains("mac")){ firmwareTypesCombobox.setRenderer(new ListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { DefaultListCellRenderer df = new DefaultListCellRenderer(); JLabel r = (JLabel) df.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); r.setBackground(Color.LIGHT_GRAY); return r; } }); } this.versionLabel = new JLabel(_("FirmwareCommitForm.versionLabel")); this.versionField = new JTextField(); this.versionField.setColumns(4); this.controllerLabel = new JLabel(_("FirmwareCommitForm.controllerLabel")); this.controllerCombobox = new JComboBox(avrs); this.controllerCombobox.setSelectedIndex(0); this.authorLabel = new JLabel(_("FirmwareCommitForm.authorLabel")); this.authorField = new JTextField(); this.authorField.setColumns(14); this.fileComment = new JLabel(_("FirmwareCommitForm.fileComment")); this.fileNameLabel = new JLabel(_("FirmwareCommitForm.fileNameLabel")); this.fileNameField = new JTextField(); this.fileNameField.setColumns(14); this.zipFileComment = new JLabel(_("FirmwareCommitForm.zipFileComment")); this.zipFileNameLabel = new JLabel(_("FirmwareCommitForm.zipFileNameLabel")); this.zipFileNameField = new JTextField(); this.zipFileNameField.setColumns(14); this.commentURLcomment = new JLabel(_("FirmwareCommitForm.commentURLcomment")); this.commentURLlabel = new JLabel(_("FirmwareCommitForm.commentURLlabel")); this.commentURLField = new JTextField(); this.commentURLField.setColumns(14); this.commentLabel = new JLabel(_("FirmwareCommitForm.commentLabel")); this.comment = new JTextArea(); this.comment.setColumns(20); this.comment.setEditable(true); this.comment.setRows(11); this.commentPane = new JScrollPane(this.comment); this.commentPane.setAutoscrolls(true); this.commentPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); this.submitButton = new JButton(_("FirmwareCommitForm.submitButton")); this.submitButton.addActionListener(this); this.cancelButton = new JButton(_("FirmwareCommitForm.cancelButton")); this.cancelButton.addActionListener(this); this.add(panel); panel.add(typeLabel, cc.xy(2,2)); panel.add(firmwareTypesCombobox, cc.xyw(4,2,9)); panel.add(versionLabel, cc.xy(2, 4)); panel.add(versionField, cc.xy(4, 4)); panel.add(controllerLabel, cc.xy(6,4)); panel.add(controllerCombobox, cc.xyw(8, 4, 5)); panel.add(authorLabel, cc.xy(2, 6)); panel.add(authorField, cc.xyw(4, 6, 9)); panel.add(fileComment, cc.xyw(2,8,11)); panel.add(fileNameLabel, cc.xy(2, 10)); panel.add(fileNameField, cc.xyw(4, 10, 9)); panel.add(zipFileComment, cc.xyw(2,12,11)); panel.add(zipFileNameLabel, cc.xy(2, 14)); panel.add(zipFileNameField, cc.xyw(4, 14, 9)); panel.add(commentURLcomment, cc.xyw(2, 16, 11)); panel.add(commentURLlabel, cc.xy(2, 18)); panel.add(commentURLField, cc.xyw(4, 18, 9)); panel.add(commentLabel, cc.xyw(2, 20, 11)); panel.add(commentPane, cc.xyw(2, 22, 11)); panel.add(submitButton, cc.xy(10, 24)); panel.add(cancelButton, cc.xy(12, 24)); this.setTitle(_("FirmwareCommitForm.title")); this.add(panel); this.setPreferredSize(dimension); this.setLocationRelativeTo(KKMulticopterFlashTool.getFrames()[0]); this.pack(); } public void sendMail() { // TODO Auto-generated method stub } @Override public void actionPerformed(ActionEvent event) { if (event.getSource().equals(cancelButton)) { this.dispose(); } else if (event.getSource().equals(submitButton)) { FirmwareCommit fc = new FirmwareCommit( (String)firmwareTypesCombobox.getSelectedItem(), versionField.getText(), (AVR) controllerCombobox.getSelectedItem(), authorField.getText(), fileNameField.getText(), zipFileNameField.getText(), commentURLField.getText(), comment.getText()); XMLwriter xml = new XMLwriter(fc); xml.sendByEmail(); } } }