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.JSplitPane
8 import javax.swing.KeyStroke
9 import javax.swing.event.MenuListener
10 import javax.swing.event.MenuEvent
11 import javax.swing.filechooser.FileNameExtensionFilter
12 import jp.ymir.taskReporter._
13 import jp.ymir.taskReporter.core._
15 import scala.swing.event._
17 class MainFrame(reportFile: Option[File]) extends Frame {
18 private var reportSet = new ReportSet(reportFile)
20 title = "Task Reporter " + Main.getVersion
22 size = Preferences.mainFrameSize()
25 peer.addComponentListener(new ComponentAdapter() {
26 override def componentResized(e: ComponentEvent) {
27 Preferences.mainFrameSize() = size
31 menuBar = new MenuBar {
32 contents += new Menu("File") {
35 val miOpen = new MenuItem(new Action("Open...") {
36 accelerator = Some(KeyStroke.getKeyStroke("control O"))
38 val chooser = new FileChooser(Preferences.lastChosenDir()) {
39 fileSelectionMode = FileChooser.SelectionMode.FilesOnly
40 fileFilter = new FileNameExtensionFilter("TSV files", "tsv")
41 title = "Select a report file to open..."
42 peer.setAcceptAllFileFilterUsed(false)
44 val r = chooser.showOpenDialog(null)
45 if (r == FileChooser.Result.Approve) {
46 Preferences.lastChosenDir() = chooser.selectedFile.getParentFile
47 reportSet = new ReportSet(Some(chooser.selectedFile))
53 val miSave = new MenuItem(new Action("Save") {
54 accelerator = Some(KeyStroke.getKeyStroke("control S"));
59 contents += new Separator
61 contents += new MenuItem(new Action("Quit") {
62 accelerator = Some(KeyStroke.getKeyStroke("control Q"))
63 def apply = closeOperation
66 peer.addMenuListener(new MenuListener {
67 def menuSelected(e: MenuEvent) {
68 miOpen.enabled = !dirty
69 miSave.enabled = dirty
71 if (reportSet.file.isEmpty)
76 def menuDeselected(e: MenuEvent) {}
77 def menuCanceled(e: MenuEvent) {}
82 contents = new SplitPane {
83 peer.setOrientation(JSplitPane.HORIZONTAL_SPLIT)
86 leftComponent = new BorderPanel {
87 val title = new Label("Report date") {
88 horizontalAlignment = Alignment.Leading
90 layout(title) = BorderPanel.Position.North
92 val scroll = new ScrollPane {
93 horizontalScrollBarPolicy = ScrollPane.BarPolicy.Never
94 verticalScrollBarPolicy = ScrollPane.BarPolicy.Always
95 contents = new ListView[String] {
100 layout(scroll) = BorderPanel.Position.Center
106 override def closeOperation {
108 val r = JOptionPane.showConfirmDialog(
110 "The report file \"" + reportSet.file.get.getName + "\" has been modified.\n" +
111 "Do you want to save it before closing?",
113 JOptionPane.YES_NO_CANCEL_OPTION);
116 case JOptionPane.YES_OPTION => save; dispose
117 case JOptionPane.NO_OPTION => dispose
126 def dirty : Boolean = {
127 return reportSet.dirty
131 if (reportSet.file.isEmpty) {
132 val chooser = new FileChooser(Preferences.lastChosenDir())
133 val r = chooser.showSaveDialog(null)
134 if (r != FileChooser.Result.Approve) {
138 if (chooser.selectedFile.exists) {
139 val r = JOptionPane.showConfirmDialog(
141 "The chosen file or directory \"" + chooser.selectedFile.getName + "\" already exists.\n" +
142 "Do you want to overwrite it?",
144 JOptionPane.YES_NO_OPTION)
147 case JOptionPane.YES_OPTION =>
148 case JOptionPane.NO_OPTION => return
152 Preferences.lastChosenDir() = chooser.selectedFile.getParentFile
153 reportSet.file = Some(chooser.selectedFile)