Fix out of memory crash with TimeUnit.
 
	
	
	
	
	
	
	
	
	
	
	
	
	| .. | .. | 
|---|
| 10 | 10 |  import javax.swing.*; | 
|---|
| 11 | 11 |  import java.util.*; | 
|---|
| 12 | 12 |   | 
|---|
| 13 |  | -public class DateFieldAction extends TimeflowAction {  | 
|---|
 | 13 | +public class DateFieldAction extends TimeflowAction  | 
|---|
 | 14 | +{  | 
|---|
 | 15 | +        public DateFieldAction(TimeflowApp app)  | 
|---|
 | 16 | +        {  | 
|---|
 | 17 | +                super(app, "Set Date Fields...", null, "Set date fields corresponding to start, end.");  | 
|---|
 | 18 | +        }  | 
|---|
| 14 | 19 |   | 
|---|
| 15 |  | -	public DateFieldAction(TimeflowApp app)  | 
|---|
| 16 |  | -	{  | 
|---|
| 17 |  | -		super(app, "Set Date Fields...", null, "Set date fields corresponding to start, end.");  | 
|---|
| 18 |  | -	}  | 
|---|
| 19 |  | -	  | 
|---|
| 20 |  | -	@Override  | 
|---|
| 21 |  | -	public void actionPerformed(ActionEvent e) {  | 
|---|
| 22 |  | -		DateFieldPanel.popWindow(app.model);  | 
|---|
| 23 |  | -	}  | 
|---|
 | 20 | +        @Override  | 
|---|
 | 21 | +        public void actionPerformed(ActionEvent e)  | 
|---|
 | 22 | +        {  | 
|---|
 | 23 | +                DateFieldPanel.popWindow(app.model);  | 
|---|
 | 24 | +        }  | 
|---|
| 24 | 25 |  } | 
|---|
 
| .. | .. | 
|---|
| 6 | 6 |  import java.net.URL; | 
|---|
| 7 | 7 |  import java.util.*; | 
|---|
| 8 | 8 |   | 
|---|
| 9 |  | -public class BasicAct implements Act {  | 
|---|
| 10 |  | -	  | 
|---|
| 11 |  | -	private HashMap data=new HashMap();  | 
|---|
| 12 |  | -	private ActDB db;  | 
|---|
| 13 |  | -	  | 
|---|
| 14 |  | -	public BasicAct(ActDB db)  | 
|---|
| 15 |  | -	{  | 
|---|
| 16 |  | -		this.db=db;  | 
|---|
| 17 |  | -	}  | 
|---|
| 18 |  | -	  | 
|---|
 | 9 | +public class BasicAct implements Act  | 
|---|
 | 10 | +{  | 
|---|
| 19 | 11 |   | 
|---|
| 20 |  | -	@Override  | 
|---|
| 21 |  | -	public String getString(Field field) {  | 
|---|
| 22 |  | -		return (String)data.get(field.getName());  | 
|---|
| 23 |  | -	}  | 
|---|
| 24 |  | -	  | 
|---|
| 25 |  | -	public void setText(Field field, String text)  | 
|---|
| 26 |  | -	{  | 
|---|
| 27 |  | -		data.put(field.getName(), text);  | 
|---|
| 28 |  | -	}  | 
|---|
 | 12 | +        private HashMap data = new HashMap();  | 
|---|
 | 13 | +        private ActDB db;  | 
|---|
| 29 | 14 |   | 
|---|
| 30 |  | -	@Override  | 
|---|
| 31 |  | -	public String[] getTextList(Field field) {  | 
|---|
| 32 |  | -		return (String[])data.get(field.getName());  | 
|---|
| 33 |  | -	}  | 
|---|
| 34 |  | -	  | 
|---|
| 35 |  | -	public void setTextList(Field field, String[] list){  | 
|---|
| 36 |  | -		data.put(field.getName(), list);  | 
|---|
| 37 |  | -	}  | 
|---|
 | 15 | +        public BasicAct(ActDB db)  | 
|---|
 | 16 | +        {  | 
|---|
 | 17 | +                this.db = db;  | 
|---|
 | 18 | +        }  | 
|---|
| 38 | 19 |   | 
|---|
| 39 |  | -	@Override  | 
|---|
| 40 |  | -	public double getValue(Field field) {  | 
|---|
| 41 |  | -		return (Double)data.get(field.getName());  | 
|---|
| 42 |  | -	}  | 
|---|
| 43 |  | -	  | 
|---|
| 44 |  | -	public void setValue(Field field, double value)  | 
|---|
| 45 |  | -	{  | 
|---|
| 46 |  | -		data.put(field.getName(), value);  | 
|---|
| 47 |  | -	}  | 
|---|
 | 20 | +        @Override  | 
|---|
 | 21 | +        public String getString(Field field)  | 
|---|
 | 22 | +        {  | 
|---|
 | 23 | +                Object s = data.get(field.getName());  | 
|---|
 | 24 | +                if (s == null)  | 
|---|
 | 25 | +                        return null;  | 
|---|
 | 26 | +                return s.toString();  | 
|---|
 | 27 | +        }  | 
|---|
| 48 | 28 |   | 
|---|
| 49 |  | -	@Override  | 
|---|
| 50 |  | -	public Object get(Field field) {  | 
|---|
| 51 |  | -		return data.get(field.getName());  | 
|---|
| 52 |  | -	}  | 
|---|
 | 29 | +        public void setText(Field field, String text)  | 
|---|
 | 30 | +        {  | 
|---|
 | 31 | +                data.put(field.getName(), text);  | 
|---|
 | 32 | +        }  | 
|---|
| 53 | 33 |   | 
|---|
| 54 |  | -	@Override  | 
|---|
| 55 |  | -	public ActDB getDB() {  | 
|---|
| 56 |  | -		return db;  | 
|---|
| 57 |  | -	}  | 
|---|
 | 34 | +        @Override  | 
|---|
 | 35 | +        public String[] getTextList(Field field)  | 
|---|
 | 36 | +        {  | 
|---|
 | 37 | +                return (String[]) data.get(field.getName());  | 
|---|
 | 38 | +        }  | 
|---|
| 58 | 39 |   | 
|---|
| 59 |  | -	@Override  | 
|---|
| 60 |  | -	public void set(Field field, Object value) {  | 
|---|
| 61 |  | -		data.put(field.getName(), value);  | 
|---|
| 62 |  | -	}  | 
|---|
 | 40 | +        public void setTextList(Field field, String[] list)  | 
|---|
 | 41 | +        {  | 
|---|
 | 42 | +                data.put(field.getName(), list);  | 
|---|
 | 43 | +        }  | 
|---|
| 63 | 44 |   | 
|---|
 | 45 | +        @Override  | 
|---|
 | 46 | +        public double getValue(Field field)  | 
|---|
 | 47 | +        {  | 
|---|
 | 48 | +                return (Double) data.get(field.getName());  | 
|---|
 | 49 | +        }  | 
|---|
| 64 | 50 |   | 
|---|
| 65 |  | -	@Override  | 
|---|
| 66 |  | -	public RoughTime getTime(Field field) {  | 
|---|
| 67 |  | -		return (RoughTime)data.get(field.getName());  | 
|---|
| 68 |  | -	}  | 
|---|
 | 51 | +        public void setValue(Field field, double value)  | 
|---|
 | 52 | +        {  | 
|---|
 | 53 | +                data.put(field.getName(), value);  | 
|---|
 | 54 | +        }  | 
|---|
| 69 | 55 |   | 
|---|
 | 56 | +        @Override  | 
|---|
 | 57 | +        public Object get(Field field)  | 
|---|
 | 58 | +        {  | 
|---|
 | 59 | +                return data.get(field.getName());  | 
|---|
 | 60 | +        }  | 
|---|
| 70 | 61 |   | 
|---|
| 71 |  | -	@Override  | 
|---|
| 72 |  | -	public void setTime(Field field, RoughTime time) {  | 
|---|
| 73 |  | -		data.put(field.getName(), time);  | 
|---|
| 74 |  | -		  | 
|---|
| 75 |  | -	}  | 
|---|
 | 62 | +        @Override  | 
|---|
 | 63 | +        public ActDB getDB()  | 
|---|
 | 64 | +        {  | 
|---|
 | 65 | +                return db;  | 
|---|
 | 66 | +        }  | 
|---|
| 76 | 67 |   | 
|---|
 | 68 | +        @Override  | 
|---|
 | 69 | +        public void set(Field field, Object value)  | 
|---|
 | 70 | +        {  | 
|---|
 | 71 | +                data.put(field.getName(), value);  | 
|---|
 | 72 | +        }  | 
|---|
| 77 | 73 |   | 
|---|
| 78 |  | -	@Override  | 
|---|
| 79 |  | -	public URL getURL(Field field) {  | 
|---|
| 80 |  | -		return (URL)data.get(field.getName());  | 
|---|
| 81 |  | -	}  | 
|---|
 | 74 | +        @Override  | 
|---|
 | 75 | +        public RoughTime getTime(Field field)  | 
|---|
 | 76 | +        {  | 
|---|
 | 77 | +                return (RoughTime) data.get(field.getName());  | 
|---|
 | 78 | +        }  | 
|---|
| 82 | 79 |   | 
|---|
 | 80 | +        @Override  | 
|---|
 | 81 | +        public void setTime(Field field, RoughTime time)  | 
|---|
 | 82 | +        {  | 
|---|
 | 83 | +                data.put(field.getName(), time);  | 
|---|
| 83 | 84 |   | 
|---|
| 84 |  | -	@Override  | 
|---|
| 85 |  | -	public void setURL(Field field, URL url) {  | 
|---|
| 86 |  | -		data.put(field.getName(), url);  | 
|---|
| 87 |  | -	}  | 
|---|
 | 85 | +        }  | 
|---|
| 88 | 86 |   | 
|---|
 | 87 | +        @Override  | 
|---|
 | 88 | +        public URL getURL(Field field)  | 
|---|
 | 89 | +        {  | 
|---|
 | 90 | +                return (URL) data.get(field.getName());  | 
|---|
 | 91 | +        }  | 
|---|
 | 92 | +  | 
|---|
 | 93 | +        @Override  | 
|---|
 | 94 | +        public void setURL(Field field, URL url)  | 
|---|
 | 95 | +        {  | 
|---|
 | 96 | +                data.put(field.getName(), url);  | 
|---|
 | 97 | +        }  | 
|---|
| 89 | 98 |  } | 
|---|
 
| .. | .. | 
|---|
| 106 | 106 |          public String format() | 
|---|
| 107 | 107 |          { | 
|---|
| 108 | 108 |                  //return units.formatFull(time); | 
|---|
| 109 |  | -                return TimeUnit.SECOND.formatFull(time);  | 
|---|
 | 109 | +                String format = TimeUnit.REALTIME.formatFull(time);  | 
|---|
 | 110 | +                  | 
|---|
 | 111 | +                if (format.equals("00:00:00:00"))  | 
|---|
 | 112 | +                {  | 
|---|
 | 113 | +                        format = TimeUnit.DAY.formatFull(time);  | 
|---|
 | 114 | +                }  | 
|---|
 | 115 | +                  | 
|---|
 | 116 | +                return format;  | 
|---|
| 110 | 117 |          } | 
|---|
| 111 | 118 |   | 
|---|
| 112 | 119 |          public static int compare(RoughTime t1, RoughTime t2) | 
|---|
 
| .. | .. | 
|---|
| 13 | 13 |          public static final TimeUnit HOUR = new TimeUnit("Hours", Calendar.HOUR_OF_DAY, 60 * 60 * 1000L, "HH:mm", "MMM d yyyy HH:mm"); | 
|---|
| 14 | 14 |          public static final TimeUnit MINUTE = new TimeUnit("Minutes", Calendar.MINUTE, 60 * 1000L, ":mm", "MMM d yyyy HH:mm"); | 
|---|
| 15 | 15 |          public static final TimeUnit SECOND = new TimeUnit("Seconds", Calendar.SECOND, 1000L, ":ss", "MMM d yyyy HH:mm:ss"); | 
|---|
| 16 |  | -        public static final TimeUnit REALTIME = new TimeUnit("Realtime", Calendar.MILLISECOND, 8L, ":SSS", "MMM d yyyy HH:mm:ss:SSS");  | 
|---|
 | 16 | +        public static final TimeUnit REALTIME = new TimeUnit("Realtime", Calendar.MILLISECOND, 1L, ":SS", "HH:mm:ss.SS");  | 
|---|
| 17 | 17 |           | 
|---|
| 18 | 18 |          public static final TimeUnit DECADE = multipleYears(10); | 
|---|
| 19 | 19 |          public static final TimeUnit CENTURY = multipleYears(100); | 
|---|
| .. | .. | 
|---|
| 101 | 101 |          } | 
|---|
| 102 | 102 |          private static final int[] calendarUnits = | 
|---|
| 103 | 103 |          { | 
|---|
| 104 |  | -                Calendar.SECOND, Calendar.MINUTE, Calendar.HOUR_OF_DAY, Calendar.DAY_OF_MONTH, Calendar.MONTH, Calendar.YEAR  | 
|---|
 | 104 | +                Calendar.MILLISECOND, Calendar.SECOND, Calendar.MINUTE, Calendar.HOUR_OF_DAY, Calendar.DAY_OF_MONTH, Calendar.MONTH, Calendar.YEAR  | 
|---|
| 105 | 105 |          }; | 
|---|
| 106 | 106 |   | 
|---|
| 107 | 107 |          public RoughTime round(long timestamp, boolean up) | 
|---|
| .. | .. | 
|---|
| 128 | 128 |                                  } | 
|---|
| 129 | 129 |                                  if (i == calendarUnits.length - 1) | 
|---|
| 130 | 130 |                                  { | 
|---|
| 131 |  | -                                        throw new IllegalArgumentException("Unsupported Calendar Unit: " + calendarCode);  | 
|---|
 | 131 | +                                        //throw new IllegalArgumentException("Unsupported Calendar Unit: " + calendarCode);  | 
|---|
| 132 | 132 |                                  } | 
|---|
| 133 | 133 |                                  c.set(calendarUnits[i], c.getMinimum(calendarUnits[i])); | 
|---|
| 134 | 134 |                          } | 
|---|
 
