package org.xmind.ui.internal.resourcemanager; import javax.inject.Inject; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.Util; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; 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.xmind.ui.internal.e4models.IModelPartContext; import org.xmind.ui.internal.e4models.ModelPageContainer; public abstract class ResourceManagerDialogPage extends ModelPageContainer implements IResourceManagerDialogPage { private final static int BUTTON_MIN_WIDTH = Util.isMac() ? 150 : 120; private Image image; private ImageDescriptor imageDescriptor; private String pageId; private String title; @Inject protected IModelPartContext context; private ResourceManagerViewer viewer; @Override protected Control createMainPage(Composite parent) { Composite composite = new Composite(parent, SWT.BORDER); GridLayoutFactory.swtDefaults().spacing(0, 0).margins(0, 0) .applyTo(composite); Composite viewerComposite = new Composite(composite, SWT.NONE); GridLayoutFactory.fillDefaults().extendedMargins(0, 0, 0, 0) .applyTo(viewerComposite); viewerComposite .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); viewer = createViewer(); context.setSelectionProvider(viewer); context.registerContextMenu(viewerComposite, getContextMenuId()); viewer.createControl(viewerComposite); createButtonBar(composite); registerRunnable(context.getAdapter(MPart.class).getContext()); return composite; } protected void registerRunnable(IEclipseContext eclipseContext) { } protected abstract ResourceManagerViewer createViewer(); protected Control createButtonBar(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().extendedMargins(0, 0, 0, 0) .applyTo(composite); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false); gridData.heightHint = 40; composite.setLayoutData(gridData); Composite buttonBar = new Composite(composite, SWT.NONE); // create a layout with spacing and margins appropriate for the font // size. GridLayout layout = new GridLayout(); layout.numColumns = 0; // this is incremented by createButton layout.makeColumnsEqualWidth = true; layout.marginWidth = 15; layout.marginHeight = 0; layout.marginTop = 0; layout.marginBottom = 0; buttonBar.setLayout(layout); buttonBar.setLayoutData(new GridData(SWT.END, SWT.CENTER, true, true)); buttonBar.setFont(parent.getFont()); // Add buttons to the button bar. createButtonsForButtonBar(buttonBar); return buttonBar; } protected void createButtonsForButtonBar(Composite composite) { // create OK and Cancel buttons by default createButton(composite, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(composite, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { // increment the number of columns in the button bar\ ((GridLayout) parent.getLayout()).numColumns++; Button button = new Button(parent, SWT.PUSH | SWT.NONE); button.setText(label); button.setFont(JFaceResources.getDialogFont()); button.setData(new Integer(id)); GridData gridData = new GridData(SWT.FILL, SWT.NONE, false, false); button.setLayoutData(gridData); gridData.widthHint = Math.max(gridData.widthHint, BUTTON_MIN_WIDTH); return button; } public void setFocus() { if (viewer != null && viewer.getControl() != null && !viewer.getControl().isDisposed()) { viewer.getControl().setFocus(); } } @Override public void dispose() { } @Override public <T> T getAdapter(Class<T> adapter) { if (ISelectionProvider.class.equals(adapter)) { return adapter.cast(viewer); } else if (Viewer.class.equals(adapter)) { return adapter.cast(viewer); } return null; } public String getId() { return pageId == null ? getModelPageId() : pageId; } public void setId(String id) { this.pageId = id; } @Override public String getTitle() { return title == null ? getModelPageTitle() : title; } @Override public void setTitle(String title) { this.title = title; } @Override public void setImageDescriptor(ImageDescriptor imageDes) { this.imageDescriptor = imageDes; if (image != null) { image.dispose(); image = null; } } public ImageDescriptor getImageDescriptor() { return imageDescriptor; } @Override public Image getImage() { if (image == null) { if (imageDescriptor != null) { image = imageDescriptor.createImage(); } } return image; } @Override public void refresh() { if (viewer != null && viewer.getControl() != null && !viewer.getControl().isDisposed()) { viewer.refresh(); } } protected abstract String getContextMenuId(); }