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
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) {
}
})
+ 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(
}
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
}