]> gitweb @ CieloNegro.org - task-reporter.git/commitdiff
initial commit
authorPHO <pho@cielonegro.org>
Mon, 29 Sep 2014 06:44:46 +0000 (15:44 +0900)
committerPHO <pho@cielonegro.org>
Mon, 29 Sep 2014 06:44:46 +0000 (15:44 +0900)
.gitignore [new file with mode: 0644]
build.sbt [new file with mode: 0644]
project/plugin.sbt [new file with mode: 0644]
src/main/scala/jp/ymir/taskReporter/Main.scala [new file with mode: 0644]
src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala [new file with mode: 0644]
src/main/scala/jp/ymir/taskReporter/ui/MainFrame.scala [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..eb5a316
--- /dev/null
@@ -0,0 +1 @@
+target
diff --git a/build.sbt b/build.sbt
new file mode 100644 (file)
index 0000000..db126ad
--- /dev/null
+++ b/build.sbt
@@ -0,0 +1,8 @@
+name := "task-reporter"
+
+version := "0.0.1"
+
+libraryDependencies <+=
+  scalaVersion { "org.scala-lang" % "scala-swing" % _ }
+
+assemblySettings
diff --git a/project/plugin.sbt b/project/plugin.sbt
new file mode 100644 (file)
index 0000000..f1b8d42
--- /dev/null
@@ -0,0 +1,7 @@
+resolvers +=
+  Resolver.url(
+    "artifactory",
+    url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases")
+  )(Resolver.ivyStylePatterns)
+
+addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
diff --git a/src/main/scala/jp/ymir/taskReporter/Main.scala b/src/main/scala/jp/ymir/taskReporter/Main.scala
new file mode 100644 (file)
index 0000000..7f05460
--- /dev/null
@@ -0,0 +1,29 @@
+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))))
+    }
+  }
+}
diff --git a/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala b/src/main/scala/jp/ymir/taskReporter/core/ReportSet.scala
new file mode 100644 (file)
index 0000000..f4392b7
--- /dev/null
@@ -0,0 +1,14 @@
+package jp.ymir.taskReporter.core
+import java.io._;
+
+class ReportSet(private var _file: Option[File]) {
+  private var _dirty : Boolean = false
+
+  def file: Option[File] = {
+    return _file
+  }
+
+  def dirty: Boolean = {
+    return _dirty
+  }
+}
diff --git a/src/main/scala/jp/ymir/taskReporter/ui/MainFrame.scala b/src/main/scala/jp/ymir/taskReporter/ui/MainFrame.scala
new file mode 100644 (file)
index 0000000..4b31c01
--- /dev/null
@@ -0,0 +1,83 @@
+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
+}