[Title]modify tooltip
authorsanghyunnim.lee <sanghyunnim.lee@samsung.com>
Tue, 3 Jul 2012 09:41:04 +0000 (18:41 +0900)
committersanghyunnim.lee <sanghyunnim.lee@samsung.com>
Tue, 3 Jul 2012 09:41:04 +0000 (18:41 +0900)
[Type]feature
[Module]
[Priority]
[CQ#]
[Redmine#]5682
[Problem]
[Cause]
[Solution]
[TestCase]

org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TempConstants.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/TimelineItemManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/CPUChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/CPUCoreChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/CPUFrequencyChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/FileChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/timeline/chart/HeapChart.java

index b2eeb8c..234f085 100644 (file)
@@ -38,8 +38,8 @@ public class TempConstants {
                }
        }
        
-//     public static final Color SELECTION_COLOR = new Color(0, 0, 255, 50);
-       public static final Color SELECTION_COLOR = new Color(0, 45, 59, 50);
+       public static final Color SELECTION_COLOR = new Color(240, 240, 240, 50);
+//     public static final Color SELECTION_COLOR = new Color(0, 45, 59, 50);
        
        public static final double WIFI_SET_VALUE = 0.97;
        public static final double BT_SET_VALUE = 0.92;
index 8718133..6b23f8d 100755 (executable)
@@ -1,9 +1,5 @@
 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;
@@ -13,8 +9,6 @@ import org.eclipse.swt.custom.ScrolledComposite;
 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;
@@ -42,12 +36,10 @@ import org.jfree.chart.JFreeChart;
 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;
@@ -95,8 +87,6 @@ public class TimelineItemManager {
        private IntervalMarker selectionMarker;
 
        private Shell tooltip;
-       private ValueMarker tooltipMarker;
-       private int tooltipValue;
 
        private double tempDownTime = TempConstants.NOT_INITED;
        private double tempUpTime = TempConstants.NOT_INITED;
@@ -133,6 +123,12 @@ public class TimelineItemManager {
                        return infoZoomLabel;
                }
        }
+       
+       private MouseAdapter tooltipMouseAdapter = new MouseAdapter() {
+               public void mouseUp(MouseEvent e) {
+                       disposeTooltip();
+               }
+       };
 
        public TimelineItemManager() {
                chartManager = new TimelineChartManager();
@@ -242,14 +238,17 @@ public class TimelineItemManager {
                        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());
                }
@@ -267,13 +266,16 @@ public class TimelineItemManager {
                        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);
@@ -284,160 +286,7 @@ public class TimelineItemManager {
                }
        };
 
-       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();
 
@@ -448,7 +297,7 @@ public class TimelineItemManager {
                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);
@@ -460,6 +309,7 @@ public class TimelineItemManager {
                gridLayout.marginRight = MARGIN;
                gridLayout.verticalSpacing = SPACING;
                tooltip.setLayout(gridLayout);
+               tooltip.addMouseListener(tooltipMouseAdapter);
 
                Font indexInfoFont = new Font(Display.getDefault(), FontResources.ARIAL, 8, SWT.NORMAL);
 
@@ -635,7 +485,7 @@ public class TimelineItemManager {
                 */
 
                if (show) {
-                       showTooltip(itemChartComp, e.x, e.y);
+                       showTooltip(itemChartComp, correctedX, e.y);
                }
        }
 
@@ -686,14 +536,17 @@ public class TimelineItemManager {
 
                        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);
 
@@ -783,7 +636,6 @@ public class TimelineItemManager {
                }
 
                selectionMarker = null;
-               tooltipMarker = null;
 
                TimelineMaster.getInstance().clearChartPlot();
        }
@@ -917,10 +769,6 @@ public class TimelineItemManager {
                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();
@@ -942,7 +790,7 @@ public class TimelineItemManager {
                }
        }
 
