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