android: AndrOBD library vendored (no submodule, no git link)
This commit is contained in:
+218
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.pvs.gui;
|
||||
|
||||
import com.fr3ts0n.pvs.IndexedProcessVar;
|
||||
import com.fr3ts0n.pvs.ProcessVar;
|
||||
import com.fr3ts0n.pvs.PvChangeEvent;
|
||||
import com.fr3ts0n.pvs.PvChangeListener;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
|
||||
/**
|
||||
* Data Model to represent a ProcessVar within a Table object
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class PvTableModel extends AbstractTableModel
|
||||
implements PvChangeListener
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -6777148395276846388L;
|
||||
protected ProcessVar pv;
|
||||
protected IndexedProcessVar currRow;
|
||||
protected Object[] keys;
|
||||
private String[] colHeaders = {};
|
||||
|
||||
/** Creates a new instance of PvTableModel */
|
||||
public PvTableModel()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of PvTableModel
|
||||
*
|
||||
* @param pVar the process variable to represent
|
||||
*/
|
||||
public PvTableModel(ProcessVar pVar)
|
||||
{
|
||||
setProcessVar(pVar);
|
||||
}
|
||||
|
||||
/**
|
||||
* update th list of key items for correct location of coordinates
|
||||
*
|
||||
* @param pv Process variable
|
||||
*/
|
||||
private void updateKeys(ProcessVar pv)
|
||||
{
|
||||
keys = pv.keySet().toArray();
|
||||
Arrays.sort(keys);
|
||||
}
|
||||
|
||||
/**
|
||||
* set the process variable to be represented
|
||||
*
|
||||
* @param pVar the process variable to represent
|
||||
*/
|
||||
public synchronized void setProcessVar(ProcessVar pVar)
|
||||
{
|
||||
// set the pv
|
||||
pv = pVar;
|
||||
updateKeys(pVar);
|
||||
if (keys.length > 0)
|
||||
{
|
||||
currRow = (IndexedProcessVar) pv.get(keys[0]);
|
||||
colHeaders = currRow.getFields();
|
||||
fireTableStructureChanged();
|
||||
}
|
||||
pv.addPvChangeListener(this, PvChangeEvent.PV_ALLEVENTS);
|
||||
}
|
||||
|
||||
/**
|
||||
* get number of table rows
|
||||
*
|
||||
* @return number of rows to show
|
||||
*/
|
||||
public int getRowCount()
|
||||
{
|
||||
return (keys != null ? keys.length : 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* return number of columns
|
||||
*
|
||||
* @return number of columns
|
||||
*/
|
||||
public int getColumnCount()
|
||||
{
|
||||
return (colHeaders.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* get process var for row
|
||||
* @param rowIndex row index
|
||||
* @return process var
|
||||
*/
|
||||
public IndexedProcessVar getElementAt(int rowIndex)
|
||||
{
|
||||
if (rowIndex < getRowCount())
|
||||
currRow = (IndexedProcessVar) pv.get(keys[rowIndex]);
|
||||
|
||||
return currRow;
|
||||
}
|
||||
/**
|
||||
* get the value for table location (x,y)
|
||||
*
|
||||
* @param rowIndex row number
|
||||
* @param columnIndex column number
|
||||
* @return value for table location
|
||||
*/
|
||||
public Object getValueAt(int rowIndex, int columnIndex)
|
||||
{
|
||||
Object result = null;
|
||||
// if the pv is set ...
|
||||
if (pv != null)
|
||||
{
|
||||
// get the column value
|
||||
if((currRow = getElementAt(rowIndex)) != null)
|
||||
{
|
||||
result = currRow.get(columnIndex);
|
||||
}
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
|
||||
/**
|
||||
* handle a process variable change
|
||||
*
|
||||
* @param event the change event to be handled
|
||||
*/
|
||||
public synchronized void pvChanged(PvChangeEvent event)
|
||||
{
|
||||
Object key;
|
||||
int rowId;
|
||||
try
|
||||
{
|
||||
if(event.isChildEvent())
|
||||
{
|
||||
key = String.valueOf(event.getValue());
|
||||
}
|
||||
else
|
||||
{
|
||||
key = event.getKey();
|
||||
}
|
||||
rowId = key != null ? Arrays.binarySearch(keys, key) : 0;
|
||||
|
||||
switch (event.getType())
|
||||
{
|
||||
case PvChangeEvent.PV_CONFIRMED:
|
||||
case PvChangeEvent.PV_MODIFIED:
|
||||
case PvChangeEvent.PV_MANUAL_MOD:
|
||||
fireTableRowsUpdated(rowId, rowId);
|
||||
break;
|
||||
|
||||
case PvChangeEvent.PV_ADDED:
|
||||
if (pv.size() == 1)
|
||||
{
|
||||
setProcessVar(pv);
|
||||
} else
|
||||
{
|
||||
updateKeys(pv);
|
||||
fireTableRowsInserted(rowId, rowId);
|
||||
}
|
||||
break;
|
||||
|
||||
case PvChangeEvent.PV_DELETED:
|
||||
updateKeys(pv);
|
||||
fireTableRowsDeleted(rowId, rowId);
|
||||
break;
|
||||
|
||||
case PvChangeEvent.PV_CLEARED:
|
||||
if (keys.length > 0)
|
||||
{
|
||||
updateKeys(pv);
|
||||
}
|
||||
// w/o data there are NO columns available -> structure change
|
||||
fireTableStructureChanged();
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* return column name of PID field
|
||||
*
|
||||
* @param column specified column number to get name for ...
|
||||
*/
|
||||
@Override
|
||||
public String getColumnName(int column)
|
||||
{
|
||||
return (colHeaders[column]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user