merge commit
authortimkelly
Mon, 14 Dec 2009 10:26:24 -0600
changeset 681 0ca8a6b568b1
parent 680 4224161eb5db (current diff)
parent 678 557efa279676 (diff)
child 682 7b05fffc0084
merge commit
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/EpocEngineHelper.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/EpocEngineHelper.java	Mon Dec 14 10:26:24 2009 -0600
@@ -35,6 +35,8 @@
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 
 import java.io.*;
 import java.util.*;
@@ -892,7 +894,7 @@
 	 * @param targetPath full path to device-side .rsc directory
 	 */
 	private static void addResourceLanguageTargets(Map<String, String> resources, IMMPData data, IMMPResource resource, 
-			String baseGeneratedPath, String targetPath) {
+			IPath baseGeneratedPath, IPath targetPath) {
 		List<EMMPLanguage> languages = null;
 		// block resource can override languages (entirely)
 		if (resource != null) {
@@ -909,7 +911,8 @@
 		}
 		for (EMMPLanguage language : languages) {
 			String extension = ".R" + language.getCodeString(); //$NON-NLS-1$
-			resources.put(HostOS.convertPathToNative(baseGeneratedPath + extension), HostOS.convertPathToWindows(targetPath));
+			resources.put(baseGeneratedPath.toOSString() + extension.toLowerCase(), 
+					HostOS.convertPathToWindows(targetPath));
 		}
 	}
 	
@@ -944,84 +947,7 @@
 								new MMPDataRunnableAdapter() {
 
 								public Object run(IMMPData mmpData) {
-									// read the project-wide target path
-									String targetPath = mmpData.getSingleArgumentSettings().get(EMMPStatement.TARGETPATH);
-									if (targetPath != null) {
-										// make sure it doesn't start with a "\" but ends with one
-										IPath targetP = new Path(targetPath).makeRelative().addTrailingSeparator();
-										targetPath = targetP.toOSString();
-									} else {
-										// for EKA1 just leave empty.  for EKA2 use sys\bin\
-										if (buildConfig.getSDK().getOSVersion().getMajor() > 8) {
-											targetPath = "sys/bin/"; //$NON-NLS-1$
-										} else {
-											targetPath = ""; //$NON-NLS-1$
-										}
-									}
-
-									String dataZDir = buildConfig.getSDK().getReleaseRoot().removeLastSegments(1).toPortableString() + "/data/z/"; //$NON-NLS-1$
-									// get the aifs
-									List<IMMPAIFInfo> aifs = mmpData.getAifs();
-									for (IMMPAIFInfo aif : aifs) {
-										IPath aifPath = aif.getTarget().makeAbsolute();
-										resources.put(HostOS.convertPathToNative(dataZDir + targetPath + aifPath.lastSegment().toLowerCase()), 
-												HostOS.convertPathToWindows("C:\\" + targetPath)); //$NON-NLS-1$
-									}
-
-									// get the bitmaps
-									List<IMMPBitmap> bmps = mmpData.getBitmaps();
-									for (IMMPBitmap bmp : bmps) {
-										IPath mbmPath = bmp.getTargetFilePath().makeRelative();
-										resources.put(HostOS.convertPathToNative(dataZDir + mbmPath.toOSString().toLowerCase()), 
-												HostOS.convertPathToWindows("C:\\" + mbmPath.removeLastSegments(1).addTrailingSeparator().toOSString())); //$NON-NLS-1$
-									}
-
-									// get the user resources
-									List<IPath> userResources = mmpData.getUserResources();
-									for (IPath userRes : userResources) {
-										addResourceLanguageTargets(resources, mmpData, null, 
-												HostOS.convertPathToNative(dataZDir + targetPath + userRes.removeFileExtension().lastSegment().toLowerCase()), 
-												HostOS.convertPathToWindows("C:\\" + targetPath)); //$NON-NLS-1$
-									}
-
-									// get the system resources
-									List<IPath> systemResources = mmpData.getSystemResources();
-									for (IPath systemRes : systemResources) {
-										addResourceLanguageTargets(resources, mmpData, null,
-												HostOS.convertPathToNative(dataZDir + targetPath + systemRes.removeFileExtension().lastSegment().toLowerCase()), 
-												HostOS.convertPathToWindows("C:\\" + targetPath)); //$NON-NLS-1$
-									}
-
-									// get the resource blocks
-									List<IMMPResource> resourceBlocks = mmpData.getResourceBlocks();
-									for (IMMPResource resourceBlock : resourceBlocks) {
-										IPath resPath = resourceBlock.getTargetPath();
-										if (resPath == null) {
-											// if not specified in the resource block then get the global
-											// target path
-											String targetP = mmpData.getSingleArgumentSettings().get(EMMPStatement.TARGETPATH);
-											if (targetP != null) {
-												resPath = new Path(targetP);
-											}
-										}
-										if (resPath != null) {
-											resPath = resPath.makeRelative().addTrailingSeparator();
-											String filename = resourceBlock.getTargetFile();
-											if (filename == null) {
-												filename = resourceBlock.getSource().removeFileExtension().lastSegment().toLowerCase();
-											} else {
-												filename = HostOS.createPathFromString(filename).removeFileExtension().toPortableString().toLowerCase();
-											}
-											// adjust the path if necessary as it's different on the phone for the *_.reg file
-											IPath adjustedTargetPath = resPath;
-											if (adjustedTargetPath.toPortableString().equalsIgnoreCase("private/10003a3f/apps/")) { //$NON-NLS-1$
-												adjustedTargetPath = new Path("private/10003a3f/import/apps/"); //$NON-NLS-1$
-											}
-											addResourceLanguageTargets(resources, mmpData, resourceBlock,
-													HostOS.convertPathToNative(dataZDir + resPath.toOSString() + filename), 
-													HostOS.convertPathToWindows("C:\\" + HostOS.convertPathToWindows(adjustedTargetPath))); //$NON-NLS-1$
-										}
-									}
+									gatherMMPResourceMappings(buildConfig, resources, mmpData);
 									return null;
 								}
 						});
@@ -1048,103 +974,7 @@
 				new MMPDataRunnableAdapter() {
 
 				public Object run(IMMPData mmpData) {
-					// read the project-wide target path
-					String targetPath = mmpData.getSingleArgumentSettings().get(EMMPStatement.TARGETPATH);
-					if (targetPath != null) {
-						// make sure it doesn't start with a "\" but ends with one
-						IPath targetP = new Path(targetPath).makeRelative().addTrailingSeparator();
-						targetPath = targetP.toOSString();
-					} else {
-						// for EKA1 just leave empty.  for EKA2 use sys\bin\
-						if (buildConfig.getSDK().getOSVersion().getMajor() > 8) {
-							targetPath = "sys\\bin\\"; //$NON-NLS-1$
-						} else {
-							targetPath = ""; //$NON-NLS-1$
-						}
-					}
-
-					String dataZDir = buildConfig.getSDK().getReleaseRoot().removeLastSegments(1).toPortableString() + "/data/z/"; //$NON-NLS-1$
-					
-					// get the aifs
-					List<IMMPAIFInfo> aifs = mmpData.getAifs();
-					for (IMMPAIFInfo aif : aifs) {
-						IPath aifPath = aif.getTarget().makeAbsolute();
-						resources.put(HostOS.convertPathToNative(dataZDir + targetPath + aifPath.lastSegment()), 
-								HostOS.convertPathToWindows("C:\\" + targetPath)); //$NON-NLS-1$
-					}
-
-					// for resources and bitmaps, the target path may be based on the target type if not explicitly
-					// set for the resource or bitmap.
-					String targetType = mmpData.getSingleArgumentSettings().get(EMMPStatement.TARGETTYPE);
-					if (targetType != null) {
-						// could be PLUGIN or PLUGIN3
-						if (targetType.toUpperCase().startsWith("PLUGIN")) { //$NON-NLS-1$
-							targetPath = "resource/plugins/"; //$NON-NLS-1$
-						} else if (targetType.compareToIgnoreCase("PDL") == 0) { //$NON-NLS-1$
-							targetPath = "resource/printers/"; //$NON-NLS-1$
-						}
-					}
-
-					// get the bitmaps
-					List<IMMPBitmap> bmps = mmpData.getBitmaps();
-					for (IMMPBitmap bmp : bmps) {
-						IPath mbmPath = bmp.getTargetFilePath().makeRelative();
-						// if there's no target path then use the main target path
-						if (mbmPath.segmentCount() == 1) {
-							mbmPath = new Path(targetPath).append(mbmPath);
-						}
-						resources.put(HostOS.convertPathToNative(dataZDir + mbmPath.toOSString()), 
-								HostOS.convertPathToWindows("C:\\" + mbmPath.removeLastSegments(1).addTrailingSeparator().toOSString())); //$NON-NLS-1$
-					}
-
-					// get the user resources
-					List<IPath> userResources = mmpData.getUserResources();
-					for (IPath userRes : userResources) {
-						addResourceLanguageTargets(resources, mmpData, null, 
-								HostOS.convertPathToNative(dataZDir + targetPath + userRes.removeFileExtension().lastSegment()), 
-								HostOS.convertPathToWindows("C:\\" + targetPath)); //$NON-NLS-1$ //$NON-NLS-2$
-					}
-
-					// get the system resources
-					List<IPath> systemResources = mmpData.getSystemResources();
-					for (IPath systemRes : systemResources) {
-						addResourceLanguageTargets(resources, mmpData, null,
-								HostOS.convertPathToNative(dataZDir + targetPath + systemRes.removeFileExtension().lastSegment()), 
-								HostOS.convertPathToWindows("C:\\" + targetPath)); //$NON-NLS-1$ //$NON-NLS-2$
-					}
-
-					// get the resource blocks
-					List<IMMPResource> resourceBlocks = mmpData.getResourceBlocks();
-					for (IMMPResource resourceBlock : resourceBlocks) {
-						IPath resPath = resourceBlock.getTargetPath();
-						if (resPath == null) {
-							// not specified in the resource block so use existing
-							resPath = new Path(targetPath);
-						}
-
-						String filename = resourceBlock.getTargetFile();
-						if (filename == null) {
-							filename = resourceBlock.getSource().removeFileExtension().lastSegment();
-						} else {
-							filename = HostOS.createPathFromString(filename).removeFileExtension().toOSString();
-						}
-						
-						if (resPath != null) {
-							resPath = resPath.makeRelative().addTrailingSeparator();
-							// adjust the path if necessary as it's different on the phone for the *_.reg file
-							IPath adjustedTargetPath = resPath;
-							if ((adjustedTargetPath.toPortableString()).equalsIgnoreCase("private/10003a3f/apps/")) { //$NON-NLS-1$
-								adjustedTargetPath = new Path("private/10003a3f/import/apps/"); //$NON-NLS-1$
-							}
-							addResourceLanguageTargets(resources, mmpData, resourceBlock,
-									HostOS.convertPathToNative(dataZDir + resPath.toOSString() + filename), 
-									HostOS.convertPathToWindows("C:\\" + adjustedTargetPath)); //$NON-NLS-1$
-						} else {
-							CarbideBuilderPlugin.log(Logging.newStatus(CarbideBuilderPlugin.getDefault(), 
-									IStatus.WARNING,
-									"No TARGETPATH specified for resource " + filename + ".  Skipping..."));
-						}
-					}
+					gatherMMPResourceMappings(buildConfig, resources, mmpData);
 					return null;
 				}
 		});
