root / trunk / extensions / extGeoProcessing / src / com / iver / cit / gvsig / geoprocess / core / util / Crono.java @ 5412
History | View | Annotate | Download (4.69 KB)
1 | 5412 | azabala | /*
|
---|---|---|---|
2 | * Created on 20-feb-2006
|
||
3 | *
|
||
4 | * gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
||
5 | *
|
||
6 | * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
|
||
7 | *
|
||
8 | * This program is free software; you can redistribute it and/or
|
||
9 | * modify it under the terms of the GNU General Public License
|
||
10 | * as published by the Free Software Foundation; either version 2
|
||
11 | * of the License, or (at your option) any later version.
|
||
12 | *
|
||
13 | * This program is distributed in the hope that it will be useful,
|
||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
16 | * GNU General Public License for more details.
|
||
17 | *
|
||
18 | * You should have received a copy of the GNU General Public License
|
||
19 | * along with this program; if not, write to the Free Software
|
||
20 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
21 | *
|
||
22 | * For more information, contact:
|
||
23 | *
|
||
24 | * Generalitat Valenciana
|
||
25 | * Conselleria d'Infraestructures i Transport
|
||
26 | * Av. Blasco Ib??ez, 50
|
||
27 | * 46010 VALENCIA
|
||
28 | * SPAIN
|
||
29 | *
|
||
30 | * +34 963862235
|
||
31 | * gvsig@gva.es
|
||
32 | * www.gvsig.gva.es
|
||
33 | *
|
||
34 | * or
|
||
35 | *
|
||
36 | * IVER T.I. S.A
|
||
37 | * Salamanca 50
|
||
38 | * 46005 Valencia
|
||
39 | * Spain
|
||
40 | *
|
||
41 | * +34 963163400
|
||
42 | * dac@iver.es
|
||
43 | */
|
||
44 | /* CVS MESSAGES:
|
||
45 | *
|
||
46 | * $Id$
|
||
47 | * $Log$
|
||
48 | * Revision 1.1 2006-05-24 21:12:36 azabala
|
||
49 | * primera version en cvs despues de refactoring orientado a crear un framework extensible de geoprocessing
|
||
50 | *
|
||
51 | * Revision 1.1 2006/02/20 19:43:27 azabala
|
||
52 | * *** empty log message ***
|
||
53 | *
|
||
54 | *
|
||
55 | */
|
||
56 | package com.iver.cit.gvsig.geoprocess.core.util; |
||
57 | |||
58 | import java.awt.*; |
||
59 | import java.awt.geom.*; |
||
60 | import java.awt.event.*; |
||
61 | import javax.swing.*; |
||
62 | |||
63 | /**
|
||
64 | * Component to see time (used to monitoring long processes).
|
||
65 | *
|
||
66 | * @author azabala
|
||
67 | *
|
||
68 | */
|
||
69 | public class Crono extends JComponent implements ActionListener { |
||
70 | /**
|
||
71 | *
|
||
72 | */
|
||
73 | private static final long serialVersionUID = -7534000624022602134L; |
||
74 | |||
75 | private final int ox = 4; |
||
76 | |||
77 | private final int oy = 4; |
||
78 | |||
79 | private int tam; |
||
80 | |||
81 | private long start; |
||
82 | |||
83 | private long end; |
||
84 | |||
85 | private boolean counting; |
||
86 | |||
87 | private Timer timer; |
||
88 | |||
89 | /**
|
||
90 | * @roseuid 3CA83ED3006E
|
||
91 | */
|
||
92 | public Crono() {
|
||
93 | this(50); |
||
94 | } |
||
95 | |||
96 | /**
|
||
97 | * @roseuid 3CA83ED3006F
|
||
98 | */
|
||
99 | public Crono(int tam) { |
||
100 | this.tam = tam;
|
||
101 | start = end = System.currentTimeMillis();
|
||
102 | timer = new Timer(1000, this); |
||
103 | setPreferredSize(new Dimension(tam + 8, tam + 30)); |
||
104 | counting = false;
|
||
105 | } |
||
106 | |||
107 | /**
|
||
108 | * @roseuid 3CA83ED3007E
|
||
109 | */
|
||
110 | public void actionPerformed(ActionEvent e) { |
||
111 | end = System.currentTimeMillis();
|
||
112 | repaint(); |
||
113 | } |
||
114 | |||
115 | /**
|
||
116 | * @roseuid 3CA83ED30080
|
||
117 | */
|
||
118 | private float posx(int radio, int grados) { |
||
119 | return (float) (radio * Math.cos(Math.toRadians(grados - 90))); |
||
120 | } |
||
121 | |||
122 | /**
|
||
123 | * @roseuid 3CA83ED3008D
|
||
124 | */
|
||
125 | private float posy(int radio, int grados) { |
||
126 | return (float) (radio * Math.sin(Math.toRadians(grados - 90))); |
||
127 | } |
||
128 | |||
129 | /**
|
||
130 | * @roseuid 3CA83ED30090
|
||
131 | */
|
||
132 | public void paintComponent(Graphics gr) { |
||
133 | this.paintBorder(gr);
|
||
134 | Graphics2D g = (Graphics2D) gr; |
||
135 | if (counting)
|
||
136 | g.setColor(Color.red);
|
||
137 | else
|
||
138 | g.setColor(Color.green);
|
||
139 | g.setStroke(new BasicStroke(3)); |
||
140 | g.fillArc(ox, oy, tam, tam, 0, 360); |
||
141 | g.setColor(getForeground()); |
||
142 | g.drawArc(ox, oy, tam, tam, 0, 360); |
||
143 | int radio = tam / 2; |
||
144 | int cx = radio + ox;
|
||
145 | int cy = radio + oy;
|
||
146 | for (int i = 0; i < 360; i += 30) { |
||
147 | float x0 = cx + posx(radio, i);
|
||
148 | float y0 = cy + posy(radio, i);
|
||
149 | float x1 = cx + posx(radio - 5, i); |
||
150 | float y1 = cy + posy(radio - 5, i); |
||
151 | g.draw(new Line2D.Double(x0, y0, x1, y1)); |
||
152 | } |
||
153 | |||
154 | long v = end - start;
|
||
155 | long m = v / 1000; |
||
156 | long mili = v - m * 1000; |
||
157 | long s = m / 60; |
||
158 | long secs = m - s * 60; |
||
159 | long mi = s / 60; |
||
160 | long mins = s - mi * 60; |
||
161 | |||
162 | float mx = cx + posx(radio - 10, (int) secs * 6); |
||
163 | float my = cy + posy(radio - 10, (int) secs * 6); |
||
164 | g.draw(new Line2D.Float(cx, cy, mx, my)); |
||
165 | mx = cx + posx(radio - 20, (int) mins * 6); |
||
166 | my = cy + posy(radio - 20, (int) mins * 6); |
||
167 | g.draw(new Line2D.Float(cx, cy, mx, my)); |
||
168 | |||
169 | String str = mins + " mins " + secs + " secs"; |
||
170 | g.drawString(str, 0, tam + 20); |
||
171 | } |
||
172 | |||
173 | /**
|
||
174 | * Para el reloj y vuelve a la situacion inicial.
|
||
175 | *
|
||
176 | * @roseuid 3CA83ED3009C
|
||
177 | */
|
||
178 | public void reset() { |
||
179 | timer.stop(); |
||
180 | counting = false;
|
||
181 | start = end = System.currentTimeMillis();
|
||
182 | repaint(); |
||
183 | } |
||
184 | |||
185 | /**
|
||
186 | * Comienza a contar.
|
||
187 | *
|
||
188 | * @roseuid 3CA83ED3009D
|
||
189 | */
|
||
190 | public void start() { |
||
191 | timer.start(); |
||
192 | counting = true;
|
||
193 | start = System.currentTimeMillis();
|
||
194 | } |
||
195 | |||
196 | /**
|
||
197 | * Para de contar
|
||
198 | *
|
||
199 | * @roseuid 3CA83ED3009E
|
||
200 | */
|
||
201 | public void stop() { |
||
202 | end = System.currentTimeMillis();
|
||
203 | timer.stop(); |
||
204 | counting = false;
|
||
205 | repaint(); |
||
206 | } |
||
207 | |||
208 | /**
|
||
209 | * retorna el tiempo transcurrido en mili-segundos.
|
||
210 | *
|
||
211 | * @roseuid 3CA83ED3009F
|
||
212 | */
|
||
213 | public long getElapsed() { |
||
214 | if (counting)
|
||
215 | return System.currentTimeMillis() - start; |
||
216 | else
|
||
217 | return (end - start);
|
||
218 | } |
||
219 | } |