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); } } } } } }