src/Tools/jEdit/src/symbols_dockable.scala
author wenzelm
Wed, 02 Apr 2025 23:18:12 +0200
changeset 82418 6898054035d6
parent 81657 4210fd10e776
permissions -rw-r--r--
support goto_file / hyperlink_file with offset; clarified signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50143
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
     1
/*  Title:      Tools/jEdit/src/symbols_dockable.scala
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
     2
    Author:     Fabian Immler
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
     3
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
     4
Dockable window for Symbol Palette.
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
     5
*/
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
     6
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
     7
package isabelle.jedit
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
     8
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
     9
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
    10
import isabelle._
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
    11
56755
f29c9e7a3a80 clarified GUI focus;
wenzelm
parents: 56754
diff changeset
    12
import scala.swing.event.{SelectionChanged, ValueChanged}
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
    13
import scala.swing.{Component, Action, Button, TabbedPane, TextField, BorderPanel,
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
    14
  Label, ScrollPane}
50143
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
    15
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    16
import org.gjt.sp.jedit.{EditBus, EBComponent, EBMessage, View}
50299
f70b3712040f renamed dockable "Prover Session" to "Theories";
wenzelm
parents: 50207
diff changeset
    17
f70b3712040f renamed dockable "Prover Session" to "Theories";
wenzelm
parents: 50207
diff changeset
    18
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 75200
diff changeset
    19
