Skip to content

Commit cc2103b

Browse files
committed
Add FilterSettings to SessionSettings
1 parent ad4621f commit cc2103b

4 files changed

Lines changed: 21 additions & 164 deletions

File tree

OpenBCI_GUI/FilterSettings.pde

Lines changed: 7 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -92,46 +92,19 @@ class FilterSettings {
9292
defaultValues = new FilterSettingsValues(channelCount);
9393
}
9494

95-
public boolean loadSettingsValues(String filename) {
96-
try {
97-
File file = new File(filename);
98-
StringBuilder fileContents = new StringBuilder((int)file.length());
99-
Scanner scanner = new Scanner(file);
100-
while(scanner.hasNextLine()) {
101-
fileContents.append(scanner.nextLine() + System.lineSeparator());
102-
}
103-
Gson gson = new Gson();
104-
values = gson.fromJson(fileContents.toString(), FilterSettingsValues.class);
105-
return true;
106-
} catch (IOException e) {
107-
e.printStackTrace();
108-
File f = new File(filename);
109-
if (f.exists()) {
110-
if (f.delete()) {
111-
println("FilterSettings: Could not load filter settings from disk. Deleting this file...");
112-
} else {
113-
println("FilterSettings: Error deleting old/broken filter settings file! Please make sure the GUI has proper read/write permissions.");
114-
}
115-
}
116-
return false;
117-
}
118-
}
119-
12095
public String getJson() {
12196
Gson gson = new GsonBuilder().setPrettyPrinting().create();
12297
return gson.toJson(values);
12398
}
12499

