package org.tizen.dynamicanalyzer.timeline;
-import java.awt.Graphics2D;
-import java.awt.Paint;
-import java.awt.Stroke;
-import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.IntervalMarker;
import org.jfree.chart.plot.PlotRenderingInfo;
-import org.jfree.chart.plot.ValueMarker;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.experimental.chart.swt.ChartComposite;
import org.jfree.ui.Layer;
-import org.jfree.ui.RectangleEdge;
import org.tizen.dynamicanalyzer.AnalyzerManager;
import org.tizen.dynamicanalyzer.ColorResources;
import org.tizen.dynamicanalyzer.FontResources;
private IntervalMarker selectionMarker;
private Shell tooltip;
- private ValueMarker tooltipMarker;
- private int tooltipValue;
private double tempDownTime = TempConstants.NOT_INITED;
private double tempUpTime = TempConstants.NOT_INITED;
return infoZoomLabel;
}
}
+
+ private MouseAdapter tooltipMouseAdapter = new MouseAdapter() {
+ public void mouseUp(MouseEvent e) {
+ disposeTooltip();
+ }
+ };
public TimelineItemManager() {
chartManager = new TimelineChartManager();
PlotRenderingInfo plotInfo = info.getPlotInfo();
XYPlot xyplot = itemChartComp.getChart().getXYPlot();
+ ValueAxis domainAxis = xyplot.getDomainAxis();
Rectangle2D rect2D = plotInfo.getDataArea();
rect2D.setRect(rect2D.getX(), rect2D.getY(), canvas.getBounds().width - rect2D.getY(), rect2D.getHeight());
- Double selectionEndTime = xyplot.getDomainAxis().java2DToValue(e.x, rect2D, xyplot.getDomainAxisEdge());
- tempUpTime = selectionEndTime;
+ tempUpTime = domainAxis.java2DToValue(e.x, rect2D, xyplot.getDomainAxisEdge());
+ tempUpTime = Math.round(tempUpTime);
+ int correctedX = (int)domainAxis.valueToJava2D(tempUpTime, rect2D, xyplot.getDomainAxisEdge());
+ Double selectionEndTime = domainAxis.java2DToValue(correctedX, rect2D, xyplot.getDomainAxisEdge());
setSelectionMarkerEndVal(selectionEndTime);
- sendSelectionTimes();
+ sendSelectionTimes(e, correctedX);
TimelineMaster.getInstance().highlightSelectedSnapshot(selectionMarker.getStartValue(), selectionMarker.getEndValue());
}
PlotRenderingInfo plotInfo = info.getPlotInfo();
XYPlot xyplot = itemChartComp.getChart().getXYPlot();
+ ValueAxis domainAxis = xyplot.getDomainAxis();
Rectangle2D rect2D = plotInfo.getDataArea();
rect2D.setRect(rect2D.getX(), rect2D.getY(), canvas.getBounds().width - rect2D.getY(), rect2D.getHeight());
- tempDownTime = xyplot.getDomainAxis().java2DToValue(e.x, rect2D, xyplot.getDomainAxisEdge());
- Double selectionStartTime = xyplot.getDomainAxis().java2DToValue(e.x - TempConstants.MIN_SELECTION_HALF_WIDTH_PX, rect2D,
+ tempDownTime = domainAxis.java2DToValue(e.x, rect2D, xyplot.getDomainAxisEdge());
+ tempDownTime = Math.round(tempDownTime);
+ int correctedX = (int)domainAxis.valueToJava2D(tempDownTime, rect2D, xyplot.getDomainAxisEdge());
+ Double selectionStartTime = domainAxis.java2DToValue(correctedX - TempConstants.MIN_SELECTION_HALF_WIDTH_PX, rect2D,
xyplot.getDomainAxisEdge());
- Double selectionEndTime = xyplot.getDomainAxis().java2DToValue(e.x + TempConstants.MIN_SELECTION_HALF_WIDTH_PX, rect2D, xyplot.getDomainAxisEdge());
+ Double selectionEndTime = domainAxis.java2DToValue(correctedX + TempConstants.MIN_SELECTION_HALF_WIDTH_PX, rect2D, xyplot.getDomainAxisEdge());
selectionMarker.setStartValue(selectionStartTime);
selectionMarker.setEndValue(selectionEndTime);
}
};
- private MouseTrackListener chartMouseTrackListener = new MouseTrackListener() {
- @Override
- public void mouseHover(MouseEvent e) {
- }
-
- @Override
- public void mouseExit(MouseEvent e) {
- disposeTooltip();
- // FIXME tooltip
- // tooltipMarker.setValue(TempConstants.NOT_INITED);
- }
-
- @Override
- public void mouseEnter(MouseEvent e) {
- Canvas canvas = (Canvas) e.getSource();
- ChartComposite itemChartComp = (ChartComposite) canvas.getParent();
-
- if (itemChartComp.isDisposed()) {
- return;
- }
-
- ChartRenderingInfo info = itemChartComp.getChartRenderingInfo();
- PlotRenderingInfo plotInfo = info.getPlotInfo();
-
- XYPlot xyplot = itemChartComp.getChart().getXYPlot();
- Rectangle2D rect2D = plotInfo.getDataArea();
- rect2D.setRect(rect2D.getX(), rect2D.getY(), canvas.getBounds().width - rect2D.getY(), rect2D.getHeight());
-
- createTooltip(e);
-
- double chartX = xyplot.getDomainAxis().java2DToValue(e.x, rect2D, xyplot.getDomainAxisEdge());
- tooltipValue = getTooltipXPosition(chartX);
- // FIXME tooltip
- // tooltipMarker.setValue(tooltipValue);
-
- // FIXME
- // Graphics2D g2 = (Graphics2D) itemChartComp.getChart().
- // createBufferedImage(canvas.getBounds().width,
- // canvas.getBounds().height).getGraphics();
- // drawVerticalLine(g2, rect2D, 15, new BasicStroke(3),
- // java.awt.Color.RED, xyplot);
- // xyplot.draw(g2, rect2D, null, null, null);
- }
- };
-
- @SuppressWarnings("unused")
- private void drawVerticalLine(Graphics2D g2, Rectangle2D dataArea, double value, Stroke stroke, Paint paint, XYPlot xyplot) {
- ValueAxis axis = xyplot.getDomainAxis();
- if (axis.getRange().contains(value)) {
- double xx = axis.valueToJava2D(value, dataArea, RectangleEdge.BOTTOM);
- Line2D line = new Line2D.Double(xx, dataArea.getMinY(), xx, dataArea.getMaxY());
- g2.setStroke(stroke);
- g2.setPaint(paint);
- g2.draw(line);
- }
- }
-
- private MouseMoveListener chartMouseMoveListener = new MouseMoveListener() {
- @Override
- public void mouseMove(MouseEvent e) {
- Canvas canvas = (Canvas) e.getSource();
- ChartComposite itemChartComp = (ChartComposite) canvas.getParent();
-
- if (itemChartComp.isDisposed()) {
- return;
- }
-
- ChartRenderingInfo info = itemChartComp.getChartRenderingInfo();
- PlotRenderingInfo plotInfo = info.getPlotInfo();
-
- XYPlot xyplot = itemChartComp.getChart().getXYPlot();
- Rectangle2D rect2D = plotInfo.getDataArea();
- rect2D.setRect(rect2D.getX(), rect2D.getY(), canvas.getBounds().width - rect2D.getY(), rect2D.getHeight());
-
- double x = xyplot.getDomainAxis().java2DToValue(e.x, rect2D, xyplot.getDomainAxisEdge());
- if (tooltipValue != getTooltipXPosition(x)) {
- tooltipValue = getTooltipXPosition(x);
- // FIXME tooltip
- // tooltipMarker.setValue(tooltipValue);
-
- int chartID = (Integer) (itemChartComp.getData());
- List<XYSeries> seriesList;
- switch (chartID) {
- case TimelineConstants.CHART_TYPE_CPU:
- seriesList = CPUChart.getSeriesList();
- for (int i = 0; i < seriesList.size(); i++) {
- double yValue = getYbyX(seriesList.get(i).toArray(), tooltipValue);
-
- indexInfoLabelList.get(i).setText(CPUChart.getTooltipContent(i, yValue));
- }
- break;
- case TimelineConstants.CHART_TYPE_CPU_CORE:
- seriesList = CPUCoreChart.getSeriesList();
- int seriesSize = CPUCoreChart.getCoreSize() == TempConstants.NOT_INITED ? 4 : CPUCoreChart.getCoreSize();
- for (int i = 0; i < seriesSize; i++) {
- double yValue = getYbyX(seriesList.get(i).toArray(), tooltipValue);
-
- indexInfoLabelList.get(i).setText(CPUCoreChart.getTooltipContent(i, yValue));
- }
- break;
- case TimelineConstants.CHART_TYPE_CPU_FREQUENCY:
- seriesList = CPUFrequencyChart.getSeriesList();
- for (int i = 0; i < seriesList.size(); i++) {
- double yValue = getYbyX(seriesList.get(i).toArray(), tooltipValue);
-
- indexInfoLabelList.get(i).setText(CPUFrequencyChart.getTooltipContent(i, yValue));
- }
- break;
- case TimelineConstants.CHART_TYPE_HEAP:
- seriesList = HeapChart.getSeriesList();
- for (int i = 0; i < seriesList.size(); i++) {
- double yValue = getYbyX(seriesList.get(i).toArray(), tooltipValue);
-
- indexInfoLabelList.get(i).setText(HeapChart.getTooltipContent(i, yValue));
- }
- break;
- case TimelineConstants.CHART_TYPE_PROCESS_SIZE:
- seriesList = ProcessMemoryChart.getSeriesList();
- for (int i = 0; i < seriesList.size(); i++) {
- double yValue = getYbyX(seriesList.get(i).toArray(), tooltipValue);
-
- indexInfoLabelList.get(i).setText(ProcessMemoryChart.getTooltipContent(i, yValue));
- }
- break;
- case TimelineConstants.CHART_TYPE_SYSTEM_MEMORY:
- seriesList = SystemMemoryChart.getSeriesList();
- for (int i = 0; i < seriesList.size(); i++) {
- double yValue = getYbyX(seriesList.get(i).toArray(), tooltipValue);
-
- indexInfoLabelList.get(i).setText(SystemMemoryChart.getTooltipContent(i, yValue));
- }
- break;
- case TimelineConstants.CHART_TYPE_FILE:
- seriesList = FileChart.getSeriesList();
- for (int i = 0; i < seriesList.size(); i++) {
- double yValue = getYbyX(seriesList.get(i).toArray(), tooltipValue);
-
- indexInfoLabelList.get(i).setText(FileChart.getTooltipContent(i, yValue));
- }
- break;
- }
- }
-
- Point pt = itemChartComp.toDisplay(e.x, e.y);
- Point size = tooltip.computeSize(SWT.DEFAULT, SWT.DEFAULT);
- tooltip.setBounds(pt.x + TOOLTIP_MARGIN, pt.y - e.y + (itemChartComp.getBounds().height - size.y) / 2, size.x, size.y);
- }
- };
-
- private int getTooltipXPosition(double x) {
- return (int) (x + 0.5);
- }
-
- private void createTooltip(MouseEvent e) {
+ private void createTooltip(MouseEvent e, int correctedX) {
Canvas canvas = (Canvas) e.getSource();
ChartComposite itemChartComp = (ChartComposite) canvas.getParent();
XYPlot xyplot = itemChartComp.getChart().getXYPlot();
Rectangle2D rect2D = plotInfo.getDataArea();
rect2D.setRect(rect2D.getX(), canvas.getBounds().y, canvas.getBounds().width - rect2D.getY(), canvas.getBounds().height);
- double selectedTime = xyplot.getDomainAxis().java2DToValue(e.x, rect2D, xyplot.getDomainAxisEdge());
+ double selectedTime = xyplot.getDomainAxis().java2DToValue(correctedX, rect2D, xyplot.getDomainAxisEdge());
Shell shell = AnalyzerUtil.getWorkbenchWindow().getShell();
tooltip = new Shell(shell, SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL);
gridLayout.marginRight = MARGIN;
gridLayout.verticalSpacing = SPACING;
tooltip.setLayout(gridLayout);
+ tooltip.addMouseListener(tooltipMouseAdapter);
Font indexInfoFont = new Font(Display.getDefault(), FontResources.ARIAL, 8, SWT.NORMAL);
*/
if (show) {
- showTooltip(itemChartComp, e.x, e.y);
+ showTooltip(itemChartComp, correctedX, e.y);
}
}
Composite IndexInfoComposite = new Composite(tooltip, SWT.NONE);
IndexInfoComposite.setLayout(new RowLayout(SWT.HORIZONTAL));
+ IndexInfoComposite.addMouseListener(tooltipMouseAdapter);
Canvas indexCanvas = new Canvas(IndexInfoComposite, SWT.BORDER);
indexCanvas.setBackground(getColorFromAwtColor(seriesColorList.get(i)));
indexCanvas.setLayoutData(rowData);
+ indexCanvas.addMouseListener(tooltipMouseAdapter);
Label indexLabel = new Label(IndexInfoComposite, SWT.NONE);
indexLabel.setFont(indexInfoFont);
indexInfoLabelList.add(indexLabel);
+ indexLabel.addMouseListener(tooltipMouseAdapter);
double yValue = getYbyX(seriesList.get(i).toArray(), selectedTime);
}
selectionMarker = null;
- tooltipMarker = null;
TimelineMaster.getInstance().clearChartPlot();
}
TimelineMaster.getInstance().setSelectionMarker(selectionMarker);
}
- private void initTooltipMarker() {
- tooltipMarker = new ValueMarker(TempConstants.NOT_INITED);
- }
-
private void setSelectionMarkerEndVal(Double endTime) {
double selectionMarkerStartValue = selectionMarker.getStartValue();
double selectionMarkerEndValue = selectionMarker.getEndValue();
}
}
- private void sendSelectionTimes() {
+ private void sendSelectionTimes(MouseEvent e, int correctedX) {
long coolBarTime = CoolbarArea.getInstance().getTime();
if (tempDownTime == tempUpTime) {
if (time <= coolBarTime) {
AnalyzerManager.getCurrentPage().updatePage(new DASelectionData(TimelineComposite.ID, time, time, null, null));
}
+
+ disposeTooltip();
+ createTooltip(e, correctedX);
} else {
long startTime = (long) (selectionMarker.getStartValue() * TimelineConstants.TIME_SEC_TO_MS * TimelineConstants.TIME_SEC_TO_MS);
long endTime = (long) (selectionMarker.getEndValue() * TimelineConstants.TIME_SEC_TO_MS * TimelineConstants.TIME_SEC_TO_MS);
if (endTime > coolBarTime) {
endTime = coolBarTime;
}
+ if(startTime < 0) {
+ startTime = 0;
+ }
AnalyzerManager.getCurrentPage().updatePage(new DASelectionData(TimelineComposite.ID, startTime, endTime, null, null));
}
}
/* Add Listener */
itemChartComposite.addSWTListener(itemMouseListener);
- itemChartComposite.addSWTListener(chartMouseTrackListener);
- itemChartComposite.addSWTListener(chartMouseMoveListener);
if (selectionMarker == null) {
initSelectionMarker();
}
- if (tooltipMarker == null) {
- initTooltipMarker();
- }
itemChartComposite.getChart().getXYPlot().addDomainMarker(selectionMarker, Layer.FOREGROUND);
- // FIXME tooltip
- // itemChartComposite.getChart().getXYPlot().addDomainMarker(tooltipMarker,
- // Layer.FOREGROUND);
TimelineMaster.getInstance().addChartPlot(itemChartComposite.getChart().getXYPlot());
iteminfo.infoComp = itemInfoComp;
for (int i = 0; i < ItemList.size(); i++) {
if (null != ItemList.get(i).chartComp && !ItemList.get(i).chartComp.isDisposed()) {
ItemList.get(i).chartComp.removeMouseListener(itemMouseListener);
- ItemList.get(i).chartComp.removeMouseTrackListener(chartMouseTrackListener);
- ItemList.get(i).chartComp.removeMouseMoveListener(chartMouseMoveListener);
ItemList.get(i).chartComp.getChart().getXYPlot().removeDomainMarker(selectionMarker);
- // FIXME tooltip
- // ItemList.get(i).chartComp.getChart().getXYPlot().removeDomainMarker(tooltipMarker);
}
}
ItemList.clear();