| author | wenzelm |
| Tue, 24 Jun 2025 21:05:48 +0200 | |
| changeset 82747 | 00828818a607 |
| parent 82553 | 42ea1a06e56e |
| permissions | -rw-r--r-- |
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
1 |
/* Title: Tools/jEdit/src/process_indicator.scala |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
2 |
Author: Makarius |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
3 |
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
4 |
Process indicator with animated icon. |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
5 |
*/ |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
6 |
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
7 |
package isabelle.jedit |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
8 |
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
9 |
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
10 |
import isabelle._ |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
11 |
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
12 |
import java.awt.event.{ActionListener, ActionEvent}
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
13 |
import javax.swing.{ImageIcon, Timer}
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
14 |
import scala.swing.{Label, Component}
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
15 |
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
16 |
|
| 75393 | 17 |
class Process_Indicator {
|
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
18 |
private val label = new Label |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
19 |
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
20 |
private val passive_icon = |
| 82553 | 21 |
JEdit_Lib.load_icon(PIDE.options.string("process_passive_icon")).getImage
|
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
22 |
private val active_icons = |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
23 |
space_explode(':', PIDE.options.string("process_active_icons")).map(name =>
|
| 82553 | 24 |
JEdit_Lib.load_icon(name).getImage) |
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
25 |
|
| 75393 | 26 |
private class Animation extends ImageIcon(passive_icon) {
|
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
27 |
private var current_frame = 0 |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
28 |
private val timer = |
| 75811 | 29 |
new Timer(0, { (_: ActionEvent) =>
|
30 |
current_frame = (current_frame + 1) % active_icons.length |
|
31 |
setImage(active_icons(current_frame)) |
|
32 |
label.repaint() |
|
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
33 |
}) |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
34 |
timer.setRepeats(true) |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
35 |
|
| 75393 | 36 |
def update(rate: Int): Unit = {
|
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
37 |
if (rate == 0) {
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
38 |
setImage(passive_icon) |
| 75811 | 39 |
timer.stop() |
| 73367 | 40 |
label.repaint() |
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
41 |
} |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
42 |
else {
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
43 |
val delay = 1000 / rate |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
44 |
timer.setInitialDelay(delay) |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
45 |
timer.setDelay(delay) |
| 75811 | 46 |
timer.restart() |
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
47 |
} |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
48 |
} |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
49 |
} |
|
56666
229309cbc508
avoid accidental use of scala.language.reflectiveCalls;
wenzelm
parents:
52934
diff
changeset
|
50 |
|
|
229309cbc508
avoid accidental use of scala.language.reflectiveCalls;
wenzelm
parents:
52934
diff
changeset
|
51 |
private val animation = new Animation |
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
52 |
label.icon = animation |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
53 |
|
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
54 |
def component: Component = label |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
55 |
|
| 75393 | 56 |
def update(tip: String, rate: Int): Unit = {
|
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
57 |
label.tooltip = tip |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
58 |
animation.update(rate) |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
59 |
} |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
60 |
} |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
61 |