package tk.eclipse.plugin.htmleditor;
import org.eclipse.jface.preference.IPreferenceStore;
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.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
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;
/**
* The preference page to configure content assistant settings.
*
* @author Naoki Takezoe
*/
public class AssistPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private Button checkCloseTag;
private Button checkEnableAutoActivation;
private Text textAutoActivationChars;
private Text textAutoActivationDelay;
public AssistPreferencePage() {
super(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.CodeAssist")); //$NON-NLS-1$
setPreferenceStore(HTMLPlugin.getDefault().getPreferenceStore());
}
@Override
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(2,false));
checkCloseTag = new Button(composite,SWT.CHECK);
checkCloseTag.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AssistCloseTag"));
checkCloseTag.setLayoutData(createGridData(2));
checkEnableAutoActivation = new Button(composite,SWT.CHECK);
checkEnableAutoActivation.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AutoActivation"));
checkEnableAutoActivation.setLayoutData(createGridData(2));
checkEnableAutoActivation.addSelectionListener(
new SelectionAdapter(){
@Override
public void widgetSelected(SelectionEvent evt){
if(checkEnableAutoActivation.getSelection()){
textAutoActivationChars.setEnabled(true);
textAutoActivationDelay.setEnabled(true);
} else {
textAutoActivationChars.setEnabled(false);
textAutoActivationDelay.setEnabled(false);
}
setValid(doValidate());
}
}
);
createLabel(composite,HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AutoActivationTrigger"));
textAutoActivationChars = new Text(composite,SWT.BORDER);
textAutoActivationChars.setLayoutData(createTextGridData());
createLabel(composite,HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AutoActivationDelay"));
textAutoActivationDelay = new Text(composite,SWT.BORDER);
textAutoActivationDelay.setLayoutData(createTextGridData());
textAutoActivationDelay.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e){
setValid(doValidate());
}
});
// set initial values
performDefaults();
return composite;
}
private boolean doValidate(){
if(checkEnableAutoActivation.getSelection()){
try {
Integer.parseInt(textAutoActivationDelay.getText());
} catch(Exception ex){
setErrorMessage(HTMLPlugin.createMessage(
HTMLPlugin.getResourceString("Error.Numeric"),
new String[]{
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.Message.AutoActivationDelay")
}));
return false;
}
}
setErrorMessage(null);
return true;
}
private GridData createTextGridData(){
GridData gd = new GridData();
gd.widthHint = 50;
return gd;
}
private GridData createGridData(int span){
GridData gd = new GridData();
gd.horizontalSpan = span;
return gd;
}
private void createLabel(Composite parent,String text){
Label label = new Label(parent,SWT.NULL);
label.setText(text);
}
public void init(IWorkbench workbench) {
}
@Override
public boolean performOk() {
IPreferenceStore store = getPreferenceStore();
store.setValue(HTMLPlugin.PREF_ASSIST_CLOSE ,checkCloseTag.getSelection());
store.setValue(HTMLPlugin.PREF_ASSIST_AUTO ,checkEnableAutoActivation.getSelection());
store.setValue(HTMLPlugin.PREF_ASSIST_CHARS ,textAutoActivationChars.getText());
store.setValue(HTMLPlugin.PREF_ASSIST_TIMES ,textAutoActivationDelay.getText());
return true;
}
@Override
protected void performDefaults() {
IPreferenceStore store = getPreferenceStore();
checkCloseTag.setSelection(store.getBoolean(HTMLPlugin.PREF_ASSIST_CLOSE));
checkEnableAutoActivation.setSelection(store.getBoolean(HTMLPlugin.PREF_ASSIST_AUTO));
textAutoActivationChars.setText(store.getString(HTMLPlugin.PREF_ASSIST_CHARS));
textAutoActivationDelay.setText(store.getString(HTMLPlugin.PREF_ASSIST_TIMES));
if(checkEnableAutoActivation.getSelection()){
textAutoActivationChars.setEnabled(true);
textAutoActivationDelay.setEnabled(true);
} else {
textAutoActivationChars.setEnabled(false);
textAutoActivationDelay.setEnabled(false);
}
}
}