1 /* 2 * Copyright (C) 2016 3 * Deutsches Zentrum fuer Luft- und Raumfahrt e.V. 4 * Institut fuer Verkehrssystemtechnik 5 * 6 * German Aerospace Center 7 * Institute of Transportation Systems 8 * 9 */ 10 package de.dlr.ts.commons.javafx.mainwindow.top; 11 12 import java.io.File; 13 import javafx.event.ActionEvent; 14 import javafx.scene.control.Menu; 15 import javafx.scene.control.MenuItem; 16 import javafx.scene.control.SeparatorMenuItem; 17 import javafx.scene.input.KeyCode; 18 import javafx.scene.input.KeyCodeCombination; 19 import javafx.scene.input.KeyCombination; 20 21 /** 22 * 23 * @author @author <a href="mailto:maximiliano.bottazzi@dlr.de">Maximiliano Bottazzi</a> 24 */ 25 public class FileMenu extends Menu 26 { 27 private MenuItem openMenuItem = new MenuItem("Open..."); 28 private MenuItem closeMenuItem = new MenuItem("Close"); 29 private MenuItem emptyRecentFilesListMenuItem = new MenuItem("Empty Recent Files List"); 30 private MenuItem exitSystemMenuItem = new MenuItem("Exit"); 31 private RecentFiles recentFiles = new RecentFiles(); 32 33 34 /** 35 * 36 * @param file 37 */ setRecentFilesPersistenceFile(File file)38 public final static void setRecentFilesPersistenceFile(File file) 39 { 40 RecentFiles.setLofsFile(file); 41 } 42 43 /** 44 * 45 */ FileMenu()46 public FileMenu() 47 { 48 this.setText("_File"); 49 this.setAccelerator(KeyCombination.keyCombination("SHORTCUT+F")); 50 51 openMenuItem.setAccelerator(new KeyCodeCombination(KeyCode.O, KeyCombination.CONTROL_DOWN)); 52 closeMenuItem.setAccelerator(new KeyCodeCombination(KeyCode.W, KeyCombination.CONTROL_DOWN)); 53 exitSystemMenuItem.setAccelerator(new KeyCodeCombination(KeyCode.F4, KeyCombination.ALT_DOWN)); 54 55 emptyRecentFilesListMenuItem.setOnAction((ActionEvent event) -> 56 { 57 recentFiles.clear(); 58 putItems(); 59 }); 60 61 putItems(); 62 } 63 64 /** 65 * 66 * @return 67 */ getLastOpenFiles()68 public MenuItem[] getLastOpenFiles() 69 { 70 return recentFiles.getAll(); 71 } 72 73 /** 74 * 75 */ close()76 public void close() 77 { 78 recentFiles.close(); 79 } 80 81 /** 82 * 83 * @param listener 84 */ addLastOpenedFilesListener(RecentFilesListener listener)85 public void addLastOpenedFilesListener(RecentFilesListener listener) 86 { 87 recentFiles.addListener(listener); 88 } 89 90 /** 91 * 92 * @param enabled 93 */ setLastOpenFilesEnabled(boolean enabled)94 public void setLastOpenFilesEnabled(boolean enabled) 95 { 96 recentFiles.setEnabled(enabled); 97 } 98 99 /** 100 * 101 * @param filePath 102 */ addLastOpen(String filePath)103 public void addLastOpen(String filePath) 104 { 105 recentFiles.add(filePath); 106 putItems(); 107 } 108 109 /** 110 * 111 */ putItems()112 private void putItems() 113 { 114 this.getItems().clear(); 115 116 if(recentFiles.size() == 0) 117 this.getItems().addAll(openMenuItem, closeMenuItem, new SeparatorMenuItem(), exitSystemMenuItem); 118 else 119 { 120 this.getItems().addAll(openMenuItem, closeMenuItem, new SeparatorMenuItem()); 121 122 for (int i = 0; i < recentFiles.size(); i++) 123 this.getItems().add(recentFiles.get(i)); 124 125 this.getItems().add(new SeparatorMenuItem()); 126 this.getItems().add(emptyRecentFilesListMenuItem); 127 this.getItems().add(new SeparatorMenuItem()); 128 this.getItems().add(exitSystemMenuItem); 129 } 130 } 131 132 /** 133 * 134 * @return 135 */ getOpenMenuItem()136 public MenuItem getOpenMenuItem() 137 { 138 return openMenuItem; 139 } 140 141 /** 142 * 143 * @return 144 */ getExitSystemMenuItem()145 public MenuItem getExitSystemMenuItem() 146 { 147 return exitSystemMenuItem; 148 } 149 150 /** 151 * 152 * @return 153 */ getCloseMenuItem()154 public MenuItem getCloseMenuItem() 155 { 156 return closeMenuItem; 157 } 158 159 public static interface RecentFilesListener 160 { event(String filePath)161 void event(String filePath); 162 } 163 } 164