1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 388368 - Add Include Directory dialog should distinguish system and

non-system includes
This commit is contained in:
Sergey Prigogin 2013-01-09 18:30:27 -08:00
parent c1bc445e74
commit 237db0f8be
3 changed files with 61 additions and 35 deletions

View file

@ -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 * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
* *
* Contributors: * Contributors:
* Andrew Gvozdev - initial API and implementation * Andrew Gvozdev - initial API and implementation
* Sergey Prigogin (Google)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.language.settings.providers; package org.eclipse.cdt.internal.ui.language.settings.providers;
@ -63,16 +64,17 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
private Button buttonBrowse; private Button buttonBrowse;
private Button buttonVars; private Button buttonVars;
private Button checkBoxBuiltIn; private Button checkBoxBuiltIn;
private Button checkBoxSystem;
private Button checkBoxFramework; private Button checkBoxFramework;
private Button buttonOk; private Button buttonOk;
private Button buttonCancel; 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_MACRO = 1;
private static final int COMBO_INDEX_INCLUDE_FILE = 2; private static final int COMBO_INDEX_INCLUDE_FILE = 2;
private static final int COMBO_INDEX_MACRO_FILE = 3; 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; private static final int COMBO_INDEX_LIBRARY_FILE = 5;
final private String[] comboKindItems = { final private String[] comboKindItems = {
@ -142,7 +144,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
private int comboIndexToKind(int index) { private int comboIndexToKind(int index) {
int kind=0; int kind=0;
switch (index) { switch (index) {
case COMBO_INDEX_INCLUDE_PATH: case COMBO_INDEX_INCLUDE_DIR:
kind = ICSettingEntry.INCLUDE_PATH; kind = ICSettingEntry.INCLUDE_PATH;
break; break;
case COMBO_INDEX_MACRO: case COMBO_INDEX_MACRO:
@ -154,7 +156,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
case COMBO_INDEX_MACRO_FILE: case COMBO_INDEX_MACRO_FILE:
kind = ICSettingEntry.MACRO_FILE; kind = ICSettingEntry.MACRO_FILE;
break; break;
case COMBO_INDEX_LIBRARY_PATH: case COMBO_INDEX_LIBRARY_DIR:
kind = ICSettingEntry.LIBRARY_PATH; kind = ICSettingEntry.LIBRARY_PATH;
break; break;
case COMBO_INDEX_LIBRARY_FILE: case COMBO_INDEX_LIBRARY_FILE:
@ -168,7 +170,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
int index= 0; int index= 0;
switch (kind) { switch (kind) {
case ICSettingEntry.INCLUDE_PATH: case ICSettingEntry.INCLUDE_PATH:
index = COMBO_INDEX_INCLUDE_PATH; index = COMBO_INDEX_INCLUDE_DIR;
break; break;
case ICSettingEntry.MACRO: case ICSettingEntry.MACRO:
index = COMBO_INDEX_MACRO; index = COMBO_INDEX_MACRO;
@ -180,7 +182,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
index = COMBO_INDEX_MACRO_FILE; index = COMBO_INDEX_MACRO_FILE;
break; break;
case ICSettingEntry.LIBRARY_PATH: case ICSettingEntry.LIBRARY_PATH:
index = COMBO_INDEX_LIBRARY_PATH; index = COMBO_INDEX_LIBRARY_DIR;
break; break;
case ICSettingEntry.LIBRARY_FILE: case ICSettingEntry.LIBRARY_FILE:
index = COMBO_INDEX_LIBRARY_FILE; index = COMBO_INDEX_LIBRARY_FILE;
@ -228,7 +230,6 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
@Override @Override
public void widgetDefaultSelected(SelectionEvent e) { public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e); widgetSelected(e);
} }
}); });
comboKind.setEnabled(clearValue); 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" // Checkbox "Framework folder"
checkBoxFramework = new Button(compCheckboxes, SWT.CHECK); checkBoxFramework = new Button(compCheckboxes, SWT.CHECK);
checkBoxFramework.setText(Messages.LanguageSettingEntryDialog_FrameworkFolder); checkBoxFramework.setText(Messages.LanguageSettingEntryDialog_FrameworkFolder);
@ -437,6 +456,9 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
private void setButtons() { private void setButtons() {
int kindSelectionIndex = comboKind.getSelectionIndex(); int kindSelectionIndex = comboKind.getSelectionIndex();
boolean isIncludeDirSelected = (kindSelectionIndex == COMBO_INDEX_INCLUDE_DIR);
checkBoxSystem.setVisible(isIncludeDirSelected);
checkBoxFramework.setVisible(isIncludeDirSelected);
boolean isMacroSelected = (kindSelectionIndex == COMBO_INDEX_MACRO); boolean isMacroSelected = (kindSelectionIndex == COMBO_INDEX_MACRO);
comboPathCategory.setVisible(!isMacroSelected); comboPathCategory.setVisible(!isMacroSelected);
buttonBrowse.setVisible(!isMacroSelected); buttonBrowse.setVisible(!isMacroSelected);
@ -451,8 +473,8 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
((GridData) buttonVars.getLayoutData()).exclude = isMacroSelected; ((GridData) buttonVars.getLayoutData()).exclude = isMacroSelected;
switch (kindSelectionIndex) { switch (kindSelectionIndex) {
case COMBO_INDEX_INCLUDE_PATH: case COMBO_INDEX_INCLUDE_DIR:
case COMBO_INDEX_LIBRARY_PATH: case COMBO_INDEX_LIBRARY_DIR:
labelInput.setText(Messages.LanguageSettingEntryDialog_Path); labelInput.setText(Messages.LanguageSettingEntryDialog_Path);
break; break;
case COMBO_INDEX_INCLUDE_FILE: case COMBO_INDEX_INCLUDE_FILE:
@ -472,8 +494,8 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
boolean isWorkspaceSelected = (indexPathKind == COMBO_PATH_INDEX_WORKSPACE); boolean isWorkspaceSelected = (indexPathKind == COMBO_PATH_INDEX_WORKSPACE);
boolean isFilesystemSelected = (indexPathKind == COMBO_PATH_INDEX_FILESYSTEM); boolean isFilesystemSelected = (indexPathKind == COMBO_PATH_INDEX_FILESYSTEM);
String path = inputName.getText(); String path = inputName.getText().trim();
if (path.trim().length() == 0) { if (path.isEmpty()) {
buttonOk.setEnabled(false); buttonOk.setEnabled(false);
} else { } else {
buttonOk.setEnabled((isProjectSelected && !path.startsWith(SLASH)) || buttonOk.setEnabled((isProjectSelected && !path.startsWith(SLASH)) ||
@ -489,27 +511,28 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
public void buttonPressed(SelectionEvent e) { public void buttonPressed(SelectionEvent e) {
String str = null; String str = null;
if (e.widget.equals(buttonOk)) { if (e.widget.equals(buttonOk)) {
String name = inputName.getText(); String name = inputName.getText().trim();
text1 = name; text1 = name;
String value = inputValue.getText(); String value = inputValue.getText().trim();
result = true; result = true;
int flagBuiltIn = checkBoxBuiltIn.getSelection() ? ICSettingEntry.BUILTIN : 0; int flagBuiltIn = checkBoxBuiltIn.isVisible() && checkBoxBuiltIn.getSelection() ? ICSettingEntry.BUILTIN : 0;
int flagFramework = checkBoxFramework.getSelection() ? ICSettingEntry.FRAMEWORKS_MAC : 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 indexPathKind = comboPathCategory.getSelectionIndex();
int kind = comboKind.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); boolean isWorkspacePath = (kind != COMBO_INDEX_MACRO) && (isProjectPath || indexPathKind == COMBO_PATH_INDEX_WORKSPACE);
int flagWorkspace = isWorkspacePath ? ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED : 0; int flagWorkspace = isWorkspacePath ? ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED : 0;
int flags = flagBuiltIn | flagWorkspace | flagFramework; int flags = flagBuiltIn | flagWorkspace | flagSystem | flagFramework;
ICLanguageSettingEntry entry=null; ICLanguageSettingEntry entry = null;
switch (comboKind.getSelectionIndex()) { switch (kind) {
case COMBO_INDEX_INCLUDE_PATH: case COMBO_INDEX_INCLUDE_DIR:
entry = CDataUtil.createCIncludePathEntry(name, flags); entry = CDataUtil.createCIncludePathEntry(name, flags);
break; break;
case COMBO_INDEX_MACRO: 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); entry = CDataUtil.createCMacroEntry(name, value, flags);
break; break;
case COMBO_INDEX_INCLUDE_FILE: case COMBO_INDEX_INCLUDE_FILE:
@ -518,7 +541,7 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
case COMBO_INDEX_MACRO_FILE: case COMBO_INDEX_MACRO_FILE:
entry = CDataUtil.createCMacroFileEntry(name, flags); entry = CDataUtil.createCMacroFileEntry(name, flags);
break; break;
case COMBO_INDEX_LIBRARY_PATH: case COMBO_INDEX_LIBRARY_DIR:
entry = CDataUtil.createCLibraryPathEntry(name, flags); entry = CDataUtil.createCLibraryPathEntry(name, flags);
break; break;
case COMBO_INDEX_LIBRARY_FILE: case COMBO_INDEX_LIBRARY_FILE:
@ -536,8 +559,8 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
boolean isDirectory = false; boolean isDirectory = false;
boolean isFile = false; boolean isFile = false;
switch (comboKind.getSelectionIndex()) { switch (comboKind.getSelectionIndex()) {
case COMBO_INDEX_INCLUDE_PATH: case COMBO_INDEX_INCLUDE_DIR:
case COMBO_INDEX_LIBRARY_PATH: case COMBO_INDEX_LIBRARY_DIR:
isDirectory = true; isDirectory = true;
break; break;
case COMBO_INDEX_INCLUDE_FILE: case COMBO_INDEX_INCLUDE_FILE:
@ -552,32 +575,32 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
if (isDirectory) { if (isDirectory) {
switch (comboPathCategory.getSelectionIndex()) { switch (comboPathCategory.getSelectionIndex()) {
case COMBO_PATH_INDEX_WORKSPACE: case COMBO_PATH_INDEX_WORKSPACE:
str = AbstractCPropertyTab.getWorkspaceDirDialog(shell, inputName.getText()); str = AbstractCPropertyTab.getWorkspaceDirDialog(shell, inputName.getText().trim());
break; break;
case COMBO_PATH_INDEX_PROJECT: case COMBO_PATH_INDEX_PROJECT:
str = AbstractCPropertyTab.getProjectDirDialog(shell, inputName.getText(), project); str = AbstractCPropertyTab.getProjectDirDialog(shell, inputName.getText().trim(), project);
break; break;
case COMBO_PATH_INDEX_FILESYSTEM: case COMBO_PATH_INDEX_FILESYSTEM:
str = AbstractCPropertyTab.getFileSystemDirDialog(shell, inputName.getText()); str = AbstractCPropertyTab.getFileSystemDirDialog(shell, inputName.getText().trim());
break; break;
} }
} else if (isFile) { } else if (isFile) {
switch (comboPathCategory.getSelectionIndex()) { switch (comboPathCategory.getSelectionIndex()) {
case COMBO_PATH_INDEX_WORKSPACE: case COMBO_PATH_INDEX_WORKSPACE:
str = AbstractCPropertyTab.getWorkspaceFileDialog(shell, inputName.getText()); str = AbstractCPropertyTab.getWorkspaceFileDialog(shell, inputName.getText().trim());
break; break;
case COMBO_PATH_INDEX_PROJECT: case COMBO_PATH_INDEX_PROJECT:
str = AbstractCPropertyTab.getProjectFileDialog(shell, inputName.getText(), project); str = AbstractCPropertyTab.getProjectFileDialog(shell, inputName.getText().trim(), project);
break; break;
case COMBO_PATH_INDEX_FILESYSTEM: case COMBO_PATH_INDEX_FILESYSTEM:
str = AbstractCPropertyTab.getFileSystemFileDialog(shell, inputName.getText()); str = AbstractCPropertyTab.getFileSystemFileDialog(shell, inputName.getText().trim());
break; break;
} }
} }
if (str != null) { if (str != null) {
str = strip_wsp(str); 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); str = str.substring(project.getName().length() + 2);
} }
inputName.setText(str); inputName.setText(str);
@ -600,10 +623,11 @@ public class LanguageSettingEntryDialog extends AbstractPropertyDialog {
int kind = comboIndexToKind(indexEntryKind); int kind = comboIndexToKind(indexEntryKind);
int flagBuiltin = checkBoxBuiltIn.getSelection() ? ICSettingEntry.BUILTIN : 0; int flagBuiltin = checkBoxBuiltIn.getSelection() ? ICSettingEntry.BUILTIN : 0;
int flagSystem = checkBoxSystem.getSelection() ? 0 : ICSettingEntry.LOCAL;
int flagFramework = checkBoxFramework.getSelection() ? ICSettingEntry.FRAMEWORKS_MAC : 0; int flagFramework = checkBoxFramework.getSelection() ? ICSettingEntry.FRAMEWORKS_MAC : 0;
boolean isWorkspacePath = indexPathKind == COMBO_PATH_INDEX_PROJECT || indexPathKind == COMBO_PATH_INDEX_WORKSPACE; boolean isWorkspacePath = indexPathKind == COMBO_PATH_INDEX_PROJECT || indexPathKind == COMBO_PATH_INDEX_WORKSPACE;
int flagWorkspace = isWorkspacePath ? ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED : 0; 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); Image image = LanguageSettingsImages.getImage(kind, flags, indexPathKind == COMBO_PATH_INDEX_PROJECT);
iconComboKind.setImage(image); iconComboKind.setImage(image);

View file

@ -192,6 +192,7 @@ public class Messages extends NLS {
public static String IncludeTab_import; public static String IncludeTab_import;
public static String LanguageSettingEntryDialog_Add; public static String LanguageSettingEntryDialog_Add;
public static String LanguageSettingEntryDialog_BuiltInFlag; public static String LanguageSettingEntryDialog_BuiltInFlag;
public static String LanguageSettingEntryDialog_ContainsSystemHeaders;
public static String LanguageSettingEntryDialog_Directory; public static String LanguageSettingEntryDialog_Directory;
public static String LanguageSettingEntryDialog_File; public static String LanguageSettingEntryDialog_File;
public static String LanguageSettingEntryDialog_Filesystem; public static String LanguageSettingEntryDialog_Filesystem;

View file

@ -169,9 +169,10 @@ IncludeDialog_2=Add to all configurations
IncludeDialog_3=Add to all languages IncludeDialog_3=Add to all languages
LanguageSettingEntryDialog_Add=Add LanguageSettingEntryDialog_Add=Add
LanguageSettingEntryDialog_BuiltInFlag=Treat as built-in LanguageSettingEntryDialog_BuiltInFlag=Treat as built-in
LanguageSettingEntryDialog_Directory=Dir: LanguageSettingEntryDialog_ContainsSystemHeaders=Contains system headers
LanguageSettingEntryDialog_Directory=Directory:
LanguageSettingEntryDialog_File=File: LanguageSettingEntryDialog_File=File:
LanguageSettingEntryDialog_Filesystem=Filesystem LanguageSettingEntryDialog_Filesystem=File System Path
LanguageSettingEntryDialog_FrameworkFolder=Framework folder (Mac only) LanguageSettingEntryDialog_FrameworkFolder=Framework folder (Mac only)
LanguageSettingEntryDialog_IncludeDirectory=Include Directory LanguageSettingEntryDialog_IncludeDirectory=Include Directory
LanguageSettingEntryDialog_IncludeFile=Include File LanguageSettingEntryDialog_IncludeFile=Include File