author | wenzelm |
Sun, 05 Feb 2023 15:59:18 +0100 | |
changeset 77197 | a541da01ba67 |
parent 75811 | 74d6d09e1a36 |
child 82142 | 508a673c87ac |
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.Image |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
13 |
import java.awt.event.{ActionListener, ActionEvent} |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
14 |
import javax.swing.{ImageIcon, Timer} |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
15 |
import scala.swing.{Label, Component} |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
16 |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
17 |
|
75393 | 18 |
class Process_Indicator { |
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
19 |
private val label = new Label |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
20 |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
21 |
private val passive_icon = |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
22 |
JEdit_Lib.load_image_icon(PIDE.options.string("process_passive_icon")).getImage |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
23 |
private val active_icons = |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
24 |
space_explode(':', PIDE.options.string("process_active_icons")).map(name => |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
25 |
JEdit_Lib.load_image_icon(name).getImage) |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
26 |
|
75393 | 27 |
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
|
28 |
private var current_frame = 0 |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
29 |
private val timer = |
75811 | 30 |
new Timer(0, { (_: ActionEvent) => |
31 |
current_frame = (current_frame + 1) % active_icons.length |
|
32 |
setImage(active_icons(current_frame)) |
|
33 |
label.repaint() |
|
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
34 |
}) |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
35 |
timer.setRepeats(true) |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
36 |
|
75393 | 37 |
def update(rate: Int): Unit = { |
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
38 |
if (rate == 0) { |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
39 |
setImage(passive_icon) |
75811 | 40 |
timer.stop() |
73367 | 41 |
label.repaint() |
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
42 |
} |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
43 |
else { |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
44 |
val delay = 1000 / rate |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
45 |
timer.setInitialDelay(delay) |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
46 |
timer.setDelay(delay) |
75811 | 47 |
timer.restart() |
52934
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 |
} |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
50 |
} |
56666
229309cbc508
avoid accidental use of scala.language.reflectiveCalls;
wenzelm
parents:
52934
diff
changeset
|
51 |
|
229309cbc508
avoid accidental use of scala.language.reflectiveCalls;
wenzelm
parents:
52934
diff
changeset
|
52 |
private val animation = new Animation |
52934
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
53 |
label.icon = animation |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
54 |
|
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
55 |
def component: Component = label |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
56 |
|
75393 | 57 |
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
|
58 |
label.tooltip = tip |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
59 |
animation.update(rate) |
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 |
} |
bfb6873df88e
separate Process_Indicator -- simplified/clarified version of org.gjt.sp.jedit.gui.AnimatedIcon;
wenzelm
parents:
diff
changeset
|
62 |