--- /dev/null
+package jp.ymir.taskReporter
+import java.io._
+import javax.swing._
+import jp.ymir.taskReporter.ui._
+
+object Main {
+ def getVersion : String = {
+ // FIXME: Read it from the MANIFEST.MF
+ return "0.0.1"
+ }
+
+ def main(args: Array[String]) {
+ try {
+ // FIXME: Provide a way to configure this.
+ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel")
+ JFrame.setDefaultLookAndFeelDecorated(true)
+ JDialog.setDefaultLookAndFeelDecorated(true)
+ }
+ catch {
+ case e: Exception =>
+ e.printStackTrace
+ }
+
+ args.length match {
+ case 0 => new MainFrame(None)
+ case 1 => new MainFrame(Some(new File(args(0))))
+ }
+ }
+}
--- /dev/null
+package jp.ymir.taskReporter.ui
+import java.awt.Dimension
+import java.io._
+import javax.swing.JOptionPane
+import javax.swing.KeyStroke
+import javax.swing.event.MenuListener
+import javax.swing.event.MenuEvent
+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)
+
+ title = "Task Reporter" + Main.getVersion
+
+ // FIXME: Provide a way to configure this.
+ size = new Dimension(640, 480)
+ centerOnScreen
+
+ 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 =>
+ // FIXME
+ dispose
+ case JOptionPane.NO_OPTION =>
+ dispose
+ case _ =>
+ }
+ }
+ else {
+ dispose
+ }
+ }
+
+ def dirty : Boolean = {
+ return reportSet.dirty
+ }
+
+ menuBar = new MenuBar {
+ contents += new Menu("File") {
+ mnemonic = Key.F
+
+ contents += new MenuItem(new Action("Open...") {
+ accelerator = Some(KeyStroke.getKeyStroke("control O"))
+ def apply {
+ // FIXME
+ }
+ })
+
+ val save = new MenuItem(new Action("Save") {
+ accelerator = Some(KeyStroke.getKeyStroke("control S"));
+ def apply {
+ // FIXME
+ }
+ })
+ contents += save
+ peer.addMenuListener(new MenuListener {
+ def menuSelected(e: MenuEvent) {
+ save.enabled = dirty
+ save.text =
+ if (reportSet.file.isEmpty)
+ "Save..."
+ else
+ "Save"
+ }
+ def menuDeselected(e: MenuEvent) {}
+ def menuCanceled(e: MenuEvent) {}
+ })
+ }
+ }
+
+ visible = true
+}