1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-06 09:16:02 +02:00

bug 328007: [sd90] Design user interface for new scanner discovery

This commit is contained in:
Andrew Gvozdev 2012-05-01 22:36:29 -04:00
parent aae4b1de8e
commit 2b5e3e6a20
43 changed files with 6249 additions and 153 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

View file

@ -43,6 +43,8 @@ LastTargetBuild.description=Rebuild the last make target for the selected contai
PreferenceBuildSettings.name=Settings PreferenceBuildSettings.name=Settings
ErrorParsersTab.name=Error Parsers ErrorParsersTab.name=Error Parsers
ErrorParsersTab.tooltip=Error Parsers scan build output and report errors in Problems view ErrorParsersTab.tooltip=Error Parsers scan build output and report errors in Problems view
LanguageSettingsProvidersTab.name=Discovery
LanguageSettingsProvidersTab.tooltip=Language settings providers
PreferenceMakeProject.name=New Make Projects PreferenceMakeProject.name=New Make Projects
PreferenceMake.name=Make Targets PreferenceMake.name=Make Targets

View file

@ -470,6 +470,14 @@
tooltip="%ErrorParsersTab.tooltip" tooltip="%ErrorParsersTab.tooltip"
weight="020"> weight="020">
</tab> </tab>
<tab
class="org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProviderTab"
icon="icons/obj16/search.gif"
name="%LanguageSettingsProvidersTab.name"
parent="org.eclipse.cdt.make.internal.ui.preferences.BuildSettingsPreferencePage"
tooltip="%LanguageSettingsProvidersTab.tooltip"
weight="040">
</tab>
</extension> </extension>
<extension <extension

View file

@ -78,7 +78,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
private static final String CDT_MANAGEDBUILDER_UI_PLUGIN_ID = "org.eclipse.cdt.managedbuilder.ui"; //$NON-NLS-1$ private static final String CDT_MANAGEDBUILDER_UI_PLUGIN_ID = "org.eclipse.cdt.managedbuilder.ui"; //$NON-NLS-1$
private static final String SCANNER_DISCOVERY_CONSOLE = "org.eclipse.cdt.managedbuilder.ScannerDiscoveryConsole"; //$NON-NLS-1$ private static final String SCANNER_DISCOVERY_CONSOLE = "org.eclipse.cdt.managedbuilder.ScannerDiscoveryConsole"; //$NON-NLS-1$
private static final String SCANNER_DISCOVERY_GLOBAL_CONSOLE = "org.eclipse.cdt.managedbuilder.ScannerDiscoveryGlobalConsole"; //$NON-NLS-1$ private static final String SCANNER_DISCOVERY_GLOBAL_CONSOLE = "org.eclipse.cdt.managedbuilder.ScannerDiscoveryGlobalConsole"; //$NON-NLS-1$
private static final String DEFAULT_CONSOLE_ICON = "icons/obj16/inspect_system.gif"; //$NON-NLS-1$ private static final String DEFAULT_CONSOLE_ICON = "icons/obj16/inspect_sys.gif"; //$NON-NLS-1$
private static final String GMAKE_ERROR_PARSER_ID = "org.eclipse.cdt.core.GmakeErrorParser"; //$NON-NLS-1$ private static final String GMAKE_ERROR_PARSER_ID = "org.eclipse.cdt.core.GmakeErrorParser"; //$NON-NLS-1$
private static final String ATTR_PARAMETER = "parameter"; //$NON-NLS-1$ private static final String ATTR_PARAMETER = "parameter"; //$NON-NLS-1$

View file

@ -14,6 +14,7 @@ Export-Package: org.eclipse.cdt.managedbuilder.ui.preferences,
Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)", Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)", org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
org.eclipse.ui;bundle-version="[3.2.0,4.0.0)", org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
org.eclipse.ui.console;bundle-version="[3.5.100,4.0.0)",
org.eclipse.cdt.core;bundle-version="[5.0.0,6.0.0)", org.eclipse.cdt.core;bundle-version="[5.0.0,6.0.0)",
org.eclipse.cdt.ui;bundle-version="[5.0.0,6.0.0)", org.eclipse.cdt.ui;bundle-version="[5.0.0,6.0.0)",
org.eclipse.cdt.managedbuilder.core;bundle-version="[8.1.0,9.0.0)", org.eclipse.cdt.managedbuilder.core;bundle-version="[8.1.0,9.0.0)",

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

View file

@ -671,5 +671,42 @@
projectType="org.eclipse.cdt.build.makefile.projectType"> projectType="org.eclipse.cdt.build.makefile.projectType">
</projectTypePage> </projectTypePage>
</extension> </extension>
<extension
point="org.eclipse.cdt.ui.LanguageSettingsProviderAssociation">
<id-association
id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider"
icon="icons/obj16/mbs.gif"
ui-clear-entries="false"
ui-edit-entries="false">
</id-association>
<class-association
class="org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuildCommandParser"
icon="icons/obj16/log_obj.gif"
page="org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers.GCCBuildCommandParserOptionPage"
ui-clear-entries="true"
ui-edit-entries="false">
</class-association>
<class-association
class="org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector"
icon="icons/obj16/inspect_sys.gif"
page="org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers.BuiltinSpecsDetectorOptionPage"
ui-clear-entries="true"
ui-edit-entries="false">
</class-association>
</extension>
<extension
point="org.eclipse.cdt.core.CBuildConsole">
<CBuildConsole
id="org.eclipse.cdt.managedbuilder.ScannerDiscoveryConsole"
class="org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers.ScannerDiscoveryConsole">
</CBuildConsole>
</extension>
<extension
point="org.eclipse.cdt.core.CBuildConsole">
<CBuildConsole
id="org.eclipse.cdt.managedbuilder.ScannerDiscoveryGlobalConsole"
class="org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers.ScannerDiscoveryGlobalConsole">
</CBuildConsole>
</extension>
</plugin> </plugin>

View file

@ -61,6 +61,10 @@ public class Messages extends NLS {
public static String BuildToolSettingsPage_tool_advancedSettings; public static String BuildToolSettingsPage_tool_advancedSettings;
public static String BuildToolSettingsPage_tool_command; public static String BuildToolSettingsPage_tool_command;
public static String BuildToolSettingsPage_tool_commandLinePattern; public static String BuildToolSettingsPage_tool_commandLinePattern;
public static String BuiltinSpecsDetectorOptionPage_AllocateConsole;
public static String BuiltinSpecsDetectorOptionPage_Browse;
public static String BuiltinSpecsDetectorOptionPage_ChooseFile;
public static String BuiltinSpecsDetectorOptionPage_CompilerSpecsCommand;
public static String CConfigWizardPage_0; public static String CConfigWizardPage_0;
public static String CConfigWizardPage_1; public static String CConfigWizardPage_1;
public static String CConfigWizardPage_10; public static String CConfigWizardPage_10;
@ -105,6 +109,12 @@ public class Messages extends NLS {
public static String DiscoveryTab_ErrorClearingEntries; public static String DiscoveryTab_ErrorClearingEntries;
public static String EnvironmentTab_15; public static String EnvironmentTab_15;
public static String EnvironmentTab_23; public static String EnvironmentTab_23;
public static String GCCBuildCommandParserOptionPage_CompilerPattern;
public static String GCCBuildCommandParserOptionPage_ContainerForDiscoveredEntries;
public static String GCCBuildCommandParserOptionPage_File;
public static String GCCBuildCommandParserOptionPage_Folder;
public static String GCCBuildCommandParserOptionPage_Project;
public static String GCCBuildCommandParserOptionPage_ResolvePaths;
public static String MacrosBlock_label_delete_all_confirm_message; public static String MacrosBlock_label_delete_all_confirm_message;
public static String MacrosBlock_label_delete_all_confirm_title; public static String MacrosBlock_label_delete_all_confirm_title;
public static String MacrosBlock_label_delete_confirm_message; public static String MacrosBlock_label_delete_confirm_message;
@ -212,6 +222,7 @@ public class Messages extends NLS {
public static String PropertyPageDefsTab_8; public static String PropertyPageDefsTab_8;
public static String PropertyPageDefsTab_9; public static String PropertyPageDefsTab_9;
public static String PropertyPageDefsTab_showIncludeFileTab; public static String PropertyPageDefsTab_showIncludeFileTab;
public static String PropertyPageDefsTab_showProvidersTab;
public static String RefreshPolicyExceptionDialog_addDialogLabel; public static String RefreshPolicyExceptionDialog_addDialogLabel;
public static String RefreshPolicyExceptionDialog_AddExceptionInfoDialog_message; public static String RefreshPolicyExceptionDialog_AddExceptionInfoDialog_message;
public static String RefreshPolicyExceptionDialog_AddExceptionInfoDialog_title; public static String RefreshPolicyExceptionDialog_AddExceptionInfoDialog_title;

View file

@ -274,6 +274,7 @@ PropertyPageDefsTab_7=Show disc. page names if they are unique. Else show profil
PropertyPageDefsTab_8=Always show names + profile IDs PropertyPageDefsTab_8=Always show names + profile IDs
PropertyPageDefsTab_9=Always show profile IDs only PropertyPageDefsTab_9=Always show profile IDs only
PropertyPageDefsTab_showIncludeFileTab=Display "Include Files" tab PropertyPageDefsTab_showIncludeFileTab=Display "Include Files" tab
PropertyPageDefsTab_showProvidersTab=Display "Preprocessor Include Paths" tabs
ProjectConvert_convertersList=Converters List ProjectConvert_convertersList=Converters List
AbstractPrefPage_0=\ Preference settings will be applied to new projects \n only when there were no toolchains selected. AbstractPrefPage_0=\ Preference settings will be applied to new projects \n only when there were no toolchains selected.
@ -303,3 +304,15 @@ NewCfgDialog_5=Import predefined
ToolChainSelectionPage_Description=Select the initial toolchain for this project. ToolChainSelectionPage_Description=Select the initial toolchain for this project.
ToolChainSelectionPage_Title=Select Tool Chain ToolChainSelectionPage_Title=Select Tool Chain
# Language Settings Providers
BuiltinSpecsDetectorOptionPage_AllocateConsole=Allocate console in the Console View
BuiltinSpecsDetectorOptionPage_Browse=Browse...
BuiltinSpecsDetectorOptionPage_ChooseFile=Choose file
BuiltinSpecsDetectorOptionPage_CompilerSpecsCommand=Command to get compiler specs:
GCCBuildCommandParserOptionPage_CompilerPattern=Compiler command pattern:
GCCBuildCommandParserOptionPage_ContainerForDiscoveredEntries=Container to keep discovered entries
GCCBuildCommandParserOptionPage_File=File (use when settings vary for different files)
GCCBuildCommandParserOptionPage_Folder=Folder (use when settings are the same for all files in each folder)
GCCBuildCommandParserOptionPage_Project=Project (use when settings are the same for all files in the project)
GCCBuildCommandParserOptionPage_ResolvePaths=Use heuristics to resolve paths

View file

@ -0,0 +1,155 @@
/*******************************************************************************
* Copyright (c) 2009, 2012 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
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector;
import org.eclipse.cdt.ui.language.settings.providers.AbstractLanguageSettingProviderOptionPage;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
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.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.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* Options page for {@link AbstractBuiltinSpecsDetector}.
*/
public final class BuiltinSpecsDetectorOptionPage extends AbstractLanguageSettingProviderOptionPage {
private boolean fEditable;
private Text inputCommand;
private Button allocateConsoleCheckBox;
@Override
public void createControl(Composite parent) {
fEditable = parent.isEnabled();
AbstractBuiltinSpecsDetector provider = (AbstractBuiltinSpecsDetector) getProvider();
Composite composite = createCompositeForPageArea(parent);
createCompilerCommandInputControl(composite, provider);
createBrowseButton(composite);
createConsoleCheckbox(composite, provider);
setControl(composite);
}
/**
* Create composite for the page.
*/
private Composite createCompositeForPageArea(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginWidth = 1;
layout.marginHeight = 1;
layout.marginRight = 1;
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
Dialog.applyDialogFont(composite);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
composite.setLayoutData(gd);
return composite;
}
/**
* Create input control for compiler command.
*/
private void createCompilerCommandInputControl(Composite composite, AbstractBuiltinSpecsDetector provider) {
Label label = ControlFactory.createLabel(composite, Messages.BuiltinSpecsDetectorOptionPage_CompilerSpecsCommand);
GridData gd = new GridData();
gd.horizontalSpan = 2;
label.setLayoutData(gd);
label.setEnabled(fEditable);
inputCommand = ControlFactory.createTextField(composite, SWT.SINGLE | SWT.BORDER);
String command = provider.getCommand();
inputCommand.setText(command!=null ? command : ""); //$NON-NLS-1$
inputCommand.setEnabled(fEditable);
inputCommand.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
String text = inputCommand.getText();
AbstractBuiltinSpecsDetector provider = (AbstractBuiltinSpecsDetector) getProvider();
if (!text.equals(provider.getCommand())) {
AbstractBuiltinSpecsDetector selectedProvider = (AbstractBuiltinSpecsDetector) getProviderWorkingCopy();
selectedProvider.setCommand(text);
refreshItem(selectedProvider);
}
}
});
}
/**
* Create "Browse" button.
*/
private void createBrowseButton(Composite composite) {
Button button = ControlFactory.createPushButton(composite, Messages.BuiltinSpecsDetectorOptionPage_Browse);
button.setEnabled(fEditable);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent evt) {
FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
dialog.setText(Messages.BuiltinSpecsDetectorOptionPage_ChooseFile);
String fileName = inputCommand.getText();
// taking chance that the first word is a compiler path
int space = fileName.indexOf(' ');
if (space > 0) {
fileName = fileName.substring(0, space);
}
IPath folder = new Path(fileName).removeLastSegments(1);
dialog.setFilterPath(folder.toOSString());
String chosenFile = dialog.open();
if (chosenFile != null) {
inputCommand.insert(chosenFile);
}
}
});
}
/**
* Create check-box for console.
*/
private void createConsoleCheckbox(Composite composite, AbstractBuiltinSpecsDetector provider) {
allocateConsoleCheckBox = new Button(composite, SWT.CHECK);
allocateConsoleCheckBox.setText(Messages.BuiltinSpecsDetectorOptionPage_AllocateConsole);
allocateConsoleCheckBox.setSelection(provider.isConsoleEnabled());
allocateConsoleCheckBox.setEnabled(fEditable);
allocateConsoleCheckBox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean enabled = allocateConsoleCheckBox.getSelection();
AbstractBuiltinSpecsDetector provider = (AbstractBuiltinSpecsDetector) getProvider();
if (enabled != provider.isConsoleEnabled()) {
AbstractBuiltinSpecsDetector selectedProvider = (AbstractBuiltinSpecsDetector) getProviderWorkingCopy();
selectedProvider.setConsoleEnabled(enabled);
refreshItem(selectedProvider);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
}
}

