package org.xmind.cathy.internal.dashboard; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.draw2d.geometry.Insets; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.LocalResourceManager; import org.eclipse.jface.resource.ResourceManager; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorInput; import org.xmind.cathy.internal.dashboard.StructureListContentProvider.StructureDescriptor; import org.xmind.core.style.IStyle; import org.xmind.gef.EditDomain; import org.xmind.gef.GEF; import org.xmind.gef.ui.internal.SpaceCollaborativeEngine; import org.xmind.gef.util.Properties; import org.xmind.ui.gallery.GalleryLayout; import org.xmind.ui.gallery.GallerySelectTool; import org.xmind.ui.gallery.GalleryViewer; import org.xmind.ui.internal.MindMapUIPlugin; import org.xmind.ui.internal.dashboard.pages.DashboardPage; import org.xmind.ui.mindmap.MindMapUI; import org.xmind.ui.mindmap.WorkbookInitializer; import org.xmind.ui.resources.ColorUtils; @SuppressWarnings("restriction") public class NewFromStructuresDashboardPage extends DashboardPage implements IAdaptable { private GalleryViewer viewer; private ResourceManager resources; public void setFocus() { if (viewer != null && viewer.getControl() != null && !viewer.getControl().isDisposed()) { viewer.getControl().setFocus(); } } public void createControl(Composite parent) { resources = new LocalResourceManager(JFaceResources.getResources(), parent); viewer = new GalleryViewer(); EditDomain editDomain = new EditDomain(); editDomain.installTool(GEF.TOOL_SELECT, new GallerySelectTool()); viewer.setEditDomain(editDomain); Properties properties = viewer.getProperties(); properties.set(GalleryViewer.Horizontal, Boolean.TRUE); properties.set(GalleryViewer.Wrap, Boolean.TRUE); properties.set(GalleryViewer.TitlePlacement, GalleryViewer.TITLE_BOTTOM); properties.set(GalleryViewer.SingleClickToOpen, Boolean.TRUE); properties.set(GalleryViewer.SolidFrames, true); properties.set(GalleryViewer.FlatFrames, true); properties.set(GalleryViewer.ImageConstrained, true); properties.set(GalleryViewer.Layout, new GalleryLayout(GalleryLayout.ALIGN_TOPLEFT, GalleryLayout.ALIGN_TOPLEFT, 30, 0, new Insets(10, 65, 20, 65))); properties.set(GalleryViewer.ContentPaneBorderWidth, 1); properties.set(GalleryViewer.ContentPaneBorderColor, (Color) resources.get(ColorUtils.toDescriptor("#cccccc"))); //$NON-NLS-1$ properties.set(GalleryViewer.ContentPaneSpaceCollaborativeEngine, new SpaceCollaborativeEngine()); Control control = viewer.createControl(parent); control.setBackground(parent.getBackground()); control.setForeground(parent.getForeground()); StructureListContentProvider contentAndLabelProvider = new StructureListContentProvider(); viewer.setContentProvider(contentAndLabelProvider); viewer.setLabelProvider( new StructureListContentProvider.StructureListLabelProvider()); viewer.setInput(StructureListContentProvider.getDefaultInput()); viewer.addOpenListener(new IOpenListener() { public void open(OpenEvent event) { handleStructureSelected(event.getSelection()); } }); setControl(control); } private void handleStructureSelected(ISelection selection) { Display.getCurrent().asyncExec(new Runnable() { public void run() { if (viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed()) return; viewer.setSelection(StructuredSelection.EMPTY); } }); if (selection == null || selection.isEmpty() || !(selection instanceof IStructuredSelection)) return; Object selectedElement = ((IStructuredSelection) selection) .getFirstElement(); if (selectedElement == null || !(selectedElement instanceof StructureDescriptor)) return; final StructureDescriptor structure = (StructureDescriptor) selectedElement; final IStyle theme = chooseTheme(viewer.getControl().getShell(), structure.getValue()); if (theme == null) return; MindMapUIPlugin.getDefault().getUsageDataCollector() .increase("CreateWorkbookCount"); //$NON-NLS-1$ MindMapUIPlugin.getDefault().getUsageDataCollector() .increase("CreateSheetCount"); //$NON-NLS-1$ MindMapUIPlugin.getDefault().getUsageDataCollector() .increase("StructureTypeCount:" + structure.getValue()); //$NON-NLS-1$ WorkbookInitializer initializer = WorkbookInitializer.getDefault() .withStructureClass(structure.getValue()).withTheme(theme); IEditorInput editorInput = MindMapUI.getEditorInputFactory() .createEditorInputForWorkbookInitializer(initializer, null); getContext().openEditor(editorInput, MindMapUI.MINDMAP_EDITOR_ID); } private IStyle chooseTheme(Shell shell, String structureClass) { ThemeChooserDialog dialog = new ThemeChooserDialog(shell, structureClass); int result = dialog.open(); if (result == ThemeChooserDialog.CANCEL) return null; return dialog.getSelectedTheme(); } public <T> T getAdapter(Class<T> adapter) { if (viewer != null) { if (adapter.isAssignableFrom(viewer.getClass())) return adapter.cast(viewer); T obj = viewer.getAdapter(adapter); if (obj != null) return obj; } return null; } }