class Symbols_Dockable(view: View, position: String) extends Dockable(view, position) {
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    20
  private def font_size: Int =
81381
wenzelm
parents: 78614
diff changeset
    21
    Font_Info.main_size(scale = PIDE.options.real("jedit_font_scale")).round
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    22
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    23
63877
wenzelm
parents: 63874
diff changeset
    24
  /* abbrevs */
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    25
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    26
  private val abbrevs_panel = new Abbrevs_Panel
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    27
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    28
  private val abbrevs_refresh_delay =
76610
6e2383488a55 clarified signature: proper scopes and types;
wenzelm
parents: 75402
diff changeset
    29
    Delay.last(PIDE.session.update_delay, gui = true) { abbrevs_panel.refresh() }
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    30
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 75200
diff changeset
    31
  private class Abbrev_Component(txt: String, abbrs: List[String]) extends Button {
75200
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
    32
    def update_font(): Unit = { font = GUI.font(size = font_size) }
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
    33
    update_font()
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
    34
81657
4210fd10e776 clarified signature;
wenzelm
parents: 81381
diff changeset
    35
    text = GUI.Style_HTML.enclose_text(Symbol.decode(txt))
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    36
    action =
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    37
      Action(text) {
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    38
        val text_area = view.getTextArea
63873
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    39
        val (s1, s2) =
67130
b023f64e0d16 tuned signature;
wenzelm
parents: 66591
diff changeset
    40
          Completion.split_template(Isabelle_Encoding.perhaps_decode(text_area.getBuffer, txt))
63873
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    41
        text_area.setSelectedText(s1 + s2)
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    42
        text_area.moveCaretPosition(text_area.getCaretPosition - s2.length)
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
    43
        text_area.requestFocus()
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    44
      }
63873
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    45
    tooltip = GUI.tooltip_lines(cat_lines(txt :: abbrs.map(a => "abbrev: " + a)))
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    46
  }
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    47
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 75200
diff changeset
    48
  private class Abbrevs_Panel extends Wrap_Panel(Nil, Wrap_Panel.Alignment.Center) {
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    49
    private var abbrevs: Thy_Header.Abbrevs = Nil
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    50
75200
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
    51
    def refresh(): Unit = GUI_Thread.require {
63873
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    52
      val abbrevs1 = Isabelle.buffer_syntax(view.getBuffer).getOrElse(Outer_Syntax.empty).abbrevs
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    53
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    54
      if (abbrevs != abbrevs1) {
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    55
        abbrevs = abbrevs1
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    56
63873
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    57
        val entries: List[(String, List[String])] =
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    58
          Multi_Map(
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    59
            (for {
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    60
              (abbr, txt0) <- abbrevs
63926
70973a1b4ec0 tuned -- fewer warnings;
wenzelm
parents: 63877
diff changeset
    61
              txt = Symbol.encode(txt0)
63873
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    62
              if !Symbol.iterator(txt).
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    63
                forall(s => s.length == 1 && s(0) != Completion.caret_indicator)
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    64
            } yield (txt, abbr)): _*).iterator_list.toList
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    65
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
    66
        contents.clear()
63873
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    67
        for ((txt, abbrs) <- entries.sortBy(_._1))
228a85f1d6af clarified GUI representation of replacement texts with zero or more abbrevs;
wenzelm
parents: 63872
diff changeset
    68
          contents += new Abbrev_Component(txt, abbrs.filterNot(_ == "").sorted)
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    69
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
    70
        revalidate()
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
    71
        repaint()
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    72
      }
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    73
    }
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    74
75200
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
    75
    refresh()
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    76
  }
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
    77
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    78
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    79
  /* symbols */
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
    80
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 75200
diff changeset
    81
  private class Symbol_Component(val symbol: String, is_control: Boolean) extends Button {
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 75200
diff changeset
    82
    def update_font(): Unit = {
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
    83
      font =
75195
596e77cda169 clarified signature;
wenzelm
parents: 73987
diff changeset
    84
        Symbol.symbols.fonts.get(symbol) match {
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
    85
          case None => GUI.font(size = font_size)
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
    86
          case Some(font_family) => GUI.font(family = font_family, size = font_size)
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
    87
        }
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
    88
    }
75200
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
    89
    update_font()
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
    90
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50186
diff changeset
    91
    action =
62104
fb73c0d7bb37 clarified symbol insertion, depending on buffer encoding;
wenzelm
parents: 62024
diff changeset
    92
      Action(Symbol.decode(symbol)) {
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50186
diff changeset
    93
        val text_area = view.getTextArea
65997
e3dc9ea67a62 output control symbols like ML version, with optionally hidden source;
wenzelm
parents: 65259
diff changeset
    94
        if (is_control && HTML.is_control(symbol))
65259
41d12227d5dc clarified modules;
wenzelm
parents: 63926
diff changeset
    95
          Syntax_Style.edit_control_style(text_area, symbol)
62104
fb73c0d7bb37 clarified symbol insertion, depending on buffer encoding;
wenzelm
parents: 62024
diff changeset
    96
        else
67130
b023f64e0d16 tuned signature;
wenzelm
parents: 66591
diff changeset
    97
          text_area.setSelectedText(Isabelle_Encoding.perhaps_decode(text_area.getBuffer, symbol))
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
    98
        text_area.requestFocus()
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50186
diff changeset
    99
      }
56622
891d1b8b64fb clarified tooltip_lines: HTML.encode already takes care of newline (but not space);
wenzelm
parents: 56609
diff changeset
   100
    tooltip =
891d1b8b64fb clarified tooltip_lines: HTML.encode already takes care of newline (but not space);
wenzelm
parents: 56609
diff changeset
   101
      GUI.tooltip_lines(
75199
1ced8ee860e2 clarified signature;
wenzelm
parents: 75197
diff changeset
   102
        cat_lines(symbol :: Symbol.symbols.get_abbrevs(symbol).map(a => "abbrev: " + a)))
50143
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
   103
  }
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
   104
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 75200
diff changeset
   105
  private class Reset_Component extends Button {
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50186
diff changeset
   106
    action = Action("Reset") {
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50186
diff changeset
   107
      val text_area = view.getTextArea
65259
41d12227d5dc clarified modules;
wenzelm
parents: 63926
diff changeset
   108
      Syntax_Style.edit_control_style(text_area, "")
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   109
      text_area.requestFocus()
50187
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50186
diff changeset
   110
    }
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50186
diff changeset
   111
    tooltip = "Reset control symbols within text"
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50186
diff changeset
   112
  }
b5a09812abc4 special handling of control symbols in Symbols dockable;
wenzelm
parents: 50186
diff changeset
   113
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   114
63877
wenzelm
parents: 63874
diff changeset
   115
  /* search */
wenzelm
parents: 63874
diff changeset
   116
wenzelm
parents: 63874
diff changeset
   117
  private class Search_Panel extends BorderPanel {
wenzelm
parents: 63874
diff changeset
   118
    val search_field = new TextField(10)
75200
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
   119
    val results_panel: Wrap_Panel = Wrap_Panel(Nil, Wrap_Panel.Alignment.Center)
63877
wenzelm
parents: 63874
diff changeset
   120
    layout(search_field) = BorderPanel.Position.North
wenzelm
parents: 63874
diff changeset
   121
    layout(new ScrollPane(results_panel)) = BorderPanel.Position.Center
wenzelm
parents: 63874
diff changeset
   122
75200
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
   123
    private val search_space =
75197
29e11ce79a52 clarified signature;
wenzelm
parents: 75195
diff changeset
   124
      for (entry <- Symbol.symbols.entries if entry.code.isDefined)
29e11ce79a52 clarified signature;
wenzelm
parents: 75195
diff changeset
   125
        yield entry.symbol -> Word.lowercase(entry.symbol)
75200
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
   126
    val search_delay: Delay =
76610
6e2383488a55 clarified signature: proper scopes and types;
wenzelm
parents: 75402
diff changeset
   127
      Delay.last(PIDE.session.input_delay, gui = true) {
63877
wenzelm
parents: 63874
diff changeset
   128
        val search_words = Word.explode(Word.lowercase(search_field.text))
wenzelm
parents: 63874
diff changeset
   129
        val search_limit = PIDE.options.int("jedit_symbols_search_limit") max 0
wenzelm
parents: 63874
diff changeset
   130
        val results =
wenzelm
parents: 63874
diff changeset
   131
          for ((sym, s) <- search_space; if search_words.forall(s.contains(_))) yield sym
wenzelm
parents: 63874
diff changeset
   132
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   133
        results_panel.contents.clear()
63877
wenzelm
parents: 63874
diff changeset
   134
        for (sym <- results.take(search_limit))
wenzelm
parents: 63874
diff changeset
   135
          results_panel.contents += new Symbol_Component(sym, false)
wenzelm
parents: 63874
diff changeset
   136
        if (results.length > search_limit)
wenzelm
parents: 63874
diff changeset
   137
          results_panel.contents +=
wenzelm
parents: 63874
diff changeset
   138
            new Label("...") { tooltip = "(" + (results.length - search_limit) + " more)" }
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   139
        revalidate()
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   140
        repaint()
63877
wenzelm
parents: 63874
diff changeset
   141
      }
75402
42fe20507496 proper indentation (relevant for scala3);
wenzelm
parents: 75393
diff changeset
   142
    search_field.reactions += { case ValueChanged(_) => search_delay.invoke() }
63877
wenzelm
parents: 63874
diff changeset
   143
  }
wenzelm
parents: 63874
diff changeset
   144
wenzelm
parents: 63874
diff changeset
   145
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   146
  /* tabs */
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
   147
56756
wenzelm
parents: 56755
diff changeset
   148
  private val group_tabs: TabbedPane = new TabbedPane {
63870
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
   149
    pages += new TabbedPane.Page("abbrevs", abbrevs_panel)
6db1aac936db added abbrevs panel;
wenzelm
parents: 62104
diff changeset
   150
50192
22d0f64362a5 tuned -- Symbol.groups already sorted;
wenzelm
parents: 50191
diff changeset
   151
    pages ++=
75195
596e77cda169 clarified signature;
wenzelm
parents: 73987
diff changeset
   152
      Symbol.symbols.groups_code.map({ case (group, symbols) =>
66205
e9fa94f43a15 tuned signature;
wenzelm
parents: 65997
diff changeset
   153
        val control = group == "control"
50151
5f5e74365f14 capitalize lowercase groups;
immler
parents: 50146
diff changeset
   154
        new TabbedPane.Page(group,
66205
e9fa94f43a15 tuned signature;
wenzelm
parents: 65997
diff changeset
   155
          new ScrollPane(Wrap_Panel(
e9fa94f43a15 tuned signature;
wenzelm
parents: 65997
diff changeset
   156
            symbols.map(new Symbol_Component(_, control)) :::
66206
2d2082db735a clarified defaults;
wenzelm
parents: 66205
diff changeset
   157
            (if (control) List(new Reset_Component) else Nil),
2d2082db735a clarified defaults;
wenzelm
parents: 66205
diff changeset
   158
            Wrap_Panel.Alignment.Center)), null)
56753
40f8822d6bef misc tuning;
wenzelm
parents: 56622
diff changeset
   159
      })
40f8822d6bef misc tuning;
wenzelm
parents: 56622
diff changeset
   160
63877
wenzelm
parents: 63874
diff changeset
   161
    val search_panel = new Search_Panel
wenzelm
parents: 63874
diff changeset
   162
    val search_page = new TabbedPane.Page("search", search_panel, "Search Symbols")
56755
f29c9e7a3a80 clarified GUI focus;
wenzelm
parents: 56754
diff changeset
   163
    pages += search_page
f29c9e7a3a80 clarified GUI focus;
wenzelm
parents: 56754
diff changeset
   164
f29c9e7a3a80 clarified GUI focus;
wenzelm
parents: 56754
diff changeset
   165
    listenTo(selection)
f29c9e7a3a80 clarified GUI focus;
wenzelm
parents: 56754
diff changeset
   166
    reactions += {
63877
wenzelm
parents: 63874
diff changeset
   167
      case SelectionChanged(_) if selection.page == search_page =>
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   168
        search_panel.search_field.requestFocus()
56755
f29c9e7a3a80 clarified GUI focus;
wenzelm
parents: 56754
diff changeset
   169
    }
f29c9e7a3a80 clarified GUI focus;
wenzelm
parents: 56754
diff changeset
   170
56756
wenzelm
parents: 56755
diff changeset
   171
    for (page <- pages)
78614
4da5cdaa4dcd clarified signature;
wenzelm
parents: 76610
diff changeset
   172
      page.title = Word.implode(Word.explode('_', page.title).map(Word.perhaps_capitalized))
50143
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
   173
  }
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
   174
  set_content(group_tabs)
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   175
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   176
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   177
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   178
  /* main */
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   179
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   180
  private val edit_bus_handler: EBComponent =
75200
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
   181
    (_: EBMessage) => abbrevs_refresh_delay.invoke()
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   182
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   183
  private val main =
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   184
    Session.Consumer[Any](getClass.getName) {
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   185
      case _: Session.Global_Options =>
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   186
        GUI_Thread.later {
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   187
          val comp = group_tabs.peer
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   188
          GUI.traverse_components(comp,
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   189
            {
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   190
              case c0: javax.swing.JComponent =>
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   191
                Component.wrap(c0) match {
75200
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
   192
                  case c: Abbrev_Component => c.update_font()
c05f0e8a54de misc tuning, based on suggestions by IntelliJ IDEA;
wenzelm
parents: 75199
diff changeset
   193
                  case c: Symbol_Component => c.update_font()
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   194
                  case _ =>
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   195
                }
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   196
              case _ =>
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   197
            })
71601
97ccf48c2f0c misc tuning based on hints by IntelliJ IDEA;
wenzelm
parents: 67389
diff changeset
   198
          comp.revalidate()
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   199
          comp.repaint()
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   200
        }
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   201
      case _: Session.Commands_Changed => abbrevs_refresh_delay.invoke()
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   202
    }
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   203
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 75200
diff changeset
   204
  override def init(): Unit = {
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   205
    EditBus.addToBus(edit_bus_handler)
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   206
    PIDE.session.global_options += main
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   207
    PIDE.session.commands_changed += main
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   208
  }
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   209
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 75200
diff changeset
   210
  override def exit(): Unit = {
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   211
    EditBus.removeFromBus(edit_bus_handler)
63874
e2393cfde472 handle font-size events;
wenzelm
parents: 63873
diff changeset
   212
    PIDE.session.global_options -= main
63872
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   213
    PIDE.session.commands_changed -= main
7dd5297d87fa handle update events;
wenzelm
parents: 63870
diff changeset
   214
  }
50143
4ff5d795ed08 dockable with buttons for symbols, grouped and sorted in tabs according to ~~/etc/symbols;
immler
parents:
diff changeset
   215
}