package org.xmind.ui.internal.dialogs; import java.util.ArrayList; import java.util.List; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; 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.Shell; import org.xmind.gef.EditDomain; import org.xmind.gef.GEF; import org.xmind.gef.util.Properties; import org.xmind.ui.gallery.GalleryLayout; import org.xmind.ui.gallery.GalleryNavigablePolicy; import org.xmind.ui.gallery.GallerySelectTool; import org.xmind.ui.gallery.GalleryViewer; import org.xmind.ui.internal.MindMapMessages; import org.xmind.ui.internal.wizards.TemplateLabelProvider; import org.xmind.ui.mindmap.IResourceManager; import org.xmind.ui.mindmap.ITemplate; import org.xmind.ui.mindmap.ITemplateGroup; import org.xmind.ui.mindmap.MindMapUI; public class NewSheetFromTemplateDialog extends Dialog implements ISelectionChangedListener, IOpenListener { private static final int FRAME_WIDTH = 130; private static final int FRAME_HEIGHT = 90; private ITemplate template; private Button chooseButton; private boolean chooseButtonVisible; public NewSheetFromTemplateDialog(Shell parentShell) { super(parentShell); } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(MindMapMessages.NewSheetFromTemplateDialog_text); } @Override protected Point getInitialSize() { return new Point(531, 540); } @Override protected void setShellStyle(int newShellStyle) { super.setShellStyle(SWT.MIN | SWT.MAX | SWT.CLOSE | SWT.RESIZE); } @Override protected Control createDialogArea(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN); layout.verticalSpacing = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING); composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); applyDialogFont(composite); Control pageContent = createTemplatesContainer(composite); pageContent.setVisible(true); return composite; } private Control createTemplatesContainer(Composite parent) { GalleryViewer viewer = new GalleryViewer(); EditDomain editDomain = new EditDomain(); editDomain.installTool(GEF.TOOL_SELECT, new GallerySelectTool()); editDomain.installEditPolicy(GalleryViewer.POLICY_NAVIGABLE, new GalleryNavigablePolicy()); viewer.setEditDomain(editDomain); Properties properties = viewer.getProperties(); properties.set(GalleryViewer.Wrap, true); properties.set(GalleryViewer.FlatFrames, true); properties.set(GalleryViewer.Horizontal, true); properties.set(GalleryViewer.TitlePlacement, GalleryViewer.TITLE_BOTTOM); properties.set(GalleryViewer.SolidFrames, true); properties.set(GalleryViewer.FrameContentSize, new Dimension(FRAME_WIDTH, FRAME_HEIGHT)); properties.set(GalleryViewer.ImageConstrained, true); properties.set(GalleryViewer.Layout, new GalleryLayout(GalleryLayout.ALIGN_TOPLEFT, GalleryLayout.ALIGN_TOPLEFT, 10, 10, 10, 10, 10, 10)); // properties.set(GalleryViewer.Layout, new GridLayout()); Control control = viewer.createControl(parent, SWT.BORDER); control.setLayoutData(new GridData(GridData.FILL_BOTH)); // createTemplateDndSupport(control, viewer); viewer.setLabelProvider(new TemplateLabelProvider()); List<ITemplate> templates = loadTemplatesViewerInput(); this.template = templates.get(0); viewer.setInput(templates); if (templates.size() > 0) { viewer.setSelection(new StructuredSelection(templates.get(0)), true); } viewer.addSelectionChangedListener(this); viewer.addOpenListener(this); return control; } private List<ITemplate> loadTemplatesViewerInput() { ArrayList<ITemplate> templates = new ArrayList<ITemplate>(); IResourceManager resourceManager = MindMapUI.getResourceManager(); // templates.addAll(resourceManager.getSystemTemplates()); List<ITemplateGroup> groups = resourceManager.getSystemTemplateGroups(); for (ITemplateGroup group : groups) templates.addAll(group.getTemplates()); templates.addAll(resourceManager.getUserTemplates()); return templates; } public ITemplate getTemplate() { return template; } @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); chooseButton = createButton(parent, IDialogConstants.OK_ID, MindMapMessages.NewSheetFromTemplateDialog_button_Choose, true); } public void open(OpenEvent event) { okPressed(); } public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); if (selection instanceof StructuredSelection) { Object selectedObject = ((StructuredSelection) event.getSelection()) .getFirstElement(); if (selectedObject instanceof ITemplate) { template = (ITemplate) selectedObject; chooseButtonVisible = true; } else { chooseButtonVisible = false; } chooseButton.setEnabled(chooseButtonVisible); } } }