blob: d25c94f985e7f5662f8f5586a5b47ed24cb87081 [file] [log] [blame]
/*******************************************************************************
* 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.core.runtime.Preferences;
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
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.PDPlugin;
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);
}
}
};
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();
}
});
}
}
}
}
};
//
// IResourceChangeListener _resourceChangeListener = new IResourceChangeListener() {
//
// public void resourceChanged(IResourceChangeEvent event) {
// IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
// public boolean visit(IResourceDelta delta) throws CoreException {
// IResource resource = delta.getResource();
// // FIXME need make performance better
// if (resource.getType() == IResource.FILE
// && (delta.getFlags() & IResourceDelta.CONTENT) != 0) {
// String ext = ((IFile) resource).getFileExtension();
// // resource.getFullPath().
// if (ext != null
// && ("tld".equalsIgnoreCase(ext) || "jar"
// .equalsIgnoreCase(ext))) {
// PaletteRoot root = getPaletteRoot();
// if (root instanceof DesignerPaletteRoot) {
// IPaletteItemManager imanager = ((DesignerPaletteRoot) root)
// .getPaletteManager();
// if (imanager instanceof PaletteItemManager) {
// PaletteItemManager manager = (PaletteItemManager) imanager;
// manager.reset();
// }
//
// }
// }
// }
// return true;
// }
// };
// try {
// IResourceDelta delta = event.getDelta();
// if (delta != null) {
// delta.accept(visitor);
// }
// } catch (CoreException e) {
// // ignore
// }
// }
//
// };
/*
* (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();
}
}
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);
// ResourcesPlugin.getWorkspace().addResourceChangeListener(
// _resourceChangeListener);
}
}
}