2222import java .io .FileReader ;
2323import java .io .FileWriter ;
2424import java .io .IOException ;
25+ import java .util .ArrayList ;
26+ import java .util .List ;
2527
2628import com .google .gson .Gson ;
2729import com .google .gson .GsonBuilder ;
30+ import com .google .gson .JsonArray ;
2831import com .google .gson .JsonObject ;
2932import com .google .gson .stream .JsonWriter ;
3033
@@ -96,6 +99,10 @@ public class LXPreferences implements LXSerializable, LXParameterListener {
9699 private String projectFileName = null ;
97100 private String scheduleFileName = null ;
98101
102+ private static final int MAX_RECENT_PROJECTS = 12 ;
103+
104+ public final List <String > recentProjects = new ArrayList <>(MAX_RECENT_PROJECTS );
105+
99106 private int windowWidth = -1 ;
100107 private int windowHeight = -1 ;
101108 private int windowPosX = -1 ;
@@ -194,6 +201,11 @@ public void setWindowPosition(int windowPosX, int windowPosY) {
194201 protected void setProject (File project ) {
195202 if (project != null ) {
196203 this .projectFileName = this .lx .getMediaPath (LX .Media .PROJECTS , project );
204+ this .recentProjects .remove (this .projectFileName );
205+ while (this .recentProjects .size () >= MAX_RECENT_PROJECTS ) {
206+ this .recentProjects .remove (this .recentProjects .size ()-1 );
207+ }
208+ this .recentProjects .add (0 , this .projectFileName );
197209 } else {
198210 this .projectFileName = null ;
199211 }
@@ -213,6 +225,7 @@ public void setSchedule(File schedule) {
213225 private static final String KEY_EULA_ACCEPTED = "eulaAccepted" ;
214226 private static final String KEY_PROJECT_FILE_NAME = "projectFileName" ;
215227 private static final String KEY_SCHEDULE_FILE_NAME = "scheduleFileName" ;
228+ private static final String KEY_RECENT_PROJECTS = "recentProjects" ;
216229 private static final String KEY_WINDOW_WIDTH = "windowWidth" ;
217230 private static final String KEY_WINDOW_WIDTH_LEGACY = "windwWidth" ;
218231 private static final String KEY_WINDOW_HEIGHT = "windowHeight" ;
@@ -241,6 +254,11 @@ public void save(LX lx, JsonObject object) {
241254 if (this .scheduleFileName != null ) {
242255 object .addProperty (KEY_SCHEDULE_FILE_NAME , this .scheduleFileName );
243256 }
257+ final JsonArray recentProjectsArr = new JsonArray ();
258+ for (String recentProject : this .recentProjects ) {
259+ recentProjectsArr .add (recentProject );
260+ }
261+ object .add (KEY_RECENT_PROJECTS , recentProjectsArr );
244262 object .addProperty (KEY_EULA_ACCEPTED , this .eulaAccepted .isOn ());
245263 object .addProperty (KEY_WINDOW_WIDTH , this .windowWidth );
246264 object .addProperty (KEY_WINDOW_HEIGHT , this .windowHeight );
@@ -286,6 +304,13 @@ public void load(LX lx, JsonObject object) {
286304 } else {
287305 this .scheduleFileName = null ;
288306 }
307+ if (object .has (KEY_RECENT_PROJECTS )) {
308+ final JsonArray recentProjectsArr = object .getAsJsonArray (KEY_RECENT_PROJECTS );
309+ this .recentProjects .clear ();
310+ for (int i = 0 ; i < recentProjectsArr .size (); ++i ) {
311+ this .recentProjects .add (recentProjectsArr .get (i ).getAsString ());
312+ }
313+ }
289314 LXSerializable .Utils .loadObject (this .lx , this .lx .registry , object , KEY_REGISTRY );
290315 }
291316
0 commit comments