diff --git a/src/enginuity/NewGUI/NewGUI.java b/src/enginuity/NewGUI/NewGUI.java index dd382bc9..a74efd3b 100644 --- a/src/enginuity/NewGUI/NewGUI.java +++ b/src/enginuity/NewGUI/NewGUI.java @@ -244,7 +244,7 @@ public class NewGUI extends JFrame implements ActionListener, TreeSelectionListe } } - public void displayInternalFrameTable(Double[][] data, TableMetaData tableMetaData){ + public void displayInternalFrameTable(Object[][] data, TableMetaData tableMetaData){ this.rightDesktopPane.add(data, tableMetaData); } diff --git a/src/enginuity/NewGUI/data/TableMetaData.java b/src/enginuity/NewGUI/data/TableMetaData.java index 9da7cf58..01d58fb7 100644 --- a/src/enginuity/NewGUI/data/TableMetaData.java +++ b/src/enginuity/NewGUI/data/TableMetaData.java @@ -1,11 +1,12 @@ package enginuity.NewGUI.data; +import java.awt.Dimension; import java.text.DecimalFormat; import enginuity.NewGUI.interfaces.TuningEntity; public class TableMetaData { - // Type of node + // Type of table public static final int DATA_1D = 0; public static final int DATA_2D = 1; public static final int DATA_3D = 3; @@ -13,19 +14,35 @@ public class TableMetaData { public static final int RESERVED_ROOT = 5; public static final int CATEGORY = 6; + //Frame Dimensions + private static final Dimension Data3DDimension = new Dimension(500, 500); + private static final Dimension Data2DDimension = new Dimension(500, 200); + private static final Dimension Data1DDimension = new Dimension(500, 60); + + + // ********************** // Constructor set values + // ********************** + + // Table data related private double maxValue; private double minValue; - private String[] columnLabels; - private String[] rowLabels; private Object[] ignoredValues; private boolean isInvertedColoring; + + // Table labels etc private String tableName; + private String[] columnLabels; + private String[] rowLabels; private String xAxisLabel; private String yAxisLabel; private String tableIdentifier; private String tableGroup; + + // Is this a table1d, table2d, table3d private int dimensions; + + // What tuning entity should table decribed by this meta data refer to? private TuningEntity parentTuningEntity; // Optional setters @@ -109,4 +126,16 @@ public class TableMetaData { public String getYAxisLabel() { return yAxisLabel; } + + public static Dimension getData1DDimension() { + return Data1DDimension; + } + + public static Dimension getData2DDimension() { + return Data2DDimension; + } + + public static Dimension getData3DDimension() { + return Data3DDimension; + } } diff --git a/src/enginuity/NewGUI/desktop/EDesktopPane.java b/src/enginuity/NewGUI/desktop/EDesktopPane.java index d77b71ee..7becfafb 100644 --- a/src/enginuity/NewGUI/desktop/EDesktopPane.java +++ b/src/enginuity/NewGUI/desktop/EDesktopPane.java @@ -51,7 +51,7 @@ public class EDesktopPane extends JDesktopPane{ } } - public Component add(Double[][] data, TableMetaData tableMetaData) { + public Component add(Object[][] data, TableMetaData tableMetaData) { Point p; int w; int h; @@ -61,14 +61,17 @@ public class EDesktopPane extends JDesktopPane{ EInternalFrame tempFrame = null; for(int i = 0; i < allFrames.length ; i++){ tempFrame = (EInternalFrame)allFrames[i]; + + //Does the fram we're adding already exist? if(tempFrame.getTableMetaData().getTableIdentifier() == tableMetaData.getTableIdentifier()){ addFrame = false; break; } } + // Frame does not exist already, now add if(addFrame){ - EInternalFrame frame = new EInternalFrame(tableMetaData, data, new Dimension(800, 600)); + EInternalFrame frame = new EInternalFrame(tableMetaData, data); Component retval = super.add(frame); checkDesktopSize(); if (allFrames.length > 0) { @@ -88,7 +91,7 @@ public class EDesktopPane extends JDesktopPane{ if (h < frame.getMinimumSize().getHeight()) { h = (int) frame.getMinimumSize().getHeight(); } - frame.setSize(w, h); + //frame.setSize(w, h); } moveToFront(frame); frame.setVisible(true); @@ -99,6 +102,8 @@ public class EDesktopPane extends JDesktopPane{ } return retval; } + + // Since frame already exists, toggle its visibility else{ boolean isVisible = tempFrame.isVisible(); // Toggle the visibility of the frame @@ -129,7 +134,7 @@ public class EDesktopPane extends JDesktopPane{ int frameHeight = (getBounds().height - 5) - allFrames.length * FRAME_OFFSET; int frameWidth = (getBounds().width - 5) - allFrames.length * FRAME_OFFSET; for (int i = allFrames.length - 1; i >= 0; i--) { - allFrames[i].setSize(frameWidth, frameHeight); + //allFrames[i].setSize(frameWidth, frameHeight); allFrames[i].setLocation(x, y); x = x + FRAME_OFFSET; y = y + FRAME_OFFSET; @@ -145,7 +150,7 @@ public class EDesktopPane extends JDesktopPane{ int frameHeight = getBounds().height / allFrames.length; int y = 0; for (int i = 0; i < allFrames.length; i++) { - allFrames[i].setSize(getBounds().width, frameHeight); + //allFrames[i].setSize(getBounds().width, frameHeight); allFrames[i].setLocation(0, y); y = y + frameHeight; } diff --git a/src/enginuity/NewGUI/etable/EInternalFrame.java b/src/enginuity/NewGUI/etable/EInternalFrame.java index c826cdb2..99fe7dff 100644 --- a/src/enginuity/NewGUI/etable/EInternalFrame.java +++ b/src/enginuity/NewGUI/etable/EInternalFrame.java @@ -28,6 +28,9 @@ import javax.swing.table.TableModel; import enginuity.NewGUI.data.ApplicationStateManager; import enginuity.NewGUI.data.TableMetaData; +import enginuity.NewGUI.etable.dataJPanel.DataJPanel1DString; +import enginuity.NewGUI.etable.dataJPanel.DataJPanelInterface; +import enginuity.NewGUI.etable.dataJPanel.DataJPanel3DDouble; import enginuity.NewGUI.etable.text.RotatedLabel; import enginuity.NewGUI.tools.ClipBoardCopy; import enginuity.NewGUI.tools.FitData; @@ -35,155 +38,70 @@ import enginuity.swing.VTextIcon; public class EInternalFrame extends JInternalFrame implements InternalFrameListener, ActionListener{ private Stack savedData = new Stack(); - - private ETable eTable; private TableMetaData tableMetaData; - private ClipBoardCopy excelCopy; - private JPanel labelJPanel = new JPanel(); + private DataJPanelInterface dataJPanel = null; - public EInternalFrame(TableMetaData tableMetaData, Double[][] data, Dimension tableDimensions){ + public EInternalFrame(TableMetaData tableMetaData, Object[][] data){ super(tableMetaData.getTableName()+" "+tableMetaData.getTableGroup(), true, true, true, true); this.tableMetaData = tableMetaData; + + // Pull the appropriate jpanel based on tableMetaData + if(tableMetaData.getNodeType() == TableMetaData.DATA_1D){ + if(data[0][0] instanceof String){ + dataJPanel = new DataJPanel1DString(tableMetaData, data); + } + }else if(tableMetaData.getNodeType() == TableMetaData.DATA_2D){ + + }else if(tableMetaData.getNodeType() == TableMetaData.DATA_3D){ + + if(data[0][0] instanceof Double){ + dataJPanel = new DataJPanel3DDouble(tableMetaData, data); + } + + } - // Save initial data - this.savedData.push(new ETableSaveState(data)); - - // Set the frame icon + // Ensure we set the appropriate frame dimensions + if(tableMetaData.getNodeType() == TableMetaData.DATA_1D){ + this.setSize(tableMetaData.getData1DDimension()); + }else if(tableMetaData.getNodeType() == TableMetaData.DATA_2D){ + this.setSize(tableMetaData.getData2DDimension()); + }else if(tableMetaData.getNodeType() == TableMetaData.DATA_3D){ + this.setSize(tableMetaData.getData3DDimension()); + } + + + // ***************************** + // Build up final internal frame + // ***************************** Image img = Toolkit.getDefaultToolkit().getImage("graphics/enginuity-ico.gif"); ImageIcon imgIcon = new ImageIcon(img); this.setFrameIcon(imgIcon); - - TableColumnModel columnModel = new DefaultTableColumnModel(){ - boolean first = true; - public void addColumn(TableColumn tc){ - if(first){ - first = false; - return; - } - //tc.setMinWidth(30); - //tc.setMaxWidth(30); - super.addColumn(tc); - } - }; - - TableColumnModel rowHeaderModel = new DefaultTableColumnModel(){ - boolean first = true; - public void addColumn(TableColumn tc){ - if(first){ - tc.setMaxWidth(35); - super.addColumn(tc); - first = false; - } - } - }; - - TableModel tableModel = new ETableRowLabel(data[0].length, tableMetaData.getRowLabels()); - eTable = new ETable(tableMetaData, data, columnModel); - eTable.setBackground(Color.LIGHT_GRAY); - excelCopy = new ClipBoardCopy(eTable); - - JTable headerColumn = new JTable(tableModel, rowHeaderModel); - headerColumn.setBackground(new Color(236, 233, 216)); - eTable.createDefaultColumnsFromModel(); - headerColumn.createDefaultColumnsFromModel(); - eTable.setSelectionModel(headerColumn.getSelectionModel()); - - headerColumn.setMaximumSize(new Dimension(40, 10000)); - headerColumn.setColumnSelectionAllowed(false); - headerColumn.setCellSelectionEnabled(false); - - JViewport jv = new JViewport(); - jv.setView(headerColumn); - jv.setPreferredSize(headerColumn.getMaximumSize()); - - headerColumn.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - - JScrollPane scrollPane = new JScrollPane(eTable); - scrollPane.setRowHeader(jv); - scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); - scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - - - // Add the toolbar - ETableToolBar toolBar = new ETableToolBar(tableMetaData, eTable); - - - // Add internal frame - this.setLayout(new BorderLayout()); - this.setJMenuBar(new ETableMenuBar(this)); - this.add(toolBar, BorderLayout.NORTH); - - // Table Title - JLabel titleJLabel = new JLabel(tableMetaData.getTableName()); - titleJLabel.setHorizontalAlignment(JLabel.CENTER); - - // X Label - JLabel xAxisJLabel = new JLabel(tableMetaData.getXAxisLabel()); - xAxisJLabel.setHorizontalAlignment(JLabel.CENTER); - - // Y Label - RotatedLabel yAxisJLabel = new RotatedLabel(tableMetaData.getYAxisLabel()); - yAxisJLabel.setHorizontalAlignment(JLabel.CENTER); - - this.labelJPanel.setLayout(new BorderLayout()); - this.labelJPanel.add(titleJLabel, BorderLayout.NORTH); - this.labelJPanel.add(xAxisJLabel, BorderLayout.SOUTH); - this.labelJPanel.add(yAxisJLabel, BorderLayout.WEST); - - this.labelJPanel.add(scrollPane, BorderLayout.CENTER); - this.add(this.labelJPanel, BorderLayout.CENTER); - - - this.setSize(tableDimensions); this.setVisible(true); + this.setLayout(new BorderLayout()); this.setDefaultCloseOperation(JInternalFrame.DO_NOTHING_ON_CLOSE); this.addInternalFrameListener(this); + this.add((JPanel)this.dataJPanel, BorderLayout.CENTER); + this.setJMenuBar(this.dataJPanel.getMenuBar()); + this.add(this.dataJPanel.getToolBar(), BorderLayout.NORTH); } - public boolean dataChanged(){ - //if(this.eTable.getTheModel().getData() != this.savedData.get(savedData.size()-1).getData()){ - if(!compareMe(this.eTable.getTheModel().getData(), this.savedData.get(savedData.size()-1).getData())){ - System.out.println("Data not the same."); - return true; - } - - return false; - } /** - * Helper method to compare data in two arrays. Must be a better wat to do this. - * .equals and == does not work for some reason. - * @param data1 - * @param data2 + * Check to see if data relevant to this frame has changed + * * @return */ - private boolean compareMe(Double[][] data1, Double[][] data2){ - int width = data1.length; - int height = data1[0].length; - - - for(int i = 0; i < width; i++){ - for(int j = 0; j < height; j++){ - if((data1[i][j] - data2[i][j]) != 0){ - return false; - } - } - } - return true; - } - - public Double[][] getTableData(){ - Double[][] data = this.eTable.getTheModel().getData(); - return data; + public boolean dataChanged(){ + return this.dataJPanel.dataChanged(); } public void saveDataToParentTuningEntity(){ - this.tableMetaData.getParentTuningEntity().setTableData(this.tableMetaData.getTableIdentifier(), this.eTable.getTheModel().getData()); + this.tableMetaData.getParentTuningEntity().setTableData(this.tableMetaData.getTableIdentifier(), this.dataJPanel.getData()); } public void saveDataState(){ - this.savedData.push(new ETableSaveState(this.getTableData())); + this.savedData.push(new ETableSaveState(this.dataJPanel.getData())); } public void revertDataState(){ @@ -197,8 +115,8 @@ public class EInternalFrame extends JInternalFrame implements InternalFrameListe } - public void setTableData(Double[][] data){ - this.eTable.getTheModel().replaceData(data); + public void setTableData(Object[][] data){ + this.dataJPanel.replaceData(data); } public void internalFrameOpened(InternalFrameEvent arg0) { @@ -239,10 +157,12 @@ public class EInternalFrame extends JInternalFrame implements InternalFrameListe } + public TableMetaData getTableMetaData() { return tableMetaData; } - + + /* public ETable getETable() { return eTable; } @@ -250,4 +170,5 @@ public class EInternalFrame extends JInternalFrame implements InternalFrameListe public ClipBoardCopy getExcelCopy() { return excelCopy; } + */ } diff --git a/src/enginuity/NewGUI/etable/ETable.java b/src/enginuity/NewGUI/etable/ETable.java index 203e36fc..b9841323 100644 --- a/src/enginuity/NewGUI/etable/ETable.java +++ b/src/enginuity/NewGUI/etable/ETable.java @@ -23,7 +23,7 @@ public class ETable extends JTable{ private Vector tempSelectedCells = new Vector(); private TableMetaData tableMetaData; - ETable(TableMetaData metaData, Double[][] data, TableColumnModel cm){ + public ETable(TableMetaData metaData, Double[][] data, TableColumnModel cm){ this.theModel = new ETableModel(metaData, data); super.setColumnModel(cm); super.setModel(this.theModel); diff --git a/src/enginuity/NewGUI/etable/ETableMenuBar.java b/src/enginuity/NewGUI/etable/ETableMenuBar.java index f9d848f6..59614564 100644 --- a/src/enginuity/NewGUI/etable/ETableMenuBar.java +++ b/src/enginuity/NewGUI/etable/ETableMenuBar.java @@ -12,6 +12,8 @@ import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; +import enginuity.NewGUI.etable.dataJPanel.DataJPanelInterface; + public class ETableMenuBar extends JMenuBar implements ActionListener{ @@ -26,9 +28,9 @@ public class ETableMenuBar extends JMenuBar implements ActionListener{ private JMenuItem copySelection = new JMenuItem("Copy Selection"); private JMenuItem paste = new JMenuItem("Paste Table Data"); - private EInternalFrame parentEInternalFrame; + private DataJPanelInterface parentEInternalFrame; - public ETableMenuBar(EInternalFrame parentFrame){ + public ETableMenuBar(DataJPanelInterface parentFrame){ this.parentEInternalFrame = parentFrame; // Setup the GUI below @@ -67,27 +69,22 @@ public class ETableMenuBar extends JMenuBar implements ActionListener{ } else if(e.getSource() == this.closeItem){ - try { - this.parentEInternalFrame.setClosed(true); - } catch (PropertyVetoException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } + this.parentEInternalFrame.setClosed(true); } else if(e.getSource() == this.copySelection){ - this.parentEInternalFrame.getExcelCopy().copySelectedTableData(); + this.parentEInternalFrame.copySelectedTableData(); } else if(e.getSource() == this.copyTable){ - this.parentEInternalFrame.getExcelCopy().copyEntireTable(); + this.parentEInternalFrame.copyEntireTable(); } else if(e.getSource() == this.paste){ - this.parentEInternalFrame.getExcelCopy().pasteTableData(); + this.parentEInternalFrame.pasteTableData(); } } diff --git a/src/enginuity/NewGUI/etable/ETableSaveState.java b/src/enginuity/NewGUI/etable/ETableSaveState.java index 2a784cef..d09c6729 100644 --- a/src/enginuity/NewGUI/etable/ETableSaveState.java +++ b/src/enginuity/NewGUI/etable/ETableSaveState.java @@ -1,19 +1,19 @@ package enginuity.NewGUI.etable; public class ETableSaveState { - private Double[][] internalData; + private Object[][] internalData; //private String name; - public ETableSaveState(Double[][] data){ + public ETableSaveState(Object[][] data){ //this.name = name; int width = data.length; int height = data[0].length; //System.out.println("Dimensions: w:"+ width+" h:"+height); - this.internalData = new Double[width][height]; + this.internalData = new Object[width][height]; for(int i = 0; i < width; i ++){ for(int j=0; j < height; j++){ - double tempData = data[i][j]; + Object tempData = data[i][j]; this.internalData[i][j] = tempData; } } @@ -21,7 +21,7 @@ public class ETableSaveState { System.out.println("Sample: "+this.internalData[0][0]); } - public Double[][] getData(){ + public Object[][] getData(){ return this.internalData; } diff --git a/src/enginuity/NewGUI/etable/dataJPanel/DataJPanel1DString.java b/src/enginuity/NewGUI/etable/dataJPanel/DataJPanel1DString.java new file mode 100644 index 00000000..5fe2879b --- /dev/null +++ b/src/enginuity/NewGUI/etable/dataJPanel/DataJPanel1DString.java @@ -0,0 +1,89 @@ +package enginuity.NewGUI.etable.dataJPanel; + +import java.awt.BorderLayout; + +import javax.swing.JMenuBar; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JToolBar; + +import enginuity.NewGUI.data.TableMetaData; + +public class DataJPanel1DString extends JPanel implements DataJPanelInterface{ + + private TableMetaData tableMetaData; + private String initialStringValue; + private JTextArea dataTextArea; + + public DataJPanel1DString(TableMetaData tableMetaData, Object[][] data) { + this.tableMetaData = tableMetaData; + this.initialStringValue = (String)data[0][0]; + + this.setLayout(new BorderLayout()); + + dataTextArea = new JTextArea((String)data[0][0]); + JScrollPane dataScrollPane = new JScrollPane(dataTextArea); + dataScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + dataScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + + this.add(dataScrollPane, BorderLayout.CENTER); + } + + public JToolBar getToolBar() { + // TODO Auto-generated method stub + return new JToolBar(); + } + + public JMenuBar getMenuBar() { + // TODO Auto-generated method stub + return new JMenuBar(); + } + + public boolean dataChanged() { + // TODO Auto-generated method stub + return this.initialStringValue.equals(this.dataTextArea.getText()); + } + + public void copySelectedTableData() { + // TODO Auto-generated method stub + + } + + public void copyEntireTable() { + // TODO Auto-generated method stub + + } + + public void pasteTableData() { + // TODO Auto-generated method stub + + } + + public void setClosed(boolean value) { + // TODO Auto-generated method stub + + } + + public void revertDataState() { + // TODO Auto-generated method stub + + } + + public void saveDataState() { + // TODO Auto-generated method stub + + } + + public void replaceData(Object[][] newData) { + // TODO Auto-generated method stub + this.dataTextArea.setText((String)newData[0][0]); + } + + public Object[][] getData() { + Object[][] temp = new Object[1][1]; + temp[0][0] = this.dataTextArea.getText(); + return temp; + } + +} diff --git a/src/enginuity/NewGUI/etable/dataJPanel/DataJPanel3DDouble.java b/src/enginuity/NewGUI/etable/dataJPanel/DataJPanel3DDouble.java new file mode 100644 index 00000000..ad06f0f2 --- /dev/null +++ b/src/enginuity/NewGUI/etable/dataJPanel/DataJPanel3DDouble.java @@ -0,0 +1,208 @@ +package enginuity.NewGUI.etable.dataJPanel; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.util.Stack; + +import javax.swing.JLabel; +import javax.swing.JMenuBar; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JToolBar; +import javax.swing.JViewport; +import javax.swing.table.DefaultTableColumnModel; +import javax.swing.table.TableColumn; +import javax.swing.table.TableColumnModel; +import javax.swing.table.TableModel; + +import enginuity.NewGUI.data.TableMetaData; +import enginuity.NewGUI.etable.ETable; +import enginuity.NewGUI.etable.ETableMenuBar; +import enginuity.NewGUI.etable.ETableRowLabel; +import enginuity.NewGUI.etable.ETableSaveState; +import enginuity.NewGUI.etable.ETableToolBar; +import enginuity.NewGUI.etable.text.RotatedLabel; +import enginuity.NewGUI.tools.ClipBoardCopy; + +public class DataJPanel3DDouble extends JPanel implements DataJPanelInterface{ + private Stack savedData = new Stack(); + private ETable eTable; + private TableMetaData tableMetaData; + private ClipBoardCopy excelCopy; + private ETableMenuBar eTableMenuBar = new ETableMenuBar(this); + private ETableToolBar toolBar = null; + + public DataJPanel3DDouble(TableMetaData tableMetaData, Object[][] data) { + + Double[][] newData = null; + if(data[0][0] instanceof Double){ + // Typical 2D & 3D data + newData = (Double[][])data; + } + + // Save initial data + this.savedData.push(new ETableSaveState(newData)); + + + TableColumnModel columnModel = new DefaultTableColumnModel(){ + boolean first = true; + public void addColumn(TableColumn tc){ + if(first){ + first = false; + return; + } + //tc.setMinWidth(30); + //tc.setMaxWidth(30); + super.addColumn(tc); + } + }; + + TableColumnModel rowHeaderModel = new DefaultTableColumnModel(){ + boolean first = true; + public void addColumn(TableColumn tc){ + if(first){ + tc.setMaxWidth(35); + super.addColumn(tc); + first = false; + } + } + }; + + TableModel tableModel = new ETableRowLabel(data[0].length, tableMetaData.getRowLabels()); + eTable = new ETable(tableMetaData, newData, columnModel); + this.toolBar = new ETableToolBar(tableMetaData, eTable); + + + eTable.setBackground(Color.LIGHT_GRAY); + excelCopy = new ClipBoardCopy(eTable); + + JTable headerColumn = new JTable(tableModel, rowHeaderModel); + headerColumn.setBackground(new Color(236, 233, 216)); + eTable.createDefaultColumnsFromModel(); + headerColumn.createDefaultColumnsFromModel(); + eTable.setSelectionModel(headerColumn.getSelectionModel()); + + headerColumn.setMaximumSize(new Dimension(40, 10000)); + headerColumn.setColumnSelectionAllowed(false); + headerColumn.setCellSelectionEnabled(false); + + JViewport jv = new JViewport(); + jv.setView(headerColumn); + jv.setPreferredSize(headerColumn.getMaximumSize()); + + headerColumn.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + + JScrollPane scrollPane = new JScrollPane(eTable); + scrollPane.setRowHeader(jv); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + + + // Table Title + JLabel titleJLabel = new JLabel(tableMetaData.getTableName()); + titleJLabel.setHorizontalAlignment(JLabel.CENTER); + + // X Label + JLabel xAxisJLabel = new JLabel(tableMetaData.getXAxisLabel()); + xAxisJLabel.setHorizontalAlignment(JLabel.CENTER); + + // Y Label + RotatedLabel yAxisJLabel = new RotatedLabel(tableMetaData.getYAxisLabel()); + yAxisJLabel.setHorizontalAlignment(JLabel.CENTER); + + this.setLayout(new BorderLayout()); + this.add(titleJLabel, BorderLayout.NORTH); + this.add(xAxisJLabel, BorderLayout.SOUTH); + this.add(yAxisJLabel, BorderLayout.WEST); + + this.add(scrollPane, BorderLayout.CENTER); + } + + public JToolBar getToolBar(){ + return this.toolBar; + } + + public JMenuBar getMenuBar(){ + return this.eTableMenuBar; + } + + /** + * Check to see if data relevant to this frame has changed + * + * @return + */ + public boolean dataChanged(){ + //if(this.eTable.getTheModel().getData() != this.savedData.get(savedData.size()-1).getData()){ + if(!compareMe(this.eTable.getTheModel().getData(), this.savedData.get(savedData.size()-1).getData())){ + System.out.println("Data not the same."); + return true; + } + + return false; + } + + + /** + * Helper method to compare data in two arrays. Must be a better way to do this. + * .equals and == does not work for some reason. + * @param data1 + * @param data2 + * @return + */ + private boolean compareMe(Double[][] data1, Object[][] data2){ + int width = data1.length; + int height = data1[0].length; + + + for(int i = 0; i < width; i++){ + for(int j = 0; j < height; j++){ + if((data1[i][j] - (Double)data2[i][j]) != 0){ + return false; + } + } + } + return true; + } + + public void copySelectedTableData() { + // TODO Auto-generated method stub + + } + + public void copyEntireTable() { + // TODO Auto-generated method stub + + } + + public void pasteTableData() { + // TODO Auto-generated method stub + + } + + public void setClosed(boolean value) { + // TODO Auto-generated method stub + + } + + public void revertDataState() { + // TODO Auto-generated method stub + + } + + public void saveDataState() { + // TODO Auto-generated method stub + + } + + public void replaceData(Object[][] newData) { + // TODO Auto-generated method stub + + } + + public Object[][] getData() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/enginuity/NewGUI/etable/dataJPanel/DataJPanelInterface.java b/src/enginuity/NewGUI/etable/dataJPanel/DataJPanelInterface.java new file mode 100644 index 00000000..a7d088e8 --- /dev/null +++ b/src/enginuity/NewGUI/etable/dataJPanel/DataJPanelInterface.java @@ -0,0 +1,28 @@ +package enginuity.NewGUI.etable.dataJPanel; + +import javax.swing.JMenuBar; +import javax.swing.JToolBar; + +public interface DataJPanelInterface { + public JToolBar getToolBar(); + + public JMenuBar getMenuBar(); + + public boolean dataChanged(); + + public void copySelectedTableData(); + + public void copyEntireTable(); + + public void pasteTableData(); + + public void setClosed(boolean value); + + public void revertDataState(); + + public void saveDataState(); + + public void replaceData(Object[][] newData); + + public Object[][] getData(); +} diff --git a/src/enginuity/NewGUI/interfaces/TuningEntity.java b/src/enginuity/NewGUI/interfaces/TuningEntity.java index c90fe42a..564fb35c 100644 --- a/src/enginuity/NewGUI/interfaces/TuningEntity.java +++ b/src/enginuity/NewGUI/interfaces/TuningEntity.java @@ -19,14 +19,14 @@ public interface TuningEntity extends ActionListener{ // Return the toolbar public JToolBar getToolBar(); - // Return double data based on passed table name - public Double[][] getTableData(String tableName); + // Return object data based on passed table name + public Object[][] getTableData(String tableName); // Remove tuning group public void removeTuningGroup(String tuningGroup); // Push back modified data to the tuning entity - public void setTableData(String tableIdentifier, Double[][] data); + public void setTableData(String tableIdentifier, Object[][] data); // Control methods public void init(TuningEntityListener listener); diff --git a/src/enginuity/NewGUI/tools/EnginuityDataTools.java b/src/enginuity/NewGUI/tools/EnginuityDataTools.java new file mode 100644 index 00000000..d8d71184 --- /dev/null +++ b/src/enginuity/NewGUI/tools/EnginuityDataTools.java @@ -0,0 +1,5 @@ +package enginuity.NewGUI.tools; + +public class EnginuityDataTools { + +} diff --git a/src/enginuity/NewGUI/tree/ETree.java b/src/enginuity/NewGUI/tree/ETree.java index 5a866dc6..e2c3f72c 100644 --- a/src/enginuity/NewGUI/tree/ETree.java +++ b/src/enginuity/NewGUI/tree/ETree.java @@ -47,7 +47,7 @@ public class ETree extends JTree implements MouseListener { // If this is a table that contains data, then open it in the right pane in an internal frame if(theNode.getTableMetaData().getNodeType() == TableMetaData.DATA_1D || theNode.getTableMetaData().getNodeType() == TableMetaData.DATA_2D || theNode.getTableMetaData().getNodeType() == TableMetaData.DATA_3D){ System.out.println("ETree Table data:"+theNode.getTableMetaData().getTableIdentifier()); - Double[][] tableData = ApplicationStateManager.getCurrentTuningEntity().getTableData(theNode.getTableMetaData().getTableIdentifier()); + Object[][] tableData = ApplicationStateManager.getCurrentTuningEntity().getTableData(theNode.getTableMetaData().getTableIdentifier()); System.out.println("ETree size:"+tableData.length); ApplicationStateManager.getEnginuityInstance().displayInternalFrameTable(tableData, theNode.getTableMetaData()); } diff --git a/src/enginuity/logger/utec/gui/mapTabs/UtecDataManager.java b/src/enginuity/logger/utec/gui/mapTabs/UtecDataManager.java index 1066f0ba..1956bfdd 100644 --- a/src/enginuity/logger/utec/gui/mapTabs/UtecDataManager.java +++ b/src/enginuity/logger/utec/gui/mapTabs/UtecDataManager.java @@ -82,6 +82,10 @@ public class UtecDataManager { // Initialise tree ETreeNode root = new ETreeNode("UTEC:"+mapData.getMapName()+", "+mapData.getMapComment(), new TableMetaData(TableMetaData.MAP_SET_ROOT,0.0,0.0,new Object[0],null,null,false,"","", "", "", mapData.getMapName(), parentTuningEntity)); + ETreeNode mapName = new ETreeNode("Map Name", new TableMetaData(TableMetaData.DATA_1D, Double.parseDouble(UtecProperties.getProperties("utec.fuelMapMin")[0]), Double.parseDouble(UtecProperties.getProperties("utec.fuelMapMax")[0]), null,columnLabels,rowLabels, false, "Map Name" , "", "", "MapName:"+mapData.getMapName(), mapData.getMapName(),parentTuningEntity)); + + + Object[] ignored = {new Double(-100.0)}; ETreeNode fuel = new ETreeNode("Fuel", new TableMetaData(TableMetaData.DATA_3D, Double.parseDouble(UtecProperties.getProperties("utec.fuelMapMin")[0]), Double.parseDouble(UtecProperties.getProperties("utec.fuelMapMax")[0]), ignored,columnLabels,rowLabels, false, "Fuel" , "Load", "RPM", "Fuel:"+mapData.getMapName(), mapData.getMapName(),parentTuningEntity)); @@ -90,6 +94,8 @@ public class UtecDataManager { Object[] ignored3 = {new Double(-100.0)}; ETreeNode boost = new ETreeNode("Boost", new TableMetaData(TableMetaData.DATA_3D, Double.parseDouble(UtecProperties.getProperties("utec.boostMapMin")[0]), Double.parseDouble(UtecProperties.getProperties("utec.boostMapMax")[0]), ignored, columnLabels,rowLabels,false, "Boost", "Load", "RPM", "Boost:"+mapData.getMapName(), mapData.getMapName(), parentTuningEntity)); + + root.add(mapName); root.add(fuel); root.add(timing); root.add(boost); diff --git a/src/enginuity/logger/utec/impl/UtecTuningEntityImpl.java b/src/enginuity/logger/utec/impl/UtecTuningEntityImpl.java index 7759ab49..6ebdeb45 100644 --- a/src/enginuity/logger/utec/impl/UtecTuningEntityImpl.java +++ b/src/enginuity/logger/utec/impl/UtecTuningEntityImpl.java @@ -151,9 +151,9 @@ public class UtecTuningEntityImpl implements TuningEntity{ UtecDataManager.removeTuningGroup(tuningGroup); } - public Double[][] getTableData(String tableIdentifier) { + public Object[][] getTableData(String tableIdentifier) { System.out.println("UTEC getTableData Impl tablename:"+tableIdentifier); - Double[][] data = null; + Object[][] data = null; if(UtecDataManager.getAllMaps().size() == 0){ System.out.println("UTEC Impl Current map data is null"); @@ -179,6 +179,11 @@ public class UtecTuningEntityImpl implements TuningEntity{ System.out.println("UTE Boost"); data = newMapData.getBoostMap(); return data; + }else if(tableIdentifier.equals("MapName:"+mapName)){ + System.out.println("UTE MapName"); + data = new Object[1][1]; + data[0][0] = newMapData.getMapName(); + return data; }else{ System.out.println("UTE returning empty data"); data = new Double[0][0]; @@ -252,8 +257,8 @@ public class UtecTuningEntityImpl implements TuningEntity{ } else if (cmd.equals("Save Map To File")) { - /* System.out.println("Saving map to file."); + if (UtecDataManager.getCurrentMapData() != null) { String saveFileName = null; @@ -267,7 +272,6 @@ public class UtecTuningEntityImpl implements TuningEntity{ } else { System.out.println("Map is null."); } - */ } else if (cmd.equals("Load Map #1")) { @@ -394,7 +398,7 @@ public class UtecTuningEntityImpl implements TuningEntity{ return new JutecToolBar(this.theTEL, this); } - public void setTableData(String tableIdentifier, Double[][] data) { + public void setTableData(String tableIdentifier, Object[][] data) { System.out.println("utec save data requested:"+tableIdentifier); Iterator mapIterate = UtecDataManager.getAllMaps().iterator(); @@ -405,18 +409,42 @@ public class UtecTuningEntityImpl implements TuningEntity{ String tableName = split[1]; if(mapData.getMapName().equals(tableName)){ if(mapType.equals("Fuel")){ - System.out.println("UTE: Fuel"); - mapData.setFuelMap(data); + System.out.println("UTE: Fuel Set"); + mapData.setFuelMap(convertObjToDouble(data)); } else if(mapType.equals("Boost")){ - System.out.println("UTE: Boost"); - mapData.setBoostMap(data); + System.out.println("UTE: Boost Set"); + mapData.setBoostMap(convertObjToDouble(data)); } else if(mapType.equals("Timing")){ - System.out.println("UTE: Timing"); - mapData.setTimingMap(data); + System.out.println("UTE: Timing Set"); + mapData.setTimingMap(convertObjToDouble(data)); + } + else if(mapType.equals("MapName")){ + System.out.println("UTE: MapName Set"); + mapData.setMapName((String)data[0][0]); } } } } + + /** + * Helper method for when dealing with fuel timing and boost tables + * @param objData + * @return + */ + private Double[][] convertObjToDouble(Object[][] objData){ + int length = objData.length; + int width = objData[0].length; + + Double[][] newData = new Double[length][width]; + + for(int i = 0 ; i < length ; i++){ + for(int j = 0 ; j < width ; j++){ + newData[i][j] = (Double)objData[i][j]; + } + } + + return newData; + } } diff --git a/src/enginuity/logger/utec/mapData/UtecMapData.java b/src/enginuity/logger/utec/mapData/UtecMapData.java index 9b2fa06b..539c7b7e 100644 --- a/src/enginuity/logger/utec/mapData/UtecMapData.java +++ b/src/enginuity/logger/utec/mapData/UtecMapData.java @@ -474,6 +474,10 @@ public class UtecMapData { return mapName; } + public void setMapName(String newMapName){ + this.mapName = newMapName; + } + public void setFuelMapValue(int row, int col, double value){ this.fuelMap[col][row] = value; }