# HG changeset patch # User timkelly # Date 1265990210 21600 # Node ID 67437bfc7c6fbf8dfd8381381876e06aee3947d8 # Parent 967f619cd59fa9f83e21a21c5c0e0cba258a3bd1 Add ISymbianManagerLoadedHook - currently used to notify com.nokia.qt plugins that need to ensure that Qt SDKs have been scanned and added to the Qt preferences and that ICarbideBuildConfiguration listeners are added so the proper Qt-SDK can be set with build config changes. Scanned Qt SDKs are wrapped in a Job and added SDKs are reported to the Error log as Info. diff -r 967f619cd59f -r 67437bfc7c6f core/com.nokia.carbide.cpp.sdk.core/plugin.xml --- a/core/com.nokia.carbide.cpp.sdk.core/plugin.xml Thu Feb 11 11:47:58 2010 -0600 +++ b/core/com.nokia.carbide.cpp.sdk.core/plugin.xml Fri Feb 12 09:56:50 2010 -0600 @@ -30,5 +30,7 @@ + + diff -r 967f619cd59f -r 67437bfc7c6f core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/ISDKManagerLoadedHook.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/ISDKManagerLoadedHook.java Fri Feb 12 09:56:50 2010 -0600 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2010 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. +* +*/ +package com.nokia.carbide.cpp.internal.api.sdk; + +/** + * Convenience interface for extension-point clients to know when the Carbide Symbian SDK plug-in has loaded. + */ +public interface ISDKManagerLoadedHook { + + /** + * Feature to notify that SDKs are loade + */ + public void symbianSDKManagerLoaded(); + + +} diff -r 967f619cd59f -r 67437bfc7c6f core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/AbstractSDKManager.java --- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/AbstractSDKManager.java Thu Feb 11 11:47:58 2010 -0600 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/AbstractSDKManager.java Fri Feb 12 09:56:50 2010 -0600 @@ -36,6 +36,10 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; @@ -51,6 +55,7 @@ import com.nokia.carbide.cpp.internal.api.sdk.BuildPlat; import com.nokia.carbide.cpp.internal.api.sdk.ICarbideDevicesXMLChangeListener; import com.nokia.carbide.cpp.internal.api.sdk.ISDKManagerInternal; +import com.nokia.carbide.cpp.internal.api.sdk.ISDKManagerLoadedHook; import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils; import com.nokia.carbide.cpp.internal.api.sdk.SDKManagerInternalAPI; import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContextDataCache; @@ -91,6 +96,11 @@ protected static final String[] knownRVCTVersions = {"3.1", "3.0", "2.2", "2.1"}; protected Version sbsV2Version; + static boolean sdkHookExtenstionsNotified; + public static final String SDK_MANAGER_LOADED_HOOK = SDKCorePlugin.PLUGIN_ID + + ".sdkManagerLoadedHook"; //$NON-NLS-1$ + + /** * Minimum SBSv2 version supported with Carbide */ @@ -170,6 +180,13 @@ // tell others about it fireInstalledSdkChanged(SDKChangeEventType.eSDKScanned); scanCarbideSDKCache(); + + // Notify any plugins that want to know if the SDKManager has scanned plugins. + if (!sdkHookExtenstionsNotified) { + notifySDKManagerLoaded(); + sdkHookExtenstionsNotified = true; + } + } /** @@ -713,5 +730,41 @@ return MINIMUM_RAPTOR_VERSION; } + /** + * Find clients of the 'sdkManagerLoadedHook' extension point so their plug-ins can be loaded + */ + private void notifySDKManagerLoaded() { + + ISDKManagerLoadedHook sdkHook = null; + IExtensionRegistry er = Platform.getExtensionRegistry(); + IExtensionPoint ep = er.getExtensionPoint(SDK_MANAGER_LOADED_HOOK); + IExtension[] extensions = ep.getExtensions(); + + for (int i = 0; i < extensions.length; i++) { + IExtension extension = extensions[i]; + IConfigurationElement[] ces = extension.getConfigurationElements(); + if (ces != null && ces.length >= 1) { + IConfigurationElement providerElement = ces[0]; + String name = providerElement.getAttribute("name"); //$NON-NLS-1$ + if (name != null) { + if (providerElement.getAttribute("class") != null) { //$NON-NLS-1$ + + try { + sdkHook = (ISDKManagerLoadedHook) providerElement + .createExecutableExtension("class"); //$NON-NLS-1$ + sdkHook.symbianSDKManagerLoaded(); + } catch (CoreException e) { + // ignore + // e.printStackTrace(); + } + } + } + + } + } + return; + + } + } diff -r 967f619cd59f -r 67437bfc7c6f qt/com.nokia.carbide.cpp.qt.core/plugin.xml --- a/qt/com.nokia.carbide.cpp.qt.core/plugin.xml Thu Feb 11 11:47:58 2010 -0600 +++ b/qt/com.nokia.carbide.cpp.qt.core/plugin.xml Fri Feb 12 09:56:50 2010 -0600 @@ -3,7 +3,12 @@ + id="com.nokia.carbide.cpp.qt.core.symbianSDKMgrHook" + name="Symbian SDK Manager Hook" + point="com.nokia.carbide.cpp.sdk.core.sdkManagerLoadedHook"> + \ No newline at end of file diff -r 967f619cd59f -r 67437bfc7c6f qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtCorePlugin.java --- a/qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtCorePlugin.java Thu Feb 11 11:47:58 2010 -0600 +++ b/qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtCorePlugin.java Fri Feb 12 09:56:50 2010 -0600 @@ -23,14 +23,19 @@ import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Plugin; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.osgi.framework.BundleContext; +import com.nokia.carbide.cpp.internal.api.sdk.ISDKManagerLoadedHook; +import com.nokia.carbide.cpp.sdk.core.ICarbideInstalledSDKChangeListener; import com.nokia.carbide.cpp.sdk.core.ISymbianSDK; import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin; import com.trolltech.qtcppproject.QtNature; -public class QtCorePlugin extends Plugin { +public class QtCorePlugin extends Plugin implements ISDKManagerLoadedHook, ICarbideInstalledSDKChangeListener { // The plug-in ID public static final String PLUGIN_ID = "com.nokia.carbide.cpp.qt.core"; //$NON-NLS-1$ @@ -53,7 +58,7 @@ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; - scanForQtSDKs(); + SDKCorePlugin.getSDKManager().addInstalledSdkChangeListener(this); } /* @@ -61,6 +66,7 @@ * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { + SDKCorePlugin.getSDKManager().removeInstalledSdkChangeListener(this); plugin = null; super.stop(context); } @@ -101,10 +107,30 @@ } private void scanForQtSDKs(){ - List sdkList = SDKCorePlugin.getSDKManager().getSDKList(); - for (ISymbianSDK sdk : sdkList){ - QtSDKUtils.addQtSDKForSymbianSDK(sdk, false); - } + + final String jobBaseText = "Checking for Qt installed in Symbian SDKs"; + Job job = new Job(jobBaseText) { + + @Override + protected IStatus run(IProgressMonitor monitor) { + List sdkList = SDKCorePlugin.getSDKManager().getSDKList(); + for (ISymbianSDK sdk : sdkList){ + QtSDKUtils.addQtSDKForSymbianSDK(sdk, false); + } + + return Status.OK_STATUS; + } + + }; + job.schedule(); + } + + public void symbianSDKManagerLoaded() { + scanForQtSDKs(); + } + + public void installedSdkChanged(SDKChangeEventType eventType) { + scanForQtSDKs(); } } diff -r 967f619cd59f -r 67437bfc7c6f qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtSDKUtils.java --- a/qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtSDKUtils.java Thu Feb 11 11:47:58 2010 -0600 +++ b/qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtSDKUtils.java Fri Feb 12 09:56:50 2010 -0600 @@ -15,16 +15,22 @@ import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.logging.Logger; +import org.eclipse.core.internal.runtime.Log; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.jface.preference.IPreferenceStore; import com.nokia.carbide.cpp.sdk.core.ISymbianSDK; +import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin; import com.nokia.cpp.internal.api.utils.core.HostOS; +import com.nokia.cpp.internal.api.utils.core.Logging; import com.trolltech.qtcppproject.QtProjectPlugin; import com.trolltech.qtcppproject.preferences.PreferenceConstants; @@ -105,7 +111,7 @@ } static public void addQtSDKForSymbianSDK(ISymbianSDK sdk, boolean makeDefault){ - + refreshQtStoredSDKs(); if ((getQtSDKNameForSymbianSDK(sdk) == null) && isQtInternallyInstalled(sdk)){ IPath binPath = new Path(sdk.getEPOCROOT() + QT_SDK_BIN_PATH); @@ -131,6 +137,11 @@ store.setValue(PreferenceConstants.QTVERSION_DEFAULT, count); } + ResourcesPlugin.getPlugin().getLog().log(Logging.newStatus(QtCorePlugin.getDefault(), + IStatus.INFO, + "New Qt-Symbian SDK added to Qt global preferences: " + name, //$NON-NLS-1$ + null)); + store.setValue(PreferenceConstants.QTVERSION_COUNT, count + 1); // # of table items, base is 1 (i.e. not zero) refreshQtStoredSDKs(); diff -r 967f619cd59f -r 67437bfc7c6f qt/com.nokia.carbide.cpp.qt.ui/plugin.xml --- a/qt/com.nokia.carbide.cpp.qt.ui/plugin.xml Thu Feb 11 11:47:58 2010 -0600 +++ b/qt/com.nokia.carbide.cpp.qt.ui/plugin.xml Fri Feb 12 09:56:50 2010 -0600 @@ -88,8 +88,14 @@ - + + + diff -r 967f619cd59f -r 67437bfc7c6f qt/com.nokia.carbide.cpp.qt.ui/src/com/nokia/carbide/cpp/internal/qt/ui/QtUIPlugin.java --- a/qt/com.nokia.carbide.cpp.qt.ui/src/com/nokia/carbide/cpp/internal/qt/ui/QtUIPlugin.java Thu Feb 11 11:47:58 2010 -0600 +++ b/qt/com.nokia.carbide.cpp.qt.ui/src/com/nokia/carbide/cpp/internal/qt/ui/QtUIPlugin.java Fri Feb 12 09:56:50 2010 -0600 @@ -37,11 +37,12 @@ import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo; import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo; import com.nokia.carbide.cdt.internal.api.builder.SISBuilderInfo2; +import com.nokia.carbide.cpp.internal.api.sdk.ISDKManagerLoadedHook; import com.nokia.carbide.cpp.internal.qt.core.QtCorePlugin; import com.nokia.carbide.cpp.internal.qt.core.QtSDKUtils; import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext; -public class QtUIPlugin extends AbstractUIPlugin implements ICarbideConfigurationChangedListener { +public class QtUIPlugin extends AbstractUIPlugin implements ICarbideConfigurationChangedListener, ISDKManagerLoadedHook { // The plug-in ID public static final String PLUGIN_ID = "com.nokia.carbide.cpp.qt.ui"; //$NON-NLS-1$ @@ -62,7 +63,6 @@ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; - CarbideBuilderPlugin.addBuildConfigChangedListener(this); } /* @@ -158,7 +158,8 @@ try { String qtSDKName = QtSDKUtils.getQtSDKNameForSymbianSDK(currentConfig.getSDK()); // If qtSDK is not internally installed or is set, don't change anything - if (qtSDKName == null || QtSDKUtils.getDefaultQtSDKForProject(project) == null) { + String currQtSDK = QtSDKUtils.getDefaultQtSDKForProject(project); + if (qtSDKName == null || currQtSDK == null || currQtSDK.equals(QtSDKUtils.QT_DEFAULT_SDK_NAME)) { return; } @@ -170,4 +171,8 @@ } } + + public void symbianSDKManagerLoaded() { + CarbideBuilderPlugin.addBuildConfigChangedListener(this); + } }