package jp.ymir.taskReporter.ui import java.awt.Dimension import java.awt.event.ComponentAdapter import java.awt.event.ComponentEvent import java.io._ import javax.swing.JOptionPane import javax.swing.JSplitPane import javax.swing.KeyStroke import javax.swing.event.MenuListener import javax.swing.event.MenuEvent import javax.swing.filechooser.FileNameExtensionFilter import jp.ymir.taskReporter._ import jp.ymir.taskReporter.core._ import scala.swing._ import scala.swing.event._ class MainFrame(reportFile: Option[File]) extends Frame { private var reportSet = new ReportSet(reportFile) title = "Task Reporter " + Main.getVersion preferredSize = Preferences.mainFrameSize() peer.addComponentListener(new ComponentAdapter() { override def componentResized(e: ComponentEvent) { Preferences.mainFrameSize() = size } }) menuBar = new MenuBar { contents += new Menu("File") { mnemonic = Key.F val miOpen = new MenuItem(new Action("Open...") { accelerator = Some(KeyStroke.getKeyStroke("control O")) def apply { val chooser = new FileChooser(Preferences.lastChosenDir()) { fileSelectionMode = FileChooser.SelectionMode.FilesOnly fileFilter = new FileNameExtensionFilter("TSV files", "tsv") title = "Select a report file to open..." peer.setAcceptAllFileFilterUsed(false) } val r = chooser.showOpenDialog(null) if (r == FileChooser.Result.Approve) { Preferences.lastChosenDir() = chooser.selectedFile.getParentFile reportSet = new ReportSet(Some(chooser.selectedFile)) } } }) contents += miOpen val miSave = new MenuItem(new Action("Save") { accelerator = Some(KeyStroke.getKeyStroke("control S")); def apply = save }) contents += miSave contents += new Separator contents += new MenuItem(new Action("Quit") { accelerator = Some(KeyStroke.getKeyStroke("control Q")) def apply = closeOperation }) peer.addMenuListener(new MenuListener { def menuSelected(e: MenuEvent) { miOpen.enabled = !dirty miSave.enabled = dirty miSave.text = if (reportSet.file.isEmpty) "Save..." else "Save" } def menuDeselected(e: MenuEvent) {} def menuCanceled(e: MenuEvent) {} }) } } contents = new SplitPane { peer.setOrientation(JSplitPane.HORIZONTAL_SPLIT) resizeWeight = 0.3 leftComponent = new BorderPanel { val title = new Label("Report date") { horizontalAlignment = Alignment.Leading } layout(title) = BorderPanel.Position.North val scroll = new ScrollPane { horizontalScrollBarPolicy = ScrollPane.BarPolicy.Never verticalScrollBarPolicy = ScrollPane.BarPolicy.Always contents = new ListView[String] { // FIXME // listData = } } layout(scroll) = BorderPanel.Position.Center } } centerOnScreen visible = true override def closeOperation { if (dirty) { val r = JOptionPane.showConfirmDialog( peer, "The report file \"" + reportSet.file.get.getName + "\" has been modified.\n" + "Do you want to save it before closing?", "Confirmation", JOptionPane.YES_NO_CANCEL_OPTION); r match { case JOptionPane.YES_OPTION => save; dispose case JOptionPane.NO_OPTION => dispose case _ => } } else { dispose } } def dirty : Boolean = { return reportSet.dirty } def save { if (reportSet.file.isEmpty) { val chooser = new FileChooser(Preferences.lastChosenDir()) val r = chooser.showSaveDialog(null) if (r != FileChooser.Result.Approve) { return } if (chooser.selectedFile.exists) { val r = JOptionPane.showConfirmDialog( peer, "The chosen file or directory \"" + chooser.selectedFile.getName + "\" already exists.\n" + "Do you want to overwrite it?", "Confirmation", JOptionPane.YES_NO_OPTION) r match { case JOptionPane.YES_OPTION => case JOptionPane.NO_OPTION => return } } Preferences.lastChosenDir() = chooser.selectedFile.getParentFile reportSet.file = Some(chooser.selectedFile) } reportSet.save } }