--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/BuildSettingsUI.java Tue Apr 27 09:07:35 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/BuildSettingsUI.java Tue Apr 27 09:07:48 2010 -0500
@@ -33,6 +33,7 @@
private Shell shell;
private TabFolder tabFolder;
+ private boolean wantsSBSv1;
private boolean wantsSBSv2;
private boolean projectSetting;
@@ -66,8 +67,9 @@
private Label extraArgsLabel;
private Text extraArgsText;
- public BuildSettingsUI(Shell shell, boolean wantsSBSv2, boolean projectSetting) {
+ public BuildSettingsUI(Shell shell, boolean wantsSBSv1, boolean wantsSBSv2, boolean projectSetting) {
this.shell = shell;
+ this.wantsSBSv1 = wantsSBSv1;
this.wantsSBSv2 = wantsSBSv2;
this.projectSetting = projectSetting;
}
@@ -81,7 +83,7 @@
// for project settings we show either sbsv1 or sbsv2. for workspace prefs
// we potentially show both
- if ((projectSetting && !wantsSBSv2) || !projectSetting) {
+ if (wantsSBSv1) {
createSBSv1TabComposite();
}
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/BuilderPreferencePage.java Tue Apr 27 09:07:35 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/BuilderPreferencePage.java Tue Apr 27 09:07:48 2010 -0500
@@ -36,19 +36,22 @@
}
protected Control createContents(Composite parent) {
- buildSettingsUI = new BuildSettingsUI(parent.getShell(), SBSv2Utils.enableSBSv2Support(), false);
+ buildSettingsUI = new BuildSettingsUI(parent.getShell(), SBSv2Utils.enableSBSv1Support(), SBSv2Utils.enableSBSv2Support(), false);
Control control = buildSettingsUI.createControl(parent);
- buildSettingsUI.setDefaultCleanLevelv1(getCleanLevel());
buildSettingsUI.setBuildTestComponents(isBuildingTestComps());
- buildSettingsUI.setManageDependencies(manageDependencies());
buildSettingsUI.setUseIncrementalBuilder(useIncrementalBuilder());
buildSettingsUI.setUseConcurrentBuilding(useConcurrentBuilding());
buildSettingsUI.setNumConcurrentBuildJobs(concurrentBuildJobs());
- buildSettingsUI.setPromptForMMPChangedAction(promptForMMPChangedAction());
- buildSettingsUI.setDefaultMMPChangedAction(defaultMMPChangedAction());
buildSettingsUI.setUseBuiltInEnvVars(useBuiltInX86Vars());
- buildSettingsUI.setDontPromtTrackDeps(promtDontTrackDependencies());
+
+ if (SBSv2Utils.enableSBSv1Support()) {
+ buildSettingsUI.setDefaultCleanLevelv1(getCleanLevel());
+ buildSettingsUI.setManageDependencies(manageDependencies());
+ buildSettingsUI.setPromptForMMPChangedAction(promptForMMPChangedAction());
+ buildSettingsUI.setDefaultMMPChangedAction(defaultMMPChangedAction());
+ buildSettingsUI.setDontPromtTrackDeps(promtDontTrackDependencies());
+ }
if (SBSv2Utils.enableSBSv2Support()) {
buildSettingsUI.setDefaultCleanLevelv2(getCleanLevelv2());
@@ -76,16 +79,19 @@
@Override
protected void performApply() {
IPreferenceStore store = CarbideBuilderPlugin.getDefault().getPreferenceStore();
- store.setValue(BuilderPreferenceConstants.PREF_CLEAN_LEVEL, buildSettingsUI.getDefaultCleanLevelv1());
store.setValue(BuilderPreferenceConstants.PREF_BUILD_TEST_COMPS, buildSettingsUI.getBuildTestComponents());
- store.setValue(BuilderPreferenceConstants.PREF_MANAGE_DEPENDENCIES, buildSettingsUI.getManageDependencies());
store.setValue(BuilderPreferenceConstants.PREF_USE_INCREMENTAL_BUILDER, buildSettingsUI.getUseIncrementalBuilder());
store.setValue(BuilderPreferenceConstants.PREF_USE_CONCURRENT_BUILDING, buildSettingsUI.getUseConcurrentBuilding());
store.setValue(BuilderPreferenceConstants.PREF_CONCURRENT_BUILD_JOBS, buildSettingsUI.getNumConcurrentBuildJobs());
- store.setValue(BuilderPreferenceConstants.PREF_MMP_CHANGED_ACTION_PROMPT, buildSettingsUI.getPromptForMMPChangedAction());
- store.setValue(BuilderPreferenceConstants.PREF_DEFAULT_MMP_CHANGED_ACTION, buildSettingsUI.getDefaultMMPChangedAction());
store.setValue(BuilderPreferenceConstants.PREF_USE_BUILIN_X86_VARS, buildSettingsUI.getUseBuiltInEnvVars());
- store.setValue(BuilderPreferenceConstants.PREF_DONT_PROMPT_FOR_DEPENDENCY_MISMATCH, buildSettingsUI.getDontPromtTrackDeps()); // global setting only
+
+ if (SBSv2Utils.enableSBSv1Support()) {
+ store.setValue(BuilderPreferenceConstants.PREF_CLEAN_LEVEL, buildSettingsUI.getDefaultCleanLevelv1());
+ store.setValue(BuilderPreferenceConstants.PREF_MANAGE_DEPENDENCIES, buildSettingsUI.getManageDependencies());
+ store.setValue(BuilderPreferenceConstants.PREF_MMP_CHANGED_ACTION_PROMPT, buildSettingsUI.getPromptForMMPChangedAction());
+ store.setValue(BuilderPreferenceConstants.PREF_DEFAULT_MMP_CHANGED_ACTION, buildSettingsUI.getDefaultMMPChangedAction());
+ store.setValue(BuilderPreferenceConstants.PREF_DONT_PROMPT_FOR_DEPENDENCY_MISMATCH, buildSettingsUI.getDontPromtTrackDeps()); // global setting only
+ }
if (SBSv2Utils.enableSBSv2Support()) {
store.setValue(BuilderPreferenceConstants.PREF_CLEAN_LEVEL_V2, buildSettingsUI.getDefaultCleanLevelv2());
@@ -98,16 +104,19 @@
}
protected void performDefaults() {
- buildSettingsUI.setDefaultCleanLevelv1(0);
buildSettingsUI.setBuildTestComponents(true);
- buildSettingsUI.setManageDependencies(true);
buildSettingsUI.setUseIncrementalBuilder(false);
buildSettingsUI.setUseConcurrentBuilding(true);
buildSettingsUI.setNumConcurrentBuildJobs(4);
- buildSettingsUI.setPromptForMMPChangedAction(true);
- buildSettingsUI.setDefaultMMPChangedAction(0);
buildSettingsUI.setUseBuiltInEnvVars(true);
- buildSettingsUI.setDontPromtTrackDeps(false);
+
+ if (SBSv2Utils.enableSBSv1Support()) {
+ buildSettingsUI.setDefaultCleanLevelv1(0);
+ buildSettingsUI.setManageDependencies(true);
+ buildSettingsUI.setPromptForMMPChangedAction(true);
+ buildSettingsUI.setDefaultMMPChangedAction(0);
+ buildSettingsUI.setDontPromtTrackDeps(false);
+ }
if (SBSv2Utils.enableSBSv2Support()) {
buildSettingsUI.setDefaultCleanLevelv2(0);
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideCPPProjectSettingsPage.java Tue Apr 27 09:07:35 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideCPPProjectSettingsPage.java Tue Apr 27 09:07:48 2010 -0500
@@ -154,7 +154,7 @@
sbsv2Project = CarbideBuilderPlugin.getBuildManager().isCarbideSBSv2Project(project);
}
- buildSettingsUI = new BuildSettingsUI(parent.getShell(), sbsv2Project, true);
+ buildSettingsUI = new BuildSettingsUI(parent.getShell(), !sbsv2Project, sbsv2Project, true);
buildSettingsUI.createControl(optionsGroup);
noDefaultAndApplyButton();
--- a/core/com.nokia.carbide.cpp.doc.user/html/reference/trk/wnd_new_connection_wizard.htm Tue Apr 27 09:07:35 2010 -0500
+++ b/core/com.nokia.carbide.cpp.doc.user/html/reference/trk/wnd_new_connection_wizard.htm Tue Apr 27 09:07:48 2010 -0500
@@ -37,17 +37,17 @@
</tr>
<tr>
<td><strong>Connection Name</strong></td>
- <td><p>Enter a name for the connection.</p> </td>
+ <td><p>Enter a name to identify the connection.</p> </td>
</tr>
<tr>
<td><strong>Connection Settings</strong></td>
<td><p>Displays COM Port, Baud Rate, IP Addresss, Channel and Port settings according to the chosen connection type.</p>
- <ul><li>Bluetooth - select which COM port to use </li>
- <li>PlatSim - shows what IP address it will use </li>
- <li>Serial - select which COM port and baud rate to use. </li>
- <li>TPC IP - enter your IP address </li>
- <li> TCP IP Musti - enter your IP address, Musti channel, Port number </li>
- <li>USB - select which COM port to use</li>
+ <ul>
+ <li>Bluetooth - select which serial COM port to use </li>
+ <li>PlatSim - select Platsim executable and instance to use </li>
+ <li>Serial - select which serial COM port and baud rate to use. </li>
+ <li>TPC IP - enter your IP address, Musti channel, Port number </li>
+ <li>USB - select which serial COM port to use</li>
</ul></td>
</tr>
</table>
--- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SBSv2Utils.java Tue Apr 27 09:07:35 2010 -0500
+++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SBSv2Utils.java Tue Apr 27 09:07:48 2010 -0500
@@ -40,6 +40,7 @@
import org.xml.sax.InputSource;
import org.xml.sax.helpers.DefaultHandler;
+import com.nokia.carbide.cpp.sdk.core.ISDKManager;
import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
@@ -55,6 +56,7 @@
private static final String SBSV2_FILTERED_CONFIGS_STORE = "sbsv2FilteredConfigs"; //$NON-NLS-1$
private static final String SBSV2_FILTERED_CONFIGS_STORE_INITED = "sbsv2FilteredConfigsInited"; //$NON-NLS-1$
private static final String SBSV2_FILTERED_CONFIGS_DELIMETER = ";"; //$NON-NLS-1$
+ private static final long VALID_ABLD_SIZE = 1024;
/** Path, to and including the SBS script */
protected static IPath sbsPath;
@@ -257,6 +259,20 @@
}
/**
+ * Whether or not to display SBSv1 builder UI
+ * @return true if SBSv1 is available, false otherwise
+ */
+ public static boolean enableSBSv1Support() {
+ if (!enableSBSv2Support())
+ return true;
+
+ if (isSBSv1Supported())
+ return true;
+
+ return false;
+ }
+
+ /**
* Whether or not to display SBSv2 builder UI
* @return true if SBSv2 is installed, false otherwise
*/
@@ -463,4 +479,17 @@
}
return newOutputDir;
}
+
+ private static boolean isSBSv1Supported() {
+ ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
+ for (ISymbianSDK sdk : sdkMgr.getSDKList()) {
+ File abld = new File(sdk.getEPOCROOT(), "epoc32/tools/abld.pl"); //$NON-NLS-1$
+ if (abld.exists()) {
+ long size = abld.length();
+ if (size >= VALID_ABLD_SIZE)
+ return true;
+ }
+ }
+ return false;
+ }
}
--- a/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/api/sdk/ui/BuildPlatformFilterPage.java Tue Apr 27 09:07:35 2010 -0500
+++ b/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/api/sdk/ui/BuildPlatformFilterPage.java Tue Apr 27 09:07:48 2010 -0500
@@ -63,13 +63,15 @@
sbsv2TabItem.setControl(sbsv2Tab);
}
- TabItem sbsv1TabItem = new TabItem(tabFolder, SWT.NONE);
- sbsv1TabItem.setText(Messages.getString("BuildPlatformFilterPage.SBSv1TabText")); //$NON-NLS-1$
- sbsv1TabItem.setToolTipText(Messages.getString("BuildPlatformFilterPage.SBSv1TabToolTip")); //$NON-NLS-1$
-
- sbsv1Tab = new SBSv1PlatformFilterComposite(tabFolder);
- sbsv1Tab.createControls();
- sbsv1TabItem.setControl(sbsv1Tab);
+ if (SBSv2Utils.enableSBSv1Support()) {
+ TabItem sbsv1TabItem = new TabItem(tabFolder, SWT.NONE);
+ sbsv1TabItem.setText(Messages.getString("BuildPlatformFilterPage.SBSv1TabText")); //$NON-NLS-1$
+ sbsv1TabItem.setToolTipText(Messages.getString("BuildPlatformFilterPage.SBSv1TabToolTip")); //$NON-NLS-1$
+
+ sbsv1Tab = new SBSv1PlatformFilterComposite(tabFolder);
+ sbsv1Tab.createControls();
+ sbsv1TabItem.setControl(sbsv1Tab);
+ }
PlatformUI.getWorkbench().getHelpSystem().setHelp(super.getControl(), SDKUIHelpIds.SDK_BUILD_FILTER_PAGE);
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/DebugRunProcessDialog.java Tue Apr 27 09:07:35 2010 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/DebugRunProcessDialog.java Tue Apr 27 09:07:48 2010 -0500
@@ -19,7 +19,10 @@
import java.io.File;
import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
@@ -44,6 +47,8 @@
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
@@ -64,8 +69,10 @@
import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo;
+import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
import com.nokia.cdt.internal.debug.launch.newwizard.LaunchWizardData.EExeSelection;
import com.nokia.cpp.internal.api.utils.core.PathUtils;
+import com.nokia.cpp.internal.api.utils.core.TextUtils;
import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
/**
@@ -73,7 +80,7 @@
*/
public class DebugRunProcessDialog extends AbstractLaunchSettingsDialog implements ICProjectDescriptionListener {
private ComboViewer projectExecutableViewer;
- private Text remoteProgramEntry;
+ private ComboViewer remoteProgramViewer;
private Button projectExecutableRadioButton;
private Button remoteExecutableRadioButton;
private Button attachToProcessRadioButton;
@@ -85,6 +92,9 @@
private Button sisBrowse;
private Composite installPackageUI;
+ private List<IPath> remotePathEntries = new ArrayList<IPath>();
+ private List<IPath> projectGeneratedRemotePaths;
+
protected DebugRunProcessDialog(Shell shell, LaunchWizardData data) {
super(shell, data);
}
@@ -100,6 +110,14 @@
data.isDebug() ? LaunchWizardHelpIds.WIZARD_DIALOG_CHANGE_DEBUG_PROCESS :
LaunchWizardHelpIds.WIZARD_DIALOG_CHANGE_RUN_PROCESS);
+ loadRemoteProgramEntries();
+
+ composite.addDisposeListener(new DisposeListener() {
+
+ public void widgetDisposed(DisposeEvent e) {
+ saveRemoteProgramEntries();
+ }
+ });
createProcessSelector(composite);
@@ -115,6 +133,47 @@
return composite;
}
+ // pref key for paths the user has manually entered
+ final static String USER_REMOTE_PATHS = "user.remote.paths"; //$NON-NLS-1$
+
+ /**
+ *
+ */
+ protected void saveRemoteProgramEntries() {
+ // in case user was typing, ensure that entry is present
+ if(remoteProgramViewer != null) {
+ IPath currentPath = PathUtils.createPath(remoteProgramViewer.getCombo().getText().trim());
+ remotePathEntries.remove(currentPath);
+ remotePathEntries.add(0, currentPath); // MRU
+ }
+
+ // make a set, removing user dupes, and also removing the entries we added
+ Set<IPath> uniqueRemotePathEntries = new LinkedHashSet<IPath>(remotePathEntries);
+ if (projectGeneratedRemotePaths != null)
+ uniqueRemotePathEntries.removeAll(projectGeneratedRemotePaths);
+
+ // truncate size, removing from end
+ List<IPath> mruPathEntries = new ArrayList<IPath>(uniqueRemotePathEntries);
+ while (mruPathEntries.size() > 10) {
+ mruPathEntries.remove(mruPathEntries.size() - 1);
+ }
+
+ String pathSoup = TextUtils.catenateStrings(mruPathEntries.toArray(), "|"); //$NON-NLS-1$
+ LaunchPlugin.getDefault().getPreferenceStore().setValue(USER_REMOTE_PATHS, pathSoup);
+ }
+
+ /**
+ *
+ */
+ protected void loadRemoteProgramEntries() {
+ String pathSoup = LaunchPlugin.getDefault().getPreferenceStore().getString(USER_REMOTE_PATHS);
+ if (pathSoup != null) {
+ String[] paths = pathSoup.split("\\|"); //$NON-NLS-1$
+ for (String path : paths)
+ remotePathEntries.add(PathUtils.createPath(path));
+ }
+ }
+
private void createProcessSelector(Composite composite) {
Label label;
@@ -179,6 +238,8 @@
GridDataFactory.fillDefaults().applyTo(installPackageCheckbox);
installPackageCheckbox.setText(Messages.getString("DebugRunProcessDialog.InstallBeforeLaunchLabel")); //$NON-NLS-1$
+ installPackageCheckbox.setToolTipText(Messages.getString("DebugRunProcessDialog.SISCheckboxTooltip")); //$NON-NLS-1$
+
installPackageUI = new Composite(composite, SWT.NONE);
GridDataFactory.fillDefaults().indent(INDENT, 0).applyTo(installPackageUI);
@@ -363,21 +424,47 @@
protected void initUI() {
List<IPath> exes = data.getLaunchableExes();
projectExecutableViewer.setInput(exes);
+
+ // this path may either be a project-relative or remote path
IPath exeSelectionPath = data.getExeSelectionPath();
if (exeSelectionPath.equals(Path.EMPTY) && !exes.isEmpty())
exeSelectionPath = exes.get(0);
+
if (!Path.EMPTY.equals(exeSelectionPath)) {
+ // keep previous path if possible...
+ IPath remotePath = exeSelectionPath;
+ if (data.getExes().contains(remotePath)) {
+ // unless that was actually a host-side path, which should be converted
+ remotePath = createSuggestedRemotePath(exeSelectionPath);
+ } else {
+ // selection is already a remote path; map back to project if possible
+ IPath projPath = getHostFileForRemoteLocation(exeSelectionPath);
+ if (projPath != null) {
+ exeSelectionPath = projPath;
+ }
+ else {
+ // remote path does not correspond to anything; select some project exe so
+ // the combo isn't empty
+ exeSelectionPath = exes.get(0);
+ }
+ }
projectExecutableViewer.setSelection(new StructuredSelection(exeSelectionPath));
- IPath remotePath = createSuggestedRemotePath(exeSelectionPath);
- remoteProgramEntry.setText(PathUtils.convertPathToWindows(remotePath));
+
+ if (remoteProgramViewer != null) {
+ if (!remotePathEntries.contains(remotePath)) {
+ remotePathEntries.add(0, remotePath); // MRU
+ remoteProgramViewer.add(remotePath);
+ }
+ remoteProgramViewer.setSelection(new StructuredSelection(remotePath));
+ }
}
if (data.getExeSelection() == EExeSelection.USE_PROJECT_EXECUTABLE && exeSelectionPath != null) {
- projectExecutableRadioButton.forceFocus();
+ projectExecutableViewer.getControl().forceFocus();
}
if (data.getExeSelection() == EExeSelection.USE_REMOTE_EXECUTABLE && exeSelectionPath != null) {
- remoteExecutableRadioButton.forceFocus();
+ remoteProgramViewer.getControl().forceFocus();
}
if (data.getExeSelection() == EExeSelection.ATTACH_TO_PROCESS) {
@@ -395,6 +482,27 @@
return PathUtils.createPath("C:/sys/bin").append(filename); //$NON-NLS-1$
}
+
+ /**
+ * Get the host-side file for a given remote location. Opposite of
+ * {@link #createSuggestedRemotePath(IPath)}.
+ * @param path
+ * @return host path or <code>null</code>
+ */
+ private IPath getHostFileForRemoteLocation(IPath path) {
+ for (IPath exe : data.getExes()) {
+ // no... we don't have any knowledge (yet) of the actual install path,
+ // so comparing the exact path will fail if the user edited it.
+ // IPath remoteSuggested = createSuggestedRemotePath(exe);
+
+ // be pretty loose in the matching for now
+ if (exe.lastSegment().equalsIgnoreCase(path.lastSegment())) {
+ return exe;
+ }
+ }
+ return null;
+ }
+
/**
* Allow selecting an executable detected to be built by the program.
* @param radioGroup
@@ -404,10 +512,13 @@
GridDataFactory.fillDefaults().grab(false, false).applyTo(projectExecutableRadioButton);
projectExecutableRadioButton.setText(Messages.getString("DebugRunProcessDialog.LaunchProjectExeLabel")); //$NON-NLS-1$
projectExecutableRadioButton.setData(UID, "radio_project_executable"); //$NON-NLS-1$
+ projectExecutableRadioButton.setToolTipText(Messages.getString("DebugRunProcessDialog.LaunchProjectExecutableRadioTooltip")); //$NON-NLS-1$
+
projectExecutableViewer = new ComboViewer(radioGroup, SWT.READ_ONLY);
GridDataFactory.fillDefaults().grab(true, false).applyTo(projectExecutableViewer.getControl());
projectExecutableViewer.getControl().setData(UID, "combo_project_executable"); //$NON-NLS-1$
+ projectExecutableViewer.getControl().setToolTipText(Messages.getString("DebugRunProcessDialog.LaunchProjectExecutableSelectorTooltip")); //$NON-NLS-1$
projectExecutableViewer.setContentProvider(new ArrayContentProvider());
projectExecutableViewer.setLabelProvider(new LabelProvider() {
@@ -432,12 +543,15 @@
public void selectionChanged(SelectionChangedEvent event) {
Object sel = ((IStructuredSelection) event.getSelection()).getFirstElement();
if (sel instanceof IPath) {
- data.setExeSelectionPath((IPath) sel);
+ if (projectExecutableRadioButton.getSelection()) {
+ data.setExeSelectionPath((IPath) sel);
+ }
// track the default remote program from the executable, for easy editing
- if (remoteProgramEntry != null) {
+ if (remoteProgramViewer != null && !remoteExecutableRadioButton.getSelection()) {
IPath exeSelectionPath = createSuggestedRemotePath(data.getExeSelectionPath());
- remoteProgramEntry.setText(PathUtils.convertPathToWindows(exeSelectionPath));
+ // path should already be in model
+ remoteProgramViewer.setSelection(new StructuredSelection(exeSelectionPath));
}
validate();
@@ -471,11 +585,33 @@
remoteExecutableRadioButton.setText(Messages.getString("DebugRunProcessDialog.LaunchRemoteProgLabel")); //$NON-NLS-1$
remoteExecutableRadioButton.setData(UID, "radio_remote_program"); //$NON-NLS-1$
+ remoteExecutableRadioButton.setToolTipText(Messages.getString("DebugRunProcessDialog.LaunchRemoteProgramRadioTooltip")); //$NON-NLS-1$
- remoteProgramEntry = new Text(radioGroup, SWT.BORDER);
- GridDataFactory.fillDefaults().grab(true, false).applyTo(remoteProgramEntry);
+ remoteProgramViewer = new ComboViewer(radioGroup, SWT.BORDER);
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(remoteProgramViewer.getControl());
+
+ projectGeneratedRemotePaths = new ArrayList<IPath>();
+ for (IPath launchable : data.getLaunchableExes()) {
+ projectGeneratedRemotePaths.add(createSuggestedRemotePath(launchable));
+ }
+
+ // add the entries before the user MRU entries
+ remotePathEntries.addAll(0, projectGeneratedRemotePaths);
- remoteProgramEntry.setData(UID, "text_remote_program"); //$NON-NLS-1$
+ remoteProgramViewer.setContentProvider(new ArrayContentProvider());
+ remoteProgramViewer.setLabelProvider(new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ if (element instanceof IPath)
+ return PathUtils.convertPathToWindows((IPath) element);
+ return super.getText(element);
+ }
+ });
+ remoteProgramViewer.setInput(remotePathEntries);
+ remoteProgramViewer.getCombo().setVisibleItemCount(Math.min(10, remotePathEntries.size()));
+
+ remoteProgramViewer.setData(UID, "combo_remote_program"); //$NON-NLS-1$
+ remoteProgramViewer.getControl().setToolTipText(Messages.getString("DebugRunProcessDialog.LaunchRemoteProgramSelectorTooltip")); //$NON-NLS-1$
remoteExecutableRadioButton.addSelectionListener(new SelectionAdapter() {
@Override
@@ -485,23 +621,48 @@
});
- remoteProgramEntry.addModifyListener(new ModifyListener() {
+ remoteProgramViewer.getCombo().addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
- data.setExeSelectionPath(new Path(remoteProgramEntry.getText().trim()));
+ IPath path = PathUtils.createPath(remoteProgramViewer.getCombo().getText().trim());
+ if (remoteExecutableRadioButton.getSelection()) {
+ data.setExeSelectionPath(path);
+ }
+
+ if (!projectExecutableRadioButton.getSelection()) {
+ IPath projPath = getHostFileForRemoteLocation(path);
+ if (projPath != null) {
+ projectExecutableViewer.setSelection(new StructuredSelection(projPath));
+ }
+ }
+
validate();
}
});
+
+ remoteProgramViewer.getCombo().addFocusListener(new FocusAdapter() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.FocusAdapter#focusLost(org.eclipse.swt.events.FocusEvent)
+ */
+ @Override
+ public void focusLost(FocusEvent e) {
+ IPath path = PathUtils.createPath(remoteProgramViewer.getCombo().getText().trim());
+
+ // MRU behavior
+ remotePathEntries.remove(path);
+ remotePathEntries.add(0, path);
+ }
+ });
}
private void handleRemoteExecutableRadioSelected() {
if (remoteExecutableRadioButton.getSelection()) {
- remoteProgramEntry.setEnabled(true);
+ remoteProgramViewer.getControl().setEnabled(true);
data.setExeSelection(EExeSelection.USE_REMOTE_EXECUTABLE);
- IPath path = PathUtils.createPath(remoteProgramEntry.getText());
+ IPath path = PathUtils.createPath(remoteProgramViewer.getCombo().getText());
data.setExeSelectionPath(path);
validate();
} else {
- remoteProgramEntry.setEnabled(false);
+ remoteProgramViewer.getControl().setEnabled(false);
// another button becomes active and sets the new launch process
}
}
@@ -516,7 +677,8 @@
attachToProcessRadioButton.setText(Messages.getString("DebugRunProcessDialog.AttachLabel")); //$NON-NLS-1$
attachToProcessRadioButton.setData(UID, "radio_attach_to_process"); //$NON-NLS-1$
-
+ attachToProcessRadioButton.setToolTipText(Messages.getString("DebugRunProcessDialog.AttachProcessRadioTooltip")); //$NON-NLS-1$
+
Label label = new Label(radioGroup, SWT.WRAP);
GridDataFactory.fillDefaults().grab(false, false).align(SWT.LEFT, SWT.CENTER).applyTo(label);
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/messages.properties Tue Apr 27 09:07:35 2010 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/messages.properties Tue Apr 27 09:07:48 2010 -0500
@@ -16,6 +16,7 @@
DebugRunProcessDialog.AllFilterName=All Files
DebugRunProcessDialog.AttachAddlMsg=(selected at launch time)
DebugRunProcessDialog.AttachLabel=&Attach to process:
+DebugRunProcessDialog.AttachProcessRadioTooltip=Attach to a running program at launch time.
DebugRunProcessDialog.BrowseLabel=Browse...
DebugRunProcessDialog.ChangeProcessMsg=Change {0} Process
DebugRunProcessDialog.DebugConfigureMsg=Configure how to debug the program. The initial settings reflect the debug capabilities of the selected device and the SIS builder settings.
@@ -24,12 +25,17 @@
DebugRunProcessDialog.FilePathError=The executable path should end in a filename.
DebugRunProcessDialog.InstallBeforeLaunchLabel=Install package before launch
DebugRunProcessDialog.InstallFilterName=Installation Files
+DebugRunProcessDialog.LaunchProjectExecutableRadioTooltip=Launch a program built by the project.
+DebugRunProcessDialog.LaunchProjectExecutableSelectorTooltip=Select one of the executables built from the project.\n\nThis will be copied or installed to the device and then launched.
DebugRunProcessDialog.LaunchProjectExeLabel=Launch project &executable:
-DebugRunProcessDialog.LaunchRemoteProgLabel=Launch &remote program:
+DebugRunProcessDialog.LaunchRemoteProgLabel=Launch program on &device:
+DebugRunProcessDialog.LaunchRemoteProgramRadioTooltip=Launch a specific program on the device.
+DebugRunProcessDialog.LaunchRemoteProgramSelectorTooltip=Select the device-side program to launch.\n\nThis is an executable installed or copied from the project or a custom path (e.g. used when debugging a DLL).
DebugRunProcessDialog.ModeLabel={0} method:
DebugRunProcessDialog.NoExesError=The project builds no executables.
DebugRunProcessDialog.NoneItem=None
DebugRunProcessDialog.RunConfigureMsg=Configure how to run the program.
+DebugRunProcessDialog.SISCheckboxTooltip=When checked, Carbide installs a SIS package for the active build configuration.\n\nWhen unchecked, Carbide copies the files built by the current project to the device.\nYou can manually edit these in the advanced settings.
DebugRunProcessDialog.SISConfigLinkText=Modify SIS builder settings for build configuration
DebugRunProcessDialog.SISFileExistError=The SIS file ''{0}'' does not exist.
DebugRunProcessDialog.SISFileLabel=SIS File to Install:
@@ -46,7 +52,7 @@
DebugRunProcessSection.NoRemoteExeError=No remote executable is selected.
DebugRunProcessSection.Title={0} process
LaunchWizard.AdvancedLabel=Edit advanced settings before launch
-LaunchWizard.AdvancedTip=Before finishing the wizard, edit settings in the ''{0} Configurations'' dialog.
+LaunchWizard.AdvancedTip=When finishing the wizard, edit settings in the ''{0} Configurations'' dialog before launching.
LaunchWizard.EditLabel=Edit
LaunchWizard.EditTip=Click to accept settings and edit advanced settings.
LaunchWizard.FinishTip=Click to accept settings and launch the program.
--- a/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/sharedui/BuilderSelectionComposite.java Tue Apr 27 09:07:35 2010 -0500
+++ b/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/sharedui/BuilderSelectionComposite.java Tue Apr 27 09:07:48 2010 -0500
@@ -69,11 +69,16 @@
builderCombo.setToolTipText(Messages.getString("NewProjectPage.builderToolTip")); //$NON-NLS-1$
builderCombo.setLayoutData(new GridData());
builderCombo.setData(".uid", "builderCombo"); //$NON-NLS-1$ //$NON-NLS-2$
- builderCombo.add(Messages.getString("NewProjectPage.sbsv1")); //$NON-NLS-1$
+ if (SBSv2Utils.enableSBSv1Support()) {
+ builderCombo.add(Messages.getString("NewProjectPage.sbsv1")); //$NON-NLS-1$
+ }
builderCombo.add(Messages.getString("NewProjectPage.sbsv2")); //$NON-NLS-1$
builderCombo.setData(".uid", "builderCombo"); //$NON-NLS-1$ //$NON-NLS-2$
builderCombo.select(0);
-
+ if (!SBSv2Utils.enableSBSv1Support()) {
+ // hide the whole composite if only SBSvw is enabled
+ this.setVisible(false);
+ }
}
/**
@@ -85,18 +90,32 @@
useSBSv2Builder = true;
IStatus status = null;
if (builderCombo != null && builderCombo.getSelectionIndex() == 1) {
-
- if (SBSv2Utils.getSBSBinDirectory() == null){
- status = new Status(Status.ERROR, ProjectUIPlugin.PLUGIN_ID, "The Symbian Build System (sbs) cannot be found on the PATH. Carbide needs a valid SBS installation on the PATH to use the SBSv2 builder.");
+ int index = builderCombo.getSelectionIndex();
+ String selection = builderCombo.getItem(index);
+ if (selection.equals(Messages.getString("NewProjectPage.sbsv1"))) { //$NON-NLS-1$
+ if (!SBSv2Utils.enableSBSv1Support()) {
+ status = new Status(Status.ERROR, ProjectUIPlugin.PLUGIN_ID, "SBSv1 is not supported on this system.");
+ }
+ useSBSv2Builder = false;
}
- // check the raptor version
- else if (SDKCorePlugin.getSDKManager().getSBSv2Version(false).getMajor() == 0){
- // Try to scan again....
- if (SDKCorePlugin.getSDKManager().getSBSv2Version(true).getMajor() == 0){
- status = new Status(Status.WARNING, ProjectUIPlugin.PLUGIN_ID, "SBS version cannot be determined, some SBS functionality may not work. Please check your SBS installation.");
+ else if (selection.equals(Messages.getString("NewProjectPage.sbsv2"))) { //$NON-NLS-1$
+
+ // if SBSv2 is selected, make sure SBS bin directory exists
+ if (SBSv2Utils.getSBSBinDirectory() == null){
+ status = new Status(Status.ERROR, ProjectUIPlugin.PLUGIN_ID, "The Symbian Build System (sbs) cannot be found on the PATH. Carbide needs a valid SBS installation on the PATH to use the SBSv2 builder.");
}
+
+ // check the raptor version
+ else if (SDKCorePlugin.getSDKManager().getSBSv2Version(false).getMajor() == 0){
+ // Try to scan again....
+ if (SDKCorePlugin.getSDKManager().getSBSv2Version(true).getMajor() == 0){
+ status = new Status(Status.WARNING, ProjectUIPlugin.PLUGIN_ID, "SBS version cannot be determined, some SBS functionality may not work. Please check your SBS installation.");
+ }
+ }
+
+ } else {
+ useSBSv2Builder = false;
}
-
} else {
useSBSv2Builder = false;
}