package org.eclipse.nebula.widgets.xviewer.action; import java.util.Collections; import java.util.List; import java.util.logging.Level; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.nebula.widgets.xviewer.XViewer; import org.eclipse.nebula.widgets.xviewer.XViewerText; import org.eclipse.nebula.widgets.xviewer.core.model.CustomizeData; import org.eclipse.nebula.widgets.xviewer.util.internal.XViewerLog; import org.eclipse.nebula.widgets.xviewer.util.internal.images.XViewerImageCache; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; public class TableCustomizationDropDownAction extends Action implements IMenuCreator { private Menu fMenu; private final XViewer xViewer; public TableCustomizationDropDownAction(XViewer xViewer) { this.xViewer = xViewer; setText(XViewerText.get("action.tableCustomization")); //$NON-NLS-1$ setMenuCreator(this); } @Override public ImageDescriptor getImageDescriptor() { return XViewerImageCache.getImageDescriptor("customize.gif"); //$NON-NLS-1$ } @Override public void run() { xViewer.getCustomizeMgr().handleTableCustomization(); } @Override public String getToolTipText() { return XViewerText.get("toolTip.customizeTable"); //$NON-NLS-1$ } @Override public Menu getMenu(Control parent) { if (fMenu != null) { fMenu.dispose(); } fMenu = new Menu(parent); addActionToMenu(fMenu, new TableCustomizationAction(xViewer)); addActionToMenu(fMenu, new TableCustomizationCustomizeDataAction(xViewer, xViewer.getCustomizeMgr().getTableDefaultCustData())); new MenuItem(fMenu, SWT.SEPARATOR); try { List<CustomizeData> savedCustDatas = xViewer.getCustomizeMgr().getSavedCustDatas(); Collections.sort(savedCustDatas); for (CustomizeData custData : savedCustDatas) { addActionToMenu(fMenu, new TableCustomizationCustomizeDataAction(xViewer, custData)); } } catch (Exception ex) { XViewerLog.log(TableCustomizationDropDownAction.class, Level.SEVERE, ex); } return fMenu; } @Override public void dispose() { if (fMenu != null) { fMenu.dispose(); fMenu = null; } } @Override public Menu getMenu(Menu parent) { return null; } protected void addActionToMenu(Menu parent, Action action) { ActionContributionItem item = new ActionContributionItem(action); item.fill(parent, -1); } /** * Get's rid of the menu, because the menu hangs on to * the searches, etc. */ void clear() { dispose(); } }