Search in sources :

Example 1 with Column

use of quick.dbtable.Column in project mafscaling by vimsh.

the class LogView method loadLogFile.

private void loadLogFile() {
    // close log player
    if (logPlayWindow != null)
        disposeLogView();
    // process log file
    File file = fileChooser.getSelectedFile();
    Properties prop = new Properties();
    prop.put("delimiter", ",");
    prop.put("firstRowHasColumnNames", "true");
    setCursor(new Cursor(Cursor.WAIT_CURSOR));
    logDataTable.filter(null);
    filterText.setText("");
    Column col;
    String colName;
    String lcColName;
    String val;
    try {
        for (int i = 0; i < logDataTable.getColumnCount(); ++i) {
            try {
                CheckboxHeaderRenderer cbr = (CheckboxHeaderRenderer) logDataTable.getColumn(i).getHeaderRenderer();
                logDataTable.getTableHeader().removeMouseListener(cbr.getMouseListener());
            } catch (Exception e) {
            }
        }
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(new FileInputStream(file.getAbsoluteFile()), Config.getEncoding()));
            String line = null;
            br.mark(1024);
            while ((line = br.readLine()) != null && !line.contains(",")) {
                br.mark(1024);
                continue;
            }
            br.reset();
            logDataTable.refresh(br, prop);
            // Below is a hack code to check and convert time column hh:mm:ss.sss to msec number
            convertTimeToMsec();
            // Below is a hack code to check and convert column(s) with on/off values to number
            convertOnOffToNumMsec();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
            return;
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    logger.error(e);
                }
            }
        }
        CheckboxHeaderRenderer renderer;
        Component comp;
        XYSeries series;
        selectionCombo.removeAllItems();
        listModel.removeAllElements();
        xAxisColumn.removeAllItems();
        yAxisColumn.removeAllItems();
        plotsColumn.removeAllItems();
        xAxisColumn.addItem("");
        yAxisColumn.addItem("");
        plotsColumn.setText("");
        plot3d.removeAllPlots();
        rpmDataset.removeAllSeries();
        dataset.removeAllSeries();
        xMarker.clearLabels(true);
        rpmCol = -1;
        displCount = 0;
        JTableHeader tableHeader = logDataTable.getTableHeader();
        TreeSet<String> sortedColumns = new TreeSet<String>();
        for (int i = 0; i < logDataTable.getColumnCount(); ++i) {
            col = logDataTable.getColumn(i);
            renderer = new CheckboxHeaderRenderer(i + 1, tableHeader);
            col.setHeaderRenderer(renderer);
            colName = col.getHeaderValue().toString();
            sortedColumns.add(colName);
            comp = renderer.getTableCellRendererComponent(logDataTable.getTable(), colName, false, false, 0, 0);
            col.setPreferredWidth(comp.getPreferredSize().width + 4);
            series = new XYSeries(colName);
            series.setDescription(colName);
            lcColName = colName.toLowerCase();
            dataset.addSeries(series);
            plotRenderer.setSeriesShapesVisible(i, false);
            plotRenderer.setSeriesVisible(i, false);
            if (rpmDataset.getSeriesCount() == 0 && (lcColName.matches(rpmMatchString) || lcColName.matches(engineSpeedMatchString))) {
                rpmDataset.addSeries(series);
                rpmPlotRenderer.setSeriesShapesVisible(0, false);
                rpmPlotRenderer.setSeriesVisible(0, false);
                rpmCol = i;
            }
            for (int j = 0; j < logDataTable.getRowCount(); ++j) {
                try {
                    val = (String) logDataTable.getValueAt(j, i);
                    series.add(j, Double.valueOf(val), false);
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "Invalid numeric value in column " + colName + ", row " + (j + 1), "Invalid value", JOptionPane.ERROR_MESSAGE);
                    if (br != null)
                        br.close();
                    return;
                }
            }
            series.fireSeriesChanged();
        }
        for (String s : sortedColumns) {
            xAxisColumn.addItem(s);
            yAxisColumn.addItem(s);
            plotsColumn.addItem(s);
            selectionCombo.addItem(s);
            renderer = (CheckboxHeaderRenderer) logDataTable.getColumnByHeaderName(s).getHeaderRenderer();
            listModel.addElement(new JLabel(s, renderer.getCheckIcon(), JLabel.LEFT));
        }
        if (logDataTable.getControlPanel().getComponentCount() > tableControlPanelNumComponents)
            logDataTable.getControlPanel().remove(tableControlPanelNumComponents);
        logDataTable.getControlPanel().add(new JLabel("     [" + file.getName() + "]"));
        initColors();
    } catch (Exception ex) {
        ex.printStackTrace();
        logger.error(ex);
    } finally {
        setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    }
}
Also used : XYSeries(org.jfree.data.xy.XYSeries) InputStreamReader(java.io.InputStreamReader) JTableHeader(javax.swing.table.JTableHeader) JLabel(javax.swing.JLabel) IOException(java.io.IOException) Properties(java.util.Properties) PrintProperties(quick.dbtable.PrintProperties) Cursor(java.awt.Cursor) Paint(java.awt.Paint) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) Column(quick.dbtable.Column) TreeSet(java.util.TreeSet) BufferedReader(java.io.BufferedReader) Component(java.awt.Component) File(java.io.File)

