src/Tools/jEdit/src/process_indicator.scala
author wenzelm
Sun, 05 Feb 2023 15:59:18 +0100
changeset 77197 a541da01ba67
parent 75811 74d6d09e1a36
child 82142 508a673c87ac
permissions -rw-r--r--
clarified signature selection: SortedSet[String], which fits better to stored json and works properly on Windows (NB: document theories have an authentic session-theory name);
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.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
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    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
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    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
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    30
      new Timer(0, { (_: ActionEvent) =>
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    31
        current_frame = (current_frame + 1) % active_icons.length
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    32
        setImage(active_icons(current_frame))
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    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
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    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
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    40
        timer.stop()
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
    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
74d6d09e1a36 tuned, following hints by IntelliJ IDEA;
wenzelm
parents: 75393
diff changeset
    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
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    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