@@ -1152,6 +982,114 @@
 		return resources;
 	}
 	
+	private static void gatherMMPResourceMappings(
+			final ICarbideBuildConfiguration buildConfig,
+			final HashMap<String, String> resources, IMMPData mmpData) {
+		// read the project-wide target path
+		String targetPathStr = mmpData.getSingleArgumentSettings().get(EMMPStatement.TARGETPATH);
+		
+		// the target path, should always be absolute and deviceless
+		IPath targetPath;
+		
+		if (targetPathStr != null) {
+			targetPath = new Path(targetPathStr).makeAbsolute();
+		} else {
+			// for EKA1 just leave empty.  for EKA2 use sys\bin\
+			if (buildConfig.getSDK().getOSVersion().getMajor() > 8) {
+				targetPath = new Path("/sys/bin/"); //$NON-NLS-1$
+			} else {
+				targetPath = Path.ROOT; //$NON-NLS-1$
+			}
+		}
+	
+		IPath dataZDir = buildConfig.getSDK().getReleaseRoot().removeLastSegments(1).append("/data/z/"); //$NON-NLS-1$
+		
+		// get the aifs
+		List<IMMPAIFInfo> aifs = mmpData.getAifs();
+		for (IMMPAIFInfo aif : aifs) {
+			IPath aifPath = aif.getTarget().makeAbsolute();
+			resources.put(dataZDir.append(targetPath).append(aifPath.lastSegment()).toOSString(), 
+					HostOS.convertPathToWindows(targetPath.setDevice("C:"))); //$NON-NLS-1$
+		}
+	
+		///////////
+		
+		// for resources and bitmaps, the target path may be based on the target type if not explicitly
+		// set for the resource or bitmap.
+		String targetType = mmpData.getSingleArgumentSettings().get(EMMPStatement.TARGETTYPE);
+		if (targetType != null) {
+			// could be PLUGIN or PLUGIN3
+			if (targetType.toUpperCase().startsWith("PLUGIN")) { //$NON-NLS-1$
+				targetPath = new Path("/resource/plugins"); //$NON-NLS-1$
+			} else if (targetType.compareToIgnoreCase("PDL") == 0) { //$NON-NLS-1$
+				targetPath = new Path("/resource/printers"); //$NON-NLS-1$
+			}
+		}
+	
+		// get the bitmaps
+		List<IMMPBitmap> bmps = mmpData.getBitmaps();
+		for (IMMPBitmap bmp : bmps) {
+			IPath mbmPath = bmp.getTargetFilePath().makeRelative();
+			// if there's no target path then use the main target path
+			if (mbmPath.segmentCount() == 1) {
+				mbmPath = targetPath.append(mbmPath);
+			}
+			IPath mbmDir = mbmPath.removeLastSegments(1).addTrailingSeparator().setDevice("C:"); //$NON-NLS-1$
+			resources.put(dataZDir.append(mbmPath).toOSString(), 
+					HostOS.convertPathToWindows(mbmDir.toOSString()));
+		}
+	
+		// get the user resources
+		List<IPath> userResources = mmpData.getUserResources();
+		for (IPath userRes : userResources) {
+			addResourceLanguageTargets(resources, mmpData, null, 
+					dataZDir.append(targetPath).append(userRes.removeFileExtension().lastSegment().toLowerCase()), 
+					targetPath.setDevice("C:")); //$NON-NLS-1$
+		}
+	
+		// get the system resources
+		List<IPath> systemResources = mmpData.getSystemResources();
+		for (IPath systemRes : systemResources) {
+			addResourceLanguageTargets(resources, mmpData, null,
+					dataZDir.append(targetPath).append(systemRes.removeFileExtension().lastSegment().toLowerCase()), 
+					targetPath.setDevice("C:")); //$NON-NLS-1$
+		}
+	
+		// get the resource blocks
+		List<IMMPResource> resourceBlocks = mmpData.getResourceBlocks();
+		for (IMMPResource resourceBlock : resourceBlocks) {
+			IPath resPath = resourceBlock.getTargetPath();
+			if (resPath == null) {
+				// not specified in the resource block so use existing
+				resPath = targetPath;
+			}
+	
+			String filename = resourceBlock.getTargetFile();
+			if (filename == null) {
+				filename = resourceBlock.getSource().removeFileExtension().lastSegment();
+			} else {
+				filename = HostOS.createPathFromString(filename).removeFileExtension().toOSString();
+			}
+			filename = filename.toLowerCase();
+			
+			if (resPath != null) {
+				resPath = resPath.makeAbsolute().addTrailingSeparator();
+				// adjust the path if necessary as it's different on the phone for the *_.reg file
+				IPath adjustedTargetPath = resPath;
+				if ((adjustedTargetPath.toPortableString()).equalsIgnoreCase("/private/10003a3f/apps/")) { //$NON-NLS-1$
+					adjustedTargetPath = new Path("/private/10003a3f/import/apps/"); //$NON-NLS-1$
+				}
+				addResourceLanguageTargets(resources, mmpData, resourceBlock,
+						dataZDir.append(resPath).append(filename), 
+						adjustedTargetPath.setDevice("C:")); //$NON-NLS-1$
+			} else {
+				CarbideBuilderPlugin.log(Logging.newStatus(CarbideBuilderPlugin.getDefault(), 
+						IStatus.WARNING,
+						"No TARGETPATH specified for resource " + filename + ".  Skipping..."));
+			}
+		}
+	}
+
 	/**
 	 * Get a map of the generated images from image makefiles for the project. 
 	 * @param buildConfig the build configuration
@@ -1592,13 +1530,13 @@
 	
 	public static boolean getIndexAllPreference() {
 		// Can't access this pref from the project ui plugin because it would cause a circular dependency
-		Plugin plugin = Platform.getPlugin("com.nokia.carbide.cpp.project.ui"); //$NON-NLS-1$
-		if (plugin == null) {
+		IEclipsePreferences prefs = new InstanceScope().getNode("com.nokia.carbide.cpp.project.ui");
+		if (prefs == null) {
 			CarbideBuilderPlugin.log(Logging.newStatus(CarbideBuilderPlugin.getDefault(), 
 					IStatus.WARNING, "Could not find project UI plugin!"));
 			return true;
 		}
-		return plugin.getPluginPreferences().getBoolean("indexAll"); //$NON-NLS-1$
+		return prefs.getBoolean("indexAll", false); //$NON-NLS-1$
 	}
 
 	/**
@@ -2159,26 +2097,6 @@
 	}
 	
 	/**
-	 * Get the target name with a variant suffix inserted.
-	 * @param mmpData
-	 * @param target
-	 * @return updated target name
-	 * 
-	 * @deprecated Deprecated in 2.1. Use {@link #getBinaryVariantTargetName(IMMPData mmpData, IPath target, IProject project)} instead.
-	 */
-	private static IPath getVariantTargetName(IMMPData mmpData, IPath target) {
-		if (target == null)
-			return null;
-		
-		String suffix = mmpData.getSingleArgumentSettings().get(EMMPStatement.VAR);
-		if (suffix != null) {
-			target = target.removeFileExtension().addFileExtension(suffix + "." + FileUtils.getSafeFileExtension(target)); //$NON-NLS-1$
-		}
-		
-		return target;
-	}
-	
-	/**
 	 * Get the target name with a variant suffix inserted. Since 2.1 this includes support for Symbian Binary Variation builds
 	 * that have the FEATUREVARIANT keyword in their MMP file.
 	 * @param mmpData
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/AddEditSisFileToBuildDialog.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/AddEditSisFileToBuildDialog.java	Mon Dec 14 10:26:24 2009 -0600
@@ -47,6 +47,7 @@
 
 import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo;
 import com.nokia.carbide.cdt.internal.api.builder.SISBuilderInfo2;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 import com.nokia.sdt.utils.ProjectFileResourceProxyVisitor;
 
 public class AddEditSisFileToBuildDialog extends StatusDialog {
@@ -384,7 +385,7 @@
 		
 		DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN);
 		dialog.setText("Choose a folder...");
-		dialog.setFilterPath(contentSearchLocationEdit.getText());
+		BrowseDialogUtils.initializeFrom(dialog, contentSearchLocationEdit, project.getLocation());
 		String selectedDir = dialog.open();
 		
 		if (selectedDir != null && selectedDir.length() > 0) {
@@ -530,11 +531,11 @@
         FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
         fileDialog.setFilterExtensions(extFilter);
         fileDialog.setText(title);
-
-        int lastSeparatorIndex = startDir.lastIndexOf(File.separator);
-        if (lastSeparatorIndex != -1) {
-        	fileDialog.setFilterPath(startDir.substring(0, lastSeparatorIndex));
-        }
+        
+        IPath startPath = new Path(startDir);
+        if (!startPath.isAbsolute() && project != null)
+        	startPath = project.getLocation().append(startPath);
+        BrowseDialogUtils.initializeFrom(fileDialog, startPath);
 
         return fileDialog.open();
     }
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideMacroSettingsPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideMacroSettingsPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -41,6 +41,7 @@
 import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
 import com.nokia.carbide.cdt.internal.builder.CarbideProjectInfo;
 import com.nokia.carbide.cdt.internal.builder.CarbideProjectModifier;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 public class CarbideMacroSettingsPage extends PropertyPage {
 	
@@ -77,6 +78,8 @@
 		        fileDialog.setFilterExtensions(new String[] {"*.*"});
 		        fileDialog.setText(Messages.getString("CarbideMacroSettingsPage.BrowseDialogTitle")); //$NON-NLS-1$
 		        
+		        BrowseDialogUtils.initializeFrom(fileDialog, fMacroFileEdit);
+		        
 		        String path = fileDialog.open();
 		        if (path != null) {
 		        	fMacroFileEdit.setText(path);
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/ROMBuilderTabComposite.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/ROMBuilderTabComposite.java	Mon Dec 14 10:26:24 2009 -0600
@@ -34,6 +34,7 @@
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
 import com.nokia.carbide.cdt.builder.project.IROMBuilderInfo;
 import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 /**
  * Arguments tab for the Carbide Build Configurations page
@@ -73,6 +74,7 @@
 		workingDirBrowse.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent evt) {
 				DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.NONE);
+				BrowseDialogUtils.initializeFrom(dialog, workingDirEdit);
 
 				dialog.setText(Messages.getString("CarbideRomBuilderTab.Rom_Dir_Dialog_Title")); //$NON-NLS-1$
 				String result = dialog.open();
--- a/connectivity/com.nokia.carbide.remoteConnections/META-INF/MANIFEST.MF	Mon Dec 14 10:24:12 2009 -0600
+++ b/connectivity/com.nokia.carbide.remoteConnections/META-INF/MANIFEST.MF	Mon Dec 14 10:26:24 2009 -0600
@@ -11,7 +11,8 @@
  com.nokia.cpp.utils.core,
  org.eclipse.emf.ecore.xmi;bundle-version="2.4.0",
  org.eclipse.core.net;bundle-version="1.1.0",
- org.eclipse.help;bundle-version="3.4.0" 
+ org.eclipse.help;bundle-version="3.4.0",
+ com.nokia.cpp.utils.ui
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
 Export-Package: com.nokia.carbide.installpackages,
--- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/messages.properties	Mon Dec 14 10:24:12 2009 -0600
+++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/messages.properties	Mon Dec 14 10:26:24 2009 -0600
@@ -17,6 +17,7 @@
 ConnectionSettingsPage.InstallTabLabel=Install remote agents
 ConnectionSettingsPage.NoInstallerDataInfoString=No installer data available.
 ConnectionSettingsPage.NoInstallerDataInfoString2=Server may be down.
+ConnectionSettingsPage.NoInstallerSupport=Installers are currently not supported on this operating system.
 ConnectionSettingsPage.NoSettingsString={0} has no connection settings
 ConnectionSettingsPage.NotTestedStatusString=Status not tested
 ConnectionSettingsPage.PageTitleFmt={0} Settings
--- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/settings/ui/ConnectionSettingsPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/settings/ui/ConnectionSettingsPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -28,6 +28,7 @@
 import com.nokia.carbide.remoteconnections.interfaces.IRemoteAgentInstallerProvider.IRemoteAgentInstaller;
 import com.nokia.carbide.remoteconnections.interfaces.IRemoteAgentInstallerProvider.IRemoteAgentInstaller.IPackageContents;
 import com.nokia.cpp.internal.api.utils.core.*;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
@@ -165,6 +166,7 @@
 		gd_sdkcombo.widthHint = 150;
 		deviceOSComboViewer.getCombo().setLayoutData(gd_sdkcombo);
 		deviceOSComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@SuppressWarnings("unchecked")
 			public void selectionChanged(SelectionChangedEvent event) {
 				IStructuredSelection selection = (IStructuredSelection) deviceOSComboViewer.getSelection();
 				Pair<String, Version> pair = (Pair<String, Version>) selection.getFirstElement();
@@ -518,8 +520,14 @@
 				installerTreeViewer.expandAll();
 				
 				if (treeNodes.length == 0) {
-					String errorText = Messages.getString("ConnectionSettingsPage.NoInstallerDataInfoString"); //$NON-NLS-1$
-					errorText += "\n" + Messages.getString("ConnectionSettingsPage.NoInstallerDataInfoString2"); //$NON-NLS-1$ //$NON-NLS-2$
+					String errorText;
+					// TODO: the actual error condition needs to be recorded... 
+					if (HostOS.IS_UNIX) {
+						errorText = Messages.getString("ConnectionSettingsPage.NoInstallerSupport"); //$NON-NLS-1$
+					} else {
+						errorText = Messages.getString("ConnectionSettingsPage.NoInstallerDataInfoString"); //$NON-NLS-1$
+						errorText += "\n" + Messages.getString("ConnectionSettingsPage.NoInstallerDataInfoString2"); //$NON-NLS-1$ //$NON-NLS-2$
+					}
 					installerInfoText.setText(errorText);
 				}
 				
@@ -556,6 +564,7 @@
 		}
 	}
 	
+	@SuppressWarnings("unchecked")
 	private TreeNode findTreeNodeForPair(TreeNode[] treeNodes, Pair<String, Version> pair) {
 		for (TreeNode treeNode : treeNodes) {
 			Object value = treeNode.getValue();
@@ -575,6 +584,7 @@
 		return null;
 	}
 
+	@SuppressWarnings("unchecked")
 	protected void testService() {
 		Map<String, String> settings = connectionFactory.getSettingsFromUI();
 		boolean newConnection = connection == null || !connectionType.equals(connection.getConnectionType());
@@ -652,8 +662,7 @@
 			dialog.setText(Messages.getString("ConnectionSettingsPage.SaveAsDialogTitle"));  //$NON-NLS-1$
 			if (saveAsParent == null)
 				saveAsParent = System.getProperty("user.home");  //$NON-NLS-1$
-			dialog.setFilterPath(saveAsParent);
-			dialog.setFileName(packageContents.getDefaultNameFileName());
+			BrowseDialogUtils.initializeFrom(dialog, new Path(saveAsParent).append(packageContents.getDefaultNameFileName()));
 			dialog.setOverwrite(true); // prompt for overwrite
 			String path = dialog.open();
 			if (path != null) {
@@ -758,7 +767,7 @@
 			for (String familyName : familyNames) {
 				List<Version> versions = installerProvider.getVersions(familyName);
 				for (Version version : versions) {
-					Pair<String, Version> pair = new Pair(familyName, version);
+					Pair<String, Version> pair = new Pair<String, Version>(familyName, version);
 					if (!deviceOSPairs.contains(pair))
 						deviceOSPairs.add(pair);
 				}
--- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/wizard/ExportPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/wizard/ExportPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -21,6 +21,7 @@
 import com.nokia.carbide.remoteconnections.Messages;
 import com.nokia.carbide.remoteconnections.RemoteConnectionsActivator;
 import com.nokia.carbide.remoteconnections.interfaces.IConnection;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
@@ -72,7 +73,7 @@
 			tableColumn.pack();
 		}
 		viewer.setAllChecked(true);
-		connections = new ArrayList(RemoteConnectionsActivator.getConnectionsManager().getConnections());
+		connections = new ArrayList<IConnection>(RemoteConnectionsActivator.getConnectionsManager().getConnections());
 
 		createBrowseGroup(composite, Messages.getString("ExportPage.BrowseGroupLabel")); //$NON-NLS-1$
         browseButton.addSelectionListener(new SelectionAdapter() {
@@ -82,8 +83,7 @@
 				dialog.setText(Messages.getString("ExportPage.FileDialogTitle")); //$NON-NLS-1$
 				if (saveAsParent == null)
 					saveAsParent = System.getProperty("user.home"); //$NON-NLS-1$
-				dialog.setFilterPath(saveAsParent);
-				dialog.setFileName("exportedConnections.xml"); //$NON-NLS-1$
+				BrowseDialogUtils.initializeFrom(dialog, new Path(saveAsParent).append("exportedConnections.xml")); //$NON-NLS-1$
 				dialog.setOverwrite(true); // prompt for overwrite
 				String path = dialog.open();
 				if (path != null) {
--- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/wizard/ImportPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/wizard/ImportPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -22,6 +22,7 @@
 import com.nokia.carbide.remoteconnections.Messages;
 import com.nokia.carbide.remoteconnections.RemoteConnectionsActivator;
 import com.nokia.carbide.remoteconnections.internal.registry.Reader;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
@@ -68,6 +69,7 @@
 				fileDialog.setText(Messages.getString("ImportPage.FileDialogTitle")); //$NON-NLS-1$
 				fileDialog.setFilterExtensions(FILTER_EXTS);
 				fileDialog.setFilterNames(FILTER_EXT_NAMES);
+				BrowseDialogUtils.initializeFrom(fileDialog, pathText);
 				String pathstr = fileDialog.open();
 				if (pathstr != null) {
 					pathText.setText(pathstr);
--- a/core/com.nokia.carbide.bugreport/META-INF/MANIFEST.MF	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.bugreport/META-INF/MANIFEST.MF	Mon Dec 14 10:26:24 2009 -0600
@@ -11,7 +11,8 @@
  org.eclipse.ui.console,
  org.eclipse.jface.text,
  org.eclipse.core.net,
- com.nokia.cpp.utils.core
+ com.nokia.cpp.utils.core,
+ com.nokia.cpp.utils.ui
 Bundle-ActivationPolicy: lazy
 Export-Package: com.nokia.carbide.internal.bugreport.export
 Bundle-ClassPath: lib/commons-httpclient-3.1.jar,
--- a/core/com.nokia.carbide.bugreport/src/com/nokia/carbide/internal/bugreport/ui/wizards/BugDescriptionPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.bugreport/src/com/nokia/carbide/internal/bugreport/ui/wizards/BugDescriptionPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -40,6 +40,7 @@
 import com.nokia.carbide.internal.bugreport.model.*;
 import com.nokia.carbide.internal.bugreport.resources.HelpContextIDs;
 import com.nokia.carbide.internal.bugreport.resources.Messages;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 
 /**
@@ -196,6 +197,7 @@
 		if (event.widget == browseButton) {
 			FileDialog dialog = new FileDialog(this.getShell(), SWT.OPEN);
 			dialog.setText(Messages.getString("BugDescriptionPage.SelectAttachmentFile")); //$NON-NLS-1$
+			BrowseDialogUtils.initializeFrom(dialog, attachmentText);
 			String result = dialog.open();
 			attachmentText.setText(result);
 		} else if (event.widget == uiServiceLink) {
--- a/core/com.nokia.carbide.cpp.codescanner/META-INF/MANIFEST.MF	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.cpp.codescanner/META-INF/MANIFEST.MF	Mon Dec 14 10:26:24 2009 -0600
@@ -19,7 +19,8 @@
  com.nokia.carbide.cpp.sdk.core,
  com.nokia.carbide.cpp.epoc.engine,
  com.nokia.cpp.utils.core,
- com.nokia.carbide.cpp.featureTracker
+ com.nokia.carbide.cpp.featureTracker,
+ com.nokia.cpp.utils.ui
 Bundle-ActivationPolicy: lazy
 Export-Package: com.nokia.carbide.cpp.internal.codescanner;x-friends:="com.nokia.carbide.cpp.codescanner.tests",
  com.nokia.carbide.cpp.internal.codescanner.config;x-friends:="com.nokia.carbide.cpp.codescanner.tests",
--- a/core/com.nokia.carbide.cpp.codescanner/src/com/nokia/carbide/cpp/internal/codescanner/ui/CSGeneralTabPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.cpp.codescanner/src/com/nokia/carbide/cpp/internal/codescanner/ui/CSGeneralTabPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -37,6 +37,7 @@
 
 import com.nokia.carbide.cpp.internal.codescanner.CSPlugin;
 import com.nokia.carbide.cpp.internal.codescanner.Messages;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 /**
  * A class to create and control the CodeScanner General Options tab page.
@@ -421,7 +422,7 @@
         DirectoryDialog dialog = new DirectoryDialog(csDirEditText.getShell(), SWT.OPEN);
         dialog.setText(Messages.getString("CSGeneralTabPage.SelectDirTitle"));
         dialog.setMessage(Messages.getString("CSGeneralTabPage.SelectCSDirMessage"));
-        dialog.setFilterPath(csDirEditText.getText());
+        BrowseDialogUtils.initializeFrom(dialog, csDirEditText);
         return dialog.open();
     }
 
@@ -433,7 +434,7 @@
         DirectoryDialog dialog = new DirectoryDialog(resultsDirEditText.getShell(), SWT.OPEN);
         dialog.setText(Messages.getString("CSGeneralTabPage.SelectDirTitle"));
         dialog.setMessage(Messages.getString("CSGeneralTabPage.SelectResultsDirMessage"));
-        dialog.setFilterPath(resultsDirEditText.getText());
+        BrowseDialogUtils.initializeFrom(dialog, resultsDirEditText);
         return dialog.open();
     }
 
--- a/core/com.nokia.carbide.cpp.codescanner/src/com/nokia/carbide/cpp/internal/codescanner/ui/CSPreferencePage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.cpp.codescanner/src/com/nokia/carbide/cpp/internal/codescanner/ui/CSPreferencePage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -47,6 +47,7 @@
 
 import com.nokia.carbide.cpp.internal.codescanner.CSPlugin;
 import com.nokia.carbide.cpp.internal.codescanner.Messages;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 /**
  * A class to create and control the CodeScanner preference page.
@@ -326,7 +327,7 @@
         }
         String[] extensions = new String[] {"*.xml"};
         dialog.setFilterExtensions(extensions);
-		dialog.setFilterPath(dialogFilterPath);
+        BrowseDialogUtils.initializeFrom(dialog, dialogFilterPath != null ? dialogFilterPath + File.separator : null);
 		String configFilePath = dialog.open();
 		dialogFilterPath = dialog.getFilterPath();
         return configFilePath;
--- a/core/com.nokia.carbide.cpp.codescanner/src/com/nokia/carbide/cpp/internal/codescanner/ui/CSPropertyPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.cpp.codescanner/src/com/nokia/carbide/cpp/internal/codescanner/ui/CSPropertyPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -47,6 +47,7 @@
 import com.nokia.carbide.cpp.internal.codescanner.CSPlugin;
 import com.nokia.carbide.cpp.internal.codescanner.Messages;
 import com.nokia.carbide.cpp.internal.codescanner.config.CSProjectSettings;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 
 /**
@@ -406,7 +407,7 @@
         }
         String[] extensions = new String[] {"*.xml"};
         dialog.setFilterExtensions(extensions);
-		dialog.setFilterPath(dialogFilterPath);
+        BrowseDialogUtils.initializeFrom(dialog, dialogFilterPath != null ? dialogFilterPath + File.separator : null);
 		String configFilePath = dialog.open();
 		dialogFilterPath = dialog.getFilterPath();
         return configFilePath;
--- a/core/com.nokia.carbide.cpp.leavescan/META-INF/MANIFEST.MF	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.cpp.leavescan/META-INF/MANIFEST.MF	Mon Dec 14 10:26:24 2009 -0600
@@ -12,5 +12,6 @@
  org.eclipse.cdt.core,
  com.nokia.carbide.cdt.builder,
  com.nokia.carbide.cpp.sdk.core,
- com.nokia.cpp.utils.core
+ com.nokia.cpp.utils.core,
+ com.nokia.cpp.utils.ui
 Bundle-ActivationPolicy: lazy
--- a/core/com.nokia.carbide.cpp.leavescan/src/com/nokia/carbide/cpp/internal/leavescan/ui/LeavescanPreferences.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.cpp.leavescan/src/com/nokia/carbide/cpp/internal/leavescan/ui/LeavescanPreferences.java	Mon Dec 14 10:26:24 2009 -0600
@@ -33,6 +33,7 @@
 import org.eclipse.ui.PlatformUI;
 
 import com.nokia.carbide.cpp.internal.leavescan.LeavescanPlugin;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 public class LeavescanPreferences extends PreferencePage implements
 		IWorkbenchPreferencePage,Listener {
@@ -153,7 +154,7 @@
     private String showBrowseDialog() {
         DirectoryDialog dialog = new DirectoryDialog(leaveScanDirEditText.getShell(), SWT.OPEN);
         dialog.setText("Choose a folder...");
-        dialog.setFilterPath(leaveScanDirEditText.getText());
+        BrowseDialogUtils.initializeFrom(dialog, leaveScanDirEditText);
         return dialog.open();
     }
 
--- a/core/com.nokia.carbide.cpp.sdk.core/META-INF/MANIFEST.MF	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.cpp.sdk.core/META-INF/MANIFEST.MF	Mon Dec 14 10:26:24 2009 -0600
@@ -16,7 +16,7 @@
  org.eclipse.update.core,
  com.nokia.carbide.templatewizard,
  org.eclipse.core.filesystem,
- com.nokia.cpp.utils.ui;bundle-version="1.0.0"
+ com.nokia.cpp.utils.ui
 Bundle-ActivationPolicy: lazy
 Export-Package: com.nokia.carbide.cpp.internal.api.sdk,
  com.nokia.carbide.cpp.internal.sdk.core.model;x-friends:="com.nokia.carbide.cpp.sdk.core.test",
--- a/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/sdk/ui/shared/AddSDKDialog.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/sdk/ui/shared/AddSDKDialog.java	Mon Dec 14 10:26:24 2009 -0600
@@ -48,6 +48,7 @@
 import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
 import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
 import com.nokia.carbide.cpp.sdk.core.SymbianSDKFactory;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 /**
  * Dialog that allows the user to add a new Symbian OS SDK or custkit
@@ -360,11 +361,7 @@
 	private void browseEPOCROOT(){
         DirectoryDialog browseDir = new DirectoryDialog(getShell(), SWT.OPEN);
         browseDir.setMessage(Messages.getString("AddSDKDialog.Choose_location_for_EPOCROOT")); //$NON-NLS-1$
-        File symbianFolder = new File("C:/Symbian/"); //$NON-NLS-1$
-        if (symbianFolder.exists()){
-        	browseDir.setFilterPath(symbianFolder.toString());
-        }
-        
+        BrowseDialogUtils.initializeFrom(browseDir, "C:/Symbian/"); //$NON-NLS-1$
         String dirText = browseDir.open();
         if (dirText != null){
         	epocRootText.setText(dirText);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.cpp.utils.ui/src/com/nokia/cpp/internal/api/utils/ui/BrowseDialogUtils.java	Mon Dec 14 10:26:24 2009 -0600
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+package com.nokia.cpp.internal.api.utils.ui;
+
+import java.io.File;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Utilities to make it easier to use file and directory dialogs which are associated
+ * with text entry fields.
+ * <p>
+ * First, promote UI where Browse... starts from the current textual entry rather than
+ * some random place.
+ * <p>
+ * Second, overcome terrible SWT behavior:  even if you do set the filter path, then if it 
+ * is not 100% correct, it will again revert to the home directory.  So, find the nearest
+ * directory that <i>does</i> exist.
+ */
+public class BrowseDialogUtils {
+	/**
+	 * When issuing a "Browse..." command next to a text entry field, initialize
+	 * the dialog with the nearest existing file or directory in that text field.
+	 * @param dialog
+	 * @param textEntry
+	 * @pathm defaultPath the path to use when the text entry is empty 
+	 */
+	public static void initializeFrom(FileDialog dialog, Text textEntry, IPath defaultPath) {
+		if (textEntry != null) {
+			String existing = textEntry.getText().trim();
+			if (existing.length() > 0) {
+				initializeFrom(dialog, existing);
+				return;
+			}
+		}
+		if (defaultPath != null) {
+			initializeFrom(dialog, defaultPath);
+		}
+	}
+
+	/**
+	 * When issuing a "Browse..." command next to a text entry field, initialize
+	 * the dialog with the nearest existing file or directory in that text field.
+	 * @param dialog
+	 * @param textEntry
+	 */
+	public static void initializeFrom(FileDialog dialog, Text textEntry) {
+		if (textEntry == null)
+			return;
+		String existing = textEntry.getText().trim();
+		initializeFrom(dialog, existing);
+	}
+
+	/**
+	 * When issuing a "Browse..." command with an expected file, initialize
+	 * the dialog with the nearest existing file or directory.
+	 * @param dialog
+	 * @param path
+	 */
+	public static void initializeFrom(FileDialog dialog, IPath path) {
+		if (path != null) {
+			initializeFrom(dialog, path.toOSString());
+		}
+	}
+	
+	/**
+	 * When issuing a "Browse..." command with an expected file, initialize
+	 * the dialog with the nearest existing file or directory.
+	 * @param dialog
+	 * @param path
+	 */
+	public static void initializeFrom(FileDialog dialog, String path) {
+		if (path != null && path.length() > 0) {
+			boolean isDirectory = path.endsWith("/") || path.endsWith("\\");
+			File file = new File(path);
+			boolean exists = file.exists();
+			if (exists) {
+				isDirectory = file.isDirectory();
+			}
+			if (!isDirectory) {
+				dialog.setFileName(file.getName());
+			}
+			if (exists) {
+				if (file.isAbsolute()) {
+					dialog.setFilterPath(isDirectory ? file.getAbsolutePath() : file.getParent());
+				}
+			} else {
+				if (!file.isAbsolute())
+					return;
+				File dir = file.getParentFile();
+				while (dir != null && !dir.exists()) {
+					dir = dir.getParentFile();
+				}
+				if (dir != null) {
+					dialog.setFilterPath(dir.getAbsolutePath());
+				}
+			}
+		}
+	}
+	
+	/**
+	 * When issuing a "Browse..." command next to a text entry field, initialize
+	 * the dialog with the nearest existing directory in that text field.
+	 * @param dialog
+	 * @param textEntry
+	 * @param defaultPath the default path if the text entry is empty
+	 */
+	public static void initializeFrom(DirectoryDialog dialog, Text textEntry, IPath defaultPath) {
+		if (textEntry != null) {
+			String existing = textEntry.getText().trim();
+			if (existing.length() > 0) {
+				initializeFrom(dialog, existing);
+				return;
+			}
+		}
+		if (defaultPath != null) {
+			initializeFrom(dialog, defaultPath);
+		}
+	}
+
+	/**
+	 * When issuing a "Browse..." command next to a text entry field, initialize
+	 * the dialog with the nearest existing directory in that text field.
+	 * @param dialog
+	 * @param textEntry
+	 */
+	public static void initializeFrom(DirectoryDialog dialog, Text textEntry) {
+		if (textEntry == null)
+			return;
+		String existing = textEntry.getText().trim();
+		initializeFrom(dialog, existing);
+	}
+
+	/**
+	 * When issuing a "Browse..." command with an expected directory, initialize
+	 * the dialog with the nearest existing path.
+	 * @param dialog
+	 * @param path
+	 */
+	public static void initializeFrom(DirectoryDialog dialog, IPath path) {
+		if (path != null) {
+			initializeFrom(dialog, path.toOSString());
+		}
+	}
+	
+	/**
+	 * When issuing a "Browse..." command with an expected directory, initialize
+	 * the dialog with the nearest existing path.
+	 * @param dialog
+	 * @param path
+	 */
+	public static void initializeFrom(DirectoryDialog dialog, String path) {
+		if (path != null && path.length() > 0) {
+			File file = new File(path);
+			if (!file.isAbsolute())
+				return;
+			while (file != null && !file.exists()) {
+				file = file.getParentFile();
+			}
+			if (file != null) {
+				dialog.setFilterPath(file.getAbsolutePath());
+			}
+		}
+	}
+}
--- a/core/com.nokia.cpp.utils.ui/src/com/nokia/cpp/internal/api/utils/ui/DirectorySelectorWithHistory.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/core/com.nokia.cpp.utils.ui/src/com/nokia/cpp/internal/api/utils/ui/DirectorySelectorWithHistory.java	Mon Dec 14 10:26:24 2009 -0600
@@ -96,11 +96,7 @@
 
 			public void widgetSelected(SelectionEvent e) {
 				DirectoryDialog dlg = new DirectoryDialog(parent.getShell());
-				String curPath = directoryCombo.getText(); 
-				if (curPath.length() > 0)
-					dlg.setFilterPath(curPath);
-				else
-					dlg.setFilterPath("."); //$NON-NLS-1$
+				BrowseDialogUtils.initializeFrom(dlg, directoryCombo.getText());
 				String dir = dlg.open();
 				if (dir != null) {
 					directoryCombo.setText(dir);
--- a/debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/service/ConnectedServiceFactory.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/service/ConnectedServiceFactory.java	Mon Dec 14 10:26:24 2009 -0600
@@ -36,13 +36,13 @@
 		if (service instanceof TracingService &&
 				isCompatibleConnection(getCompatibleTracingConnectionTypeIds(), connection)) {
 			if (HostOS.IS_UNIX)
-				return null;		// TODO: not ported
+				return new RemoteConnectedService(service);		// TODO: not ported
 			return new TracingConnectedService(service, (AbstractSynchronizedConnection) connection);
 		}
 		else if (service instanceof TRKService &&
 				isCompatibleConnection(getCompatibleTRKConnectionTypeIds(), connection)) {
 			if (HostOS.IS_UNIX)
-				return null;		// TODO: not ported
+				return new RemoteConnectedService(service);	// TODO: not ported
 			return new TRKConnectedService(service, (AbstractSynchronizedConnection) connection);
 		}
 		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/service/RemoteConnectedService.java	Mon Dec 14 10:26:24 2009 -0600
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+package com.nokia.carbide.trk.support.service;
+
+import org.osgi.framework.Version;
+
+import com.nokia.carbide.remoteconnections.Messages;
+import com.nokia.carbide.remoteconnections.interfaces.IConnectedService;
+import com.nokia.carbide.remoteconnections.interfaces.IService;
+import com.nokia.cpp.internal.api.utils.core.IListenerFiring;
+import com.nokia.cpp.internal.api.utils.core.ListenerList;
+
+/**
+ * This is a stub for the TRK and Trace connected services used when the host
+ * does not support Chad's TCF.  This reconciles the fact that a TRK connection publishes
+ * these services, but we cannot actually instantiate them.
+ * <p>
+ * In the future this should find a way to talk to the device over Eclipse TCF or something.
+ */
+public class RemoteConnectedService implements IConnectedService {
+
+	private boolean enabled = true;
+	private final IService service;
+	private IStatus unknownStatus = new IStatus() {
+
+		public IConnectedService getConnectedService() {
+			return RemoteConnectedService.this;
+		}
+
+		public EStatus getEStatus() {
+			return EStatus.UNKNOWN;
+		}
+
+		public String getLongDescription() {
+			return "The device is connected remotely; testing not yet implemented.";
+		}
+
+		public String getShortDescription() {
+			return "Unknown";
+		}
+		
+	};
+	
+	private IStatus noStatus = new IStatus() {
+
+		public IConnectedService getConnectedService() {
+			return RemoteConnectedService.this;
+		}
+
+		public EStatus getEStatus() {
+			return EStatus.UNKNOWN;
+		}
+
+		public String getLongDescription() {
+			return Messages.getString("AbstractConnectedService.UserDisabledMessage");
+		}
+
+		public String getShortDescription() {
+			return Messages.getString("AbstractConnectedService.NoTestingLabel");
+		}
+		
+	};
+	private ListenerList<IStatusChangedListener> listeners;
+	private IStatus currentStatus;
+	/**
+	 * 
+	 */
+	public RemoteConnectedService(IService service) {
+		this.service = service;
+		listeners = new ListenerList<IStatusChangedListener>();
+		currentStatus = noStatus;
+	}
+	public void addStatusChangedListener(IStatusChangedListener listener) {
+		listeners.add(listener);
+	}
+
+	public void dispose() {
+	}
+
+	public IService getService() {
+		return service;
+	}
+
+	public IStatus getStatus() {
+		return currentStatus;
+	}
+
+	public void removeStatusChangedListener(IStatusChangedListener listener) {
+		listeners.remove(listener);
+	}
+
+	public void testStatus() {
+	}
+
+	public void setDeviceOS(String familyName, Version version) {
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled  = enabled;
+		
+		currentStatus = enabled ? unknownStatus : noStatus;
+				
+		fireListeners();
+	}
+	/**
+	 * 
+	 */
+	private void fireListeners() {
+		listeners.fireListeners(new IListenerFiring<IStatusChangedListener>() {
+			
+			public void fire(IStatusChangedListener listener) {
+				listener.statusChanged(getStatus());
+			}
+		});
+	}
+}
--- a/debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/service/TRKService.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/service/TRKService.java	Mon Dec 14 10:26:24 2009 -0600
@@ -22,6 +22,7 @@
 import com.nokia.carbide.trk.support.Messages;
 import com.nokia.carbide.trk.support.connection.*;
 import com.nokia.cpp.internal.api.utils.core.Check;
+import com.nokia.cpp.internal.api.utils.core.HostOS;
 
 import java.util.*;
 
@@ -56,6 +57,9 @@
 	}
 
 	public IRemoteAgentInstallerProvider getInstallerProvider() {
+		if (HostOS.IS_UNIX)
+			return null;		// TODO: implement
+
 		return new TRKInstallerProvider(this);
 	}
 
--- a/debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/service/TracingService.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.carbide.trk.support/src/com/nokia/carbide/trk/support/service/TracingService.java	Mon Dec 14 10:26:24 2009 -0600
@@ -23,6 +23,7 @@
 import com.nokia.carbide.trk.support.connection.TCPIPConnectionType;
 import com.nokia.carbide.trk.support.connection.USBConnectionType;
 import com.nokia.cpp.internal.api.utils.core.Check;
+import com.nokia.cpp.internal.api.utils.core.HostOS;
 
 
 import java.util.Arrays;
@@ -58,6 +59,8 @@
 	}
 
 	public IRemoteAgentInstallerProvider getInstallerProvider() {
+		if (HostOS.IS_UNIX)
+			return null;		// TODO: implement
 		return new TracingInstallerProvider(this);
 	}
 
