import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker;
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker.SplitMarker;
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker.WeightedMarker;
+import org.eclipse.tracecompass.tmf.core.signal.TmfMarkerEventSourceUpdatedSignal;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
+import org.eclipse.tracecompass.tmf.core.trace.AbstractTmfTraceAdapterFactory.IDisposableAdapter;
import org.eclipse.tracecompass.tmf.core.trace.ICyclesConverter;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ui.colors.X11Color;
/**
* Configurable marker event source.
*/
-public class ConfigurableMarkerEventSource implements IMarkerEventSource {
+public class ConfigurableMarkerEventSource implements IMarkerEventSource, IDisposableAdapter {
private static final long NANO_PER_MILLI = 1000000L;
private static final long NANO_PER_MICRO = 1000L;
public ConfigurableMarkerEventSource(ITmfTrace trace) {
fMarkerEventSources = new ArrayList<>();
fTrace = trace;
+ TmfSignalManager.register(this);
+ }
+
+ @Override
+ public void dispose() {
+ TmfSignalManager.deregister(this);
}
/**
return fMarker.getSubMarkers();
}
}
+
+ /**
+ * A marker event source has been updated
+ *
+ * @param signal
+ * the signal
+ */
+ @TmfSignalHandler
+ public void markerEventSourceUpdated(final TmfMarkerEventSourceUpdatedSignal signal) {
+ configure(MarkerUtils.getDefaultMarkerSet());
+ }
}
package org.eclipse.tracecompass.internal.tmf.ui.markers;
-import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerConfigXmlParser;
-import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet;
import org.eclipse.tracecompass.tmf.core.trace.AbstractTmfTraceAdapterFactory;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.IMarkerEventSource;
protected <T> T getTraceAdapter(ITmfTrace trace, Class<T> adapterType) {
if (IMarkerEventSource.class.equals(adapterType)) {
ConfigurableMarkerEventSource adapter = new ConfigurableMarkerEventSource(trace);
- configure(adapter);
+ adapter.configure(MarkerUtils.getDefaultMarkerSet());
return adapterType.cast(adapter);
}
return null;
IMarkerEventSource.class
};
}
-
- private static void configure(ConfigurableMarkerEventSource source) {
- String defaultMarkerSetId = MarkerUtils.getDefaultMarkerSetId();
- for (MarkerSet markerSet : MarkerConfigXmlParser.getMarkerSets()) {
- if (markerSet.getId().equals(defaultMarkerSetId)) {
- source.configure(markerSet);
- }
- }
- }
}
package org.eclipse.tracecompass.internal.tmf.ui.markers;
+import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerConfigXmlParser;
+import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
/**
private static final String MARKER_SET_KEY = "marker.set"; //$NON-NLS-1$
+ private static MarkerSet fDefaultMarkerSet = null;
+
/**
- * Get the default marker set id
+ * Get the default marker set
*
- * @return the default marker set id, or null if none is set
+ * @return the default marker set, or null if none is set
*/
- public static String getDefaultMarkerSetId() {
- return getDialogSettings().get(MARKER_SET_KEY);
+ public static synchronized @Nullable MarkerSet getDefaultMarkerSet() {
+ String id = getDialogSettings().get(MARKER_SET_KEY);
+ if (id == null) {
+ fDefaultMarkerSet = null;
+ } else {
+ if (fDefaultMarkerSet == null || !fDefaultMarkerSet.getId().equals(id)) {
+ for (MarkerSet markerSet : MarkerConfigXmlParser.getMarkerSets()) {
+ if (markerSet.getId().equals(id)) {
+ fDefaultMarkerSet = markerSet;
+ }
+ }
+ }
+ }
+ return fDefaultMarkerSet;
}
/**
- * Set the default marker set id
+ * Set the default marker set
*
- * @param id
- * the default marker set id, or null to set none
+ * @param markerSet
+ * the default marker set, or null to set none
*/
- public static void setDefaultMarkerSetId(String id) {
+ public static synchronized void setDefaultMarkerSet(@Nullable MarkerSet markerSet) {
+ fDefaultMarkerSet = markerSet;
+ String id = (markerSet == null) ? null : markerSet.getId();
getDialogSettings().put(MARKER_SET_KEY, id);
}
import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerConfigXmlParser;
import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
-import org.eclipse.tracecompass.internal.tmf.ui.markers.ConfigurableMarkerEventSource;
import org.eclipse.tracecompass.internal.tmf.ui.markers.MarkerUtils;
import org.eclipse.tracecompass.tmf.core.resources.ITmfMarker;
import org.eclipse.tracecompass.tmf.core.signal.TmfMarkerEventSourceUpdatedSignal;
@Override
public void runWithEvent(Event event) {
- MarkerUtils.setDefaultMarkerSetId(fMarkerSet == null ? null : fMarkerSet.getId());
- for (ITmfTrace trace : TmfTraceManager.getInstance().getOpenedTraces()) {
- for (IMarkerEventSource source : TmfTraceAdapterManager.getAdapters(trace, IMarkerEventSource.class)) {
- if (source instanceof ConfigurableMarkerEventSource) {
- ((ConfigurableMarkerEventSource) source).configure(fMarkerSet);
- }
- }
+ if (isChecked()) {
+ MarkerUtils.setDefaultMarkerSet(fMarkerSet);
+ broadcast(new TmfMarkerEventSourceUpdatedSignal(AbstractTimeGraphView.this));
}
- broadcast(new TmfMarkerEventSourceUpdatedSignal(AbstractTimeGraphView.this));
}
}
fMarkerSetMenu.addMenuListener(new IMenuListener() {
@Override
public void menuAboutToShow(IMenuManager mgr) {
- Action action = new MarkerSetAction(null);
- String defaultMarkerSetId = MarkerUtils.getDefaultMarkerSetId();
- action.setChecked(defaultMarkerSetId == null || defaultMarkerSetId.isEmpty());
- mgr.add(action);
+ Action noneAction = new MarkerSetAction(null);
+ MarkerSet defaultMarkerSet = MarkerUtils.getDefaultMarkerSet();
+ String defaultMarkerSetId = (defaultMarkerSet == null) ? null : defaultMarkerSet.getId();
+ noneAction.setChecked(defaultMarkerSetId == null);
+ mgr.add(noneAction);
List<MarkerSet> markerSets = MarkerConfigXmlParser.getMarkerSets();
for (MarkerSet markerSet : markerSets) {
- action = new MarkerSetAction(markerSet);
+ Action action = new MarkerSetAction(markerSet);
action.setChecked(markerSet.getId().equals(defaultMarkerSetId));
mgr.add(action);
}