Hi Alexandre, 
     
    Following our discussions at #linuxcon, please find hereafter the
    code I wrote to draw bookmarks on TMF timegraphs. 
    I just override TimeGraphPresentationProvider.postDrawControl()
    method. 
     
    However, this I also need to know the current experiment when this
    method is called, I've added a field in the TimeGraphPresentation
    provider. 
     
    Perhaps there is a better way to do that ? Perhaps using
    TmfTraceManager.getCurrentTrace() ? 
    Where is the best place to contribute this code ? Directly in
    TimeGraphPresentationProvider ? 
     
    Xavier Raynaud 
     
    
  
    public abstract class KTimeGraphProvider extends
      TimeGraphPresentationProvider { 
     
        private TimeChartView fTimeChartView; 
     
        public KTimeGraphProvider(TimeChartView tgv) { 
            super(); 
            this.fTimeChartView = tgv; 
        } 
     
        abstract protected void
      postDrawEventImpl(IModelTimeEvent currentEvent, Rectangle rect, GC
      gc); 
     
        private void drawBookmarks(Rectangle bounds, GC gc) { 
            if (fTimeChartView != null) { 
                TmfExperiment experiment =
      fTimeChartView.getExperiment(); 
                TimeGraphViewer timeGraphViewer =
      fTimeChartView.getTimeGraphViewer(); 
                if (experiment != null &&
      timeGraphViewer != null) { 
                    int nameSpace =
      timeGraphViewer.getNameSpace(); 
                    long time0 = timeGraphViewer.getTime0(); 
                    long time1 = timeGraphViewer.getTime1(); 
                    try { 
                        for (IMarker bookmark :
      experiment.getBookmarksFile().findMarkers(IMarker.BOOKMARK, false, 
                                IResource.DEPTH_ZERO)) { 
                            int location =
      bookmark.getAttribute(IMarker.LOCATION, -1); 
                            if (location != -1) { 
                                long rank = location; 
                                ITmfContext context =
      experiment.seekEvent(rank); 
                                ITmfEvent ev =
      experiment.getNext(context); 
                                context.dispose(); 
                                if (ev != null) { 
                                    ITmfTimestamp ts =
      ev.getTimestamp(); 
                                    long selectedTime =
      ts.normalize(0, -9).getValue(); 
                                    double pixelsPerNanoSec =
      (bounds.width - nameSpace <= TimeGraphBaseControl.RIGHT_MARGIN)
      ? 0 
                                            : (double)
      (bounds.width - nameSpace - TimeGraphBaseControl.RIGHT_MARGIN) 
                                                    / (time1 -
      time0); 
                                    int x = bounds.x +
      nameSpace + (int) ((selectedTime - time0) * pixelsPerNanoSec); 
                                    if (x >= nameSpace
      && x < bounds.x + bounds.width) { 
                                       
      gc.setForeground(PlatformUI.getWorkbench().getDisplay() 
                                               
      .getSystemColor(SWT.COLOR_BLACK)); 
                                        gc.drawLine(x,
      bounds.y, x, bounds.y + bounds.height); 
                                    } 
                                } 
                            } 
                        } 
                    } catch (CoreException e) { 
                       
      Activator.getDefault().getLog().log(e.getStatus()); 
                    } 
                } 
            } 
        } 
     
        /* 
         * (non-Javadoc) 
         * @see 
         *
org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider#postDrawControl(org.eclipse.swt 
         * .graphics.Rectangle, org.eclipse.swt.graphics.GC) 
         */ 
        @Override 
        public void postDrawControl(Rectangle bounds, GC gc) { 
            super.postDrawControl(bounds, gc); 
            drawBookmarks(bounds, gc); 
        } 
    } 
  
 |