diff options
author | itrimble | 2009-03-11 20:57:53 +0000 |
---|---|---|
committer | itrimble | 2009-03-11 20:57:53 +0000 |
commit | 16a2712f58430e3573ce66080d7ced700236a4f4 (patch) | |
tree | 3a94038d2b27e2df889c84bfafa5cf95a50ea6d2 | |
parent | af6f7d250b15193ed3966ccf9d2efaf924ee6806 (diff) | |
download | webtools.jsf-16a2712f58430e3573ce66080d7ced700236a4f4.tar.gz webtools.jsf-16a2712f58430e3573ce66080d7ced700236a4f4.tar.xz webtools.jsf-16a2712f58430e3573ce66080d7ced700236a4f4.zip |
Add WPE toolbar skin management button with drop-down menu. Update skin icon image.
7 files changed, 367 insertions, 1 deletions
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin.png b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin.png Binary files differnew file mode 100644 index 000000000..8f229e9b0 --- /dev/null +++ b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin.png diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin_obj.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin_obj.gif Binary files differdeleted file mode 100644 index b135bb6f9..000000000 --- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin_obj.gif +++ /dev/null diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ActionsMessages.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ActionsMessages.properties index 6944ae3e4..d57d3c14f 100644 --- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ActionsMessages.properties +++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ActionsMessages.properties @@ -41,3 +41,4 @@ Edit.Menu=Edit Navigate.Menu=Navigate Style.Menu=Style Insert.Menu=Insert +ManageSkinsAction.Text=Manage Skins diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ManageSkinsAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ManageSkinsAction.java new file mode 100644 index 000000000..4a9a79d44 --- /dev/null +++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ManageSkinsAction.java @@ -0,0 +1,181 @@ +package org.eclipse.jst.pagedesigner.editors.actions; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IMenuCreator; +import org.eclipse.jface.preference.PreferenceDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jst.pagedesigner.PDPlugin; +import org.eclipse.jst.pagedesigner.editors.HTMLEditor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IFileEditorInput; +import org.eclipse.ui.dialogs.PropertyDialogAction; +import org.eclipse.ui.internal.Workbench; + +/** + * Action to change the current DT skin. + * + * @author Ian Trimble - Oracle + */ +public class ManageSkinsAction extends Action { + + /** + * Constructs an instance. + */ + public ManageSkinsAction() { + super(ActionsMessages.getString("ManageSkinsAction.Text"), AS_DROP_DOWN_MENU); //$NON-NLS-1$ + setImageDescriptor(PDPlugin.getDefault().getImageDescriptor("skin.png")); //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.jface.action.Action#run() + */ + @Override + public void run() { + IEditorPart editorPart = Workbench.getInstance().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); + if (editorPart instanceof HTMLEditor) { + IEditorInput editorInput = editorPart.getEditorInput(); + if (editorInput instanceof IFileEditorInput) { + IFile file = ((IFileEditorInput)editorInput).getFile(); + IProject project = file.getProject(); + if (project != null) { + SelectionProvider selectionProvider = new SelectionProvider(); + selectionProvider.setSelection(new StructuredSelection(project)); + PropertyDialogAction propertyDialogAction = new PropertyDialogAction(editorPart.getEditorSite(), selectionProvider); + PreferenceDialog dialog = propertyDialogAction.createDialog(); + if (dialog != null) { + dialog.setSelectedNode("org.eclipse.jst.pagedesigner.WPEPropertyPage"); //$NON-NLS-1$ + //yes, we create AGAIN - cannot find another way to get the selected node to stick + dialog = propertyDialogAction.createDialog(); + if (dialog != null) { + dialog.open(); + } + } + } + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.jface.action.Action#getMenuCreator() + */ + @Override + public IMenuCreator getMenuCreator() { + return new MenuCreator(); + } + + + + /** + * Simple selection provider for creation of the property dialog. + */ + private class SelectionProvider implements ISelectionProvider { + private ISelection selection; + /* + * (non-Javadoc) + * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener) + */ + public void addSelectionChangedListener(ISelectionChangedListener listener) { + //do nothing - we don't care here + } + /* + * (non-Javadoc) + * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener) + */ + public void removeSelectionChangedListener(ISelectionChangedListener listener) { + //do nothing - we don't care here + } + /* + * (non-Javadoc) + * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection) + */ + public void setSelection(ISelection selection) { + this.selection = selection; + } + /* + * (non-Javadoc) + * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection() + */ + public ISelection getSelection() { + return selection; + } + } + + + + /** + * Store last created menu so we can dispose on next creation. + */ + private static Menu lastMenu; + /** + * Menu creator for the drop-down button. + */ + private class MenuCreator implements IMenuCreator { + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.IMenuCreator#dispose() + */ + public void dispose() { + if (lastMenu != null) { + lastMenu.dispose(); + } + } + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Control) + */ + public Menu getMenu(Control control) { + dispose(); + lastMenu = new Menu(control); + buildMenu(lastMenu); + return lastMenu; + } + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Menu) + */ + public Menu getMenu(Menu menu) { + dispose(); + lastMenu = new Menu(menu); + buildMenu(lastMenu); + return lastMenu; + } + private void buildMenu(Menu menu) { + MenuItem menuItem = new MenuItem(lastMenu, SWT.PUSH); + menuItem.setText(ActionsMessages.getString("ManageSkinsAction.Text")); //$NON-NLS-1$ + menuItem.addSelectionListener(new SelectionListener() { + public void widgetSelected(SelectionEvent event) { + run(); + } + public void widgetDefaultSelected(SelectionEvent event) { + widgetSelected(event); + } + }); + IEditorPart editorPart = Workbench.getInstance().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); + if (editorPart instanceof HTMLEditor) { + IEditorInput editorInput = editorPart.getEditorInput(); + if (editorInput instanceof IFileEditorInput) { + IFile file = ((IFileEditorInput)editorInput).getFile(); + IProject project = file.getProject(); + if (project != null) { + SkinsMenuItemBuilder skinsMenuItemBuilder = + new SkinsMenuItemBuilder(project); + skinsMenuItemBuilder.buildMenuItems(menu); + } + } + } + } + } + +} diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PageDesignerActionBarContributor2.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PageDesignerActionBarContributor2.java index 718bb96fc..b081c16fa 100644 --- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PageDesignerActionBarContributor2.java +++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PageDesignerActionBarContributor2.java @@ -14,6 +14,7 @@ package org.eclipse.jst.pagedesigner.editors.actions; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.Separator; import org.eclipse.jst.pagedesigner.IJMTConstants; import org.eclipse.jst.pagedesigner.editors.HTMLEditor; import org.eclipse.jst.pagedesigner.editors.SimpleGraphicalEditor; @@ -67,6 +68,8 @@ public class PageDesignerActionBarContributor2 extends if (actionBars != null) { initCommonActionBarContributor(actionBars); + actionBars.getToolBarManager().add(new ManageSkinsAction()); + actionBars.getToolBarManager().add(new Separator()); initDesignViewerActionBarContributor(actionBars); initSourceViewerActionContributor(actionBars); } diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/SkinsMenuItemBuilder.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/SkinsMenuItemBuilder.java new file mode 100644 index 000000000..f5541cb30 --- /dev/null +++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/SkinsMenuItemBuilder.java @@ -0,0 +1,176 @@ +/******************************************************************************* + * Copyright (c) 2009 Oracle Corporation. + * 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: + * Ian Trimble - initial API and implementation + *******************************************************************************/ +package org.eclipse.jst.pagedesigner.editors.actions; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.resources.IProject; +import org.eclipse.jst.jsf.common.metadata.Model; +import org.eclipse.jst.jsf.common.metadata.Trait; +import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper; +import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext; +import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper; +import org.eclipse.jst.pagedesigner.dtresourceprovider.DTResourceProviderFactory; +import org.eclipse.jst.pagedesigner.dtresourceprovider.DTSkinManager; +import org.eclipse.jst.pagedesigner.dtresourceprovider.IDTResourceProvider; +import org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin; +import org.eclipse.jst.pagedesigner.editors.HTMLEditor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.internal.Workbench; + +/** + * Builds menu items for managing skins. + * + * @author Ian Trimble - Oracle + */ +public class SkinsMenuItemBuilder { + + private static final String DATAKEY_DTSKIN = "DATAKEY_DTSKIN"; //$NON-NLS-1$ + private static final String DATAKEY_NSURI = "DTATKEY_NSURI"; //$NON-NLS-1$ + + private static List<Menu> menuList = new ArrayList<Menu>(); + + private IProject project; + + /** + * Constructs an instance. + * + * @param project IProject instance for which to get skin information. + */ + public SkinsMenuItemBuilder(IProject project) { + this.project = project; + } + + /** + * Builds menu items (adds a separator and then menu items to end of + * specified menu. + * + * @param menu Menu instance to which to add menu items. + */ + public void buildMenuItems(Menu menu) { + for (Menu oldMenu: menuList) { + oldMenu.dispose(); + } + if (menu != null) { + new MenuItem(menu, SWT.SEPARATOR); + List<TaglibData> taglibDataList = getTaglibDataList(); + for (TaglibData taglibData: taglibDataList) { + String nsURI = taglibData.getNSURI(); + DTSkinManager dtSkinManager = DTSkinManager.getInstance(project); + IDTSkin currentDTSkin = dtSkinManager.getCurrentSkin(nsURI); + MenuItem menuItem = new MenuItem(menu, SWT.CASCADE); + menuItem.setText(taglibData.getName()); + Menu skinMenu = new Menu(menuItem); + menuList.add(skinMenu); + menuItem.setMenu(skinMenu); + List<IDTSkin> dtSkins = dtSkinManager.getSkins(nsURI); + for (IDTSkin dtSkin: dtSkins) { + MenuItem skinMenuItem; + if (currentDTSkin == dtSkin) { + skinMenuItem = new MenuItem(skinMenu, SWT.CHECK); + } else { + skinMenuItem = new MenuItem(skinMenu, SWT.PUSH); + } + skinMenuItem.setText(dtSkin.getName()); + skinMenuItem.setData(DATAKEY_DTSKIN, dtSkin); + skinMenuItem.setData(DATAKEY_NSURI, nsURI); + skinMenuItem.addSelectionListener(new SkinSelectionListener()); + } + } + } + } + + private List<TaglibData> getTaglibDataList() { + List<TaglibData> taglibDataList = new ArrayList<TaglibData>(); + List<IDTResourceProvider> dtResourceProviders = + DTResourceProviderFactory.getInstance().getActiveDTResourceProviders(project); + for (IDTResourceProvider dtResourceProvider: dtResourceProviders) { + TaglibData taglibData = new TaglibData(dtResourceProvider.getId()); + if (!taglibDataList.contains(taglibData)) { + taglibDataList.add(taglibData); + } + } + return taglibDataList; + } + + + + /** + * Used to hold and pass taglib-related data. + */ + private class TaglibData { + private String nsURI; + private String name; + public TaglibData(String nsURI) { + this.nsURI = nsURI; + ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, nsURI); + Model model = TaglibDomainMetaDataQueryHelper.getModel(modelContext); + Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(model, "display-label"); //$NON-NLS-1$ + this.name = TraitValueHelper.getValueAsString(trait); + } + public String getNSURI() { + return nsURI; + } + public String getName() { + return name; + } + /* + * (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + int nsURIHashCode = 0; + if (nsURI != null) { + nsURIHashCode = nsURI.hashCode(); + } + int nameHashCode = 0; + if (name != null) { + nameHashCode = name.hashCode(); + } + return nameHashCode | nsURIHashCode ; + } + } + + + + /** + * Selection listener for skin menu items. + */ + private class SkinSelectionListener implements SelectionListener { + /* + * (non-Javadoc) + * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) + */ + public void widgetSelected(SelectionEvent event) { + String nsURI = (String)event.widget.getData(DATAKEY_NSURI); + IDTSkin dtSkin = (IDTSkin)event.widget.getData(DATAKEY_DTSKIN); + DTSkinManager.getInstance(project).setCurrentSkin(nsURI, dtSkin); + IEditorPart editorPart = Workbench.getInstance().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); + if (editorPart instanceof HTMLEditor) { + ((HTMLEditor)editorPart).refreshDesignViewer(); + } + } + /* + * (non-Javadoc) + * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) + */ + public void widgetDefaultSelected(SelectionEvent event) { + widgetSelected(event); + } + } + +} diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/WPEPropertyPage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/WPEPropertyPage.java index 8a10dace6..22b66895a 100644 --- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/WPEPropertyPage.java +++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/WPEPropertyPage.java @@ -173,6 +173,7 @@ public class WPEPropertyPage extends PropertyPage { localCurrentSkinMap.put(nsURI, defaultDTSkin); } skinsTable.refresh(); + updateButtons(); super.performDefaults(); } @@ -361,6 +362,10 @@ public class WPEPropertyPage extends PropertyPage { public String getName() { return name; } + /* + * (non-Javadoc) + * @see java.lang.Object#hashCode() + */ public int hashCode() { int nsURIHashCode = 0; if (nsURI != null) { @@ -423,7 +428,7 @@ public class WPEPropertyPage extends PropertyPage { public Image getImage(Object element) { Image image = null; if (element instanceof IDTSkin) { - image = PDPlugin.getDefault().getImage("skin_obj.gif"); //$NON-NLS-1$ + image = PDPlugin.getDefault().getImage("skin.png"); //$NON-NLS-1$ } return image; } |