| /******************************************************************************* |
| * Copyright (c) 2006 Sybase, Inc. and others. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Sybase, Inc. - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.pagedesigner.editors.palette; |
| |
| import java.util.List; |
| |
| import org.eclipse.gef.palette.PaletteRoot; |
| import org.eclipse.gef.ui.palette.PaletteCustomizer; |
| import org.eclipse.gef.ui.palette.PaletteViewer; |
| import org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog; |
| import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteItemManager; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Display; |
| |
| /** |
| * XXX: currently create this class is just for add/remove listener to |
| * preference change, so can refresh the palette. |
| * |
| * @author mengbo |
| * @author mengbo |
| * @version 1.5 |
| */ |
| public class DesignerPaletteViewer extends PaletteViewer { |
| |
| private PaletteCustomizerDialog _customizerDialog = null; |
| |
| private DesignerPaletteCustomizer _customizer; |
| |
| /** |
| * |
| */ |
| public DesignerPaletteViewer() { |
| super(); |
| |
| this.enableVerticalScrollbar(true); |
| } |
| |
| // Preferences.IPropertyChangeListener listener = new Preferences.IPropertyChangeListener() { |
| // public void propertyChange(PropertyChangeEvent event) { |
| // PaletteRoot root = getPaletteRoot(); |
| // if (root instanceof DesignerPaletteRoot) { |
| //// ((DesignerPaletteRoot) root).refresh(); |
| // // XXX: setActiveTool to null to workaround GEF bug of NPE |
| // // setActiveTool(null); |
| // } |
| // } |
| // }; |
| |
| final IEntryChangeListener _paletteModelListener = new IEntryChangeListener() { |
| |
| public void modelChanged(List oldDefinitions, List newDefinitions) { |
| final PaletteRoot root = getPaletteRoot(); |
| if (root instanceof DesignerPaletteRoot) { |
| Control viewerControl = getControl(); |
| |
| if (viewerControl != null && !viewerControl.isDisposed()) |
| { |
| Display display = viewerControl.getDisplay(); |
| |
| if (display != null && !display.isDisposed()) |
| { |
| // this updates the UI, so it must be run on |
| // the display thread |
| display.asyncExec(new Runnable() |
| { |
| public void run() { |
| ((DesignerPaletteRoot) root).refresh(); |
| } |
| }); |
| } |
| } |
| } |
| } |
| |
| }; |
| |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.ui.palette.PaletteViewer#hookControl() |
| */ |
| protected void hookControl() { |
| super.hookControl(); |
| // PDPlugin.getDefault().getPluginPreferences().addPropertyChangeListener( |
| // listener); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.ui.palette.PaletteViewer#unhookControl() |
| */ |
| protected void unhookControl() { |
| // PDPlugin.getDefault().getPluginPreferences() |
| // .removePropertyChangeListener(listener); |
| // remove palette model change listener |
| PaletteRoot root = getPaletteRoot(); |
| if (root instanceof DesignerPaletteRoot) { |
| if (_customizer != null){ |
| _customizer.setPaletteRoot(null); |
| } |
| IPaletteItemManager imanager = ((DesignerPaletteRoot) root) |
| .getPaletteManager(); |
| if (imanager instanceof PaletteItemManager) { |
| PaletteItemManager manager = (PaletteItemManager) imanager; |
| // ResourcesPlugin.getWorkspace().removeResourceChangeListener( |
| // _resourceChangeListener); |
| manager.removeEntryChangeListener(_paletteModelListener); |
| // PaletteItemManager.clearPaletteItemManager(); |
| manager.release(((DesignerPaletteRoot)root).getPaletteContext()); |
| } |
| } |
| super.unhookControl(); |
| } |
| |
| public PaletteCustomizerDialog getCustomizerDialog() { |
| if (_customizerDialog == null){ |
| _customizerDialog = DesignerPaletteCustomizationsHelper.getNewCustomizerDialog(this, getCustomizer() ); |
| } |
| return _customizerDialog; |
| } |
| |
| public PaletteCustomizer getCustomizer() { |
| if (_customizer == null){ |
| _customizer = DesignerPaletteCustomizationsHelper.getNewCustomizer(); |
| _customizer.setPaletteRoot((DesignerPaletteRoot)this.getPaletteRoot()); |
| } |
| return _customizer; |
| } |
| |
| public void setPaletteRoot(PaletteRoot root) { |
| super.setPaletteRoot(root); |
| // add palette model change listener |
| // PaletteRoot root = getPaletteRoot(); |
| if (root instanceof DesignerPaletteRoot) { |
| ((DesignerPaletteRoot) root).getPaletteManager() |
| .addEntryChangeListener(_paletteModelListener); |
| } |
| |
| } |
| } |