1 package jp.ymir.taskReporter.ui
2 import java.awt.Dimension
3 import java.awt.event.ComponentAdapter
4 import java.awt.event.ComponentEvent
6 import javax.swing.JOptionPane
7 import javax.swing.KeyStroke
8 import javax.swing.event.MenuListener
9 import javax.swing.event.MenuEvent
10 import javax.swing.filechooser.FileNameExtensionFilter
11 import jp.ymir.taskReporter._
12 import jp.ymir.taskReporter.core._
14 import scala.swing.event._
16 class MainFrame(reportFile: Option[File]) extends Frame {
17 private var reportSet = new ReportSet(reportFile)
19 title = "Task Reporter " + Main.getVersion
21 size = Preferences.mainFrameSize()
24 peer.addComponentListener(new ComponentAdapter() {
25 override def componentResized(e: ComponentEvent) {
26 Preferences.mainFrameSize() = size
30 override def closeOperation {
32 val r = JOptionPane.showConfirmDialog(
34 "The report file \"" + reportSet.file.get.getName + "\" has been modified.\n" +
35 "Do you want to save it before closing?",
37 JOptionPane.YES_NO_CANCEL_OPTION);
40 case JOptionPane.YES_OPTION => save; dispose
41 case JOptionPane.NO_OPTION => dispose
50 def dirty : Boolean = {
51 return reportSet.dirty
55 if (reportSet.file.isEmpty) {
56 val chooser = new FileChooser(Preferences.lastChosenDir())
57 val r = chooser.showSaveDialog(null)
58 if (r != FileChooser.Result.Approve) {
62 if (chooser.selectedFile.exists) {
63 val r = JOptionPane.showConfirmDialog(
65 "The chosen file or directory \"" + chooser.selectedFile.getName + "\" already exists.\n" +
66 "Do you want to overwrite it?",
68 JOptionPane.YES_NO_OPTION)
71 case JOptionPane.YES_OPTION =>
72 case JOptionPane.NO_OPTION => return
76 Preferences.lastChosenDir() = chooser.selectedFile.getParentFile
77 reportSet.file = Some(chooser.selectedFile)
83 menuBar = new MenuBar {
84 contents += new Menu("File") {
87 val miOpen = new MenuItem(new Action("Open...") {
88 accelerator = Some(KeyStroke.getKeyStroke("control O"))
90 val chooser = new FileChooser(Preferences.lastChosenDir()) {
91 fileSelectionMode = FileChooser.SelectionMode.FilesOnly
92 fileFilter = new FileNameExtensionFilter("TSV files", "tsv")
93 title = "Select a report file to open..."
94 peer.setAcceptAllFileFilterUsed(false)
96 val r = chooser.showOpenDialog(null)
97 if (r == FileChooser.Result.Approve) {
98 Preferences.lastChosenDir() = chooser.selectedFile.getParentFile
99 reportSet = new ReportSet(Some(chooser.selectedFile))
105 val miSave = new MenuItem(new Action("Save") {
106 accelerator = Some(KeyStroke.getKeyStroke("control S"));
111 contents += new Separator
113 contents += new MenuItem(new Action("Quit") {
114 accelerator = Some(KeyStroke.getKeyStroke("control Q"))
115 def apply { closeOperation }
118 peer.addMenuListener(new MenuListener {
119 def menuSelected(e: MenuEvent) {
120 miOpen.enabled = !dirty
121 miSave.enabled = dirty
123 if (reportSet.file.isEmpty)
128 def menuDeselected(e: MenuEvent) {}
129 def menuCanceled(e: MenuEvent) {}