blob: 4ad76784b22f71d75e17df88702904f52ccc4472 [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.ui.internal.commands;
import java.io.IOException;
import java.text.Collator;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.TreeSet;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.commands.ICategory;
import org.eclipse.ui.commands.ICommand;
import org.eclipse.ui.commands.IContextBinding;
import org.eclipse.ui.commands.IKeyConfiguration;
import org.eclipse.ui.contexts.IContext;
import org.eclipse.ui.contexts.IContextManager;
import org.eclipse.ui.contexts.IWorkbenchContextSupport;
import org.eclipse.ui.keys.KeySequence;
import org.eclipse.ui.keys.KeyStroke;
import org.eclipse.ui.internal.IPreferenceConstants;
import org.eclipse.ui.internal.Workbench;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.keys.KeySequenceText;
import org.eclipse.ui.internal.util.Util;
public class KeysPreferencePage
extends org.eclipse.jface.preference.PreferencePage
implements IWorkbenchPreferencePage {
private final static class CommandAssignment implements Comparable {
private String contextId;
private KeySequenceBindingNode.Assignment assignment;
private KeySequence keySequence;
public int compareTo(Object object) {
CommandAssignment castedObject = (CommandAssignment) object;
int compareTo = Util.compare(contextId, castedObject.contextId);
if (compareTo == 0) {
compareTo = Util.compare(keySequence, castedObject.keySequence);
if (compareTo == 0)
compareTo = Util.compare(assignment, castedObject.assignment);
}
return compareTo;
}
public boolean equals(Object object) {
if (!(object instanceof CommandAssignment))
return false;
CommandAssignment castedObject = (CommandAssignment) object;
boolean equals = true;
equals &= Util.equals(assignment, castedObject.assignment);
equals &= Util.equals(contextId, castedObject.contextId);
equals &= Util.equals(keySequence, castedObject.keySequence);
return equals;
}
}
private final static class KeySequenceAssignment implements Comparable {
private String contextId;
private KeySequenceBindingNode.Assignment assignment;
public int compareTo(Object object) {
KeySequenceAssignment castedObject = (KeySequenceAssignment) object;
int compareTo = Util.compare(contextId, castedObject.contextId);
if (compareTo == 0)
compareTo = Util.compare(assignment, castedObject.assignment);
return compareTo;
}
public boolean equals(Object object) {
if (!(object instanceof CommandAssignment))
return false;
KeySequenceAssignment castedObject = (KeySequenceAssignment) object;
boolean equals = true;
equals &= Util.equals(assignment, castedObject.assignment);
equals &= Util.equals(contextId, castedObject.contextId);
return equals;
}
}
private final static int DIFFERENCE_ADD = 0;
private final static int DIFFERENCE_CHANGE = 1;
private final static int DIFFERENCE_MINUS = 2;
private final static int DIFFERENCE_NONE = 3;
private final static Image IMAGE_BLANK = ImageFactory.getImage("blank"); //$NON-NLS-1$
private final static Image IMAGE_CHANGE = ImageFactory.getImage("change"); //$NON-NLS-1$
private final static Image IMAGE_MINUS = ImageFactory.getImage("minus"); //$NON-NLS-1$
private final static Image IMAGE_PLUS = ImageFactory.getImage("plus"); //$NON-NLS-1$
private final static ResourceBundle RESOURCE_BUNDLE =
ResourceBundle.getBundle(KeysPreferencePage.class.getName());
private final static RGB RGB_MINUS = new RGB(160, 160, 160);
private Map contextIdsByCommandId;
private Map contextIdsByUniqueName;
private IContextManager contextManager;
private Map contextUniqueNamesById;
private Map assignmentsByContextIdByKeySequence;
private Button buttonAdd;
private Button buttonAddKey;
private Button buttonRemove;
private Button buttonRestore;
private Map categoryIdsByUniqueName;
private Map categoryUniqueNamesById;
private Button checkBoxMultiKeyAssist;
private Combo comboContext;
private Combo comboCategory;
private Combo comboCommand;
private Combo comboKeyConfiguration;
private Set commandAssignments;
private Map commandIdsByCategoryId;
private Map commandIdsByUniqueName;
private CommandManager commandManager;
private Map commandUniqueNamesById;
private Group groupCommand;
private Group groupKeySequence;
private Map keyConfigurationIdsByUniqueName;
private Map keyConfigurationUniqueNamesById;
private Set keySequenceAssignments;
private Label labelContext;
private Label labelContextExtends;
private Label labelAssignmentsForCommand;
private Label labelAssignmentsForKeySequence;
private Label labelCategory;
private Label labelCommand;
private Label labelKeyConfiguration;
private Label labelKeyConfigurationExtends;
private Label labelKeySequence;
private Menu menuButtonAddKey;
private Table tableAssignmentsForCommand;
private Table tableAssignmentsForKeySequence;
private Text textKeySequence;
private KeySequenceText textKeySequenceManager;
private IntegerFieldEditor textMultiKeyAssistTime;
private SortedMap tree;
private IWorkbench workbench;
private void buildCommandAssignmentsTable() {
tableAssignmentsForCommand.removeAll();
for (Iterator iterator = commandAssignments.iterator(); iterator.hasNext();) {
CommandAssignment commandAssignment = (CommandAssignment) iterator.next();
KeySequenceBindingNode.Assignment assignment = commandAssignment.assignment;
KeySequence keySequence = commandAssignment.keySequence;
String commandString = null;
int difference = DIFFERENCE_NONE;
if (assignment.hasPreferenceCommandIdInFirstKeyConfiguration
|| assignment.hasPreferenceCommandIdInInheritedKeyConfiguration) {
String preferenceCommandId;
if (assignment.hasPreferenceCommandIdInFirstKeyConfiguration)
preferenceCommandId = assignment.preferenceCommandIdInFirstKeyConfiguration;
else
preferenceCommandId = assignment.preferenceCommandIdInInheritedKeyConfiguration;
if (assignment.hasPluginCommandIdInFirstKeyConfiguration
|| assignment.hasPluginCommandIdInInheritedKeyConfiguration) {
String pluginCommandId;
if (assignment.hasPluginCommandIdInFirstKeyConfiguration)
pluginCommandId = assignment.pluginCommandIdInFirstKeyConfiguration;
else
pluginCommandId = assignment.pluginCommandIdInInheritedKeyConfiguration;
if (preferenceCommandId != null) {
difference = DIFFERENCE_CHANGE;
commandString =
/* commandUniqueNamesById.get(preferenceCommandId) */
keySequence.format() + ""; //$NON-NLS-1$
} else {
difference = DIFFERENCE_MINUS;
commandString = /* "Unassigned" */
keySequence.format();
}
if (pluginCommandId != null)
commandString += " (was: " + commandUniqueNamesById.get(pluginCommandId) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
else
commandString += " (was: " + "Unassigned" + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
} else {
if (preferenceCommandId != null) {
difference = DIFFERENCE_ADD;
commandString =
/* commandUniqueNamesById.get(preferenceCommandId) */
keySequence.format() + ""; //$NON-NLS-1$
} else {
difference = DIFFERENCE_MINUS;
commandString = /* "Unassigned" */
keySequence.format();
}
}
} else {
String pluginCommandId;
if (assignment.hasPluginCommandIdInFirstKeyConfiguration)
pluginCommandId = assignment.pluginCommandIdInFirstKeyConfiguration;
else
pluginCommandId = assignment.pluginCommandIdInInheritedKeyConfiguration;
if (pluginCommandId != null) {
difference = DIFFERENCE_NONE;
commandString =
/* commandUniqueNamesById.get(preferenceCommandId) */
keySequence.format() + ""; //$NON-NLS-1$
} else {
difference = DIFFERENCE_MINUS;
commandString = /* "Unassigned" */
keySequence.format();
}
}
TableItem tableItem = new TableItem(tableAssignmentsForCommand, SWT.NULL);
switch (difference) {
case DIFFERENCE_ADD :
tableItem.setImage(0, IMAGE_PLUS);
break;
case DIFFERENCE_CHANGE :
tableItem.setImage(0, IMAGE_CHANGE);
break;
case DIFFERENCE_MINUS :
tableItem.setImage(0, IMAGE_MINUS);
break;
case DIFFERENCE_NONE :
tableItem.setImage(0, IMAGE_BLANK);
break;
}
String contextId = commandAssignment.contextId;
if (contextId == null)
tableItem.setText(1, Util.translateString(RESOURCE_BUNDLE, "general")); //$NON-NLS-1$
else
tableItem.setText(1, (String) contextUniqueNamesById.get(contextId)); //$NON-NLS-1$
tableItem.setText(2, commandString);
if (difference == DIFFERENCE_MINUS)
tableItem.setForeground(new Color(getShell().getDisplay(), RGB_MINUS));
}
}
private void buildKeySequenceAssignmentsTable() {
tableAssignmentsForKeySequence.removeAll();
for (Iterator iterator = keySequenceAssignments.iterator(); iterator.hasNext();) {
KeySequenceAssignment keySequenceAssignment = (KeySequenceAssignment) iterator.next();
KeySequenceBindingNode.Assignment assignment = keySequenceAssignment.assignment;
String commandString = null;
int difference = DIFFERENCE_NONE;
if (assignment.hasPreferenceCommandIdInFirstKeyConfiguration
|| assignment.hasPreferenceCommandIdInInheritedKeyConfiguration) {
String preferenceCommandId;
if (assignment.hasPreferenceCommandIdInFirstKeyConfiguration)
preferenceCommandId = assignment.preferenceCommandIdInFirstKeyConfiguration;
else
preferenceCommandId = assignment.preferenceCommandIdInInheritedKeyConfiguration;
if (assignment.hasPluginCommandIdInFirstKeyConfiguration
|| assignment.hasPluginCommandIdInInheritedKeyConfiguration) {
String pluginCommandId;
if (assignment.hasPluginCommandIdInFirstKeyConfiguration)
pluginCommandId = assignment.pluginCommandIdInFirstKeyConfiguration;
else
pluginCommandId = assignment.pluginCommandIdInInheritedKeyConfiguration;
if (preferenceCommandId != null) {
difference = DIFFERENCE_CHANGE;
commandString = commandUniqueNamesById.get(preferenceCommandId) + ""; //$NON-NLS-1$
} else {
difference = DIFFERENCE_MINUS;
commandString = "Unassigned"; //$NON-NLS-1$
}
if (pluginCommandId != null)
commandString += " (was: " + commandUniqueNamesById.get(pluginCommandId) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
else
commandString += " (was: " + "Unassigned" + ")"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
} else {
if (preferenceCommandId != null) {
difference = DIFFERENCE_ADD;
commandString = commandUniqueNamesById.get(preferenceCommandId) + ""; //$NON-NLS-1$
} else {
difference = DIFFERENCE_MINUS;
commandString = "Unassigned"; //$NON-NLS-1$
}
}
} else {
String pluginCommandId;
if (assignment.hasPluginCommandIdInFirstKeyConfiguration)
pluginCommandId = assignment.pluginCommandIdInFirstKeyConfiguration;
else
pluginCommandId = assignment.pluginCommandIdInInheritedKeyConfiguration;
if (pluginCommandId != null) {
difference = DIFFERENCE_NONE;
commandString = commandUniqueNamesById.get(pluginCommandId) + ""; //$NON-NLS-1$
} else {
difference = DIFFERENCE_MINUS;
commandString = "Unassigned"; //$NON-NLS-1$
}
}
TableItem tableItem = new TableItem(tableAssignmentsForKeySequence, SWT.NULL);
switch (difference) {
case DIFFERENCE_ADD :
tableItem.setImage(0, IMAGE_PLUS);
break;
case DIFFERENCE_CHANGE :
tableItem.setImage(0, IMAGE_CHANGE);
break;
case DIFFERENCE_MINUS :
tableItem.setImage(0, IMAGE_MINUS);
break;
case DIFFERENCE_NONE :
tableItem.setImage(0, IMAGE_BLANK);
break;
}
String contextId = keySequenceAssignment.contextId;
if (contextId == null)
tableItem.setText(1, Util.translateString(RESOURCE_BUNDLE, "general")); //$NON-NLS-1$
else
tableItem.setText(1, (String) contextUniqueNamesById.get(contextId)); //$NON-NLS-1$
tableItem.setText(2, commandString);
if (difference == DIFFERENCE_MINUS)
tableItem.setForeground(new Color(getShell().getDisplay(), RGB_MINUS));
}
}
private Composite createAdvancedTab(TabFolder parent) {
GridData gridData = null;
// The composite for this tab.
final Composite composite = new Composite(parent, SWT.NULL);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
// The multi key assit button.
checkBoxMultiKeyAssist = new Button(composite, SWT.CHECK);
checkBoxMultiKeyAssist.setText(Util.translateString(RESOURCE_BUNDLE, "checkBoxMultiKeyAssist.Text")); //$NON-NLS-1$
checkBoxMultiKeyAssist.setToolTipText(Util.translateString(RESOURCE_BUNDLE, "checkBoxMultiKeyAssist.ToolTipText")); //$NON-NLS-1$
checkBoxMultiKeyAssist.setFont(composite.getFont());
checkBoxMultiKeyAssist.setSelection(
getPreferenceStore().getBoolean(IPreferenceConstants.MULTI_KEY_ASSIST));
gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = 2;
checkBoxMultiKeyAssist.setLayoutData(gridData);
// The multi key assist time.
final IPreferenceStore store = WorkbenchPlugin.getDefault().getPreferenceStore();
textMultiKeyAssistTime = new IntegerFieldEditor(IPreferenceConstants.MULTI_KEY_ASSIST_TIME, Util.translateString(RESOURCE_BUNDLE, "textMultiKeyAssistTime.Text"), composite); //$NON-NLS-1$
textMultiKeyAssistTime.setPreferenceStore(store);
textMultiKeyAssistTime.setPreferencePage(this);
textMultiKeyAssistTime.setTextLimit(2);
textMultiKeyAssistTime.setErrorMessage(Util.translateString(RESOURCE_BUNDLE, "textMultiKeyAssistTime.ErrorMessage")); //$NON-NLS-1$
textMultiKeyAssistTime.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
textMultiKeyAssistTime.setValidRange(0, Integer.MAX_VALUE);
textMultiKeyAssistTime.setStringValue(
Integer.toString(store.getInt(IPreferenceConstants.MULTI_KEY_ASSIST_TIME)));
textMultiKeyAssistTime.setPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(FieldEditor.IS_VALID))
setValid(textMultiKeyAssistTime.isValid());
}
});
// Conigure the layout of the composite.
final GridLayout gridLayout = new GridLayout();
gridLayout.marginHeight = 5;
gridLayout.marginWidth = 5;
gridLayout.numColumns = 2;
composite.setLayout(gridLayout);
return composite;
}
private Composite createBasicTab(TabFolder parent) {
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout());
GridData gridData = new GridData(GridData.FILL_BOTH);
composite.setLayoutData(gridData);
Composite compositeKeyConfiguration = new Composite(composite, SWT.NULL);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
compositeKeyConfiguration.setLayout(gridLayout);
gridData = new GridData(GridData.FILL_HORIZONTAL);
compositeKeyConfiguration.setLayoutData(gridData);
labelKeyConfiguration = new Label(compositeKeyConfiguration, SWT.LEFT);
labelKeyConfiguration.setText(Util.translateString(RESOURCE_BUNDLE, "labelKeyConfiguration")); //$NON-NLS-1$
comboKeyConfiguration = new Combo(compositeKeyConfiguration, SWT.READ_ONLY);
gridData = new GridData();
gridData.widthHint = 200;
comboKeyConfiguration.setLayoutData(gridData);
comboKeyConfiguration.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
selectedComboKeyConfiguration();
}
});
labelKeyConfigurationExtends = new Label(compositeKeyConfiguration, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
labelKeyConfigurationExtends.setLayoutData(gridData);
Control spacer = new Composite(composite, SWT.NULL);
gridData = new GridData();
gridData.heightHint = 10;
gridData.widthHint = 10;
spacer.setLayoutData(gridData);
groupCommand = new Group(composite, SWT.SHADOW_NONE);
gridLayout = new GridLayout();
gridLayout.numColumns = 3;
groupCommand.setLayout(gridLayout);
gridData = new GridData(GridData.FILL_HORIZONTAL);
groupCommand.setLayoutData(gridData);
groupCommand.setText(Util.translateString(RESOURCE_BUNDLE, "groupCommand")); //$NON-NLS-1$
labelCategory = new Label(groupCommand, SWT.LEFT);
gridData = new GridData();
labelCategory.setLayoutData(gridData);
labelCategory.setText(Util.translateString(RESOURCE_BUNDLE, "labelCategory")); //$NON-NLS-1$
comboCategory = new Combo(groupCommand, SWT.READ_ONLY);
gridData = new GridData();
gridData.horizontalSpan = 2;
gridData.widthHint = 200;
comboCategory.setLayoutData(gridData);
comboCategory.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
selectedComboCategory();
}
});
labelCommand = new Label(groupCommand, SWT.LEFT);
gridData = new GridData();
labelCommand.setLayoutData(gridData);
labelCommand.setText(Util.translateString(RESOURCE_BUNDLE, "labelCommand")); //$NON-NLS-1$
comboCommand = new Combo(groupCommand, SWT.READ_ONLY);
gridData = new GridData();
gridData.horizontalSpan = 2;
gridData.widthHint = 300;
comboCommand.setLayoutData(gridData);
comboCommand.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
selectedComboCommand();
}
});
labelAssignmentsForCommand = new Label(groupCommand, SWT.LEFT);
gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
labelAssignmentsForCommand.setLayoutData(gridData);
labelAssignmentsForCommand.setText(Util.translateString(RESOURCE_BUNDLE, "labelAssignmentsForCommand")); //$NON-NLS-1$
tableAssignmentsForCommand =
new Table(groupCommand, SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
tableAssignmentsForCommand.setHeaderVisible(true);
gridData = new GridData(GridData.FILL_BOTH);
gridData.heightHint = 60;
gridData.horizontalSpan = 2;
gridData.widthHint = "carbon".equals(SWT.getPlatform()) ? 520 : 420; //$NON-NLS-1$
tableAssignmentsForCommand.setLayoutData(gridData);
TableColumn tableColumnDelta = new TableColumn(tableAssignmentsForCommand, SWT.NULL, 0);
tableColumnDelta.setResizable(false);
tableColumnDelta.setText(Util.ZERO_LENGTH_STRING);
tableColumnDelta.setWidth(20);
TableColumn tableColumnContext = new TableColumn(tableAssignmentsForCommand, SWT.NULL, 1);
tableColumnContext.setResizable(true);
tableColumnContext.setText(Util.translateString(RESOURCE_BUNDLE, "tableColumnContext")); //$NON-NLS-1$
tableColumnContext.pack();
tableColumnContext.setWidth("carbon".equals(SWT.getPlatform()) ? 110 : 100); //$NON-NLS-1$
TableColumn tableColumnKeySequence =
new TableColumn(tableAssignmentsForCommand, SWT.NULL, 2);
tableColumnKeySequence.setResizable(true);
tableColumnKeySequence.setText(Util.translateString(RESOURCE_BUNDLE, "tableColumnKeySequence")); //$NON-NLS-1$
tableColumnKeySequence.pack();
tableColumnKeySequence.setWidth(300);
tableAssignmentsForCommand.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent mouseEvent) {
doubleClickedAssignmentsForCommand();
}
});
tableAssignmentsForCommand.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
selectedTableAssignmentsForCommand();
}
});
groupKeySequence = new Group(composite, SWT.SHADOW_NONE);
gridLayout = new GridLayout();
gridLayout.numColumns = 4;
groupKeySequence.setLayout(gridLayout);
gridData = new GridData(GridData.FILL_HORIZONTAL);
groupKeySequence.setLayoutData(gridData);
groupKeySequence.setText(Util.translateString(RESOURCE_BUNDLE, "groupKeySequence")); //$NON-NLS-1$
labelKeySequence = new Label(groupKeySequence, SWT.LEFT);
gridData = new GridData();
labelKeySequence.setLayoutData(gridData);
labelKeySequence.setText(Util.translateString(RESOURCE_BUNDLE, "labelKeySequence")); //$NON-NLS-1$
// The text widget into which the key strokes will be entered.
textKeySequence = new Text(groupKeySequence, SWT.BORDER);
// On MacOS X, this font will be changed by KeySequenceText
textKeySequence.setFont(groupKeySequence.getFont());
gridData = new GridData();
gridData.horizontalSpan = 2;
gridData.widthHint = 300;
textKeySequence.setLayoutData(gridData);
textKeySequence.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
modifiedTextKeySequence();
}
});
// The manager for the key sequence text widget.
textKeySequenceManager = new KeySequenceText(textKeySequence);
textKeySequenceManager.setKeyStrokeLimit(4);
// Button for adding trapped key strokes
buttonAddKey = new Button(groupKeySequence, SWT.LEFT | SWT.ARROW);
buttonAddKey.setToolTipText(Util.translateString(RESOURCE_BUNDLE, "buttonAddKey.ToolTipText")); //$NON-NLS-1$
gridData = new GridData();
gridData.heightHint = comboCategory.getTextHeight();
buttonAddKey.setLayoutData(gridData);
buttonAddKey.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
Point buttonLocation = buttonAddKey.getLocation();
buttonLocation = groupKeySequence.toDisplay(buttonLocation.x, buttonLocation.y);
Point buttonSize = buttonAddKey.getSize();
menuButtonAddKey.setLocation(buttonLocation.x, buttonLocation.y + buttonSize.y);
menuButtonAddKey.setVisible(true);
}
});
// Arrow buttons aren't normally added to the tab list. Let's fix that.
Control[] tabStops = groupKeySequence.getTabList();
ArrayList newTabStops = new ArrayList();
for (int i = 0; i < tabStops.length; i++) {
Control tabStop = tabStops[i];
newTabStops.add(tabStop);
if (textKeySequence.equals(tabStop)) {
newTabStops.add(buttonAddKey);
}
}
Control[] newTabStopArray =
(Control[]) newTabStops.toArray(new Control[newTabStops.size()]);
groupKeySequence.setTabList(newTabStopArray);
// Construct the menu to attach to the above button.
menuButtonAddKey = new Menu(buttonAddKey);
Iterator trappedKeyItr = KeySequenceText.TRAPPED_KEYS.iterator();
while (trappedKeyItr.hasNext()) {
final KeyStroke trappedKey = (KeyStroke) trappedKeyItr.next();
MenuItem menuItem = new MenuItem(menuButtonAddKey, SWT.PUSH);
menuItem.setText(trappedKey.format());
menuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
textKeySequenceManager.insert(trappedKey);
// TODO Focus selects everything.
//textKeySequence.setFocus();
}
});
}
labelAssignmentsForKeySequence = new Label(groupKeySequence, SWT.LEFT);
gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
labelAssignmentsForKeySequence.setLayoutData(gridData);
labelAssignmentsForKeySequence.setText(Util.translateString(RESOURCE_BUNDLE, "labelAssignmentsForKeySequence")); //$NON-NLS-1$
tableAssignmentsForKeySequence =
new Table(
groupKeySequence,
SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
tableAssignmentsForKeySequence.setHeaderVisible(true);
gridData = new GridData(GridData.FILL_BOTH);
gridData.heightHint = 60;
gridData.horizontalSpan = 3;
gridData.widthHint = "carbon".equals(SWT.getPlatform()) ? 520 : 420; //$NON-NLS-1$
tableAssignmentsForKeySequence.setLayoutData(gridData);
tableColumnDelta = new TableColumn(tableAssignmentsForKeySequence, SWT.NULL, 0);
tableColumnDelta.setResizable(false);
tableColumnDelta.setText(Util.ZERO_LENGTH_STRING);
tableColumnDelta.setWidth(20);
tableColumnContext = new TableColumn(tableAssignmentsForKeySequence, SWT.NULL, 1);
tableColumnContext.setResizable(true);
tableColumnContext.setText(Util.translateString(RESOURCE_BUNDLE, "tableColumnContext")); //$NON-NLS-1$
tableColumnContext.pack();
tableColumnContext.setWidth("carbon".equals(SWT.getPlatform()) ? 110 : 100); //$NON-NLS-1$
TableColumn tableColumnCommand =
new TableColumn(tableAssignmentsForKeySequence, SWT.NULL, 2);
tableColumnCommand.setResizable(true);
tableColumnCommand.setText(Util.translateString(RESOURCE_BUNDLE, "tableColumnCommand")); //$NON-NLS-1$
tableColumnCommand.pack();
tableColumnCommand.setWidth(300);
tableAssignmentsForKeySequence.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent mouseEvent) {
doubleClickedTableAssignmentsForKeySequence();
}
});
tableAssignmentsForKeySequence.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
selectedTableAssignmentsForKeySequence();
}
});
Composite compositeContext = new Composite(composite, SWT.NULL);
gridLayout = new GridLayout();
gridLayout.numColumns = 3;
compositeContext.setLayout(gridLayout);
gridData = new GridData(GridData.FILL_HORIZONTAL);
compositeContext.setLayoutData(gridData);
labelContext = new Label(compositeContext, SWT.LEFT);
labelContext.setText(Util.translateString(RESOURCE_BUNDLE, "labelContext")); //$NON-NLS-1$
comboContext = new Combo(compositeContext, SWT.READ_ONLY);
gridData = new GridData();
gridData.widthHint = 200;
comboContext.setLayoutData(gridData);
comboContext.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
selectedComboContext();
}
});
labelContextExtends = new Label(compositeContext, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
labelContextExtends.setLayoutData(gridData);
Composite compositeButton = new Composite(composite, SWT.NULL);
gridLayout = new GridLayout();
gridLayout.marginHeight = 20;
gridLayout.marginWidth = 0;
gridLayout.numColumns = 3;
compositeButton.setLayout(gridLayout);
gridData = new GridData();
compositeButton.setLayoutData(gridData);
buttonAdd = new Button(compositeButton, SWT.CENTER | SWT.PUSH);
gridData = new GridData();
gridData.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT);
int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
buttonAdd.setText(Util.translateString(RESOURCE_BUNDLE, "buttonAdd")); //$NON-NLS-1$
gridData.widthHint =
Math.max(widthHint, buttonAdd.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x) + 5;
buttonAdd.setLayoutData(gridData);
buttonAdd.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
selectedButtonAdd();
}
});
buttonRemove = new Button(compositeButton, SWT.CENTER | SWT.PUSH);
gridData = new GridData();
gridData.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT);
widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
buttonRemove.setText(Util.translateString(RESOURCE_BUNDLE, "buttonRemove")); //$NON-NLS-1$
gridData.widthHint =
Math.max(widthHint, buttonRemove.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x) + 5;
buttonRemove.setLayoutData(gridData);
buttonRemove.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
selectedButtonRemove();
}
});
buttonRestore = new Button(compositeButton, SWT.CENTER | SWT.PUSH);
gridData = new GridData();
gridData.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT);
widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
buttonRestore.setText(Util.translateString(RESOURCE_BUNDLE, "buttonRestore")); //$NON-NLS-1$
gridData.widthHint =
Math.max(widthHint, buttonRestore.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x) + 5;
buttonRestore.setLayoutData(gridData);
buttonRestore.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selectionEvent) {
selectedButtonRestore();
}
});
// TODO WorkbenchHelp.setHelp(parent,
// IHelpContextIds.WORKBENCH_KEY_PREFERENCE_PAGE);
applyDialogFont(composite);
return composite;
}
protected Control createContents(Composite parent) {
final TabFolder tabFolder = new TabFolder(parent, SWT.BORDER);
// Basic tab
final TabItem basicTab = new TabItem(tabFolder, SWT.NULL);
basicTab.setText(Util.translateString(RESOURCE_BUNDLE, "basicTab.Text")); //$NON-NLS-1$
basicTab.setToolTipText(Util.translateString(RESOURCE_BUNDLE, "basicTab.ToolTipText")); //$NON-NLS-1$
basicTab.setControl(createBasicTab(tabFolder));
// Advanced tab
final TabItem advancedTab = new TabItem(tabFolder, SWT.NULL);
advancedTab.setText(Util.translateString(RESOURCE_BUNDLE, "advancedTab.Text")); //$NON-NLS-1$
advancedTab.setToolTipText(Util.translateString(RESOURCE_BUNDLE, "advancedTab.ToolTipText")); //$NON-NLS-1$
advancedTab.setControl(createAdvancedTab(tabFolder));
return tabFolder;
}
protected IPreferenceStore doGetPreferenceStore() {
return PlatformUI.getWorkbench().getPreferenceStore();
}
private void doubleClickedAssignmentsForCommand() {
update();
}
private void doubleClickedTableAssignmentsForKeySequence() {
update();
}
private String getContextId() {
return comboContext.getSelectionIndex() > 0
? (String) contextIdsByUniqueName.get(comboContext.getText())
: null;
}
private String getCategoryId() {
return !commandIdsByCategoryId.containsKey(null)
|| comboCategory.getSelectionIndex() > 0
? (String) categoryIdsByUniqueName.get(comboCategory.getText())
: null;
}
private String getCommandId() {
return (String) commandIdsByUniqueName.get(comboCommand.getText());
}
private String getKeyConfigurationId() {
return comboKeyConfiguration.getSelectionIndex() >= 0
? (String) keyConfigurationIdsByUniqueName.get(comboKeyConfiguration.getText())
: null;
}
private KeySequence getKeySequence() {
return textKeySequenceManager.getKeySequence();
}
public void init(IWorkbench workbench) {
this.workbench = workbench;
IWorkbenchContextSupport workbenchContextSupport = (IWorkbenchContextSupport) workbench.getAdapter(IWorkbenchContextSupport.class);
contextManager = workbenchContextSupport.getContextManager();
// TODO remove blind cast
commandManager = (CommandManager) workbench.getCommandManager();
commandAssignments = new TreeSet();
keySequenceAssignments = new TreeSet();
}
private void modifiedTextKeySequence() {
update();
}
protected void performDefaults() {
String activeKeyConfigurationId = getKeyConfigurationId();
List preferenceKeySequenceBindingDefinitions = new ArrayList();
KeySequenceBindingNode.getKeySequenceBindingDefinitions(
tree,
KeySequence.getInstance(),
0,
preferenceKeySequenceBindingDefinitions);
if (activeKeyConfigurationId != null
|| !preferenceKeySequenceBindingDefinitions.isEmpty()) {
MessageBox restoreDefaultsMessageBox =
new MessageBox(
getShell(),
SWT.YES | SWT.NO | SWT.ICON_WARNING | SWT.APPLICATION_MODAL);
restoreDefaultsMessageBox.setText(Util.translateString(RESOURCE_BUNDLE, "restoreDefaultsMessageBoxText")); //$NON-NLS-1$
restoreDefaultsMessageBox.setMessage(Util.translateString(RESOURCE_BUNDLE, "restoreDefaultsMessageBoxMessage")); //$NON-NLS-1$
if (restoreDefaultsMessageBox.open() == SWT.YES) {
setKeyConfigurationId(null);
Iterator iterator = preferenceKeySequenceBindingDefinitions.iterator();
while (iterator.hasNext()) {
KeySequenceBindingDefinition keySequenceBindingDefinition =
(KeySequenceBindingDefinition) iterator.next();
KeySequenceBindingNode.remove(
tree,
keySequenceBindingDefinition.getKeySequence(),
keySequenceBindingDefinition.getContextId(),
keySequenceBindingDefinition.getKeyConfigurationId(),
0,
keySequenceBindingDefinition.getPlatform(),
keySequenceBindingDefinition.getLocale(),
keySequenceBindingDefinition.getCommandId());
}
}
}
// Set the defaults on the advanced tab.
IPreferenceStore store = getPreferenceStore();
checkBoxMultiKeyAssist.setSelection(
store.getDefaultBoolean(IPreferenceConstants.MULTI_KEY_ASSIST));
textMultiKeyAssistTime.setStringValue(
Integer.toString(store.getDefaultInt(IPreferenceConstants.MULTI_KEY_ASSIST_TIME)));
update();
}
public boolean performOk() {
List preferenceActiveKeyConfigurationDefinitions = new ArrayList();
preferenceActiveKeyConfigurationDefinitions.add(
new ActiveKeyConfigurationDefinition(getKeyConfigurationId(), null));
PreferenceCommandRegistry preferenceCommandRegistry =
(PreferenceCommandRegistry) commandManager.getMutableCommandRegistry();
preferenceCommandRegistry.setActiveKeyConfigurationDefinitions(
preferenceActiveKeyConfigurationDefinitions);
List preferenceKeySequenceBindingDefinitions = new ArrayList();
KeySequenceBindingNode.getKeySequenceBindingDefinitions(
tree,
KeySequence.getInstance(),
0,
preferenceKeySequenceBindingDefinitions);
preferenceCommandRegistry.setKeySequenceBindingDefinitions(
preferenceKeySequenceBindingDefinitions);
try {
preferenceCommandRegistry.save();
} catch (IOException eIO) {
// Do nothing
}
// Save the advanced settings.
IPreferenceStore store = getPreferenceStore();
store.setValue(
IPreferenceConstants.MULTI_KEY_ASSIST,
checkBoxMultiKeyAssist.getSelection());
store.setValue(
IPreferenceConstants.MULTI_KEY_ASSIST_TIME,
textMultiKeyAssistTime.getIntValue());
// TODO remove the dependancy on Workbench. have Workbench rely on
// events from CommandManager.
if (workbench instanceof Workbench) {
((Workbench) workbench).workbenchCommandsAndContexts.updateActiveContextIds();
((Workbench) workbench)
.workbenchCommandsAndContexts
.updateActiveWorkbenchWindowMenuManager(true);
}
return super.performOk();
}
private void selectAssignmentForCommand(String contextId) {
if (tableAssignmentsForCommand.getSelectionCount() > 1)
tableAssignmentsForCommand.deselectAll();
int i = 0;
int selection = -1;
KeySequence keySequence = getKeySequence();
for (Iterator iterator = commandAssignments.iterator(); iterator.hasNext(); i++) {
CommandAssignment commandAssignment = (CommandAssignment) iterator.next();
if (Util.equals(contextId, commandAssignment.contextId)
&& Util.equals(keySequence, commandAssignment.keySequence)) {
selection = i;
break;
}
}
if (selection != tableAssignmentsForCommand.getSelectionIndex()) {
if (selection == -1 || selection >= tableAssignmentsForCommand.getItemCount())
tableAssignmentsForCommand.deselectAll();
else
tableAssignmentsForCommand.select(selection);
}
}
private void selectAssignmentForKeySequence(String contextId) {
if (tableAssignmentsForKeySequence.getSelectionCount() > 1)
tableAssignmentsForKeySequence.deselectAll();
int i = 0;
int selection = -1;
for (Iterator iterator = keySequenceAssignments.iterator(); iterator.hasNext(); i++) {
KeySequenceAssignment keySequenceAssignment = (KeySequenceAssignment) iterator.next();
if (Util.equals(contextId, keySequenceAssignment.contextId)) {
selection = i;
break;
}
}
if (selection != tableAssignmentsForKeySequence.getSelectionIndex()) {
if (selection == -1 || selection >= tableAssignmentsForKeySequence.getItemCount())
tableAssignmentsForKeySequence.deselectAll();
else
tableAssignmentsForKeySequence.select(selection);
}
}
private void selectedButtonAdd() {
String commandId = getCommandId();
String contextId = getContextId();
String keyConfigurationId = getKeyConfigurationId();
KeySequence keySequence = getKeySequence();
KeySequenceBindingNode.remove(
tree,
keySequence,
contextId,
keyConfigurationId,
0,
null,
null);
KeySequenceBindingNode.add(
tree,
keySequence,
contextId,
keyConfigurationId,
0,
null,
null,
commandId);
List preferenceKeySequenceBindingDefinitions = new ArrayList();
KeySequenceBindingNode.getKeySequenceBindingDefinitions(
tree,
KeySequence.getInstance(),
0,
preferenceKeySequenceBindingDefinitions);
update();
}
private void selectedButtonRemove() {
String contextId = getContextId();
String keyConfigurationId = getKeyConfigurationId();
KeySequence keySequence = getKeySequence();
KeySequenceBindingNode.remove(
tree,
keySequence,
contextId,
keyConfigurationId,
0,
null,
null);
KeySequenceBindingNode.add(
tree,
keySequence,
contextId,
keyConfigurationId,
0,
null,
null,
null);
List preferenceKeySequenceBindingDefinitions = new ArrayList();
KeySequenceBindingNode.getKeySequenceBindingDefinitions(
tree,
KeySequence.getInstance(),
0,
preferenceKeySequenceBindingDefinitions);
update();
}
private void selectedButtonRestore() {
String contextId = getContextId();
String keyConfigurationId = getKeyConfigurationId();
KeySequence keySequence = getKeySequence();
KeySequenceBindingNode.remove(
tree,
keySequence,
contextId,
keyConfigurationId,
0,
null,
null);
List preferenceKeySequenceBindingDefinitions = new ArrayList();
KeySequenceBindingNode.getKeySequenceBindingDefinitions(
tree,
KeySequence.getInstance(),
0,
preferenceKeySequenceBindingDefinitions);
update();
}
private void selectedComboContext() {
update();
}
private void selectedComboCategory() {
update();
}
private void selectedComboCommand() {
update();
}
private void selectedComboKeyConfiguration() {
update();
}
private void selectedTableAssignmentsForCommand() {
int selection = tableAssignmentsForCommand.getSelectionIndex();
List commandAssignmentsAsList = new ArrayList(commandAssignments);
if (selection >= 0
&& selection < commandAssignmentsAsList.size()
&& tableAssignmentsForCommand.getSelectionCount() == 1) {
CommandAssignment commandAssignment =
(CommandAssignment) commandAssignmentsAsList.get(selection);
String contextId = commandAssignment.contextId;
KeySequence keySequence = commandAssignment.keySequence;
setContextId(contextId);
setKeySequence(keySequence);
}
update();
}
private void selectedTableAssignmentsForKeySequence() {
int selection = tableAssignmentsForKeySequence.getSelectionIndex();
List keySequenceAssignmentsAsList = new ArrayList(keySequenceAssignments);
if (selection >= 0
&& selection < keySequenceAssignmentsAsList.size()
&& tableAssignmentsForKeySequence.getSelectionCount() == 1) {
KeySequenceAssignment keySequenceAssignment =
(KeySequenceAssignment) keySequenceAssignmentsAsList.get(selection);
String contextId = keySequenceAssignment.contextId;
setContextId(contextId);
}
update();
}
private void setContextsForCommand() {
String commandId = getCommandId();
String contextId = getContextId();
Set contextIds = (Set) contextIdsByCommandId.get(commandId);
Map contextIdsByUniqueName = new HashMap(this.contextIdsByUniqueName);
// TODO for context bound commands, this code retains only those
// contexts explictly bound. what about assigning key bindings to
// implicit descendant contexts?
if (contextIds != null)
contextIdsByUniqueName.values().retainAll(contextIds);
List contextNames = new ArrayList(contextIdsByUniqueName.keySet());
Collections.sort(contextNames, Collator.getInstance());
if (contextIds == null)
contextNames.add(0, Util.translateString(RESOURCE_BUNDLE, "general")); //$NON-NLS-1$
comboContext.setItems((String[]) contextNames.toArray(new String[contextNames.size()]));
setContextId(contextId);
if (comboContext.getSelectionIndex() == -1 && !contextNames.isEmpty())
comboContext.select(0);
}
private void setContextId(String contextId) {
comboContext.clearSelection();
comboContext.deselectAll();
String contextUniqueName = (String) contextUniqueNamesById.get(contextId);
if (contextUniqueName != null) {
String items[] = comboContext.getItems();
for (int i = 1; i < items.length; i++)
if (contextUniqueName.equals(items[i])) {
comboContext.select(i);
break;
}
} else
comboContext.select(0);
}
private void setAssignmentsForCommand() {
commandAssignments.clear();
String commandId = getCommandId();
for (Iterator iterator = assignmentsByContextIdByKeySequence.entrySet().iterator();
iterator.hasNext();
) {
Map.Entry entry = (Map.Entry) iterator.next();
KeySequence keySequence = (KeySequence) entry.getKey();
Map assignmentsByContextId = (Map) entry.getValue();
if (assignmentsByContextId != null)
for (Iterator iterator2 = assignmentsByContextId.entrySet().iterator();
iterator2.hasNext();
) {
Map.Entry entry2 = (Map.Entry) iterator2.next();
CommandAssignment commandAssignment = new CommandAssignment();
commandAssignment.assignment =
(KeySequenceBindingNode.Assignment) entry2.getValue();
commandAssignment.contextId = (String) entry2.getKey();
commandAssignment.keySequence = keySequence;
if (commandAssignment.assignment.contains(commandId))
commandAssignments.add(commandAssignment);
}
}
buildCommandAssignmentsTable();
}
private void setAssignmentsForKeySequence() {
keySequenceAssignments.clear();
KeySequence keySequence = getKeySequence();
Map assignmentsByContextId = (Map) assignmentsByContextIdByKeySequence.get(keySequence);
if (assignmentsByContextId != null)
for (Iterator iterator = assignmentsByContextId.entrySet().iterator();
iterator.hasNext();
) {
Map.Entry entry = (Map.Entry) iterator.next();
KeySequenceAssignment keySequenceAssignment = new KeySequenceAssignment();
keySequenceAssignment.assignment =
(KeySequenceBindingNode.Assignment) entry.getValue();
keySequenceAssignment.contextId = (String) entry.getKey();
keySequenceAssignments.add(keySequenceAssignment);
}
buildKeySequenceAssignmentsTable();
}
private void setCommandId(String commandId) {
comboCommand.clearSelection();
comboCommand.deselectAll();
String commandUniqueName = (String) commandUniqueNamesById.get(commandId);
if (commandUniqueName != null) {
String items[] = comboCommand.getItems();
for (int i = 0; i < items.length; i++)
if (commandUniqueName.equals(items[i])) {
comboCommand.select(i);
break;
}
}
}
private void setCommandsForCategory() {
String categoryId = getCategoryId();
String commandId = getCommandId();
Set commandIds = (Set) commandIdsByCategoryId.get(categoryId);
Map commandIdsByUniqueName = new HashMap(this.commandIdsByUniqueName);
commandIdsByUniqueName.values().retainAll(commandIds);
List commandNames = new ArrayList(commandIdsByUniqueName.keySet());
Collections.sort(commandNames, Collator.getInstance());
comboCommand.setItems((String[]) commandNames.toArray(new String[commandNames.size()]));
setCommandId(commandId);
if (comboCommand.getSelectionIndex() == -1 && !commandNames.isEmpty())
comboCommand.select(0);
}
private void setKeyConfigurationId(String keyConfigurationId) {
comboKeyConfiguration.clearSelection();
comboKeyConfiguration.deselectAll();
String keyConfigurationUniqueName =
(String) keyConfigurationUniqueNamesById.get(keyConfigurationId);
if (keyConfigurationUniqueName != null) {
String items[] = comboKeyConfiguration.getItems();
for (int i = 0; i < items.length; i++)
if (keyConfigurationUniqueName.equals(items[i])) {
comboKeyConfiguration.select(i);
break;
}
}
}
private void setKeySequence(KeySequence keySequence) {
textKeySequenceManager.setKeySequence(keySequence);
}
public void setVisible(boolean visible) {
if (visible == true) {
Map contextsByName = new HashMap();
for (Iterator iterator = contextManager.getDefinedContextIds().iterator();
iterator.hasNext();
) {
IContext context = contextManager.getContext((String) iterator.next());
try {
String name = context.getName();
Collection contexts = (Collection) contextsByName.get(name);
if (contexts == null) {
contexts = new HashSet();
contextsByName.put(name, contexts);
}
contexts.add(context);
} catch (org.eclipse.ui.contexts.NotDefinedException eNotDefined) {
// Do nothing
}
}
Map categoriesByName = new HashMap();
for (Iterator iterator = commandManager.getDefinedCategoryIds().iterator();
iterator.hasNext();
) {
ICategory category = commandManager.getCategory((String) iterator.next());
try {
String name = category.getName();
Collection categories = (Collection) categoriesByName.get(name);
if (categories == null) {
categories = new HashSet();
categoriesByName.put(name, categories);
}
categories.add(category);
} catch (org.eclipse.ui.commands.NotDefinedException eNotDefined) {
// Do nothing
}
}
Map commandsByName = new HashMap();
for (Iterator iterator = commandManager.getDefinedCommandIds().iterator();
iterator.hasNext();
) {
ICommand command = commandManager.getCommand((String) iterator.next());
try {
String name = command.getName();
Collection commands = (Collection) commandsByName.get(name);
if (commands == null) {
commands = new HashSet();
commandsByName.put(name, commands);
}
commands.add(command);
} catch (org.eclipse.ui.commands.NotDefinedException eNotDefined) {
// Do nothing
}
}
Map keyConfigurationsByName = new HashMap();
for (Iterator iterator = commandManager.getDefinedKeyConfigurationIds().iterator();
iterator.hasNext();
) {
IKeyConfiguration keyConfiguration =
commandManager.getKeyConfiguration((String) iterator.next());
try {
String name = keyConfiguration.getName();
Collection keyConfigurations = (Collection) keyConfigurationsByName.get(name);
if (keyConfigurations == null) {
keyConfigurations = new HashSet();
keyConfigurationsByName.put(name, keyConfigurations);
}
keyConfigurations.add(keyConfiguration);
} catch (org.eclipse.ui.commands.NotDefinedException eNotDefined) {
// Do nothing
}
}
contextIdsByUniqueName = new HashMap();
contextUniqueNamesById = new HashMap();
for (Iterator iterator = contextsByName.entrySet().iterator(); iterator.hasNext();) {
Map.Entry entry = (Map.Entry) iterator.next();
String name = (String) entry.getKey();
Set contexts = (Set) entry.getValue();
Iterator iterator2 = contexts.iterator();
if (contexts.size() == 1) {
IContext context = (IContext) iterator2.next();
contextIdsByUniqueName.put(name, context.getId());
contextUniqueNamesById.put(context.getId(), name);
} else
while (iterator2.hasNext()) {
IContext context = (IContext) iterator2.next();
String uniqueName = MessageFormat.format(Util.translateString(RESOURCE_BUNDLE, "uniqueName"), new Object[] { name, context.getId()}); //$NON-NLS-1$
contextIdsByUniqueName.put(uniqueName, context.getId());
contextUniqueNamesById.put(context.getId(), uniqueName);
}
}
categoryIdsByUniqueName = new HashMap();
categoryUniqueNamesById = new HashMap();
for (Iterator iterator = categoriesByName.entrySet().iterator(); iterator.hasNext();) {
Map.Entry entry = (Map.Entry) iterator.next();
String name = (String) entry.getKey();
Set categories = (Set) entry.getValue();
Iterator iterator2 = categories.iterator();
if (categories.size() == 1) {
ICategory category = (ICategory) iterator2.next();
categoryIdsByUniqueName.put(name, category.getId());
categoryUniqueNamesById.put(category.getId(), name);
} else
while (iterator2.hasNext()) {
ICategory category = (ICategory) iterator2.next();
String uniqueName = MessageFormat.format(Util.translateString(RESOURCE_BUNDLE, "uniqueName"), new Object[] { name, category.getId()}); //$NON-NLS-1$
categoryIdsByUniqueName.put(uniqueName, category.getId());
categoryUniqueNamesById.put(category.getId(), uniqueName);
}
}
commandIdsByUniqueName = new HashMap();
commandUniqueNamesById = new HashMap();
for (Iterator iterator = commandsByName.entrySet().iterator(); iterator.hasNext();) {
Map.Entry entry = (Map.Entry) iterator.next();
String name = (String) entry.getKey();
Set commands = (Set) entry.getValue();
Iterator iterator2 = commands.iterator();
if (commands.size() == 1) {
ICommand command = (ICommand) iterator2.next();
commandIdsByUniqueName.put(name, command.getId());
commandUniqueNamesById.put(command.getId(), name);
} else
while (iterator2.hasNext()) {
ICommand command = (ICommand) iterator2.next();
String uniqueName = MessageFormat.format(Util.translateString(RESOURCE_BUNDLE, "uniqueName"), new Object[] { name, command.getId()}); //$NON-NLS-1$
commandIdsByUniqueName.put(uniqueName, command.getId());
commandUniqueNamesById.put(command.getId(), uniqueName);
}
}
keyConfigurationIdsByUniqueName = new HashMap();
keyConfigurationUniqueNamesById = new HashMap();
for (Iterator iterator = keyConfigurationsByName.entrySet().iterator();
iterator.hasNext();
) {
Map.Entry entry = (Map.Entry) iterator.next();
String name = (String) entry.getKey();
Set keyConfigurations = (Set) entry.getValue();
Iterator iterator2 = keyConfigurations.iterator();
if (keyConfigurations.size() == 1) {
IKeyConfiguration keyConfiguration = (IKeyConfiguration) iterator2.next();
keyConfigurationIdsByUniqueName.put(name, keyConfiguration.getId());
keyConfigurationUniqueNamesById.put(keyConfiguration.getId(), name);
} else
while (iterator2.hasNext()) {
IKeyConfiguration keyConfiguration = (IKeyConfiguration) iterator2.next();
String uniqueName = MessageFormat.format(Util.translateString(RESOURCE_BUNDLE, "uniqueName"), new Object[] { name, keyConfiguration.getId()}); //$NON-NLS-1$
keyConfigurationIdsByUniqueName.put(uniqueName, keyConfiguration.getId());
keyConfigurationUniqueNamesById.put(keyConfiguration.getId(), uniqueName);
}
}
String activeKeyConfigurationId = commandManager.getActiveKeyConfigurationId();
contextIdsByCommandId = new HashMap();
for (Iterator iterator = commandManager.getDefinedCommandIds().iterator();
iterator.hasNext();
) {
ICommand command = commandManager.getCommand((String) iterator.next());
List contextBindings = command.getContextBindings();
if (!contextBindings.isEmpty()) {
Set contextIds = new HashSet();
for (Iterator iterator2 = contextBindings.iterator(); iterator2.hasNext();) {
IContextBinding contextBinding = (IContextBinding) iterator2.next();
String contextId = contextBinding.getContextId();
if (contextManager.getDefinedContextIds().contains(contextId))
contextIds.add(contextId);
}
contextIdsByCommandId.put(command.getId(), contextIds);
}
}
commandIdsByCategoryId = new HashMap();
for (Iterator iterator = commandManager.getDefinedCommandIds().iterator();
iterator.hasNext();
) {
ICommand command = commandManager.getCommand((String) iterator.next());
try {
String categoryId = command.getCategoryId();
Collection commandIds = (Collection) commandIdsByCategoryId.get(categoryId);
if (commandIds == null) {
commandIds = new HashSet();
commandIdsByCategoryId.put(categoryId, commandIds);
}
commandIds.add(command.getId());
} catch (org.eclipse.ui.commands.NotDefinedException eNotDefined) {
// Do nothing
}
}
ICommandRegistry commandRegistry = commandManager.getCommandRegistry();
ICommandRegistry mutableCommandRegistry = commandManager.getMutableCommandRegistry();
List pluginKeySequenceBindingDefinitions =
new ArrayList(commandRegistry.getKeySequenceBindingDefinitions());
for (Iterator iterator = pluginKeySequenceBindingDefinitions.iterator();
iterator.hasNext();
) {
KeySequenceBindingDefinition keySequenceBindingDefinition =
(KeySequenceBindingDefinition) iterator.next();
KeySequence keySequence = keySequenceBindingDefinition.getKeySequence();
String commandId = keySequenceBindingDefinition.getCommandId();
String contextId = keySequenceBindingDefinition.getContextId();
String keyConfigurationId = keySequenceBindingDefinition.getKeyConfigurationId();
Set contextIds = (Set) contextIdsByCommandId.get(commandId);
boolean validKeySequence =
keySequence != null && CommandManager.validateKeySequence(keySequence);
boolean validContextId =
contextId == null
|| contextManager.getDefinedContextIds().contains(contextId);
boolean validCommandId =
commandId == null || commandManager.getDefinedCommandIds().contains(commandId);
boolean validKeyConfigurationId =
keyConfigurationId == null
|| commandManager.getDefinedKeyConfigurationIds().contains(keyConfigurationId);
boolean validContextIdForCommandId =
contextIds == null || contextIds.contains(contextId);
if (!validKeySequence
|| !validCommandId
|| !validContextId
|| !validKeyConfigurationId
|| !validContextIdForCommandId)
iterator.remove();
}
List preferenceKeySequenceBindingDefinitions =
new ArrayList(mutableCommandRegistry.getKeySequenceBindingDefinitions());
for (Iterator iterator = preferenceKeySequenceBindingDefinitions.iterator();
iterator.hasNext();
) {
KeySequenceBindingDefinition keySequenceBindingDefinition =
(KeySequenceBindingDefinition) iterator.next();
KeySequence keySequence = keySequenceBindingDefinition.getKeySequence();
String commandId = keySequenceBindingDefinition.getCommandId();
String contextId = keySequenceBindingDefinition.getContextId();
String keyConfigurationId = keySequenceBindingDefinition.getKeyConfigurationId();
Set contextIds = (Set) contextIdsByCommandId.get(commandId);
boolean validKeySequence =
keySequence != null && CommandManager.validateKeySequence(keySequence);
boolean validContextId =
contextId == null
|| contextManager.getDefinedContextIds().contains(contextId);
boolean validCommandId =
commandId == null || commandManager.getDefinedCommandIds().contains(commandId);
boolean validKeyConfigurationId =
keyConfigurationId == null
|| commandManager.getDefinedKeyConfigurationIds().contains(keyConfigurationId);
boolean validContextIdForCommandId =
contextIds == null || contextIds.contains(contextId);
if (!validKeySequence
|| !validCommandId
|| !validContextId
|| !validKeyConfigurationId
|| !validContextIdForCommandId)
iterator.remove();
}
tree = new TreeMap();
for (Iterator iterator = pluginKeySequenceBindingDefinitions.iterator();
iterator.hasNext();
) {
KeySequenceBindingDefinition keySequenceBindingDefinition =
(KeySequenceBindingDefinition) iterator.next();
KeySequenceBindingNode.add(
tree,
keySequenceBindingDefinition.getKeySequence(),
keySequenceBindingDefinition.getContextId(),
keySequenceBindingDefinition.getKeyConfigurationId(),
1,
keySequenceBindingDefinition.getPlatform(),
keySequenceBindingDefinition.getLocale(),
keySequenceBindingDefinition.getCommandId());
}
for (Iterator iterator = preferenceKeySequenceBindingDefinitions.iterator();
iterator.hasNext();
) {
KeySequenceBindingDefinition keySequenceBindingDefinition =
(KeySequenceBindingDefinition) iterator.next();
KeySequenceBindingNode.add(
tree,
keySequenceBindingDefinition.getKeySequence(),
keySequenceBindingDefinition.getContextId(),
keySequenceBindingDefinition.getKeyConfigurationId(),
0,
keySequenceBindingDefinition.getPlatform(),
keySequenceBindingDefinition.getLocale(),
keySequenceBindingDefinition.getCommandId());
}
// TODO?
//HashSet categoryIdsReferencedByCommandDefinitions = new
// HashSet();
//categoryDefinitionsById.keySet().retainAll(categoryIdsReferencedByCommandDefinitions);
/*
* TODO rich client platform. simplify UI if possible boolean
* showCategory = !categoryIdsByUniqueName.isEmpty();
* labelCategory.setVisible(showCategory);
* comboCategory.setVisible(showCategory); boolean showContext =
* !contextIdsByUniqueName.isEmpty();
* labelContext.setVisible(showContext);
* comboContext.setVisible(showContext);
* labelContextExtends.setVisible(showContext); boolean
* showKeyConfiguration =
* !keyConfigurationIdsByUniqueName.isEmpty();
* labelKeyConfiguration.setVisible(showKeyConfiguration);
* comboKeyConfiguration.setVisible(showKeyConfiguration);
* labelKeyConfigurationExtends.setVisible(showKeyConfiguration);
*/
List categoryNames = new ArrayList(categoryIdsByUniqueName.keySet());
Collections.sort(categoryNames, Collator.getInstance());
if (commandIdsByCategoryId.containsKey(null))
categoryNames.add(0, Util.translateString(RESOURCE_BUNDLE, "other")); //$NON-NLS-1$
comboCategory.setItems(
(String[]) categoryNames.toArray(new String[categoryNames.size()]));
comboCategory.clearSelection();
comboCategory.deselectAll();
if (commandIdsByCategoryId.containsKey(null) || !categoryNames.isEmpty())
comboCategory.select(0);
List keyConfigurationNames = new ArrayList(keyConfigurationIdsByUniqueName.keySet());
Collections.sort(keyConfigurationNames, Collator.getInstance());
comboKeyConfiguration.setItems(
(String[]) keyConfigurationNames.toArray(new String[keyConfigurationNames.size()]));
setKeyConfigurationId(activeKeyConfigurationId);
update();
}
super.setVisible(visible);
}
private void update() {
setCommandsForCategory();
setContextsForCommand();
String keyConfigurationId = getKeyConfigurationId();
KeySequence keySequence = getKeySequence();
String[] activeKeyConfigurationIds =
CommandManager.extend(commandManager.getKeyConfigurationIds(keyConfigurationId));
String[] activeLocales =
CommandManager.extend(
CommandManager.getPath(commandManager.getActiveLocale(), CommandManager.SEPARATOR));
String[] activePlatforms =
CommandManager.extend(
CommandManager.getPath(
commandManager.getActivePlatform(),
CommandManager.SEPARATOR));
KeySequenceBindingNode.solve(
tree,
activeKeyConfigurationIds,
activePlatforms,
activeLocales);
assignmentsByContextIdByKeySequence =
KeySequenceBindingNode.getAssignmentsByContextIdKeySequence(
tree,
KeySequence.getInstance());
setAssignmentsForKeySequence();
setAssignmentsForCommand();
String commandId = getCommandId();
String contextId = getContextId();
selectAssignmentForKeySequence(contextId);
selectAssignmentForCommand(contextId);
updateLabelKeyConfigurationExtends();
updateLabelContextExtends();
labelAssignmentsForKeySequence.setEnabled(
keySequence != null && !keySequence.getKeyStrokes().isEmpty());
tableAssignmentsForKeySequence.setEnabled(
keySequence != null && !keySequence.getKeyStrokes().isEmpty());
labelAssignmentsForCommand.setEnabled(commandId != null);
tableAssignmentsForCommand.setEnabled(commandId != null);
boolean buttonsEnabled =
commandId != null && keySequence != null && !keySequence.getKeyStrokes().isEmpty();
boolean buttonAddEnabled = buttonsEnabled;
boolean buttonRemoveEnabled = buttonsEnabled;
boolean buttonRestoreEnabled = buttonsEnabled;
// TODO better button enablement
buttonAdd.setEnabled(buttonAddEnabled);
buttonRemove.setEnabled(buttonRemoveEnabled);
buttonRestore.setEnabled(buttonRestoreEnabled);
}
private void updateLabelContextExtends() {
String contextId = getContextId();
if (contextId != null) {
IContext context = contextManager.getContext(getContextId());
if (context.isDefined()) {
try {
String name = (String) contextUniqueNamesById.get(context.getParentId());
if (name != null)
labelContextExtends.setText(MessageFormat.format(Util.translateString(RESOURCE_BUNDLE, "extends"), new Object[] { name })); //$NON-NLS-1$
else
labelContextExtends.setText(Util.translateString(RESOURCE_BUNDLE, "extendsGeneral")); //$NON-NLS-1$
return;
} catch (org.eclipse.ui.contexts.NotDefinedException eNotDefined) {
// Do nothing
}
}
}
labelContextExtends.setText(Util.ZERO_LENGTH_STRING);
}
private void updateLabelKeyConfigurationExtends() {
String keyConfigurationId = getKeyConfigurationId();
if (keyConfigurationId != null) {
IKeyConfiguration keyConfiguration =
commandManager.getKeyConfiguration(keyConfigurationId);
try {
String name =
(String) keyConfigurationUniqueNamesById.get(keyConfiguration.getParentId());
if (name != null) {
labelKeyConfigurationExtends.setText(MessageFormat.format(Util.translateString(RESOURCE_BUNDLE, "extends"), new Object[] { name })); //$NON-NLS-1$
return;
}
} catch (org.eclipse.ui.commands.NotDefinedException eNotDefined) {
// Do nothing
}
}
labelKeyConfigurationExtends.setText(Util.ZERO_LENGTH_STRING);
}
/*
* private void selectedButtonChange() { KeySequence keySequence =
* getKeySequence(); boolean validKeySequence = keySequence != null &&
* validateSequence(keySequence); String scopeId = getScopeId(); boolean
* validScopeId = scopeId != null && contextsDefinitionsById.get(scopeId) !=
* null; String keyConfigurationId = getKeyConfigurationId(); boolean
* validKeyConfigurationId = keyConfigurationId != null &&
* keyConfigurationsById.get(keyConfigurationId) != null; if
* (validKeySequence && validScopeId && validKeyConfigurationId) { String
* commandId = null; ISelection selection =
* treeViewerCommands.getSelection(); if (selection instanceof
* IStructuredSelection && !selection.isEmpty()) { Object object =
* ((IStructuredSelection) selection).getFirstElement(); if (object
* instanceof ICommandDefinition) commandId = ((ICommandDefinition)
* object).getId(); } CommandRecord commandRecord =
* getSelectedCommandRecord(); if (commandRecord == null) set(tree,
* keySequence, scopeId, keyConfigurationId, commandId); else { if
* (!commandRecord.customSet.isEmpty()) clear(tree, keySequence, scopeId,
* keyConfigurationId); else set(tree, keySequence, scopeId,
* keyConfigurationId, null); } commandRecords.clear();
* buildCommandRecords(tree, commandId, commandRecords);
* buildTableCommand(); selectTableCommand(scopeId, keyConfigurationId,
* keySequence); keySequenceRecords.clear(); buildSequenceRecords(tree,
* keySequence, keySequenceRecords); buildTableKeySequence();
* selectTableKeySequence(scopeId, keyConfigurationId); update(); } }
* private void buildTableCommand() { tableSequencesForCommand.removeAll();
* for (int i = 0; i < commandRecords.size(); i++) { CommandRecord
* commandRecord = (CommandRecord) commandRecords.get(i); Set customSet =
* commandRecord.customSet; Set defaultSet = commandRecord.defaultSet; int
* difference = DIFFERENCE_NONE; //String commandId = null; // // boolean
* commandConflict = false; String alternateCommandId = null; boolean
* alternateCommandConflict = false; if (customSet.isEmpty()) { if
* (defaultSet.contains(commandRecord.command)) { //commandId // // =
* commandRecord.commandId; commandConflict =
* commandRecord.defaultConflict; } } else { if (defaultSet.isEmpty()) { if
* (customSet.contains(commandRecord.command)) { difference =
* DIFFERENCE_ADD; //commandId = // // commandRecord.commandId; // //
* commandConflict = commandRecord.customConflict; } } else { if
* (customSet.contains(commandRecord.command)) { difference =
* DIFFERENCE_CHANGE; //commandId = // // commandRecord.commandId;
* commandConflict = commandRecord.customConflict; alternateCommandId =
* commandRecord.defaultCommand; alternateCommandConflict =
* commandRecord.defaultConflict; } else { if
* (defaultSet.contains(commandRecord.command)) { difference =
* DIFFERENCE_MINUS; //commandId = // // commandRecord.commandId; // //
* commandConflict = commandRecord.defaultConflict; alternateCommandId =
* commandRecord.customCommand; alternateCommandConflict =
* commandRecord.customConflict; } } } } TableItem tableItem = new
* TableItem(tableSequencesForCommand, SWT.NULL); switch (difference) {
* case DIFFERENCE_ADD : tableItem.setImage(0, IMAGE_PLUS); break; case
* DIFFERENCE_CHANGE : tableItem.setImage(0, IMAGE_CHANGE); break; case
* DIFFERENCE_MINUS : tableItem.setImage(0, IMAGE_MINUS); break; case
* DIFFERENCE_NONE : tableItem.setImage(0, IMAGE_BLANK); break; }
* IContextDefinition scope = (IContextDefinition)
* contextsById.get(commandRecord.scope); tableItem.setText(1, scope !=
* null ? scope.getName() : bracket(commandRecord.scope)); Configuration
* keyConfiguration = (Configuration)
* keyConfigurationsById.get(commandRecord.configuration);
* tableItem.setText(2, keyConfiguration != null ?
* keyConfiguration.getName() : bracket(commandRecord.configuration));
* boolean conflict = commandConflict || alternateCommandConflict;
* StringBuffer stringBuffer = new StringBuffer(); if
* (commandRecord.sequence != null)
* stringBuffer.append(KeySupport.formatSequence(commandRecord.sequence,
* true)); if (commandConflict) stringBuffer.append(SPACE +
* COMMAND_CONFLICT); String alternateCommandName = null; if
* (alternateCommandId == null) alternateCommandName = COMMAND_UNDEFINED;
* else if (alternateCommandId.length() == 0) alternateCommandName =
* COMMAND_NOTHING; else { ICommandDefinition command =
* (ICommandDefinition) commandsById.get(alternateCommandId); if (command !=
* null) alternateCommandName = command.getName(); else
* alternateCommandName = bracket(alternateCommandId); } if
* (alternateCommandConflict) alternateCommandName += SPACE +
* COMMAND_CONFLICT; stringBuffer.append(SPACE); if (difference ==
* DIFFERENCE_CHANGE)
* stringBuffer.append(MessageFormat.format(Util.getString(resourceBundle,
* "was"), new Object[] { alternateCommandName })); //$NON-NLS-1$ else if
* (difference == DIFFERENCE_MINUS)
* stringBuffer.append(MessageFormat.format(Util.getString(resourceBundle,
* "now"), new Object[] { alternateCommandName })); //$NON-NLS-1$
* tableItem.setText(3, stringBuffer.toString()); if (difference ==
* DIFFERENCE_MINUS) { if (conflict) tableItem.setForeground(new
* Color(getShell().getDisplay(), RGB_CONFLICT_MINUS)); else
* tableItem.setForeground(new Color(getShell().getDisplay(), RGB_MINUS)); }
* else if (conflict) tableItem.setForeground(new
* Color(getShell().getDisplay(), RGB_CONFLICT)); } } private void
* buildTableKeySequence() { tableCommandsForSequence.removeAll(); for (int
* i = 0; i < keySequenceRecords.size(); i++) { KeySequenceRecord
* keySequenceRecord = (KeySequenceRecord) keySequenceRecords.get(i); int
* difference = DIFFERENCE_NONE; String commandId = null; boolean
* commandConflict = false; String alternateCommandId = null; boolean
* alternateCommandConflict = false; if
* (keySequenceRecord.customSet.isEmpty()) { commandId =
* keySequenceRecord.defaultCommand; commandConflict =
* keySequenceRecord.defaultConflict; } else { commandId =
* keySequenceRecord.customCommand; commandConflict =
* keySequenceRecord.customConflict; if
* (keySequenceRecord.defaultSet.isEmpty()) difference = DIFFERENCE_ADD;
* else { difference = DIFFERENCE_CHANGE; alternateCommandId =
* keySequenceRecord.defaultCommand; alternateCommandConflict =
* keySequenceRecord.defaultConflict; } } TableItem tableItem = new
* TableItem(tableCommandsForSequence, SWT.NULL); switch (difference) {
* case DIFFERENCE_ADD : tableItem.setImage(0, IMAGE_PLUS); break; case
* DIFFERENCE_CHANGE : tableItem.setImage(0, IMAGE_CHANGE); break; case
* DIFFERENCE_MINUS : tableItem.setImage(0, IMAGE_MINUS); break; case
* DIFFERENCE_NONE : tableItem.setImage(0, IMAGE_BLANK); break; }
* IContextDefinition scope = (IContextDefinition)
* contextsById.get(keySequenceRecord.scope); tableItem.setText(1, scope !=
* null ? scope.getName() : bracket(keySequenceRecord.scope));
* Configuration keyConfiguration = (Configuration)
* keyConfigurationsById.get(keySequenceRecord.configuration);
* tableItem.setText(2, keyConfiguration != null ?
* keyConfiguration.getName() : bracket(keySequenceRecord.configuration));
* boolean conflict = commandConflict || alternateCommandConflict;
* StringBuffer stringBuffer = new StringBuffer(); String commandName =
* null; if (commandId == null) commandName = COMMAND_UNDEFINED; else if
* (commandId.length() == 0) commandName = COMMAND_NOTHING; else {
* ICommandDefinition command = (ICommandDefinition)
* commandsById.get(commandId); if (command != null) commandName =
* command.getName(); else commandName = bracket(commandId); }
* stringBuffer.append(commandName); if (commandConflict)
* stringBuffer.append(SPACE + COMMAND_CONFLICT); String
* alternateCommandName = null; if (alternateCommandId == null)
* alternateCommandName = COMMAND_UNDEFINED; else if
* (alternateCommandId.length() == 0) alternateCommandName =
* COMMAND_NOTHING; else { ICommandDefinition command =
* (ICommandDefinition) commandsById.get(alternateCommandId); if (command !=
* null) alternateCommandName = command.getName(); else
* alternateCommandName = bracket(alternateCommandId); } if
* (alternateCommandConflict) alternateCommandName += SPACE +
* COMMAND_CONFLICT; stringBuffer.append(SPACE); if (difference ==
* DIFFERENCE_CHANGE)
* stringBuffer.append(MessageFormat.format(Util.getString(resourceBundle,
* "was"), new Object[] { alternateCommandName })); //$NON-NLS-1$
* tableItem.setText(3, stringBuffer.toString()); if (difference ==
* DIFFERENCE_MINUS) { if (conflict) tableItem.setForeground(new
* Color(getShell().getDisplay(), RGB_CONFLICT_MINUS)); else
* tableItem.setForeground(new Color(getShell().getDisplay(), RGB_MINUS)); }
* else if (conflict) tableItem.setForeground(new
* Color(getShell().getDisplay(), RGB_CONFLICT)); }
*/
}