blob: 56f03a15fe11d3108532399e9f74f708e879cb34 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2010 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gef.ui.palette;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.gef.internal.Internal;
/**
* This action allows to switch between the various supported layout modes for
* the given palette.
*
* @author Pratik Shah
*/
public class LayoutAction extends Action implements IMenuCreator {
private PaletteViewerPreferences prefs;
private List actions;
/**
* Constructor
*
* @param prefs
* PaletteViewerPreferences object where the settings can be
* saved
*/
public LayoutAction(PaletteViewerPreferences prefs) {
this(prefs, false);
}
/**
* Constructor
*
* @param hasIcon
* True if this action should associate an icon with itself
* @param prefs
* PaletteViewerPreferences object where the settings can be
* saved
*/
public LayoutAction(PaletteViewerPreferences prefs, boolean hasIcon) {
super(PaletteMessages.LAYOUT_MENU_LABEL);
this.prefs = prefs;
actions = createActions();
setMenuCreator(this);
if (hasIcon)
setImageDescriptor(ImageDescriptor.createFromFile(Internal.class,
"icons/palette_layout.gif")); //$NON-NLS-1$
setToolTipText(PaletteMessages.LAYOUT_MENU_LABEL);
}
/**
* Helper method that wraps the given action in an ActionContributionItem
* and then adds it to the given menu.
*
* @param parent
* The menu to which the given action is to be added
* @param action
* The action that is to be added to the given menu
*/
protected void addActionToMenu(Menu parent, IAction action) {
ActionContributionItem item = new ActionContributionItem(action);
item.fill(parent, -1);
}
/**
* @return A list of actions that can switch to one of the supported layout
* modes
*/
protected List createActions() {
ArrayList list = new ArrayList();
int[] modes = prefs.getSupportedLayoutModes();
Action action;
for (int i = 0; i < modes.length; i++) {
switch (modes[i]) {
case PaletteViewerPreferences.LAYOUT_COLUMNS:
action = new LayoutChangeAction(
PaletteViewerPreferences.LAYOUT_COLUMNS);
action.setText(PaletteMessages.SETTINGS_COLUMNS_VIEW_LABEL);
list.add(action);
break;
case PaletteViewerPreferences.LAYOUT_LIST:
action = new LayoutChangeAction(
PaletteViewerPreferences.LAYOUT_LIST);
action.setText(PaletteMessages.SETTINGS_LIST_VIEW_LABEL);
list.add(action);
break;
case PaletteViewerPreferences.LAYOUT_ICONS:
action = new LayoutChangeAction(
PaletteViewerPreferences.LAYOUT_ICONS);
action.setText(PaletteMessages.SETTINGS_ICONS_VIEW_LABEL_CAPS);
list.add(action);
break;
case PaletteViewerPreferences.LAYOUT_DETAILS:
action = new LayoutChangeAction(
PaletteViewerPreferences.LAYOUT_DETAILS);
action.setText(PaletteMessages.SETTINGS_DETAILS_VIEW_LABEL);
list.add(action);
break;
}
}
return list;
}
/**
* Empty method
*
* @see org.eclipse.jface.action.IMenuCreator#dispose()
*/
public void dispose() {
}
private Menu fillMenu(Menu menu) {
for (Iterator iter = actions.iterator(); iter.hasNext();) {
LayoutChangeAction action = (LayoutChangeAction) iter.next();
action.setChecked(prefs.getLayoutSetting() == action
.getLayoutSetting());
addActionToMenu(menu, action);
}
setEnabled(!actions.isEmpty());
return menu;
}
/**
* @see org.eclipse.jface.action.IMenuCreator#getMenu(Control)
*/
public Menu getMenu(Control parent) {
return fillMenu(new Menu(parent));
}
/**
* @see org.eclipse.jface.action.IMenuCreator#getMenu(Menu)
*/
public Menu getMenu(Menu parent) {
return fillMenu(new Menu(parent));
}
private class LayoutChangeAction extends Action {
private int value;
public LayoutChangeAction(int layoutSetting) {
value = layoutSetting;
}
public int getLayoutSetting() {
return value;
}
public void run() {
prefs.setLayoutSetting(value);
}
}
}