125-
public boolean saveToFile(String filename) {
126-
String json = getJson();
100+
public void loadSettingsFromJson(String json) {
127101
try {
128-
FileWriter writer = new FileWriter(filename);
129-
writer.write(json);
130-
writer.close();
131-
return true;
132-
} catch (IOException e) {
133-
e.printStackTrace();
134-
return false;
102+
Gson gson = new Gson();
103+
values = gson.fromJson(json, FilterSettingsValues.class);
104+
filterSettingsWereLoadedFromFile = true;
105+
} catch (Exception e) {
106+
e.printStackTrace();
107+
println("FilterSettings: Could not load filter settings from JSON string.");
135108
}
136109
}
137110

@@ -143,62 +116,4 @@ class FilterSettings {
143116
public int getChannelCount() {
144117
return channelCount;
145118
}
146-
147-
//Avoid error with popup being in another thread.
148-
public void storeSettings() {
149-
StringBuilder settingsFilename = new StringBuilder(directoryManager.getSettingsPath());
150-
settingsFilename.append("FilterSettings");
151-
settingsFilename.append("_");
152-
settingsFilename.append(getChannelCount());
153-
settingsFilename.append("Channels.json");
154-
String filename = settingsFilename.toString();
155-
File fileToSave = new File(filename);
156-
FileChooser chooser = new FileChooser(
157-
FileChooserMode.SAVE,
158-
"storeFilterSettings",
159-
fileToSave,
160-
"Save filter settings to file");
161-
}
162-
//Avoid error with popup being in another thread.
163-
public void loadSettings() {
164-
StringBuilder settingsFilename = new StringBuilder(directoryManager.getSettingsPath());
165-
settingsFilename.append("FilterSettings");
166-
settingsFilename.append("_");
167-
settingsFilename.append(getChannelCount());
168-
settingsFilename.append("Channels.json");
169-
String filename = settingsFilename.toString();
170-
File fileToLoad = new File(filename);
171-
FileChooser chooser = new FileChooser(
172-
FileChooserMode.LOAD,
173-
"loadFilterSettings",
174-
fileToLoad,
175-
"Select settings file to load");
176-
}
177-
}
178-
179-
//Used by button in the Filter UI. Must be global and public.
180-
public void loadFilterSettings(File selection) {
181-
if (selection == null) {
182-
output("Filters Settings file not selected.");
183-
} else {
184-
if (filterSettings.loadSettingsValues(selection.getAbsolutePath())) {
185-
outputSuccess("Filter Settings Loaded!");
186-
filterSettingsWereLoadedFromFile = true;
187-
} else {
188-
outputError("Failed to load Filter Settings. The old/broken file has been deleted.");
189-
}
190-
}
191-
}
192-
193-
//Used by button in the Filter UI. Must be global and public.
194-
public void storeFilterSettings(File selection) {
195-
if (selection == null) {
196-
output("Filter Settings file not selected.");
197-
} else {
198-
if (filterSettings.saveToFile(selection.getAbsolutePath())) {
199-
outputSuccess("Filter Settings Saved!");
200-
} else {
201-
outputError("Failed to save Filter Settings.");
202-
}
203-
}
204119
}

OpenBCI_GUI/FilterUI.pde

Lines changed: 4 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,9 @@ class FilterUIPopup extends PApplet implements Runnable {
2525
private final int HALF_OBJ_WIDTH = HEADER_OBJ_WIDTH/2;
2626
private final int NUM_HEADER_OBJECTS = 4;
2727
private final int NUM_COLUMNS = 5;
28-
private final int NUM_FOOTER_OBJECTS = 3;
2928
private int[] headerObjX = new int[NUM_HEADER_OBJECTS];
3029
private final int HEADER_OBJ_Y = SM_SPACER;
3130
private int[] columnObjX = new int[NUM_COLUMNS];
32-
private int footerObjY = 0;
33-
private int[] footerObjX = new int[NUM_FOOTER_OBJECTS];
3431

3532
private String message = "Sample text string";
3633
private String headerMessage = "Filters";
@@ -50,9 +47,6 @@ class FilterUIPopup extends PApplet implements Runnable {
5047

5148
private ScrollableList bfGlobalFilterDropdown;
5249
private ScrollableList bfEnvironmentalNoiseDropdown;
53-
private Button saveButton;
54-
private Button loadButton;
55-
private Button defaultButton;
5650

5751
private Button masterOnOffButton;
5852
private Textfield masterFirstColumnTextfield;
@@ -116,7 +110,7 @@ class FilterUIPopup extends PApplet implements Runnable {
116110
filterSettingsWereModifiedFadeCounter = new int[numChans];
117111

118112
fixedWidth = (HEADER_OBJ_WIDTH * 6) + SM_SPACER*5;
119-
maxHeight = HEADER_HEIGHT*3 + SM_SPACER*(numChans+5) + uiObjectHeight*(numChans+2) + EXPANDER_HEIGHT;
113+
maxHeight = HEADER_HEIGHT*3 + SM_SPACER*(numChans+5) + uiObjectHeight*(numChans+1) + EXPANDER_HEIGHT;
120114
shortHeight = HEADER_HEIGHT*2 + SM_SPACER*(1+5) + uiObjectHeight*(1+2) + LG_SPACER + EXPANDER_HEIGHT;
121115
variableHeight = maxHeight;
122116
//Include spacer on the outside left and right of all columns. Used to draw visual feedback
@@ -307,11 +301,7 @@ class FilterUIPopup extends PApplet implements Runnable {
307301
}
308302

309303
private void createAllCp5Objects() {
310-
calculateXYForHeaderColumnsAndFooter();
311-
312-
createFilterSettingsSaveButton("saveFilterSettingsButton", "Save", footerObjX[0], footerObjY, HEADER_OBJ_WIDTH, uiObjectHeight);
313-
createFilterSettingsLoadButton("loadFilterSettingsButton", "Load", footerObjX[1], footerObjY, HEADER_OBJ_WIDTH, uiObjectHeight);
314-
createFilterSettingsDefaultButton("defaultFilterSettingsButton", "Reset", footerObjX[2], footerObjY, HEADER_OBJ_WIDTH, uiObjectHeight);
304+
calculateXYForHeaderColumns();
315305

316306
createOnOffButtons();
317307
createTextfields();
@@ -334,7 +324,7 @@ class FilterUIPopup extends PApplet implements Runnable {
334324
bfEnvironmentalNoiseDropdown.getCaptionLabel().setText(filterSettings.values.globalEnvFilter.getString());
335325
}
336326

337-
private void calculateXYForHeaderColumnsAndFooter() {
327+
private void calculateXYForHeaderColumns() {
338328
middle = width / 2;
339329

340330
headerObjX[0] = middle - SM_SPACER*2 - HEADER_OBJ_WIDTH*2;
@@ -348,17 +338,12 @@ class FilterUIPopup extends PApplet implements Runnable {
348338
columnObjX[3] = middle + HALF_OBJ_WIDTH + LG_SPACER;
349339
columnObjX[4] = middle + HALF_OBJ_WIDTH + LG_SPACER*2 + HEADER_OBJ_WIDTH;
350340

351-
footerObjX[0] = middle - HALF_OBJ_WIDTH - LG_SPACER - HEADER_OBJ_WIDTH;
352-
footerObjX[1] = middle - HALF_OBJ_WIDTH;
353-
footerObjX[2] = middle + HALF_OBJ_WIDTH + LG_SPACER;
354-
setFooterObjYPosition(filterSettings.values.filterChannelSelect);
355-
356341
expanderLineOneEnd = middle - expanderBreakMiddle/2;
357342
expanderLineTwoStart = middle + expanderBreakMiddle/2;
358343
}
359344

360345
public void arrangeAllObjectsXY() {
361-
calculateXYForHeaderColumnsAndFooter();
346+
calculateXYForHeaderColumns();
362347

363348
bfGlobalFilterDropdown.setPosition(headerObjX[1], HEADER_OBJ_Y);
364349
bfEnvironmentalNoiseDropdown.setPosition(headerObjX[3], HEADER_OBJ_Y);
@@ -400,10 +385,6 @@ class FilterUIPopup extends PApplet implements Runnable {
400385
filterTypeDropdowns[chan].setPosition(columnObjX[3], rowY);
401386
filterOrderDropdowns[chan].setPosition(filterOrderDropdownNewX, rowY);
402387
}
403-
404-
saveButton.setPosition(footerObjX[0], footerObjY);
405-
loadButton.setPosition(footerObjX[1], footerObjY);
406-
defaultButton.setPosition(footerObjX[2], footerObjY);
407388
}
408389

409390
// Master method to update objects from the FilterSettings Class
@@ -920,37 +901,6 @@ class FilterUIPopup extends PApplet implements Runnable {
920901
cp5ElementsToCheck.add(masterFilterOrderDropdown);
921902
}
922903

923-
private void createFilterSettingsSaveButton(String name, String text, int _x, int _y, int _w, int _h) {
924-
saveButton = createButton(cp5, name, text, _x, _y, _w, _h, h5, 12, colorNotPressed, OPENBCI_DARKBLUE);
925-
saveButton.setBorderColor(OBJECT_BORDER_GREY);
926-
saveButton.onClick(new CallbackListener() {
927-
public void controlEvent(CallbackEvent theEvent) {
928-
filterSettings.storeSettings();
929-
}
930-
});
931-
}
932-
933-
private void createFilterSettingsLoadButton(String name, String text, int _x, int _y, int _w, int _h) {
934-
loadButton = createButton(cp5, name, text, _x, _y, _w, _h, h5, 12, colorNotPressed, OPENBCI_DARKBLUE);
935-
loadButton.setBorderColor(OBJECT_BORDER_GREY);
936-
loadButton.onClick(new CallbackListener() {
937-
public void controlEvent(CallbackEvent theEvent) {
938-
filterSettings.loadSettings();
939-
}
940-
});
941-
}
942-
943-
private void createFilterSettingsDefaultButton(String name, String text, int _x, int _y, int _w, int _h) {
944-
defaultButton = createButton(cp5, name, text, _x, _y, _w, _h, h5, 12, colorNotPressed, OPENBCI_DARKBLUE);
945-
defaultButton.setBorderColor(OBJECT_BORDER_GREY);
946-
defaultButton.onClick(new CallbackListener() {
947-
public void controlEvent(CallbackEvent theEvent) {
948-
filterSettings.revertAllChannelsToDefaultValues();
949-
filterSettingsWereLoadedFromFile = true;
950-
}
951-
});
952-
}
953-
954904
private void createMasterOnOffButton(String name, final String text, int _x, int _y, int _w, int _h) {
955905
masterOnOffButton = createButton(cp5, name, text, _x, _y, _w, _h, 0, h2, 16, SUBNAV_LIGHTBLUE, WHITE, BUTTON_HOVER, BUTTON_PRESSED, (Integer) null, -2);
956906
masterOnOffButton.setCircularButton(true);
@@ -1002,25 +952,9 @@ class FilterUIPopup extends PApplet implements Runnable {
1002952
filterOrderDropdowns[chan].setVisible(showAllChannels);
1003953
}
1004954

1005-
setFooterObjYPosition(myEnum);
1006-
saveButton.setPosition(footerObjX[0], footerObjY);
1007-
loadButton.setPosition(footerObjX[1], footerObjY);
1008-
1009955
needToResizePopup = true;
1010956
}
1011957

1012-
private void setFooterObjYPosition(FilterChannelSelect myEnum) {
1013-
boolean showAllChannels = myEnum == FilterChannelSelect.CUSTOM_CHANNELS;
1014-
int numChans = filterSettings.getChannelCount();
1015-
int footerMaxHeightY = HEADER_HEIGHT*2 + SM_SPACER*(numChans+4) + uiObjectHeight*(numChans+1) + LG_SPACER*2 + EXPANDER_HEIGHT;
1016-
int footerMinHeightY = HEADER_HEIGHT*2 + SM_SPACER*4 + uiObjectHeight + LG_SPACER + EXPANDER_HEIGHT;
1017-
footerObjY = showAllChannels ? footerMaxHeightY : footerMinHeightY;
1018-
1019-
if (!EXPANDER_IS_USED) {
1020-
footerObjY -= EXPANDER_HEIGHT + SM_SPACER;
1021-
}
1022-
}
1023-
1024958
private void filterSettingWasModifiedOnChannel(int chan) {
1025959
filterSettingsWereModified[chan] = true;
1026960
filterSettingsWereModifiedFadeCounter[chan] = millis();

OpenBCI_GUI/OpenBCI_GUI.pde

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,8 @@ SessionSettings sessionSettings;
298298
GuiSettings guiSettings;
299299
DataProcessing dataProcessing;
300300
FilterSettings filterSettings;
301-
NetworkingUI networkUI;
302301
FilterUIPopup filterUI;
302+
NetworkingUI networkUI;
303303
DeveloperCommandPopup developerCommandPopup;
304304

305305
final int navBarHeight = 32;

OpenBCI_GUI/SessionSettings.pde

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ class SessionSettings {
4343
KEY_LAYOUT = "widgetLayout",
4444
KEY_NETWORKING = "networking",
4545
KEY_CONTAINERS = "widgetContainerSettings",
46-
KEY_WIDGET_SETTINGS = "widgetSettings";
46+
KEY_WIDGET_SETTINGS = "widgetSettings",
47+
KEY_FILTER_SETTINGS = "filterSettings";
4748

4849
// File paths configuration
4950
private final String[][] SETTING_FILES = {
@@ -99,6 +100,8 @@ class SessionSettings {
99100
saveSettingsJSONData.setJSONObject(KEY_CONTAINERS, saveWidgetContainerPositions());
100101
saveSettingsJSONData.setJSONObject(KEY_WIDGET_SETTINGS,
101102
parseJSONObject(widgetManager.getWidgetSettingsAsJson()));
103+
saveSettingsJSONData.setJSONObject(KEY_FILTER_SETTINGS,
104+
parseJSONObject(filterSettings.getJson()));
102105

103106
// Save to file
104107
saveJSONObject(saveSettingsJSONData, saveFilePath);
@@ -141,6 +144,7 @@ class SessionSettings {
141144
applyNetworkingSettings();
142145
applyWidgetLayout();
143146
applyWidgetSettings();
147+
applyFilterSettings();
144148
}
145149

146150
/**
@@ -222,6 +226,10 @@ class SessionSettings {
222226
loadSettingsJSONData.getJSONObject(KEY_WIDGET_SETTINGS).toString());
223227
}
224228

229+
private void applyFilterSettings() {
230+
filterSettings.loadSettingsFromJson(loadSettingsJSONData.getJSONObject(KEY_FILTER_SETTINGS).toString());
231+
}
232+
225233
/**
226234
* Get the appropriate settings file path based on mode and configuration
227235
*/

0 commit comments

Comments
 (0)