Skip to content

Commit 547c334

Browse files
committed
Fix bug where reference projects where added repeatedly, seriously lagging the user interface
1 parent 082ea21 commit 547c334

4 files changed

Lines changed: 24 additions & 51 deletions

File tree

src/sporemodder/EditorManager.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@
2121

2222
import java.io.File;
2323
import java.io.IOException;
24-
import java.util.ArrayList;
25-
import java.util.List;
26-
import java.util.ListIterator;
27-
import java.util.Properties;
24+
import java.util.*;
2825

2926
import javafx.collections.ListChangeListener;
3027
import javafx.scene.Node;
@@ -519,7 +516,7 @@ private void updateFileLabel(String relativePath) {
519516
}
520517

521518

522-
public void loadFixedTabs(List<String> tabPaths) {
519+
public void loadFixedTabs(Collection<String> tabPaths) {
523520
disableTabEvents = true;
524521

525522
for (String path : tabPaths) {
@@ -587,7 +584,7 @@ public void setUI(EditorPaneUI ui) {
587584
}
588585

589586
if (!disableTabEvents) {
590-
List<String> paths = ProjectManager.get().getActive().getFixedTabPaths();
587+
Set<String> paths = ProjectManager.get().getActive().getFixedTabPaths();
591588
paths.clear();
592589
for (Tab tab : l.getList()) {
593590

src/sporemodder/ProjectManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -971,7 +971,7 @@ public void loadItemFolder(ProjectTreeItem parentItem) {
971971
loadItemFolder(parentItem.getValue().getProject(), parentItem.getValue().getProject().getReferences(), parentItem);
972972
}
973973

974-
public void loadItemFolder(Project project, List<Project> sources, ProjectTreeItem parentItem) {
974+
public void loadItemFolder(Project project, Collection<Project> sources, ProjectTreeItem parentItem) {
975975

976976
/** The nodes that have already been loaded in this level. */
977977
Map<String, ProjectTreeItem> loadedItems = createChildrenMap(null);
@@ -980,7 +980,7 @@ public void loadItemFolder(Project project, List<Project> sources, ProjectTreeIt
980980
String relativePath = parentItem.getValue().getRelativePath();
981981

982982
// Iterate the sources in reverse orders, as the last ones (the least important) have to be loaded first
983-
ListIterator<Project> iterable = sources.listIterator(sources.size());
983+
ListIterator<Project> iterable = new LinkedList<>(sources).listIterator(sources.size());
984984
while (iterable.hasPrevious())
985985
{
986986
Project source = iterable.previous();

src/sporemodder/util/Project.java

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,7 @@
2121

2222
import java.io.*;
2323
import java.nio.file.Files;
24-
import java.util.ArrayList;
25-
import java.util.HashMap;
26-
import java.util.List;
27-
import java.util.Map;
28-
import java.util.Properties;
24+
import java.util.*;
2925
import java.util.stream.Collectors;
3026

3127
import sporemodder.MessageManager;
@@ -101,13 +97,13 @@ public enum PackageSignature {
10197
/** External projects have a file in the Projects folder that links to the real path. */
10298
private File externalLink;
10399

104-
private final List<Project> references = new ArrayList<>();
100+
private final Set<Project> references = new LinkedHashSet<>();
105101

106102
/** The object that holds the path to the folder where the project DBPF is packed. */
107103
private final GamePathConfiguration packPath;
108104

109105
/** A list of relative paths of all those files that are fixed tabs. */
110-
private final List<String> fixedTabPaths = new ArrayList<>();
106+
private final Set<String> fixedTabPaths = new LinkedHashSet<>();
111107

112108
/** The embedded 'editorPackages~' file that represents the package signature. */
113109
private PackageSignature packageSignature = PackageSignature.NONE;
@@ -142,7 +138,7 @@ public Project(String name, File folder, File externalLink) {
142138
onNameChanged(null);
143139
}
144140

145-
public List<Project> getReferences() {
141+
public Set<Project> getReferences() {
146142
return references;
147143
}
148144

@@ -177,15 +173,15 @@ public void loadSettings() {
177173
ProjectManager projectManager = ProjectManager.get();
178174

179175
String[] sourceNames = stringListSplit(PROPERTY_sources);
176+
references.clear();
180177
for (String str : sourceNames) {
181178
Project p = projectManager.getProject(str);
182179
if (p != null) references.add(p);
183180
}
184181

185182
String[] tabPaths = stringListSplit(PROPERTY_fixedTabPaths);
186-
for (String str : tabPaths) {
187-
fixedTabPaths.add(str);
188-
}
183+
fixedTabPaths.clear();
184+
fixedTabPaths.addAll(Arrays.asList(tabPaths));
189185

190186
packageName = settings.getProperty(PROPERTY_packageName);
191187
if (packageName == null) packageName = getDefaultPackageName(name);
@@ -229,24 +225,12 @@ public void saveSettings() {
229225
//if (!sources.isEmpty()) {
230226
// Do this even if it's empty, as we need to update it if sources were removed
231227
{
232-
StringBuilder sb = new StringBuilder();
233-
234-
for (int i = 0; i < references.size(); i++) {
235-
sb.append("\"" + references.get(i).name + "\"");
236-
if (i != references.size()-1) sb.append("|");
237-
}
238-
239-
settings.setProperty(PROPERTY_sources, sb.toString());
228+
String referencesStr = references.stream().map(r -> '"' + r.name + '"').collect(Collectors.joining("|"));
229+
settings.setProperty(PROPERTY_sources, referencesStr);
240230
}
241231
if (!fixedTabPaths.isEmpty()) {
242-
StringBuilder sb = new StringBuilder();
243-
244-
for (int i = 0; i < fixedTabPaths.size(); i++) {
245-
sb.append("\"" + fixedTabPaths.get(i) + "\"");
246-
if (i != fixedTabPaths.size()-1) sb.append("|");
247-
}
248-
249-
settings.setProperty(PROPERTY_fixedTabPaths, sb.toString());
232+
String str = fixedTabPaths.stream().map(r -> '"' + r + '"').collect(Collectors.joining("|"));
233+
settings.setProperty(PROPERTY_fixedTabPaths, str);
250234
}
251235

252236
settings.put(PROPERTY_packageName, packageName);
@@ -304,7 +288,7 @@ public void setReadOnly(boolean isReadOnly) {
304288
* Returns a list of relative paths of all those files that are fixed tabs.
305289
* @return
306290
*/
307-
public List<String> getFixedTabPaths() {
291+
public Set<String> getFixedTabPaths() {
308292
return fixedTabPaths;
309293
}
310294

src/sporemodder/view/dialogs/ProjectSettingsUI.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
package sporemodder.view.dialogs;
2020

2121
import java.io.File;
22+
import java.util.LinkedHashSet;
2223
import java.util.List;
2324
import java.util.Optional;
25+
import java.util.Set;
2426

2527
import javafx.fxml.FXML;
2628
import javafx.scene.Node;
@@ -189,22 +191,12 @@ private void saveSettings(boolean saveSettingsOnExit) {
189191
if (saveSettingsOnExit && nameChanged) {
190192
ProjectManager.get().rename(project, tfName.getText());
191193
}
192-
193-
List<Project> oldSources = project.getReferences();
194-
List<Project> newSources = sourcesList.getItems();
195-
boolean sourcesChanged = oldSources.size() != newSources.size();
196-
197-
if (!sourcesChanged) {
198-
for (int i = 0; i < oldSources.size(); i++) {
199-
if (oldSources.get(i) != newSources.get(i)) {
200-
sourcesChanged = true;
201-
break;
202-
}
203-
}
204-
}
205-
194+
206195
project.setPackageName(packageNameField.getText());
207-
196+
197+
Set<Project> oldSources = project.getReferences();
198+
Set<Project> newSources = new LinkedHashSet<>(sourcesList.getItems());
199+
boolean sourcesChanged = !oldSources.equals(newSources);
208200
if (sourcesChanged) {
209201
project.getReferences().clear();
210202
project.getReferences().addAll(sourcesList.getItems());

0 commit comments

Comments
 (0)