Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoritrimble2009-03-11 20:57:53 +0000
committeritrimble2009-03-11 20:57:53 +0000
commit16a2712f58430e3573ce66080d7ced700236a4f4 (patch)
tree3a94038d2b27e2df889c84bfafa5cf95a50ea6d2
parentaf6f7d250b15193ed3966ccf9d2efaf924ee6806 (diff)
downloadwebtools.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.
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin.pngbin0 -> 1136 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin_obj.gifbin904 -> 0 bytes
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ActionsMessages.properties1
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ManageSkinsAction.java181
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PageDesignerActionBarContributor2.java3
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/SkinsMenuItemBuilder.java176
-rw-r--r--jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/WPEPropertyPage.java7
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
new file mode 100644
index 000000000..8f229e9b0
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin.png
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin_obj.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin_obj.gif
deleted file mode 100644
index b135bb6f9..000000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/skin_obj.gif
+++ /dev/null
Binary files differ
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;
}

Back to the top