+ 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)
+ }
+ }
+ })
+ 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) {}
+ })
+ }
+ }
+
+ val rootSplit = new SplitPane {
+ peer.setOrientation(JSplitPane.HORIZONTAL_SPLIT)
+ continuousLayout = true
+ oneTouchExpandable = true
+ resizeWeight = 0.3
+
+ leftComponent = new BorderPanel {
+ border = BorderFactory.createEmptyBorder(5, 5, 5, 5)
+
+ val scroll = new ScrollPane(
+ new Table() {
+ peer.setModel(reportSet)
+ })
+ layout(scroll) = BorderPanel.Position.Center
+ }
+ }
+ contents = rootSplit
+
+ // This can only be done after putting the pane on the frame.
+ rootSplit.dividerLocation = 0.3
+
+ centerOnScreen
+ visible = true
+