Revision: 5891
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=5891&view=rev
Author: manningr
Date: 2010-09-18 21:36:42 +0000 (Sat, 18 Sep 2010)
Log Message:
-----------
As it turns out, setSkin cannot be invoked reflectively (leads to errors like : "UIDefaults.getUI() failed: no ComponentUI class for: javax.swing.*"). Perhaps this is due to classloader issues (once again). LAFRegister will now not attempt to install the LAF if the selected LAF is the Substance place-holder. This now is done in the Substance LAF controller.
Modified Paths:
--------------
trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LAFRegister.java
trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LookAndFeelComboBox.java
trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLafData.java
trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLafPlaceholder.java
trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLookAndFeelController.java
Modified: trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LAFRegister.java
===================================================================
--- trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LAFRegister.java 2010-09-18 21:26:13 UTC (rev 5890)
+++ trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LAFRegister.java 2010-09-18 21:36:42 UTC (rev 5891)
@@ -221,17 +221,23 @@
ILookAndFeelController lafCont = getLookAndFeelController(lafClassName);
lafCont.aboutToBeInstalled(this, laf);
- // Set Look and Feel.
- if (_lafClassLoader != null)
- {
- UIManager.setLookAndFeel(laf);
- UIManager.getLookAndFeelDefaults().put("ClassLoader", _lafClassLoader);
+ // Set Look and Feel. If this is the Substance placeholder, skip it as it is not a real
+ // look and feel. The controller will handle setting the look and feel using the UIManager.
+ if (!lafClassName.equals(SubstanceLookAndFeelController.SUBSTANCE_LAF_PLACEHOLDER_CLASS_NAME)) {
+ if (s_log.isInfoEnabled()) {
+ s_log.info("Setting lookandfeel class: "+lafClassName);
+ }
+
+ if (_lafClassLoader != null)
+ {
+ UIManager.setLookAndFeel(laf);
+ UIManager.getLookAndFeelDefaults().put("ClassLoader", _lafClassLoader);
+ }
+ else
+ {
+ UIManager.setLookAndFeel(laf);
+ }
}
- else
- {
- UIManager.setLookAndFeel(laf);
- }
-
lafCont.hasBeenInstalled(this, laf);
updateAllFrames();
}
@@ -323,8 +329,21 @@
{
// Map of JAR file URLs containing LAFs keyed by the LAF class name.
final Map<String, URL> lafs = loadInstallProperties();
+
+ final List<URL> lafUrls = new ArrayList<URL>();
+
+ // Put the lafplugin jar into the list of lafUrls as it contains a LAF placeholder (for Substance).
+ String jarFilePath = _plugin.getPluginJarFilePath();
+ try
+ {
+ lafUrls.add(new File(jarFilePath).toURI().toURL());
+ }
+ catch (Exception e)
+ {
+ s_log.error("Unable to add the plugin jar file ("+jarFilePath+") to the list of classloader URLs");
+ }
+
// Retrieve URLs of all the Look and Feel jars and store in lafUrls.
- final List<URL> lafUrls = new ArrayList<URL>();
for (Iterator<URL> it = lafs.values().iterator(); it.hasNext();)
{
lafUrls.add(it.next());
@@ -335,6 +354,7 @@
{
URL[] urls = new URL[lafUrls.size()];
_lafClassLoader = new MyURLClassLoader(lafUrls.toArray(urls));
+
for (Iterator<String> it = lafs.keySet().iterator(); it.hasNext();)
{
String className = it.next();
@@ -410,7 +430,7 @@
}
try
{
- _lafControllers.put(SubstanceLookAndFeelController.SUBSTANCE_LAF_DEFAULT_CLASS_NAME,
+ _lafControllers.put(SubstanceLookAndFeelController.SUBSTANCE_LAF_PLACEHOLDER_CLASS_NAME,
new SubstanceLookAndFeelController(plugin, this));
}
catch (Throwable ex)
Modified: trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LookAndFeelComboBox.java
===================================================================
--- trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LookAndFeelComboBox.java 2010-09-18 21:26:13 UTC (rev 5890)
+++ trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LookAndFeelComboBox.java 2010-09-18 21:36:42 UTC (rev 5891)
@@ -113,6 +113,13 @@
_lafsByName.put(info[i].getName(), info[i]);
_lafsByClassName.put(info[i].getClassName(), info[i]);
}
+
+ // Need to populate the list with the Substance placeholder, to allow the user to select substance,
+ // and then the skin, which is the actual look and feel.
+ SubstanceLafPlaceholder substanceLaf = new SubstanceLafPlaceholder();
+ LookAndFeelInfo substanceLafInfo = substanceLaf.getLookAndFeelInfo();
+ _lafsByName.put(substanceLaf.getName(), substanceLafInfo);
+ _lafsByClassName.put(SubstanceLafPlaceholder.class.getName(), substanceLafInfo);
// Add the names of all LAF objects to control. By doing thru the Map
// these will be sorted.
Modified: trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLafData.java
===================================================================
--- trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLafData.java 2010-09-18 21:26:13 UTC (rev 5890)
+++ trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLafData.java 2010-09-18 21:36:42 UTC (rev 5891)
@@ -44,29 +44,29 @@
private void initLafMap()
{
- putClass("Autumn", "org.jvnet.substance.skin.AutumnSkin");
- putClass("BusinessBlackSteel", "org.jvnet.substance.skin.BusinessBlackSteelSkin");
- putClass("BusinessBlueSteelSkin", "org.jvnet.substance.skin.BusinessBlueSteelSkin");
- putClass("BusinessSkin", "org.jvnet.substance.skin.BusinessSkin");
- putClass("ChallengerDeepSkin", "org.jvnet.substance.skin.ChallengerDeepSkin");
- putClass("CremeCoffeeSkin", "org.jvnet.substance.skin.CremeCoffeeSkin");
- putClass("CremeSkin", "org.jvnet.substance.skin.CremeSkin");
- putClass("DustCoffeeSkin", "org.jvnet.substance.skin.DustCoffeeSkin");
- putClass("DustSkin", "org.jvnet.substance.skin.DustSkin");
- putClass("EmeraldDuskSkin", "org.jvnet.substance.skin.EmeraldDuskSkin");
- putClass("MagmaSkin", "org.jvnet.substance.skin.MagmaSkin");
- putClass("MistAquaSkin", "org.jvnet.substance.skin.MistAquaSkin");
- putClass("MistSilverSkin", "org.jvnet.substance.skin.MistSilverSkin");
- putClass("ModerateSkin", "org.jvnet.substance.skin.ModerateSkin");
- putClass("NebulaBrickWallSkin", "org.jvnet.substance.skin.NebulaBrickWallSkin");
- putClass("NebulaSkin", "org.jvnet.substance.skin.NebulaSkin");
- putClass("OfficeBlue2007Skin", "org.jvnet.substance.skin.OfficeBlue2007Skin");
- putClass("OfficeSilver2007Skin", "org.jvnet.substance.skin.OfficeSilver2007Skin");
- putClass("RavenGraphiteGlassSkin", "org.jvnet.substance.skin.RavenGraphiteGlassSkin");
- putClass("RavenGraphiteSkin", "org.jvnet.substance.skin.RavenGraphiteSkin");
- putClass("RavenSkin", "org.jvnet.substance.skin.RavenSkin");
- putClass("SaharaSkin", "org.jvnet.substance.skin.SaharaSkin");
- putClass("TwilightSkin", "org.jvnet.substance.skin.TwilightSkin");
+ putClass("Autumn", "org.jvnet.substance.skin.SubstanceAutumnLookAndFeel");
+ putClass("BusinessBlackSteel", "org.jvnet.substance.skin.SubstanceBusinessBlackSteelLookAndFeel");
+ putClass("BusinessBlueSteelSkin", "org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel");
+ putClass("BusinessSkin", "org.jvnet.substance.skin.SubstanceBusinessLookAndFeel");
+ putClass("ChallengerDeepSkin", "org.jvnet.substance.skin.SubstanceChallengerDeepLookAndFeel");
+ putClass("CremeCoffeeSkin", "org.jvnet.substance.skin.SubstanceCremeCoffeeLookAndFeel");
+ putClass("CremeSkin", "org.jvnet.substance.skin.SubstanceCremeLookAndFeel");
+ putClass("DustCoffeeSkin", "org.jvnet.substance.skin.SubstanceDustCoffeeLookAndFeel");
+ putClass("DustSkin", "org.jvnet.substance.skin.SubstanceDustLookAndFeel");
+ putClass("EmeraldDuskSkin", "org.jvnet.substance.skin.SubstanceEmeraldDuskLookAndFeel");
+ putClass("MagmaSkin", "org.jvnet.substance.skin.SubstanceMagmaLookAndFeel");
+ putClass("MistAquaSkin", "org.jvnet.substance.skin.SubstanceMistAquaLookAndFeel");
+ putClass("MistSilverSkin", "org.jvnet.substance.skin.SubstanceMistSilverLookAndFeel");
+ putClass("ModerateSkin", "org.jvnet.substance.skin.SubstanceModerateLookAndFeel");
+ putClass("NebulaBrickWallSkin", "org.jvnet.substance.skin.SubstanceNebulaBrickWallLookAndFeel");
+ putClass("NebulaSkin", "org.jvnet.substance.skin.SubstanceNebulaLookAndFeel");
+ putClass("OfficeBlue2007Skin", "org.jvnet.substance.skin.SubstanceOfficeBlue2007LookAndFeel");
+ putClass("OfficeSilver2007Skin", "org.jvnet.substance.skin.SubstanceOfficeSilver2007LookAndFeel");
+ putClass("RavenGraphiteGlassSkin", "org.jvnet.substance.skin.SubstanceRavenGraphiteGlassLookAndFeel");
+ putClass("RavenGraphiteSkin", "org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel");
+ putClass("RavenSkin", "org.jvnet.substance.skin.SubstanceRavenLookAndFeel");
+ putClass("SaharaSkin", "org.jvnet.substance.skin.SubstanceSaharaLookAndFeel");
+ putClass("TwilightSkin", "org.jvnet.substance.skin.SubstanceTwilightLookAndFeel");
}
public Class<?> getSkinClassForName(String skinName) {
Modified: trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLafPlaceholder.java
===================================================================
--- trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLafPlaceholder.java 2010-09-18 21:26:13 UTC (rev 5890)
+++ trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLafPlaceholder.java 2010-09-18 21:36:42 UTC (rev 5891)
@@ -19,6 +19,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.plaf.basic.BasicLookAndFeel;
/**
@@ -40,7 +42,7 @@
*/
private static final long serialVersionUID = 1L;
- protected SubstanceLafPlaceholder()
+ public SubstanceLafPlaceholder()
{
}
@@ -71,7 +73,10 @@
@Override
public boolean isSupportedLookAndFeel()
{
- return true;
+ return false;
}
+ public LookAndFeelInfo getLookAndFeelInfo() {
+ return new UIManager.LookAndFeelInfo(this.getName(), SubstanceLafPlaceholder.class.getCanonicalName());
+ }
}
Modified: trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLookAndFeelController.java
===================================================================
--- trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLookAndFeelController.java 2010-09-18 21:26:13 UTC (rev 5890)
+++ trunk/sql12/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/SubstanceLookAndFeelController.java 2010-09-18 21:36:42 UTC (rev 5891)
@@ -23,8 +23,6 @@
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Set;
@@ -34,6 +32,8 @@
import javax.swing.JLabel;
import javax.swing.LookAndFeel;
import javax.swing.SwingConstants;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
import net.sourceforge.squirrel_sql.fw.id.IHasIdentifier;
import net.sourceforge.squirrel_sql.fw.id.IIdentifier;
@@ -63,7 +63,7 @@
private static final ILogger s_log = LoggerController.createLogger(SubstanceLookAndFeelController.class);
/** Placeholder LAF that identifies itself as "Substance". No other LAF does this. */
- public static final String SUBSTANCE_LAF_DEFAULT_CLASS_NAME =
+ public static final String SUBSTANCE_LAF_PLACEHOLDER_CLASS_NAME =
"net.sourceforge.squirrel_sql.plugins.laf.SubstanceLafPlaceholder";
/** Preferences for this LAF. */
@@ -121,24 +121,12 @@
{
final String skinName = _prefs.getSkinName();
Class<?> skinClass = _lafData.getSkinClassForName(skinName);
- Object skinObject;
+ LookAndFeel skinObject;
try
{
- skinObject = skinClass.newInstance();
- Class<?> substancelafclass = Class.forName(SUBSTANCE_LOOK_AND_FEEL_CLASS, true, _cl);
- Method[] methods = substancelafclass.getMethods();
- Method setSkinStaticMethod = null;
- for (Method method : methods) {
- if (method.getName().equals("setSkin")) {
- Class<?>[] paramTypes = method.getParameterTypes();
- String firstParamName = paramTypes[0].getCanonicalName();
- if (firstParamName.equals("org.jvnet.substance.api.SubstanceSkin")) {
- setSkinStaticMethod = method;
- break;
- }
- }
- }
- setSkinStaticMethod.invoke(null, skinObject);
+ skinObject = (LookAndFeel)skinClass.newInstance();
+ UIManager.setLookAndFeel(skinObject);
+ UIManager.getLookAndFeelDefaults().put("ClassLoader", _cl);
}
catch (InstantiationException e)
{
@@ -150,17 +138,11 @@
// skinClass.newInstance();
s_log.error("Unable to instantiate skinClass ("+skinName+"):"+e.getMessage(), e);
}
- catch (InvocationTargetException e)
+ catch (UnsupportedLookAndFeelException e)
{
- // setSkinStaticMethod.invoke(null, skinObject);
- s_log.error("Unable to invoke SubstanceLookAndFeel.setSkin for skin ("+skinName+"):"+e.getMessage(), e);
-
+ // UIManager.setLookAndFeel
+ s_log.error("Unable to set look and feel using skinClass("+skinName+"):"+e.getMessage(), e);
}
- catch (ClassNotFoundException e)
- {
- // Class.forName(SUBSTANCE_LOOK_AND_FEEL_CLASS, true, _cl);
- s_log.error("Unable to find class ("+SUBSTANCE_LOOK_AND_FEEL_CLASS+"):"+e.getMessage(), e);
- }
}
/**
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|