src/Tools/jEdit/src/pide_docking_framework.scala
author wenzelm
Fri, 01 Apr 2022 17:06:10 +0200
changeset 75393 87ebf5a50283
parent 73987 fc363a3b690a
permissions -rw-r--r--
clarified formatting, for the sake of scala3;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
73987
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73909
diff changeset
     1
/*  Title:      Tools/jEdit/src/pide_docking_framework.scala
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
     3
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
     4
PIDE docking framework: "Original" with some add-ons.
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
     5
*/
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
     6
73987
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73909
diff changeset
     7
package isabelle.jedit
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
     8
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
     9
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    10
import isabelle._
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    11
73909
1d0d9772fff0 tuned imports;
wenzelm
parents: 73340
diff changeset
    12
import java.util.{List => JList}
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    13
import java.awt.event.{ActionListener, ActionEvent}
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    14
import javax.swing.{JPopupMenu, JMenuItem}
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    15
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    16
import org.gjt.sp.jedit.View
56936
6dd8866eca69 more direct patch of public interface DockableWindowContainer -- avoid package org.gjt.sp.jedit.gui intrusion;
wenzelm
parents: 56906
diff changeset
    17
import org.gjt.sp.jedit.gui.{DockableWindowManagerProvider, DockableWindowFactory,
6dd8866eca69 more direct patch of public interface DockableWindowContainer -- avoid package org.gjt.sp.jedit.gui intrusion;
wenzelm
parents: 56906
diff changeset
    18
  DockableWindowManager, DockableWindowManagerImpl, DockableWindowContainer,
6dd8866eca69 more direct patch of public interface DockableWindowContainer -- avoid package org.gjt.sp.jedit.gui intrusion;
wenzelm
parents: 56906
diff changeset
    19
  FloatingWindowContainer, PanelWindowContainer}
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    20
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    21
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    22
class PIDE_Docking_Framework extends DockableWindowManagerProvider {
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    23
  override def create(
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    24
    view: View,
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    25
    instance: DockableWindowFactory,
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    26
    config: View.ViewConfig): DockableWindowManager =
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    27
  new DockableWindowManagerImpl(view, instance, config) {
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    28
    override def createPopupMenu(
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    29
      container: DockableWindowContainer,
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    30
      dockable_name: String,
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    31
      clone: Boolean
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    32
    ): JPopupMenu = {
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    33
      val menu = super.createPopupMenu(container, dockable_name, clone)
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    34
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    35
      val detach_operation: Option[() => Unit] =
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    36
        container match {
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    37
          case floating: FloatingWindowContainer =>
59079
12a689755c3d tuned signature -- more explicit types;
wenzelm
parents: 56936
diff changeset
    38
            Untyped.get[AnyRef](Untyped.get[AnyRef](floating, "entry"), "win") match {
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    39
              case dockable: Dockable => dockable.detach_operation
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    40
              case _ => None
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    41
            }
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    42
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    43
          case panel: PanelWindowContainer =>
73909
1d0d9772fff0 tuned imports;
wenzelm
parents: 73340
diff changeset
    44
            val entries = Untyped.get[JList[AnyRef]](panel, "dockables").toArray
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    45
            val wins =
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    46
              (for {
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    47
                entry <- entries.iterator
59079
12a689755c3d tuned signature -- more explicit types;
wenzelm
parents: 56936
diff changeset
    48
                if Untyped.get[String](Untyped.get(entry, "factory"), "name") == dockable_name
12a689755c3d tuned signature -- more explicit types;
wenzelm
parents: 56936
diff changeset
    49
                win = Untyped.get[Any](entry, "win")
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    50
                if win != null
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    51
              } yield win).toList
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    52
            wins match {
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    53
              case List(dockable: Dockable) => dockable.detach_operation
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    54
              case _ => None
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    55
            }
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    56
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    57
          case _ => None
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    58
        }
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    59
      if (detach_operation.isDefined) {
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    60
        val detach_item = new JMenuItem("Detach")
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    61
        detach_item.addActionListener(new ActionListener {
73340
0ffcad1f6130 tuned --- fewer warnings;
wenzelm
parents: 66591
diff changeset
    62
          def actionPerformed(evt: ActionEvent): Unit = detach_operation.get.apply()
56906
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    63
        })
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    64
        menu.add(detach_item)
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    65
      }
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    66
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    67
      menu
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    68
    }
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    69
  }
408b526911f7 some odd tricks to provide "Detach" menu item, via "PIDE" docking framework;
wenzelm
parents:
diff changeset
    70
}