-       private void sendSelectionTimes() {
+       private void sendSelectionTimes(MouseEvent e, int correctedX) {
                long coolBarTime = CoolbarArea.getInstance().getTime();
 
                if (tempDownTime == tempUpTime) {
@@ -950,6 +798,9 @@ public class TimelineItemManager {
                        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);
@@ -957,6 +808,9 @@ public class TimelineItemManager {
                                if (endTime > coolBarTime) {
                                        endTime = coolBarTime;
                                }
+                               if(startTime < 0) {
+                                       startTime = 0;
+                               }
                                AnalyzerManager.getCurrentPage().updatePage(new DASelectionData(TimelineComposite.ID, startTime, endTime, null, null));
                        }
                }
@@ -1193,19 +1047,11 @@ public class TimelineItemManager {
 
                /* 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;
@@ -1222,11 +1068,7 @@ public class TimelineItemManager {
                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();
index 9309d6e..ad23f1a 100644 (file)
@@ -201,7 +201,7 @@ public class CPUChart extends TimelineChart {
                        try {
                                time = (long)Double.parseDouble(log.get(LogCenterConstants.DEVICE_TIME_INDEX)) / TimelineConstants.TIME_US_TO_MS / TimelineConstants.TIME_US_TO_MS;
                                String[] cpuRates = log.get(LogCenterConstants.DEVICE_SYSTEM_CPU_USAGE_INDEX).split(","); //$NON-NLS-1$
-                               systemAvgLoad = Double.parseDouble(cpuRates[cpuRates.length - 1].trim());
+                               systemAvgLoad = Double.parseDouble(cpuRates[cpuRates.length - 1]);
                        } catch (NumberFormatException ne) {
                                ne.printStackTrace();
                        } catch (NullPointerException ne) {
index 1aba1a0..803896d 100644 (file)
@@ -244,7 +244,7 @@ public class CPUCoreChart extends TimelineChart {
                                }
                                
                                for(int i = 0; i < coreSize; i++) {
-                                       coreInfos[i].newXYDataItems.add(new XYDataItem(time, Double.parseDouble(cpuRates[i].trim())));
+                                       coreInfos[i].newXYDataItems.add(new XYDataItem(time, Double.parseDouble(cpuRates[i])));
                                }
                        } catch (NumberFormatException ne) {
                                ne.printStackTrace();
index f21ebf1..50136cf 100644 (file)
@@ -147,7 +147,7 @@ public class CPUFrequencyChart extends TimelineChart {
                        try {
                                time = Double.parseDouble(log.get(LogCenterConstants.DEVICE_TIME_INDEX)) / TimelineConstants.TIME_US_TO_MS / TimelineConstants.TIME_US_TO_MS;
                                String[] cpuFreqs = log.get(LogCenterConstants.DEVICE_CPU_FREQUENCY_INDEX).split(","); //$NON-NLS-1$
-                               freq1 = Double.parseDouble(cpuFreqs[0].trim());
+                               freq1 = Double.parseDouble(cpuFreqs[0]);
                        } catch (NumberFormatException ne) {
                                ne.printStackTrace();
                        } catch (NullPointerException ne) {
index 2231d1d..6829f6f 100644 (file)
@@ -180,6 +180,13 @@ public class FileChart extends TimelineChart {
                readInfo.newXYDataItems.clear();
                writeInfo.newXYDataItems.clear();
                fdCountInfo.newXYDataItems.clear();
+               
+               maxFDCount = MIN_FDCOUNT;
+
+               readByte = 0;
+               writeByte = 0;
+
+               fdCount = 0;
 
                Display.getDefault().asyncExec(new Runnable() {
                        @Override
index 3f7f57f..b924fa3 100644 (file)
@@ -136,6 +136,9 @@ public class HeapChart extends TimelineChart {
        public void clear() {
                totalAllocationInfo.newXYDataItems.clear();
                userAllocationInfo.newXYDataItems.clear();
+               
+               allocByte = 0;
+               allocationInfoMap.clear();
 
                Display.getDefault().asyncExec(new Runnable() {
                        @Override