From: <dal...@us...> - 2015-08-31 22:41:22
|
Revision: 24039 http://sourceforge.net/p/jedit/svn/24039 Author: daleanson Date: 2015-08-31 22:41:19 +0000 (Mon, 31 Aug 2015) Log Message: ----------- Added system look and feels. Added option for "allowBeep", which won't work until Javassist plugin is released. Modified Paths: -------------- plugins/LookAndFeel/trunk/lookandfeel/LookAndFeelOptionPane.java plugins/LookAndFeel/trunk/lookandfeel/LookAndFeelPlugin.java Added Paths: ----------- plugins/LookAndFeel/trunk/lookandfeel/SystemLookAndFeelInstaller.java Modified: plugins/LookAndFeel/trunk/lookandfeel/LookAndFeelOptionPane.java =================================================================== --- plugins/LookAndFeel/trunk/lookandfeel/LookAndFeelOptionPane.java 2015-08-31 22:33:15 UTC (rev 24038) +++ plugins/LookAndFeel/trunk/lookandfeel/LookAndFeelOptionPane.java 2015-08-31 22:41:19 UTC (rev 24039) @@ -37,117 +37,115 @@ import org.gjt.sp.jedit.GUIUtilities; import org.gjt.sp.util.Log; - /** * This is the option pane that jEdit displays for the options of * the LookAndFeel plugin. */ -public class LookAndFeelOptionPane extends AbstractOptionPane - implements ItemListener { +public class LookAndFeelOptionPane extends AbstractOptionPane implements ItemListener { - private JComboBox lookAndFeels; - private JPanel lnfOptionPanel; - private AbstractOptionPane configComponent; - private JCheckBox useFont; + private JComboBox lookAndFeels; + private JPanel lnfOptionPanel; + private AbstractOptionPane configComponent; + private JCheckBox useFont; + private JCheckBox allowBeep = null; - public LookAndFeelOptionPane() { - super( "lookandfeel" ); - } + public LookAndFeelOptionPane() { + super( "lookandfeel" ); + } + public void _init() { + setBorder( BorderFactory.createEmptyBorder(6, 6, 6, 6 ) ); + String[] lnfs = LookAndFeelPlugin.getAvailableLookAndFeels(); + lookAndFeels = new JComboBox( lnfs ); + addComponent( useFont = new JCheckBox( jEdit.getProperty( "lookandfeel.usejeditfont.label" ), jEdit.getBooleanProperty( "lookandfeel.usejeditfont", false ) ) ); + addComponent( Box.createVerticalStrut(6 ) ); - public void _init() { - setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6)); - String[] lnfs = LookAndFeelPlugin.getAvailableLookAndFeels(); - lookAndFeels = new JComboBox( lnfs ); - addComponent( useFont = new JCheckBox( - jEdit.getProperty( "lookandfeel.usejeditfont.label" ), - jEdit.getBooleanProperty( "lookandfeel.usejeditfont", false ) ) ); - addComponent( Box.createVerticalStrut(6)); + if ( "true".equals( System.getProperty( "LNFAgentInstalled" ) ) ) { + addComponent( allowBeep = new JCheckBox( jEdit.getProperty( "lookandfeel.allowBeep.label" ), "true".equals(System.getProperty("allowBeep") ) ) ); + addComponent( Box.createVerticalStrut(6 ) ); + } - addComponent( jEdit.getProperty( "lookandfeel.lookandfeel.label" ), lookAndFeels ); - addComponent( Box.createVerticalStrut(6)); - addComponent( lnfOptionPanel = new JPanel( new BorderLayout() ) ); - addComponent( Box.createVerticalStrut(6)); - JButton button = new JButton(jEdit.getProperty("lookandfeel.chooseeditorscheme.label")); - button.setToolTipText(jEdit.getProperty("lookandfeel.chooseeditorschemetooltip.label")); - addComponent(button); - button.addActionListener( - new ActionListener() { - public void actionPerformed( ActionEvent ae ) { - new editorscheme.EditorSchemeSelectorDialog(jEdit.getActiveView()); - } - } - ); + addComponent( jEdit.getProperty( "lookandfeel.lookandfeel.label" ), lookAndFeels ); + addComponent( Box.createVerticalStrut(6 ) ); + addComponent( lnfOptionPanel = new JPanel( new BorderLayout() ) ); + addComponent( Box.createVerticalStrut(6 ) ); + JButton button = new JButton( jEdit.getProperty( "lookandfeel.chooseeditorscheme.label" ) ); + button.setToolTipText( jEdit.getProperty( "lookandfeel.chooseeditorschemetooltip.label" ) ); + addComponent( button ); + button.addActionListener ( new ActionListener() { + public void actionPerformed( ActionEvent ae ) { + new editorscheme.EditorSchemeSelectorDialog( jEdit.getActiveView() ); + } + } + ); - addComponent( Box.createVerticalStrut(11)); - addSeparator(); - addComponent( Box.createVerticalStrut(11)); - addComponent( new JLabel(jEdit.getProperty( "lookandfeel.message.restart.message" ) )); + addComponent( Box.createVerticalStrut(11 ) ); + addSeparator(); + addComponent( Box.createVerticalStrut(11 ) ); + addComponent( new JLabel( jEdit.getProperty( "lookandfeel.message.restart.message" ) ) ); - int idx = indexOf( lnfs, jEdit.getProperty( "lookandfeel.lookandfeel" ) ); - lookAndFeels.setSelectedIndex( idx < 0 ? 0 : idx ); - itemStateChanged( null ); - lookAndFeels.addItemListener( this ); - - } + int idx = indexOf( lnfs, jEdit.getProperty( "lookandfeel.lookandfeel" ) ); + lookAndFeels.setSelectedIndex( idx < 0 ? 0 : idx ); + itemStateChanged( null ); + lookAndFeels.addItemListener( this ); + } - public void _save() { - try { - if (configComponent != null) { - configComponent.save(); - } - jEdit.setProperty( "lookandfeel.lookandfeel", lookAndFeels.getSelectedItem().toString() ); - jEdit.setBooleanProperty( "lookandfeel.usejeditfont", useFont.isSelected() ); - LookAndFeelInstaller installer = LookAndFeelPlugin.getInstaller( lookAndFeels.getSelectedItem().toString() ); - if (installer != null) { - LookAndFeelPlugin.installLookAndFeel( installer ); - } - } - catch ( Exception e ) { - Log.log( Log.ERROR, this, e ); - GUIUtilities.error( this, "lookandfeel.error.installer", null ); - } - } + public void _save() { + try { + if ( configComponent != null ) { + configComponent.save(); + } + jEdit.setProperty( "lookandfeel.lookandfeel", lookAndFeels.getSelectedItem().toString() ); + jEdit.setBooleanProperty( "lookandfeel.usejeditfont", useFont.isSelected() ); + if (allowBeep != null) { + System.setProperty("allowBeep", allowBeep.isSelected() ? "true" : "false"); + } + LookAndFeelInstaller installer = LookAndFeelPlugin.getInstaller( lookAndFeels.getSelectedItem().toString() ); + if ( installer != null ) { + LookAndFeelPlugin.installLookAndFeel( installer ); + } + } catch ( Exception e ) { + Log.log( Log.ERROR, this, e ); + GUIUtilities.error( this, "lookandfeel.error.installer", null ); + } + } + /** + * Handle a change in the combo box. + */ + public final void itemStateChanged( ItemEvent evt ) { + try { + LookAndFeelInstaller installer = LookAndFeelPlugin.getInstaller( lookAndFeels.getSelectedItem().toString() ); + if ( installer == null ) { + return; + } + if ( configComponent != null ) { + lnfOptionPanel.remove( configComponent ); + } + configComponent = installer.getOptionPane(); + if ( configComponent != null ) { + lnfOptionPanel.add( configComponent ); + } + invalidate(); + revalidate(); + repaint(); + } catch ( Exception e ) { + Log.log( Log.ERROR, this, e ); + GUIUtilities.error( this, "lookandfeel.error.installer", null ); + } + } - /** - * Handle a change in the combo box. - */ - public final void itemStateChanged( ItemEvent evt ) { - try { - LookAndFeelInstaller installer = LookAndFeelPlugin.getInstaller( lookAndFeels.getSelectedItem().toString() ); - if (installer == null) { - return; - } - if ( configComponent != null ) { - lnfOptionPanel.remove( configComponent ); - } - configComponent = installer.getOptionPane(); - if ( configComponent != null ) { - lnfOptionPanel.add( configComponent ); - } - invalidate(); - revalidate(); - repaint(); - } - catch ( Exception e ) { - Log.log( Log.ERROR, this, e ); - GUIUtilities.error( this, "lookandfeel.error.installer", null ); - } - } + /** + * Returns the index of a string in the given string array. + */ + private static int indexOf( String[] arr, String s ) { + for ( int i = 0; i < arr.length; i++ ) { + if ( arr[ i].equals( s ) ) { + return i; + } + } + return -1; + } - - /** - * Returns the index of a string in the given string array. - */ - private static int indexOf( String[] arr, String s ) { - for ( int i = 0; i < arr.length; i++ ) { - if ( arr[ i ].equals( s ) ) { - return i; - } - } - return -1; - } - } \ No newline at end of file Modified: plugins/LookAndFeel/trunk/lookandfeel/LookAndFeelPlugin.java =================================================================== --- plugins/LookAndFeel/trunk/lookandfeel/LookAndFeelPlugin.java 2015-08-31 22:33:15 UTC (rev 24038) +++ plugins/LookAndFeel/trunk/lookandfeel/LookAndFeelPlugin.java 2015-08-31 22:41:19 UTC (rev 24039) @@ -26,6 +26,8 @@ import java.awt.Window; import java.util.Arrays; import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UIDefaults; @@ -41,9 +43,13 @@ public static boolean loadedInitialLnF = false; private static String lnfClassname = null; + + // <name, installer>, a list of installers for the system provided look and feels. + private static Map<String, LookAndFeelInstaller> systemInstallers; public void start() { try { + loadSystemInstallers(); String lnf = jEdit.getProperty( "lookandfeel.lookandfeel" ); if ( LookAndFeelPlugin.isEmpty( lnf ) ) { return; @@ -167,11 +173,11 @@ * Update the component trees of all windows. */ private static void updateAllComponentTreeUIs() { - Frame[] frames = Frame.getFrames(); - for ( Frame frame : frames ) { - if ( frame != null ) { - SwingUtilities.updateComponentTreeUI( frame ); - updateAllDialogComponentTreeUIs( frame ); + Window[] windows = Window.getWindows(); + for ( Window window : windows ) { + if ( window != null ) { + SwingUtilities.updateComponentTreeUI( window ); + updateAllDialogComponentTreeUIs( window ); } } } @@ -196,8 +202,21 @@ * Returns the list of the possible look and feel options. */ public static String[] getAvailableLookAndFeels() { - String[] names = ServiceManager.getServiceNames( LookAndFeelInstaller.SERVICE_NAME ); - Arrays.sort( names, new Comparator<String>() { + // look and feels provided by the system + UIManager.LookAndFeelInfo[] systemLnfs = UIManager.getInstalledLookAndFeels(); + String[] systemNames = new String[systemLnfs.length]; + for ( int i = 0; i < systemLnfs.length; i++ ) { + systemNames[i] = systemLnfs[i].getName(); + } + + // look and feels provided by this plugin or other plugins + String[] pluginNames = ServiceManager.getServiceNames( LookAndFeelInstaller.SERVICE_NAME ); + + String[] allNames = new String[ systemNames.length + pluginNames.length]; + System.arraycopy( systemNames, 0, allNames, 0, systemNames.length ); + System.arraycopy( pluginNames, 0, allNames, systemNames.length, pluginNames.length ); + + Arrays.sort( allNames, new Comparator<String>() { public int compare( String a, String b ) { if ( "None".equals( a ) ) { return -1; @@ -208,14 +227,26 @@ return a.compareTo( b ); } } ); - return names; + return allNames; } + private void loadSystemInstallers() { + systemInstallers = new HashMap<String, LookAndFeelInstaller>(); + UIManager.LookAndFeelInfo[] systemLnfs = UIManager.getInstalledLookAndFeels(); + for ( UIManager.LookAndFeelInfo info : systemLnfs ) { + systemInstallers.put( info.getName(), new SystemLookAndFeelInstaller( info ) ); + } + } + /** * Returns the installer for the named look and feel. */ public static LookAndFeelInstaller getInstaller( String name ) { - return ( LookAndFeelInstaller ) ServiceManager.getService( LookAndFeelInstaller.SERVICE_NAME, name ); + LookAndFeelInstaller installer = systemInstallers.get( name ); + if ( installer == null ) { + installer = ( LookAndFeelInstaller ) ServiceManager.getService( LookAndFeelInstaller.SERVICE_NAME, name ); + } + return installer; } /** Added: plugins/LookAndFeel/trunk/lookandfeel/SystemLookAndFeelInstaller.java =================================================================== --- plugins/LookAndFeel/trunk/lookandfeel/SystemLookAndFeelInstaller.java (rev 0) +++ plugins/LookAndFeel/trunk/lookandfeel/SystemLookAndFeelInstaller.java 2015-08-31 22:41:19 UTC (rev 24039) @@ -0,0 +1,110 @@ +package lookandfeel; + +import java.awt.Font; +import javax.swing.LookAndFeel; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import org.gjt.sp.jedit.AbstractOptionPane; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.gui.FontSelector; + +public class SystemLookAndFeelInstaller implements LookAndFeelInstaller { + + UIManager.LookAndFeelInfo info = null; + + public SystemLookAndFeelInstaller( UIManager.LookAndFeelInfo info ) { + this.info = info; + } + + /** + * @return the name of this look and feel + */ + public String getName() { + return info.getName(); + } + + /** + * @return A configuration panel for this look and feel. May return null + * if there is nothing to configure for this look and feel. + */ + public AbstractOptionPane getOptionPane() { + // return a pane for Metal only, all others return null. For Metal, + // need to show the font properties like in Global Options/Appearance. + if ( info.getClassName().equals( "javax.swing.plaf.metal.MetalLookAndFeel" ) ) { + return new OptionComponent(); + } else { + return null; + } + } + + /** + * Install this look and feel. + */ + public void install() throws UnsupportedLookAndFeelException { + try { + UIManager.setLookAndFeel( info.getClassName() ); + UIManager.put( "ClassLoader", ClassLoader.getSystemClassLoader() ); + } catch ( Exception e ) { + throw new UnsupportedLookAndFeelException( e.getMessage() ); + } + + /* + try { + LNFClassLoader classLoader = new LNFClassLoader( info ); + if ( "javax.swing.plaf.metal.MetalLookAndFeel".equals( info.getClassName() ) ) { + System.out.println("+++++ setting to ocean"); + javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme( new javax.swing.plaf.metal.OceanTheme()); + } + UIManager.setLookAndFeel( ( LookAndFeel ) classLoader.loadClass( info.getClassName() ).newInstance() ); + UIManager.put( "ClassLoader", classLoader ); + } catch ( Exception e ) { + e.printStackTrace(); + throw new UnsupportedLookAndFeelException( e.getMessage() ); + } + */ + } + + /** + * The configuration component for the Metal look and feel. + */ + class OptionComponent extends AbstractOptionPane { + private FontSelector primaryFont; + private FontSelector secondaryFont; + + /** + * Create a new <code>OptionComponent</code>. + */ + public OptionComponent() { + super( "Metal" ); + init(); + } + + /** + * Layout this component. + */ + public void _init() { + /* Primary Metal L&F font */ + Font pf = jEdit.getFontProperty( "metal.primary.font" ); + primaryFont = new FontSelector( pf ); + addComponent( jEdit.getProperty( "options.appearance.primaryFont" ), primaryFont ); + + /* Secondary Metal L&F font */ + secondaryFont = new FontSelector( jEdit.getFontProperty( "metal.secondary.font" ) ); + addComponent( jEdit.getProperty( "options.appearance.secondaryFont" ), secondaryFont ); + } + + /** + * Save this configuration. + */ + public void _save() { + jEdit.setFontProperty( "metal.primary.font", primaryFont.getFont() ); + jEdit.setFontProperty( "metal.secondary.font", secondaryFont.getFont() ); + try { + SystemLookAndFeelInstaller.this.install(); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |