Mercurial > cgi-bin > hgweb.cgi > JpegWasher
view src/name/blackcap/exifwasher/HelpDialog.kt @ 57:94cd2d486adc
Tabs to spaces (argh).
author | davidb |
---|---|
date | Thu, 07 May 2020 17:15:43 -0700 |
parents | 224572069e36 |
children |
line wrap: on
line source
/* * The dialog that displays the Exif data in a single file (display only, * no changing). We do this after washing. */ package name.blackcap.exifwasher import java.awt.Dimension import java.awt.Font import java.awt.event.ActionEvent import java.awt.event.ActionListener import java.io.BufferedReader import java.io.File import java.io.IOException import java.io.InputStream import java.io.InputStreamReader import java.util.logging.Level import java.util.logging.Logger import javax.swing.* import javax.swing.text.html.HTMLEditorKit import javax.swing.text.html.StyleSheet import name.blackcap.exifwasher.exiv2.* class HelpDialog : JDialog(Application.mainFrame) { private val BW = 9 private val BW2 = BW * 2 private val WIDTH = 640 private val HEIGHT = 480 private val dismissButton = JButton("Dismiss").also { it.addActionListener(ActionListener { setVisible(false) }) } /* * The stock HTMLEditorKit shares all style sheet data between all its * instances. How unbelievably braindamaged. Correct that. */ private class MyEditorKit: HTMLEditorKit() { private var _styleSheet: StyleSheet = defaultStyleSheet override fun getStyleSheet() = _styleSheet override fun setStyleSheet(value: StyleSheet) { _styleSheet = value } /** * Return the default style sheet that all HTMLEditorKit's come with. */ val defaultStyleSheet: StyleSheet get() { return super.getStyleSheet() } } private val helpPane = JScrollPane(JTextPane().also { it.editorKit = MyEditorKit().also { ek -> UIManager.getFont("Panel.font")?.let { pFont -> ek.styleSheet = StyleSheet().apply { addRule("body { font-family: \"${pFont.family}\"; font-size: ${pFont.size}; }") addStyleSheet(ek.defaultStyleSheet) } } } it.text = this::class.java.getResourceAsStream("help.html").bufferedReader().use { it.readText() } it.setEditable(false) }).apply { alignmentX = JScrollPane.CENTER_ALIGNMENT addBorder(BorderFactory.createEmptyBorder(BW2, BW2, BW, BW2)) verticalScrollBarPolicy = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS horizontalScrollBarPolicy = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER preferredSize = Dimension(WIDTH, HEIGHT) background = Application.mainFrame.background } override fun setVisible(vis: Boolean) { if (vis) helpPane.verticalScrollBar.run { value = minimum } super.setVisible(vis) } init { setVisible(false) title = "Help" contentPane.apply { layout = BoxLayout(this, BoxLayout.Y_AXIS) add(helpPane) add(Box(BoxLayout.X_AXIS).apply { alignmentX = Box.CENTER_ALIGNMENT border = BorderFactory.createEmptyBorder(BW, BW2, BW2, BW2) add(Box.createHorizontalGlue()) add(dismissButton) }) } pack() } }