src/Tools/jEdit/src/process_indicator.scala
author wenzelm
Tue, 24 Jun 2025 21:05:48 +0200
changeset 82747 00828818a607
parent 82553 42ea1a06e56e
permissions -rw-r--r--
tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    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
42ea1a06e56e updated to jedit-20250417;
wenzelm
parents: 82142
diff changeset
    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
42ea1a06e56e updated to jedit-20250417;
wenzelm
parents: 82142
diff changeset
    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
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    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
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    29
      new Timer(0, { (_: ActionEvent) =>
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    30
        current_frame = (current_frame + 1) % active_icons.length
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    31
        setImage(active_icons(current_frame))
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    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
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    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
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    39
        timer.stop()
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
    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
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    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
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    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