List of usage examples for org.eclipse.jface.viewers ViewerComparator ViewerComparator
public ViewerComparator()
From source file:org.eclipse.ui.dialogs.WizardNewProjectReferencePage.java
License:Open Source License
/** (non-Javadoc) * Method declared on IDialogPage./* w w w . j a va 2s .c o m*/ */ public void createControl(Composite parent) { Font font = parent.getFont(); Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); composite.setFont(font); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IIDEHelpContextIds.NEW_PROJECT_REFERENCE_WIZARD_PAGE); Label referenceLabel = new Label(composite, SWT.NONE); referenceLabel.setText(REFERENCED_PROJECTS_TITLE); referenceLabel.setFont(font); referenceProjectsViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER); referenceProjectsViewer.getTable().setFont(composite.getFont()); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.heightHint = getDefaultFontHeight(referenceProjectsViewer.getTable(), PROJECT_LIST_MULTIPLIER); referenceProjectsViewer.getTable().setLayoutData(data); referenceProjectsViewer.setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider()); referenceProjectsViewer.setContentProvider(getContentProvider()); referenceProjectsViewer.setComparator(new ViewerComparator()); referenceProjectsViewer.setInput(ResourcesPlugin.getWorkspace()); setControl(composite); }
From source file:org.eclipse.ui.ide.examples.projectsnapshot.ProjectRefreshSnapshotImportWizardPage.java
License:Open Source License
/** * Create the checkbox list for the found projects. * /*from www.j a va 2 s.co m*/ * @param workArea */ private void createProjectsList(Composite workArea) { Label title = new Label(workArea, SWT.NONE); title.setText(Messages.ProjectRefreshSnapshotImportWizardPage_selectProject); Composite listComposite = new Composite(workArea, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginWidth = 0; layout.makeColumnsEqualWidth = false; listComposite.setLayout(layout); listComposite.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH)); projectsList = new CheckboxTreeViewer(listComposite, SWT.BORDER); GridData listData = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); listData.heightHint = 100; projectsList.getControl().setLayoutData(listData); projectsList.setContentProvider(new ITreeContentProvider() { /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java * .lang.Object) */ public Object[] getChildren(Object parentElement) { return null; } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.IStructuredContentProvider#getElements * (java.lang.Object) */ public Object[] getElements(Object inputElement) { return getValidProjects(); } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java * .lang.Object) */ public boolean hasChildren(Object element) { return false; } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ITreeContentProvider#getParent(java * .lang.Object) */ public Object getParent(Object element) { return null; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() { } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse * .jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); projectsList.setLabelProvider(new LabelProvider() { /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ public String getText(Object element) { return ((ProjectRecord) element).getProjectLabel(); } }); projectsList.addCheckStateListener(new ICheckStateListener() { /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged * (org.eclipse.jface.viewers.CheckStateChangedEvent) */ public void checkStateChanged(CheckStateChangedEvent event) { checkForComplete(); } }); projectsList.setInput(this); projectsList.setComparator(new ViewerComparator()); }
From source file:org.eclipse.ui.ide.markers.compatibility.internal.QuickFixPage.java
License:Open Source License
/** * @param control//from w ww.j a v a 2 s. co m */ private void createResolutionsList(Composite control) { resolutionsList = new ListViewer(control, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL); resolutionsList.setContentProvider(new IStructuredContentProvider() { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ public Object[] getElements(Object inputElement) { return resolutions.keySet().toArray(); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() { } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); resolutionsList.setLabelProvider(new LabelProvider() { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ public String getText(Object element) { return ((IMarkerResolution) element).getLabel(); } }); resolutionsList.setInput(this); resolutionsList.setComparator(new ViewerComparator() { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ public int compare(Viewer viewer, Object e1, Object e2) { return ((IMarkerResolution) e1).getLabel().compareTo(((IMarkerResolution) e1).getLabel()); } }); resolutionsList.addSelectionChangedListener(new ISelectionChangedListener() { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) */ public void selectionChanged(SelectionChangedEvent event) { markersTable.refresh(); IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window == null) return; IWorkbenchPage page = window.getActivePage(); if (page == null) return; } }); }
From source file:org.eclipse.ui.ide.markers.compatibility.internal.TypesConfigurationArea.java
License:Open Source License
public void createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); GridLayout layout = new GridLayout(); layout.numColumns = 2;/* www .j a va 2s.c om*/ composite.setLayout(layout); Tree tree = new Tree(composite, SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER); tree.setLinesVisible(true); tree.setHeaderVisible(false); TableLayout tableLayout = new TableLayout(); tree.setLayout(tableLayout); tableLayout.addColumnData(new ColumnWeightData(100, true)); new TreeColumn(tree, SWT.NONE, 0); typesViewer = new CheckboxTreeViewer(tree); initializeFontMetrics(tree); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); gridData.widthHint = Dialog.convertVerticalDLUsToPixels(getFontMetrics(), 100); gridData.heightHint = Dialog.convertVerticalDLUsToPixels(getFontMetrics(), 75); final ITreeContentProvider typesContentProvider = getTypesContentProvider(); typesViewer.getControl().setLayoutData(gridData); typesViewer.setContentProvider(typesContentProvider); typesViewer.setLabelProvider(new LabelProvider() { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ public String getText(Object element) { return ((TypesEntry) element).getLabel(); } }); typesViewer.setComparator(new ViewerComparator() { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ public int compare(Viewer viewer, Object e1, Object e2) { return ((TypesEntry) e1).getLabel().compareTo(((TypesEntry) e2).getLabel()); } }); typesViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { Object element = event.getElement(); boolean checked = event.getChecked(); setChildrenChecked(element, checked); setParentCheckState(element, checked); } /** * Set the check state of the children of element to * <code>true</code>. * * @param element * @param checked */ private void setChildrenChecked(Object element, boolean checked) { Object[] children = typesContentProvider.getChildren(element); if (children.length > 0) { for (int i = 0; i < children.length; i++) { typesViewer.setChecked(children[i], checked); } } } /** * Update the parent check state based on the state of the element * * @param element * @param checked */ private void setParentCheckState(Object element, boolean checked) { Object parent = typesContentProvider.getParent(element); if (parent == null) return; Object[] children = typesContentProvider.getChildren(parent); for (int i = 0; i < children.length; i++) {// At least one // different if (typesViewer.getChecked(children[i]) != checked) { typesViewer.setGrayChecked(parent, true); return; } } // All are the same - update the parent typesViewer.setChecked(parent, checked); } }); Composite buttonComposite = new Composite(composite, SWT.NONE); GridLayout buttonLayout = new GridLayout(); buttonLayout.marginWidth = 0; buttonComposite.setLayout(buttonLayout); GridData buttonsData = new GridData(); buttonsData.verticalAlignment = GridData.BEGINNING; buttonComposite.setLayoutData(buttonsData); Button selectAllButton = new Button(buttonComposite, SWT.PUSH); selectAllButton.setText(MarkerMessages.filtersDialog_selectAllTypes); selectAllButton.addSelectionListener(getSelectAllButtonListener(typesContentProvider, true)); setButtonLayoutData(selectAllButton); Button deselectAllButton = new Button(buttonComposite, SWT.PUSH); deselectAllButton.setText(MarkerMessages.filtersDialog_deselectAllTypes); deselectAllButton.addSelectionListener(getSelectAllButtonListener(typesContentProvider, false)); setButtonLayoutData(deselectAllButton); }
From source file:org.eclipse.ui.internal.activities.ws.ActivityEnabler.java
License:Open Source License
/** * Create the controls./*from ww w . ja v a 2s . co m*/ * * @param parent * the parent in which to create the controls. * @return the composite in which the controls exist. */ public Control createControl(Composite parent) { GC gc = new GC(parent); gc.setFont(JFaceResources.getDialogFont()); FontMetrics fontMetrics = gc.getFontMetrics(); gc.dispose(); Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(createGridLayoutWithoutMargins(1, fontMetrics)); new Label(composite, SWT.NONE).setText(strings.getProperty(ActivitiesPreferencePage.ACTIVITY_NAME, ActivityMessages.ActivityEnabler_activities) + ':'); dualViewer = new CheckboxTreeViewer(composite); dualViewer.setComparator(new ViewerComparator()); dualViewer.setLabelProvider(new ActivityCategoryLabelProvider()); dualViewer.setContentProvider(provider); dualViewer.setInput(activitySupport); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); dualViewer.getControl().setLayoutData(data); Composite buttonComposite = new Composite(composite, SWT.NONE); buttonComposite.setLayout(createGridLayoutWithoutMargins(2, fontMetrics)); Button selectAllButton = new Button(buttonComposite, SWT.PUSH); selectAllButton.setText(ActivityMessages.ActivityEnabler_selectAll); selectAllButton.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { toggleTreeEnablement(true); } }); setButtonLayoutData(selectAllButton, fontMetrics); Button deselectAllButton = new Button(buttonComposite, SWT.PUSH); deselectAllButton.setText(ActivityMessages.ActivityEnabler_deselectAll); deselectAllButton.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { toggleTreeEnablement(false); } }); setButtonLayoutData(deselectAllButton, fontMetrics); new Label(composite, SWT.NONE).setText(ActivityMessages.ActivityEnabler_description); descriptionText = new Text(composite, SWT.READ_ONLY | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL); data = new GridData(SWT.FILL, SWT.FILL, true, false); data.heightHint = Dialog.convertHeightInCharsToPixels(fontMetrics, 5); descriptionText.setLayoutData(data); setInitialStates(); dualViewer.addCheckStateListener(checkListener); dualViewer.addSelectionChangedListener(selectionListener); dualViewer.setSelection(new StructuredSelection()); Dialog.applyDialogFont(composite); return composite; }
From source file:org.eclipse.ui.internal.dialogs.ContentTypesPreferencePage.java
License:Open Source License
/** * @param composite/* w ww . j av a2 s .com*/ */ private void createContentTypesTree(Composite composite) { { Label label = new Label(composite, SWT.NONE); label.setFont(composite.getFont()); label.setText(WorkbenchMessages.ContentTypes_contentTypesLabel); GridData data = new GridData(); data.horizontalSpan = 2; label.setLayoutData(data); } { contentTypesViewer = new TreeViewer(composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); contentTypesViewer.getControl().setFont(composite.getFont()); contentTypesViewer.setContentProvider(new ContentTypesContentProvider()); contentTypesViewer.setLabelProvider(new ContentTypesLabelProvider()); contentTypesViewer.setComparator(new ViewerComparator()); contentTypesViewer.setInput(Platform.getContentTypeManager()); GridData data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 2; contentTypesViewer.getControl().setLayoutData(data); contentTypesViewer.addSelectionChangedListener(new ISelectionChangedListener() { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) */ public void selectionChanged(SelectionChangedEvent event) { IContentType contentType = (IContentType) ((IStructuredSelection) event.getSelection()) .getFirstElement(); fileAssociationViewer.setInput(contentType); if (contentType != null) { String charset = contentType.getDefaultCharset(); if (charset == null) { charset = ""; //$NON-NLS-1$ } charsetField.setText(charset); } else { charsetField.setText(""); //$NON-NLS-1$ } charsetField.setEnabled(contentType != null); addButton.setEnabled(contentType != null); setButton.setEnabled(false); } }); } }
From source file:org.eclipse.ui.internal.dialogs.SavePerspectiveDialog.java
License:Open Source License
/** * Creates and returns the contents of the upper part * of this dialog (above the button bar). * * @param parent the parent composite to contain the dialog area * @return the dialog area control/* w ww . j a v a 2 s. c o m*/ */ protected Control createDialogArea(Composite parent) { Font font = parent.getFont(); // Run super. Composite composite = (Composite) super.createDialogArea(parent); // description Label descLabel = new Label(composite, SWT.WRAP); descLabel.setText(WorkbenchMessages.SavePerspectiveDialog_description); descLabel.setFont(parent.getFont()); // Spacer. Label label = new Label(composite, SWT.NONE); GridData data = new GridData(); data.heightHint = 8; label.setLayoutData(data); // Create name group. Composite nameGroup = new Composite(composite, SWT.NONE); nameGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginWidth = layout.marginHeight = 0; nameGroup.setLayout(layout); // Create name label. label = new Label(nameGroup, SWT.NONE); label.setText(WorkbenchMessages.SavePerspective_name); label.setFont(font); // Add text field. text = new Text(nameGroup, SWT.BORDER); text.setFocus(); data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = convertWidthInCharsToPixels(TEXT_WIDTH); text.setLayoutData(data); text.setFont(font); text.addModifyListener(this); // Spacer. label = new Label(composite, SWT.NONE); data = new GridData(); data.heightHint = 5; label.setLayoutData(data); // Another label. label = new Label(composite, SWT.NONE); label.setText(WorkbenchMessages.SavePerspective_existing); label.setFont(font); // Add perspective list. list = new TableViewer(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); list.setLabelProvider(new PerspectiveLabelProvider()); list.setContentProvider(new PerspContentProvider()); list.addFilter(new ActivityViewerFilter()); list.setComparator(new ViewerComparator()); list.setInput(perspReg); list.addSelectionChangedListener(this); list.getTable().setFont(font); // Set perspective list size. Control ctrl = list.getControl(); GridData spec = new GridData(GridData.FILL_BOTH); spec.widthHint = convertWidthInCharsToPixels(LIST_WIDTH); spec.heightHint = convertHeightInCharsToPixels(LIST_HEIGHT); ctrl.setLayoutData(spec); // Set the initial selection if (initialSelection != null) { StructuredSelection sel = new StructuredSelection(initialSelection); list.setSelection(sel, true); } text.selectAll(); // Return results. return composite; }
From source file:org.eclipse.ui.internal.dialogs.SelectPerspectiveDialog.java
License:Open Source License
/** * Create a new viewer in the parent./*from w w w. ja v a 2 s . c o m*/ * * @param parent the parent <code>Composite</code>. */ private void createViewer(Composite parent) { // Add perspective list. list = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); list.getTable().setFont(parent.getFont()); list.setLabelProvider(new DelegatingLabelProviderWithTooltip(new PerspectiveLabelProvider(), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(ContributingPluginDecorator.ID)) { protected Object unwrapElement(Object element) { if (element instanceof PerspectiveDescriptor) { element = ((PerspectiveDescriptor) element).getConfigElement(); } return element; } }); list.setContentProvider(new PerspContentProvider()); list.addFilter(activityViewerFilter); list.setComparator(new ViewerComparator()); list.setInput(perspReg); list.addSelectionChangedListener(this); list.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { handleDoubleClickEvent(); } }); }
From source file:org.eclipse.ui.internal.ide.dialogs.ProjectReferencePage.java
License:Open Source License
protected Control createContents(Composite parent) { PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IIDEHelpContextIds.PROJECT_REFERENCE_PROPERTY_PAGE); Composite composite = new Composite(parent, SWT.NONE); initialize();/*from w ww . jav a2 s . c om*/ createDescriptionLabel(composite); listViewer = CheckboxTableViewer.newCheckList(composite, SWT.TOP | SWT.BORDER); if (!project.isOpen()) listViewer.getControl().setEnabled(false); listViewer.setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider()); listViewer.setContentProvider(getContentProvider(project)); listViewer.setComparator(new ViewerComparator()); listViewer.setInput(project.getWorkspace()); try { listViewer.setCheckedElements(project.getDescription().getReferencedProjects()); } catch (CoreException e) { //don't initial-check anything } //check for initial modification to avoid work if no changes are made listViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { modified = true; } }); applyDialogFont(composite); GridLayoutFactory.fillDefaults().generateLayout(composite); return composite; }
From source file:org.eclipse.ui.internal.keys.NewKeysPreferencePage.java
License:Open Source License
private final void createDataControls(final Composite parent) { GridLayout layout;//from www . ja v a 2s . c om GridData gridData; // Creates the data area. final Composite dataArea = new Composite(parent, SWT.NONE); layout = new GridLayout(2, true); layout.marginWidth = 0; dataArea.setLayout(layout); gridData = new GridData(); gridData.grabExcessHorizontalSpace = true; gridData.horizontalAlignment = SWT.FILL; dataArea.setLayoutData(gridData); // LEFT DATA AREA // Creates the left data area. final Composite leftDataArea = new Composite(dataArea, SWT.NONE); layout = new GridLayout(3, false); leftDataArea.setLayout(layout); gridData = new GridData(); gridData.grabExcessHorizontalSpace = true; gridData.verticalAlignment = SWT.TOP; gridData.horizontalAlignment = SWT.FILL; leftDataArea.setLayoutData(gridData); // The command name label. final Label commandNameLabel = new Label(leftDataArea, SWT.NONE); commandNameLabel.setText(NewKeysPreferenceMessages.CommandNameLabel_Text); // The current command name. commandNameValueLabel = new Label(leftDataArea, SWT.NONE); gridData = new GridData(); gridData.grabExcessHorizontalSpace = true; gridData.horizontalSpan = 2; gridData.horizontalAlignment = SWT.FILL; commandNameValueLabel.setLayoutData(gridData); final Label commandDescriptionlabel = new Label(leftDataArea, SWT.LEAD); commandDescriptionlabel.setText(NewKeysPreferenceMessages.CommandDescriptionLabel_Text); gridData = new GridData(); gridData.verticalAlignment = SWT.BEGINNING; commandDescriptionlabel.setLayoutData(gridData); fDescriptionText = new Text(leftDataArea, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.READ_ONLY); // The binding label. final Label bindingLabel = new Label(leftDataArea, SWT.NONE); bindingLabel.setText(NewKeysPreferenceMessages.BindingLabel_Text); // The key sequence entry widget. fBindingText = new Text(leftDataArea, SWT.BORDER); gridData = new GridData(); gridData.grabExcessHorizontalSpace = true; gridData.horizontalAlignment = SWT.FILL; gridData.widthHint = 200; fBindingText.setLayoutData(gridData); fBindingText.addFocusListener(new FocusListener() { public void focusGained(FocusEvent e) { fBindingService.setKeyFilterEnabled(false); } public void focusLost(FocusEvent e) { fBindingService.setKeyFilterEnabled(true); } }); fBindingText.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { if (!fBindingService.isKeyFilterEnabled()) { fBindingService.setKeyFilterEnabled(true); } } }); fKeySequenceText = new KeySequenceText(fBindingText); fKeySequenceText.setKeyStrokeLimit(4); fKeySequenceText.addPropertyChangeListener(new IPropertyChangeListener() { public final void propertyChange(final PropertyChangeEvent event) { if (!event.getOldValue().equals(event.getNewValue())) { final KeySequence keySequence = fKeySequenceText.getKeySequence(); if (!keySequence.isComplete()) { return; } BindingElement activeBinding = (BindingElement) keyController.getBindingModel() .getSelectedElement(); if (activeBinding != null) { activeBinding.setTrigger(keySequence); } fBindingText.setSelection(fBindingText.getTextLimit()); } } }); // Button for adding trapped key strokes final Button addKeyButton = new Button(leftDataArea, SWT.LEFT | SWT.ARROW); addKeyButton.setToolTipText(NewKeysPreferenceMessages.AddKeyButton_ToolTipText); gridData = new GridData(); gridData.heightHint = fSchemeCombo.getCombo().getTextHeight(); addKeyButton.setLayoutData(gridData); // Arrow buttons aren't normally added to the tab list. Let's fix that. final Control[] tabStops = dataArea.getTabList(); final ArrayList newTabStops = new ArrayList(); for (int i = 0; i < tabStops.length; i++) { Control tabStop = tabStops[i]; newTabStops.add(tabStop); if (fBindingText.equals(tabStop)) { newTabStops.add(addKeyButton); } } final Control[] newTabStopArray = (Control[]) newTabStops.toArray(new Control[newTabStops.size()]); dataArea.setTabList(newTabStopArray); // Construct the menu to attach to the above button. final Menu addKeyMenu = new Menu(addKeyButton); final Iterator trappedKeyItr = KeySequenceText.TRAPPED_KEYS.iterator(); while (trappedKeyItr.hasNext()) { final KeyStroke trappedKey = (KeyStroke) trappedKeyItr.next(); final MenuItem menuItem = new MenuItem(addKeyMenu, SWT.PUSH); menuItem.setText(trappedKey.format()); menuItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { fKeySequenceText.insert(trappedKey); fBindingText.setFocus(); fBindingText.setSelection(fBindingText.getTextLimit()); } }); } addKeyButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent selectionEvent) { Point buttonLocation = addKeyButton.getLocation(); buttonLocation = dataArea.toDisplay(buttonLocation.x, buttonLocation.y); Point buttonSize = addKeyButton.getSize(); addKeyMenu.setLocation(buttonLocation.x, buttonLocation.y + buttonSize.y); addKeyMenu.setVisible(true); } }); // The when label. final Label whenLabel = new Label(leftDataArea, SWT.NONE); whenLabel.setText(NewKeysPreferenceMessages.WhenLabel_Text); // The when combo. fWhenCombo = new ComboViewer(leftDataArea); gridData = new GridData(); gridData.grabExcessHorizontalSpace = true; gridData.horizontalAlignment = SWT.FILL; gridData.horizontalSpan = 2; ViewerComparator comparator = new ViewerComparator(); fWhenCombo.setComparator(comparator); fWhenCombo.getCombo().setVisibleItemCount(ITEMS_TO_SHOW); fWhenCombo.getCombo().setLayoutData(gridData); fWhenCombo.setContentProvider(new ModelContentProvider()); fWhenCombo.setLabelProvider(new ListLabelProvider()); fWhenCombo.addSelectionChangedListener(new ISelectionChangedListener() { public final void selectionChanged(final SelectionChangedEvent event) { ContextElement context = (ContextElement) ((IStructuredSelection) event.getSelection()) .getFirstElement(); if (context != null) { keyController.getContextModel().setSelectedElement(context); } } }); IPropertyChangeListener whenListener = new IPropertyChangeListener() { // Sets the combo selection when a new keybinding is selected? public void propertyChange(PropertyChangeEvent event) { if (event.getSource() == keyController.getContextModel() && CommonModel.PROP_SELECTED_ELEMENT.equals(event.getProperty())) { Object newVal = event.getNewValue(); StructuredSelection structuredSelection = newVal == null ? null : new StructuredSelection(newVal); fWhenCombo.setSelection(structuredSelection, true); } } }; keyController.addPropertyChangeListener(whenListener); // RIGHT DATA AREA // Creates the right data area. final Composite rightDataArea = new Composite(dataArea, SWT.NONE); layout = new GridLayout(1, false); rightDataArea.setLayout(layout); gridData = new GridData(SWT.FILL, SWT.FILL, true, true); rightDataArea.setLayoutData(gridData); new Label(rightDataArea, SWT.NONE); // filler // The description label. final Label descriptionLabel = new Label(rightDataArea, SWT.NONE); descriptionLabel.setText(NewKeysPreferenceMessages.ConflictsLabel_Text); gridData = new GridData(); gridData.grabExcessHorizontalSpace = true; gridData.horizontalAlignment = SWT.FILL; descriptionLabel.setLayoutData(gridData); conflictViewer = new TableViewer(rightDataArea, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION); Table table = conflictViewer.getTable(); table.setHeaderVisible(true); TableColumn bindingNameColumn = new TableColumn(table, SWT.LEAD); bindingNameColumn.setText(NewKeysPreferenceMessages.CommandNameColumn_Text); bindingNameColumn.setWidth(150); TableColumn bindingContextNameColumn = new TableColumn(table, SWT.LEAD); bindingContextNameColumn.setText(NewKeysPreferenceMessages.WhenColumn_Text); bindingContextNameColumn.setWidth(150); gridData = new GridData(SWT.FILL, SWT.FILL, true, true); //gridData.horizontalIndent = 10; table.setLayoutData(gridData); TableLayout tableLayout = new TableLayout(); tableLayout.addColumnData(new ColumnWeightData(60)); tableLayout.addColumnData(new ColumnWeightData(40)); table.setLayout(tableLayout); conflictViewer.setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { if (inputElement instanceof Collection) { return ((Collection) inputElement).toArray(); } return new Object[0]; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); conflictViewer.setLabelProvider(new BindingElementLabelProvider() { public String getColumnText(Object o, int index) { BindingElement element = (BindingElement) o; if (index == 0) { return element.getName(); } return element.getContext().getName(); } }); conflictViewer.addSelectionChangedListener(new ISelectionChangedListener() { // When the conflict viewer's selection changes, update the // model's current selection public void selectionChanged(SelectionChangedEvent event) { ModelElement binding = (ModelElement) ((IStructuredSelection) event.getSelection()) .getFirstElement(); BindingModel bindingModel = keyController.getBindingModel(); if (binding != null && binding != bindingModel.getSelectedElement()) { StructuredSelection selection = new StructuredSelection(binding); bindingModel.setSelectedElement(binding); conflictViewer.setSelection(selection); boolean selectionVisible = false; TreeItem[] items = fFilteredTree.getViewer().getTree().getItems(); for (int i = 0; i < items.length; i++) { if (items[i].getData().equals(binding)) { selectionVisible = true; break; } } if (!selectionVisible) { fFilteredTree.getFilterControl().setText(""); //$NON-NLS-1$ fFilteredTree.getViewer().refresh(); bindingModel.setSelectedElement(binding); conflictViewer.setSelection(selection); } } } }); IPropertyChangeListener conflictsListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getSource() == keyController.getConflictModel() && CommonModel.PROP_SELECTED_ELEMENT.equals(event.getProperty())) { if (keyController.getConflictModel().getConflicts() != null) { Object newVal = event.getNewValue(); StructuredSelection structuredSelection = newVal == null ? null : new StructuredSelection(newVal); conflictViewer.setSelection(structuredSelection, true); } } else if (ConflictModel.PROP_CONFLICTS.equals(event.getProperty())) { conflictViewer.setInput(event.getNewValue()); } else if (ConflictModel.PROP_CONFLICTS_ADD.equals(event.getProperty())) { conflictViewer.add(event.getNewValue()); } else if (ConflictModel.PROP_CONFLICTS_REMOVE.equals(event.getProperty())) { conflictViewer.remove(event.getNewValue()); } } }; keyController.addPropertyChangeListener(conflictsListener); IPropertyChangeListener dataUpdateListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { BindingElement bindingElement = null; boolean weCare = false; if (event.getSource() == keyController.getBindingModel() && CommonModel.PROP_SELECTED_ELEMENT.equals(event.getProperty())) { bindingElement = (BindingElement) event.getNewValue(); weCare = true; } else if (event.getSource() == keyController.getBindingModel().getSelectedElement() && ModelElement.PROP_MODEL_OBJECT.equals(event.getProperty())) { bindingElement = (BindingElement) event.getSource(); weCare = true; } if (bindingElement == null && weCare) { commandNameValueLabel.setText(""); //$NON-NLS-1$ fDescriptionText.setText(""); //$NON-NLS-1$ fBindingText.setText(""); //$NON-NLS-1$ } else if (bindingElement != null) { commandNameValueLabel.setText(bindingElement.getName()); String desc = bindingElement.getDescription(); fDescriptionText.setText(desc == null ? "" : desc); //$NON-NLS-1$ KeySequence trigger = (KeySequence) bindingElement.getTrigger(); fKeySequenceText.setKeySequence(trigger); } } }; keyController.addPropertyChangeListener(dataUpdateListener); }