From 237db0f8bee18eba34f0d299a3deade087e2cf5c Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Wed, 9 Jan 2013 18:30:27 -0800 Subject: [PATCH] Bug 388368 - Add Include Directory dialog should distinguish system and non-system includes --- .../providers/LanguageSettingEntryDialog.java | 90 ++++++++++++------- .../cdt/internal/ui/newui/Messages.java | 1 + .../cdt/internal/ui/newui/Messages.properties | 5 +- 3 files changed, 61 insertions(+), 35 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingEntryDialog.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingEntryDialog.java index 4dec5f8a1ee..9fd5e328b10 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingEntryDialog.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingEntryDialog.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2012 Andrew Gvozdev and others. + * 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 @@ -7,6 +7,7 @@ * * Contributors: * Andrew Gvozdev - initial API and implementation + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.internal.ui.language.settings.providers; @@ -63,16 +64,17 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { 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_PATH = 0; + 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_PATH = 4; + private static final int COMBO_INDEX_LIBRARY_DIR = 4; private static final int COMBO_INDEX_LIBRARY_FILE = 5; final private String[] comboKindItems = { @@ -142,7 +144,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { private int comboIndexToKind(int index) { int kind=0; switch (index) { - case COMBO_INDEX_INCLUDE_PATH: + case COMBO_INDEX_INCLUDE_DIR: kind = ICSettingEntry.INCLUDE_PATH; break; case COMBO_INDEX_MACRO: @@ -154,7 +156,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { case COMBO_INDEX_MACRO_FILE: kind = ICSettingEntry.MACRO_FILE; break; - case COMBO_INDEX_LIBRARY_PATH: + case COMBO_INDEX_LIBRARY_DIR: kind = ICSettingEntry.LIBRARY_PATH; break; case COMBO_INDEX_LIBRARY_FILE: @@ -168,7 +170,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { int index= 0; switch (kind) { case ICSettingEntry.INCLUDE_PATH: - index = COMBO_INDEX_INCLUDE_PATH; + index = COMBO_INDEX_INCLUDE_DIR; break; case ICSettingEntry.MACRO: index = COMBO_INDEX_MACRO; @@ -180,7 +182,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { index = COMBO_INDEX_MACRO_FILE; break; case ICSettingEntry.LIBRARY_PATH: - index = COMBO_INDEX_LIBRARY_PATH; + index = COMBO_INDEX_LIBRARY_DIR; break; case ICSettingEntry.LIBRARY_FILE: index = COMBO_INDEX_LIBRARY_FILE; @@ -228,7 +230,6 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); - } }); comboKind.setEnabled(clearValue); @@ -371,6 +372,24 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { } }); + // Checkbox "Contains system includes" + checkBoxSystem = new Button(compCheckboxes, SWT.CHECK); + checkBoxSystem.setText(Messages.LanguageSettingEntryDialog_ContainsSystemHeaders); + checkBoxSystem.setSelection(entry != null && (entry.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); @@ -437,6 +456,9 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { 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); @@ -451,8 +473,8 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { ((GridData) buttonVars.getLayoutData()).exclude = isMacroSelected; switch (kindSelectionIndex) { - case COMBO_INDEX_INCLUDE_PATH: - case COMBO_INDEX_LIBRARY_PATH: + case COMBO_INDEX_INCLUDE_DIR: + case COMBO_INDEX_LIBRARY_DIR: labelInput.setText(Messages.LanguageSettingEntryDialog_Path); break; case COMBO_INDEX_INCLUDE_FILE: @@ -472,8 +494,8 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { boolean isWorkspaceSelected = (indexPathKind == COMBO_PATH_INDEX_WORKSPACE); boolean isFilesystemSelected = (indexPathKind == COMBO_PATH_INDEX_FILESYSTEM); - String path = inputName.getText(); - if (path.trim().length() == 0) { + String path = inputName.getText().trim(); + if (path.isEmpty()) { buttonOk.setEnabled(false); } else { buttonOk.setEnabled((isProjectSelected && !path.startsWith(SLASH)) || @@ -489,27 +511,28 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { public void buttonPressed(SelectionEvent e) { String str = null; if (e.widget.equals(buttonOk)) { - String name = inputName.getText(); + String name = inputName.getText().trim(); text1 = name; - String value = inputValue.getText(); + String value = inputValue.getText().trim(); result = true; - int flagBuiltIn = checkBoxBuiltIn.getSelection() ? ICSettingEntry.BUILTIN : 0; - int flagFramework = checkBoxFramework.getSelection() ? ICSettingEntry.FRAMEWORKS_MAC : 0; + int flagBuiltIn = checkBoxBuiltIn.isVisible() && checkBoxBuiltIn.getSelection() ? ICSettingEntry.BUILTIN : 0; + int flagSystem = checkBoxSystem.isVisible() && checkBoxSystem.getSelection() ? 0 : ICSettingEntry.LOCAL; + int flagFramework = checkBoxFramework.isVisible() && checkBoxFramework.getSelection() ? ICSettingEntry.FRAMEWORKS_MAC : 0; int indexPathKind = comboPathCategory.getSelectionIndex(); int kind = comboKind.getSelectionIndex(); - boolean isProjectPath = indexPathKind==COMBO_PATH_INDEX_PROJECT; + boolean isProjectPath = indexPathKind == COMBO_PATH_INDEX_PROJECT; boolean isWorkspacePath = (kind != COMBO_INDEX_MACRO) && (isProjectPath || indexPathKind == COMBO_PATH_INDEX_WORKSPACE); int flagWorkspace = isWorkspacePath ? ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED : 0; - int flags = flagBuiltIn | flagWorkspace | flagFramework; + int flags = flagBuiltIn | flagWorkspace | flagSystem | flagFramework; - ICLanguageSettingEntry entry=null; - switch (comboKind.getSelectionIndex()) { - case COMBO_INDEX_INCLUDE_PATH: + ICLanguageSettingEntry entry = null; + switch (kind) { + case COMBO_INDEX_INCLUDE_DIR: entry = CDataUtil.createCIncludePathEntry(name, flags); break; case COMBO_INDEX_MACRO: - // note that value=null is not supported by CMacroEntry + // Note that value=null is not supported by CMacroEntry entry = CDataUtil.createCMacroEntry(name, value, flags); break; case COMBO_INDEX_INCLUDE_FILE: @@ -518,7 +541,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { case COMBO_INDEX_MACRO_FILE: entry = CDataUtil.createCMacroFileEntry(name, flags); break; - case COMBO_INDEX_LIBRARY_PATH: + case COMBO_INDEX_LIBRARY_DIR: entry = CDataUtil.createCLibraryPathEntry(name, flags); break; case COMBO_INDEX_LIBRARY_FILE: @@ -536,8 +559,8 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { boolean isDirectory = false; boolean isFile = false; switch (comboKind.getSelectionIndex()) { - case COMBO_INDEX_INCLUDE_PATH: - case COMBO_INDEX_LIBRARY_PATH: + case COMBO_INDEX_INCLUDE_DIR: + case COMBO_INDEX_LIBRARY_DIR: isDirectory = true; break; case COMBO_INDEX_INCLUDE_FILE: @@ -552,32 +575,32 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { if (isDirectory) { switch (comboPathCategory.getSelectionIndex()) { case COMBO_PATH_INDEX_WORKSPACE: - str = AbstractCPropertyTab.getWorkspaceDirDialog(shell, inputName.getText()); + str = AbstractCPropertyTab.getWorkspaceDirDialog(shell, inputName.getText().trim()); break; case COMBO_PATH_INDEX_PROJECT: - str = AbstractCPropertyTab.getProjectDirDialog(shell, inputName.getText(), project); + str = AbstractCPropertyTab.getProjectDirDialog(shell, inputName.getText().trim(), project); break; case COMBO_PATH_INDEX_FILESYSTEM: - str = AbstractCPropertyTab.getFileSystemDirDialog(shell, inputName.getText()); + 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()); + str = AbstractCPropertyTab.getWorkspaceFileDialog(shell, inputName.getText().trim()); break; case COMBO_PATH_INDEX_PROJECT: - str = AbstractCPropertyTab.getProjectFileDialog(shell, inputName.getText(), project); + str = AbstractCPropertyTab.getProjectFileDialog(shell, inputName.getText().trim(), project); break; case COMBO_PATH_INDEX_FILESYSTEM: - str = AbstractCPropertyTab.getFileSystemFileDialog(shell, inputName.getText()); + 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)) { + if (comboPathCategory.getSelectionIndex() == COMBO_PATH_INDEX_PROJECT && str.startsWith(SLASH + project.getName() + SLASH)) { str = str.substring(project.getName().length() + 2); } inputName.setText(str); @@ -600,10 +623,11 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog { 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 | flagFramework; + int flags = flagBuiltin | flagWorkspace | flagSystem | flagFramework; Image image = LanguageSettingsImages.getImage(kind, flags, indexPathKind == COMBO_PATH_INDEX_PROJECT); iconComboKind.setImage(image); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.java index a8f1063e6d3..29c4a9f4a33 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.java @@ -192,6 +192,7 @@ public class Messages extends NLS { public static String IncludeTab_import; public static String LanguageSettingEntryDialog_Add; public static String LanguageSettingEntryDialog_BuiltInFlag; + public static String LanguageSettingEntryDialog_ContainsSystemHeaders; public static String LanguageSettingEntryDialog_Directory; public static String LanguageSettingEntryDialog_File; public static String LanguageSettingEntryDialog_Filesystem; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties index 672564a0e8f..4c543c88cd3 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties @@ -169,9 +169,10 @@ IncludeDialog_2=Add to all configurations IncludeDialog_3=Add to all languages LanguageSettingEntryDialog_Add=Add LanguageSettingEntryDialog_BuiltInFlag=Treat as built-in -LanguageSettingEntryDialog_Directory=Dir: +LanguageSettingEntryDialog_ContainsSystemHeaders=Contains system headers +LanguageSettingEntryDialog_Directory=Directory: LanguageSettingEntryDialog_File=File: -LanguageSettingEntryDialog_Filesystem=Filesystem +LanguageSettingEntryDialog_Filesystem=File System Path LanguageSettingEntryDialog_FrameworkFolder=Framework folder (Mac only) LanguageSettingEntryDialog_IncludeDirectory=Include Directory LanguageSettingEntryDialog_IncludeFile=Include File