package net.bioclipse.spectrum;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import spok.guicomponents.SpectrumChartFactory;
public class PeakLabelThresholdPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
private Text value;
private Button check;
@Override
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.numColumns = 2;
composite.setLayout(layout);
Label checkLabel = new Label(composite, SWT.NULL);
checkLabel.setText("Show Peak Labels?");
check = new Button(composite, SWT.CHECK);
if (net.bioclipse.spectrum.Activator.getDefault().getPluginPreferences().getInt(SpectrumChartFactory.LABELTHRESHOLD) != -1) {
check.setSelection(true);
}
check.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
Button button = (Button) e.getSource();
if (!button.getSelection()) {
if (value != null) {
value.setText("-1");
value.setVisible(false);
}
}
else {
value.setVisible(true);
}
}
});
Label setLabel = new Label(composite, SWT.NULL);
setLabel.setText("Select threshold for displaying Peak Labels (in %): ");
value = new Text(composite, SWT.BORDER | SWT.SINGLE);
value.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
Text text = (Text) e.getSource();
int content = -2;
try {
content = new Integer(text.getText()).intValue();
}
catch (NumberFormatException nfe) {
}
if (content == -1) {
return;
}
// else if (content < 0 || content > 100) {
// System.out.println("Number not in range of 0 - 100");
// }
}
});
int val = net.bioclipse.spectrum.Activator.getDefault().getPluginPreferences().getInt(SpectrumChartFactory.LABELTHRESHOLD);
if (val == -1) {
value.setText(" ");
}
else {
String valStr = new Integer(val).toString();
switch (valStr.length()) {
case (1): valStr = valStr + " ";
case (2): valStr = valStr + " ";
}
value.setText(valStr);
}
if (!check.getSelection()) {
value.setVisible(false);
}
else {
value.setVisible(true);
}
return composite;
}
public void init(IWorkbench workbench) {
}
private void checkValues(){
int retVal;
if (value.getText().trim().length() != 0) {
try {
Integer integer = new Integer(value.getText().trim());
retVal = integer.intValue();
}
catch (NumberFormatException nfe) {
MessageDialog.openError(getControl().getShell(), "Not a Number", "The entered value is not a Number! Please correct...");
return;
}
}
else {
retVal = -1;
}
if (retVal != -1 && retVal < 0 || retVal > 100) {
MessageDialog.openError(getControl().getShell(), "Not a valid Number", "The entered value is not between 0 and 100%! Please correct...");
return;
}
net.bioclipse.spectrum.Activator.getDefault().getPluginPreferences().setValue(SpectrumChartFactory.LABELTHRESHOLD,retVal);
}
@Override
protected void performApply() {
checkValues();
super.performApply();
}
@Override
public boolean performOk() {
checkValues();
return super.performOk();
}
@Override
protected void performDefaults() {
check.setSelection(false);
value.setText("-1");
value.setEnabled(false);
}
}