| .. | .. | 
|---|
| 44 | 44 |  	// because then the guesser succeeds before it has a chance to try parsing days. | 
|---|
| 45 | 45 |  	static | 
|---|
| 46 | 46 |  	{ | 
|---|
| 47 |  | -		parsers.add(new DateTimeParser("yyyy-MM-ddzzzzzzzzzz", TimeUnit.DAY));  | 
|---|
| 48 |  | -		parsers.add(new DateTimeParser("MMM dd yyyy HH:mm", TimeUnit.SECOND));  | 
|---|
| 49 |  | -		parsers.add(new DateTimeParser("MMM/dd/yyyy HH:mm", TimeUnit.SECOND));  | 
|---|
| 50 |  | -		parsers.add(new DateTimeParser("MM/dd/yy HH:mm", TimeUnit.SECOND));  | 
|---|
| 51 |  | -		parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss", TimeUnit.SECOND));  | 
|---|
| 52 |  | -		parsers.add(new DateTimeParser("MM/dd/yyyy HH:mm:ss", TimeUnit.SECOND));  | 
|---|
| 53 |  | -		parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss zzzzzzzz", TimeUnit.SECOND));  | 
|---|
| 54 |  | -		parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND));  | 
|---|
| 55 |  | -		parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND));  | 
|---|
| 56 |  | -		parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY));  | 
|---|
| 57 |  | -		parsers.add(new DateTimeParser("yyyy-MM-dd", TimeUnit.DAY));  | 
|---|
| 58 |  | -		parsers.add(new DateTimeParser("yyyyMMdd", TimeUnit.DAY));  | 
|---|
| 59 |  | -		parsers.add(new DateTimeParser("MM-dd-yy", TimeUnit.DAY));  | 
|---|
| 60 |  | -		parsers.add(new DateTimeParser("dd-MMM-yy", TimeUnit.DAY));  | 
|---|
| 61 |  | -		parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY));  | 
|---|
| 62 |  | -		parsers.add(new DateTimeParser("MM/dd/yy", TimeUnit.DAY));  | 
|---|
| 63 |  | -		parsers.add(new DateTimeParser("MM/dd/yyyy", TimeUnit.DAY));  | 
|---|
| 64 |  | -		parsers.add(new DateTimeParser("dd MMM yyyy", TimeUnit.DAY));  | 
|---|
| 65 |  | -		parsers.add(new DateTimeParser("dd MMM, yyyy", TimeUnit.DAY));  | 
|---|
 | 47 | +//		parsers.add(new DateTimeParser("yyyy-MM-ddzzzzzzzzzz", TimeUnit.DAY));  | 
