/* ****************************************************************************** * 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.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Insets; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.xmind.core.style.IStyle; import org.xmind.gef.EditDomain; import org.xmind.gef.GEF; import org.xmind.gef.part.IPart; import org.xmind.gef.tool.ITool; import org.xmind.gef.util.Properties; import org.xmind.ui.gallery.GalleryEditTool; import org.xmind.ui.gallery.GalleryLayout; import org.xmind.ui.gallery.GallerySelectTool; import org.xmind.ui.gallery.GalleryViewer; import org.xmind.ui.mindmap.MindMapUI; import org.xmind.ui.texteditor.FloatingTextEditor; public class ThemesViewer extends GalleryViewer { private static class ThemeNameEditTool extends GalleryEditTool { protected IDocument getTextContents(IPart source) { return new Document(((IStyle) source.getModel()).getName()); } protected void handleTextModified(IPart source, IDocument document) { ((IStyle) source.getModel()).setName(document.get()); MindMapUI.getResourceManager().saveUserThemeSheet(); } protected void hookEditor(FloatingTextEditor editor) { super.hookEditor(editor); getHelper().setPrefWidth(130); } } private IStyle defaultTheme = null; private Image defaultImage = null; public ThemesViewer(Composite parent) { super(); init(); createControl(parent); final Display display = parent.getDisplay(); getControl().setBackground( display.getSystemColor(SWT.COLOR_LIST_BACKGROUND)); getControl().addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { if (defaultImage != null) { defaultImage.dispose(); defaultImage = null; } } }); } protected void init() { // setPartFactory(new ThemePartFactory(getPartFactory())); setLabelProvider(new ThemeLabelProvider()); EditDomain editDomain = new EditDomain(); editDomain.installTool(GEF.TOOL_SELECT, new GallerySelectTool()); editDomain.installTool(GEF.TOOL_EDIT, new ThemeNameEditTool()); setEditDomain(editDomain); Properties properties = getProperties(); properties.set(GalleryViewer.Horizontal, Boolean.TRUE); properties.set(GalleryViewer.Wrap, Boolean.TRUE); properties.set(GalleryViewer.Layout, new GalleryLayout(GalleryLayout.ALIGN_CENTER, GalleryLayout.ALIGN_FILL, 1, 1, new Insets(5))); properties.set(GalleryViewer.FrameContentSize, new Dimension(128, 64)); properties.set(GalleryViewer.TitlePlacement, GalleryViewer.TITLE_BOTTOM); properties.set(GalleryViewer.SingleClickToOpen, Boolean.FALSE); properties.set(GalleryViewer.SolidFrames, true); properties.set(GalleryViewer.FlatFrames, true); properties.set(GalleryViewer.ImageConstrained, true); // properties.set(GalleryViewer.ImageStretched, true); properties.set(GalleryViewer.CustomContentPaneDecorator, true); } protected boolean isTitleEditable(IPart p) { Object model = p.getModel(); if (!(model instanceof IStyle)) return false; IStyle theme = (IStyle) model; return theme.getOwnedStyleSheet() == MindMapUI.getResourceManager() .getUserThemeSheet(); } public void setSelection(ISelection selection) { super.setSelection(selection, true); } public IStyle getDefaultTheme() { return defaultTheme; } public void setDefaultTheme(IStyle defaultTheme) { IStyle oldTheme = this.defaultTheme; this.defaultTheme = defaultTheme; updateThemePart(oldTheme); updateThemePart(defaultTheme); } private void updateThemePart(IStyle theme) { update(new Object[] { theme }); } public void startEditing(IStyle theme) { EditDomain domain = getEditDomain(); ITool tool = domain.getDefaultTool(); ((GallerySelectTool) tool).getStatus().setStatus(GEF.ST_ACTIVE, true); domain.handleRequest(GEF.REQ_EDIT, this); } }