X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=task-reporter.git;a=blobdiff_plain;f=src%2Fmain%2Fscala%2Fjp%2Fymir%2FtaskReporter%2Fui%2FMainFrame.scala;fp=src%2Fmain%2Fscala%2Fjp%2Fymir%2FtaskReporter%2Fui%2FMainFrame.scala;h=24b60046b12b120358104e5dfb13d985e54041a6;hp=4b31c01270822fe6476d1756514a2a991e8245a2;hb=8bb945088ae66f9687f1fd5aa72a1440aba54466;hpb=cac69ad60a6bf6df341e65e3309b7700e14741df diff --git a/src/main/scala/jp/ymir/taskReporter/ui/MainFrame.scala b/src/main/scala/jp/ymir/taskReporter/ui/MainFrame.scala index 4b31c01..24b6004 100644 --- a/src/main/scala/jp/ymir/taskReporter/ui/MainFrame.scala +++ b/src/main/scala/jp/ymir/taskReporter/ui/MainFrame.scala @@ -1,24 +1,32 @@ 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.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 val reportSet: ReportSet = new ReportSet(reportFile) + private var reportSet = new ReportSet(reportFile) - title = "Task Reporter" + Main.getVersion + title = "Task Reporter " + Main.getVersion - // FIXME: Provide a way to configure this. - size = new Dimension(640, 480) + size = Preferences.mainFrameSize() centerOnScreen + peer.addComponentListener(new ComponentAdapter() { + override def componentResized(e: ComponentEvent) { + Preferences.mainFrameSize() = size + } + }) + override def closeOperation { if (dirty) { val r = JOptionPane.showConfirmDialog( @@ -29,11 +37,8 @@ class MainFrame(reportFile: Option[File]) extends Frame { JOptionPane.YES_NO_CANCEL_OPTION); r match { - case JOptionPane.YES_OPTION => - // FIXME - dispose - case JOptionPane.NO_OPTION => - dispose + case JOptionPane.YES_OPTION => save; dispose + case JOptionPane.NO_OPTION => dispose case _ => } } @@ -46,28 +51,75 @@ class MainFrame(reportFile: Option[File]) extends Frame { 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 + } + menuBar = new MenuBar { contents += new Menu("File") { mnemonic = Key.F - contents += new MenuItem(new Action("Open...") { + val miOpen = new MenuItem(new Action("Open...") { accelerator = Some(KeyStroke.getKeyStroke("control O")) def apply { - // FIXME + 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 save = new MenuItem(new Action("Save") { + val miSave = new MenuItem(new Action("Save") { accelerator = Some(KeyStroke.getKeyStroke("control S")); - def apply { - // FIXME - } + def apply { save } }) - contents += 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) { - save.enabled = dirty - save.text = + miOpen.enabled = !dirty + miSave.enabled = dirty + miSave.text = if (reportSet.file.isEmpty) "Save..." else