View file

@ -0,0 +1,231 @@
/*******************************************************************************
* Copyright (c) 2009, 2012 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
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuildCommandParser;
import org.eclipse.cdt.ui.language.settings.providers.AbstractLanguageSettingProviderOptionPage;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.jface.dialogs.Dialog;
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.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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* Options page for {@link AbstractBuildCommandParser}.
*
*/
public final class GCCBuildCommandParserOptionPage extends AbstractLanguageSettingProviderOptionPage {
private boolean fEditable;
private Text inputCommand;
private Button expandRelativePathCheckBox;
private Button scopeProjectRadioButton;
private Button scopeFolderRadioButton;
private Button scopeFileRadioButton;
@Override
public void createControl(Composite parent) {
fEditable = parent.isEnabled();
AbstractBuildCommandParser provider = (AbstractBuildCommandParser) getProvider();
Composite composite = new Composite(parent, SWT.NONE);
createCompositeForPageArea(composite);
createCompilerPatternInputControl(provider, composite);
createResourceScopeGroup(provider, composite);
createResolvePathsCheckbox(composite, provider);
setControl(composite);
}
/**
* Create composite for the page.
*/
private void createCompositeForPageArea(final Composite composite) {
{
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginWidth = 1;
layout.marginHeight = 1;
layout.marginRight = 1;
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
Dialog.applyDialogFont(composite);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
composite.setLayoutData(gd);
}
}
/**
* Create input control for compiler pattern.
*/
private void createCompilerPatternInputControl(AbstractBuildCommandParser provider, Composite composite) {
Label label = ControlFactory.createLabel(composite, Messages.GCCBuildCommandParserOptionPage_CompilerPattern);
GridData gd = new GridData();
gd.horizontalSpan = 1;
label.setLayoutData(gd);
label.setEnabled(fEditable);
inputCommand = ControlFactory.createTextField(composite, SWT.SINGLE | SWT.BORDER);
String compilerPattern = provider.getCompilerPattern();
inputCommand.setText(compilerPattern!=null ? compilerPattern : ""); //$NON-NLS-1$
gd = new GridData();
gd.horizontalSpan = 1;
gd.grabExcessHorizontalSpace = true;
gd.horizontalAlignment = SWT.FILL;
inputCommand.setLayoutData(gd);
inputCommand.setEnabled(fEditable);
inputCommand.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
String text = inputCommand.getText();
AbstractBuildCommandParser provider = (AbstractBuildCommandParser) getProvider();
if (!text.equals(provider.getCompilerPattern())) {
AbstractBuildCommandParser selectedProvider = (AbstractBuildCommandParser) getProviderWorkingCopy();
selectedProvider.setCompilerPattern(text);
refreshItem(selectedProvider);
}
}
});
}
/**
* Create check-box for resolving paths.
*/
private void createResolvePathsCheckbox(Composite composite, AbstractBuildCommandParser provider) {
expandRelativePathCheckBox = new Button(composite, SWT.CHECK);
expandRelativePathCheckBox.setText(Messages.GCCBuildCommandParserOptionPage_ResolvePaths);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
expandRelativePathCheckBox.setLayoutData(gd);
expandRelativePathCheckBox.setSelection(provider.isResolvingPaths());
expandRelativePathCheckBox.setEnabled(fEditable);
expandRelativePathCheckBox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean enabled = expandRelativePathCheckBox.getSelection();
AbstractBuildCommandParser provider = (AbstractBuildCommandParser) getProvider();
if (enabled != provider.isResolvingPaths()) {
AbstractBuildCommandParser selectedProvider = (AbstractBuildCommandParser) getProviderWorkingCopy();
selectedProvider.setResolvingPaths(enabled);
refreshItem(selectedProvider);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
}
/**
* Create group and radio buttons for container to keep discovered entries.
*/
private void createResourceScopeGroup(AbstractBuildCommandParser provider, Composite composite) {
Group resourceScopeGroup = new Group(composite, SWT.NONE);
resourceScopeGroup.setText(Messages.GCCBuildCommandParserOptionPage_ContainerForDiscoveredEntries);
resourceScopeGroup.setLayout(new GridLayout(2, false));
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
resourceScopeGroup.setLayoutData(gd);
scopeFileRadioButton = new Button(resourceScopeGroup, SWT.RADIO);
scopeFileRadioButton.setText(Messages.GCCBuildCommandParserOptionPage_File);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
scopeFileRadioButton.setLayoutData(gd);
scopeFileRadioButton.setSelection(provider.getResourceScope() == AbstractBuildCommandParser.ResourceScope.FILE);
scopeFileRadioButton.setEnabled(fEditable);
scopeFileRadioButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean enabled = scopeFileRadioButton.getSelection();
AbstractBuildCommandParser provider = (AbstractBuildCommandParser) getProvider();
if (enabled != (provider.getResourceScope() == AbstractBuildCommandParser.ResourceScope.FILE)) {
AbstractBuildCommandParser selectedProvider = (AbstractBuildCommandParser) getProviderWorkingCopy();
selectedProvider.setResourceScope(AbstractBuildCommandParser.ResourceScope.FILE);
refreshItem(selectedProvider);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
scopeFolderRadioButton = new Button(resourceScopeGroup, SWT.RADIO);
scopeFolderRadioButton.setText(Messages.GCCBuildCommandParserOptionPage_Folder);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
scopeFolderRadioButton.setLayoutData(gd);
scopeFolderRadioButton.setSelection(provider.getResourceScope() == AbstractBuildCommandParser.ResourceScope.FOLDER);
scopeFolderRadioButton.setEnabled(fEditable);
scopeFolderRadioButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean enabled = scopeFolderRadioButton.getSelection();
AbstractBuildCommandParser provider = (AbstractBuildCommandParser) getProvider();
if (enabled != (provider.getResourceScope() == AbstractBuildCommandParser.ResourceScope.FOLDER)) {
AbstractBuildCommandParser selectedProvider = (AbstractBuildCommandParser) getProviderWorkingCopy();
selectedProvider.setResourceScope(AbstractBuildCommandParser.ResourceScope.FOLDER);
refreshItem(selectedProvider);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
scopeProjectRadioButton = new Button(resourceScopeGroup, SWT.RADIO);
scopeProjectRadioButton.setText(Messages.GCCBuildCommandParserOptionPage_Project);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
scopeProjectRadioButton.setLayoutData(gd);
scopeProjectRadioButton.setSelection(provider.getResourceScope() == AbstractBuildCommandParser.ResourceScope.PROJECT);
scopeProjectRadioButton.setEnabled(fEditable);
scopeProjectRadioButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean enabled = scopeProjectRadioButton.getSelection();
AbstractBuildCommandParser provider = (AbstractBuildCommandParser) getProvider();
if (enabled != (provider.getResourceScope() == AbstractBuildCommandParser.ResourceScope.PROJECT)) {
AbstractBuildCommandParser selectedProvider = (AbstractBuildCommandParser) getProviderWorkingCopy();
selectedProvider.setResourceScope(AbstractBuildCommandParser.ResourceScope.PROJECT);
refreshItem(selectedProvider);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
}
}

View file

@ -0,0 +1,39 @@
/*******************************************************************************
* Copyright (c) 2010, 2012 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
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers;
import java.net.URL;
import org.eclipse.cdt.internal.ui.buildconsole.CBuildConsole;
import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector;
import org.eclipse.cdt.ui.language.settings.providers.LanguageSettingsProvidersImages;
/**
* Console adapter for {@link AbstractBuiltinSpecsDetector}.
*/
public class ScannerDiscoveryConsole extends CBuildConsole {
/**
* {@inheritDoc}
* @param consoleId - a console ID is expected here which then is used as menu context ID.
* @param defaultIconUrl - if {@code LanguageSettingsProviderAssociation} extension point
* defines URL by provider id, {@code defaultIconUrl} will be ignored and the URL from the extension
* point will be used. If not, supplied {@code defaultIconUrl} will be used.
*/
@Override
public void init(String consoleId, String name, URL defaultIconUrl) {
URL iconUrl = LanguageSettingsProvidersImages.getImageUrl(consoleId);
if (iconUrl == null) {
iconUrl = defaultIconUrl;
}
super.init(consoleId, name, iconUrl);
}
}

View file

@ -0,0 +1,117 @@
/*******************************************************************************
* Copyright (c) 2011, 2012 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
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers;
import java.io.IOException;
import java.net.URL;
import org.eclipse.cdt.core.ConsoleOutputStream;
import org.eclipse.cdt.internal.core.ICConsole;
import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector;
import org.eclipse.cdt.ui.CDTSharedImages;
import org.eclipse.cdt.ui.language.settings.providers.LanguageSettingsProvidersImages;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
/**
* Console adapter for global {@link AbstractBuiltinSpecsDetector}.
*
* Note that this console is not colored.
*/
public class ScannerDiscoveryGlobalConsole implements ICConsole {
private MessageConsole console;
private class ConsoleOutputStreamAdapter extends ConsoleOutputStream {
private MessageConsoleStream fConsoleStream;
public ConsoleOutputStreamAdapter(MessageConsoleStream stream) {
fConsoleStream = stream;
}
@Override
public void write(int arg0) throws IOException {
fConsoleStream.write(arg0);
}
@Override
public synchronized void write(byte[] b, int off, int len) throws IOException {
fConsoleStream.write(b, off, len);
}
@Override
public void flush() throws IOException {
fConsoleStream.flush();
}
@Override
public void close() throws IOException {
fConsoleStream.close();
}
}
@Override
public void start(IProject project) {
Assert.isTrue(project == null);
}
@Override
public ConsoleOutputStream getOutputStream() throws CoreException {
return new ConsoleOutputStreamAdapter(console.newMessageStream());
}
@Override
public ConsoleOutputStream getInfoStream() throws CoreException {
return new ConsoleOutputStreamAdapter(console.newMessageStream());
}
@Override
public ConsoleOutputStream getErrorStream() throws CoreException {
return new ConsoleOutputStreamAdapter(console.newMessageStream());
}
@Override
public void init(String consoleId, String name, URL defaultIconUrl) {
console = null;
IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager();
IConsole[] allConsoles = consoleManager.getConsoles();
for (IConsole con : allConsoles) {
if (name.equals(con.getName()) && con instanceof MessageConsole) {
console = (MessageConsole) con;
console.clearConsole();
break;
}
}
if (console==null) {
URL iconUrl = LanguageSettingsProvidersImages.getImageUrl(consoleId);
if (iconUrl == null) {
iconUrl = defaultIconUrl;
}
ImageDescriptor imageDescriptor;
if (iconUrl != null) {
imageDescriptor = CDTSharedImages.getImageDescriptor(iconUrl.toString());
} else {
imageDescriptor = ImageDescriptor.getMissingImageDescriptor();
}
console = new MessageConsole(name, imageDescriptor);
console.activate();
consoleManager.addConsoles(new IConsole[]{ console });
}
}
}

View file

@ -12,9 +12,10 @@
package org.eclipse.cdt.managedbuilder.ui.preferences; package org.eclipse.cdt.managedbuilder.ui.preferences;
import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProvidersPage;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.cdt.ui.newui.AbstractCPropertyTab; import org.eclipse.cdt.ui.newui.AbstractCPropertyTab;
import org.eclipse.cdt.ui.newui.CDTPrefUtil; import org.eclipse.cdt.ui.newui.CDTPrefUtil;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
@ -25,19 +26,20 @@ import org.eclipse.swt.widgets.Group;
/** /**
* @since 5.1 * @since 5.1
* *
* @noextend This class is not intended to be subclassed by clients. * @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients. * @noinstantiate This class is not intended to be instantiated by clients.
*/ */
public class PropertyPageDefsTab extends AbstractCPropertyTab { public class PropertyPageDefsTab extends AbstractCPropertyTab {
private static final int SPACING = 5; // for radio buttons layout private static final int SPACING = 5; // for radio buttons layout
private Button show_tree; private Button show_tree;
private Button show_inc_files; private Button show_inc_files;
private Button show_mng; private Button show_mng;
private Button show_tool; private Button show_tool;
private Button show_exp; private Button show_exp;
private Button show_providers_tab; // temporary checkbox for scanner discovery Providers tab
private Button show_tipbox; private Button show_tipbox;
private Button b_0; private Button b_0;
@ -48,77 +50,82 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab {
private Button s_0; private Button s_0;
private Button s_1; private Button s_1;
private Button s_2; private Button s_2;
@Override @Override
public void createControls(Composite parent) { public void createControls(Composite parent) {
super.createControls(parent); super.createControls(parent);
usercomp.setLayout(new GridLayout(1, false)); usercomp.setLayout(new GridLayout(1, false));
show_mng = new Button(usercomp, SWT.CHECK); show_mng = new Button(usercomp, SWT.CHECK);
show_mng.setText(Messages.PropertyPageDefsTab_0); show_mng.setText(Messages.PropertyPageDefsTab_0);
show_mng.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); show_mng.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
show_inc_files = new Button(usercomp, SWT.CHECK); show_inc_files = new Button(usercomp, SWT.CHECK);
show_inc_files.setText(Messages.PropertyPageDefsTab_showIncludeFileTab); show_inc_files.setText(Messages.PropertyPageDefsTab_showIncludeFileTab);
show_inc_files.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); show_inc_files.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
show_tree = new Button(usercomp, SWT.CHECK); show_tree = new Button(usercomp, SWT.CHECK);
show_tree.setText(Messages.PropertyPageDefsTab_1); show_tree.setText(Messages.PropertyPageDefsTab_1);
show_tree.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); show_tree.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
show_tool = new Button(usercomp, SWT.CHECK); show_tool = new Button(usercomp, SWT.CHECK);
show_tool.setText(Messages.PropertyPageDefsTab_4); show_tool.setText(Messages.PropertyPageDefsTab_4);
show_tool.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); show_tool.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
show_exp = new Button(usercomp, SWT.CHECK); show_exp = new Button(usercomp, SWT.CHECK);
show_exp.setText(Messages.PropertyPageDefsTab_10); show_exp.setText(Messages.PropertyPageDefsTab_10);
show_exp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); show_exp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
show_providers_tab = new Button(usercomp, SWT.CHECK);
show_providers_tab.setText(Messages.PropertyPageDefsTab_showProvidersTab);
show_providers_tab.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
show_tipbox = new Button(usercomp, SWT.CHECK); show_tipbox = new Button(usercomp, SWT.CHECK);
show_tipbox.setText(Messages.PropertyPageDefsTab_16); show_tipbox.setText(Messages.PropertyPageDefsTab_16);
show_tipbox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); show_tipbox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Group saveGrp = new Group(usercomp, SWT.NONE); Group saveGrp = new Group(usercomp, SWT.NONE);
saveGrp.setText(Messages.PropertyPageDefsTab_11); saveGrp.setText(Messages.PropertyPageDefsTab_11);
saveGrp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); saveGrp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
FillLayout fl = new FillLayout(SWT.VERTICAL); FillLayout fl = new FillLayout(SWT.VERTICAL);
fl.spacing = SPACING; fl.spacing = SPACING;
fl.marginHeight = SPACING; fl.marginHeight = SPACING;
fl.marginWidth = SPACING; fl.marginWidth = SPACING;
saveGrp.setLayout(fl); saveGrp.setLayout(fl);
s_0 = new Button(saveGrp, SWT.RADIO); s_0 = new Button(saveGrp, SWT.RADIO);
s_0.setText(Messages.PropertyPageDefsTab_13); s_0.setText(Messages.PropertyPageDefsTab_13);
s_1 = new Button(saveGrp, SWT.RADIO); s_1 = new Button(saveGrp, SWT.RADIO);
s_1.setText(Messages.PropertyPageDefsTab_12); s_1.setText(Messages.PropertyPageDefsTab_12);
s_2 = new Button(saveGrp, SWT.RADIO); s_2 = new Button(saveGrp, SWT.RADIO);
s_2.setText(Messages.PropertyPageDefsTab_14); s_2.setText(Messages.PropertyPageDefsTab_14);
Group discGrp = new Group(usercomp, SWT.NONE); Group discGrp = new Group(usercomp, SWT.NONE);
discGrp.setText(Messages.PropertyPageDefsTab_5); discGrp.setText(Messages.PropertyPageDefsTab_5);
discGrp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); discGrp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
fl = new FillLayout(SWT.VERTICAL); fl = new FillLayout(SWT.VERTICAL);
fl.spacing = SPACING; fl.spacing = SPACING;
fl.marginHeight = SPACING; fl.marginHeight = SPACING;
fl.marginWidth = SPACING; fl.marginWidth = SPACING;
discGrp.setLayout(fl); discGrp.setLayout(fl);
b_0 = new Button(discGrp, SWT.RADIO); b_0 = new Button(discGrp, SWT.RADIO);
b_0.setText(Messages.PropertyPageDefsTab_6); b_0.setText(Messages.PropertyPageDefsTab_6);
b_1 = new Button(discGrp, SWT.RADIO); b_1 = new Button(discGrp, SWT.RADIO);
b_1.setText(Messages.PropertyPageDefsTab_7); b_1.setText(Messages.PropertyPageDefsTab_7);
b_2 = new Button(discGrp, SWT.RADIO); b_2 = new Button(discGrp, SWT.RADIO);
b_2.setText(Messages.PropertyPageDefsTab_8); b_2.setText(Messages.PropertyPageDefsTab_8);
b_3 = new Button(discGrp, SWT.RADIO); b_3 = new Button(discGrp, SWT.RADIO);
b_3.setText(Messages.PropertyPageDefsTab_9); b_3.setText(Messages.PropertyPageDefsTab_9);
show_inc_files.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_SHOW_INC_FILES)); show_inc_files.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_SHOW_INC_FILES));
show_tree.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_DTREE)); show_tree.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_DTREE));
show_mng.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOMNG)); show_mng.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOMNG));
show_tool.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOTOOLM)); show_tool.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOTOOLM));
show_exp.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_EXPORT)); show_exp.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_EXPORT));
show_providers_tab.setSelection(!CDTPrefUtil.getBool(LanguageSettingsProvidersPage.KEY_NO_SHOW_PROVIDERS));
show_tipbox.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_TIPBOX)); show_tipbox.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_TIPBOX));
switch (CDTPrefUtil.getInt(CDTPrefUtil.KEY_DISC_NAMES)) { switch (CDTPrefUtil.getInt(CDTPrefUtil.KEY_DISC_NAMES)) {
case CDTPrefUtil.DISC_NAMING_UNIQUE_OR_BOTH: b_0.setSelection(true); break; case CDTPrefUtil.DISC_NAMING_UNIQUE_OR_BOTH: b_0.setSelection(true); break;
case CDTPrefUtil.DISC_NAMING_UNIQUE_OR_IDS: b_1.setSelection(true); break; case CDTPrefUtil.DISC_NAMING_UNIQUE_OR_IDS: b_1.setSelection(true); break;
@ -140,6 +147,7 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab {
CDTPrefUtil.setBool(CDTPrefUtil.KEY_NOMNG, !show_mng.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_NOMNG, !show_mng.getSelection());
CDTPrefUtil.setBool(CDTPrefUtil.KEY_NOTOOLM, !show_tool.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_NOTOOLM, !show_tool.getSelection());
CDTPrefUtil.setBool(CDTPrefUtil.KEY_EXPORT, show_exp.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_EXPORT, show_exp.getSelection());
CDTPrefUtil.setBool(LanguageSettingsProvidersPage.KEY_NO_SHOW_PROVIDERS, !show_providers_tab.getSelection());
CDTPrefUtil.setBool(CDTPrefUtil.KEY_TIPBOX, show_tipbox.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_TIPBOX, show_tipbox.getSelection());
int x = 0; int x = 0;
if (b_1.getSelection()) x = 1; if (b_1.getSelection()) x = 1;
@ -152,7 +160,7 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab {
else if (s_2.getSelection()) x = CDTPrefUtil.POSITION_SAVE_NONE; else if (s_2.getSelection()) x = CDTPrefUtil.POSITION_SAVE_NONE;
CDTPrefUtil.setInt(CDTPrefUtil.KEY_POSSAVE, x); CDTPrefUtil.setInt(CDTPrefUtil.KEY_POSSAVE, x);
} }
@Override @Override
protected void performDefaults() { protected void performDefaults() {
show_tree.setSelection(false); show_tree.setSelection(false);
@ -160,6 +168,7 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab {
show_mng.setSelection(true); show_mng.setSelection(true);
show_tool.setSelection(true); show_tool.setSelection(true);
show_exp.setSelection(false); show_exp.setSelection(false);
show_providers_tab.setSelection(false);
show_tipbox.setSelection(false); show_tipbox.setSelection(false);
b_0.setSelection(true); b_0.setSelection(true);
b_1.setSelection(false); b_1.setSelection(false);

View file

@ -47,11 +47,15 @@ public class ScannerDiscoveryLegacySupport {
private static final String PREFERENCES_QUALIFIER = CCorePlugin.PLUGIN_ID; private static final String PREFERENCES_QUALIFIER = CCorePlugin.PLUGIN_ID;
private static final String LANGUAGE_SETTINGS_PROVIDERS_NODE = "languageSettingsProviders"; //$NON-NLS-1$ private static final String LANGUAGE_SETTINGS_PROVIDERS_NODE = "languageSettingsProviders"; //$NON-NLS-1$
/**
* Get preferences node for org.eclipse.cdt.core.
*/
private static Preferences getPreferences(IProject project) { private static Preferences getPreferences(IProject project) {
if (project == null) if (project == null) {
return InstanceScope.INSTANCE.getNode(PREFERENCES_QUALIFIER).node(LANGUAGE_SETTINGS_PROVIDERS_NODE); return InstanceScope.INSTANCE.getNode(PREFERENCES_QUALIFIER).node(LANGUAGE_SETTINGS_PROVIDERS_NODE);
else } else {
return new LocalProjectScope(project).getNode(PREFERENCES_QUALIFIER).node(LANGUAGE_SETTINGS_PROVIDERS_NODE); return new LocalProjectScope(project).getNode(PREFERENCES_QUALIFIER).node(LANGUAGE_SETTINGS_PROVIDERS_NODE);
}
} }
/** /**

View file

@ -226,7 +226,7 @@ The value &quot;true&quot; of this attribute is meaningful only for providers ca
<meta.section type="since"/> <meta.section type="since"/>
</appInfo> </appInfo>
<documentation> <documentation>
CDT 9.0 CDT 8.1
</documentation> </documentation>
</annotation> </annotation>

View file

@ -29,6 +29,7 @@ Export-Package: org.eclipse.cdt.internal.corext;x-internal:=true,
org.eclipse.cdt.internal.ui.includebrowser;x-internal:=true, org.eclipse.cdt.internal.ui.includebrowser;x-internal:=true,
org.eclipse.cdt.internal.ui.indexview;x-internal:=true, org.eclipse.cdt.internal.ui.indexview;x-internal:=true,
org.eclipse.cdt.internal.ui.language;x-internal:=true, org.eclipse.cdt.internal.ui.language;x-internal:=true,
org.eclipse.cdt.internal.ui.language.settings.providers;x-internal:=true,
org.eclipse.cdt.internal.ui.navigator;x-internal:=true, org.eclipse.cdt.internal.ui.navigator;x-internal:=true,
org.eclipse.cdt.internal.ui.newui;x-internal:=true, org.eclipse.cdt.internal.ui.newui;x-internal:=true,
org.eclipse.cdt.internal.ui.preferences;x-internal:=true, org.eclipse.cdt.internal.ui.preferences;x-internal:=true,
@ -75,6 +76,7 @@ Export-Package: org.eclipse.cdt.internal.corext;x-internal:=true,
org.eclipse.cdt.ui.browser.typeinfo, org.eclipse.cdt.ui.browser.typeinfo,
org.eclipse.cdt.ui.dialogs, org.eclipse.cdt.ui.dialogs,
org.eclipse.cdt.ui.internal.templateengine.wizard;x-internal:=true, org.eclipse.cdt.ui.internal.templateengine.wizard;x-internal:=true,
org.eclipse.cdt.ui.language.settings.providers,
org.eclipse.cdt.ui.newui, org.eclipse.cdt.ui.newui,
org.eclipse.cdt.ui.refactoring, org.eclipse.cdt.ui.refactoring,
org.eclipse.cdt.ui.refactoring.actions, org.eclipse.cdt.ui.refactoring.actions,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 B

After

Width:  |  Height:  |  Size: 144 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

View file

@ -607,6 +607,9 @@ includeFolderDecorator.description = Decorates missing include folders with erro
templatesViewName= Templates templatesViewName= Templates
AllLanguageSettingEntries.name=Providers
AllLanguageSettingEntries.tooltip=Language Setting Entries Providers
deleteConfigsCommand.name = Reset to Default deleteConfigsCommand.name = Reset to Default
excludeCommand.name = Exclude from Build excludeCommand.name = Exclude from Build
ActionDefinition.selectEnclosing.description = Expand the selection to enclosing C/C++ element ActionDefinition.selectEnclosing.description = Expand the selection to enclosing C/C++ element
@ -617,6 +620,7 @@ ActionDefinition.selectPrevious.description = Expand the selection to enclosing
ActionDefinition.selectPrevious.name = Select Previous C/C++ Element ActionDefinition.selectPrevious.name = Select Previous C/C++ Element
ActionDefinition.selectLast.description = Restore last selection in C/C++ editor ActionDefinition.selectLast.description = Restore last selection in C/C++ editor
ActionDefinition.selectLast.name = Restore Last C/C++ Selection ActionDefinition.selectLast.name = Restore Last C/C++ Selection
LanguageSettingsProviderAssociationExtensionPoint=Language Settings Provider UI
overrideAnnotation.label = C/C++ Override indicators overrideAnnotation.label = C/C++ Override indicators
transfer.EditorAppearance.name = C/C++ Editor Appearance transfer.EditorAppearance.name = C/C++ Editor Appearance
@ -631,4 +635,4 @@ extension-point.name = Refresh Exclusion Contributor
# New New Project Wizard # New New Project Wizard
newProjectWizard.name = C/C++ Project (prototype) newProjectWizard.name = C/C++ Project (prototype)
projectTypePages = Project Type Pages projectTypePages = Project Type Pages

View file

@ -26,6 +26,7 @@
<extension-point id="quickAssistProcessors" name="%quickAssistProcessorExtensionPoint" schema="schema/quickAssistProcessors.exsd"/> <extension-point id="quickAssistProcessors" name="%quickAssistProcessorExtensionPoint" schema="schema/quickAssistProcessors.exsd"/>
<extension-point id="DocCommentOwner" name="%DocCommentOwner.name" schema="schema/DocCommentOwner.exsd"/> <extension-point id="DocCommentOwner" name="%DocCommentOwner.name" schema="schema/DocCommentOwner.exsd"/>
<extension-point id="workingSetConfigurations" name="%workingSetConfigurationsExtensionPoint" schema="schema/workingSetConfigurations.exsd"/> <extension-point id="workingSetConfigurations" name="%workingSetConfigurationsExtensionPoint" schema="schema/workingSetConfigurations.exsd"/>
<extension-point id="LanguageSettingsProviderAssociation" name="%LanguageSettingsProviderAssociationExtensionPoint" schema="schema/LanguageSettingsProviderAssociation.exsd"/>
<extension-point id="RefreshExclusionContributor" name="%extension-point.name" schema="schema/RefreshExclusionContributor.exsd"/> <extension-point id="RefreshExclusionContributor" name="%extension-point.name" schema="schema/RefreshExclusionContributor.exsd"/>
<extension-point id="projectTypePages" name="%ProjectTypePages" schema="schema/projectTypePages.exsd"/> <extension-point id="projectTypePages" name="%ProjectTypePages" schema="schema/projectTypePages.exsd"/>
@ -3368,6 +3369,17 @@
</adapt> </adapt>
</enabledWhen> </enabledWhen>
</page> </page>
<page
name="Preprocessor Include Paths, Macros etc."
id="org.eclipse.cdt.ui.language.settings"
class="org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProvidersPage"
category="org.eclipse.cdt.ui.newui.Page_head_general">
<enabledWhen>
<adapt type="org.eclipse.core.resources.IResource">
<test property="org.eclipse.core.resources.projectNature" value="org.eclipse.cdt.core.cnature"/>
</adapt>
</enabledWhen>
</page>
</extension> </extension>
<extension <extension
@ -4302,6 +4314,38 @@
</complexArray> </complexArray>
</processType> </processType>
</extension> </extension>
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider
class="org.eclipse.cdt.core.language.settings.providers.LanguageSettingsGenericProvider"
id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"
name="CDT User Setting Entries"
prefer-non-shared="true">
</provider>
</extension>
<extension point="org.eclipse.cdt.ui.LanguageSettingsProviderAssociation">
<id-association
id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"
icon="icons/obj16/person-me.gif"
ui-clear-entries="true"
ui-edit-entries="true">
</id-association>
</extension>
<extension point="org.eclipse.cdt.ui.cPropertyTab">
<tab
class="org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsEntriesTab"
icon="icons/obj16/ls_entries.gif"
name="Entries"
weight="010"
parent="org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProvidersPage"
tooltip="%AllLanguageSettingEntries.tooltip"/>
<tab
class="org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProviderTab"
icon="icons/obj16/extension_obj.gif"
name="Providers"
weight="020"
parent="org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProvidersPage"
tooltip="%AllLanguageSettingEntries.tooltip"/>
</extension>
<extension <extension
point="org.eclipse.ui.commands"> point="org.eclipse.ui.commands">
<command <command

View file

@ -0,0 +1,200 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
<schema targetNamespace="org.eclipse.cdt.ui" xmlns="http://www.w3.org/2001/XMLSchema">
<annotation>
<appInfo>
<meta.schema plugin="org.eclipse.cdt.ui" id="LanguageSettingsProviderAssociation" name="Language Settings Provider UI Associations"/>
</appInfo>
<documentation>
This extension point defines appearance and behavior of UI controls for Language Settings Providers defined with extension point &lt;samp&gt;org.eclipse.cdt.core.LanguageSettingsProvider&lt;/samp&gt;.
</documentation>
</annotation>
<element name="extension">
<annotation>
<appInfo>
<meta.element />
</appInfo>
<documentation>
This extension point is used to define appearance and behavior of Language Settings Providers in user interface.
</documentation>
</annotation>
<complexType>
<sequence>
<element ref="id-association" minOccurs="0" maxOccurs="unbounded"/>
<element ref="class-association" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="point" type="string" use="required">
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attribute name="id" type="string">
<annotation>
<documentation>
ID of the extension point, not used
</documentation>
</annotation>
</attribute>
<attribute name="name" type="string">
<annotation>
<documentation>
Name of the extension point, not used
</documentation>
<appInfo>
<meta.attribute translatable="true"/>
</appInfo>
</annotation>
</attribute>
</complexType>
</element>
<element name="id-association">
<annotation>
<documentation>
The definition of UI elements associated with ID of language settings provider.
</documentation>
</annotation>
<complexType>
<attribute name="id" type="string" use="required">
<annotation>
<documentation>
ID of language settings provider for which appearance is being defined.
</documentation>
</annotation>
</attribute>
<attribute name="icon" type="string">
<annotation>
<documentation>
The path to the provider icon in the defining plugin, for example icons/obj16/picture.gif.
</documentation>
<appInfo>
<meta.attribute kind="resource"/>
</appInfo>
</annotation>
</attribute>
<attribute name="page" type="string">
<annotation>
<documentation>
Options page for the provider to appear in preferences in Providers tab.
</documentation>
<appInfo>
<meta.attribute kind="java" basedOn=":org.eclipse.cdt.ui.dialogs.ICOptionPage"/>
</appInfo>
</annotation>
</attribute>
<attribute name="ui-edit-entries" type="boolean">
<annotation>
<documentation>
Defines if user is allowed to edit provider&apos;s entries in UI.
</documentation>
</annotation>
</attribute>
<attribute name="ui-clear-entries" type="boolean">
<annotation>
<documentation>
Defines if user is allowed to clear provider&apos;s entries in UI. For some providers like compiler specs detectors that may trigger automatic rerun.
</documentation>
</annotation>
</attribute>
</complexType>
</element>
<element name="class-association">
<annotation>
<documentation>
The definition of UI elements associated with type of language settings provider. Providers subclassed from this type will inherit characteristics from closest super-type (unless exact ID association is defined).
</documentation>
</annotation>
<complexType>
<attribute name="class" type="string" use="required">
<annotation>
<documentation>
Class of language settings provider for which appearance is being defined.
</documentation>
<appInfo>
<meta.attribute kind="java"/>
</appInfo>
</annotation>
</attribute>
<attribute name="icon" type="string">
<annotation>
<documentation>
The path to the provider icon in the defining plugin, for example icons/obj16/picture.gif.
</documentation>
<appInfo>
<meta.attribute kind="resource"/>
</appInfo>
</annotation>
</attribute>
<attribute name="page" type="string">
<annotation>
<documentation>
Options page for the provider to appear in preferences in Providers tab.
</documentation>
<appInfo>
<meta.attribute kind="java" basedOn=":org.eclipse.cdt.ui.dialogs.ICOptionPage"/>
</appInfo>
</annotation>
</attribute>
<attribute name="ui-edit-entries" type="boolean">
<annotation>
<documentation>
Defines if user is allowed to edit provider&apos;s entries in UI.
</documentation>
</annotation>
</attribute>
<attribute name="ui-clear-entries" type="boolean">
<annotation>
<documentation>
Defines if user is allowed to clear provider&apos;s entries in UI. For some providers like compiler specs detectors that may trigger automatic rerun.
</documentation>
</annotation>
</attribute>
</complexType>
</element>
<annotation>
<appInfo>
<meta.section type="since"/>
</appInfo>
<documentation>
CDT 8.1
</documentation>
</annotation>
<annotation>
<appInfo>
<meta.section type="examples"/>
</appInfo>
<documentation>
For an example see definition for org.eclipse.cdt.ui.UserLanguageSettingsProvider.
</documentation>
</annotation>
<annotation>
<appInfo>
<meta.section type="apiinfo"/>
</appInfo>
<documentation>
[Enter API information here.]
</documentation>
</annotation>
<annotation>
<appInfo>
<meta.section type="copyright"/>
</appInfo>
<documentation>
Copyright (c) 2010, 2012 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
</documentation>
</annotation>
</schema>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,615 @@
/*******************************************************************************
* Copyright (c) 2010, 2012 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
*******************************************************************************/
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.LanguageSettingsImages;
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 ICConfigurationDescription cfgDescription;
private IProject project;
private ICLanguageSettingEntry entry;
private boolean clearValue;
private int kind;
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 checkBoxFramework;
private Button buttonOk;
private Button buttonCancel;
private static final int COMBO_INDEX_INCLUDE_PATH = 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_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.entry = null;
this.clearValue = true;
this.kind = kind;
}
/**
* 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.entry = entry;
this.kind = 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_PATH:
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_PATH:
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_PATH;
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_PATH;
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(kind);
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 (entry != null) {
if ((entry.getFlags() & ICSettingEntry.VALUE_WORKSPACE_PATH) == 0) {
pcindex = COMBO_PATH_INDEX_FILESYSTEM;
} else {
if (entry.getName().startsWith(SLASH)) {
pcindex = COMBO_PATH_INDEX_WORKSPACE;
} else {
pcindex = COMBO_PATH_INDEX_PROJECT;
}
}
}
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 (entry!=null && !clearValue) {
inputName.setText(entry.getName());
}
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 (entry != null && !clearValue) {
inputValue.setText(entry.getValue());
}
gd = new GridData(SWT.FILL, SWT.NONE, false, false);
gd.widthHint = comboPathWidth;
inputValue.setLayoutData(gd);
if (entry != null && kind == 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(entry!=null && (entry.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 "Framework"
checkBoxFramework = new Button(compCheckboxes, SWT.CHECK);
checkBoxFramework.setText(Messages.LanguageSettingEntryDialog_FrameworkFolder);
checkBoxFramework.setSelection(entry!=null && (entry.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 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_PATH:
case COMBO_INDEX_LIBRARY_PATH:
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);
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();
if (path.trim().length() == 0) {
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)) {
String name = inputName.getText();
text1 = name;
String value = inputValue.getText();
result = true;
int flagBuiltIn = checkBoxBuiltIn.getSelection() ? ICSettingEntry.BUILTIN : 0;
int flagFramework = checkBoxFramework.getSelection() ? ICSettingEntry.FRAMEWORKS_MAC : 0;
int indexPathKind = comboPathCategory.getSelectionIndex();
int kind = comboKind.getSelectionIndex();
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;
ICLanguageSettingEntry entry=null;
switch (comboKind.getSelectionIndex()) {
case COMBO_INDEX_INCLUDE_PATH:
entry = CDataUtil.createCIncludePathEntry(name, flags);
break;
case COMBO_INDEX_MACRO:
// note that value=null is not supported by CMacroEntry
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_PATH:
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_PATH:
case COMBO_INDEX_LIBRARY_PATH:
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());
break;
case COMBO_PATH_INDEX_PROJECT:
str = AbstractCPropertyTab.getProjectDirDialog(shell, inputName.getText(), project);
break;
case COMBO_PATH_INDEX_FILESYSTEM:
str = AbstractCPropertyTab.getFileSystemDirDialog(shell, inputName.getText());
break;
}
} else if (isFile) {
switch (comboPathCategory.getSelectionIndex()) {
case COMBO_PATH_INDEX_WORKSPACE:
str = AbstractCPropertyTab.getWorkspaceFileDialog(shell, inputName.getText());
break;
case COMBO_PATH_INDEX_PROJECT:
str = AbstractCPropertyTab.getProjectFileDialog(shell, inputName.getText(), project);
break;
case COMBO_PATH_INDEX_FILESYSTEM:
str = AbstractCPropertyTab.getFileSystemFileDialog(shell, inputName.getText());
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 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;
Image image = LanguageSettingsImages.getImage(kind, flags, indexPathKind==COMBO_PATH_INDEX_PROJECT);
iconComboKind.setImage(image);
shell.setImage(image);
buttonBrowse.setImage(pathCategoryImages[indexPathKind]);
}
}

View file

@ -0,0 +1,361 @@
/*******************************************************************************
* Copyright (c) 2010, 2012 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
*******************************************************************************/
package org.eclipse.cdt.internal.ui.language.settings.providers;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.ui.CDTSharedImages;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.dialogs.ICOptionPage;
/**
* This class manages extensions of extension point org.eclipse.cdt.core.LanguageSettingsProvider
* which defines appearance and behavior of UI controls for Language Settings Providers.
*
* @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class LanguageSettingsProviderAssociationManager {
/** Name of the extension point for contributing language settings provider associations */
private static final String PROVIDER_ASSOCIATION_EXTENSION_POINT_SIMPLE_ID = "LanguageSettingsProviderAssociation"; //$NON-NLS-1$
private static final String ELEM_ID_ASSOCIATION = "id-association"; //$NON-NLS-1$
private static final String ELEM_CLASS_ASSOCIATION = "class-association"; //$NON-NLS-1$
private static final String ATTR_ID = "id"; //$NON-NLS-1$
private static final String ATTR_CLASS = "class"; //$NON-NLS-1$
private static final String ATTR_ICON = "icon"; //$NON-NLS-1$
private static final String ATTR_PAGE = "page"; //$NON-NLS-1$
private static final String ATTR_UI_CLEAR_ENTRIES = "ui-clear-entries"; //$NON-NLS-1$
private static final String ATTR_UI_EDIT_ENTRIES = "ui-edit-entries"; //$NON-NLS-1$
private static boolean isLoaded = false;
private static List<URL> loadedIcons = new ArrayList<URL>();
private static Map<String, URL> fImagesUrlById = new HashMap<String, URL>();
private static Map<String, URL> fImagesUrlByClass = new HashMap<String, URL>();
private static List<String> fRegirestedIds = new ArrayList<String>();
private static List<String> fRegisteredClasses = new ArrayList<String>();
private static Map<String, Map<String, String>> fAssociationsById = new HashMap<String, Map<String, String>>();
private static Map<String, Map<String, String>> fAssociationsByClass = new HashMap<String, Map<String, String>>();
/**
* Load extensions into memory maps.
*/
private static void loadExtensions() {
if (isLoaded) {
return;
}
isLoaded = true;
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint extension = registry.getExtensionPoint(CUIPlugin.PLUGIN_ID, PROVIDER_ASSOCIATION_EXTENSION_POINT_SIMPLE_ID);
if (extension != null) {
IExtension[] extensions = extension.getExtensions();
for (IExtension ext : extensions) {
@SuppressWarnings("unused")
String extensionID = ext.getUniqueIdentifier();
for (IConfigurationElement cfgEl : ext.getConfigurationElements()) {
if (cfgEl.getName().equals(ELEM_ID_ASSOCIATION)) {
String id = cfgEl.getAttribute(ATTR_ID);
URL url = getIconUrl(cfgEl);
fImagesUrlById.put(id, url);
fRegirestedIds.add(id);
Map<String, String> properties = new HashMap<String, String>();
putNotEmpty(properties, ATTR_PAGE, cfgEl.getAttribute(ATTR_PAGE));
putNotEmpty(properties, ATTR_UI_CLEAR_ENTRIES, cfgEl.getAttribute(ATTR_UI_CLEAR_ENTRIES));
putNotEmpty(properties, ATTR_UI_EDIT_ENTRIES, cfgEl.getAttribute(ATTR_UI_EDIT_ENTRIES));
fAssociationsById.put(id, properties);
} else if (cfgEl.getName().equals(ELEM_CLASS_ASSOCIATION)) {
String className = cfgEl.getAttribute(ATTR_CLASS);
URL url = getIconUrl(cfgEl);
fImagesUrlByClass.put(className, url);
String pageClass = cfgEl.getAttribute(ATTR_PAGE);
if (pageClass != null && pageClass.length() > 0) {
fRegisteredClasses.add(className);
}
Map<String, String> properties = new HashMap<String, String>();
putNotEmpty(properties, ATTR_PAGE, cfgEl.getAttribute(ATTR_PAGE));
putNotEmpty(properties, ATTR_UI_CLEAR_ENTRIES, cfgEl.getAttribute(ATTR_UI_CLEAR_ENTRIES));
putNotEmpty(properties, ATTR_UI_EDIT_ENTRIES, cfgEl.getAttribute(ATTR_UI_EDIT_ENTRIES));
fAssociationsByClass.put(className, properties);
}
}
}
}
}
/**
* Put value into properties ignoring nulls.
*/
private static void putNotEmpty(Map<String, String> properties, String key, String value) {
if (value != null)
properties.put(key, value);
}
/**
* Find icon URL in its bundle.
*/
private static URL getIconUrl(IConfigurationElement config) {
URL url = null;
try {
String iconName = config.getAttribute(ATTR_ICON);
if (iconName != null) {
URL pluginInstallUrl = Platform.getBundle(config.getDeclaringExtension().getContributor().getName()).getEntry("/"); //$NON-NLS-1$
url = new URL(pluginInstallUrl, iconName);
if (loadedIcons.contains(url)) {
return url;
}
}
} catch (MalformedURLException e) {
CUIPlugin.log(e);
}
loadedIcons.add(url);
if (url != null) {
CDTSharedImages.register(url);
}
return url;
}
/**
* Get image URL for language settings provider with the given ID.
*
* @param providerId - ID of language settings provider.
* @return image URL or {@code null}.
*/
public static URL getImageUrl(String providerId) {
loadExtensions();
return fImagesUrlById.get(providerId);
}
/**
* Create an Options page for language settings provider with given ID.
*/
private static ICOptionPage createOptionsPageById(String providerId) {
loadExtensions();
if (fRegirestedIds.contains(providerId)) {
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint extension = registry.getExtensionPoint(CUIPlugin.PLUGIN_ID, PROVIDER_ASSOCIATION_EXTENSION_POINT_SIMPLE_ID);
if (extension != null) {
IExtension[] extensions = extension.getExtensions();
for (IExtension ext : extensions) {
try {
@SuppressWarnings("unused")
String extensionID = ext.getUniqueIdentifier();
for (IConfigurationElement cfgEl : ext.getConfigurationElements()) {
if (cfgEl.getName().equals(ELEM_ID_ASSOCIATION)) {
String id = cfgEl.getAttribute(ATTR_ID);
if (providerId.equals(id)) {
String pageClass = cfgEl.getAttribute(ATTR_PAGE);
if (pageClass != null && pageClass.trim().length() > 0) {
ICOptionPage page = (ICOptionPage) cfgEl.createExecutableExtension(ATTR_PAGE);
return page;
}
}
}
}
} catch (Exception e) {
CUIPlugin.log("Cannot load LanguageSettingsProviderAssociation extension " + ext.getUniqueIdentifier(), e); //$NON-NLS-1$
}
}
}
}
return null;
}
/**
* Create an Options page for language settings provider class by its name.
*/
private static ICOptionPage createOptionsPageByClass(String providerClassName) {
loadExtensions();
if (fRegisteredClasses.contains(providerClassName)) {
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint extension = registry.getExtensionPoint(CUIPlugin.PLUGIN_ID, PROVIDER_ASSOCIATION_EXTENSION_POINT_SIMPLE_ID);
if (extension != null) {
IExtension[] extensions = extension.getExtensions();
for (IExtension ext : extensions) {
try {
@SuppressWarnings("unused")
String extensionID = ext.getUniqueIdentifier();
for (IConfigurationElement cfgEl : ext.getConfigurationElements()) {
if (cfgEl.getName().equals(ELEM_CLASS_ASSOCIATION)) {
String className = cfgEl.getAttribute(ATTR_CLASS);
if (providerClassName.equals(className)) {
String pageClass = cfgEl.getAttribute(ATTR_PAGE);
if (pageClass!=null && pageClass.trim().length()>0) {
ICOptionPage page = (ICOptionPage) cfgEl.createExecutableExtension(ATTR_PAGE);
return page;
}
}
}
}
} catch (Exception e) {
CUIPlugin.log("Cannot load LanguageSettingsProviderAssociation extension " + ext.getUniqueIdentifier(), e); //$NON-NLS-1$
}
}
}
}
return null;
}
/**
* Returns Language Settings Provider image registered for closest superclass
* or interface.
*
* @param providerClass - class to find Language Settings Provider image.
* @return image or {@code null}
*/
public static URL getImage(Class<? extends ILanguageSettingsProvider> providerClass) {
URL url = null;
outer: for (Class<?> c = providerClass; c != null; c = c.getSuperclass()) {
url = getImageURL(c);
if (url != null) {
break;
}
// this does not check for super-interfaces, feel free to implement as needed
for (Class<?> i : c.getInterfaces()) {
url = getImageURL(i);
if (url != null) {
break outer;
}
}
}
return url;
}
/**
* Return image URL registered for the given class.
*/
private static URL getImageURL(Class<?> clazz) {
String className = clazz.getCanonicalName();
for (Entry<String, URL> entry : fImagesUrlByClass.entrySet()) {
if (entry.getKey().equals(className)) {
return entry.getValue();
}
}
return null;
}
/**
* Returns language settings provider Options page registered for closest superclass.
*
* @param provider - instance of provider to create Options page for.
* @return image or {@code null}.
*/
public static ICOptionPage createOptionsPage(ILanguageSettingsProvider provider) {
String id = provider.getId();
ICOptionPage optionsPage = createOptionsPageById(id);
if (optionsPage != null) {
return optionsPage;
}
Class<? extends ILanguageSettingsProvider> clazz = provider.getClass();
outer: for (Class<?> c = clazz ;c != null; c = c.getSuperclass()) {
optionsPage = createOptionsPageByClass(c);
if (optionsPage != null) {
break;
}
// this does not check for super-interfaces, feel free to implement as needed
for (Class<?> i : c.getInterfaces()) {
optionsPage = createOptionsPageByClass(i);
if (optionsPage != null) {
break outer;
}
}
}
return optionsPage;
}
/**
* Create an Options page for language settings provider class.
*/
private static ICOptionPage createOptionsPageByClass(Class<?> clazz) {
ICOptionPage optionsPage = null;
String className = clazz.getCanonicalName();
if (fRegisteredClasses.contains(className)) {
optionsPage = createOptionsPageByClass(className);
}
return optionsPage;
}
/**
* Returns value of the attribute of the provider by id or closest superclass.
*/
private static boolean getBooleanAttribute(ILanguageSettingsProvider provider, String attr) {
loadExtensions();
String id = provider.getId();
Map<String, String> properties = fAssociationsById.get(id);
if (properties != null) {
return Boolean.parseBoolean(properties.get(attr));
}
for (Class<?> c = provider.getClass();c != null; c = c.getSuperclass()) {
String className = c.getCanonicalName();
properties = fAssociationsByClass.get(className);
if (properties != null) {
return Boolean.parseBoolean(properties.get(attr));
}
// this does not check for superinterfaces, feel free to implement as needed
for (Class<?> i : c.getInterfaces()) {
String interfaceName = i.getCanonicalName();
properties = fAssociationsByClass.get(interfaceName);
if (properties != null) {
return Boolean.parseBoolean(properties.get(attr));
}
}
}
return false;
}
/**
* Check if the user is allowed to edit language settings provider entries in UI.
* @param provider - language settings provider.
* @return {@code true} if editing is allowed or {@code false} if not.
*/
public static boolean isAllowedToEditEntries(ILanguageSettingsProvider provider) {
return getBooleanAttribute(provider, ATTR_UI_EDIT_ENTRIES);
}
/**
* Check if the user is allowed to clear language settings provider entries in UI.
* @param provider - language settings provider.
* @return {@code true} if clearing is allowed or {@code false} if not.
*/
public static boolean isAllowedToClear(ILanguageSettingsProvider provider) {
return getBooleanAttribute(provider, ATTR_UI_CLEAR_ENTRIES);
}
}

View file

@ -0,0 +1,96 @@
/*******************************************************************************
* Copyright (c) 2010, 2012 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
*******************************************************************************/
package org.eclipse.cdt.internal.ui.language.settings.providers;
import java.net.URL;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.ui.CDTSharedImages;
import org.eclipse.cdt.internal.ui.newui.Messages;
/**
* Label provider for language settings providers.
*
*/
public class LanguageSettingsProvidersLabelProvider extends LabelProvider {
private static final String TEST_PLUGIN_ID_PATTERN = "org.eclipse.cdt.*.tests.*"; //$NON-NLS-1$
private static final String OOPS = "OOPS"; //$NON-NLS-1$
/**
* Returns base image key (for image without overlay).
*/
protected String getBaseKey(ILanguageSettingsProvider provider) {
String imageKey = null;
// try id-association
String id = provider.getId();
URL url = LanguageSettingsProviderAssociationManager.getImageUrl(id);
// try class-association
if (url == null) {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
if (rawProvider != null) {
url = LanguageSettingsProviderAssociationManager.getImage(rawProvider.getClass());
}
}
if (url != null) {
imageKey = url.toString();
}
if (imageKey == null) {
if (id.matches(TEST_PLUGIN_ID_PATTERN)) {
imageKey = CDTSharedImages.IMG_OBJS_CDT_TESTING;
} else {
imageKey = CDTSharedImages.IMG_OBJS_EXTENSION;
}
}
return imageKey;
}
/**
* Returns keys for image overlays. Returning {@code null} is not allowed.
*/
protected String[] getOverlayKeys(ILanguageSettingsProvider provider) {
return new String[5];
}
@Override
public Image getImage(Object element) {
if (element instanceof ILanguageSettingsProvider) {
ILanguageSettingsProvider provider = (ILanguageSettingsProvider)element;
String imageKey = getBaseKey(provider);
String[] overlayKeys = getOverlayKeys(provider);
return CDTSharedImages.getImageOverlaid(imageKey, overlayKeys);
}
return null;
}
@Override
public String getText(Object element) {
if (element instanceof ILanguageSettingsProvider) {
ILanguageSettingsProvider provider = (ILanguageSettingsProvider) element;
String name = provider.getName();
if (name != null) {
if (LanguageSettingsManager.isWorkspaceProvider(provider)) {
name = name + Messages.LanguageSettingsProvidersLabelProvider_TextDecorator_Shared;
}
return name;
}
return NLS.bind(Messages.GeneralMessages_NonAccessibleID, provider.getId());
}
return OOPS;
}
}

View file

@ -0,0 +1,104 @@
/*******************************************************************************
* Copyright (c) 2010, 2012 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
*******************************************************************************/
package org.eclipse.cdt.internal.ui.language.settings.providers;
import org.eclipse.core.resources.IProject;
import org.eclipse.cdt.core.language.settings.providers.ScannerDiscoveryLegacySupport;
import org.eclipse.cdt.ui.newui.AbstractPage;
import org.eclipse.cdt.ui.newui.ICPropertyTab;
/**
* Property page for language settings providers tabs.
* The handling of isLanguageSettingsProvidersEnabled is temporary, this control is to be removed.
*
* @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class LanguageSettingsProvidersPage extends AbstractPage {
/** @since 5.4 */ // temporary key, subject to removal
public static final String KEY_NO_SHOW_PROVIDERS = "properties.providers.tab.disable"; //$NON-NLS-1$
/** @since 5.4 */ // temporary key, subject to removal
public static final String KEY_NEWSD = "wizard.try.new.sd.enable"; //$NON-NLS-1$
private static boolean isLanguageSettingsProvidersEnabled = false;
private static IProject project = null;
@Override
protected boolean isSingle() {
return false;
}
/**
* Check if language settings providers functionality is enabled for the project.
* Need this method as another page could be inquiring before this page gets initialized.
*
* @noreference This method is temporary and not intended to be referenced by clients.
*/
public static boolean isLanguageSettingsProvidersEnabled(IProject prj) {
if (prj != null) {
if (prj.equals(project)) {
return isLanguageSettingsProvidersEnabled;
} else {
return ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(project);
}
}
return false;
}
/**
* Check if language settings providers functionality is enabled for the current project.
*
* @noreference This method is temporary and not intended to be referenced by clients.
*/
public boolean isLanguageSettingsProvidersEnabled() {
IProject prj = getProject();
if (prj != null) {
if (!prj.equals(project)) {
project = prj;
isLanguageSettingsProvidersEnabled = ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(project);
}
return isLanguageSettingsProvidersEnabled;
}
return false;
}
/**
* Enable or disable language settings providers functionality for the current project.
* Triggers update of all the property pages.
*
* Note that this method only sets property for the current editing session.
* Use {@link #applyLanguageSettingsProvidersEnabled()} to apply to the project.
*
* @noreference This method is temporary and not intended to be referenced by clients.
*/
public void setLanguageSettingsProvidersEnabled(boolean enable) {
isLanguageSettingsProvidersEnabled = enable;
project = getProject();
forEach(ICPropertyTab.UPDATE,getResDesc());
}
/**
* Apply enablement of language settings providers functionality to the current project.
*
* @noreference This method is temporary and not intended to be referenced by clients.
*/
public void applyLanguageSettingsProvidersEnabled() {
ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(getProject(), isLanguageSettingsProvidersEnabled);
}
@Override
public void dispose() {
isLanguageSettingsProvidersEnabled = false;
project = null;
super.dispose();
}
}

View file

@ -11,6 +11,7 @@
package org.eclipse.cdt.internal.ui.newui; package org.eclipse.cdt.internal.ui.newui;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
@ -23,6 +24,7 @@ import org.eclipse.swt.graphics.Image;
import org.eclipse.cdt.core.settings.model.ACPathEntry; import org.eclipse.cdt.core.settings.model.ACPathEntry;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.ui.CDTSharedImages; import org.eclipse.cdt.ui.CDTSharedImages;
@ -32,16 +34,48 @@ import org.eclipse.cdt.ui.CUIPlugin;
* Helper class to provide unified images for {@link ICLanguageSettingEntry}. * Helper class to provide unified images for {@link ICLanguageSettingEntry}.
*/ */
public class LanguageSettingsImages { public class LanguageSettingsImages {
public static Image getImage(int kind, int flags, boolean isProjectRelative) {
String imageKey = getImageKey(kind, flags, isProjectRelative);
if (imageKey != null) {
return CDTSharedImages.getImage(imageKey);
}
return null;
}
/**
* Returns image for the given entry from internally managed repository including
* necessary overlays for given configuration description.
*
* @param entry - language settings entry to get an image for.
* @param cfgDescription - configuration description of the entry.
* @return the image for the entry with appropriate overlays.
*/
public static Image getImage(ICLanguageSettingEntry entry, ICConfigurationDescription cfgDescription) {
String projectName = null;
if (cfgDescription != null) {
ICProjectDescription prjDescription = cfgDescription.getProjectDescription();
if (prjDescription != null) {
IProject project = prjDescription.getProject();
if (project != null) {
projectName = project.getName();
}
}
}
return getImage(entry, projectName, cfgDescription);
}
/** /**
* @return the base key for the image. * @return the base key for the image.
*/ */
public static String getImageKey(int kind, int flag, boolean isProjectRelative) { public static String getImageKey(int kind, int flag, boolean isProjectRelative) {
String imageKey = null; String imageKey = null;
boolean isWorkspacePath = (flag & ICSettingEntry.VALUE_WORKSPACE_PATH) != 0; boolean isWorkspacePath = (flag & ICSettingEntry.VALUE_WORKSPACE_PATH) != 0;
boolean isBuiltin = (flag & ICSettingEntry.BUILTIN) != 0; boolean isBuiltin = (flag & ICSettingEntry.BUILTIN) != 0;
boolean isFramework = (flag & ICSettingEntry.FRAMEWORKS_MAC) != 0; boolean isFramework = (flag & ICSettingEntry.FRAMEWORKS_MAC) != 0;
switch (kind) { switch (kind) {
case ICSettingEntry.INCLUDE_PATH: case ICSettingEntry.INCLUDE_PATH:
if (isWorkspacePath) { if (isWorkspacePath) {
@ -89,7 +123,7 @@ public class LanguageSettingsImages {
* @param cfgDescription - configuration description of the entry. * @param cfgDescription - configuration description of the entry.
* @return the image for the entry with appropriate overlays. * @return the image for the entry with appropriate overlays.
*/ */
public static Image getImage(ICLanguageSettingEntry entry, String projectName, ICConfigurationDescription cfgDescription) { private static Image getImage(ICLanguageSettingEntry entry, String projectName, ICConfigurationDescription cfgDescription) {
int kind = entry.getKind(); int kind = entry.getKind();
int flags = entry.getFlags(); int flags = entry.getFlags();
boolean isWorkspacePath = (flags & ICSettingEntry.VALUE_WORKSPACE_PATH) != 0; boolean isWorkspacePath = (flags & ICSettingEntry.VALUE_WORKSPACE_PATH) != 0;

View file

@ -4,7 +4,7 @@
* 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
* http://www.eclipse.org/legal/epl-v10.html * http://www.eclipse.org/legal/epl-v10.html
* *
* Contributors: * Contributors:
* Andrew Gvozdev - Initial API and implementation * Andrew Gvozdev - Initial API and implementation
* IBM Corporation * IBM Corporation
@ -138,7 +138,6 @@ public class Messages extends NLS {
public static String EnvironmentTab_8; public static String EnvironmentTab_8;
public static String EnvironmentTab_9; public static String EnvironmentTab_9;
public static String ErrorParsTab_error_IllegalCharacter; public static String ErrorParsTab_error_IllegalCharacter;
public static String ErrorParsTab_error_NonAccessibleID;
public static String ErrorParsTab_error_NonEmptyName; public static String ErrorParsTab_error_NonEmptyName;
public static String ErrorParsTab_error_NonUniqueID; public static String ErrorParsTab_error_NonUniqueID;
public static String ErrorParsTab_error_OnApplyingSettings; public static String ErrorParsTab_error_OnApplyingSettings;
@ -174,6 +173,8 @@ public class Messages extends NLS {
public static String FileListControl_editdialog_title; public static String FileListControl_editdialog_title;
public static String FileListControl_movedown; public static String FileListControl_movedown;
public static String FileListControl_moveup; public static String FileListControl_moveup;
public static String GeneralMessages_InternalError_ReportLogToCdtTeam;
public static String GeneralMessages_NonAccessibleID;
public static String IncludeDialog_0; public static String IncludeDialog_0;
public static String IncludeDialog_1; public static String IncludeDialog_1;
public static String IncludeDialog_2; public static String IncludeDialog_2;
@ -186,9 +187,43 @@ public class Messages extends NLS {
public static String IncludeTab_2; public static String IncludeTab_2;
public static String IncludeTab_export; public static String IncludeTab_export;
public static String IncludeTab_import; public static String IncludeTab_import;
public static String LanguageSettingEntryDialog_Add;
public static String LanguageSettingEntryDialog_BuiltInFlag;
public static String LanguageSettingEntryDialog_Directory;
public static String LanguageSettingEntryDialog_File;
public static String LanguageSettingEntryDialog_Filesystem;
public static String LanguageSettingEntryDialog_FrameworkFolder;
public static String LanguageSettingEntryDialog_IncludeDirectory;
public static String LanguageSettingEntryDialog_IncludeFile;
public static String LanguageSettingEntryDialog_Library;
public static String LanguageSettingEntryDialog_LibraryPath;
public static String LanguageSettingEntryDialog_Name;
public static String LanguageSettingEntryDialog_Path;
public static String LanguageSettingEntryDialog_PreporocessorMacro;
public static String LanguageSettingEntryDialog_PreprocessorMacroFile;
public static String LanguageSettingEntryDialog_ProjectPath;
public static String LanguageSettingEntryDialog_SelectKind;
public static String LanguageSettingEntryDialog_Value;
public static String LanguageSettingEntryDialog_WorkspacePath;
public static String LanguageSettingsEntriesTab_Cannot_Determine_Languages;
public static String LanguageSettingsEntriesTab_Entries_Not_Editable;
public static String LanguageSettingsImages_FileDoesNotExist; public static String LanguageSettingsImages_FileDoesNotExist;
public static String LanguageSettingsImages_FolderDoesNotExist; public static String LanguageSettingsImages_FolderDoesNotExist;
public static String LanguageSettingsImages_UsingRelativePathsNotRecommended; public static String LanguageSettingsImages_UsingRelativePathsNotRecommended;
public static String LanguageSettingsProviders_EnableForProject;
public static String LanguageSettingsProvidersLabelProvider_TextDecorator_Shared;
public static String LanguageSettingsProviderTab_AreYouSureToResetProviders;
public static String LanguageSettingsProviderTab_Clear;
public static String LanguageSettingsProviderTab_LanguageSettingsProvidersOptions;
public static String LanguageSettingsProviderTab_OptionsCanBeChangedInPreferencesDiscoveryTab;
public static String LanguageSettingsProviderTab_ProviderOptions;
public static String LanguageSettingsProviderTab_Reset;
public static String LanguageSettingsProviderTab_SettingEntries;
public static String LanguageSettingsProviderTab_SettingEntriesTooltip;
public static String LanguageSettingsProviderTab_ShareProviders;
public static String LanguageSettingsProviderTab_StoreEntriesInsideProject;
public static String LanguageSettingsProviderTab_TitleResetProviders;
public static String LanguageSettingsProviderTab_WorkspaceSettings;
public static String LanguagesTab_0; public static String LanguagesTab_0;
public static String LanguagesTab_1; public static String LanguagesTab_1;
public static String LibraryPathTab_1; public static String LibraryPathTab_1;

View file

@ -166,9 +166,45 @@ IncludeDialog_0=Directory:
IncludeDialog_1=File: IncludeDialog_1=File:
IncludeDialog_2=Add to all configurations IncludeDialog_2=Add to all configurations
IncludeDialog_3=Add to all languages IncludeDialog_3=Add to all languages
LanguageSettingEntryDialog_Add=Add
LanguageSettingEntryDialog_BuiltInFlag=Treat as built-in
LanguageSettingEntryDialog_Directory=Dir:
LanguageSettingEntryDialog_File=File:
LanguageSettingEntryDialog_Filesystem=Filesystem
LanguageSettingEntryDialog_FrameworkFolder=Framework folder (Mac only)
LanguageSettingEntryDialog_IncludeDirectory=Include Directory
LanguageSettingEntryDialog_IncludeFile=Include File
LanguageSettingEntryDialog_Library=Library
LanguageSettingEntryDialog_LibraryPath=Library Path
LanguageSettingEntryDialog_Name=Name:
LanguageSettingEntryDialog_Path=Path:
LanguageSettingEntryDialog_PreporocessorMacro=Preprocessor Macro
LanguageSettingEntryDialog_PreprocessorMacroFile=Preprocessor Macros File
LanguageSettingEntryDialog_ProjectPath=Project Path
LanguageSettingEntryDialog_SelectKind=Select Kind:
LanguageSettingEntryDialog_Value=Value:
LanguageSettingEntryDialog_WorkspacePath=Workspace Path
LanguageSettingsEntriesTab_Cannot_Determine_Languages=Cannot determine toolchain languages.
LanguageSettingsEntriesTab_Entries_Not_Editable=Setting entries for this provider are supplied by the system and are not editable.
LanguageSettingsImages_FileDoesNotExist=The selected file does not exist or not accessible. LanguageSettingsImages_FileDoesNotExist=The selected file does not exist or not accessible.
LanguageSettingsImages_FolderDoesNotExist=The selected folder does not exist or not accessible. LanguageSettingsImages_FolderDoesNotExist=The selected folder does not exist or not accessible.
LanguageSettingsImages_UsingRelativePathsNotRecommended=Using relative paths is ambiguous and not recommended. It can cause unexpected effects. LanguageSettingsImages_UsingRelativePathsNotRecommended=Using relative paths is ambiguous and not recommended. It can cause unexpected effects.
LanguageSettingsProviders_EnableForProject=Enable language settings providers for this project
LanguageSettingsProvidersLabelProvider_TextDecorator_Shared=\ \ \ [ Shared ]
LanguageSettingsProviderTab_AreYouSureToResetProviders=Are you sure you want to reset all customized language settings providers?\nPlease note that providers may regain entries on their own schedule.
LanguageSettingsProviderTab_Clear=Clear Entries
LanguageSettingsProviderTab_LanguageSettingsProvidersOptions=Language Settings Provider Options
LanguageSettingsProviderTab_OptionsCanBeChangedInPreferencesDiscoveryTab=Options of global providers below can be changed in {0}, Discovery Tab.
LanguageSettingsProviderTab_Reset=Reset
LanguageSettingsProviderTab_ProviderOptions=Language Settings Provider Options
LanguageSettingsProviderTab_SettingEntries=Setting Entries
LanguageSettingsProviderTab_SettingEntriesTooltip=Setting Entries
LanguageSettingsProviderTab_ShareProviders=Share setting entries between projects (global provider)
LanguageSettingsProviderTab_StoreEntriesInsideProject=Store entries in project settings folder (easing project miration)
LanguageSettingsProviderTab_TitleResetProviders=Reset Language Settings Providers
LanguageSettingsProviderTab_WorkspaceSettings=Workspace Settings
LanguagesTab_0=Content type LanguagesTab_0=Content type
LanguagesTab_1=Language LanguagesTab_1=Language
LibraryPathTab_1=Add... LibraryPathTab_1=Add...
@ -207,7 +243,6 @@ ErrorParsTab_error_NonEmptyName=Specify non empty name
ErrorParsTab_error_NonUniqueID=Error parser ID is not unique, specify different name ErrorParsTab_error_NonUniqueID=Error parser ID is not unique, specify different name
ErrorParsTab_error_OnApplyingSettings=Error applying Error Parser Tab settings ErrorParsTab_error_OnApplyingSettings=Error applying Error Parser Tab settings
ErrorParsTab_error_OnRestoring=Error restoring default Error Parser Tab settings ErrorParsTab_error_OnRestoring=Error restoring default Error Parser Tab settings
ErrorParsTab_error_NonAccessibleID=[ Not accessible id={0} ]
ErrorParsTab_error_IllegalCharacter=Special character ''{0}'' is not allowed ErrorParsTab_error_IllegalCharacter=Special character ''{0}'' is not allowed
ErrorParsTab_label_EnterName=Enter name of new error parser: ErrorParsTab_label_EnterName=Enter name of new error parser:
ErrorParsTab_label_DefaultRegexErrorParserName=Regex Error Parser ErrorParsTab_label_DefaultRegexErrorParserName=Regex Error Parser
@ -274,6 +309,8 @@ CDTMainWizardPage_0=Project name cannot contain '\#' symbol
CDTMainWizardPage_1=Project category is selected. Expand the category and select a concrete project type. CDTMainWizardPage_1=Project category is selected. Expand the category and select a concrete project type.
CProjectWizard_0=Add C Project Nature CProjectWizard_0=Add C Project Nature
CCProjectWizard_0=Add CC Project Nature CCProjectWizard_0=Add CC Project Nature
GeneralMessages_InternalError_ReportLogToCdtTeam=Internal error happened, report application log to CDT team.
GeneralMessages_NonAccessibleID=[ Not accessible id={0} ]
WorkingSetConfigAction_21=Building project WorkingSetConfigAction_21=Building project
WorkingSetConfigAction_22=Build error WorkingSetConfigAction_22=Build error
IncludeTab_export=Export Settings... IncludeTab_export=Export Settings...

View file

@ -10,12 +10,13 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.viewsupport; package org.eclipse.cdt.internal.ui.viewsupport;
import java.util.List;
import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.resources.IResourceStatus;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.ListenerList;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.IBaseLabelProvider;
@ -29,6 +30,10 @@ import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.ui.texteditor.MarkerUtilities; import org.eclipse.ui.texteditor.MarkerUtilities;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvidersKeeper;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.language.settings.providers.ScannerDiscoveryLegacySupport;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
@ -36,6 +41,7 @@ import org.eclipse.cdt.core.model.ISourceRange;
import org.eclipse.cdt.core.model.ISourceReference; import org.eclipse.cdt.core.model.ISourceReference;
import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.ui.CElementImageDescriptor; import org.eclipse.cdt.ui.CElementImageDescriptor;
@ -379,6 +385,31 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
} }
} }
private static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) {
if (rc instanceof IProject)
return false;
if (!ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(rc.getProject())) {
ICResourceDescription rcDescription = cfgDescription.getResourceDescription(rc.getProjectRelativePath(), true);
return rcDescription != null;
}
if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
for (ILanguageSettingsProvider provider: ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()) {
for (String languageId : LanguageSettingsManager.getLanguages(rc, cfgDescription)) {
List<ICLanguageSettingEntry> list = provider.getSettingEntries(cfgDescription, rc, languageId);
if (list != null) {
List<ICLanguageSettingEntry> listDefault = provider.getSettingEntries(cfgDescription, rc.getParent(), languageId);
// != is OK here due as the equal lists will have the same reference in WeakHashSet
if (list != listDefault)
return true;
}
}
}
}
return false;
}
/** /**
* @param rc - resource to check * @param rc - resource to check
* @return flags {@link TICK_CONFIGURATION} if the resource has custom settings and possibly needs * @return flags {@link TICK_CONFIGURATION} if the resource has custom settings and possibly needs
@ -393,9 +424,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
if (prjDescription != null) { if (prjDescription != null) {
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
if (cfgDescription != null) { if (cfgDescription != null) {
IPath path = rc.getProjectRelativePath(); if (isCustomizedResource(cfgDescription, rc))
ICResourceDescription rcDescription = cfgDescription.getResourceDescription(path, true);
if (rcDescription != null)
result |= TICK_CONFIGURATION; result |= TICK_CONFIGURATION;
} }
} }

View file

@ -172,6 +172,8 @@ public class CDTSharedImages {
public static final String IMG_OBJS_CORRECTION_RENAME = "icons/obj16/correction_rename.gif"; //$NON-NLS-1$ public static final String IMG_OBJS_CORRECTION_RENAME = "icons/obj16/correction_rename.gif"; //$NON-NLS-1$
public static final String IMG_OBJS_CORRECTION_LINKED_RENAME = "icons/obj16/correction_linked_rename.gif"; //$NON-NLS-1$ public static final String IMG_OBJS_CORRECTION_LINKED_RENAME = "icons/obj16/correction_linked_rename.gif"; //$NON-NLS-1$
/** @since 5.4 */
public static final String IMG_ETOOL_PROJECT = "icons/etool16/prj_obj.gif"; //$NON-NLS-1$
public static final String IMG_VIEW_BUILD_CONSOLE = "icons/view16/buildconsole.gif"; //$NON-NLS-1$ public static final String IMG_VIEW_BUILD_CONSOLE = "icons/view16/buildconsole.gif"; //$NON-NLS-1$
// Images for file list control // Images for file list control
@ -186,6 +188,12 @@ public class CDTSharedImages {
public static final String IMG_OVR_ERROR = "icons/ovr16/error_co.gif"; //$NON-NLS-1$ public static final String IMG_OVR_ERROR = "icons/ovr16/error_co.gif"; //$NON-NLS-1$
public static final String IMG_OVR_SETTING = "icons/ovr16/setting_nav.gif"; //$NON-NLS-1$ public static final String IMG_OVR_SETTING = "icons/ovr16/setting_nav.gif"; //$NON-NLS-1$
public static final String IMG_OVR_INACTIVE = "icons/ovr16/inactive_co.gif"; //$NON-NLS-1$ public static final String IMG_OVR_INACTIVE = "icons/ovr16/inactive_co.gif"; //$NON-NLS-1$
/** @since 5.4 */
public static final String IMG_OVR_PARENT = "icons/ovr16/path_inherit_co.gif"; //$NON-NLS-1$
/** @since 5.4 */
public static final String IMG_OVR_EDITED = "icons/ovr16/edited_ovr.gif"; //$NON-NLS-1$
/** @since 5.4 */
public static final String IMG_OVR_USER = "icons/ovr16/person_ovr.gif"; //$NON-NLS-1$
// Pin & Clone // Pin & Clone
public static final String IMG_THREAD_SUSPENDED_R_PINNED = "icons/obj16/threads_obj_r.gif"; //$NON-NLS-1$ public static final String IMG_THREAD_SUSPENDED_R_PINNED = "icons/obj16/threads_obj_r.gif"; //$NON-NLS-1$

View file

@ -0,0 +1,79 @@
/*******************************************************************************
* Copyright (c) 2010, 2012 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
*******************************************************************************/
package org.eclipse.cdt.ui.language.settings.providers;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage;
import org.eclipse.cdt.ui.newui.AbstractCPropertyTab;
import org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProviderTab;
/**
* Abstract class to implement language settings providers Options page.
*
* @since 5.4
*/
public abstract class AbstractLanguageSettingProviderOptionPage extends AbstractCOptionPage {
private LanguageSettingsProviderTab providerTab;
private String providerId;
/**
* Initialize the options page with the owning tab and provider ID.
*
* @param providerTab - provider tab which owns the options page.
* @param providerId - ID of the provider the options page is for.
*/
public void init(AbstractCPropertyTab providerTab, String providerId) {
this.providerTab = (LanguageSettingsProviderTab) providerTab;
this.providerId = providerId;
}
/**
* Get provider being displayed on this Options Page.
* @return provider.
*/
public ILanguageSettingsProvider getProvider() {
return LanguageSettingsManager.getRawProvider(providerTab.getProvider(providerId));
}
/**
* Get working copy of the provider to allow its options to be modified.
* @return working copy of the provider.
*/
public ILanguageSettingsProvider getProviderWorkingCopy() {
return providerTab.getWorkingCopy(providerId);
}
/**
* Refresh provider item in the table and update buttons.
* This method is intended for use by an Options Page of the provider.
*
* @param provider - provider item in the table to refresh.
*/
public void refreshItem(ILanguageSettingsProvider provider) {
providerTab.refreshItem(provider);
}
@Override
public void performApply(IProgressMonitor monitor) throws CoreException {
// normally should be handled by LanguageSettingsProviderTab
}
@Override
public void performDefaults() {
// normally should be handled by LanguageSettingsProviderTab
}
}

View file

@ -0,0 +1,33 @@
/*******************************************************************************
* Copyright (c) 2012, 2012 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
*******************************************************************************/
package org.eclipse.cdt.ui.language.settings.providers;
import java.net.URL;
import org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProviderAssociationManager;
/**
* Utility class to provide API for language settings providers images.
*
* @since 5.4
*/
public class LanguageSettingsProvidersImages {
/**
* Get image URL for language settings provider with the given ID.
*
* @param providerId - ID of language settings provider.
* @return image URL or {@code null}.
*/
public static URL getImageUrl(String providerId) {
return LanguageSettingsProviderAssociationManager.getImageUrl(providerId);
}
}

View file

@ -64,70 +64,72 @@ import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
import org.eclipse.cdt.internal.ui.newui.Messages; import org.eclipse.cdt.internal.ui.newui.Messages;
/** /**
* It is a parent for all standard property tabs * It is a parent for all standard property tabs
* in new CDT model. * in new CDT model.
* *
* Although it's enough for new tabs to implement * Although it's enough for new tabs to implement
* ICPropertyTab interface only, it would be better * ICPropertyTab interface only, it would be better
* to extend them from this class. * to extend them from this class.
* *
* In this case, we'll able to use: * In this case, we'll able to use:
* - a lot of utility methods via "provider" link. * - a lot of utility methods via "provider" link.
* In particular, it allows to get current project, * In particular, it allows to get current project,
* configuration etc. See ICPropertyProvider interface. * configuration etc. See ICPropertyProvider interface.
* - a standard way to create buttons (ins/edit/del etc) * - a standard way to create buttons (ins/edit/del etc)
* and to handle their events (see buttonPressed(int)) * and to handle their events (see buttonPressed(int))
* - several utility methods to create widgets in the * - several utility methods to create widgets in the
* uniform manner (setupLabel(), setupText() etc). * uniform manner (setupLabel(), setupText() etc).
* - means to handle control messages which are the main * - means to handle control messages which are the main
* communication way for new CDT model pages and tabs. * communication way for new CDT model pages and tabs.
*/ */
public abstract class AbstractCPropertyTab implements ICPropertyTab { public abstract class AbstractCPropertyTab implements ICPropertyTab {
public static final Method GRAY_METHOD = getGrayEnabled(); public static final Method GRAY_METHOD = getGrayEnabled();
public static final int BUTTON_WIDTH = 120; // used as hint for all push buttons public static final int BUTTON_WIDTH = 120; // used as hint for all push buttons
// commonly used button names // commonly used button names
public static final String EMPTY_STR = ""; //$NON-NLS-1$ public static final String EMPTY_STR = ""; //$NON-NLS-1$
public static final String ADD_STR = Messages.FileListControl_add; public static final String ADD_STR = Messages.FileListControl_add;
public static final String DEL_STR = Messages.FileListControl_delete; public static final String DEL_STR = Messages.FileListControl_delete;
public static final String EDIT_STR = Messages.FileListControl_edit; public static final String EDIT_STR = Messages.FileListControl_edit;
public static final String MOVEUP_STR = Messages.FileListControl_moveup; public static final String MOVEUP_STR = Messages.FileListControl_moveup;
public static final String MOVEDOWN_STR = Messages.FileListControl_movedown; public static final String MOVEDOWN_STR = Messages.FileListControl_movedown;
public static final String WORKSPACEBUTTON_NAME = Messages.FileListControl_button_workspace; /** @since 5.4 */
public static final String FILESYSTEMBUTTON_NAME = Messages.FileListControl_button_fs; public static final String PROJECTBUTTON_NAME = "Project...";
public static final String VARIABLESBUTTON_NAME = Messages.AbstractCPropertyTab_1; public static final String WORKSPACEBUTTON_NAME = Messages.FileListControl_button_workspace;
public static final String FILESYSTEM_DIR_DIALOG_MSG = Messages.BrowseEntryDialog_fs_dir_dlg_msg; public static final String FILESYSTEMBUTTON_NAME = Messages.FileListControl_button_fs;
public static final String FILESYSTEM_FILE_DIALOG_TITLE = EMPTY_STR; public static final String VARIABLESBUTTON_NAME = Messages.AbstractCPropertyTab_1;
public static final String WORKSPACE_DIR_DIALOG_TITLE = Messages.BrowseEntryDialog_wsp_dir_dlg_title; public static final String FILESYSTEM_DIR_DIALOG_MSG = Messages.BrowseEntryDialog_fs_dir_dlg_msg;
public static final String WORKSPACE_FILE_DIALOG_TITLE = Messages.BrowseEntryDialog_wsp_file_dlg_title; public static final String FILESYSTEM_FILE_DIALOG_TITLE = EMPTY_STR;
public static final String WORKSPACE_DIR_DIALOG_MSG = Messages.BrowseEntryDialog_wsp_dir_dlg_msg; public static final String WORKSPACE_DIR_DIALOG_TITLE = Messages.BrowseEntryDialog_wsp_dir_dlg_title;
public static final String WORKSPACE_FILE_DIALOG_MSG = Messages.BrowseEntryDialog_wsp_file_dlg_msg; public static final String WORKSPACE_FILE_DIALOG_TITLE = Messages.BrowseEntryDialog_wsp_file_dlg_title;
public static final String WORKSPACE_FILE_DIALOG_ERR = Messages.BrowseEntryDialog_wsp_file_dlg_err; public static final String WORKSPACE_DIR_DIALOG_MSG = Messages.BrowseEntryDialog_wsp_dir_dlg_msg;
public static final String WORKSPACE_DIR_DIALOG_ERR = Messages.BrowseEntryDialog_wsp_dir_dlg_err; public static final String WORKSPACE_FILE_DIALOG_MSG = Messages.BrowseEntryDialog_wsp_file_dlg_msg;
public static final String BACKGROUND_TEXT_DEFAULT = Messages.AbstractCPropertyTab_2; public static final String WORKSPACE_FILE_DIALOG_ERR = Messages.BrowseEntryDialog_wsp_file_dlg_err;
public static final String WORKSPACE_DIR_DIALOG_ERR = Messages.BrowseEntryDialog_wsp_dir_dlg_err;
public static final String BACKGROUND_TEXT_DEFAULT = Messages.AbstractCPropertyTab_2;
public static final Color BACKGROUND_FOR_USER_VAR = new Color(Display.getDefault(), 255, 255, 200); // light yellow public static final Color BACKGROUND_FOR_USER_VAR = new Color(Display.getDefault(), 255, 255, 200); // light yellow
private static final String PREFIX = "org.eclipse.cdt.ui."; //$NON-NLS-1$ private static final String PREFIX = "org.eclipse.cdt.ui."; //$NON-NLS-1$
public static final int TRI_UNKNOWN = 2; public static final int TRI_UNKNOWN = 2;
public static final int TRI_YES = 1; public static final int TRI_YES = 1;
public static final int TRI_NO = 0; public static final int TRI_NO = 0;
protected static final String ENUM = "enum"; //$NON-NLS-1$ protected static final String ENUM = "enum"; //$NON-NLS-1$
protected static final String SSET = "set"; //$NON-NLS-1$ protected static final String SSET = "set"; //$NON-NLS-1$
private PageBook pageBook; // to select between background and usercomp. private PageBook pageBook; // to select between background and usercomp.
private CLabel background; private CLabel background;
private Composite userdata; private Composite userdata;
protected Composite usercomp; // space where user can create widgets protected Composite usercomp; // space where user can create widgets
protected Composite buttoncomp; // space for buttons on the right protected Composite buttoncomp; // space for buttons on the right
private Button[] buttons; // buttons in buttoncomp private Button[] buttons; // buttons in buttoncomp
public ICPropertyProvider page; public ICPropertyProvider page;
protected Image icon = null; protected Image icon = null;
private String helpId = EMPTY_STR; private String helpId = EMPTY_STR;
protected boolean visible; protected boolean visible;
@Override @Override
@ -139,8 +141,8 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
/** /**
* Creates basic widgets for property tab. * Creates basic widgets for property tab.
* Descendants should, normally, override * Descendants should, normally, override
* this method but call super.createControls(). * this method but call super.createControls().
* *
* @param parent * @param parent
*/ */
protected void createControls(Composite parent) { protected void createControls(Composite parent) {
@ -153,27 +155,27 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
GridData gd; GridData gd;
userdata= new Composite(pageBook, SWT.NONE); userdata= new Composite(pageBook, SWT.NONE);
userdata.setLayout(new GridLayout(2, false)); userdata.setLayout(new GridLayout(2, false));
usercomp = new Composite(userdata, SWT.NONE); usercomp = new Composite(userdata, SWT.NONE);
usercomp.setLayoutData(gd= new GridData(GridData.FILL_BOTH)); usercomp.setLayoutData(gd= new GridData(GridData.FILL_BOTH));
gd.widthHint= 150; gd.widthHint= 150;
buttoncomp = new Composite(userdata, SWT.NONE); buttoncomp = new Composite(userdata, SWT.NONE);
buttoncomp.setLayoutData(gd= new GridData(GridData.END)); buttoncomp.setLayoutData(gd= new GridData(GridData.END));
// width hint must be set to one, otherwise subclasses that do not have buttons // width hint must be set to one, otherwise subclasses that do not have buttons
// don't look pretty, bug 242408 // don't look pretty, bug 242408
gd.widthHint= 1; gd.widthHint= 1;
pageBook.showPage(userdata); pageBook.showPage(userdata);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, helpId); PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, helpId);
} }
/** /**
* The common way to create buttons cluster * The common way to create buttons cluster
* on the right of tab workspace. * on the right of tab workspace.
* @param names : array of button names * @param names : array of button names
* null instead of name means "skip place" * null instead of name means "skip place"
*/ */
protected void initButtons(String[] names) { protected void initButtons(String[] names) {
initButtons(buttoncomp, names, 80); initButtons(buttoncomp, names, 80);
@ -181,7 +183,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
protected void initButtons(String[] names, int width) { protected void initButtons(String[] names, int width) {
initButtons(buttoncomp, names, width); initButtons(buttoncomp, names, width);
} }
/** /**
* Ability to create standard button on any composite. * Ability to create standard button on any composite.
* @param c * @param c
@ -201,15 +203,15 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
gdb.grabExcessHorizontalSpace = false; gdb.grabExcessHorizontalSpace = false;
gdb.horizontalAlignment = SWT.FILL; gdb.horizontalAlignment = SWT.FILL;
gdb.minimumWidth = width; gdb.minimumWidth = width;
if (names[i] != null) if (names[i] != null)
buttons[i].setText(names[i]); buttons[i].setText(names[i]);
else { // no button, but placeholder ! else { // no button, but placeholder !
buttons[i].setVisible(false); buttons[i].setVisible(false);
buttons[i].setEnabled(false); buttons[i].setEnabled(false);
gdb.heightHint = 10; gdb.heightHint = 10;
} }
buttons[i].setLayoutData(gdb); buttons[i].setLayoutData(gdb);
buttons[i].addSelectionListener(new SelectionAdapter() { buttons[i].addSelectionListener(new SelectionAdapter() {
@Override @Override
@ -219,15 +221,15 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
}); });
} }
} }
/** /**
* Called when user changes * Called when user changes
* @param cfg - selected configuration * @param cfg - selected configuration
*/ */
private void configChanged(ICResourceDescription cfg) { private void configChanged(ICResourceDescription cfg) {
if (visible) updateData(cfg); if (visible) updateData(cfg);
} }
/** /**
* Disposes the SWT resources allocated by this dialog page. * Disposes the SWT resources allocated by this dialog page.
*/ */
@ -244,13 +246,13 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
visible = _visible; visible = _visible;
if (visible) updateData(page.getResDesc()); if (visible) updateData(page.getResDesc());
} }
/** /**
* Descendant tabs should implement this method so * Descendant tabs should implement this method so
* that it copies it's data from one description * that it copies it's data from one description
* to another. Only data affected by given tab * to another. Only data affected by given tab
* should be copied. * should be copied.
* *
* @param src * @param src
* @param dst * @param dst
*/ */
@ -272,32 +274,32 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
} }
} }
} }
/** /**
* Method should be rewritten to handle button presses * Method should be rewritten to handle button presses
* @param i : number of button pressed * @param i : number of button pressed
* *
* Does nothing by default. * Does nothing by default.
* May (but not must) be overridden. * May (but not must) be overridden.
*/ */
protected void buttonPressed(int i) {} protected void buttonPressed(int i) {}
/** /**
* Checks state of existing button. * Checks state of existing button.
* *
* @param i - button index * @param i - button index
* @return - true if button exists and enabled * @return - true if button exists and enabled
*/ */
protected boolean buttonIsEnabled(int i) { protected boolean buttonIsEnabled(int i) {
if (buttons == null || buttons.length <= i ) if (buttons == null || buttons.length <= i )
return false; return false;
return buttons[i].isEnabled(); return buttons[i].isEnabled();
} }
/** /**
* Changes state of existing button. * Changes state of existing button.
* Does nothing if index is invalid * Does nothing if index is invalid
* *
* @param i - button index * @param i - button index
* @param state - required state * @param state - required state
*/ */
@ -305,11 +307,11 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
if (buttons == null || buttons.length <= i ) return; if (buttons == null || buttons.length <= i ) return;
buttons[i].setEnabled(state); buttons[i].setEnabled(state);
} }
/** /**
* Changes text of existing button * Changes text of existing button
* Does nothing if index is invalid * Does nothing if index is invalid
* *
* @param i - button index * @param i - button index
* @param text - text to display * @param text - text to display
*/ */
@ -345,13 +347,13 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
b.setLayoutData(g); b.setLayoutData(g);
return b; return b;
} }
protected Text setupText(Composite c, int span, int mode) { protected Text setupText(Composite c, int span, int mode) {
Text t = new Text(c, SWT.SINGLE | SWT.BORDER); Text t = new Text(c, SWT.SINGLE | SWT.BORDER);
setupControl(t, span, mode); setupControl(t, span, mode);
return t; return t;
} }
protected Group setupGroup(Composite c, String name, int cols, int mode) { protected Group setupGroup(Composite c, String name, int cols, int mode) {
Group g = new Group(c, SWT.NONE); Group g = new Group(c, SWT.NONE);
g.setText(name); g.setText(name);
@ -359,7 +361,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
setupControl(g, 1, mode); setupControl(g, 1, mode);
return g; return g;
} }
protected Button setupCheck(Composite c, String name, int span, int mode) { protected Button setupCheck(Composite c, String name, int span, int mode) {
Button b = new Button(c, SWT.CHECK); Button b = new Button(c, SWT.CHECK);
b.setText(name); b.setText(name);
@ -375,23 +377,23 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
} }
/** /**
* Selection handler for checkbox created * Selection handler for checkbox created
* by methods "setupCheck()" or "setupTri()" * by methods "setupCheck()" or "setupTri()"
* Descendants should override this method * Descendants should override this method
* if they use "setupCheck". * if they use "setupCheck".
* Usually the method body will look like: * Usually the method body will look like:
* { * {
* Control b = (Control)e.widget; * Control b = (Control)e.widget;
* if (b.equals(myFirstCheckbox) { ... } * if (b.equals(myFirstCheckbox) { ... }
* else if (b.equals(mySecondCheckbox) { ... } * else if (b.equals(mySecondCheckbox) { ... }
* ... } * ... }
*/ */
protected void checkPressed(SelectionEvent e) { protected void checkPressed(SelectionEvent e) {
} }
protected void setupControl(Control c, int span, int mode) { protected void setupControl(Control c, int span, int mode) {
// although we use GridLayout usually, // although we use GridLayout usually,
// exceptions can occur: do nothing. // exceptions can occur: do nothing.
if (c != null) { if (c != null) {
if (span != 0) { if (span != 0) {
GridData gd = new GridData(mode); GridData gd = new GridData(mode);
@ -402,11 +404,11 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
c.setFont(p.getFont()); c.setFont(p.getFont());
} }
} }
/* /*
* A set of methods providing selection dialogs for files or dirs. * A set of methods providing selection dialogs for files or dirs.
*/ */
public static String getFileSystemDirDialog(Shell shell, String text) { public static String getFileSystemDirDialog(Shell shell, String text) {
DirectoryDialog dialog = new DirectoryDialog(shell, SWT.OPEN|SWT.APPLICATION_MODAL); DirectoryDialog dialog = new DirectoryDialog(shell, SWT.OPEN|SWT.APPLICATION_MODAL);
if(text != null && text.trim().length() != 0) dialog.setFilterPath(text); if(text != null && text.trim().length() != 0) dialog.setFilterPath(text);
@ -431,12 +433,12 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
dialog.setText(FILESYSTEM_FILE_DIALOG_TITLE); dialog.setText(FILESYSTEM_FILE_DIALOG_TITLE);
return dialog.open(); return dialog.open();
} }
public static String getVariableDialog(Shell shell, ICConfigurationDescription cfgd) { public static String getVariableDialog(Shell shell, ICConfigurationDescription cfgd) {
ICdtVariableManager vm = CCorePlugin.getDefault().getCdtVariableManager(); ICdtVariableManager vm = CCorePlugin.getDefault().getCdtVariableManager();
BuildVarListDialog dialog = new BuildVarListDialog(shell, vm.getVariables(cfgd)); BuildVarListDialog dialog = new BuildVarListDialog(shell, vm.getVariables(cfgd));
dialog.setTitle(Messages.AbstractCPropertyTab_0); dialog.setTitle(Messages.AbstractCPropertyTab_0);
if (dialog.open() == Window.OK) { if (dialog.open() == Window.OK) {
Object[] selected = dialog.getResult(); Object[] selected = dialog.getResult();
if (selected.length > 0) { if (selected.length > 0) {
@ -453,7 +455,19 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
public static String getWorkspaceFileDialog(Shell shell, String text) { public static String getWorkspaceFileDialog(Shell shell, String text) {
return getWorkspaceDialog(shell, text, false, null); return getWorkspaceDialog(shell, text, false, null);
} }
/**
* @since 5.4
*/
public static String getProjectDirDialog(Shell shell, String text, IProject prj) {
return getWorkspaceDialog(shell, text, true, prj);
}
/**
* @since 5.4
*/
public static String getProjectFileDialog(Shell shell, String text, IProject prj) {
return getWorkspaceDialog(shell, text, false, prj);
}
private static String getWorkspaceDialog(Shell shell, String text, boolean dir, IProject prj) { private static String getWorkspaceDialog(Shell shell, String text, boolean dir, IProject prj) {
String currentPathText; String currentPathText;
IPath path; IPath path;
@ -461,7 +475,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
/* Remove double quotes */ /* Remove double quotes */
currentPathText = currentPathText.replaceAll("\"", ""); //$NON-NLS-1$ //$NON-NLS-2$ currentPathText = currentPathText.replaceAll("\"", ""); //$NON-NLS-1$ //$NON-NLS-2$
path = new Path(currentPathText); path = new Path(currentPathText);
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell, ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell,
new WorkbenchLabelProvider(), new WorkbenchContentProvider()); new WorkbenchLabelProvider(), new WorkbenchContentProvider());
@ -470,7 +484,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
else else
dialog.setInput(prj); dialog.setInput(prj);
dialog.setComparator(new ResourceComparator(ResourceComparator.NAME)); dialog.setComparator(new ResourceComparator(ResourceComparator.NAME));
if (dir) { if (dir) {
IResource container = null; IResource container = null;
if(path.isAbsolute()){ if(path.isAbsolute()){
@ -512,14 +526,14 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
} }
if (dialog.open() == Window.OK) { if (dialog.open() == Window.OK) {
IResource resource = (IResource) dialog.getFirstResult(); IResource resource = (IResource) dialog.getFirstResult();
if (resource != null) { if (resource != null) {
StringBuffer buf = new StringBuffer(); StringBuffer buf = new StringBuffer();
return buf.append("${").append("workspace_loc:").append(resource.getFullPath()).append("}").toString(); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ return buf.append("${").append("workspace_loc:").append(resource.getFullPath()).append("}").toString(); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
} }
} }
return null; return null;
} }
// shortcut to frequently-used method // shortcut to frequently-used method
public ICResourceDescription getResDesc() { public ICResourceDescription getResDesc() {
return page.getResDesc(); return page.getResDesc();
@ -553,19 +567,19 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
dispose(); dispose();
break; break;
case ICPropertyTab.VISIBLE: case ICPropertyTab.VISIBLE:
if (canBeVisible()) if (canBeVisible())
setVisible(data != null); setVisible(data != null);
else else
setVisible(false); setVisible(false);
break; break;
case ICPropertyTab.SET_ICON: case ICPropertyTab.SET_ICON:
icon = (Image)data; icon = (Image)data;
break; break;
default: default:
break; break;
} }
} }
// By default, returns true (no visibility restriction) // By default, returns true (no visibility restriction)
// But several pages should rewrite this functionality. // But several pages should rewrite this functionality.
@Override @Override
@ -587,20 +601,20 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
} }
/** /**
* Sets checkbox to appropriate state: * Sets checkbox to appropriate state:
* unchecked or checked * unchecked or checked
* @param b - checkbox to set * @param b - checkbox to set
* @param state * @param state
*/ */
public static void setTriSelection(Button b, boolean state) { public static void setTriSelection(Button b, boolean state) {
setTriSelection(b, state ? TRI_YES : TRI_NO); setTriSelection(b, state ? TRI_YES : TRI_NO);
} }
/** /**
* Sets checkbox to appropriate state: * Sets checkbox to appropriate state:
* unchecked, checked or unknown (grayed) * unchecked, checked or unknown (grayed)
* @param b - checkbox to set * @param b - checkbox to set
* @param state * @param state
*/ */
public static void setTriSelection(Button b, int state) { public static void setTriSelection(Button b, int state) {
switch (state) { switch (state) {
@ -623,7 +637,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
* This method will be simplified after M5 release, * This method will be simplified after M5 release,
* when Button.setGrayed() method will be accessible. * when Button.setGrayed() method will be accessible.
* In this case, reflection will not be required. * In this case, reflection will not be required.
* *
* @param b * @param b
* @param value * @param value
* @deprecated call {@link Button#setGrayed(boolean)} instead * @deprecated call {@link Button#setGrayed(boolean)} instead
@ -636,7 +650,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
/** /**
* This method will be removed after M5 release, * This method will be removed after M5 release,
* when Button.setGrayed() will be officially accessible. * when Button.setGrayed() will be officially accessible.
* *
* @return reference to Button.setGrayed() method * @return reference to Button.setGrayed() method
*/ */
private static Method getGrayEnabled() { private static Method getGrayEnabled() {
@ -652,8 +666,8 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
/** /**
* Utility method to show/hide working panes * Utility method to show/hide working panes
* When panes are hidden, message becomes visible * When panes are hidden, message becomes visible
* *
* @param visible - true or false * @param visible - true or false
* @param msg - text to be shown instead of panes * @param msg - text to be shown instead of panes
*/ */
@ -673,21 +687,21 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
b.setVisible(visible); b.setVisible(visible);
} }
} }
/** /**
* Allows changing message on background pane, * Allows changing message on background pane,
* which becomes visible after usercomp hidden * which becomes visible after usercomp hidden
* *
* @param s - text to display or null for default * @param s - text to display or null for default
*/ */
protected void setBackgroundText(String s) { protected void setBackgroundText(String s) {
background.setText(s == null ? BACKGROUND_TEXT_DEFAULT : s); background.setText(s == null ? BACKGROUND_TEXT_DEFAULT : s);
} }
/** /**
* Used to display double-clickable buttons for multiple configurations * Used to display double-clickable buttons for multiple configurations
* string list mode (see Multiple Configurations Edit Preference page). * string list mode (see Multiple Configurations Edit Preference page).
* *
* @deprecated as of CDT 8.0. This functionality is presented as links * @deprecated as of CDT 8.0. This functionality is presented as links
* to the preference page, see {@link AbstractLangsListTab#updateStringListModeControl()} * to the preference page, see {@link AbstractLangsListTab#updateStringListModeControl()}
*/ */
@ -714,7 +728,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
* The writing mode for multiple configurations edits (configuration drop-down list * The writing mode for multiple configurations edits (configuration drop-down list
* in project properties). This mode applies to lists of entries. * in project properties). This mode applies to lists of entries.
* See preference Multiple Configurations Edit, String List Write Mode. * See preference Multiple Configurations Edit, String List Write Mode.
* *
* @return * @return
* {@code true} if each list should be replaced as a whole with the * {@code true} if each list should be replaced as a whole with the
* list user is currently working with in UI<br/> * list user is currently working with in UI<br/>
@ -729,12 +743,12 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
public String getHelpContextId() { public String getHelpContextId() {
return helpId; return helpId;
} }
public void setHelpContextId(String id) { public void setHelpContextId(String id) {
helpId = PREFIX + id; helpId = PREFIX + id;
} }
/** /**
* Allows subclasses to inform the container about changes relevant to the indexer. * Allows subclasses to inform the container about changes relevant to the indexer.
* The tab will be asked before the apply is performed. As a consequence of returning * The tab will be asked before the apply is performed. As a consequence of returning
* <code>true</code> the user will be asked whether she wants to rebuild the index. * <code>true</code> the user will be asked whether she wants to rebuild the index.

View file

@ -19,7 +19,6 @@ import java.util.Comparator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredContentProvider;
@ -242,7 +241,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
int index = table.getSelectionIndex(); int index = table.getSelectionIndex();
if (index<0 || table.getSelectionIndices().length!=1) if (index<0 || table.getSelectionIndices().length!=1)
return null; return null;
return (ICLanguageSettingEntry)(table.getItem(index).getData()); return (ICLanguageSettingEntry)(table.getItem(index).getData());
} }
@ -730,8 +729,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
public Image getColumnImage(Object element, int columnIndex) { public Image getColumnImage(Object element, int columnIndex) {
if (columnIndex==0 && (element instanceof ICLanguageSettingEntry)) { if (columnIndex==0 && (element instanceof ICLanguageSettingEntry)) {
ICConfigurationDescription cfg = getResDesc().getConfiguration(); ICConfigurationDescription cfg = getResDesc().getConfiguration();
IProject project = cfg.getProjectDescription().getProject(); return LanguageSettingsImages.getImage((ICLanguageSettingEntry) element, cfg);
return LanguageSettingsImages.getImage((ICLanguageSettingEntry) element, project.getName(), cfg);
} }
return null; return null;
} }
@ -760,7 +758,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
} else if (columnIndex == 0) { } else if (columnIndex == 0) {
return element.toString(); return element.toString();
} }
return null; return null;
} }

View file

@ -166,7 +166,7 @@ public class ErrorParsTab extends AbstractCPropertyTab {
return name; return name;
} }
} }
return NLS.bind(Messages.ErrorParsTab_error_NonAccessibleID, id); return NLS.bind(Messages.GeneralMessages_NonAccessibleID, id);
} }
return OOPS; return OOPS;
} }