]> gitweb @ CieloNegro.org - task-reporter.git/blobdiff - src/main/scala/jp/ymir/taskReporter/ui/MainFrame.scala
wip
[task-reporter.git] / src / main / scala / jp / ymir / taskReporter / ui / MainFrame.scala
index 24b60046b12b120358104e5dfb13d985e54041a6..1807a064d3535292c20dee4fb8493d57b2492022 100644 (file)
@@ -3,7 +3,9 @@ import java.awt.Dimension
 import java.awt.event.ComponentAdapter
 import java.awt.event.ComponentEvent
 import java.io._
+import javax.swing.BorderFactory
 import javax.swing.JOptionPane
+import javax.swing.JSplitPane
 import javax.swing.KeyStroke
 import javax.swing.event.MenuListener
 import javax.swing.event.MenuEvent
@@ -14,12 +16,10 @@ import scala.swing._
 import scala.swing.event._
 
 class MainFrame(reportFile: Option[File]) extends Frame {
-  private var reportSet = new ReportSet(reportFile)
+  private val reportSet = new ReportSet(reportFile)
 
-  title = "Task Reporter " + Main.getVersion
-
-  size = Preferences.mainFrameSize()
-  centerOnScreen
+  title         = "Task Reporter " + Main.getVersion
+  preferredSize = Preferences.mainFrameSize()
 
   peer.addComponentListener(new ComponentAdapter() {
     override def componentResized(e: ComponentEvent) {
@@ -27,6 +27,109 @@ class MainFrame(reportFile: Option[File]) extends Frame {
     }
   })
 
+  menuBar = new MenuBar {
+    contents += new Menu("File") {
+      mnemonic = Key.F
+
+      val miOpen = new MenuItem(new Action("Open...") {
+        accelerator = Some(KeyStroke.getKeyStroke("control O"))
+        def apply {
+          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.load(chooser.selectedFile)
+            // FIXME: select the last report
+          }
+        }
+      })
+      contents += miOpen
+
+      val miSave = new MenuItem(new Action("Save") {
+        accelerator = Some(KeyStroke.getKeyStroke("control S"));
+        def apply = 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) {
+          miOpen.enabled = !dirty
+          miSave.enabled = dirty
+          miSave.text    =
+            if (reportSet.file.isEmpty)
+              "Save..."
+            else
+              "Save"
+        }
+        def menuDeselected(e: MenuEvent) {}
+        def menuCanceled(e: MenuEvent) {}
+      })
+    }
+  }
+
+  contents = new SplitPane {
+    peer.setOrientation(JSplitPane.HORIZONTAL_SPLIT)
+    continuousLayout   = true
+    oneTouchExpandable = true
+    resizeWeight       = 0 // Let the left pane be fixed
+
+    rightComponent = new SplitPane {
+      peer.setOrientation(JSplitPane.VERTICAL_SPLIT)
+      continuousLayout   = true
+      oneTouchExpandable = true
+      resizeWeight       = 0.5
+
+      leftComponent = new ScrollPane(
+        new Table() {
+          peer.setModel(new Report()) // Empty report
+        })
+    }
+
+    leftComponent = new BorderPanel {
+      border = BorderFactory.createEmptyBorder(5, 5, 5, 5)
+
+      val reportsScroll = new ScrollPane(
+        new Table() {
+          peer.setModel(reportSet)
+          if (rowCount > 0) {
+            selection.rows += rowCount - 1 // Select the last report
+          }
+          selection.reactions += {
+            case TableRowsSelected(_, _, false) =>
+              // FIXME
+          }
+        })
+      layout(reportsScroll) = BorderPanel.Position.Center
+
+      val buttons = new FlowPanel(FlowPanel.Alignment.Left)() {
+        contents += new Button(new Action("Add") {
+          def apply = {} // FIXME
+        })
+        contents += new Button(new Action("Delete...") {
+          def apply = {} // FIXME
+        })
+      }
+      layout(buttons) = BorderPanel.Position.South
+
+      preferredSize = minimumSize
+    }
+  }
+
+  centerOnScreen
+  visible = true
+
   override def closeOperation {
     if (dirty) {
       val r = JOptionPane.showConfirmDialog(
@@ -74,62 +177,10 @@ class MainFrame(reportFile: Option[File]) extends Frame {
       }
 
       Preferences.lastChosenDir() = chooser.selectedFile.getParentFile
-      reportSet.file = Some(chooser.selectedFile)
+      reportSet.save(chooser.selectedFile)
     }
-
-    reportSet.save
-  }
-
-  menuBar = new MenuBar {
-    contents += new Menu("File") {
-      mnemonic = Key.F
-
-      val miOpen = new MenuItem(new Action("Open...") {
-        accelerator = Some(KeyStroke.getKeyStroke("control O"))
-        def apply {
-          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 miSave = new MenuItem(new Action("Save") {
-        accelerator = Some(KeyStroke.getKeyStroke("control S"));
-        def apply { 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) {
-          miOpen.enabled = !dirty
-          miSave.enabled = dirty
-          miSave.text    =
-            if (reportSet.file.isEmpty)
-              "Save..."
-            else
-              "Save"
-        }
-        def menuDeselected(e: MenuEvent) {}
-        def menuCanceled(e: MenuEvent) {}
-      })
+    else {
+      reportSet.save
     }
   }
-
-  visible = true
 }