bug 328007: [sd90] Design user interface for new scanner discovery
BIN
build/org.eclipse.cdt.make.ui/icons/obj16/search.gif
Normal file
After Width: | Height: | Size: 347 B |
|
@ -43,6 +43,8 @@ LastTargetBuild.description=Rebuild the last make target for the selected contai
|
|||
PreferenceBuildSettings.name=Settings
|
||||
ErrorParsersTab.name=Error Parsers
|
||||
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
|
||||
PreferenceMake.name=Make Targets
|
||||
|
|
|
@ -470,6 +470,14 @@
|
|||
tooltip="%ErrorParsersTab.tooltip"
|
||||
weight="020">
|
||||
</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
|
||||
|
|
|
@ -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 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 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 ATTR_PARAMETER = "parameter"; //$NON-NLS-1$
|
||||
|
|
|
@ -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)",
|
||||
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.console;bundle-version="[3.5.100,4.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.managedbuilder.core;bundle-version="[8.1.0,9.0.0)",
|
||||
|
|
After Width: | Height: | Size: 553 B |
BIN
build/org.eclipse.cdt.managedbuilder.ui/icons/obj16/log_obj.gif
Normal file
After Width: | Height: | Size: 335 B |
BIN
build/org.eclipse.cdt.managedbuilder.ui/icons/obj16/mbs.gif
Normal file
After Width: | Height: | Size: 380 B |
|
@ -671,5 +671,42 @@
|
|||
projectType="org.eclipse.cdt.build.makefile.projectType">
|
||||
</projectTypePage>
|
||||
</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>
|
||||
|
|
|
@ -61,6 +61,10 @@ public class Messages extends NLS {
|
|||
public static String BuildToolSettingsPage_tool_advancedSettings;
|
||||
public static String BuildToolSettingsPage_tool_command;
|
||||
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_1;
|
||||
public static String CConfigWizardPage_10;
|
||||
|
@ -105,6 +109,12 @@ public class Messages extends NLS {
|
|||
public static String DiscoveryTab_ErrorClearingEntries;
|
||||
public static String EnvironmentTab_15;
|
||||
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_title;
|
||||
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_9;
|
||||
public static String PropertyPageDefsTab_showIncludeFileTab;
|
||||
public static String PropertyPageDefsTab_showProvidersTab;
|
||||
public static String RefreshPolicyExceptionDialog_addDialogLabel;
|
||||
public static String RefreshPolicyExceptionDialog_AddExceptionInfoDialog_message;
|
||||
public static String RefreshPolicyExceptionDialog_AddExceptionInfoDialog_title;
|
||||
|
|
|
@ -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_9=Always show profile IDs only
|
||||
PropertyPageDefsTab_showIncludeFileTab=Display "Include Files" tab
|
||||
PropertyPageDefsTab_showProvidersTab=Display "Preprocessor Include Paths" tabs
|
||||
ProjectConvert_convertersList=Converters List
|
||||
|
||||
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_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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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 });
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -12,9 +12,10 @@
|
|||
package org.eclipse.cdt.managedbuilder.ui.preferences;
|
||||
|
||||
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.CDTPrefUtil;
|
||||
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.layout.FillLayout;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
|
@ -25,19 +26,20 @@ import org.eclipse.swt.widgets.Group;
|
|||
|
||||
/**
|
||||
* @since 5.1
|
||||
*
|
||||
*
|
||||
* @noextend This class is not intended to be subclassed by clients.
|
||||
* @noinstantiate This class is not intended to be instantiated by clients.
|
||||
*/
|
||||
public class PropertyPageDefsTab extends AbstractCPropertyTab {
|
||||
|
||||
private static final int SPACING = 5; // for radio buttons layout
|
||||
|
||||
|
||||
private Button show_tree;
|
||||
private Button show_inc_files;
|
||||
private Button show_mng;
|
||||
private Button show_tool;
|
||||
private Button show_exp;
|
||||
private Button show_providers_tab; // temporary checkbox for scanner discovery Providers tab
|
||||
private Button show_tipbox;
|
||||
|
||||
private Button b_0;
|
||||
|
@ -48,77 +50,82 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab {
|
|||
private Button s_0;
|
||||
private Button s_1;
|
||||
private Button s_2;
|
||||
|
||||
|
||||
@Override
|
||||
public void createControls(Composite parent) {
|
||||
super.createControls(parent);
|
||||
usercomp.setLayout(new GridLayout(1, false));
|
||||
|
||||
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_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_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_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_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_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.setText(Messages.PropertyPageDefsTab_16);
|
||||
show_tipbox.setText(Messages.PropertyPageDefsTab_16);
|
||||
show_tipbox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||
|
||||
Group saveGrp = new Group(usercomp, SWT.NONE);
|
||||
saveGrp.setText(Messages.PropertyPageDefsTab_11);
|
||||
saveGrp.setText(Messages.PropertyPageDefsTab_11);
|
||||
saveGrp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||
FillLayout fl = new FillLayout(SWT.VERTICAL);
|
||||
fl.spacing = SPACING;
|
||||
fl.marginHeight = SPACING;
|
||||
fl.marginWidth = SPACING;
|
||||
saveGrp.setLayout(fl);
|
||||
|
||||
|
||||
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.setText(Messages.PropertyPageDefsTab_12);
|
||||
s_1.setText(Messages.PropertyPageDefsTab_12);
|
||||
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);
|
||||
discGrp.setText(Messages.PropertyPageDefsTab_5);
|
||||
discGrp.setText(Messages.PropertyPageDefsTab_5);
|
||||
discGrp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||
fl = new FillLayout(SWT.VERTICAL);
|
||||
fl.spacing = SPACING;
|
||||
fl.marginHeight = SPACING;
|
||||
fl.marginWidth = SPACING;
|
||||
discGrp.setLayout(fl);
|
||||
|
||||
|
||||
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.setText(Messages.PropertyPageDefsTab_7);
|
||||
b_1.setText(Messages.PropertyPageDefsTab_7);
|
||||
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.setText(Messages.PropertyPageDefsTab_9);
|
||||
|
||||
b_3.setText(Messages.PropertyPageDefsTab_9);
|
||||
|
||||
show_inc_files.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_SHOW_INC_FILES));
|
||||
show_tree.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_DTREE));
|
||||
show_mng.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOMNG));
|
||||
show_tool.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOTOOLM));
|
||||
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));
|
||||
|
||||
|
||||
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_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_NOTOOLM, !show_tool.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());
|
||||
int x = 0;
|
||||
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;
|
||||
CDTPrefUtil.setInt(CDTPrefUtil.KEY_POSSAVE, x);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void performDefaults() {
|
||||
show_tree.setSelection(false);
|
||||
|
@ -160,6 +168,7 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab {
|
|||
show_mng.setSelection(true);
|
||||
show_tool.setSelection(true);
|
||||
show_exp.setSelection(false);
|
||||
show_providers_tab.setSelection(false);
|
||||
show_tipbox.setSelection(false);
|
||||
b_0.setSelection(true);
|
||||
b_1.setSelection(false);
|
||||
|
|
|
@ -47,11 +47,15 @@ public class ScannerDiscoveryLegacySupport {
|
|||
private static final String PREFERENCES_QUALIFIER = CCorePlugin.PLUGIN_ID;
|
||||
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) {
|
||||
if (project == null)
|
||||
if (project == null) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -226,7 +226,7 @@ The value "true" of this attribute is meaningful only for providers ca
|
|||
<meta.section type="since"/>
|
||||
</appInfo>
|
||||
<documentation>
|
||||
CDT 9.0
|
||||
CDT 8.1
|
||||
</documentation>
|
||||
</annotation>
|
||||
|
||||
|
|
|
@ -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.indexview;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.newui;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.dialogs,
|
||||
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.refactoring,
|
||||
org.eclipse.cdt.ui.refactoring.actions,
|
||||
|
|
Before Width: | Height: | Size: 310 B After Width: | Height: | Size: 144 B |
BIN
core/org.eclipse.cdt.ui/icons/obj16/ls_entries.gif
Normal file
After Width: | Height: | Size: 386 B |
BIN
core/org.eclipse.cdt.ui/icons/ovr16/edited_ovr.gif
Normal file
After Width: | Height: | Size: 167 B |
BIN
core/org.eclipse.cdt.ui/icons/ovr16/person_ovr.gif
Normal file
After Width: | Height: | Size: 165 B |
|
@ -607,6 +607,9 @@ includeFolderDecorator.description = Decorates missing include folders with erro
|
|||
|
||||
templatesViewName= Templates
|
||||
|
||||
AllLanguageSettingEntries.name=Providers
|
||||
AllLanguageSettingEntries.tooltip=Language Setting Entries Providers
|
||||
|
||||
deleteConfigsCommand.name = Reset to Default
|
||||
excludeCommand.name = Exclude from Build
|
||||
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.selectLast.description = Restore last selection in C/C++ editor
|
||||
ActionDefinition.selectLast.name = Restore Last C/C++ Selection
|
||||
LanguageSettingsProviderAssociationExtensionPoint=Language Settings Provider UI
|
||||
overrideAnnotation.label = C/C++ Override indicators
|
||||
|
||||
transfer.EditorAppearance.name = C/C++ Editor Appearance
|
||||
|
@ -631,4 +635,4 @@ extension-point.name = Refresh Exclusion Contributor
|
|||
|
||||
# New New Project Wizard
|
||||
newProjectWizard.name = C/C++ Project (prototype)
|
||||
projectTypePages = Project Type Pages
|
||||
projectTypePages = Project Type Pages
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
<extension-point id="quickAssistProcessors" name="%quickAssistProcessorExtensionPoint" schema="schema/quickAssistProcessors.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="LanguageSettingsProviderAssociation" name="%LanguageSettingsProviderAssociationExtensionPoint" schema="schema/LanguageSettingsProviderAssociation.exsd"/>
|
||||
<extension-point id="RefreshExclusionContributor" name="%extension-point.name" schema="schema/RefreshExclusionContributor.exsd"/>
|
||||
<extension-point id="projectTypePages" name="%ProjectTypePages" schema="schema/projectTypePages.exsd"/>
|
||||
|
||||
|
@ -3368,6 +3369,17 @@
|
|||
</adapt>
|
||||
</enabledWhen>
|
||||
</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
|
||||
|
@ -4302,6 +4314,38 @@
|
|||
</complexArray>
|
||||
</processType>
|
||||
</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
|
||||
point="org.eclipse.ui.commands">
|
||||
<command
|
||||
|
|
|
@ -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 <samp>org.eclipse.cdt.core.LanguageSettingsProvider</samp>.
|
||||
</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's entries in UI.
|
||||
</documentation>
|
||||
</annotation>
|
||||
</attribute>
|
||||
<attribute name="ui-clear-entries" type="boolean">
|
||||
<annotation>
|
||||
<documentation>
|
||||
Defines if user is allowed to clear provider'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's entries in UI.
|
||||
</documentation>
|
||||
</annotation>
|
||||
</attribute>
|
||||
<attribute name="ui-clear-entries" type="boolean">
|
||||
<annotation>
|
||||
<documentation>
|
||||
Defines if user is allowed to clear provider'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>
|
|
@ -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]);
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
package org.eclipse.cdt.internal.ui.newui;
|
||||
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
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.ICConfigurationDescription;
|
||||
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.util.CDataUtil;
|
||||
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}.
|
||||
*/
|
||||
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.
|
||||
*/
|
||||
public static String getImageKey(int kind, int flag, boolean isProjectRelative) {
|
||||
String imageKey = null;
|
||||
|
||||
|
||||
boolean isWorkspacePath = (flag & ICSettingEntry.VALUE_WORKSPACE_PATH) != 0;
|
||||
boolean isBuiltin = (flag & ICSettingEntry.BUILTIN) != 0;
|
||||
boolean isFramework = (flag & ICSettingEntry.FRAMEWORKS_MAC) != 0;
|
||||
|
||||
|
||||
switch (kind) {
|
||||
case ICSettingEntry.INCLUDE_PATH:
|
||||
if (isWorkspacePath) {
|
||||
|
@ -89,7 +123,7 @@ public class LanguageSettingsImages {
|
|||
* @param cfgDescription - configuration description of the entry.
|
||||
* @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 flags = entry.getFlags();
|
||||
boolean isWorkspacePath = (flags & ICSettingEntry.VALUE_WORKSPACE_PATH) != 0;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* 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
|
||||
* IBM Corporation
|
||||
|
@ -138,7 +138,6 @@ public class Messages extends NLS {
|
|||
public static String EnvironmentTab_8;
|
||||
public static String EnvironmentTab_9;
|
||||
public static String ErrorParsTab_error_IllegalCharacter;
|
||||
public static String ErrorParsTab_error_NonAccessibleID;
|
||||
public static String ErrorParsTab_error_NonEmptyName;
|
||||
public static String ErrorParsTab_error_NonUniqueID;
|
||||
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_movedown;
|
||||
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_1;
|
||||
public static String IncludeDialog_2;
|
||||
|
@ -186,9 +187,43 @@ public class Messages extends NLS {
|
|||
public static String IncludeTab_2;
|
||||
public static String IncludeTab_export;
|
||||
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_FolderDoesNotExist;
|
||||
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_1;
|
||||
public static String LibraryPathTab_1;
|
||||
|
|
|
@ -166,9 +166,45 @@ IncludeDialog_0=Directory:
|
|||
IncludeDialog_1=File:
|
||||
IncludeDialog_2=Add to all configurations
|
||||
IncludeDialog_3=Add to all languages
|
||||
LanguageSettingEntryDialog_Add=Add
|
||||
LanguageSettingEntryDialog_BuiltInFlag=Treat as built-in
|
||||
LanguageSettingEntryDialog_Directory=Dir:
|
||||
LanguageSettingEntryDialog_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_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.
|
||||
|
||||
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_1=Language
|
||||
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_OnApplyingSettings=Error applying 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_label_EnterName=Enter name of new 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.
|
||||
CProjectWizard_0=Add C 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_22=Build error
|
||||
IncludeTab_export=Export Settings...
|
||||
|
|
|
@ -10,12 +10,13 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.viewsupport;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.core.resources.IMarker;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.IResourceStatus;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.ListenerList;
|
||||
import org.eclipse.jface.resource.ImageDescriptor;
|
||||
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.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.CoreModel;
|
||||
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.ITranslationUnit;
|
||||
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.ICResourceDescription;
|
||||
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
|
||||
* @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) {
|
||||
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
|
||||
if (cfgDescription != null) {
|
||||
IPath path = rc.getProjectRelativePath();
|
||||
ICResourceDescription rcDescription = cfgDescription.getResourceDescription(path, true);
|
||||
if (rcDescription != null)
|
||||
if (isCustomizedResource(cfgDescription, rc))
|
||||
result |= TICK_CONFIGURATION;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_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$
|
||||
|
||||
// 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_SETTING = "icons/ovr16/setting_nav.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
|
||||
public static final String IMG_THREAD_SUSPENDED_R_PINNED = "icons/obj16/threads_obj_r.gif"; //$NON-NLS-1$
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -64,70 +64,72 @@ import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
|
|||
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.
|
||||
*
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* In this case, we'll able to use:
|
||||
* - a lot of utility methods via "provider" link.
|
||||
* 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)
|
||||
* and to handle their events (see buttonPressed(int))
|
||||
* - 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
|
||||
* 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 static final Method GRAY_METHOD = getGrayEnabled();
|
||||
public static final int BUTTON_WIDTH = 120; // used as hint for all push buttons
|
||||
|
||||
// commonly used button names
|
||||
public static final String EMPTY_STR = ""; //$NON-NLS-1$
|
||||
public static final String ADD_STR = Messages.FileListControl_add;
|
||||
public static final String DEL_STR = Messages.FileListControl_delete;
|
||||
public static final String EDIT_STR = Messages.FileListControl_edit;
|
||||
public static final String MOVEUP_STR = Messages.FileListControl_moveup;
|
||||
public static final String MOVEDOWN_STR = Messages.FileListControl_movedown;
|
||||
public static final String WORKSPACEBUTTON_NAME = Messages.FileListControl_button_workspace;
|
||||
public static final String FILESYSTEMBUTTON_NAME = Messages.FileListControl_button_fs;
|
||||
public static final String VARIABLESBUTTON_NAME = Messages.AbstractCPropertyTab_1;
|
||||
public static final String FILESYSTEM_DIR_DIALOG_MSG = Messages.BrowseEntryDialog_fs_dir_dlg_msg;
|
||||
public static final String FILESYSTEM_FILE_DIALOG_TITLE = EMPTY_STR;
|
||||
public static final String WORKSPACE_DIR_DIALOG_TITLE = Messages.BrowseEntryDialog_wsp_dir_dlg_title;
|
||||
public static final String WORKSPACE_FILE_DIALOG_TITLE = Messages.BrowseEntryDialog_wsp_file_dlg_title;
|
||||
public static final String WORKSPACE_DIR_DIALOG_MSG = Messages.BrowseEntryDialog_wsp_dir_dlg_msg;
|
||||
public static final String WORKSPACE_FILE_DIALOG_MSG = Messages.BrowseEntryDialog_wsp_file_dlg_msg;
|
||||
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 String ADD_STR = Messages.FileListControl_add;
|
||||
public static final String DEL_STR = Messages.FileListControl_delete;
|
||||
public static final String EDIT_STR = Messages.FileListControl_edit;
|
||||
public static final String MOVEUP_STR = Messages.FileListControl_moveup;
|
||||
public static final String MOVEDOWN_STR = Messages.FileListControl_movedown;
|
||||
/** @since 5.4 */
|
||||
public static final String PROJECTBUTTON_NAME = "Project...";
|
||||
public static final String WORKSPACEBUTTON_NAME = Messages.FileListControl_button_workspace;
|
||||
public static final String FILESYSTEMBUTTON_NAME = Messages.FileListControl_button_fs;
|
||||
public static final String VARIABLESBUTTON_NAME = Messages.AbstractCPropertyTab_1;
|
||||
public static final String FILESYSTEM_DIR_DIALOG_MSG = Messages.BrowseEntryDialog_fs_dir_dlg_msg;
|
||||
public static final String FILESYSTEM_FILE_DIALOG_TITLE = EMPTY_STR;
|
||||
public static final String WORKSPACE_DIR_DIALOG_TITLE = Messages.BrowseEntryDialog_wsp_dir_dlg_title;
|
||||
public static final String WORKSPACE_FILE_DIALOG_TITLE = Messages.BrowseEntryDialog_wsp_file_dlg_title;
|
||||
public static final String WORKSPACE_DIR_DIALOG_MSG = Messages.BrowseEntryDialog_wsp_dir_dlg_msg;
|
||||
public static final String WORKSPACE_FILE_DIALOG_MSG = Messages.BrowseEntryDialog_wsp_file_dlg_msg;
|
||||
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
|
||||
|
||||
private static final String PREFIX = "org.eclipse.cdt.ui."; //$NON-NLS-1$
|
||||
|
||||
|
||||
public static final int TRI_UNKNOWN = 2;
|
||||
public static final int TRI_YES = 1;
|
||||
public static final int TRI_NO = 0;
|
||||
|
||||
protected static final String ENUM = "enum"; //$NON-NLS-1$
|
||||
protected static final String SSET = "set"; //$NON-NLS-1$
|
||||
|
||||
|
||||
private PageBook pageBook; // to select between background and usercomp.
|
||||
private CLabel background;
|
||||
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
|
||||
private Button[] buttons; // buttons in buttoncomp
|
||||
public ICPropertyProvider page;
|
||||
protected Image icon = null;
|
||||
private String helpId = EMPTY_STR;
|
||||
|
||||
protected Image icon = null;
|
||||
private String helpId = EMPTY_STR;
|
||||
|
||||
protected boolean visible;
|
||||
|
||||
@Override
|
||||
|
@ -139,8 +141,8 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
/**
|
||||
* Creates basic widgets for property tab.
|
||||
* Descendants should, normally, override
|
||||
* this method but call super.createControls().
|
||||
*
|
||||
* this method but call super.createControls().
|
||||
*
|
||||
* @param parent
|
||||
*/
|
||||
protected void createControls(Composite parent) {
|
||||
|
@ -153,27 +155,27 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
GridData gd;
|
||||
userdata= new Composite(pageBook, SWT.NONE);
|
||||
userdata.setLayout(new GridLayout(2, false));
|
||||
|
||||
|
||||
usercomp = new Composite(userdata, SWT.NONE);
|
||||
usercomp.setLayoutData(gd= new GridData(GridData.FILL_BOTH));
|
||||
gd.widthHint= 150;
|
||||
|
||||
|
||||
buttoncomp = new Composite(userdata, SWT.NONE);
|
||||
buttoncomp.setLayoutData(gd= new GridData(GridData.END));
|
||||
// width hint must be set to one, otherwise subclasses that do not have buttons
|
||||
// don't look pretty, bug 242408
|
||||
gd.widthHint= 1;
|
||||
|
||||
|
||||
pageBook.showPage(userdata);
|
||||
|
||||
|
||||
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, helpId);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The common way to create buttons cluster
|
||||
* on the right of tab workspace.
|
||||
* @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) {
|
||||
initButtons(buttoncomp, names, 80);
|
||||
|
@ -181,7 +183,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
protected void initButtons(String[] names, int width) {
|
||||
initButtons(buttoncomp, names, width);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Ability to create standard button on any composite.
|
||||
* @param c
|
||||
|
@ -201,15 +203,15 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
gdb.grabExcessHorizontalSpace = false;
|
||||
gdb.horizontalAlignment = SWT.FILL;
|
||||
gdb.minimumWidth = width;
|
||||
|
||||
|
||||
if (names[i] != null)
|
||||
buttons[i].setText(names[i]);
|
||||
else { // no button, but placeholder !
|
||||
else { // no button, but placeholder !
|
||||
buttons[i].setVisible(false);
|
||||
buttons[i].setEnabled(false);
|
||||
gdb.heightHint = 10;
|
||||
}
|
||||
|
||||
|
||||
buttons[i].setLayoutData(gdb);
|
||||
buttons[i].addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
|
@ -219,15 +221,15 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called when user changes
|
||||
* Called when user changes
|
||||
* @param cfg - selected configuration
|
||||
*/
|
||||
private void configChanged(ICResourceDescription cfg) {
|
||||
if (visible) updateData(cfg);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Disposes the SWT resources allocated by this dialog page.
|
||||
*/
|
||||
|
@ -244,13 +246,13 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
visible = _visible;
|
||||
if (visible) updateData(page.getResDesc());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Descendant tabs should implement this method so
|
||||
* that it copies it's data from one description
|
||||
* Descendant tabs should implement this method so
|
||||
* that it copies it's data from one description
|
||||
* to another. Only data affected by given tab
|
||||
* should be copied.
|
||||
*
|
||||
*
|
||||
* @param src
|
||||
* @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
|
||||
*
|
||||
* Does nothing by default.
|
||||
*
|
||||
* Does nothing by default.
|
||||
* May (but not must) be overridden.
|
||||
*/
|
||||
protected void buttonPressed(int i) {}
|
||||
|
||||
|
||||
/**
|
||||
* Checks state of existing button.
|
||||
*
|
||||
*
|
||||
* @param i - button index
|
||||
* @return - true if button exists and enabled
|
||||
* @return - true if button exists and enabled
|
||||
*/
|
||||
protected boolean buttonIsEnabled(int i) {
|
||||
if (buttons == null || buttons.length <= i )
|
||||
if (buttons == null || buttons.length <= i )
|
||||
return false;
|
||||
return buttons[i].isEnabled();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Changes state of existing button.
|
||||
* Does nothing if index is invalid
|
||||
*
|
||||
*
|
||||
* @param i - button index
|
||||
* @param state - required state
|
||||
*/
|
||||
|
@ -305,11 +307,11 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
if (buttons == null || buttons.length <= i ) return;
|
||||
buttons[i].setEnabled(state);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Changes text of existing button
|
||||
* Does nothing if index is invalid
|
||||
*
|
||||
*
|
||||
* @param i - button index
|
||||
* @param text - text to display
|
||||
*/
|
||||
|
@ -345,13 +347,13 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
b.setLayoutData(g);
|
||||
return b;
|
||||
}
|
||||
|
||||
|
||||
protected Text setupText(Composite c, int span, int mode) {
|
||||
Text t = new Text(c, SWT.SINGLE | SWT.BORDER);
|
||||
setupControl(t, span, mode);
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
protected Group setupGroup(Composite c, String name, int cols, int mode) {
|
||||
Group g = new Group(c, SWT.NONE);
|
||||
g.setText(name);
|
||||
|
@ -359,7 +361,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
setupControl(g, 1, mode);
|
||||
return g;
|
||||
}
|
||||
|
||||
|
||||
protected Button setupCheck(Composite c, String name, int span, int mode) {
|
||||
Button b = new Button(c, SWT.CHECK);
|
||||
b.setText(name);
|
||||
|
@ -375,23 +377,23 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
}
|
||||
|
||||
/**
|
||||
* Selection handler for checkbox created
|
||||
* by methods "setupCheck()" or "setupTri()"
|
||||
* Descendants should override this method
|
||||
* if they use "setupCheck".
|
||||
* Selection handler for checkbox created
|
||||
* by methods "setupCheck()" or "setupTri()"
|
||||
* Descendants should override this method
|
||||
* if they use "setupCheck".
|
||||
* Usually the method body will look like:
|
||||
* {
|
||||
* {
|
||||
* Control b = (Control)e.widget;
|
||||
* if (b.equals(myFirstCheckbox) { ... }
|
||||
* if (b.equals(myFirstCheckbox) { ... }
|
||||
* else if (b.equals(mySecondCheckbox) { ... }
|
||||
* ... }
|
||||
* ... }
|
||||
*/
|
||||
protected void checkPressed(SelectionEvent e) {
|
||||
}
|
||||
|
||||
protected void setupControl(Control c, int span, int mode) {
|
||||
// although we use GridLayout usually,
|
||||
// exceptions can occur: do nothing.
|
||||
// exceptions can occur: do nothing.
|
||||
if (c != null) {
|
||||
if (span != 0) {
|
||||
GridData gd = new GridData(mode);
|
||||
|
@ -402,11 +404,11 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
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) {
|
||||
DirectoryDialog dialog = new DirectoryDialog(shell, SWT.OPEN|SWT.APPLICATION_MODAL);
|
||||
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);
|
||||
return dialog.open();
|
||||
}
|
||||
|
||||
|
||||
public static String getVariableDialog(Shell shell, ICConfigurationDescription cfgd) {
|
||||
|
||||
|
||||
ICdtVariableManager vm = CCorePlugin.getDefault().getCdtVariableManager();
|
||||
BuildVarListDialog dialog = new BuildVarListDialog(shell, vm.getVariables(cfgd));
|
||||
dialog.setTitle(Messages.AbstractCPropertyTab_0);
|
||||
dialog.setTitle(Messages.AbstractCPropertyTab_0);
|
||||
if (dialog.open() == Window.OK) {
|
||||
Object[] selected = dialog.getResult();
|
||||
if (selected.length > 0) {
|
||||
|
@ -453,7 +455,19 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
public static String getWorkspaceFileDialog(Shell shell, String text) {
|
||||
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) {
|
||||
String currentPathText;
|
||||
IPath path;
|
||||
|
@ -461,7 +475,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
/* Remove double quotes */
|
||||
currentPathText = currentPathText.replaceAll("\"", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
path = new Path(currentPathText);
|
||||
|
||||
|
||||
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell,
|
||||
new WorkbenchLabelProvider(), new WorkbenchContentProvider());
|
||||
|
||||
|
@ -470,7 +484,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
else
|
||||
dialog.setInput(prj);
|
||||
dialog.setComparator(new ResourceComparator(ResourceComparator.NAME));
|
||||
|
||||
|
||||
if (dir) {
|
||||
IResource container = null;
|
||||
if(path.isAbsolute()){
|
||||
|
@ -512,14 +526,14 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
}
|
||||
if (dialog.open() == Window.OK) {
|
||||
IResource resource = (IResource) dialog.getFirstResult();
|
||||
if (resource != null) {
|
||||
if (resource != null) {
|
||||
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 null;
|
||||
}
|
||||
|
||||
|
||||
// shortcut to frequently-used method
|
||||
public ICResourceDescription getResDesc() {
|
||||
return page.getResDesc();
|
||||
|
@ -553,19 +567,19 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
dispose();
|
||||
break;
|
||||
case ICPropertyTab.VISIBLE:
|
||||
if (canBeVisible())
|
||||
if (canBeVisible())
|
||||
setVisible(data != null);
|
||||
else
|
||||
else
|
||||
setVisible(false);
|
||||
break;
|
||||
case ICPropertyTab.SET_ICON:
|
||||
icon = (Image)data;
|
||||
icon = (Image)data;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// By default, returns true (no visibility restriction)
|
||||
// But several pages should rewrite this functionality.
|
||||
@Override
|
||||
|
@ -587,20 +601,20 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
}
|
||||
|
||||
/**
|
||||
* Sets checkbox to appropriate state:
|
||||
* Sets checkbox to appropriate state:
|
||||
* unchecked or checked
|
||||
* @param b - checkbox to set
|
||||
* @param state
|
||||
* @param state
|
||||
*/
|
||||
public static void setTriSelection(Button b, boolean state) {
|
||||
setTriSelection(b, state ? TRI_YES : TRI_NO);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets checkbox to appropriate state:
|
||||
* Sets checkbox to appropriate state:
|
||||
* unchecked, checked or unknown (grayed)
|
||||
* @param b - checkbox to set
|
||||
* @param state
|
||||
* @param state
|
||||
*/
|
||||
public static void setTriSelection(Button b, int state) {
|
||||
switch (state) {
|
||||
|
@ -623,7 +637,7 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
* This method will be simplified after M5 release,
|
||||
* when Button.setGrayed() method will be accessible.
|
||||
* In this case, reflection will not be required.
|
||||
*
|
||||
*
|
||||
* @param b
|
||||
* @param value
|
||||
* @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,
|
||||
* when Button.setGrayed() will be officially accessible.
|
||||
*
|
||||
*
|
||||
* @return reference to Button.setGrayed() method
|
||||
*/
|
||||
private static Method getGrayEnabled() {
|
||||
|
@ -652,8 +666,8 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
|
||||
/**
|
||||
* 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 msg - text to be shown instead of panes
|
||||
*/
|
||||
|
@ -673,21 +687,21 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
b.setVisible(visible);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Allows changing message on background pane,
|
||||
* 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) {
|
||||
background.setText(s == null ? BACKGROUND_TEXT_DEFAULT : s);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Used to display double-clickable buttons for multiple configurations
|
||||
* string list mode (see Multiple Configurations Edit Preference page).
|
||||
*
|
||||
*
|
||||
* @deprecated as of CDT 8.0. This functionality is presented as links
|
||||
* 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
|
||||
* in project properties). This mode applies to lists of entries.
|
||||
* See preference Multiple Configurations Edit, String List Write Mode.
|
||||
*
|
||||
*
|
||||
* @return
|
||||
* {@code true} if each list should be replaced as a whole with the
|
||||
* list user is currently working with in UI<br/>
|
||||
|
@ -729,12 +743,12 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
|
|||
public String getHelpContextId() {
|
||||
return helpId;
|
||||
}
|
||||
|
||||
|
||||
public void setHelpContextId(String id) {
|
||||
helpId = PREFIX + id;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* 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
|
||||
* <code>true</code> the user will be asked whether she wants to rebuild the index.
|
||||
|
|
|
@ -19,7 +19,6 @@ import java.util.Comparator;
|
|||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.jface.resource.JFaceResources;
|
||||
import org.eclipse.jface.viewers.IFontProvider;
|
||||
import org.eclipse.jface.viewers.IStructuredContentProvider;
|
||||
|
@ -242,7 +241,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
|
|||
int index = table.getSelectionIndex();
|
||||
if (index<0 || table.getSelectionIndices().length!=1)
|
||||
return null;
|
||||
|
||||
|
||||
return (ICLanguageSettingEntry)(table.getItem(index).getData());
|
||||
}
|
||||
|
||||
|
@ -730,8 +729,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
|
|||
public Image getColumnImage(Object element, int columnIndex) {
|
||||
if (columnIndex==0 && (element instanceof ICLanguageSettingEntry)) {
|
||||
ICConfigurationDescription cfg = getResDesc().getConfiguration();
|
||||
IProject project = cfg.getProjectDescription().getProject();
|
||||
return LanguageSettingsImages.getImage((ICLanguageSettingEntry) element, project.getName(), cfg);
|
||||
return LanguageSettingsImages.getImage((ICLanguageSettingEntry) element, cfg);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -760,7 +758,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
|
|||
} else if (columnIndex == 0) {
|
||||
return element.toString();
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
|||
return name;
|
||||
}
|
||||
}
|
||||
return NLS.bind(Messages.ErrorParsTab_error_NonAccessibleID, id);
|
||||
return NLS.bind(Messages.GeneralMessages_NonAccessibleID, id);
|
||||
}
|
||||
return OOPS;
|
||||
}
|
||||
|
|