blob: 3689e5a64508b682923f203ed0339395f3cd797e [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.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.gef.palette.PaletteEntry;
import org.eclipse.gef.ui.palette.PaletteCustomizer;
import org.eclipse.gef.ui.palette.customize.PaletteCustomizationAction;
import org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jst.jsf.common.ui.internal.utils.PluginImageHelper;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.jst.pagedesigner.editors.pagedesigner.PageDesignerResources;
import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteItemManager;
import org.eclipse.jst.pagedesigner.editors.palette.impl.TaglibPaletteDrawer;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
/**
* Customization dialog for Web Page Designer palette items
* @author mengbo
* @version 1.5
*/
public class DesignerPaletteCustomizerDialog extends PaletteCustomizerDialog {
private static final String DEFAULT_CUSTOMIZATIONS_EXPORT_FILENAME = "WPDPaletteCustomizations.xml"; //$NON-NLS-1$
private static String DEFAULTEXTENSION = ".xml";//$NON-NLS-1$
/**
* Constructor
* @param shell
* @param customizer
* @param root
*/
public DesignerPaletteCustomizerDialog(Shell shell,
PaletteCustomizer customizer, DesignerPaletteRoot root) {
super(shell, customizer, root);
}
private PropertyChangeListener applyButtonUpdater = new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
Button applyButton = getButton(PaletteCustomizerDialog.APPLY_ID);
if (applyButton == null) {
return;
}
applyButton.setEnabled(true);
}
};
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#open()
*/
public int open() {
// save the current state before open
// save();
return super.open();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog#setActiveEntry(org.eclipse.gef.palette.PaletteEntry)
*/
protected void setActiveEntry(PaletteEntry entry) {
//remove listener on previous entry before adding to new entry
PaletteEntry pre = getSelectedPaletteEntry();
if (pre != null) {
pre.removePropertyChangeListener(applyButtonUpdater);
} else {
getButton(APPLY_ID).setEnabled(false);
}
if (entry != null)
entry.addPropertyChangeListener(applyButtonUpdater);
super.setActiveEntry(entry);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog#save()
*/
protected void save() {
super.save();
Button applyButton = getButton(PaletteCustomizerDialog.APPLY_ID);
if (applyButton != null) {
applyButton.setEnabled(false);
}
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
*/
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
getButton(APPLY_ID).setEnabled(false);
// save();
}
/* (non-Javadoc)
* Export action
*
*/
private class ExportAction extends PaletteCustomizationAction {
/**
* Constructor
*/
public ExportAction() {
setEnabled(true);
setText(PageDesignerResources.getInstance().getString(
"DesignerPaletteCustomizerDialog.label.export")); //$NON-NLS-1$
setImageDescriptor(PluginImageHelper.getInstance()
.getImageDescriptor(DesignerPaletteImages.IMG_ELCL_EXPORT,
PDPlugin.getPluginId()));
setDisabledImageDescriptor(PluginImageHelper.getInstance()
.getImageDescriptor(DesignerPaletteImages.IMG_DLCL_EXPORT,
PDPlugin.getPluginId()));
setHoverImageDescriptor(PluginImageHelper.getInstance()
.getImageDescriptor(DesignerPaletteImages.IMG_CLCL_EXPORT,
PDPlugin.getPluginId()));
}
private void handleExport() {
final FileDialog fileDialog = new FileDialog(PDPlugin
.getActiveWorkbenchShell());
fileDialog.setFileName(DEFAULT_CUSTOMIZATIONS_EXPORT_FILENAME);
String[] filterExtensions = new String[2];
filterExtensions[0] = "*.xml"; //$NON-NLS-1$
filterExtensions[1] = "*.*"; //$NON-NLS-1$
fileDialog.setFilterExtensions(filterExtensions);
fileDialog.setText(Messages.DesignerPaletteCustomizerDialog_ExportCustomizations);
String filename = fileDialog.open();
if (filename != null) {
if (!filename.endsWith(DEFAULTEXTENSION)) {
filename = filename + DEFAULTEXTENSION;
}
final IPaletteContext context = PaletteItemManager.createPaletteContext(((DesignerPaletteRoot)getPaletteRoot()).getFile());
DesignerPaletteCustomizationsHelper
.exportCustomizations(PaletteItemManager.getInstance(context), filename);
updateActions();
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.Action#run()
*/
public void run() {
handleExport();
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.palette.customize.PaletteCustomizationAction#update()
*/
public void update() {
//boolean enabled = false;
// PaletteEntry entry = getSelectedPaletteEntry();
// if (entry != null) {
// if (getCustomizer() instanceof DesignerPaletteCustomizer)
// enabled = ((DesignerPaletteCustomizer)
// getCustomizer()).canExport(entry);
// }
setEnabled(true);
}
}
/* (non-Javadoc)
* Import action
*/
private class ImportAction extends PaletteCustomizationAction {
private DesignerPaletteCustomizerDialog designerPaletteCustomizerDialog;
/**
* Constructor
* @param designerPaletteCustomizerDialog
*/
public ImportAction(DesignerPaletteCustomizerDialog designerPaletteCustomizerDialog) {
super();
this.designerPaletteCustomizerDialog = designerPaletteCustomizerDialog;
setEnabled(true);
setText(PageDesignerResources.getInstance().getString(
"DesignerPaletteCustomizerDialog.label.import")); //$NON-NLS-1$
setImageDescriptor(PluginImageHelper.getInstance()
.getImageDescriptor(DesignerPaletteImages.IMG_ELCL_IMPORT,
PDPlugin.getPluginId()));
setDisabledImageDescriptor(PluginImageHelper.getInstance()
.getImageDescriptor(DesignerPaletteImages.IMG_DLCL_IMPORT,
PDPlugin.getPluginId()));
setHoverImageDescriptor(PluginImageHelper.getInstance()
.getImageDescriptor(DesignerPaletteImages.IMG_CLCL_IMPORT,
PDPlugin.getPluginId()));
}
private void handleImport() {
// PaletteEntry entry = designerPaletteCustomizerDialog.getSelectedPaletteEntry();
final FileDialog fileDialog = new FileDialog(PDPlugin
.getActiveWorkbenchShell());
fileDialog.setFileName(DEFAULT_CUSTOMIZATIONS_EXPORT_FILENAME);
String[] filterExtensions = new String[2];
filterExtensions[0] = "*.xml"; //$NON-NLS-1$
filterExtensions[1] = "*.*"; //$NON-NLS-1$
fileDialog.setFilterExtensions(filterExtensions);
fileDialog.setText(Messages.DesignerPaletteCustomizerDialog_ImportCustomizations);
String filename = fileDialog.open();
if (filename != null) {
//deselect current entry first
designerPaletteCustomizerDialog.close();
// getCustomizer().revertToSaved();
DesignerPaletteCustomizationsHelper
.importCustomizations((DesignerPaletteCustomizer)getCustomizer(), filename);
// designerPaletteCustomizerDialog.setActiveEntry(entry);
((DesignerPaletteCustomizer)getCustomizer()).getDesignerPaletteRoot().refresh();
designerPaletteCustomizerDialog.open();
// designerPaletteCustomizerDialog.setActiveEntry(entry);
}
}
public void run() {
handleImport();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.palette.customize.PaletteCustomizationAction#update()
*/
public void update() {
//nothing to do
}
}
/**
* @return import action
*/
public Action getImportAction() {
return new ImportAction(this);
}
/**
* @return export action
*/
public Action getExportAction() {
return new ExportAction();
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog#createOutlineActions()
*/
protected List createOutlineActions() {
List actions = super.createOutlineActions();
actions.remove(0);// remove new action
actions.remove(0);// remove delete action
actions.add(new ImportAction(this));
actions.add(new ExportAction());
return actions;
}
@Override
protected TreeViewer createOutlineTreeViewer(Composite composite) {
TreeViewer viewer = super.createOutlineTreeViewer(composite);
viewer.setContentProvider(new DesignerPaletteContentProvider());
return viewer;
}
/**
* Content provider for dialog.
* Displays only {@link TaglibPaletteDrawer}s
*/
private static class DesignerPaletteContentProvider implements ITreeContentProvider {
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof DesignerPaletteRoot){
List libs = new ArrayList();
List children = ((DesignerPaletteRoot)parentElement).getChildren();
if (!children.isEmpty()) {
for (Iterator it=children.iterator();it.hasNext();){
PaletteEntry entry = (PaletteEntry)it.next();
if (entry instanceof TaglibPaletteDrawer)
libs.add(entry);
}
if (!libs.isEmpty())
return libs.toArray();
}
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
public Object getParent(Object element) {
return ((PaletteEntry)element).getParent();
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
public boolean hasChildren(Object element) {
return false;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement) {
Object[] elements = new Object[0];
if (inputElement instanceof DesignerPaletteRoot){
elements = getChildren(inputElement);
if (elements == null) {
elements = new Object[0];
}
}
return elements;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
//nothing to do
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
//won't change
}
}
}