|---|
 | 48 | +//		parsers.add(new DateTimeParser("MMM dd yyyy HH:mm", TimeUnit.SECOND));  | 
|---|
 | 49 | +//		parsers.add(new DateTimeParser("MMM/dd/yyyy HH:mm", TimeUnit.SECOND));  | 
|---|
 | 50 | +//		parsers.add(new DateTimeParser("MM/dd/yy HH:mm", TimeUnit.SECOND));  | 
|---|
 | 51 | +//		parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss", TimeUnit.SECOND));  | 
|---|
 | 52 | +		parsers.add(new DateTimeParser("HH:mm:ss:SS", TimeUnit.REALTIME));  | 
|---|
 | 53 | +//		parsers.add(new DateTimeParser("MM/dd/yyyy HH:mm:ss", TimeUnit.SECOND));  | 
|---|
 | 54 | +//		parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss zzzzzzzz", TimeUnit.SECOND));  | 
|---|
 | 55 | +//		parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND));  | 
|---|
 | 56 | +//		parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND));  | 
|---|
 | 57 | +//		parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY));  | 
|---|
 | 58 | +//		parsers.add(new DateTimeParser("yyyy-MM-dd", TimeUnit.DAY));  | 
|---|
 | 59 | +//		parsers.add(new DateTimeParser("yyyyMMdd", TimeUnit.DAY));  | 
