view src/name/blackcap/exifwasher/MainFrame.kt @ 60:d0b83fc1d62a default tip

Remember our input directory on a per-invocation basis.
author David Barts <n5jrn@me.com>
date Sun, 26 Jul 2020 15:14:03 -0700
parents aa9ab6cbaa26
children
line wrap: on
line source

/*
 * The main application window.
 */
package name.blackcap.exifwasher

import java.awt.Dimension
import java.awt.datatransfer.DataFlavor
import java.awt.datatransfer.Transferable
import java.awt.datatransfer.UnsupportedFlavorException
import java.awt.event.WindowEvent
import java.awt.event.WindowListener
import java.io.File
import java.io.IOException
import java.util.logging.Level
import java.util.logging.Logger
import javax.swing.*
import javax.imageio.ImageIO

/* the main frame itself */
class MainFrame : JFrame(Application.MYNAME) {
    /* default size */
    val WIDTH = 512
    val HEIGHT = 384

    /* does a system exit when needed */
    private class KillIt() : WindowListener {
        /* events we don't care about */
        override fun windowActivated(e: WindowEvent) {}
        override fun windowClosed(e: WindowEvent) {}
        override fun windowDeactivated(e: WindowEvent) {}
        override fun windowDeiconified(e: WindowEvent) {}
        override fun windowIconified(e: WindowEvent) {}
        override fun windowOpened(e: WindowEvent) {}

        /* and the one we do */
        override fun windowClosing(e: WindowEvent) {
            LOGGER.log(Level.INFO, "execution complete")
            System.exit(0)
        }
    }

    /* acts on dragged files */
    private class MyTransferHandler : TransferHandler() {
        override fun canImport(support: TransferHandler.TransferSupport): Boolean {
            return support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)
        }

        override fun importData(support: TransferHandler.TransferSupport): Boolean {
            if (!canImport(support)) {
                return false
            }
            val files = try {
                support.transferable.getTransferData(DataFlavor.javaFileListFlavor) as List<File>
            } catch (e: UnsupportedFlavorException) {
                return false
            } catch (e: IOException) {
                return false
            }
            for (file in files) {
                WashDialog().wash(file)
            }
            return true
        }
    }

    init {
        if (OS.type != OS.MAC) {
            setIconImage(ImageIO.read(this::class.java.getResourceAsStream("icon_48x48.png")))
        }
        contentPane.add(
            JLabel("Drag image files into this window or choose Fileā€¦ Wash from menu.").apply {
                horizontalAlignment = JLabel.CENTER
                verticalAlignment = JLabel.CENTER
            })
        preferredSize = Dimension(WIDTH, HEIGHT)
        transferHandler = MyTransferHandler()
        pack()
        addWindowListener(KillIt())
    }
}