/**
* Copyright (c) 2013-2016 Angelo ZERR.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
*/
package tern.eclipse.ide.internal.ui.preferences;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IPreferencesService;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.swt.SWT;
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.ui.IWorkbench;
import tern.eclipse.ide.core.TernCorePlugin;
import tern.eclipse.ide.core.preferences.TernCorePreferenceConstants;
import tern.eclipse.ide.internal.ui.TernUIMessages;
import tern.eclipse.ide.ui.ImageResource;
import tern.eclipse.ide.ui.preferences.PropertyPreferencePage;
/**
* Tern validation preferences page used for global and project preferences.
*
*/
public class TernValidationPreferencesPage extends PropertyPreferencePage {
public static final String PROPERTY_PAGE_ID = "tern.eclipse.ide.ui.properties.validation";
public static final String PREFERENCE_PAGE_ID = "tern.eclipse.ide.ui.preferences.validation";
private final IPreferencesService fPreferencesService;
private Button availableTernBuilderCheckbox;
public TernValidationPreferencesPage() {
setImageDescriptor(ImageResource
.getImageDescriptor(ImageResource.IMG_LOGO));
fPreferencesService = Platform.getPreferencesService();
}
@Override
protected Control createCommonContents(Composite parent) {
final Composite page = new Composite(parent, SWT.NULL);
page.setLayout(new GridLayout());
IScopeContext[] preferenceScopes = createPreferenceScopes();
return page;
}
private Button createCheckbox(Composite parent, String preferenceName,
IScopeContext[] preferenceScopes, String label) {
Button checkbox = new Button(parent, SWT.CHECK);
checkbox.setText(label); //$NON-NLS-1$
checkbox.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_BEGINNING,
GridData.VERTICAL_ALIGN_END, false, false, 1, 1));
updateCheckbox(checkbox, preferenceName, preferenceScopes);
return checkbox;
}
private void updateCheckbox(Button checkbox, String preferenceName,
IScopeContext[] preferenceScopes) {
boolean checked = fPreferencesService.getBoolean(
getPreferenceNodeQualifier(), preferenceName, true,
preferenceScopes);
checkbox.setSelection(checked);
}
private void updateCheckbox(Button checkbox, String preferenceName,
IEclipsePreferences defaultPreferences) {
boolean checked = defaultPreferences.getBoolean(preferenceName, false);
checkbox.setSelection(checked);
}
@Override
protected void performDefaults() {
super.performDefaults();
IEclipsePreferences defaultPreferences = createPreferenceScopes()[1]
.getNode(getPreferenceNodeQualifier());
}
@Override
public boolean performOk() {
boolean ok = super.performOk();
IScopeContext[] contexts = createPreferenceScopes();
// remove project-specific information if it's not enabled
boolean remove = getProject() != null && !isElementSettingsEnabled();
flushContexts(contexts);
return ok;
}
private void updateContexts(Button checkbox, String preferenceName,
IScopeContext[] contexts, boolean remove) {
if (remove) {
contexts[0].getNode(getPreferenceNodeQualifier()).remove(
preferenceName);
} else {
contexts[0].getNode(getPreferenceNodeQualifier()).putBoolean(
preferenceName, checkbox.getSelection());
}
}
@Override
protected String getPreferenceNodeQualifier() {
return TernCorePlugin.getDefault().getBundle().getSymbolicName();
}
@Override
protected String getPreferencePageID() {
return PREFERENCE_PAGE_ID;
}
@Override
protected String getProjectSettingsKey() {
return TernCorePreferenceConstants.VALIDATION_USE_PROJECT_SETTINGS;
}
@Override
protected String getPropertyPageID() {
return PROPERTY_PAGE_ID;
}
@Override
public void init(IWorkbench workbencsh) {
}
}