/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.internal.views; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.swt.custom.StackLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.part.IContributedContentsView; import org.eclipse.ui.part.ViewPart; import org.xmind.core.style.IStyle; import org.xmind.core.style.IStyleSheet; import org.xmind.gef.EditDomain; import org.xmind.gef.IGraphicalViewer; import org.xmind.gef.Request; import org.xmind.gef.ui.editor.IGraphicalEditor; import org.xmind.gef.ui.editor.IGraphicalEditorPage; import org.xmind.ui.mindmap.MindMapUI; public class StylesView extends ViewPart implements IContributedContentsView { private StylesViewer viewer; public void createPartControl(Composite parent) { StackLayout layout = new StackLayout(); parent.setLayout(layout); viewer = new StylesViewer(parent); viewer.setInput(new IStyleSheet[] { MindMapUI.getResourceManager().getSystemStyleSheet(), MindMapUI.getResourceManager().getUserStyleSheet() }); viewer.addOpenListener(new IOpenListener() { public void open(OpenEvent event) { IStructuredSelection selection = (IStructuredSelection) event .getSelection(); Object element = selection.getFirstElement(); if (element instanceof IStyle) { changeStyle((IStyle) element); } } }); layout.topControl = viewer.getControl(); getSite().setSelectionProvider(viewer); } public StylesViewer getViewer() { return viewer; } public void setFocus() { if (viewer != null && !viewer.getControl().isDisposed()) { viewer.getControl().setFocus(); } } public void dispose() { super.dispose(); viewer = null; } public IWorkbenchPart getContributingPart() { return getSite().getPage().getActiveEditor(); } public Object getAdapter(Class adapter) { if (adapter == IContributedContentsView.class) { return this; } return super.getAdapter(adapter); } private void changeStyle(IStyle style) { IEditorPart activeEditor = getSite().getPage().getActiveEditor(); if (!(activeEditor instanceof IGraphicalEditor)) return; IGraphicalEditor editor = (IGraphicalEditor) activeEditor; IGraphicalEditorPage page = editor.getActivePageInstance(); if (page == null) return; IGraphicalViewer viewer = page.getViewer(); if (viewer == null) return; EditDomain editDomain = page.getEditDomain(); if (editDomain == null) return; editDomain.handleRequest(new Request(MindMapUI.REQ_MODIFY_STYLE) .setViewer(viewer) .setParameter(MindMapUI.PARAM_RESOURCE, style)); } }