package org.xmind.cathy.internal.dashboard;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.StructuredSelection;
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.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.xmind.cathy.internal.ICathyConstants;
import org.xmind.ui.gallery.GalleryViewer;
import org.xmind.ui.internal.MindMapUIPlugin;
import org.xmind.ui.internal.dashboard.pages.DashboardPage;
import org.xmind.ui.internal.dashboard.pages.IDashboardContext;
import org.xmind.ui.mindmap.IResourceManagerListener;
import org.xmind.ui.mindmap.ITemplate;
import org.xmind.ui.mindmap.MindMapUI;
public class NewFromTemplatesDashboardPage extends DashboardPage
implements IResourceManagerListener, IAdaptable {
private CategorizedTemplateViewer viewer;
private boolean templateOpening;
public void setFocus() {
if (viewer != null && viewer.getControl() != null
&& !viewer.getControl().isDisposed()) {
viewer.getControl().setFocus();
}
}
@Override
public void dispose() {
MindMapUI.getResourceManager().removeResourceManagerListener(this);
super.dispose();
}
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginLeft = 60;
layout.marginRight = 0;
layout.marginHeight = 7;
container.setLayout(layout);
MindMapUIPlugin.getDefault().getUsageDataCollector()
.increase("ShowTemplatesCount"); //$NON-NLS-1$
viewer = new CategorizedTemplateViewer(container);
Control control = viewer.getControl();
control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
viewer.addOpenListener(new IOpenListener() {
public void open(OpenEvent event) {
if (!templateOpening) {
handleTemplateSelected(event.getSelection());
MindMapUIPlugin.getDefault().getUsageDataCollector()
.increase("CreateWorkbookCount"); //$NON-NLS-1$
MindMapUIPlugin.getDefault().getUsageDataCollector()
.increase("CreateSheetCount"); //$NON-NLS-1$
MindMapUIPlugin.getDefault().getUsageDataCollector()
.increase("UseTemplatesCount"); //$NON-NLS-1$
}
}
});
MindMapUI.getResourceManager().addResourceManagerListener(this);
registerContextMenu(control);
setControl(container);
}
public void registerAvailableCommands() {
IDashboardContext context = getContext();
context.registerAvailableCommandId(
ICathyConstants.COMMAND_TEMPLATE_DUPLICATE);
context.registerAvailableCommandId(
ICathyConstants.COMMAND_TEMPLATE_RENAME);
context.registerAvailableCommandId(
ICathyConstants.COMMAND_TEMPLATE_DELETE);
}
private void registerContextMenu(Control control) {
getContext().registerContextMenu(control,
ICathyConstants.POPUP_TEMPLATE);
//add context menu for nested viewers' control.
Object input = viewer.getInput();
if (input instanceof Object[]) {
Object[] groups = (Object[]) viewer.getInput();
for (Object group : groups) {
GalleryViewer nestedViewer = viewer.getNestedViewer(group);
if (nestedViewer != null) {
nestedViewer.getControl().setMenu(control.getMenu());
}
}
}
}
public void addSelectionChangedListener(
ISelectionChangedListener listener) {
if (viewer != null) {
viewer.addSelectionChangedListener(listener);
}
}
public void userTemplateAdded(ITemplate template) {
if (viewer != null) {
viewer.userTemplateAdded(template);
}
}
public void userTemplateRemoved(ITemplate template) {
if (viewer != null) {
viewer.userTemplateRemoved(template);
}
}
private void handleTemplateSelected(ISelection selection) {
templateOpening = true;
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)) {
templateOpening = false;
return;
}
Object selectedElement = ((IStructuredSelection) selection)
.getFirstElement();
if (selectedElement == null || !(selectedElement instanceof ITemplate))
return;
ITemplate template = (ITemplate) selectedElement;
IEditorInput editorInput = MindMapUI.getEditorInputFactory()
.createEditorInput(template.createWorkbookRef());
getContext().openEditor(editorInput, MindMapUI.MINDMAP_EDITOR_ID);
templateOpening = false;
}
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;
}
}