/** * */ package com.dubture.composer.ui.editor.composer; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import com.dubture.composer.ui.editor.ComposerFormPage; import com.dubture.composer.ui.editor.FormLayoutFactory; import com.dubture.composer.ui.parts.composer.DependencySelectionFinishedListener; import com.dubture.getcomposer.core.ComposerPackage; import com.dubture.getcomposer.core.collection.Dependencies; /** * @author Thomas Gossmann * */ public class DependenciesPage extends ComposerFormPage { public final static String ID = "com.dubture.composer.ui.editor.composer.DependencyPage"; private ComposerPackage composerPackage; protected ComposerFormEditor editor; protected Composite left; protected Composite right; protected DependencySection activeSection; protected DependencySection requireSection = null; protected TableViewer requireView; protected Button requireEdit; protected Button requireRemove; protected DependencySection requireDevSection; protected TableViewer requireDevView; protected Button requireDevEdit; protected Button requireDevRemove; protected DependencySearchSection searchSection; /** * @param editor * @param id * @param title */ public DependenciesPage(ComposerFormEditor editor, String id, String title) { super(editor, id, title); this.editor = editor; composerPackage = editor.getComposerPackge(); } @Override public void setActive(boolean active) { super.setActive(active); if (active) { editor.getHeaderForm().getForm().setText("Dependencies"); } } @Override protected void createFormContent(IManagedForm managedForm) { ScrolledForm form = managedForm.getForm(); FormToolkit toolkit = managedForm.getToolkit(); form.getBody().setLayout(FormLayoutFactory.createFormGridLayout(true, 2)); left = toolkit.createComposite(form.getBody(), SWT.NONE); left.setLayout(FormLayoutFactory.createFormPaneGridLayout(false, 1)); left.setLayoutData(new GridData(GridData.FILL_BOTH)); requireSection = new DependencySection(this, left, composerPackage.getRequire(), "Require", "The dependencies for your package.", true); requireDevSection = new DependencySection(this, left, composerPackage.getRequireDev(), "Require (Development)", "The development dependencies for your package.", false); requireSection.setEnabled(enabled); requireSection.getSection().addExpansionListener(new ExpansionAdapter() { public void expansionStateChanging(ExpansionEvent e) { activeSection = e.getState() ? requireSection : requireDevSection; requireDevSection.getSection().setExpanded(!e.getState()); ((GridData)requireSection.getSection().getLayoutData()).grabExcessVerticalSpace = e.getState(); ((GridData)requireDevSection.getSection().getLayoutData()).grabExcessVerticalSpace = !e.getState(); } }); requireDevSection.setEnabled(enabled); requireDevSection.getSection().addExpansionListener(new ExpansionAdapter() { public void expansionStateChanging(ExpansionEvent e) { activeSection = e.getState() ? requireDevSection : requireSection; requireSection.getSection().setExpanded(!e.getState()); ((GridData)requireDevSection.getSection().getLayoutData()).grabExcessVerticalSpace = e.getState(); ((GridData)requireSection.getSection().getLayoutData()).grabExcessVerticalSpace = !e.getState(); } }); activeSection = requireSection; right = toolkit.createComposite(form.getBody(), SWT.NONE); right.setLayout(FormLayoutFactory.createFormPaneGridLayout(false, 1)); right.setLayoutData(new GridData(GridData.FILL_BOTH)); searchSection = new DependencySearchSection(this, right); searchSection.setEnabled(enabled); searchSection.addDependencySelectionFinishedListener(new DependencySelectionFinishedListener() { public void dependenciesSelected(Dependencies dependencies) { Dependencies deps = activeSection == requireSection ? composerPackage.getRequire() : composerPackage.getRequireDev(); deps.addAll(dependencies); activeSection.setFocus(); } }); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); if (requireSection != null) { requireSection.setEnabled(enabled); requireDevSection.setEnabled(enabled); searchSection.setEnabled(enabled); } } }