--- a/debuggercdi/com.nokia.cdt.debug.launch/META-INF/MANIFEST.MF	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/META-INF/MANIFEST.MF	Mon Dec 14 10:26:24 2009 -0600
@@ -27,7 +27,8 @@
  com.nokia.carbide.cpp.ui,
  com.nokia.cpp.utils.core,
  com.freescale.cdt.debug.cw.core.ui,
- com.nokia.carbide.remoteConnections
+ com.nokia.carbide.remoteConnections,
+ com.nokia.cpp.utils.ui
 Bundle-ActivationPolicy: lazy
 Export-Package: com.nokia.cdt.internal.debug.launch,
  com.nokia.cdt.internal.debug.launch.ui,
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/AddEditFileToTransferDialog.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/AddEditFileToTransferDialog.java	Mon Dec 14 10:26:24 2009 -0600
@@ -38,7 +38,7 @@
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.PlatformUI;
 
-import com.nokia.cpp.internal.api.utils.core.HostOS;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 public class AddEditFileToTransferDialog extends StatusDialog {
 
@@ -107,7 +107,9 @@
 				dialog.setText(Messages.getString("AddEditFileToTransferDialog.4")); //$NON-NLS-1$
 				dialog.setFilterExtensions(new String[] {"*"}); //$NON-NLS-1$
 				dialog.setFilterNames(new String[] {Messages.getString("AddEditFileToTransferDialog.11")}); //$NON-NLS-1$
-
+				
+				BrowseDialogUtils.initializeFrom(dialog, hostPath);
+				
 				String result = dialog.open();
 				if (result != null) {
 					IPath path = new Path(result);
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/EmulationMainTab.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/EmulationMainTab.java	Mon Dec 14 10:26:24 2009 -0600
@@ -18,6 +18,7 @@
 
 import com.freescale.cdt.debug.cw.core.settings.DebuggerCommonData;
 import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
@@ -128,7 +129,9 @@
 		hostBrowse.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent evt) {
 				FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
-
+				
+				BrowseDialogUtils.initializeFrom(dialog, hostText);
+				
 				dialog.setText(Messages.getString("EmulationMainTab.5")); //$NON-NLS-1$
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/ExecutablesTab.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/ExecutablesTab.java	Mon Dec 14 10:26:24 2009 -0600
@@ -63,6 +63,7 @@
 import com.nokia.cdt.debug.cw.symbian.SettingsData;
 import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
 import com.nokia.cdt.internal.debug.launch.NokiaAbstractLaunchDelegate;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import cwdbg.PreferenceConstants;
 
@@ -162,6 +163,9 @@
 			public void widgetSelected(SelectionEvent e) {
 				FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
 				dialog.setText(Messages.getString("ExecutablesTab.7")); //$NON-NLS-1$
+				if (executablesToTarget != null && executablesToTarget.size() > 0) {
+					BrowseDialogUtils.initializeFrom(dialog, executablesToTarget.get(executablesToTarget.size() - 1).getExePath());
+				}
 				final String res = dialog.open();
 				if (res != null) {
 					Job importJob = new Job(Messages.getString("ExecutablesTab.8")) { //$NON-NLS-1$
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/FileTransferTab.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/FileTransferTab.java	Mon Dec 14 10:26:24 2009 -0600
@@ -97,7 +97,7 @@
 							tp = tp.append(hp.lastSegment());
 						}
 						String enabled = tokenizer.nextToken();
-						files.add(new FileToTransfer(hp.toOSString(), tp.toOSString(), enabled.compareTo("1") == 0)); //$NON-NLS-1$
+						files.add(new FileToTransfer(hp.toOSString(), HostOS.convertPathToWindows(tp), enabled.compareTo("1") == 0)); //$NON-NLS-1$
 					}
 				}
 			} else {
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/InstallationTab.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/InstallationTab.java	Mon Dec 14 10:26:24 2009 -0600
@@ -55,6 +55,7 @@
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
 import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
 import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import cwdbg.PreferenceConstants;
 
@@ -143,9 +144,8 @@
 				dialog.setText(Messages.getString("InstallationTab.4")); //$NON-NLS-1$
 				dialog.setFilterExtensions(new String[] {"*.sis*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 				dialog.setFilterNames(new String[] {Messages.getString("InstallationTab.27"), Messages.getString("InstallationTab.28")}); //$NON-NLS-1$ //$NON-NLS-2$
-
-				dialog.setFilterPath(new File(hostPath.getText()).getParent());
-				dialog.setFileName(new File(hostPath.getText()).getName());
+				
+				BrowseDialogUtils.initializeFrom(dialog, hostPath);
 				
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/RomImageTab.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/RomImageTab.java	Mon Dec 14 10:26:24 2009 -0600
@@ -40,6 +40,7 @@
 import org.eclipse.ui.PlatformUI;
 import com.freescale.swt.widgets.CheckboxGroup;
 import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import cwdbg.PreferenceConstants;
 
@@ -138,7 +139,9 @@
 				dialog.setText(Messages.getString("RomImageTab.14")); //$NON-NLS-1$
 				dialog.setFilterExtensions(new String[] {"*.img*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 				dialog.setFilterNames(new String[] {Messages.getString("RomImageTab.15"), Messages.getString("RomImageTab.16")}); //$NON-NLS-1$ //$NON-NLS-2$
-
+				
+				BrowseDialogUtils.initializeFrom(dialog, osImagePath);
+				
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
 					osImagePath.setText(result);
@@ -232,7 +235,9 @@
 				dialog.setText(Messages.getString("RomLogFileTab.6")); //$NON-NLS-1$
 				dialog.setFilterExtensions(new String[] {"*.log*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 				dialog.setFilterNames(new String[] {Messages.getString("RomLogFileTab.7"), Messages.getString("RomLogFileTab.8")}); //$NON-NLS-1$ //$NON-NLS-2$
-
+				
+				BrowseDialogUtils.initializeFrom(dialog, romLogFilePath);
+				
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
 					romLogFilePath.setText(result);
@@ -263,6 +268,7 @@
 
 			public void widgetSelected(SelectionEvent evt) {
 				DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.NONE);
+				BrowseDialogUtils.initializeFrom(dialog, epoc32DirPath);
 
 				dialog.setText(Messages.getString("RomLogFileTab.11")); //$NON-NLS-1$
 				String result = dialog.open();
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/RomLogFileTab.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/RomLogFileTab.java	Mon Dec 14 10:26:24 2009 -0600
@@ -40,6 +40,7 @@
 import org.eclipse.ui.PlatformUI;
 import com.freescale.swt.widgets.CheckboxGroup;
 import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 
 import cwdbg.PreferenceConstants;
@@ -138,6 +139,8 @@
 				dialog.setFilterExtensions(new String[] {"*.log*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 				dialog.setFilterNames(new String[] {Messages.getString("RomLogFileTab.7"), Messages.getString("RomLogFileTab.8")}); //$NON-NLS-1$ //$NON-NLS-2$
 
+				BrowseDialogUtils.initializeFrom(dialog, romLogFilePath);
+
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
 					romLogFilePath.setText(result);
@@ -171,6 +174,7 @@
 
 			public void widgetSelected(SelectionEvent evt) {
 				DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.NONE);
+				BrowseDialogUtils.initializeFrom(dialog, epoc32DirPath);
 
 				dialog.setText(Messages.getString("RomLogFileTab.11")); //$NON-NLS-1$
 				String result = dialog.open();
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/MainExecutableSelectionWizardPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/MainExecutableSelectionWizardPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -17,6 +17,7 @@
 package com.nokia.cdt.internal.debug.launch.wizard;
 
 import com.nokia.cpp.internal.api.utils.core.*;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
@@ -237,7 +238,7 @@
 					if (item.equals(BROWSE_ITEM)) {
 						FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
 						fileDialog.setText(Messages.getString("MainExecutableSelectionWizardPage.SelectExectuableTitle")); //$NON-NLS-1$
-						fileDialog.setFilterPath(emulatorPath.removeLastSegments(1).toOSString());
+						BrowseDialogUtils.initializeFrom(fileDialog, emulatorPath);
 						fileDialog.setFilterExtensions(FILTER_EXTS);
 						fileDialog.setFilterNames(FILTER_EXT_NAMES);
 						String pathstr = fileDialog.open();
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/SophiaWizardPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/SophiaWizardPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -38,6 +38,7 @@
 
 import com.nokia.cdt.debug.cw.symbian.SettingsData;
 import com.nokia.cpp.internal.api.utils.core.Check;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import cwdbg.PreferenceConstants;
 
@@ -113,6 +114,8 @@
 				dialog.setFilterExtensions(new String[] {"*.dll*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 				dialog.setFilterNames(new String[] {Messages.getString("SophiaWizardPage.5"), Messages.getString("SophiaWizardPage.6")}); //$NON-NLS-1$ //$NON-NLS-2$
 
+				BrowseDialogUtils.initializeFrom(dialog, sophiaSTIDLLPath);
+
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
 					sophiaSTIDLLPath.setText(result);					
@@ -145,6 +148,8 @@
 				dialog.setFilterExtensions(new String[] {"*.cfg*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 				dialog.setFilterNames(new String[] {Messages.getString("SophiaWizardPage.10"), Messages.getString("SophiaWizardPage.6")}); //$NON-NLS-1$ //$NON-NLS-2$
 
+				BrowseDialogUtils.initializeFrom(dialog, targetInitFilePath);
+
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
 					targetInitFilePath.setText(result);					
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/StopModeRomImageWizardPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/StopModeRomImageWizardPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -17,6 +17,7 @@
 package com.nokia.cdt.internal.debug.launch.wizard;
 
 import com.nokia.cpp.internal.api.utils.core.Check;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import cwdbg.PreferenceConstants;
 
@@ -167,6 +168,8 @@
 				dialog.setFilterExtensions(new String[] {"*.img*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 				dialog.setFilterNames(new String[] {Messages.getString("StopModeRomImageWizardPage.14"), Messages.getString("StopModeRomImageWizardPage.10")}); //$NON-NLS-1$ //$NON-NLS-2$
 
+				BrowseDialogUtils.initializeFrom(dialog, romImagePath);
+
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
 					romImagePath.setText(result);					
@@ -199,6 +202,8 @@
 				dialog.setFilterExtensions(new String[] {"*.log*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 				dialog.setFilterNames(new String[] {Messages.getString("StopModeRomImageWizardPage.9"), Messages.getString("StopModeRomImageWizardPage.10")}); //$NON-NLS-1$ //$NON-NLS-2$
 
+				BrowseDialogUtils.initializeFrom(dialog, romLogFilePath);
+
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
 					romLogFilePath.setText(result);					
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/TRKSISSelectionWizardPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/TRKSISSelectionWizardPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -19,6 +19,7 @@
 import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
 import com.nokia.carbide.cdt.builder.project.*;
 import com.nokia.cpp.internal.api.utils.core.Check;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import cwdbg.PreferenceConstants;
 
@@ -158,6 +159,8 @@
 					dialog.setFilterExtensions(new String[] {"*.sis*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 					dialog.setFilterNames(new String[] {Messages.getString("TRKSISSelectionWizardPage.7"), Messages.getString("TRKSISSelectionWizardPage.8")}); //$NON-NLS-1$ //$NON-NLS-2$
 
+					BrowseDialogUtils.initializeFrom(dialog, sisEdit);
+
 					String result = dialog.open();
 					if (result != null && new File(result).exists()) {
 						sisEdit.setText(result);
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/Trace32WizardPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/Trace32WizardPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -38,6 +38,7 @@
 
 import com.nokia.cdt.debug.cw.symbian.SettingsData;
 import com.nokia.cpp.internal.api.utils.core.Check;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import cwdbg.PreferenceConstants;
 
@@ -107,6 +108,8 @@
 				dialog.setFilterExtensions(new String[] {"*.cmm*", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
 				dialog.setFilterNames(new String[] {Messages.getString("Trace32WizardPage.5"), Messages.getString("Trace32WizardPage.6")}); //$NON-NLS-1$ //$NON-NLS-2$
 
+				BrowseDialogUtils.initializeFrom(dialog, t32BootConfigFilePath);
+
 				String result = dialog.open();
 				if (result != null && new File(result).exists()) {
 					t32BootConfigFilePath.setText(result);					
--- a/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/editors/inf/ExportFileDialog.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/editors/inf/ExportFileDialog.java	Mon Dec 14 10:26:24 2009 -0600
@@ -19,6 +19,7 @@
 import com.nokia.carbide.cdt.builder.EpocEnginePathHelper;
 import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IExport;
 import com.nokia.carbide.cpp.internal.project.ui.editors.common.StatusInfo;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
 
 import org.eclipse.core.resources.IProject;
@@ -137,9 +138,9 @@
 				// set the initial directory
 				String currentFile = sourcePath.getText().trim();
 				if (currentFile.length() == 0) {
-					dialog.setFilterPath(project.getLocation().toOSString());
+					BrowseDialogUtils.initializeFrom(dialog, project.getLocation());
 				} else {
-					dialog.setFileName(currentFile);
+					BrowseDialogUtils.initializeFrom(dialog, currentFile);
 				}
 
 				String result = dialog.open();
--- a/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/editors/inf/MMPFileDialog.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/editors/inf/MMPFileDialog.java	Mon Dec 14 10:26:24 2009 -0600
@@ -20,6 +20,7 @@
 import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IMMPReference;
 import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IMakMakeReference;
 import com.nokia.carbide.cpp.internal.project.ui.editors.common.StatusInfo;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
 
 import org.eclipse.core.runtime.IPath;
@@ -146,12 +147,7 @@
 				dialog.setFilterNames(new String[] {Messages.MMPFileDialog_MMPFiles, Messages.MMPFileDialog_AllFiles});
 				
 				// set the initial directory
-				String currentFile = filePath.getText().trim();
-				if (currentFile.length() == 0) {
-					dialog.setFilterPath(editorContext.project.getLocation().toOSString());
-				} else {
-					dialog.setFileName(currentFile);
-				}
+				BrowseDialogUtils.initializeFrom(dialog, filePath, editorContext.project.getLocation());
 				
 				String result = dialog.open();
 				if (result != null) {
--- a/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/editors/inf/MakeFileDialog.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/editors/inf/MakeFileDialog.java	Mon Dec 14 10:26:24 2009 -0600
@@ -21,6 +21,7 @@
 import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IMakefileReference;
 import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IMakefileReference.EMakeEngine;
 import com.nokia.carbide.cpp.internal.project.ui.editors.common.StatusInfo;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
 
 import org.eclipse.core.runtime.IPath;
@@ -167,12 +168,7 @@
 				dialog.setFilterNames(new String[] {Messages.MakeFileDialog_MakeFiles, Messages.MakeFileDialog_AllFiles});
 
 				// set the initial directory
-				String currentFile = filePath.getText().trim();
-				if (currentFile.length() == 0) {
-					dialog.setFilterPath(editorContext.project.getLocation().toOSString());
-				} else {
-					dialog.setFileName(currentFile);
-				}
+				BrowseDialogUtils.initializeFrom(dialog, filePath, editorContext.project.getLocation());
 
 				String result = dialog.open();
 				if (result != null) {
--- a/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/importWizards/BldInfSelectionPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/importWizards/BldInfSelectionPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -42,6 +42,7 @@
 import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
 import com.nokia.carbide.cpp.internal.project.ui.ProjectUIHelpIds;
 import com.nokia.carbide.cpp.internal.project.ui.sharedui.BuilderSelectionComposite;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 public class BldInfSelectionPage extends WizardPage implements Listener {
 	
@@ -141,11 +142,7 @@
         fileDialog.setFileName("bld.inf"); //$NON-NLS-1$
         fileDialog.setText(Messages.BldInfSelectionPage_browseDialogTitle);
 
-        String currentSourceString = bldInfCombo.getText();
-        int lastSeparatorIndex = currentSourceString.lastIndexOf(File.separator);
-        if (lastSeparatorIndex != -1) {
-        	fileDialog.setFilterPath(currentSourceString.substring(0, lastSeparatorIndex));
-        }
+        BrowseDialogUtils.initializeFrom(fileDialog, bldInfCombo.getText());
 
         return fileDialog.open();
     }
--- a/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/importWizards/ProjectPropertiesPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/importWizards/ProjectPropertiesPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -46,6 +46,7 @@
 import com.nokia.carbide.cdt.builder.EpocEngineHelper;
 import com.nokia.carbide.cpp.internal.project.ui.ProjectUIHelpIds;
 import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 public class ProjectPropertiesPage extends WizardPage implements Listener {
 	
@@ -167,8 +168,7 @@
     private String showBrowseDialog() {
         DirectoryDialog dialog = new DirectoryDialog(rootDirectory.getShell(), SWT.OPEN);
         dialog.setText(Messages.ProjectPropertiesPage_browseDialogTitle);
-
-        dialog.setFilterPath(rootDirectory.getText());
+		BrowseDialogUtils.initializeFrom(dialog, rootDirectory);
 
         return dialog.open();
     }
--- a/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/mmpEditor/LinkerSectionPart.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/mmpEditor/LinkerSectionPart.java	Mon Dec 14 10:26:24 2009 -0600
@@ -59,6 +59,7 @@
 import com.nokia.carbide.cpp.epoc.engine.model.mmp.EMMPStatement;
 import com.nokia.sdt.utils.ProjectFileResourceProxyVisitor;
 import com.nokia.cpp.internal.api.utils.core.TextUtils;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 import com.nokia.cpp.internal.api.utils.ui.editor.FormEditorEditingContext;
 
 public class LinkerSectionPart extends SectionPart {
@@ -221,13 +222,7 @@
 		IPath curDefFile = editorContext.mmpView.getDefFile();
 		if (curDefFile != null) {
 			curDefFile = editorContext.pathHelper.convertMMPToFilesystem(EMMPPathContext.DEFFILE, curDefFile);
-			if (!curDefFile.hasTrailingSeparator()) {
-				dialog.setFileName(curDefFile.lastSegment());
-			}
-			while (curDefFile.segmentCount() > 0 && !curDefFile.toFile().exists()) {
-				curDefFile = curDefFile.removeLastSegments(1);
-			}
-			dialog.setFilterPath(curDefFile.toOSString());
+			BrowseDialogUtils.initializeFrom(dialog, curDefFile);
 		}
 		
 		dialog.setFilterNames(new String[] {Messages.LinkerSectionPart_defFileBrowseFilterName});
--- a/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/mmpEditor/dialogs/ChooseDirectoryComposite.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/project/com.nokia.carbide.cpp.project.ui/src/com/nokia/carbide/cpp/internal/project/ui/mmpEditor/dialogs/ChooseDirectoryComposite.java	Mon Dec 14 10:26:24 2009 -0600
@@ -20,6 +20,7 @@
 import com.nokia.carbide.cdt.builder.MMPViewPathHelper;
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
 import com.nokia.carbide.cpp.internal.project.ui.ProjectUIPlugin;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
@@ -157,6 +158,17 @@
 	private void doBrowse() {
 		DirectoryDialog dialog = new DirectoryDialog(getShell());
 		dialog.setMessage(Messages.getString("IncludeDirectoryDialog.browseForDirectoryPrompt")); //$NON-NLS-1$
+		
+		IPath currentPath = new Path(pathViewer.getCombo().getText());
+		if (!currentPath.isEmpty()) {
+			currentPath = pathHelper.convertMMPToFilesystem(pathContext, currentPath);
+		} else if (pathContext == EMMPPathContext.SYSTEMINCLUDE 
+				|| pathContext == EMMPPathContext.SYSTEMRESOURCE
+				|| pathContext == EMMPPathContext.TARGETPATH) {
+			currentPath = new Path(buildConfiguration.getSDK().getEPOCROOT());
+		}
+		BrowseDialogUtils.initializeFrom(dialog, currentPath);
+		
 		String fullPath = dialog.open();
 		if (fullPath != null) {
 			setViewerPath(new Path(fullPath));
--- a/qt/com.nokia.carbide.cpp.qt.ui/META-INF/MANIFEST.MF	Mon Dec 14 10:24:12 2009 -0600
+++ b/qt/com.nokia.carbide.cpp.qt.ui/META-INF/MANIFEST.MF	Mon Dec 14 10:26:24 2009 -0600
@@ -22,7 +22,8 @@
  com.nokia.carbide.cdt.builder,
  org.eclipse.cdt.core,
  org.eclipse.ui.ide,
- com.trolltech.qtcppproject;bundle-version="1.6.0";resolution:=optional
+ com.trolltech.qtcppproject;bundle-version="1.6.0";resolution:=optional,
+ com.nokia.cpp.utils.ui
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
 Import-Package: com.trolltech.qtcppproject,
--- a/qt/com.nokia.carbide.cpp.qt.ui/src/com/nokia/carbide/cpp/internal/qt/ui/wizard/QtProFileSelectionPage.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/qt/com.nokia.carbide.cpp.qt.ui/src/com/nokia/carbide/cpp/internal/qt/ui/wizard/QtProFileSelectionPage.java	Mon Dec 14 10:26:24 2009 -0600
@@ -46,6 +46,7 @@
 import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
 import com.nokia.carbide.cpp.internal.project.ui.sharedui.BuilderSelectionComposite;
 import com.nokia.carbide.cpp.internal.qt.ui.QtUIHelpIds;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 
 public class QtProFileSelectionPage extends WizardPage implements Listener {
@@ -143,11 +144,7 @@
         fileDialog.setFilterExtensions(new String[] {"*.pro", "*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
         fileDialog.setText(Messages.QtProFileSelectionPage_browseDialogTitle);
 
-        String currentSourceString = proFileCombo.getText();
-        int lastSeparatorIndex = currentSourceString.lastIndexOf(File.separator);
-        if (lastSeparatorIndex != -1) {
-        	fileDialog.setFilterPath(currentSourceString.substring(0, lastSeparatorIndex));
-        }
+        BrowseDialogUtils.initializeFrom(fileDialog, proFileCombo.getText());
 
         return fileDialog.open();
     }
--- a/uidesigner/com.nokia.sdt.component.symbian/src/com/nokia/sdt/component/symbian/actions/AddComponentLibraryAction.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/uidesigner/com.nokia.sdt.component.symbian/src/com/nokia/sdt/component/symbian/actions/AddComponentLibraryAction.java	Mon Dec 14 10:26:24 2009 -0600
@@ -19,6 +19,7 @@
  */
 package com.nokia.sdt.component.symbian.actions;
 
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 import com.nokia.sdt.component.ComponentSystemException;
 import com.nokia.sdt.component.symbian.ComponentSystemPlugin;
 
@@ -68,7 +69,7 @@
         try {
             DirectoryDialog dlg = new DirectoryDialog(window.getShell());
             dlg.setMessage("Add a component library plugin"); //$NON-NLS-1$
-            dlg.setFilterPath("c:/work/dynamicplugins/com.nokia.uidesigner.user0.componentlibrary"); //$NON-NLS-1$
+            BrowseDialogUtils.initializeFrom(dlg, "c:/work/dynamicplugins/com.nokia.uidesigner.user0.componentlibrary"); //$NON-NLS-1$
             dlg.open();
             String dir = dlg.open();
             if (dir == null) {
--- a/uidesigner/com.nokia.sdt.component.symbian/src/com/nokia/sdt/component/symbian/actions/EnableSourceGenDebugAction.java	Mon Dec 14 10:24:12 2009 -0600
+++ b/uidesigner/com.nokia.sdt.component.symbian/src/com/nokia/sdt/component/symbian/actions/EnableSourceGenDebugAction.java	Mon Dec 14 10:26:24 2009 -0600
@@ -21,6 +21,7 @@
 import com.nokia.sdt.component.symbian.ComponentSystemPlugin;
 import com.nokia.sdt.component.symbian.sourcegen.SourceGenAdapterFactory;
 import com.nokia.cpp.internal.api.utils.core.Check;
+import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
 
 import org.eclipse.core.runtime.*;
 import org.eclipse.jface.action.IAction;
@@ -168,7 +169,7 @@
 				@Override
 				public void widgetSelected(SelectionEvent arg0) {
 					DirectoryDialog dlg = new DirectoryDialog(getShell());
-					dlg.setFilterPath(text.getText());
+					BrowseDialogUtils.initializeFrom(dlg, text);
 					dlg.setText("Select Output Directory");
 					dlg.setMessage("Select output directory");
 					String newDir = dlg.open();