X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=tmf%2Forg.eclipse.tracecompass.tmf.ui%2Fsrc%2Forg%2Feclipse%2Ftracecompass%2Ftmf%2Fui%2Fviews%2Ffilter%2FFilterViewer.java;h=5d73f60f59fc8bea47565eb85436422f3f06aa3a;hb=ec48d2485a49a69bee11d82dd7054f53692e5686;hp=ff9c194014585192e6a3c539eb3e1c0d6271ba41;hpb=3cbca18617a8489db72af8b46d90b7af167c5f0f;p=deliverable%2Ftracecompass.git diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterViewer.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterViewer.java index ff9c194014..5d73f60f59 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterViewer.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterViewer.java @@ -14,10 +14,12 @@ package org.eclipse.tracecompass.tmf.ui.views.filter; +import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; + import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.TreeMap; import org.eclipse.jface.action.Action; @@ -81,16 +83,26 @@ import org.eclipse.ui.PlatformUI; class FilterViewer extends Composite { - class AspectItem { + private static class TraceTypeItem { + public String label; + public String traceTypeId; + + public TraceTypeItem(String label, String traceTypeId) { + this.label = label; + this.traceTypeId = traceTypeId; + } + } + + private static class AspectItem { public String label; - public ITmfEventAspect eventAspect; + public ITmfEventAspect eventAspect; public String traceTypeId; public AspectItem(String label) { this.label = label; } - public AspectItem(String label, ITmfEventAspect eventAspect, String traceTypeId) { + public AspectItem(String label, ITmfEventAspect eventAspect, String traceTypeId) { this.label = label; this.eventAspect = eventAspect; this.traceTypeId = traceTypeId; @@ -423,9 +435,11 @@ class FilterViewer extends Composite { private abstract class FilterAspectNodeComposite extends FilterBaseNodeComposite { TmfFilterAspectNode fAspectNode; - Combo fCombo; + Combo fTraceTypeCombo; + Combo fAspectCombo; Label fFieldLabel; Text fFieldText; + List fAspectList = null; FilterAspectNodeComposite(Composite parent, TmfFilterAspectNode node) { super(parent); @@ -435,23 +449,65 @@ class FilterViewer extends Composite { protected void createAspectControls() { Label label = new Label(this, SWT.NONE); label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); + label.setText(Messages.FilterViewer_TypeLabel); + + final List traceTypeList = getTraceTypeList(fAspectNode); + + fTraceTypeCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY); + fTraceTypeCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + for (TraceTypeItem traceType : traceTypeList) { + fTraceTypeCombo.add(traceType.label); + } + if (fAspectNode.getTraceTypeId() == null) { + fTraceTypeCombo.select(0); + fAspectNode.setTraceTypeId(traceTypeList.get(0).traceTypeId); + } else { + for (int i = 0; i < traceTypeList.size(); i++) { + TraceTypeItem traceType = traceTypeList.get(i); + if (fAspectNode.getTraceTypeId().equals(traceType.traceTypeId)) { + fTraceTypeCombo.select(i); + break; + } + } + } + fTraceTypeCombo.addModifyListener(new ModifyListener() { + @Override + public void modifyText(ModifyEvent e) { + TraceTypeItem traceType = traceTypeList.get(fTraceTypeCombo.getSelectionIndex()); + fAspectNode.setTraceTypeId(traceType.traceTypeId); + fAspectList = getAspectList(fAspectNode.getTraceTypeId()); + String text = fAspectCombo.getText(); + fAspectCombo.removeAll(); + for (AspectItem aspect : fAspectList) { + fAspectCombo.add(aspect.label); + } + int index = Arrays.asList(fAspectCombo.getItems()).indexOf(text); + if (index >= 0 && !text.isEmpty()) { + fAspectCombo.select(index); + } + fViewer.refresh(fAspectNode); + } + }); + + label = new Label(this, SWT.NONE); + label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); label.setText(Messages.FilterViewer_AspectLabel); - final List aspectList = getAspectList(fAspectNode); + fAspectList = getAspectList(fAspectNode.getTraceTypeId()); - fCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY); - fCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - for (AspectItem aspect : aspectList) { - fCombo.add(aspect.label); + fAspectCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY); + fAspectCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + for (AspectItem aspect : fAspectList) { + fAspectCombo.add(aspect.label); } if (fAspectNode.getEventAspect() != null) { - for (int i = 0; i < aspectList.size(); i++) { - AspectItem aspect = aspectList.get(i); + for (int i = 0; i < fAspectList.size(); i++) { + AspectItem aspect = fAspectList.get(i); if (aspect.eventAspect != null && fAspectNode.getEventAspect().getName().equals(aspect.eventAspect.getName()) && (fAspectNode.getTraceTypeId().equals(aspect.traceTypeId) || fAspectNode.getTraceTypeId().equals(TmfFilterAspectNode.BASE_ASPECT_ID))) { - fCombo.select(i); + fAspectCombo.select(i); if (fAspectNode.getEventAspect() instanceof TmfEventFieldAspect) { aspect.eventAspect = fAspectNode.getEventAspect(); createFieldControls((TmfEventFieldAspect) fAspectNode.getEventAspect(), aspect); @@ -460,12 +516,17 @@ class FilterViewer extends Composite { } } } - fCombo.addModifyListener(new ModifyListener() { + fAspectCombo.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { - AspectItem aspect = aspectList.get(fCombo.getSelectionIndex()); - fAspectNode.setEventAspect(aspect.eventAspect); - fAspectNode.setTraceTypeId(aspect.traceTypeId); + int selection = fAspectCombo.getSelectionIndex(); + AspectItem aspect = null; + if (selection != -1) { + aspect = fAspectList.get(fAspectCombo.getSelectionIndex()); + fAspectNode.setEventAspect(aspect.eventAspect); + } else { + fAspectNode.setEventAspect(null); + } if (fAspectNode.getEventAspect() instanceof TmfEventFieldAspect) { TmfEventFieldAspect eventFieldAspect = (TmfEventFieldAspect) fAspectNode.getEventAspect(); createFieldControls(eventFieldAspect, aspect); @@ -487,7 +548,7 @@ class FilterViewer extends Composite { fFieldLabel.dispose(); } fFieldLabel = new Label(this, SWT.NONE); - fFieldLabel.moveBelow(fCombo); + fFieldLabel.moveBelow(fAspectCombo); fFieldLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); fFieldLabel.setText(Messages.FilterViewer_FieldLabel); @@ -538,13 +599,9 @@ class FilterViewer extends Composite { }); } - private List getAspectList(ITmfFilterTreeNode node) { - ArrayList aspectList = new ArrayList<>(); - - aspectList.add(new AspectItem(Messages.FilterViewer_CommonCategory)); - for (ITmfEventAspect aspect : ITmfEventAspect.BASE_ASPECTS) { - aspectList.add(new AspectItem(aspect.getName(), aspect, TmfFilterAspectNode.BASE_ASPECT_ID)); - } + private List getTraceTypeList(ITmfFilterTreeNode node) { + ArrayList traceTypeList = new ArrayList<>(); + traceTypeList.add(new TraceTypeItem(Messages.FilterViewer_CommonCategory, TmfFilterAspectNode.BASE_ASPECT_ID)); ITmfFilterTreeNode curNode = node; while (curNode != null) { @@ -552,28 +609,38 @@ class FilterViewer extends Composite { TmfFilterTraceTypeNode traceTypeNode = (TmfFilterTraceTypeNode) curNode; TraceTypeHelper helper = TmfTraceType.getTraceType(traceTypeNode.getTraceTypeId()); if (helper != null) { - aspectList.add(new AspectItem("")); //$NON-NLS-1$ - aspectList.add(new AspectItem('[' + traceTypeNode.getName() + ']')); - for (ITmfEventAspect aspect : helper.getTrace().getEventAspects()) { - for (AspectItem baseAspect : aspectList) { - if (aspect.equals(baseAspect.eventAspect)) { - aspectList.remove(baseAspect); - break; - } - } - aspectList.add(new AspectItem(aspect.getName(), aspect, helper.getTraceTypeId())); - } + traceTypeList.set(0, new TraceTypeItem(helper.getLabel(), helper.getTraceTypeId())); } - return aspectList; + return traceTypeList; } curNode = curNode.getParent(); } - for (Entry traceTypeEntry : getTraceTypeMap().entrySet()) { - TraceTypeHelper helper = traceTypeEntry.getValue(); + for (TraceTypeHelper helper : getTraceTypeMap().values()) { + traceTypeList.add(new TraceTypeItem(helper.getLabel(), helper.getTraceTypeId())); + } + return traceTypeList; + } + + private List getAspectList(String traceTypeId) { + ArrayList aspectList = new ArrayList<>(); + + aspectList.add(new AspectItem(Messages.FilterViewer_CommonCategory)); + for (ITmfEventAspect aspect : ITmfEventAspect.BASE_ASPECTS) { + aspectList.add(new AspectItem(aspect.getName(), aspect, TmfFilterAspectNode.BASE_ASPECT_ID)); + } + + TraceTypeHelper helper = TmfTraceType.getTraceType(traceTypeId); + if (helper != null) { aspectList.add(new AspectItem("")); //$NON-NLS-1$ - aspectList.add(new AspectItem('[' + traceTypeEntry.getKey() + ']')); - for (ITmfEventAspect aspect : helper.getTrace().getEventAspects()) { + aspectList.add(new AspectItem('[' + helper.getLabel() + ']')); + for (ITmfEventAspect aspect : helper.getTrace().getEventAspects()) { + for (AspectItem baseAspect : aspectList) { + if (aspect.equals(baseAspect.eventAspect)) { + aspectList.remove(baseAspect); + break; + } + } aspectList.add(new AspectItem(aspect.getName(), aspect, helper.getTraceTypeId())); } } @@ -653,7 +720,7 @@ class FilterViewer extends Composite { fTypeCombo.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { - TraceTypeHelper helper = fTraceTypeMap.get(fTypeCombo.getText()); + TraceTypeHelper helper = checkNotNull(fTraceTypeMap.get(fTypeCombo.getText())); fNode.setTraceTypeId(helper.getTraceTypeId()); fNode.setTraceClass(helper.getTraceClass()); fNode.setName(fTypeCombo.getText());