Skip to content

Commit 6119374

Browse files
committed
Keep track of recently opened projects in lxprefs
1 parent 64c49e4 commit 6119374

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/main/java/heronarts/lx/LXPreferences.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@
2222
import java.io.FileReader;
2323
import java.io.FileWriter;
2424
import java.io.IOException;
25+
import java.util.ArrayList;
26+
import java.util.List;
2527

2628
import com.google.gson.Gson;
2729
import com.google.gson.GsonBuilder;
30+
import com.google.gson.JsonArray;
2831
import com.google.gson.JsonObject;
2932
import 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

Comments
 (0)