package io.sloeber.ui.helpers;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.osgi.service.prefs.BackingStoreException;
import io.sloeber.ui.Activator;
import io.sloeber.ui.Messages;
/**
* ArduinoPreferences is a class containing only static methods that help
* managing the preferences.
*
* @author Jan Baeyens
*
*/
public class MyPreferences {
private static final String FALSE = "FALSE"; //$NON-NLS-1$
private static final String TRUE = "TRUE"; //$NON-NLS-1$
public static final String KEY_BUILD_BEFORE_UPLOAD_OPTION = "Build before upload option"; //$NON-NLS-1$
public static final String NODE_ARDUINO = "io.sloeber.core.ui"; //$NON-NLS-1$
public static final String KEY_OPEN_SERIAL_WITH_MONITOR = "Open serial connections with the monitor"; //$NON-NLS-1$
private static final String KEY_CLEAN_MONITOR_AFTER_UPLOAD = "Clean Serial Monitor after upload"; //$NON-NLS-1$
public static final boolean DEFAULT_OPEN_SERIAL_WITH_MONITOR = true;
// Serial monitor keys
private static final String KEY_SERIAL_RATE = "Serial monitor last selected rate"; //$NON-NLS-1$
private static final String KEY_SERIAL_PORT = "Serial monitor last selected Port"; //$NON-NLS-1$
private static final String KEY_RXTX_LAST_USED_LINE_INDES = "Serial Monitor Last Used Line Ending index"; //$NON-NLS-1$
private static final String KEY_RXTX_LAST_USED_AUTOSCROLL = "Serial Monitor Last Used auto scroll setting"; //$NON-NLS-1$
private static final String KEY_LAST_USED_PLOTTER_FILTER_MENU_OPTION = "Board plotter filter on off"; //$NON-NLS-1$
private static final String KEY_HIDE_JSON_FILES = "Hide json files in preferences platform selection page"; //$NON-NLS-1$
/***
* get the stored option whether a build before the upload is wanted or not.
* If nothing is stored the option is ask and this method will pop up a
* dialogbox
*
* @return true if a build is wanted before upload false if no build is
* wanted before upload
*/
public static boolean getBuildBeforeUploadOption() {
switch (getGlobalString(KEY_BUILD_BEFORE_UPLOAD_OPTION, "ASK")) { //$NON-NLS-1$
case TRUE:
return true;
case FALSE:
return false;
default:
break;
}
class TheDialog implements Runnable {
boolean ret = false;
boolean getAnswer() {
return this.ret;
}
@Override
public void run() {
MessageDialog dialog = new MessageDialog(null, Messages.buildBeforeUpload, null,
Messages.doYouWantToBuildBeforeUpload, MessageDialog.QUESTION,
new String[] { "Yes", "No", "Always", "Never" }, 0); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
switch (dialog.open()) {
case 0:
this.ret = true;
break;
case 1:
this.ret = false;
break;
case 2:
setGlobalValue(KEY_BUILD_BEFORE_UPLOAD_OPTION, TRUE);
this.ret = true;
break;
case 3:
setGlobalValue(KEY_BUILD_BEFORE_UPLOAD_OPTION, FALSE);
this.ret = false;
break;
default:
this.ret = false;
break;
}
}
}
TheDialog theDialog = new TheDialog();
Display.getDefault().syncExec(theDialog);
return theDialog.getAnswer();
}
public static boolean getOpenSerialWithMonitor() {
return getGlobalBoolean(KEY_OPEN_SERIAL_WITH_MONITOR, DEFAULT_OPEN_SERIAL_WITH_MONITOR);
}
public static void setOpenSerialWithMonitor(boolean value) {
setGlobalValue(KEY_OPEN_SERIAL_WITH_MONITOR, value);
}
private static String getGlobalString(String key, String defaultValue) {
IEclipsePreferences myScope = InstanceScope.INSTANCE.getNode(NODE_ARDUINO);
return myScope.get(key, defaultValue);
}
private static boolean getGlobalBoolean(String key, boolean def) {
IEclipsePreferences myScope = InstanceScope.INSTANCE.getNode(NODE_ARDUINO);
return myScope.getBoolean(key, def);
}
private static int getGlobalInt(String key) {
IEclipsePreferences myScope = InstanceScope.INSTANCE.getNode(NODE_ARDUINO);
return myScope.getInt(key, 0);
}
@SuppressWarnings("unused")
private static long getGlobalLong(String key) {
IEclipsePreferences myScope = InstanceScope.INSTANCE.getNode(NODE_ARDUINO);
return myScope.getLong(key, 0);
}
static void setGlobalValue(String key, String value) {
IEclipsePreferences myScope = InstanceScope.INSTANCE.getNode(NODE_ARDUINO);
myScope.put(key, value);
try {
myScope.flush();
} catch (BackingStoreException e) {
Activator.log(new Status(IStatus.WARNING, Activator.getId(),
"failed to set global variable of type string " + key)); //$NON-NLS-1$
e.printStackTrace();
}
}
private static void setGlobalValue(String key, int value) {
IEclipsePreferences myScope = InstanceScope.INSTANCE.getNode(NODE_ARDUINO);
myScope.putInt(key, value);
try {
myScope.flush();
} catch (BackingStoreException e) {
Activator.log(
new Status(IStatus.WARNING, Activator.getId(), "failed to set global variable of type int " + key)); //$NON-NLS-1$
e.printStackTrace();
}
}
private static void setGlobalValue(String key, boolean value) {
IEclipsePreferences myScope = InstanceScope.INSTANCE.getNode(NODE_ARDUINO);
myScope.putBoolean(key, value);
try {
myScope.flush();
} catch (BackingStoreException e) {
Activator.log(new Status(IStatus.WARNING, Activator.getId(),
"failed to set global variable of type boolean " + key)); //$NON-NLS-1$
e.printStackTrace();
}
}
@SuppressWarnings("unused")
private static void setGlobalValue(String key, long value) {
IEclipsePreferences myScope = InstanceScope.INSTANCE.getNode(NODE_ARDUINO);
myScope.putLong(key, value);
try {
myScope.flush();
} catch (BackingStoreException e) {
Activator.log(new Status(IStatus.WARNING, Activator.getId(),
"failed to set global variable of type long " + key)); //$NON-NLS-1$
e.printStackTrace();
}
}
public static boolean getCleanSerialMonitorAfterUpload() {
return getGlobalBoolean(KEY_CLEAN_MONITOR_AFTER_UPLOAD, false);
}
/**
* This method returns the index of the last used line ending options are CR
* LF CR+LF none
*
* @return the index of the last used setting
*/
public static int getLastUsedSerialLineEnd() {
return getGlobalInt(KEY_RXTX_LAST_USED_LINE_INDES);
}
/**
* This method returns the index of the last used line ending options are CR
* LF CR+LF none
*
* @return the index of the last used setting
*/
public static void setLastUsedSerialLineEnd(int index) {
setGlobalValue(KEY_RXTX_LAST_USED_LINE_INDES, index);
}
public static boolean getLastUsedAutoScroll() {
return getGlobalBoolean(KEY_RXTX_LAST_USED_AUTOSCROLL, false);
}
public static void setLastUsedAutoScroll(boolean autoScroll) {
setGlobalValue(KEY_RXTX_LAST_USED_AUTOSCROLL, autoScroll);
}
public static void setCleanSerialMonitorAfterUpload(boolean newFilter) {
setGlobalValue(KEY_CLEAN_MONITOR_AFTER_UPLOAD, newFilter);
}
public static String getCleanSerialMonitorAfterUploadKey() {
return KEY_CLEAN_MONITOR_AFTER_UPLOAD;
}
public static boolean getLastUsedPlotterFilter() {
return getGlobalBoolean(KEY_LAST_USED_PLOTTER_FILTER_MENU_OPTION, false);
}
public static void setLastUsedPlotterFilter(boolean newFilter) {
setGlobalValue(KEY_LAST_USED_PLOTTER_FILTER_MENU_OPTION, newFilter);
}
public static void setLastUsedBaudRate(String text) {
setGlobalValue(KEY_SERIAL_RATE, text);
}
public static void setLastUsedPort(String selectedPort) {
setGlobalValue(KEY_SERIAL_PORT, selectedPort);
}
public static String getLastUsedRate() {
return getGlobalString(KEY_SERIAL_RATE, ""); //$NON-NLS-1$
}
public static String getLastUsedPort() {
return getGlobalString(KEY_SERIAL_PORT, ""); //$NON-NLS-1$
}
public static boolean getHideJson() {
return getGlobalBoolean(KEY_HIDE_JSON_FILES, true);
}
public static void setHideJson(boolean state) {
setGlobalValue(KEY_HIDE_JSON_FILES, state);
}
}