Example 2 with Column

use of quick.dbtable.Column in project mafscaling by vimsh.

the class LogView method createLogViewPanel.

private void createLogViewPanel() {
    logViewPanel = new JPanel();
    GridBagLayout gbl_logViewPanel = new GridBagLayout();
    gbl_logViewPanel.columnWidths = new int[] { 0 };
    gbl_logViewPanel.rowHeights = new int[] { 0, 0 };
    gbl_logViewPanel.columnWeights = new double[] { 1.0 };
    gbl_logViewPanel.rowWeights = new double[] { 1.0, 0.0 };
    logViewPanel.setLayout(gbl_logViewPanel);
    try {
        logDataTable = new DBTable();
        logDataTable.copyColumnHeaderNames = true;
        logDataTable.defaultClickCountToStartEditor = 2;
        logDataTable.doNotUseDatabaseSort = true;
        logDataTable.listenKeyPressEventsWholeWindow = true;
        logDataTable.createControlPanel(DBTable.READ_NAVIGATION);
        logDataTable.enableExcelCopyPaste();
        logDataTable.setSortEnabled(false);
        logDataTable.setSkin(new TableSkin());
        logDataTable.refresh(new String[1][25]);
        logDataTable.setComparator(new DoubleComparator());
        logDataTable.getTable().setCellSelectionEnabled(true);
        logDataTable.getTable().setColumnSelectionAllowed(true);
        logDataTable.getTable().setRowSelectionAllowed(true);
        logDataTable.getTable().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        JTextField rowTextField = ((JTextField) logDataTable.getControlPanel().getComponent(tableRowTextFieldComponentIdx));
        rowTextField.setPreferredSize(null);
        rowTextField.setColumns(tableRowTextFieldSize);
        GridBagConstraints gbc_logDataTable = new GridBagConstraints();
        gbc_logDataTable.insets = insets0;
        gbc_logDataTable.anchor = GridBagConstraints.PAGE_START;
        gbc_logDataTable.fill = GridBagConstraints.BOTH;
        gbc_logDataTable.gridx = 0;
        gbc_logDataTable.gridy = 0;
        logViewPanel.add(logDataTable, gbc_logDataTable);
        listModel = new DefaultListModel<JLabel>();
        selectionCombo.removeAllItems();
        TreeSet<String> sortedCols = new TreeSet<String>();
        JTableHeader tableHeader = logDataTable.getTableHeader();
        for (int i = 0; i < logDataTable.getColumnCount(); ++i) {
            Column col = logDataTable.getColumn(i);
            col.setNullable(true);
            col.setHeaderRenderer(new CheckboxHeaderRenderer(i + 1, tableHeader));
            sortedCols.add(col.getHeaderValue().toString());
        }
        for (String s : sortedCols) {
            selectionCombo.addItem(s);
            listModel.addElement(new JLabel(s, new CheckBoxIcon(), JLabel.LEFT));
        }
        JList<JLabel> menuList = new JList<JLabel>(listModel);
        menuList.setOpaque(false);
        menuList.setCellRenderer(new ImageListCellRenderer());
        menuList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        menuList.setLayoutOrientation(JList.VERTICAL_WRAP);
        menuList.setFixedCellHeight(25);
        menuList.setVisibleRowCount(-1);
        menuList.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                try {
                    if (e.getClickCount() == 1 && colors.size() > 0) {
                        JList<?> list = (JList<?>) e.getSource();
                        int index = list.locationToIndex(e.getPoint());
                        if (index >= 0) {
                            JLabel label = (JLabel) list.getModel().getElementAt(index);
                            Column col = logDataTable.getColumnByHeaderName(label.getText());
                            if (col.getHeaderRenderer() instanceof CheckboxHeaderRenderer) {
                                CheckboxHeaderRenderer renderer = (CheckboxHeaderRenderer) col.getHeaderRenderer();
                                CheckBoxIcon checkIcon = (CheckBoxIcon) label.getIcon();
                                checkIcon.setChecked(!checkIcon.isChecked());
                                if (checkIcon.isChecked()) {
                                    checkIcon.setColor(colors.pop());
                                    JTable table = logDataTable.getTable();
                                    TableModel model = table.getModel();
                                    addXYSeries(model, col.getModelIndex() - 1, col.getHeaderValue().toString(), checkIcon.getColor());
                                } else {
                                    colors.push(checkIcon.getColor());
                                    checkIcon.setColor(renderer.getDefaultColor());
                                    removeXYSeries(col.getModelIndex() - 1);
                                }
                                list.repaint();
                            }
                        }
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
        headerScrollPane = new JScrollPane(menuList);
        GridBagConstraints gbc_headersTree = new GridBagConstraints();
        gbc_headersTree.insets = insets0;
        gbc_headersTree.anchor = GridBagConstraints.PAGE_START;
        gbc_headersTree.fill = GridBagConstraints.BOTH;
        gbc_headersTree.gridx = 0;
        gbc_headersTree.gridy = 1;
        logViewPanel.add(headerScrollPane, gbc_headersTree);
        headerScrollPane.setVisible(false);
    } catch (Exception e) {
        e.printStackTrace();
        logger.error(e);
    }
}
Also used : JPanel(javax.swing.JPanel) GridBagConstraints(java.awt.GridBagConstraints) GridBagLayout(java.awt.GridBagLayout) JTableHeader(javax.swing.table.JTableHeader) JTextField(javax.swing.JTextField) Column(quick.dbtable.Column) TreeSet(java.util.TreeSet) JScrollPane(javax.swing.JScrollPane) ChartMouseEvent(org.jfree.chart.ChartMouseEvent) MouseEvent(java.awt.event.MouseEvent) DBTable(quick.dbtable.DBTable) MouseAdapter(java.awt.event.MouseAdapter) JLabel(javax.swing.JLabel) Paint(java.awt.Paint) IOException(java.io.IOException) JTable(javax.swing.JTable) JList(javax.swing.JList) TableModel(javax.swing.table.TableModel)

Example 3 with Column

use of quick.dbtable.Column in project mafscaling by vimsh.

the class LogView method updateChart.

private void updateChart() {
    if (logDataTable.getColumnCount() != dataset.getSeriesCount())
        return;
    Column col;
    String colName;
    String val;
    XYSeries series;
    int seriesIdx = 0;
    for (int i = 0; i < logDataTable.getColumnCount(); ++i) {
        int colIdx = logDataTable.getCurrentIndexForOriginalColumn(i);
        col = logDataTable.getColumn(colIdx);
        colName = col.getHeaderValue().toString();
        series = dataset.getSeries(seriesIdx++);
        if (!series.getDescription().equals(colName)) {
            JOptionPane.showMessageDialog(null, "Invalid series found for the column index " + colIdx + ": series name " + series.getDescription() + " doesn't match column name " + colName, "Invalid value", JOptionPane.ERROR_MESSAGE);
            return;
        }
        series.clear();
        for (int j = 0; j < logDataTable.getRowCount(); ++j) {
            try {
                val = (String) logDataTable.getValueAt(j, colIdx);
                series.add(j, Double.valueOf(val), false);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Invalid numeric value in column " + colName + ", row " + (j + 1), "Invalid value", JOptionPane.ERROR_MESSAGE);
                return;
            }
        }
        series.fireSeriesChanged();
    }
    chartPanel.repaint();
}
Also used : XYSeries(org.jfree.data.xy.XYSeries) Column(quick.dbtable.Column) Paint(java.awt.Paint) IOException(java.io.IOException)

Aggregations

Paint (java.awt.Paint)3 IOException (java.io.IOException)3 Column (quick.dbtable.Column)3 TreeSet (java.util.TreeSet)2 JLabel (javax.swing.JLabel)2 JTableHeader (javax.swing.table.JTableHeader)2 XYSeries (org.jfree.data.xy.XYSeries)2 Component (java.awt.Component)1 Cursor (java.awt.Cursor)1 GridBagConstraints (java.awt.GridBagConstraints)1 GridBagLayout (java.awt.GridBagLayout)1 MouseAdapter (java.awt.event.MouseAdapter)1 MouseEvent (java.awt.event.MouseEvent)1 BufferedReader (java.io.BufferedReader)1 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 InputStreamReader (java.io.InputStreamReader)1 Properties (java.util.Properties)1 JList (javax.swing.JList)1 JPanel (javax.swing.JPanel)1