/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.ui.action; import org.eclipse.core.resources.IResource; import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; import org.eclipse.ui.actions.OpenWithMenu; import org.jboss.tools.common.meta.action.*; import org.jboss.tools.common.meta.key.WizardKeys; import org.jboss.tools.common.model.*; import org.jboss.tools.common.model.filesystems.XFileObject; import org.jboss.tools.common.model.util.EclipseResourceUtil; import org.jboss.tools.common.model.ui.ModelUIPlugin; public class XModelObjectActionList extends XModelObjectActionItem { protected XActionList list; public XModelObjectActionList(XActionList list, XModelObject object, XModelObject[] targets, Object environment) { super((XActionItem)list, object, targets, environment); this.list = list; } public void createMenu(Menu parent) { if(list.getGroupFactor() == XActionList.DIVISION) { if(parent.getItems().length > 0) { if(parent.getItems()[parent.getItems().length - 1].getStyle() != SWT.SEPARATOR) new MenuItem(parent, SWT.SEPARATOR); } fillMenu(parent); } else { MenuItem item = new MenuItem(parent, SWT.CASCADE); String displayName = WizardKeys.getMenuItemDisplayName(list, object == null ? null : object.getModelEntity()); item.setText(displayName); Menu menu = new Menu(item); item.setMenu(menu); fillMenu(menu); removeLastSeparator(menu); if(menu.getItems().length == 0) { item.dispose(); } else { menu.setVisible(true); } } } public Menu createMenu(Control parent) { Menu menu = new Menu(parent); setShell(parent.getShell()); fillMenu(menu); removeLastSeparator(menu); return menu; } public void removeLastSeparator(Menu menu) { int c = menu.getItems().length - 1; if(c >= 0 && menu.getItems()[c].getStyle() == SWT.SEPARATOR) menu.getItems()[c].dispose(); } public void fillMenu(Menu menu) { XActionItem[] is = list.getActionItems(); for (int i = 0; i < is.length; i++) { if(is[i] instanceof XAction) { XAction action = (XAction)is[i]; XModelObjectAction a = new XModelObjectAction(action, object, targets, environment); a.setShell(shell); a.createMenuItem(menu); } else { XActionList l = (XActionList)is[i]; if ("OpenWith".equals(l.getName())) { //$NON-NLS-1$ if (object.getFileType() == XFileObject.FILE && (targets == null || targets.length < 2)) { IResource resource = EclipseResourceUtil.getResource(object); if (resource != null && resource.getType() == IResource.FILE) { String displayName = WizardKeys.getMenuItemDisplayName(l, object == null ? null : object.getModelEntity()); MenuItem item = new MenuItem(menu, SWT.CASCADE); item.setText(displayName); Menu subMenu = new Menu(item); OpenWithMenu openMenu = new OpenWithMenu( ModelUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(), resource ); openMenu.fill(subMenu, 0); item.setMenu(subMenu); } } } else { XModelObjectActionList a = new XModelObjectActionList(l, object, targets, environment); a.setShell(shell); a.createMenu(menu); } } } } }