blob: efb3c23042402f0e1a58e63fd8e12d4eb7fb741d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.welcome.internal.webbrowser;
import org.eclipse.jface.action.Action;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.ui.*;
import org.eclipse.ui.IWorkbenchActionConstants;
/**
*
*/
public class GlobalActionHandler {
private boolean active = false;
private Combo combo;
private ControlListener controlListener;
private class ControlListener implements Listener {
public void handleEvent(Event event) {
switch (event.type) {
case SWT.Activate :
active = true;
updateActionsEnableState();
break;
case SWT.Deactivate :
active = false;
updateActionsEnableState();
break;
default :
break;
}
}
}
private class GlobalAction extends Action {
private String id;
public GlobalAction(String id) {
this.id = id;
}
public void run() {
doGlobalAction(id);
}
}
private GlobalAction cutAction;
private GlobalAction copyAction;
private GlobalAction pasteAction;
private GlobalAction deleteAction;
private GlobalAction selectAllAction;
private GlobalAction undoAction;
public GlobalActionHandler(IActionBars actionBar, Combo combo) {
this.combo = combo;
makeActions();
actionBar.setGlobalActionHandler(
IWorkbenchActionConstants.CUT,
cutAction);
actionBar.setGlobalActionHandler(
IWorkbenchActionConstants.COPY,
copyAction);
actionBar.setGlobalActionHandler(
IWorkbenchActionConstants.PASTE,
pasteAction);
actionBar.setGlobalActionHandler(
IWorkbenchActionConstants.DELETE,
deleteAction);
actionBar.setGlobalActionHandler(
IWorkbenchActionConstants.SELECT_ALL,
selectAllAction);
actionBar.setGlobalActionHandler(
IWorkbenchActionConstants.UNDO,
undoAction);
controlListener = new ControlListener();
combo.addListener(SWT.Activate, controlListener);
combo.addListener(SWT.Deactivate, controlListener);
}
public void dispose() {
if (!combo.isDisposed()) {
combo.removeListener(SWT.Activate, controlListener);
combo.removeListener(SWT.Deactivate, controlListener);
}
}
private void makeActions() {
cutAction = new GlobalAction(IWorkbenchActionConstants.CUT);
copyAction = new GlobalAction(IWorkbenchActionConstants.COPY);
pasteAction = new GlobalAction(IWorkbenchActionConstants.PASTE);
deleteAction = new GlobalAction(IWorkbenchActionConstants.DELETE);
selectAllAction =
new GlobalAction(IWorkbenchActionConstants.SELECT_ALL);
undoAction = new GlobalAction(IWorkbenchActionConstants.UNDO);
}
private void updateActionsEnableState() {
if (!active) {
cutAction.setEnabled(false);
copyAction.setEnabled(false);
pasteAction.setEnabled(false);
deleteAction.setEnabled(false);
selectAllAction.setEnabled(false);
undoAction.setEnabled(false);
} else {
cutAction.setEnabled(true);
copyAction.setEnabled(true);
pasteAction.setEnabled(true);
deleteAction.setEnabled(true);
selectAllAction.setEnabled(true);
undoAction.setEnabled(true);
}
}
private void doGlobalAction(String id) {
if (id.equals(IWorkbenchActionConstants.CUT))
combo.cut();
else if (id.equals(IWorkbenchActionConstants.COPY))
combo.copy();
else if (id.equals(IWorkbenchActionConstants.PASTE))
combo.paste();
else if (id.equals(IWorkbenchActionConstants.DELETE))
doDelete();
else if (id.equals(IWorkbenchActionConstants.SELECT_ALL))
doSelectAll();
}
private void doDelete() {
String text = combo.getText();
Point selection = combo.getSelection();
if (selection.x == selection.y)
return;
String left = text.substring(0, selection.x);
String right = text.substring(selection.y + 1);
combo.setText(left + right);
}
private void doSelectAll() {
String text = combo.getText();
Point newSelection = new Point(0, text.length());
combo.setSelection(newSelection);
}
}