|---|
 | 60 | +//		parsers.add(new DateTimeParser("MM-dd-yy", TimeUnit.DAY));  | 
|---|
 | 61 | +//		parsers.add(new DateTimeParser("dd-MMM-yy", TimeUnit.DAY));  | 
|---|
 | 62 | +//		parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY));  | 
|---|
 | 63 | +//		parsers.add(new DateTimeParser("MM/dd/yy", TimeUnit.DAY));  | 
|---|
 | 64 | +//		parsers.add(new DateTimeParser("MM/dd/yyyy", TimeUnit.DAY));  | 
|---|
 | 65 | +//		parsers.add(new DateTimeParser("dd MMM yyyy", TimeUnit.DAY));  | 
|---|
 | 66 | +//		parsers.add(new DateTimeParser("dd MMM, yyyy", TimeUnit.DAY));  | 
|---|
| 66 | 67 |  		parsers.add(new DateTimeParser("MMM dd yyyy", TimeUnit.DAY)); | 
|---|
| 67 |  | -		parsers.add(new DateTimeParser("MMM dd, yyyy", TimeUnit.DAY));  | 
|---|
| 68 |  | -		parsers.add(new DateTimeParser("EEE MMM dd zzzzzzzz yyyy", TimeUnit.DAY));  | 
|---|
| 69 |  | -		parsers.add(new DateTimeParser("EEE MMM dd yyyy", TimeUnit.DAY));  | 
|---|
| 70 |  | -		parsers.add(new DateTimeParser("MMM-yy", TimeUnit.MONTH));  | 
|---|
| 71 |  | -		parsers.add(new DateTimeParser("MMM yy", TimeUnit.MONTH));  | 
|---|
| 72 |  | -		parsers.add(new DateTimeParser("MMM/yy", TimeUnit.MONTH));  | 
|---|
| 73 |  | -		parsers.add(new DateTimeParser("yyyy", TimeUnit.YEAR));  | 
|---|
| 74 |  | -		parsers.add(new DateTimeParser("yyyy GG", TimeUnit.YEAR));  | 
|---|
 | 68 | +//		parsers.add(new DateTimeParser("MMM dd, yyyy", TimeUnit.DAY));  | 
