/******************************************************************************* * Copyright (c) 2010, 2013 Andrew Gvozdev and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Andrew Gvozdev - initial API and implementation * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.internal.ui.language.settings.providers; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.ui.CDTSharedImages; import org.eclipse.cdt.ui.newui.AbstractCPropertyTab; import org.eclipse.cdt.ui.newui.AbstractPropertyDialog; import org.eclipse.cdt.internal.ui.ImageCombo; import org.eclipse.cdt.internal.ui.newui.Messages; /** * @noextend This class is not intended to be subclassed by clients. */ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { private static final String SLASH = "/"; //$NON-NLS-1$ private final ICConfigurationDescription cfgDescription; private final IProject project; private final ICLanguageSettingEntry initialEntry; private final int initialKind; private final boolean clearValue; private Composite compositeArea; private Label iconComboKind; private ImageCombo comboKind; private ImageCombo comboPathCategory; private Label labelInput; public Text inputName; private Label checkBoxValue; public Text inputValue; private Button buttonBrowse; private Button buttonVars; private Button checkBoxBuiltIn; private Button checkBoxSystem; private Button checkBoxFramework; private Button buttonOk; private Button buttonCancel; private static final int COMBO_INDEX_INCLUDE_DIR = 0; private static final int COMBO_INDEX_MACRO = 1; private static final int COMBO_INDEX_INCLUDE_FILE = 2; private static final int COMBO_INDEX_MACRO_FILE = 3; private static final int COMBO_INDEX_LIBRARY_DIR = 4; private static final int COMBO_INDEX_LIBRARY_FILE = 5; final private String[] comboKindItems = { Messages.LanguageSettingEntryDialog_IncludeDirectory, Messages.LanguageSettingEntryDialog_PreporocessorMacro, Messages.LanguageSettingEntryDialog_IncludeFile, Messages.LanguageSettingEntryDialog_PreprocessorMacroFile, Messages.LanguageSettingEntryDialog_LibraryPath, Messages.LanguageSettingEntryDialog_Library, }; final private Image[] comboKindImages = { CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_INCLUDES_FOLDER), CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_MACRO), CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_TUNIT_HEADER), CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_MACROS_FILE), CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_LIBRARY_FOLDER), CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_LIBRARY), }; private static final int COMBO_PATH_INDEX_PROJECT = 0; private static final int COMBO_PATH_INDEX_WORKSPACE = 1; private static final int COMBO_PATH_INDEX_FILESYSTEM = 2; final private String[] pathCategories = { Messages.LanguageSettingEntryDialog_ProjectPath, Messages.LanguageSettingEntryDialog_WorkspacePath, Messages.LanguageSettingEntryDialog_Filesystem, }; final private Image[] pathCategoryImages = { CDTSharedImages.getImage(CDTSharedImages.IMG_ETOOL_PROJECT), CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_WORKSPACE), CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_FILESYSTEM), }; private ICLanguageSettingEntry[] entries; public LanguageSettingEntryDialog(Shell parent, ICConfigurationDescription cfgDescription, int kind) { super(parent, ""); //$NON-NLS-1$ this.cfgDescription = cfgDescription; this.project = cfgDescription.getProjectDescription().getProject(); this.initialEntry = null; this.initialKind = kind; this.clearValue = true; } /** * This constructor is intended to be used with {@code clearValue=true} for "Add" dialogs * where provided entry is used as a template. */ public LanguageSettingEntryDialog(Shell parent, ICConfigurationDescription cfgDescription, ICLanguageSettingEntry entry, boolean clearValue) { super(parent, ""); //$NON-NLS-1$ this.cfgDescription = cfgDescription; this.project = cfgDescription.getProjectDescription().getProject(); this.initialEntry = entry; this.initialKind = entry != null ? entry.getKind() : ICSettingEntry.INCLUDE_PATH; this.clearValue = clearValue; } /** * This constructor is used for "Edit" dialogs to edit provided entry */ public LanguageSettingEntryDialog(Shell parent, ICConfigurationDescription cfgDescription, ICLanguageSettingEntry entry) { this(parent, cfgDescription, entry, false); } private int comboIndexToKind(int index) { int kind=0; switch (index) { case COMBO_INDEX_INCLUDE_DIR: kind = ICSettingEntry.INCLUDE_PATH; break; case COMBO_INDEX_MACRO: kind = ICSettingEntry.MACRO; break; case COMBO_INDEX_INCLUDE_FILE: kind = ICSettingEntry.INCLUDE_FILE; break; case COMBO_INDEX_MACRO_FILE: kind = ICSettingEntry.MACRO_FILE; break; case COMBO_INDEX_LIBRARY_DIR: kind = ICSettingEntry.LIBRARY_PATH; break; case COMBO_INDEX_LIBRARY_FILE: kind = ICSettingEntry.LIBRARY_FILE; break; } return kind; } private int kindToComboIndex(int kind) { int index= 0; switch (kind) { case ICSettingEntry.INCLUDE_PATH: index = COMBO_INDEX_INCLUDE_DIR; break; case ICSettingEntry.MACRO: index = COMBO_INDEX_MACRO; break; case ICSettingEntry.INCLUDE_FILE: index = COMBO_INDEX_INCLUDE_FILE; break; case ICSettingEntry.MACRO_FILE: index = COMBO_INDEX_MACRO_FILE; break; case ICSettingEntry.LIBRARY_PATH: index = COMBO_INDEX_LIBRARY_DIR; break; case ICSettingEntry.LIBRARY_FILE: index = COMBO_INDEX_LIBRARY_FILE; break; } return index; } @Override protected Control createDialogArea(Composite parent) { parent.setLayout(new GridLayout(4, false)); GridData gd; // Composite for the dialog area compositeArea = new Composite (parent, SWT.NONE); gd = new GridData(GridData.FILL_HORIZONTAL); gd.verticalAlignment = SWT.TOP; gd.horizontalSpan = 7; compositeArea.setLayoutData(gd); compositeArea.setLayout(new GridLayout(7, false)); // Icon for kind iconComboKind = new Label (compositeArea, SWT.NONE); gd = new GridData(); gd.verticalAlignment = SWT.TOP; gd.horizontalAlignment = SWT.RIGHT; iconComboKind.setLayoutData(gd); iconComboKind.setText(Messages.LanguageSettingEntryDialog_SelectKind); int kindToComboIndex = kindToComboIndex(initialKind); iconComboKind.setImage(comboKindImages[kindToComboIndex]); // Combo for the setting entry kind comboKind = new ImageCombo(compositeArea, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER); for (int i = 0; i < comboKindItems.length; i++) { comboKind.add(comboKindItems[i], comboKindImages[i]); } comboKind.setText(comboKindItems[kindToComboIndex]); comboKind.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { updateImages(); setButtons(); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); comboKind.setEnabled(clearValue); // Icon for path category final Label comboPathCategoryIcon = new Label (compositeArea, SWT.NONE); gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_END); gd.verticalAlignment = SWT.TOP; gd.widthHint = 15; comboPathCategoryIcon.setLayoutData(gd); comboPathCategoryIcon.setText(""); //$NON-NLS-1$ // Combo for path category comboPathCategory = new ImageCombo(compositeArea, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER); for (int i = 0; i < pathCategories.length; i++) { comboPathCategory.add(pathCategories[i], pathCategoryImages[i]); } int pcindex = COMBO_PATH_INDEX_PROJECT; if (initialEntry != null) { if ((initialEntry.getFlags() & ICSettingEntry.VALUE_WORKSPACE_PATH) == 0) { pcindex = COMBO_PATH_INDEX_FILESYSTEM; } else { if (LanguageSettingsImages.isProjectRelative(initialEntry)) { pcindex = COMBO_PATH_INDEX_PROJECT; } else { pcindex = COMBO_PATH_INDEX_WORKSPACE; } } } comboPathCategory.setText(pathCategories[pcindex]); gd = new GridData(SWT.FILL, SWT.NONE, false, false); gd.verticalAlignment = SWT.TOP; gd.horizontalSpan = 4; comboPathCategory.setLayoutData(gd); comboPathCategory.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { updateImages(); setButtons(); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); // Dir/File/Name label labelInput = new Label(compositeArea, SWT.NONE); labelInput.setText(Messages.LanguageSettingEntryDialog_Directory); gd = new GridData(); labelInput.setLayoutData(gd); // Dir/File/Name input inputName = new Text(compositeArea, SWT.SINGLE | SWT.BORDER); if (initialEntry != null && !clearValue) { String name = initialEntry.getName(); if (pcindex == COMBO_PATH_INDEX_PROJECT && LanguageSettingsImages.isProjectRelative(initialEntry)) { name = LanguageSettingsImages.toProjectRelative(name); } inputName.setText(name); } gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); gd.horizontalSpan = 2; gd.widthHint = 200; inputName.setLayoutData(gd); inputName.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { setButtons(); }}); inputName.setFocus(); inputName.setSelection(0, inputName.getText().length()); // Value label checkBoxValue = new Label(compositeArea, SWT.NONE); checkBoxValue.setText(Messages.LanguageSettingEntryDialog_Value); gd = new GridData(); checkBoxValue.setLayoutData(gd); // Path button buttonBrowse = new Button(compositeArea, SWT.PUSH); buttonBrowse.setText("..."); //$NON-NLS-1$ buttonBrowse.setImage(pathCategoryImages[0]); buttonBrowse.setLayoutData(new GridData()); buttonBrowse.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { buttonPressed(event); } }); // Variables button buttonVars = new Button(compositeArea, SWT.PUSH); buttonVars.setText(AbstractCPropertyTab.VARIABLESBUTTON_NAME); buttonVars.setLayoutData(new GridData()); buttonVars.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { buttonPressed(event); } }); // Value input. Located after the other controls to get sufficient width int comboPathWidth = comboPathCategory.computeSize(SWT.DEFAULT, SWT.NONE).x; inputValue = new Text(compositeArea, SWT.SINGLE | SWT.BORDER); if (initialEntry != null && !clearValue) { inputValue.setText(initialEntry.getValue()); } gd = new GridData(SWT.FILL, SWT.NONE, false, false); gd.widthHint = comboPathWidth; inputValue.setLayoutData(gd); if (initialEntry != null && initialKind == ICSettingEntry.MACRO && !clearValue) { inputValue.setFocus(); inputValue.setSelection(0, inputValue.getText().length()); } // Checkboxes Composite compCheckboxes = new Composite (parent, SWT.NONE); gd = new GridData(GridData.FILL_HORIZONTAL); gd.verticalAlignment = SWT.TOP; gd.horizontalSpan = 4; compCheckboxes.setLayoutData(gd); compCheckboxes.setLayout(new GridLayout(1, false)); // Checkbox "Built-In" checkBoxBuiltIn = new Button(compCheckboxes, SWT.CHECK); checkBoxBuiltIn.setText(Messages.LanguageSettingEntryDialog_BuiltInFlag); checkBoxBuiltIn.setSelection(initialEntry != null && (initialEntry.getFlags() & ICSettingEntry.BUILTIN) != 0); gd = new GridData(GridData.FILL_HORIZONTAL); checkBoxBuiltIn.setLayoutData(gd); checkBoxBuiltIn.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { updateImages(); setButtons(); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); // Checkbox "Contains system includes" checkBoxSystem = new Button(compCheckboxes, SWT.CHECK); checkBoxSystem.setText(Messages.LanguageSettingEntryDialog_ContainsSystemHeaders); checkBoxSystem.setSelection(initialEntry != null && (initialEntry.getFlags() & ICSettingEntry.LOCAL) == 0); gd = new GridData(GridData.FILL_HORIZONTAL); checkBoxSystem.setLayoutData(gd); checkBoxSystem.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { updateImages(); setButtons(); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); // Checkbox "Framework folder" checkBoxFramework = new Button(compCheckboxes, SWT.CHECK); checkBoxFramework.setText(Messages.LanguageSettingEntryDialog_FrameworkFolder); checkBoxFramework.setSelection(initialEntry != null && (initialEntry.getFlags() & ICSettingEntry.FRAMEWORKS_MAC) != 0); gd = new GridData(GridData.FILL_HORIZONTAL); checkBoxFramework.setLayoutData(gd); checkBoxFramework.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { updateImages(); setButtons(); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); // Buttons Composite compButtons = new Composite (parent, SWT.FILL); gd = new GridData(SWT.RIGHT, SWT.BOTTOM, false, false); gd.horizontalSpan = 4; gd.grabExcessVerticalSpace = true; compButtons.setLayoutData(gd); compButtons.setLayout(new GridLayout(4, false)); // Placeholder Label placeholder = new Label(compButtons, 0); placeholder.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL)); // Button OK buttonOk = new Button(compButtons, SWT.PUSH); buttonOk.setText(IDialogConstants.OK_LABEL); gd = new GridData(); gd.widthHint = buttonVars.computeSize(SWT.DEFAULT,SWT.NONE).x; buttonOk.setLayoutData(gd); buttonOk.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { buttonPressed(event); } }); // Button Cancel buttonCancel = new Button(compButtons, SWT.PUSH); buttonCancel.setText(IDialogConstants.CANCEL_LABEL); gd = new GridData(); gd.widthHint = buttonVars.computeSize(SWT.DEFAULT, SWT.NONE).x; buttonCancel.setLayoutData(gd); buttonCancel.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { buttonPressed(event); } }); parent.getShell().setDefaultButton(buttonOk); parent.pack(); updateImages(); setButtons(); return parent; } private void setButtons() { int kindSelectionIndex = comboKind.getSelectionIndex(); boolean isIncludeDirSelected = (kindSelectionIndex == COMBO_INDEX_INCLUDE_DIR); checkBoxSystem.setVisible(isIncludeDirSelected); checkBoxFramework.setVisible(isIncludeDirSelected); boolean isMacroSelected = (kindSelectionIndex == COMBO_INDEX_MACRO); comboPathCategory.setVisible(!isMacroSelected); buttonBrowse.setVisible(!isMacroSelected); buttonVars.setVisible(!isMacroSelected); checkBoxValue.setVisible(isMacroSelected); inputValue.setVisible(isMacroSelected); ((GridData) checkBoxValue.getLayoutData()).exclude = !isMacroSelected; ((GridData) inputValue.getLayoutData()).exclude = !isMacroSelected; ((GridData) buttonBrowse.getLayoutData()).exclude = isMacroSelected; ((GridData) buttonVars.getLayoutData()).exclude = isMacroSelected; switch (kindSelectionIndex) { case COMBO_INDEX_INCLUDE_DIR: case COMBO_INDEX_LIBRARY_DIR: labelInput.setText(Messages.LanguageSettingEntryDialog_Path); break; case COMBO_INDEX_INCLUDE_FILE: case COMBO_INDEX_MACRO_FILE: case COMBO_INDEX_LIBRARY_FILE: labelInput.setText(Messages.LanguageSettingEntryDialog_File); break; case COMBO_INDEX_MACRO: default: labelInput.setText(Messages.LanguageSettingEntryDialog_Name); } inputValue.setEnabled(isMacroSelected); if (isMacroSelected) { buttonOk.setEnabled(!inputName.getText().trim().isEmpty()); } else { int indexPathKind = comboPathCategory.getSelectionIndex(); boolean isProjectSelected = (indexPathKind == COMBO_PATH_INDEX_PROJECT); boolean isWorkspaceSelected = (indexPathKind == COMBO_PATH_INDEX_WORKSPACE); boolean isFilesystemSelected = (indexPathKind == COMBO_PATH_INDEX_FILESYSTEM); String path = inputName.getText().trim(); if (path.isEmpty()) { buttonOk.setEnabled(false); } else { buttonOk.setEnabled((isProjectSelected && !path.startsWith(SLASH)) || (isWorkspaceSelected && path.startsWith(SLASH)) || isFilesystemSelected); } buttonVars.setEnabled(isFilesystemSelected); } compositeArea.layout(true); } @Override public void buttonPressed(SelectionEvent e) { String str = null; if (e.widget.equals(buttonOk)) { text1 = inputName.getText().trim(); result = true; String name = text1; int flagBuiltIn = checkBoxBuiltIn.isVisible() && checkBoxBuiltIn.getSelection() ? ICSettingEntry.BUILTIN : 0; int flags = flagBuiltIn; int kind = comboKind.getSelectionIndex(); if (kind != COMBO_INDEX_MACRO) { int flagSystem = checkBoxSystem.isVisible() && checkBoxSystem.getSelection() ? 0 : ICSettingEntry.LOCAL; int flagFramework = checkBoxFramework.isVisible() && checkBoxFramework.getSelection() ? ICSettingEntry.FRAMEWORKS_MAC : 0; int indexPathKind = comboPathCategory.getSelectionIndex(); boolean isProjectPath = indexPathKind == COMBO_PATH_INDEX_PROJECT; boolean isWorkspacePath = indexPathKind == COMBO_PATH_INDEX_WORKSPACE; int flagWorkspace = (isWorkspacePath || isProjectPath) ? ICSettingEntry.VALUE_WORKSPACE_PATH : 0; int flagResolved = isWorkspacePath && !name.contains("$") ? ICSettingEntry.RESOLVED : 0; //$NON-NLS-1$ flags = flagBuiltIn | flagWorkspace | flagResolved | flagSystem | flagFramework; if (isProjectPath) { name = LanguageSettingsImages.fromProjectRelative(name); } } ICLanguageSettingEntry entry = null; switch (comboKind.getSelectionIndex()) { case COMBO_INDEX_INCLUDE_DIR: entry = CDataUtil.createCIncludePathEntry(name, flags); break; case COMBO_INDEX_MACRO: // Note that value=null is not supported by CMacroEntry String value = inputValue.getText().trim(); entry = CDataUtil.createCMacroEntry(name, value, flags); break; case COMBO_INDEX_INCLUDE_FILE: entry = CDataUtil.createCIncludeFileEntry(name, flags); break; case COMBO_INDEX_MACRO_FILE: entry = CDataUtil.createCMacroFileEntry(name, flags); break; case COMBO_INDEX_LIBRARY_DIR: entry = CDataUtil.createCLibraryPathEntry(name, flags); break; case COMBO_INDEX_LIBRARY_FILE: entry = CDataUtil.createCLibraryFileEntry(name, flags); break; default: result = false; } entries = new ICLanguageSettingEntry[] {entry}; shell.dispose(); } else if (e.widget.equals(buttonCancel)) { shell.dispose(); } else if (e.widget.equals(buttonBrowse)) { boolean isDirectory = false; boolean isFile = false; switch (comboKind.getSelectionIndex()) { case COMBO_INDEX_INCLUDE_DIR: case COMBO_INDEX_LIBRARY_DIR: isDirectory = true; break; case COMBO_INDEX_INCLUDE_FILE: case COMBO_INDEX_MACRO_FILE: case COMBO_INDEX_LIBRARY_FILE: isFile = true; break; case COMBO_INDEX_MACRO: break; } if (isDirectory) { switch (comboPathCategory.getSelectionIndex()) { case COMBO_PATH_INDEX_WORKSPACE: str = AbstractCPropertyTab.getWorkspaceDirDialog(shell, inputName.getText().trim()); break; case COMBO_PATH_INDEX_PROJECT: str = AbstractCPropertyTab.getProjectDirDialog(shell, inputName.getText().trim(), project); break; case COMBO_PATH_INDEX_FILESYSTEM: str = AbstractCPropertyTab.getFileSystemDirDialog(shell, inputName.getText().trim()); break; } } else if (isFile) { switch (comboPathCategory.getSelectionIndex()) { case COMBO_PATH_INDEX_WORKSPACE: str = AbstractCPropertyTab.getWorkspaceFileDialog(shell, inputName.getText().trim()); break; case COMBO_PATH_INDEX_PROJECT: str = AbstractCPropertyTab.getProjectFileDialog(shell, inputName.getText().trim(), project); break; case COMBO_PATH_INDEX_FILESYSTEM: str = AbstractCPropertyTab.getFileSystemFileDialog(shell, inputName.getText().trim()); break; } } if (str != null) { str = strip_wsp(str); if (comboPathCategory.getSelectionIndex() == COMBO_PATH_INDEX_PROJECT && str.startsWith(SLASH + project.getName() + SLASH)) { str = str.substring(project.getName().length() + 2); } inputName.setText(str); } } else if (e.widget.equals(buttonVars)) { str = AbstractCPropertyTab.getVariableDialog(shell, cfgDescription); if (str != null) inputName.insert(str); } } public ICLanguageSettingEntry[] getEntries() { return entries; } private void updateImages() { int indexEntryKind = comboKind.getSelectionIndex(); int indexPathKind = comboPathCategory.getSelectionIndex(); shell.setText(Messages.LanguageSettingEntryDialog_Add + comboKindItems[indexEntryKind]); int kind = comboIndexToKind(indexEntryKind); int flagBuiltin = checkBoxBuiltIn.getSelection() ? ICSettingEntry.BUILTIN : 0; int flagSystem = checkBoxSystem.getSelection() ? 0 : ICSettingEntry.LOCAL; int flagFramework = checkBoxFramework.getSelection() ? ICSettingEntry.FRAMEWORKS_MAC : 0; boolean isWorkspacePath = indexPathKind == COMBO_PATH_INDEX_PROJECT || indexPathKind == COMBO_PATH_INDEX_WORKSPACE; int flagWorkspace = isWorkspacePath ? ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED : 0; int flags = flagBuiltin | flagWorkspace | flagSystem | flagFramework; Image image = LanguageSettingsImages.getImage(kind, flags, indexPathKind == COMBO_PATH_INDEX_PROJECT); iconComboKind.setImage(image); shell.setImage(image); buttonBrowse.setImage(pathCategoryImages[indexPathKind]); } }