changeset 921:5c92b1c6da21

Follow the white rabbit review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-January/005183.html reviewed-by: jerboaa
author Mario Torre <neugens.limasoftware@gmail.com>
date Fri, 18 Jan 2013 19:39:00 +0100
parents ce04776b8b81
children beda9a88a646
files thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/SwingThreadTimelineView.java
diffstat 1 files changed, 36 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/SwingThreadTimelineView.java	Fri Jan 18 18:43:12 2013 +0100
+++ b/thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/SwingThreadTimelineView.java	Fri Jan 18 19:39:00 2013 +0100
@@ -38,42 +38,29 @@
 
 import java.awt.BorderLayout;
 import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.GridLayout;
-import java.awt.Point;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
+
 import java.util.List;
-import java.util.Map;
 
 import javax.swing.DefaultListModel;
 import javax.swing.JList;
 import javax.swing.JPanel;
+import javax.swing.JScrollBar;
 import javax.swing.JScrollPane;
-import javax.swing.ListCellRenderer;
 import javax.swing.SwingUtilities;
-import javax.swing.SwingWorker;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
 import com.redhat.thermostat.client.swing.ComponentVisibleListener;
 import com.redhat.thermostat.client.swing.SwingComponent;
 import com.redhat.thermostat.common.model.LongRange;
-
 import com.redhat.thermostat.thread.client.common.Timeline;
-import com.redhat.thermostat.thread.client.common.TimelineInfo;
 import com.redhat.thermostat.thread.client.common.view.ThreadTimelineView;
 import com.redhat.thermostat.thread.client.swing.impl.timeline.TimelineCellRenderer;
 import com.redhat.thermostat.thread.client.swing.impl.timeline.TimelineComponent;
 import com.redhat.thermostat.thread.client.swing.impl.timeline.TimelineRulerHeader;
 import com.redhat.thermostat.thread.client.swing.impl.timeline.TimelineUtils;
-import com.redhat.thermostat.thread.model.ThreadInfoData;
 
 public class SwingThreadTimelineView extends ThreadTimelineView implements SwingComponent  {
-
-    private final String lock = new String("SwingThreadTimelineViewLock");
         
     private JPanel timeLinePanel;
     private JList<TimelineComponent> chartList;
@@ -110,6 +97,14 @@
         timeLinePanel.add(timelineLegend, BorderLayout.SOUTH);
     }
     
+    private class ScrollChangeListener implements ChangeListener {
+        @Override
+        public void stateChanged(ChangeEvent e) {
+            scrollPane.repaint();
+            header.repaint();
+        }
+    }
+    
     private JScrollPane createScrollPane() {
         scrollPane = new JScrollPane(chartList);
         scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
@@ -118,52 +113,52 @@
         long now = System.currentTimeMillis();
         header = new TimelineRulerHeader(new LongRange(now, now + TimelineUtils.STEP), scrollPane);
         scrollPane.setColumnHeaderView(header);
-        scrollPane.getHorizontalScrollBar().getModel().addChangeListener(new ChangeListener() {
+
+        ScrollChangeListener listener = new ScrollChangeListener();
+        
+        scrollPane.getHorizontalScrollBar().getModel().addChangeListener(listener);
+        scrollPane.getVerticalScrollBar().getModel().addChangeListener(listener);
+        
+        return scrollPane;
+    }
+    
+    private void handleScrollBar() {
+        SwingUtilities.invokeLater(new Runnable() {
             @Override
-            public void stateChanged(ChangeEvent e) {
-                scrollPane.repaint();
+            public void run() {        
+                JScrollBar scrollBar = scrollPane.getHorizontalScrollBar();                
+                if (!chartModel.isEmpty()) {
+                    TimelineComponent component = chartModel.getElementAt(0);
+
+                    int extent = scrollBar.getVisibleAmount();
+                    int min = scrollBar.getMinimum();
+                    int max = component.getWidth() + (2 * TimelineUtils.INC);
+
+                    scrollBar.setValues(max - extent, extent, min, max);
+                }
             }
         });
-        scrollPane.getVerticalScrollBar().getModel().addChangeListener(new ChangeListener() {
-            @Override
-            public void stateChanged(ChangeEvent e) {
-                scrollPane.repaint();
-            }
-        });        
-        return scrollPane;
     }
     
     @Override
     public void displayStats(final List<Timeline> timelines, final LongRange range) {
+                
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
+                range.setMax(range.getMax() + (2 * TimelineUtils.STEP));
                 chartModel.removeAllElements();
                 for (Timeline timeline : timelines) {
                     chartModel.addElement(new TimelineComponent(range, timeline, scrollPane));
                 }
                 header.getRange().setMin(range.getMin());
                 header.getRange().setMax(range.getMax());
+                
+                handleScrollBar();
             }
         });
     }
     
-//    private class SelectedThreadListener implements PropertyChangeListener {
-//        @Override
-//        public void propertyChange(final PropertyChangeEvent evt) {
-//            SwingWorker<Void, Void> notifier = new SwingWorker<Void, Void>() {
-//                @Override
-//                protected Void doInBackground() throws Exception {
-//                    SwingThreadTimelineView.this.
-//                    threadTimelineNotifier.fireAction(ThreadTimelineView.ThreadTimelineViewAction.THREAD_TIMELINE_SELECTED,
-//                                                      evt.getNewValue());
-//                    return null;
-//                }
-//            };
-//            notifier.execute();
-//        }
-//    }
-    
     @Override
     public Component getUiComponent() {
         return timeLinePanel;