adapt ui to database API

This commit is contained in:
2021-01-14 23:14:22 +01:00
parent 6530362b89
commit 16de83616a
10 changed files with 163 additions and 122 deletions

View File

@ -482,6 +482,7 @@ public class HeapStatus extends Composite {
});
}
};
t.setDaemon(true);
t.start();
}

View File

@ -206,7 +206,7 @@ public class DesignBrowser {
updateButtons();
}
});
treeViewer.setLabelProvider(new TxDbLabelProvider());
treeViewer.setLabelProvider(new TxDbLabelProvider(true));
treeViewer.addFilter(treeAttributeFilter);
treeViewer.setUseHashlookup(true);
treeViewer.setAutoExpandLevel(2);
@ -252,7 +252,7 @@ public class DesignBrowser {
updateButtons();
}
});
txTableViewer.setLabelProvider(new TxDbLabelProvider());
txTableViewer.setLabelProvider(new TxDbLabelProvider(false));
txTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
txTableViewer.addFilter(tableAttributeFilter);
txTableViewer.addDoubleClickListener(event -> {

View File

@ -37,7 +37,6 @@ import com.minres.scviewer.database.IEvent;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.WaveformType;
import com.minres.scviewer.database.tx.ITx;
import com.minres.scviewer.database.tx.ITxAttribute;
import com.minres.scviewer.database.tx.ITxEvent;
import com.minres.scviewer.database.ui.TrackEntry;
import com.minres.scviewer.e4.application.parts.txTableTree.AbstractTransactionTreeContentProvider;
@ -78,6 +77,8 @@ public class TransactionList extends Composite {
private TableViewer tableViewer = null;
Thread updateThread = null;
private TableColumn valueColumn = null;
private AttributeLabelProvider valueLabelProvider = null;
@ -86,8 +87,6 @@ public class TransactionList extends Composite {
private ObservableList<AttributeNameBean> attrNames = new WritableList<>();
private List<ITx> eventList = new ArrayList<>();
private List<ITx> emptyList = new ArrayList<>();
TxFilter txFilter;
@ -244,56 +243,48 @@ public class TransactionList extends Composite {
} else if(stream != trackEntry.waveform) {
stream=trackEntry.waveform;
tableViewer.setInput(emptyList);
new Thread() {
private ConcurrentHashMap<String, DataType> propNames=new ConcurrentHashMap<>();
private List<AttributeNameBean> getEntries() {
return propNames.entrySet().stream()
.sorted((e1,e2)->e1.getKey().compareTo(e2.getKey()))
.map(e -> new AttributeNameBean(e.getKey(), e.getValue()))
.collect(Collectors.toList());
}
@Override
public void run() {
Collection<IEvent[]> values = stream.getEvents().values();
eventList = values.parallelStream().map(Arrays::asList)
.flatMap(List::stream)
.filter(evt -> evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE)
.map(evt-> {
ITx tx = ((ITxEvent)evt).getTransaction();
for(ITxAttribute attr: tx.getAttributes()) {
propNames.put(attr.getName(), attr.getDataType());
}
return tx;
})
.sorted((t1, t2)-> t1.getBeginTime().compareTo(t2.getBeginTime()))
.collect(Collectors.toList());
getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
tableViewer.setInput(eventList);
attrNames.clear();
attrNames.addAll(getEntries());
if(!attrNames.isEmpty())
txFilter.setSearchProp(attrNames.get(0).getName(), attrNames.get(0).getType());
if (searchPropComboViewer!=null) {
searchPropComboViewer.setInput(attrNames);
Object sel = searchPropComboViewer.getElementAt(0);
if(sel!=null) searchPropComboViewer.setSelection(new StructuredSelection(sel));
}
tableViewer.refresh(true);
}
});
}
}.start();
try{
if(updateThread!=null)
updateThread.interrupt();
}catch(SecurityException e){}
updateThread = new Thread(()-> {
final ConcurrentHashMap<String, DataType> propNames=new ConcurrentHashMap<>();
Collection<IEvent[]> values = stream.getEvents().values();
final List<ITx> txList = values.parallelStream().map(Arrays::asList)
.flatMap(List::stream)
.filter(evt -> evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE)
.map(evt-> {
ITx tx = ((ITxEvent)evt).getTransaction();
tx.getAttributes().forEach(attr -> propNames.put(attr.getName(), attr.getDataType()));
return tx;
})
.sorted((t1, t2)-> t1.getBeginTime().compareTo(t2.getBeginTime()))
.collect(Collectors.toList());
final List<AttributeNameBean> newAttrNames=propNames.entrySet().stream()
.sorted((e1,e2)->e1.getKey().compareTo(e2.getKey()))
.map(e -> new AttributeNameBean(e.getKey(), e.getValue()))
.collect(Collectors.toList());
getDisplay().asyncExec(() -> {
tableViewer.setInput(txList);
attrNames.clear();
attrNames.addAll(newAttrNames);
if(!attrNames.isEmpty())
txFilter.setSearchProp(attrNames.get(0).getName(), attrNames.get(0).getType());
if (searchPropComboViewer!=null)
searchPropComboViewer.refresh();
if (viewPropComboViewer!=null)
viewPropComboViewer.refresh();
});
updateThread=null;
});
updateThread.start();
}
}
public void setSearchProps(String propName, DataType type, String propValue) {
for(int i=0; i<attrNames.size(); ++i) {
AttributeNameBean e = attrNames.get(i);
if(propName.equals(e.getName()) && type.equals(e.getType())) {
for(int i=0; i<searchPropComboViewer.getCombo().getItemCount(); ++i) {
String itemName = searchPropComboViewer.getCombo().getItem(i);
if(propName.equals(itemName)) {
searchPropComboViewer.getCombo().select(i);
break;
}

View File

@ -166,6 +166,8 @@ public class TxDbLabelProvider implements ILabelProvider {
public String getText(Object element) {
if(element instanceof IWaveformDb){
IWaveformDb db = (IWaveformDb) element;
if(db.getName()== null)
return "";
return db.getName()+(db.isLoaded()?"":" (loading)");
} else
return ((IHierNode)element).getName();