blob: 6c121dfb8737340d71b7490d02189f48f2c0a181 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. 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:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.editors.actions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.commands.ActionHandler;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.jst.pagedesigner.editors.HTMLEditor;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.ui.handlers.IHandlerActivation;
import org.eclipse.ui.handlers.IHandlerService;
/**
* @author mengbo
* @version 1.5
*/
public class DesignerStyleActionGroup extends ActionGroup
{
private static HashMap IMAGE_NAMES = new HashMap();
private static final String VERTICAL = ActionsMessages
.getString("DesignerStyleActionGroup.CommandLabel.V"); //$NON-NLS-1$
private static final String HORIZONTAL = ActionsMessages
.getString("DesignerStyleActionGroup.CommandLabel.H"); //$NON-NLS-1$
private static final String DESIGN = ActionsMessages
.getString("DesignerStyleActionGroup.CommandLabel.D"); //$NON-NLS-1$
private static final String SOURCE = ActionsMessages
.getString("DesignerStyleActionGroup.CommandLabel.S"); //$NON-NLS-1$
private static final String VERTICAL_TOOLTIP = ActionsMessages
.getString("DesignerStyleActionGroup.CommandLabel.V.Tooltip"); //$NON-NLS-1$
private static final String HORIZONTAL_TOOLTIP = ActionsMessages
.getString("DesignerStyleActionGroup.CommandLabel.H.Tooltip"); //$NON-NLS-1$
private static final String DESIGN_TOOLTIP = ActionsMessages
.getString("DesignerStyleActionGroup.CommandLabel.D.Tooltip"); //$NON-NLS-1$
private static final String SOURCE_TOOLTIP = ActionsMessages
.getString("DesignerStyleActionGroup.CommandLabel.S.Tooltip"); //$NON-NLS-1$
static {
IMAGE_NAMES.put(VERTICAL, "PD_Toolbar_vsplit.gif"); //$NON-NLS-1$
IMAGE_NAMES.put(HORIZONTAL, "PD_Toolbar_hsplit.gif"); //$NON-NLS-1$
IMAGE_NAMES.put(DESIGN, "PD_Toolbar_designer.gif"); //$NON-NLS-1$
IMAGE_NAMES.put(SOURCE, "PD_Toolbar_source.gif"); //$NON-NLS-1$
}
private class ChangeDesignerStyleAction extends Action {
int _mode;
ChangeDesignerStyleAction(String actionId, String text, ImageDescriptor image, int mode) {
super(text, IAction.AS_RADIO_BUTTON);
this.setImageDescriptor(image);
_mode = mode;
setId(actionId);
}
/**
* @return the mode
*/
public int getMode() {
return _mode;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.action.Action#run()
*/
public void run() {
//final IWorkbenchPart editorPart = getActivePart();
if (_htmlEditor != null) {
_htmlEditor.setDesignerMode(_mode);
updateActionBars();
}
}
};
private HTMLEditor _htmlEditor;
private final ChangeDesignerStyleAction[] _actions;
private final List<ActionHandler> _actionHandlers;
private final List<IHandlerActivation> _handlers;
/**
* constructor
*/
public DesignerStyleActionGroup()
{
ChangeDesignerStyleAction verAction = new ChangeDesignerStyleAction(
"org.eclipse.jst.pagedesigner.vertical", //$NON-NLS-1$
VERTICAL, PDPlugin.getDefault().getImageDescriptor(
(String) IMAGE_NAMES.get(VERTICAL)),
HTMLEditor.MODE_SASH_VERTICAL);
verAction
.setActionDefinitionId("org.eclipse.jst.pagedesigner.vertical"); //$NON-NLS-1$
verAction.setToolTipText(VERTICAL_TOOLTIP);
ChangeDesignerStyleAction horAction = new ChangeDesignerStyleAction(
"org.eclipse.jst.pagedesigner.horizotal", //$NON-NLS-1$
HORIZONTAL, PDPlugin.getDefault().getImageDescriptor(
(String) IMAGE_NAMES.get(HORIZONTAL)),
HTMLEditor.MODE_SASH_HORIZONTAL);
horAction
.setActionDefinitionId("org.eclipse.jst.pagedesigner.horizotal"); //$NON-NLS-1$
horAction.setToolTipText(HORIZONTAL_TOOLTIP);
ChangeDesignerStyleAction designAction = new ChangeDesignerStyleAction(
"org.eclipse.jst.pagedesigner.design", //$NON-NLS-1$
DESIGN, PDPlugin.getDefault().getImageDescriptor(
(String) IMAGE_NAMES.get(DESIGN)),
HTMLEditor.MODE_DESIGNER);
designAction
.setActionDefinitionId("org.eclipse.jst.pagedesigner.design"); //$NON-NLS-1$
designAction.setToolTipText(DESIGN_TOOLTIP);
ChangeDesignerStyleAction sourceAction = new ChangeDesignerStyleAction(
"org.eclipse.jst.pagedesigner.source", //$NON-NLS-1$
SOURCE, PDPlugin.getDefault().getImageDescriptor(
(String) IMAGE_NAMES.get(SOURCE)),
HTMLEditor.MODE_SOURCE);
sourceAction
.setActionDefinitionId("org.eclipse.jst.pagedesigner.source"); //$NON-NLS-1$
sourceAction.setToolTipText(SOURCE_TOOLTIP);
_actions = new ChangeDesignerStyleAction[] { verAction, horAction,
designAction, sourceAction };
_actionHandlers = new ArrayList<ActionHandler>();
for (int i = 0; i < _actions.length; i++)
{
_actionHandlers.add(new ActionHandler(_actions[i]));
}
_handlers = new ArrayList<IHandlerActivation>();
}
public void updateActionBars() {
if (_htmlEditor == null) {
for (int i = 0; i < _actions.length; i++) {
_actions[i].setEnabled(false);
}
} else {
for (int i = 0; i < _actions.length; i++) {
_actions[i].setEnabled(true);
_actions[i].setChecked(_actions[i].getMode() == _htmlEditor
.getDesignerMode());
}
}
}
/**
* @param editor
*/
public void setHTMLEditor(HTMLEditor editor)
{
if (_htmlEditor != editor)
{
if (_htmlEditor != null)
{
deactivateHandlers();
}
this._htmlEditor = editor;
if (_htmlEditor != null)
{
activateHandlers();
}
updateActionBars();
}
}
private void deactivateHandlers()
{
final IHandlerService service = (IHandlerService) _htmlEditor.getSite()
.getService(IHandlerService.class);
if (service != null)
{
for (final IHandlerActivation activation : _handlers)
{
service.deactivateHandler(activation);
}
}
_handlers.clear();
}
private void activateHandlers()
{
final IHandlerService service = (IHandlerService) _htmlEditor.getSite()
.getService(IHandlerService.class);
for (int i = 0; i < _actions.length; i++)
{
_handlers.add(service.activateHandler(_actions[i].getId(), _actionHandlers.get(i)));
}
}
/**
* @param actionBars
*/
public void fillActionBars(IActionBars actionBars)
{
IToolBarManager toolbar = actionBars.getToolBarManager();
for (int i = 0; i < _actions.length; i++)
{
toolbar.add(_actions[i]);
}
toolbar.add(new Separator());
}
/**
* dispose the action
*/
public void dispose()
{
for (final ActionHandler actionHandler : _actionHandlers)
{
actionHandler.dispose();
}
}
}