1 /*******************************************************************************
2 * Copyright (c) 2005, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.preferences;
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.Comparator;
16 import java.util.HashMap;
17 import java.util.Iterator;
18 import java.util.List;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.events.SelectionAdapter;
23 import org.eclipse.swt.events.SelectionEvent;
24 import org.eclipse.swt.graphics.GC;
25 import org.eclipse.swt.graphics.Image;
26 import org.eclipse.swt.layout.GridData;
27 import org.eclipse.swt.layout.GridLayout;
28 import org.eclipse.swt.widgets.Button;
29 import org.eclipse.swt.widgets.Composite;
30 import org.eclipse.swt.widgets.Control;
31 import org.eclipse.swt.widgets.Label;
32 import org.eclipse.swt.widgets.Link;
33 import org.eclipse.swt.widgets.Table;
34 import org.eclipse.swt.widgets.TableColumn;
36 import org.eclipse.core.commands.Command;
37 import org.eclipse.core.commands.CommandManager;
38 import org.eclipse.core.commands.IParameter;
39 import org.eclipse.core.commands.Parameterization;
40 import org.eclipse.core.commands.ParameterizedCommand;
41 import org.eclipse.core.commands.common.NotDefinedException;
42 import org.eclipse.core.commands.contexts.ContextManager;
44 import org.eclipse.core.runtime.Assert;
46 import org.eclipse.jface.bindings.BindingManager;
47 import org.eclipse.jface.bindings.Scheme;
48 import org.eclipse.jface.bindings.TriggerSequence;
49 import org.eclipse.jface.layout.PixelConverter;
50 import org.eclipse.jface.resource.ImageDescriptor;
51 import org.eclipse.jface.resource.JFaceResources;
52 import org.eclipse.jface.viewers.ArrayContentProvider;
53 import org.eclipse.jface.viewers.CheckStateChangedEvent;
54 import org.eclipse.jface.viewers.CheckboxTableViewer;
55 import org.eclipse.jface.viewers.ICheckStateListener;
56 import org.eclipse.jface.viewers.IStructuredSelection;
57 import org.eclipse.jface.viewers.ITableLabelProvider;
58 import org.eclipse.jface.viewers.LabelProvider;
59 import org.eclipse.jface.viewers.ViewerComparator;
61 import org.eclipse.ui.PlatformUI;
62 import org.eclipse.ui.commands.ICommandService;
63 import org.eclipse.ui.dialogs.PreferencesUtil;
64 import org.eclipse.ui.keys.IBindingService;
65 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
67 import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
69 import org.eclipse.jdt.core.JavaCore;
71 import org.eclipse.jdt.internal.corext.util.Messages;
73 import org.eclipse.jdt.ui.PreferenceConstants;
75 import org.eclipse.jdt.internal.ui.JavaPlugin;
76 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
77 import org.eclipse.jdt.internal.ui.text.java.CompletionProposalCategory;
78 import org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerRegistry;
79 import org.eclipse.jdt.internal.ui.util.SWTUtil;
80 import org.eclipse.jdt.internal.ui.wizards.IStatusChangeListener;
87 public final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlock {
89 private static final Key PREF_EXCLUDED_CATEGORIES= getJDTUIKey(PreferenceConstants.CODEASSIST_EXCLUDED_CATEGORIES);
90 private static final Key PREF_CATEGORY_ORDER= getJDTUIKey(PreferenceConstants.CODEASSIST_CATEGORY_ORDER);
91 private static final Key PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC= getJDTCoreKey(JavaCore.TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC);
93 private static Key[] getAllKeys() {
95 PREF_EXCLUDED_CATEGORIES,
97 PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC
101 final class DefaultTableLabelProvider extends LabelProvider implements ITableLabelProvider {
104 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
106 public Image getColumnImage(Object element, int columnIndex) {
107 if (columnIndex == 0)
108 return ((ModelElement) element).getImage();
113 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
115 public String getColumnText(Object element, int columnIndex) {
116 switch (columnIndex) {
118 return ((ModelElement) element).getName();
120 return ((ModelElement) element).getKeybindingAsString();
122 Assert.isTrue(false);
128 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
131 public String getText(Object element) {
132 return getColumnText(element, 0); // needed to make the sorter work
136 private final class SeparateTableLabelProvider extends LabelProvider implements ITableLabelProvider {
139 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
141 public Image getColumnImage(Object element, int columnIndex) {
142 if (columnIndex == 0)
143 return ((ModelElement) element).getImage();
148 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
150 public String getColumnText(Object element, int columnIndex) {
151 switch (columnIndex) {
153 return ((ModelElement) element).getName();
155 Assert.isTrue(false);
161 private final Comparator<ModelElement> fCategoryComparator= new Comparator<ModelElement>() {
162 private int getRank(ModelElement o) {
166 public int compare(ModelElement o1, ModelElement o2) {
167 return getRank(o1) - getRank(o2);
171 public final class PreferenceModel {
172 public static final int LIMIT= 65535;
173 private static final String COLON= ":"; //$NON-NLS-1$
174 private static final String SEPARATOR= "\0"; //$NON-NLS-1$
176 private final List<ModelElement> fElements;
178 * The read-only list of elements.
180 final List<ModelElement> elements;
182 public PreferenceModel(CompletionProposalComputerRegistry registry) {
183 List<CompletionProposalCategory> categories= registry.getProposalCategories();
184 fElements= new ArrayList<ModelElement>();
185 for (Iterator<CompletionProposalCategory> it= categories.iterator(); it.hasNext();) {
186 CompletionProposalCategory category= it.next();
187 if (category.hasComputers()) {
188 fElements.add(new ModelElement(category, this));
191 Collections.sort(fElements, fCategoryComparator);
192 elements= Collections.unmodifiableList(fElements);
195 public void moveUp(ModelElement category) {
196 int index= fElements.indexOf(category);
198 ModelElement item= fElements.remove(index);
199 fElements.add(index - 1, item);
200 writeOrderPreference(null, false);
204 public void moveDown(ModelElement category) {
205 int index= fElements.indexOf(category);
206 if (index < fElements.size() - 1) {
207 ModelElement item= fElements.remove(index);
208 fElements.add(index + 1, item);
209 writeOrderPreference(null, false);
213 private void writeInclusionPreference(ModelElement changed, boolean isInDefaultCategory) {
214 StringBuffer buf= new StringBuffer();
215 for (Iterator<ModelElement> it= fElements.iterator(); it.hasNext();) {
216 ModelElement item= it.next();
217 boolean included= changed == item ? isInDefaultCategory : item.isInDefaultCategory();
219 buf.append(item.getId() + SEPARATOR);
222 String newValue= buf.toString();
223 String oldValue= setValue(PREF_EXCLUDED_CATEGORIES, newValue);
224 validateSettings(PREF_EXCLUDED_CATEGORIES, oldValue, newValue);
227 private void writeOrderPreference(ModelElement changed, boolean isSeparate) {
228 StringBuffer buf= new StringBuffer();
230 for (Iterator<ModelElement> it= fElements.iterator(); it.hasNext(); i++) {
231 ModelElement item= it.next();
232 boolean separate= changed == item ? isSeparate : item.isSeparateCommand();
233 int rank= separate ? i : i + LIMIT;
234 buf.append(item.getId() + COLON + rank + SEPARATOR);
237 String newValue= buf.toString();
238 String oldValue= setValue(PREF_CATEGORY_ORDER, newValue);
239 validateSettings(PREF_CATEGORY_ORDER, oldValue, newValue);
243 private boolean readInclusionPreference(CompletionProposalCategory cat) {
244 String[] ids= getTokens(getValue(PREF_EXCLUDED_CATEGORIES), SEPARATOR);
245 for (int i= 0; i < ids.length; i++) {
246 if (ids[i].equals(cat.getId()))
252 private int readOrderPreference(CompletionProposalCategory cat) {
253 String[] sortOrderIds= getTokens(getValue(PREF_CATEGORY_ORDER), SEPARATOR);
254 for (int i= 0; i < sortOrderIds.length; i++) {
255 String[] idAndRank= getTokens(sortOrderIds[i], COLON);
256 if (idAndRank[0].equals(cat.getId()))
257 return Integer.parseInt(idAndRank[1]);
262 public void update() {
263 Collections.sort(fElements, fCategoryComparator);
266 public int generated_3960557514315752614(CodeAssistAdvancedConfigurationBlock codeassistadvancedconfigurationblock, Table table, DefaultTableLabelProvider labelProvider, int minKeyWidth, int i) {
267 minKeyWidth= Math.max(minKeyWidth, codeassistadvancedconfigurationblock.computeWidth(table, labelProvider.getColumnText(elements.get(i), 1)));
271 public int generated_6182656614106464974(CodeAssistAdvancedConfigurationBlock codeassistadvancedconfigurationblock, Table table, TableColumn nameColumn, ITableLabelProvider labelProvider) {
272 codeassistadvancedconfigurationblock.fSeparateViewer.setInput(elements);
274 final int ICON_AND_CHECKBOX_WITH= 50;
275 final int HEADER_MARGIN= 20;
276 int minNameWidth= codeassistadvancedconfigurationblock.computeWidth(table, nameColumn.getText()) + HEADER_MARGIN;
277 for (int i= 0; i < elements.size(); i++) {
278 minNameWidth= Math.max(minNameWidth, codeassistadvancedconfigurationblock.computeWidth(table, labelProvider.getColumnText(elements.get(i), 0)) + ICON_AND_CHECKBOX_WITH);
283 public void generated_8683826732335652639(CodeAssistAdvancedConfigurationBlock codeassistadvancedconfigurationblock, ModelElement item) {
285 int index= codeassistadvancedconfigurationblock.getSelectionIndex();
286 codeassistadvancedconfigurationblock.fUpButton.setEnabled(index > 0);
287 codeassistadvancedconfigurationblock.fDownButton.setEnabled(index < elements.size() - 1);
289 codeassistadvancedconfigurationblock.fUpButton.setEnabled(false);
290 codeassistadvancedconfigurationblock.fDownButton.setEnabled(false);
294 public int generated_4704470300960025110(CodeAssistAdvancedConfigurationBlock codeassistadvancedconfigurationblock) {
295 final int size= elements.size();
300 public final class ModelElement {
301 public final CompletionProposalCategory fCategory;
302 private final Command fCommand;
303 private final IParameter fParam;
304 private final PreferenceModel fPreferenceModel;
306 ModelElement(CompletionProposalCategory category, PreferenceModel model) {
308 ICommandService commandSvc= (ICommandService) PlatformUI.getWorkbench().getAdapter(ICommandService.class);
309 fCommand= commandSvc.getCommand("org.eclipse.jdt.ui.specific_content_assist.command"); //$NON-NLS-1$
312 type= fCommand.getParameters()[0];
313 } catch (NotDefinedException x) {
314 Assert.isTrue(false);
318 fPreferenceModel= model;
321 return CodeAssistAdvancedConfigurationBlock.this.getImage(fCategory.getImageDescriptor());
324 return fCategory.getDisplayName();
326 String getKeybindingAsString() {
327 final Parameterization[] params= { new Parameterization(fParam, fCategory.getId()) };
328 final ParameterizedCommand pCmd= new ParameterizedCommand(fCommand, params);
329 String key= getKeyboardShortcut(pCmd);
332 boolean isInDefaultCategory() {
333 return fPreferenceModel.readInclusionPreference(fCategory);
335 void setInDefaultCategory(boolean included) {
336 if (included != isInDefaultCategory())
337 fPreferenceModel.writeInclusionPreference(this, included);
340 return fCategory.getId();
343 int rank= getInternalRank();
344 if (rank > PreferenceModel.LIMIT)
345 return rank - PreferenceModel.LIMIT;
349 fPreferenceModel.moveUp(this);
352 fPreferenceModel.moveDown(this);
354 private int getInternalRank() {
355 return fPreferenceModel.readOrderPreference(fCategory);
357 boolean isSeparateCommand() {
358 return getInternalRank() < PreferenceModel.LIMIT;
361 void setSeparateCommand(boolean separate) {
362 if (separate != isSeparateCommand())
363 fPreferenceModel.writeOrderPreference(this, separate);
367 fCategory.setIncluded(isInDefaultCategory());
368 int rank= getInternalRank();
369 fCategory.generated_7994815616900856385(rank);
373 /** element type: {@link ModelElement}. */
374 private final PreferenceModel fModel;
375 private final Map<ImageDescriptor, Image> fImages= new HashMap<ImageDescriptor, Image>();
377 private CheckboxTableViewer fDefaultViewer;
378 private CheckboxTableViewer fSeparateViewer;
379 private Button fUpButton;
380 private Button fDownButton;
382 CodeAssistAdvancedConfigurationBlock(IStatusChangeListener statusListener, IWorkbenchPreferenceContainer container) {
383 super(statusListener, null, getAllKeys(), container);
384 fModel= new PreferenceModel(CompletionProposalComputerRegistry.getDefault());
388 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#createContents(org.eclipse.swt.widgets.Composite)
391 protected Control createContents(Composite parent) {
393 ScrolledPageContent scrolled= new ScrolledPageContent(parent, SWT.H_SCROLL | SWT.V_SCROLL);
395 scrolled.generated_1458660277537825336();
397 Composite composite= new Composite(scrolled, SWT.NONE);
399 GridLayout layout= new GridLayout(columns, false);
400 layout.marginWidth= 0;
401 layout.marginHeight= 0;
402 composite.setLayout(layout);
405 createDefaultLabel(composite, columns);
406 createDefaultViewer(composite, columns);
407 createKeysLink(composite, columns);
409 createFiller(composite, columns);
411 createSeparateLabel(composite, columns);
412 createSeparateSection(composite);
414 createFiller(composite, columns);
416 createParameterTimeoutControl(composite, columns);
419 if (fModel.elements.size() > 0) {
420 fDefaultViewer.getTable().select(0);
421 fSeparateViewer.getTable().select(0);
422 handleTableSelection();
425 scrolled.setContent(composite);
426 scrolled.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
430 private void createDefaultLabel(Composite composite, int h_span) {
431 final ICommandService commandSvc= (ICommandService) PlatformUI.getWorkbench().getAdapter(ICommandService.class);
432 final Command command= commandSvc.getCommand(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
433 ParameterizedCommand pCmd= new ParameterizedCommand(command, null);
434 String key= getKeyboardShortcut(pCmd);
436 key= PreferencesMessages.CodeAssistAdvancedConfigurationBlock_no_shortcut;
438 PixelConverter pixelConverter= new PixelConverter(composite);
439 int width= pixelConverter.convertWidthInCharsToPixels(40);
441 Label label= new Label(composite, SWT.NONE | SWT.WRAP);
442 label.setText(Messages.format(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_page_description, new Object[] { key }));
443 GridData gd= new GridData(GridData.FILL, GridData.FILL, true, false, h_span, 1);
445 label.setLayoutData(gd);
447 createFiller(composite, h_span);
449 label= new Label(composite, SWT.NONE | SWT.WRAP);
450 label.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_default_table_description);
451 gd= new GridData(GridData.FILL, GridData.FILL, true, false, h_span, 1);
453 label.setLayoutData(gd);
456 private void createDefaultViewer(Composite composite, int h_span) {
457 fDefaultViewer= CheckboxTableViewer.newCheckList(composite, SWT.SINGLE | SWT.BORDER);
458 Table table= fDefaultViewer.getTable();
459 table.setHeaderVisible(true);
460 table.setLinesVisible(false);
461 table.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, false, false, h_span, 1));
463 TableColumn nameColumn= new TableColumn(table, SWT.NONE);
464 nameColumn.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_default_table_category_column_title);
465 nameColumn.setResizable(false);
466 TableColumn keyColumn= new TableColumn(table, SWT.NONE);
467 keyColumn.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_default_table_keybinding_column_title);
468 keyColumn.setResizable(false);
470 fDefaultViewer.addCheckStateListener(new ICheckStateListener() {
471 public void checkStateChanged(CheckStateChangedEvent event) {
472 boolean checked= event.getChecked();
473 ModelElement element= (ModelElement) event.getElement();
474 element.setInDefaultCategory(checked);
478 fDefaultViewer.setContentProvider(new ArrayContentProvider());
480 DefaultTableLabelProvider labelProvider= new DefaultTableLabelProvider();
481 fDefaultViewer.setLabelProvider(labelProvider);
482 fDefaultViewer.setInput(fModel.elements);
483 fDefaultViewer.setComparator(new ViewerComparator()); // sort alphabetically
485 final int ICON_AND_CHECKBOX_WITH= 50;
486 final int HEADER_MARGIN= 20;
487 int minNameWidth= computeWidth(table, nameColumn.getText()) + HEADER_MARGIN;
488 int minKeyWidth= computeWidth(table, keyColumn.getText()) + HEADER_MARGIN;
489 for (int i= 0; i < fModel.elements.size(); i++) {
490 minNameWidth= Math.max(minNameWidth, computeWidth(table, labelProvider.getColumnText(fModel.elements.get(i), 0)) + ICON_AND_CHECKBOX_WITH);
491 minKeyWidth= fModel.generated_3960557514315752614(this, table, labelProvider, minKeyWidth, i);
494 nameColumn.setWidth(minNameWidth);
495 keyColumn.setWidth(minKeyWidth);
498 private void createKeysLink(Composite composite, int h_span) {
499 Link link= new Link(composite, SWT.NONE | SWT.WRAP);
500 link.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_key_binding_hint);
501 link.addSelectionListener(new SelectionAdapter() {
503 public void widgetSelected(SelectionEvent e) {
504 PreferencesUtil.createPreferenceDialogOn(getShell(), e.text, null, null);
508 PixelConverter pixelConverter= new PixelConverter(composite);
509 int width= pixelConverter.convertWidthInCharsToPixels(40);
511 // limit the size of the Link as it would take all it can get
512 GridData gd= new GridData(GridData.FILL, GridData.FILL, false, false, h_span, 1);
514 link.setLayoutData(gd);
517 private void createFiller(Composite composite, int h_span) {
518 Label filler= new Label(composite, SWT.NONE);
519 filler.setVisible(false);
520 filler.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, h_span, 1));
523 private void createSeparateLabel(Composite composite, int h_span) {
524 PixelConverter pixelConverter= new PixelConverter(composite);
525 int width= pixelConverter.convertWidthInCharsToPixels(40);
527 Label label= new Label(composite, SWT.NONE | SWT.WRAP);
528 label.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_separate_table_description);
529 GridData gd= new GridData(GridData.FILL, GridData.FILL, false, false, h_span, 1);
531 label.setLayoutData(gd);
534 private void createSeparateSection(Composite composite) {
535 createSeparateViewer(composite);
536 createButtonList(composite);
539 private void createSeparateViewer(Composite composite) {
540 fSeparateViewer= CheckboxTableViewer.newCheckList(composite, SWT.SINGLE | SWT.BORDER);
541 Table table= fSeparateViewer.getTable();
542 table.setHeaderVisible(false);
543 table.setLinesVisible(false);
544 table.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false, 1, 1));
546 TableColumn nameColumn= new TableColumn(table, SWT.NONE);
547 nameColumn.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_separate_table_category_column_title);
548 nameColumn.setResizable(false);
550 fSeparateViewer.setContentProvider(new ArrayContentProvider());
552 ITableLabelProvider labelProvider= new SeparateTableLabelProvider();
553 fSeparateViewer.setLabelProvider(labelProvider);
554 int minNameWidth= fModel.generated_6182656614106464974(this, table, nameColumn, labelProvider);
556 nameColumn.setWidth(minNameWidth);
558 fSeparateViewer.addCheckStateListener(new ICheckStateListener() {
559 public void checkStateChanged(CheckStateChangedEvent event) {
560 boolean checked= event.getChecked();
561 ModelElement element= (ModelElement) event.getElement();
562 element.setSeparateCommand(checked);
566 table.addSelectionListener(new SelectionAdapter() {
568 public void widgetSelected(SelectionEvent e) {
569 handleTableSelection();
575 private void createButtonList(Composite parent) {
576 Composite composite= new Composite(parent, SWT.NONE);
577 composite.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
579 GridLayout layout= new GridLayout();
580 layout.marginWidth= 0;
581 layout.marginHeight= 0;
582 composite.setLayout(layout);
584 fUpButton= new Button(composite, SWT.PUSH | SWT.CENTER);
585 fUpButton.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_Up);
586 fUpButton.addSelectionListener(new SelectionAdapter() {
588 public void widgetSelected(SelectionEvent e) {
589 int index= getSelectionIndex();
591 fModel.elements.get(index).moveUp();
592 fSeparateViewer.refresh();
593 handleTableSelection();
597 fUpButton.setLayoutData(new GridData());
598 SWTUtil.setButtonDimensionHint(fUpButton);
600 fDownButton= new Button(composite, SWT.PUSH | SWT.CENTER);
601 fDownButton.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_Down);
602 fDownButton.addSelectionListener(new SelectionAdapter() {
604 public void widgetSelected(SelectionEvent e) {
605 int index= getSelectionIndex();
607 fModel.elements.get(index).moveDown();
608 fSeparateViewer.refresh();
609 handleTableSelection();
613 fDownButton.setLayoutData(new GridData());
614 SWTUtil.setButtonDimensionHint(fDownButton);
617 private void createParameterTimeoutControl(Composite composite, int h_span) {
618 Composite timeoutComposite= new Composite(composite, SWT.NONE);
619 GridLayout layout= new GridLayout(4, false);
620 layout.marginWidth= 0;
621 layout.marginHeight= 0;
622 timeoutComposite.setLayout(layout);
623 GridData gd= new GridData(GridData.FILL, GridData.FILL, true, false, h_span, 1);
624 timeoutComposite.setLayoutData(gd);
626 PixelConverter pixelConverter= new PixelConverter(composite);
627 String str= PreferencesMessages.CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout;
628 addTextField(timeoutComposite, str, PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC, 0, pixelConverter.convertWidthInCharsToPixels(7));
632 private void handleTableSelection() {
633 ModelElement item= getSelectedItem();
634 fModel.generated_8683826732335652639(this, item);
637 private ModelElement getSelectedItem() {
638 return (ModelElement) ((IStructuredSelection) fSeparateViewer.getSelection()).getFirstElement();
641 private int getSelectionIndex() {
642 return fSeparateViewer.getTable().getSelectionIndex();
646 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
649 protected void updateControls() {
650 super.updateControls();
653 updateCheckedState();
654 fDefaultViewer.refresh();
655 fSeparateViewer.refresh();
656 handleTableSelection();
659 private void updateCheckedState() {
660 final int size= fModel.generated_4704470300960025110(this);
661 List<ModelElement> defaultChecked= new ArrayList<ModelElement>(size);
662 List<ModelElement> separateChecked= new ArrayList<ModelElement>(size);
664 for (Iterator<ModelElement> it= fModel.elements.iterator(); it.hasNext();) {
665 ModelElement element= it.next();
666 if (element.isInDefaultCategory())
667 defaultChecked.add(element);
668 if (element.isSeparateCommand())
669 separateChecked.add(element);
672 fDefaultViewer.setCheckedElements(defaultChecked.toArray(new Object[defaultChecked.size()]));
673 fSeparateViewer.setCheckedElements(separateChecked.toArray(new Object[separateChecked.size()]));
677 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#processChanges(org.eclipse.ui.preferences.IWorkbenchPreferenceContainer)
680 protected boolean processChanges(IWorkbenchPreferenceContainer container) {
681 for (Iterator<ModelElement> it= fModel.elements.iterator(); it.hasNext();) {
682 ModelElement item= it.next();
686 return super.processChanges(container);
690 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#validateSettings(org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock.Key, java.lang.String, java.lang.String)
693 protected void validateSettings(Key changedKey, String oldValue, String newValue) {
694 if (changedKey == PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC) {
695 final StatusInfo status= new StatusInfo();
696 status.generated_9109049189476184915(newValue, this);
701 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#getFullBuildDialogStrings(boolean)
704 protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
705 // no builds triggered by our settings
710 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#dispose()
713 public void dispose() {
714 for (Iterator<Image> it= fImages.values().iterator(); it.hasNext();) {
715 Image image= it.next();
722 private int computeWidth(Control control, String name) {
725 GC gc= new GC(control);
727 gc.setFont(JFaceResources.getDialogFont());
728 return gc.stringExtent(name).x + 10;
734 private static BindingManager fgLocalBindingManager;
736 fgLocalBindingManager= new BindingManager(new ContextManager(), new CommandManager());
737 final IBindingService bindingService= (IBindingService)PlatformUI.getWorkbench().getService(IBindingService.class);
738 final Scheme[] definedSchemes= bindingService.getDefinedSchemes();
739 if (definedSchemes != null) {
741 for (int i = 0; i < definedSchemes.length; i++) {
742 final Scheme scheme= definedSchemes[i];
743 final Scheme copy= fgLocalBindingManager.getScheme(scheme.getId());
744 copy.define(scheme.getName(), scheme.getDescription(), scheme.getParentId());
746 } catch (final NotDefinedException e) {
750 fgLocalBindingManager.setLocale(bindingService.getLocale());
751 fgLocalBindingManager.setPlatform(bindingService.getPlatform());
754 private static String getKeyboardShortcut(ParameterizedCommand command) {
755 IBindingService bindingService= (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
756 fgLocalBindingManager.setBindings(bindingService.getBindings());
758 Scheme activeScheme= bindingService.getActiveScheme();
759 if (activeScheme != null)
760 fgLocalBindingManager.setActiveScheme(activeScheme);
761 } catch (NotDefinedException e) {
765 TriggerSequence[] bindings= fgLocalBindingManager.getActiveBindingsDisregardingContextFor(command);
766 if (bindings.length > 0)
767 return bindings[0].format();
771 private Image getImage(ImageDescriptor imgDesc) {
775 Image img= fImages.get(imgDesc);
777 img= imgDesc.createImage(false);
778 fImages.put(imgDesc, img);