package eclipse.view.gui; import java.awt.BorderLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableModel; import eclipse.controller.util.TelemetrySettings; import eclipse.model.data.DataManager; import eclipse.model.data.Device; import eclipse.model.data.DeviceItem; import eclipse.view.gui.tab.TelemetryGraph; /** * This class is used to create the table that displays the car data The important section. * The main Idea of this Class is to have user specific Item to look at easilly * * We call it important because we just want to use it at all time. * * ***To remove something from that list, double click on it * * @author Marco * */ public class ImportantDeviceTable extends JPanel { private static final long serialVersionUID = -2652127495341433024L; protected JTable dataTable; protected DefaultTableModel model; protected List<DeviceItem> items; private static final String SETTINGS_FILE = "telemetrySettings.properties"; /** * Creates the panel */ public ImportantDeviceTable() { //List of all Item in that lis items = Collections.synchronizedList(new ArrayList<DeviceItem>()); // Builds a layout without borders between elements this.setLayout(new BorderLayout()); //The model for the table Without editing option model = new DefaultTableModel(0, 5) { private static final long serialVersionUID = -8430358070918350866L; public boolean isCellEditable(int row, int column) { return false;//This causes all cells to be not editable } }; dataTable = new JTable(model); //This is the mouse listner on double click Item get erased dataTable.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (SwingUtilities.isRightMouseButton(e)) { JTable target = (JTable)e.getSource(); int row = target.getSelectedRow(); if(row!=-1) { String deviceId = (String) dataTable.getModel().getValueAt(dataTable.getSelectedRow(), 0); deviceId=deviceId.substring(0,deviceId.indexOf("-")); String deviceItemId = (String) dataTable.getModel().getValueAt(dataTable.getSelectedRow(), 1); deviceItemId=deviceItemId.substring(0,deviceItemId.indexOf("-")); Device dev = DataManager.getInstance().getDeviceByID(Integer.valueOf(deviceId)); DeviceItem item = dev.getItemByID(Integer.valueOf(deviceItemId)); //Remove information on that list items.remove(item); model.removeRow(row); //REsize important table DesktopManager.getIstance().resizedMe(); // Remove device.item from setting file TelemetrySettings.getInstance().load(SETTINGS_FILE); String importantValuesRaw = TelemetrySettings.getInstance().getSetting("GUI_IMPORTANT_VALUES"); if (importantValuesRaw.contains("," + deviceId + "." + deviceItemId)) { importantValuesRaw = importantValuesRaw.replace("," + deviceId + "." + deviceItemId, ""); } else if (importantValuesRaw.contains(deviceId + "." + deviceItemId)) { importantValuesRaw = importantValuesRaw.replace(deviceId + "." + deviceItemId, ""); } TelemetrySettings.getInstance().setSetting("GUI_IMPORTANT_VALUES", importantValuesRaw); } } else if(e.getClickCount() == 2) { String deviceId = (String) dataTable.getModel().getValueAt(dataTable.getSelectedRow(), 0); deviceId=deviceId.substring(0,deviceId.indexOf("-")); String deviceItemId = (String) dataTable.getModel().getValueAt(dataTable.getSelectedRow(), 1); deviceItemId=deviceItemId.substring(0,deviceItemId.indexOf("-")); Device dev = DataManager.getInstance().getDeviceByID(Integer.valueOf(deviceId)); DeviceItem item = dev.getItemByID(Integer.valueOf(deviceItemId)); //Remove information on that list DesktopManager.getIstance().getTabbedPannel().addTab( new TelemetryGraph(Integer.valueOf(deviceId), Integer.valueOf(deviceItemId)),dev.getDeviceName()+"-"+item.getName()); } } }); // Set default width for the table columns dataTable.setFillsViewportHeight(true); dataTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); dataTable.getColumnModel().getColumn(0).setPreferredWidth(50); // Device dataTable.getColumnModel().getColumn(1).setPreferredWidth(60); // Item dataTable.getColumnModel().getColumn(2).setPreferredWidth(10); // Value dataTable.getColumnModel().getColumn(3).setPreferredWidth(2); // Last seen dataTable.getColumnModel().getColumn(4).setPreferredWidth(60); // Unit dataTable.getColumnModel().getColumn(0).setHeaderValue(TelemetrySettings.getInstance().getSetting("GUI_TABLE_COLUMN_DEVICE")); dataTable.getColumnModel().getColumn(1).setHeaderValue(TelemetrySettings.getInstance().getSetting("GUI_TABLE_COLUMN_DEVICE_ITEM")); dataTable.getColumnModel().getColumn(2).setHeaderValue(TelemetrySettings.getInstance().getSetting("GUI_TABLE_COLUMN_VALUE")); dataTable.getColumnModel().getColumn(3).setHeaderValue(TelemetrySettings.getInstance().getSetting("GUI_TABLE_COLUMN_UNIT")); dataTable.getColumnModel().getColumn(4).setHeaderValue(TelemetrySettings.getInstance().getSetting("GUI_TABLE_COLUMN_LAST_SEEN")); JScrollPane scrollPane = new JScrollPane(dataTable); this.add(scrollPane); } /** * This method is called every second by the DesktopManager to add one line to the table */ public void updateTable() { int i=0; for(DeviceItem item : items){ String S = new SimpleDateFormat("hh:mm:ss:SS").format(item.getLastSeen()); dataTable.getModel().setValueAt(item.getLastData(), i, 2); dataTable.getModel().setValueAt(S, i, 4); i++; } } /** * This method is used to add an Item to the important table * * * @param itemCurrent * @param deviceCurrent */ public void addItem(DeviceItem itemCurrent, Device deviceCurrent){ if(!items.contains(itemCurrent)){ String lbl1; String lbl2; items.add(itemCurrent); lbl1=deviceCurrent.getDeviceId()+"-"+deviceCurrent.getDeviceName(); lbl2=itemCurrent.getItemId()+"-"+itemCurrent.getName(); model.addRow(new String[5]); dataTable.getModel().setValueAt(lbl1, items.size()-1, 0); dataTable.getModel().setValueAt(lbl2, items.size()-1, 1); dataTable.getModel().setValueAt(itemCurrent.getUnit(), items.size()-1, 3); DesktopManager.getIstance().resizedMe(); updateTable(); } } public int getHeightCustom(){ if(model.getRowCount()==0) return 0; return (model.getRowCount()*dataTable.getRowHeight())+21; } public void remItem(DeviceItem itemCurrent, Device dev) { if(!items.contains(itemCurrent)){ items.remove(itemCurrent); DesktopManager.getIstance().resizedMe(); updateTable(); } } }