You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by sk...@apache.org on 2020/04/09 13:12:16 UTC
[netbeans] branch master updated: [NETBEANS-4039] Added SPI for
Preferred Color Profile Changes
This is an automated email from the ASF dual-hosted git repository.
skygo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new ab6a2eb [NETBEANS-4039] Added SPI for Preferred Color Profile Changes
new 5d9e62e Merge pull request #2039 from lkishalmi/NETBEANS-4039
ab6a2eb is described below
commit ab6a2ebc89b93c73dc89800efb18c42bcb6b3911
Author: Laszlo Kishalmi <la...@gmail.com>
AuthorDate: Fri Mar 20 07:34:47 2020 -0700
[NETBEANS-4039] Added SPI for Preferred Color Profile Changes
---
ide/options.editor/nbproject/project.xml | 9 +++
.../modules/options/colors/ColorModel.java | 19 +++++-
platform/core.windows/apichanges.xml | 20 +++++++
platform/core.windows/manifest.mf | 2 +-
platform/core.windows/nbproject/project.xml | 7 +--
.../netbeans/core/windows/options/LafPanel.java | 70 ++++++----------------
.../options/spi/PreferredColorProfileSupport.java | 50 ++++++++++++++++
7 files changed, 117 insertions(+), 60 deletions(-)
diff --git a/ide/options.editor/nbproject/project.xml b/ide/options.editor/nbproject/project.xml
index 61f2d4f..47a637f 100644
--- a/ide/options.editor/nbproject/project.xml
+++ b/ide/options.editor/nbproject/project.xml
@@ -26,6 +26,15 @@
<code-name-base>org.netbeans.modules.options.editor</code-name-base>
<module-dependencies>
<dependency>
+ <code-name-base>org.netbeans.core.windows</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>2</release-version>
+ <specification-version>2.92</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
<code-name-base>org.netbeans.modules.editor</code-name-base>
<build-prerequisite/>
<compile-dependency/>
diff --git a/ide/options.editor/src/org/netbeans/modules/options/colors/ColorModel.java b/ide/options.editor/src/org/netbeans/modules/options/colors/ColorModel.java
index dc98303..e1749de 100644
--- a/ide/options.editor/src/org/netbeans/modules/options/colors/ColorModel.java
+++ b/ide/options.editor/src/org/netbeans/modules/options/colors/ColorModel.java
@@ -71,9 +71,11 @@ import org.openide.filesystems.FileUtil;
import org.openide.text.CloneableEditorSupport;
import org.openide.util.ImageUtilities;
import org.openide.util.NbBundle;
+import org.openide.util.lookup.ServiceProvider;
+import org.netbeans.core.windows.options.spi.PreferredColorProfileSupport;
-
-public final class ColorModel {
+@ServiceProvider(service = PreferredColorProfileSupport.class)
+public final class ColorModel implements PreferredColorProfileSupport {
private static final Logger LOG = Logger.getLogger(ColorModel.class.getName());
@@ -95,6 +97,12 @@ public final class ColorModel {
return EditorSettings.getDefault().isCustomFontColorProfile (profile);
}
+ @Override
+ public String getCurrentProfileName () {
+ String name = getCurrentProfile();
+ return isCustomProfile(name) ? null : name;
+ }
+
public void setCurrentProfile (String profile) {
EditorSettings.getDefault().setCurrentFontColorProfile (profile);
}
@@ -291,6 +299,13 @@ public final class ColorModel {
return new Preview("test" + hashCode(), mimeType); //NOI18N
}
+ @Override
+ public void setPreferredProfile(String profileName) {
+ setCurrentProfile(profileName);
+ Collection<AttributeSet> annotations = getAnnotations(profileName);
+ setAnnotations(profileName, annotations);
+ }
+
final class Preview extends JPanel {
static final String PROP_CURRENT_ELEMENT = "currentAElement";
diff --git a/platform/core.windows/apichanges.xml b/platform/core.windows/apichanges.xml
index 9fa948c..10179c9 100644
--- a/platform/core.windows/apichanges.xml
+++ b/platform/core.windows/apichanges.xml
@@ -84,6 +84,26 @@ is the proper place.
<changes>
+ <change id="preferred-color-profile-spi" >
+ <api name="winsys"/>
+ <summary>Add SPI support for preferred color profile change.</summary>
+ <version major="2" minor="91"/>
+ <date day="18" month="3" year="2020"/>
+ <author login="lkishalmi"/>
+ <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
+ <description>
+ A new interface <code>PreferredColorProfileSupport</code> has been
+ added in order to let other modules reflect on preferred color profile
+ change when the user requests for that during Look and Feel change.
+ Look and Feels can register a color profile name as <code>String</code>
+ named <code>nb.preferred.color.profile</code> in their UIDefaults.
+ Changing the Look and Feel would offer the user to change the color
+ profile of additional components (most likely the Editor), if it's
+ current profile does not match the one preferred by the
+ selected Look and Feel.
+ </description>
+ <issue number="NETBEANS-4039"/>
+ </change>
<change id="sort-editor-tabs" >
<api name="winsys"/>
<summary>Add preference for sorting editor tabs</summary>
diff --git a/platform/core.windows/manifest.mf b/platform/core.windows/manifest.mf
index 0978ba6..92b06fe 100644
--- a/platform/core.windows/manifest.mf
+++ b/platform/core.windows/manifest.mf
@@ -6,5 +6,5 @@ OpenIDE-Module-Provides: org.netbeans.core.WindowSystem, org.openide.windows.Win
OpenIDE-Module-Recommends: org.netbeans.core.windows.nativeaccess.NativeWindowSystem
AutoUpdate-Show-In-Client: false
AutoUpdate-Essential-Module: true
-OpenIDE-Module-Specification-Version: 2.91
+OpenIDE-Module-Specification-Version: 2.92
diff --git a/platform/core.windows/nbproject/project.xml b/platform/core.windows/nbproject/project.xml
index 4d647f2..9ef0018 100644
--- a/platform/core.windows/nbproject/project.xml
+++ b/platform/core.windows/nbproject/project.xml
@@ -208,13 +208,12 @@
</test-dependency>
</test-type>
</test-dependencies>
- <friend-packages>
- <friend>org.netbeans.core.multitabs</friend>
- <friend>org.netbeans.core.nativeaccess</friend>
+ <public-packages>
<package>org.netbeans.core.windows.nativeaccess</package>
<package>org.netbeans.core.windows.options</package>
+ <package>org.netbeans.core.windows.options.spi</package>
<package>org.netbeans.core.windows.view.ui.tabcontrol</package>
- </friend-packages>
+ </public-packages>
</data>
</configuration>
</project>
diff --git a/platform/core.windows/src/org/netbeans/core/windows/options/LafPanel.java b/platform/core.windows/src/org/netbeans/core/windows/options/LafPanel.java
index 08d949f..d94d2a0 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/options/LafPanel.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/options/LafPanel.java
@@ -22,10 +22,8 @@ package org.netbeans.core.windows.options;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
@@ -41,6 +39,7 @@ import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.UnsupportedLookAndFeelException;
+import org.netbeans.core.windows.options.spi.PreferredColorProfileSupport;
import org.netbeans.spi.options.OptionsPanelController;
import org.openide.LifecycleManager;
import org.openide.awt.Notification;
@@ -58,7 +57,6 @@ public class LafPanel extends javax.swing.JPanel {
private final Preferences prefs = NbPreferences.forModule(LafPanel.class);
- private final boolean isAquaLaF = "Aqua".equals(UIManager.getLookAndFeel().getID()); //NOI18N
private static final boolean NO_RESTART_ON_LAF_CHANGE = Boolean.getBoolean("nb.laf.norestart"); //NOI18N
private int defaultLookAndFeelIndex;
private final ArrayList<LookAndFeelInfo> lafs = new ArrayList<LookAndFeelInfo>( 10 );
@@ -67,12 +65,8 @@ public class LafPanel extends javax.swing.JPanel {
this.controller = controller;
initComponents();
// TODO listen to changes in form fields and call controller.changed()
- checkMaximizeNativeLaF.addItemListener(new ItemListener() {
-
- @Override
- public void itemStateChanged(ItemEvent e) {
- fireChanged();
- }
+ checkMaximizeNativeLaF.addItemListener((ItemEvent e) -> {
+ fireChanged();
});
initLookAndFeel();
lblRestart.setVisible(!NO_RESTART_ON_LAF_CHANGE);
@@ -81,21 +75,14 @@ public class LafPanel extends javax.swing.JPanel {
model.addElement( li.getName() );
}
comboLaf.setModel( model );
- comboLaf.addItemListener( new ItemListener() {
-
- @Override
- public void itemStateChanged( ItemEvent e ) {
- fireChanged();
- }
+ comboLaf.addItemListener((ItemEvent e) -> {
+ fireChanged();
});
}
private void fireChanged() {
- boolean isChanged = false;
- if (checkMaximizeNativeLaF.isSelected() != prefs.getBoolean(WinSysPrefs.MAXIMIZE_NATIVE_LAF, false)
- || comboLaf.getSelectedIndex() != lafs.indexOf(isForcedLaF() ? getCurrentLaF() : getPreferredLaF())) {
- isChanged = true;
- }
+ boolean isChanged = checkMaximizeNativeLaF.isSelected() != prefs.getBoolean(WinSysPrefs.MAXIMIZE_NATIVE_LAF, false);
+ isChanged |= comboLaf.getSelectedIndex() != lafs.indexOf(isForcedLaF() ? getCurrentLaF() : getPreferredLaF());
controller.changed(isChanged);
}
@@ -255,54 +242,31 @@ public class LafPanel extends javax.swing.JPanel {
void selectDarkLookAndFeel() {
comboLaf.requestFocusInWindow();
- SwingUtilities.invokeLater( new Runnable() {
-
- @Override
- public void run() {
- comboLaf.setPopupVisible( true );
- }
+ SwingUtilities.invokeLater(() -> {
+ comboLaf.setPopupVisible( true );
});
}
- //Use reflection to instantiate ColorModel class and get/set the current profile
- private static final String COLOR_MODEL_CLASS_NAME = "org.netbeans.modules.options.colors.ColorModel"; //NOI18N
-
private boolean isChangeEditorColorsPossible() {
String preferredProfile = getPreferredColorProfile();
if( preferredProfile == null )
return false;
- ClassLoader cl = Lookup.getDefault().lookup( ClassLoader.class );
- if( null == cl )
- cl = LafPanel.class.getClassLoader();
- try {
- Class klz = cl.loadClass( COLOR_MODEL_CLASS_NAME );
- Object colorModel = klz.newInstance();
- Method m = klz.getDeclaredMethod( "getCurrentProfile", new Class[0] ); //NOI18N
- Object res = m.invoke( colorModel, new Object[0] );
- return res != null && !preferredProfile.equals( res );
- } catch( Exception ex ) {
- //ignore
+ boolean ret = false;
+ Collection<? extends PreferredColorProfileSupport> supports = Lookup.getDefault().lookupAll(PreferredColorProfileSupport.class);
+ for (PreferredColorProfileSupport support : supports) {
+ ret |= !preferredProfile.equals(support.getCurrentProfileName());
}
- return false;
+ return ret;
}
private void switchEditorColorsProfile() {
if( !isChangeEditorColorsPossible() )
return;
String preferredProfile = getPreferredColorProfile();
-
- ClassLoader cl = Lookup.getDefault().lookup( ClassLoader.class );
- if( null == cl )
- cl = LafPanel.class.getClassLoader();
try {
- Class klz = cl.loadClass( COLOR_MODEL_CLASS_NAME );
- Object colorModel = klz.newInstance();
- Method m = klz.getDeclaredMethod( "getAnnotations", String.class ); //NOI18N
- Object annotations = m.invoke( colorModel, preferredProfile );
- m = klz.getDeclaredMethod( "setAnnotations", String.class, Collection.class ); //NOI18N
- m.invoke( colorModel, preferredProfile, annotations );
- m = klz.getDeclaredMethod( "setCurrentProfile", String.class ); //NOI18N
- m.invoke( colorModel, preferredProfile );
+ Lookup.getDefault().lookupAll(PreferredColorProfileSupport.class).forEach((supp) -> {
+ supp.setPreferredProfile(preferredProfile);
+ });
} catch( Exception ex ) {
//ignore
Logger.getLogger( LafPanel.class.getName() ).log( Level.INFO, "Cannot change editor colors profile.", ex ); //NOI18N
diff --git a/platform/core.windows/src/org/netbeans/core/windows/options/spi/PreferredColorProfileSupport.java b/platform/core.windows/src/org/netbeans/core/windows/options/spi/PreferredColorProfileSupport.java
new file mode 100644
index 0000000..f4bb946
--- /dev/null
+++ b/platform/core.windows/src/org/netbeans/core/windows/options/spi/PreferredColorProfileSupport.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.core.windows.options.spi;
+
+/**
+ * Whenever a component supports color profiles it can implement this interface
+ * in order to be updated when LaF change requested with a color profile change.
+ *
+ * @author lkishalmi
+ * @since 2.92
+ */
+public interface PreferredColorProfileSupport {
+ /**
+ * This method shall try to set the current color profile of the supported
+ * component according to the provided profile name. The default profile
+ * name is usually called {@code "NetBeans"}.
+ *
+ * @param profileName the color profile name to be set.
+ * @since 2.92
+ */
+ void setPreferredProfile(String profileName);
+
+ /**
+ * This method shall return the name of the current color profile used by
+ * the implementation. It can return <code>null</code> if this information
+ * cannot be determined (e.g. some user customized profile is in use). In
+ * that case the color profile change option will always be presented to
+ * the user.
+ *
+ * @return the current color profile name or <code>null</code>.
+ * @since 2.92
+ */
+ String getCurrentProfileName();
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists