/** * 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.ui.properties; import org.eclipse.core.resources.IResource; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import tern.eclipse.ide.core.IWorkingCopy; import tern.eclipse.ide.core.IWorkingCopyListener; import tern.eclipse.ide.internal.ui.TernUIMessages; import tern.eclipse.ide.internal.ui.Trace; import tern.eclipse.ide.ui.ImageResource; import tern.eclipse.ide.ui.TernUIPlugin; import tern.eclipse.ide.ui.controls.TernModulesBlock; import tern.server.ITernModule; /** * Tern Modules (Plugins + JSON Type Definitions) property page. * */ public class TernModulesPropertyPage extends AbstractTernPropertyPage implements IWorkbenchPreferencePage, IWorkingCopyListener { public static final String PAGE_ID = "tern.eclipse.ide.ui.properties.modules"; private TernModulesBlock modulesBlock; public TernModulesPropertyPage() { super(); setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_LOGO)); } @Override public void init(IWorkbench workbench) { setPreferenceStore(TernUIPlugin.getDefault().getPreferenceStore()); } @Override protected Control createContents(Composite ancestor) { Composite parent = new Composite(ancestor, SWT.NONE); parent.setLayoutData(new GridData(GridData.FILL_BOTH)); noDefaultAndApplyButton(); GridLayout layout = new GridLayout(); layout.numColumns = 1; layout.marginHeight = 0; layout.marginWidth = 0; parent.setLayout(layout); // create UI modules IResource resource = getResource(); modulesBlock = new TernModulesBlock(resource != null ? resource.getProject() : null, TernUIMessages.TernModulesPropertyPage_desc); Control control = modulesBlock.createControl(parent); GridData data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 1; control.setLayoutData(data); // load modules refreshModules(); applyDialogFont(parent); return parent; } public void refreshModules() { try { IWorkingCopy workingCopy = getWorkingCopy(); workingCopy.addWorkingCopyListener(this); modulesBlock.refresh(workingCopy.getFilteredModules(), workingCopy.getCheckedModules()); } catch (Throwable e) { Trace.trace(Trace.SEVERE, "Error while loading tern project", e); } } @Override protected void doPerformOk() throws Exception { // save column settings modulesBlock.saveColumnSettings(); } @Override public void moduleSelectionChanged(ITernModule module, boolean selected) { if (!modulesBlock.isCheckUpdating()) { modulesBlock.setCheckedModule(module, selected); } } }