|---|
 | 69 | +//		parsers.add(new DateTimeParser("EEE MMM dd zzzzzzzz yyyy", TimeUnit.DAY));  | 
|---|
 | 70 | +//		parsers.add(new DateTimeParser("EEE MMM dd yyyy", TimeUnit.DAY));  | 
|---|
 | 71 | +//		parsers.add(new DateTimeParser("MMM-yy", TimeUnit.MONTH));  | 
|---|
 | 72 | +//		parsers.add(new DateTimeParser("MMM yy", TimeUnit.MONTH));  | 
|---|
 | 73 | +//		parsers.add(new DateTimeParser("MMM/yy", TimeUnit.MONTH));  | 
|---|
 | 74 | +//		parsers.add(new DateTimeParser("yyyy", TimeUnit.YEAR));  | 
|---|
 | 75 | +//		parsers.add(new DateTimeParser("yyyy GG", TimeUnit.YEAR));  | 
|---|
 | 76 | +		parsers.add(new DateTimeParser("S", TimeUnit.REALTIME));  | 
|---|
| 75 | 77 |  	} | 
|---|
| 76 | 78 |  	 | 
|---|
| 77 | 79 |  	public DateTimeParser getLastGoodFormat() | 
|---|
 
| .. | .. | 
|---|
| 10 | 10 |          public List<Long> tics; | 
|---|
| 11 | 11 |          private static final TimeUnit[] units = | 
|---|
| 12 | 12 |          { | 
|---|
| 13 |  | -                TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.DAY, TimeUnit.HOUR, TimeUnit.MINUTE, TimeUnit.SECOND  | 
|---|
 | 13 | +                TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.DAY, TimeUnit.HOUR, TimeUnit.MINUTE, TimeUnit.SECOND, TimeUnit.REALTIME  | 
|---|
| 14 | 14 |          }; | 
|---|
| 15 | 15 |          private static final TimeUnit[] histUnits = | 
|---|
| 16 | 16 |          { | 
|---|
| .. | .. | 
|---|
| 20 | 20 |                  TimeUnit.WEEK, TimeUnit.DAY.times(2), TimeUnit.DAY, | 
|---|
| 21 | 21 |                  TimeUnit.HOUR, | 
|---|
| 22 | 22 |                  TimeUnit.MINUTE, | 
|---|
| 23 |  | -                TimeUnit.SECOND  | 
|---|
 | 23 | +                TimeUnit.SECOND,  | 
|---|
 | 24 | +                TimeUnit.REALTIME  | 
|---|
| 24 | 25 |          }; | 
|---|
| 25 | 26 |   | 
|---|
| 26 | 27 |          public AxisTicMarks(TimeUnit unit, long start, long end) | 
|---|
| .. | .. | 
|---|
| 48 | 49 |   | 
|---|
| 49 | 50 |          public static AxisTicMarks histoTics(long start, long end) | 
|---|
| 50 | 51 |          { | 
|---|
| 51 |  | -                for (int i = histUnits.length - 1; i >= 0; i--)  | 
|---|
 | 52 | +                for (int i = histUnits.length; --i >= 0;)  | 
|---|
| 52 | 53 |                  { | 
|---|
| 53 | 54 |                          TimeUnit u = histUnits[i]; | 
|---|
| 54 | 55 |                          long estimate = u.approxNumInRange(start, end); | 
|---|
| 55 | 56 |                          if (estimate < 200 || i == 0) | 
|---|
| 56 | 57 |                          { | 
|---|
 | 58 | +                                if (i == 17)  | 
|---|
 | 59 | +                                        i = 17;  | 
|---|
 | 60 | +                                  | 
|---|
| 57 | 61 |                                  AxisTicMarks t = new AxisTicMarks(u, start, end); | 
|---|
| 58 | 62 |                                  return t; | 
|---|
| 59 | 63 |                          } | 
|---|
 
| .. | .. | 
|---|
| 15 | 15 |   | 
|---|
| 16 | 16 |  public class TimelineSlider extends ModelPanel | 
|---|
| 17 | 17 |  { | 
|---|
| 18 |  | -  | 
|---|
| 19 | 18 |          TimelineVisuals visuals; | 
|---|
| 20 | 19 |          Interval original; | 
|---|
| 21 | 20 |          long minRange; | 
|---|
| .. | .. | 
|---|
| 30 | 29 |   | 
|---|
| 31 | 30 |                  START, END, POSITION, NONE | 
|---|
| 32 | 31 |          }; | 
|---|
 | 32 | +          | 
|---|
| 33 | 33 |          Modify change = Modify.NONE; | 
|---|
| 34 | 34 |          Rectangle startRect = new Rectangle(-1, -1, 0, 0); | 
|---|
| 35 | 35 |          Rectangle endRect = new Rectangle(-1, -1, 0, 0); | 
|---|
| .. | .. | 
|---|
| 165 | 165 |                  scale.setDateRange(visuals.getGlobalInterval()); | 
|---|
| 166 | 166 |                  scale.setNumberRange(ew, w - ew); | 
|---|
| 167 | 167 |   | 
|---|
| 168 |  | -  | 
|---|
| 169 | 168 |                  // draw the area for the central "thumb". | 
|---|
| 170 | 169 |                  int lx = scale.toInt(window().start); | 
|---|
| 171 | 170 |                  int rx = scale.toInt(window().end); | 
|---|
| .. | .. | 
|---|
| 194 | 193 |                                  mostInSlot = Math.max(mostInSlot, slots[s]); | 
|---|
| 195 | 194 |                          } | 
|---|
| 196 | 195 |                  } | 
|---|
 | 196 | +                  | 
|---|
| 197 | 197 |                  if (mostInSlot > 30) | 
|---|
| 198 | 198 |                  { | 
|---|
| 199 | 199 |                          g.setColor(Color.gray); | 
|---|