This is an automated email from the ASF dual-hosted git repository. geertjan 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 f9a147f Update FlatLaf from 1.0 to 1.1.1 and added "FlatLaf" options panel under "Appearance" category new dfab059 Merge pull request #2839 from DevCharly/flatlaf-1.1-and-options f9a147f is described below commit f9a147f7e7058881fd9bf87cd1c6596c9f78e5b0 Author: Karl Tauber <k...@jformdesigner.com> AuthorDate: Mon Mar 29 19:09:14 2021 +0200 Update FlatLaf from 1.0 to 1.1.1 and added "FlatLaf" options panel under "Appearance" category --- platform/libs.flatlaf/external/binaries-list | 2 +- ...f-1.0-license.txt => flatlaf-1.1.1-license.txt} | 4 +- platform/libs.flatlaf/nbproject/project.properties | 2 +- platform/libs.flatlaf/nbproject/project.xml | 4 +- .../o.n.swing.laf.flatlaf/nbproject/project.xml | 17 ++ .../netbeans/swing/laf/flatlaf/Bundle.properties | 10 + .../netbeans/swing/laf/flatlaf/FlatLFCustoms.java | 7 + .../swing/laf/flatlaf/FlatLafOptionsPanel.form | 121 ++++++++++++ .../swing/laf/flatlaf/FlatLafOptionsPanel.java | 209 +++++++++++++++++++++ .../laf/flatlaf/FlatLafOptionsPanelController.java | 141 ++++++++++++++ .../netbeans/swing/laf/flatlaf/FlatLafPrefs.java | 85 +++++++++ 11 files changed, 596 insertions(+), 6 deletions(-) diff --git a/platform/libs.flatlaf/external/binaries-list b/platform/libs.flatlaf/external/binaries-list index cb336c4..059194f 100644 --- a/platform/libs.flatlaf/external/binaries-list +++ b/platform/libs.flatlaf/external/binaries-list @@ -15,4 +15,4 @@ # specific language governing permissions and limitations # under the License. -A807C984F00B683C65503803720821F12E136E93 com.formdev:flatlaf:1.0 +21EF33DBED3B07C5A9E2BB67118BBDF0E930ACCC com.formdev:flatlaf:1.1.1 diff --git a/platform/libs.flatlaf/external/flatlaf-1.0-license.txt b/platform/libs.flatlaf/external/flatlaf-1.1.1-license.txt similarity index 99% rename from platform/libs.flatlaf/external/flatlaf-1.0-license.txt rename to platform/libs.flatlaf/external/flatlaf-1.1.1-license.txt index c2b9305..dd9f5f4 100644 --- a/platform/libs.flatlaf/external/flatlaf-1.0-license.txt +++ b/platform/libs.flatlaf/external/flatlaf-1.1.1-license.txt @@ -1,7 +1,7 @@ Name: FlatLaf Look and Feel Description: FlatLaf Look and Feel -Version: 1.0 -Files: flatlaf-1.0.jar +Version: 1.1.1 +Files: flatlaf-1.1.1.jar License: Apache-2.0 Origin: FormDev Software GmbH. URL: https://www.formdev.com/flatlaf/ diff --git a/platform/libs.flatlaf/nbproject/project.properties b/platform/libs.flatlaf/nbproject/project.properties index f0135fe..9018fcb 100644 --- a/platform/libs.flatlaf/nbproject/project.properties +++ b/platform/libs.flatlaf/nbproject/project.properties @@ -20,4 +20,4 @@ javac.compilerargs=-Xlint:unchecked javac.source=1.8 nbm.target.cluster=platform -release.external/flatlaf-1.0.jar=modules/ext/flatlaf-1.0.jar +release.external/flatlaf-1.1.1.jar=modules/ext/flatlaf-1.1.1.jar diff --git a/platform/libs.flatlaf/nbproject/project.xml b/platform/libs.flatlaf/nbproject/project.xml index 88ba2c3..79f5476 100644 --- a/platform/libs.flatlaf/nbproject/project.xml +++ b/platform/libs.flatlaf/nbproject/project.xml @@ -30,8 +30,8 @@ <package>com.formdev.flatlaf.util</package> </public-packages> <class-path-extension> - <runtime-relative-path>ext/flatlaf-1.0.jar</runtime-relative-path> - <binary-origin>external/flatlaf-1.0.jar</binary-origin> + <runtime-relative-path>ext/flatlaf-1.1.1.jar</runtime-relative-path> + <binary-origin>external/flatlaf-1.1.1.jar</binary-origin> </class-path-extension> </data> </configuration> diff --git a/platform/o.n.swing.laf.flatlaf/nbproject/project.xml b/platform/o.n.swing.laf.flatlaf/nbproject/project.xml index 06ad263..08b6834 100644 --- a/platform/o.n.swing.laf.flatlaf/nbproject/project.xml +++ b/platform/o.n.swing.laf.flatlaf/nbproject/project.xml @@ -82,6 +82,23 @@ <specification-version>7.75</specification-version> </run-dependency> </dependency> + <dependency> + <code-name-base>org.netbeans.modules.options.api</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>1.57</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util.lookup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.46</specification-version> + </run-dependency> + </dependency> </module-dependencies> <public-packages/> </data> diff --git a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/Bundle.properties b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/Bundle.properties index d6a62f7..5cf37b6 100644 --- a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/Bundle.properties +++ b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/Bundle.properties @@ -23,3 +23,13 @@ OpenIDE-Module-Short-Description=FlatLaf Look and Feels Editors/FontsColors/FlatLafDark=FlatLaf Dark Editors/FontsColors/FlatLafLight=FlatLaf Light + +FlatLaf_DisplayName=FlatLaf +KW_FlatLafOptions=FlatLaf, Look and Feel, Window decorations, Unified title bar, Embedded menu bar, underline menu, mnemonics + +FlatLafOptionsPanel.useWindowDecorationsCheckBox.text=&Window decorations +FlatLafOptionsPanel.restartLabel.text=(needs restart) +FlatLafOptionsPanel.unifiedTitleBarCheckBox.text=&Unified title bar background +FlatLafOptionsPanel.menuBarEmbeddedCheckBox.text=&Embedded menu bar +FlatLafOptionsPanel.underlineMenuSelectionCheckBox.text=Use underline menu &selection +FlatLafOptionsPanel.alwaysShowMnemonicsCheckBox.text=Always show &mnemonics diff --git a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLFCustoms.java b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLFCustoms.java index 0e198b8..cecbfa4 100644 --- a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLFCustoms.java +++ b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLFCustoms.java @@ -50,6 +50,13 @@ public class FlatLFCustoms extends LFCustoms { }; return new Object[] { + // options + "TitlePane.useWindowDecorations", FlatLafPrefs.isUseWindowDecorations(), + "TitlePane.unifiedBackground", FlatLafPrefs.isUnifiedTitleBar(), + "TitlePane.menuBarEmbedded", FlatLafPrefs.isMenuBarEmbedded(), + "MenuItem.selectionType", FlatLafPrefs.isUnderlineMenuSelection() ? "underline" : null, + "Component.hideMnemonics", !FlatLafPrefs.isAlwaysShowMnemonics(), + // necessary for org.openide.explorer.propertysheet.PropertySheet and others CONTROLFONT, UIManager.getFont("Label.font"), // NOI18N diff --git a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafOptionsPanel.form b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafOptionsPanel.form new file mode 100644 index 0000000..90aeab6 --- /dev/null +++ b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafOptionsPanel.form @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo"> + <EmptyBorder bottom="10" left="10" right="10" top="10"/> + </Border> + </Property> + </Properties> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Component id="useWindowDecorationsCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="restartLabel" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="unifiedTitleBarCheckBox" min="-2" max="-2" attributes="0"/> + <Component id="menuBarEmbeddedCheckBox" min="-2" max="-2" attributes="0"/> + <Component id="underlineMenuSelectionCheckBox" min="-2" max="-2" attributes="0"/> + <Component id="alwaysShowMnemonicsCheckBox" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace pref="155" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="useWindowDecorationsCheckBox" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="restartLabel" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="unifiedTitleBarCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="menuBarEmbeddedCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="underlineMenuSelectionCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="alwaysShowMnemonicsCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="156" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JCheckBox" name="useWindowDecorationsCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/netbeans/swing/laf/flatlaf/Bundle.properties" key="FlatLafOptionsPanel.useWindowDecorationsCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="useWindowDecorationsCheckBoxActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JCheckBox" name="menuBarEmbeddedCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/netbeans/swing/laf/flatlaf/Bundle.properties" key="FlatLafOptionsPanel.menuBarEmbeddedCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="menuBarEmbeddedCheckBoxActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JCheckBox" name="unifiedTitleBarCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/netbeans/swing/laf/flatlaf/Bundle.properties" key="FlatLafOptionsPanel.unifiedTitleBarCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="unifiedTitleBarCheckBoxActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JCheckBox" name="underlineMenuSelectionCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/netbeans/swing/laf/flatlaf/Bundle.properties" key="FlatLafOptionsPanel.underlineMenuSelectionCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="underlineMenuSelectionCheckBoxActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JCheckBox" name="alwaysShowMnemonicsCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/netbeans/swing/laf/flatlaf/Bundle.properties" key="FlatLafOptionsPanel.alwaysShowMnemonicsCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="alwaysShowMnemonicsCheckBoxActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="restartLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/netbeans/swing/laf/flatlaf/Bundle.properties" key="FlatLafOptionsPanel.restartLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafOptionsPanel.java b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafOptionsPanel.java new file mode 100644 index 0000000..d347e5d --- /dev/null +++ b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafOptionsPanel.java @@ -0,0 +1,209 @@ +/* + * 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.swing.laf.flatlaf; + +import com.formdev.flatlaf.util.SystemInfo; +import org.netbeans.spi.options.OptionsPanelController; + +/** + * @author Karl Tauber + */ +@OptionsPanelController.Keywords( + keywords={"#KW_FlatLafOptions"}, + location="Appearance", + tabTitle="#FlatLaf_DisplayName" +) +public class FlatLafOptionsPanel extends javax.swing.JPanel { + + private final FlatLafOptionsPanelController controller; + + /** + * Creates new form FlatLafOptionsPanel + */ + public FlatLafOptionsPanel(FlatLafOptionsPanelController controller) { + this.controller = controller; + initComponents(); + updateEnabled(); + } + + private void updateEnabled() { + boolean supportsWindowDecorations = SystemInfo.isWindows_10_orLater; + useWindowDecorationsCheckBox.setEnabled(supportsWindowDecorations); + restartLabel.setEnabled(supportsWindowDecorations); + unifiedTitleBarCheckBox.setEnabled(supportsWindowDecorations && useWindowDecorationsCheckBox.isSelected()); + menuBarEmbeddedCheckBox.setEnabled(supportsWindowDecorations && useWindowDecorationsCheckBox.isSelected()); + + restartLabel.setVisible(supportsWindowDecorations && FlatLafPrefs.isUseWindowDecorations() && !useWindowDecorationsCheckBox.isSelected()); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + useWindowDecorationsCheckBox = new javax.swing.JCheckBox(); + menuBarEmbeddedCheckBox = new javax.swing.JCheckBox(); + unifiedTitleBarCheckBox = new javax.swing.JCheckBox(); + underlineMenuSelectionCheckBox = new javax.swing.JCheckBox(); + alwaysShowMnemonicsCheckBox = new javax.swing.JCheckBox(); + restartLabel = new javax.swing.JLabel(); + + setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10)); + + org.openide.awt.Mnemonics.setLocalizedText(useWindowDecorationsCheckBox, org.openide.util.NbBundle.getMessage(FlatLafOptionsPanel.class, "FlatLafOptionsPanel.useWindowDecorationsCheckBox.text")); // NOI18N + useWindowDecorationsCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + useWindowDecorationsCheckBoxActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(menuBarEmbeddedCheckBox, org.openide.util.NbBundle.getMessage(FlatLafOptionsPanel.class, "FlatLafOptionsPanel.menuBarEmbeddedCheckBox.text")); // NOI18N + menuBarEmbeddedCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + menuBarEmbeddedCheckBoxActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(unifiedTitleBarCheckBox, org.openide.util.NbBundle.getMessage(FlatLafOptionsPanel.class, "FlatLafOptionsPanel.unifiedTitleBarCheckBox.text")); // NOI18N + unifiedTitleBarCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + unifiedTitleBarCheckBoxActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(underlineMenuSelectionCheckBox, org.openide.util.NbBundle.getMessage(FlatLafOptionsPanel.class, "FlatLafOptionsPanel.underlineMenuSelectionCheckBox.text")); // NOI18N + underlineMenuSelectionCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + underlineMenuSelectionCheckBoxActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(alwaysShowMnemonicsCheckBox, org.openide.util.NbBundle.getMessage(FlatLafOptionsPanel.class, "FlatLafOptionsPanel.alwaysShowMnemonicsCheckBox.text")); // NOI18N + alwaysShowMnemonicsCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + alwaysShowMnemonicsCheckBoxActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(restartLabel, org.openide.util.NbBundle.getMessage(FlatLafOptionsPanel.class, "FlatLafOptionsPanel.restartLabel.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(useWindowDecorationsCheckBox) + .addGap(18, 18, 18) + .addComponent(restartLabel)) + .addComponent(unifiedTitleBarCheckBox) + .addComponent(menuBarEmbeddedCheckBox) + .addComponent(underlineMenuSelectionCheckBox) + .addComponent(alwaysShowMnemonicsCheckBox)) + .addContainerGap(155, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(useWindowDecorationsCheckBox) + .addComponent(restartLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(unifiedTitleBarCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(menuBarEmbeddedCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(underlineMenuSelectionCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(alwaysShowMnemonicsCheckBox) + .addContainerGap(156, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + private void useWindowDecorationsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useWindowDecorationsCheckBoxActionPerformed + updateEnabled(); + fireChanged(); + }//GEN-LAST:event_useWindowDecorationsCheckBoxActionPerformed + + private void unifiedTitleBarCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_unifiedTitleBarCheckBoxActionPerformed + fireChanged(); + }//GEN-LAST:event_unifiedTitleBarCheckBoxActionPerformed + + private void menuBarEmbeddedCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuBarEmbeddedCheckBoxActionPerformed + fireChanged(); + }//GEN-LAST:event_menuBarEmbeddedCheckBoxActionPerformed + + private void underlineMenuSelectionCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_underlineMenuSelectionCheckBoxActionPerformed + fireChanged(); + }//GEN-LAST:event_underlineMenuSelectionCheckBoxActionPerformed + + private void alwaysShowMnemonicsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_alwaysShowMnemonicsCheckBoxActionPerformed + fireChanged(); + }//GEN-LAST:event_alwaysShowMnemonicsCheckBoxActionPerformed + + private void fireChanged() { + boolean isChanged = false; + if(useWindowDecorationsCheckBox.isSelected() != FlatLafPrefs.isUseWindowDecorations() + || unifiedTitleBarCheckBox.isSelected() != FlatLafPrefs.isUnifiedTitleBar() + || menuBarEmbeddedCheckBox.isSelected() != FlatLafPrefs.isMenuBarEmbedded() + || underlineMenuSelectionCheckBox.isSelected() != FlatLafPrefs.isUnderlineMenuSelection() + || alwaysShowMnemonicsCheckBox.isSelected() != FlatLafPrefs.isAlwaysShowMnemonics()) { + isChanged = true; + } + controller.changed(isChanged); + } + + protected void load() { + useWindowDecorationsCheckBox.setSelected(FlatLafPrefs.isUseWindowDecorations()); + unifiedTitleBarCheckBox.setSelected(FlatLafPrefs.isUnifiedTitleBar()); + menuBarEmbeddedCheckBox.setSelected(FlatLafPrefs.isMenuBarEmbedded()); + underlineMenuSelectionCheckBox.setSelected(FlatLafPrefs.isUnderlineMenuSelection()); + alwaysShowMnemonicsCheckBox.setSelected(FlatLafPrefs.isAlwaysShowMnemonics()); + + updateEnabled(); + } + + protected boolean store() { + FlatLafPrefs.setUseWindowDecorations(useWindowDecorationsCheckBox.isSelected()); + FlatLafPrefs.setUnifiedTitleBar(unifiedTitleBarCheckBox.isSelected()); + FlatLafPrefs.setMenuBarEmbedded(menuBarEmbeddedCheckBox.isSelected()); + FlatLafPrefs.setUnderlineMenuSelection(underlineMenuSelectionCheckBox.isSelected()); + FlatLafPrefs.setAlwaysShowMnemonics(alwaysShowMnemonicsCheckBox.isSelected()); + return false; + } + + boolean valid() { + // TODO check whether form is consistent and complete + return true; + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox alwaysShowMnemonicsCheckBox; + private javax.swing.JCheckBox menuBarEmbeddedCheckBox; + private javax.swing.JLabel restartLabel; + private javax.swing.JCheckBox underlineMenuSelectionCheckBox; + private javax.swing.JCheckBox unifiedTitleBarCheckBox; + private javax.swing.JCheckBox useWindowDecorationsCheckBox; + // End of variables declaration//GEN-END:variables +} diff --git a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafOptionsPanelController.java b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafOptionsPanelController.java new file mode 100644 index 0000000..1114aab --- /dev/null +++ b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafOptionsPanelController.java @@ -0,0 +1,141 @@ +/* + * 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.swing.laf.flatlaf; + +import com.formdev.flatlaf.FlatLaf; +import java.awt.Window; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import javax.swing.JComponent; +import javax.swing.SwingUtilities; +import javax.swing.UIDefaults; +import javax.swing.UIManager; +import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; + +/** + * + * @author charly + */ +@OptionsPanelController.SubRegistration( + displayName="#FlatLaf_DisplayName", + keywords="#KW_FlatLafOptions", + keywordsCategory="Appearance/FlatLaf", + location = "Appearance" +) +public class FlatLafOptionsPanelController extends OptionsPanelController { + + private FlatLafOptionsPanel panel; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private boolean changed; + + @Override + public void update() { + getPanel().load(); + changed = false; + } + + @Override + public void applyChanges() { + if (!changed) { + return; + } + + SwingUtilities.invokeLater(() -> { + boolean oldUseWindowDecorations = FlatLafPrefs.isUseWindowDecorations(); + boolean oldUnifiedTitleBar = FlatLafPrefs.isUnifiedTitleBar(); + boolean oldMenuBarEmbedded = FlatLafPrefs.isMenuBarEmbedded(); + boolean oldUnderlineMenuSelection = FlatLafPrefs.isUnderlineMenuSelection(); + boolean oldAlwaysShowMnemonics = FlatLafPrefs.isAlwaysShowMnemonics(); + + getPanel().store(); + changed = false; + + UIDefaults defaults = UIManager.getDefaults(); + defaults.put("TitlePane.useWindowDecorations", FlatLafPrefs.isUseWindowDecorations()); + defaults.put("TitlePane.unifiedBackground", FlatLafPrefs.isUnifiedTitleBar()); + defaults.put("TitlePane.menuBarEmbedded", FlatLafPrefs.isMenuBarEmbedded()); + defaults.put("MenuItem.selectionType", FlatLafPrefs.isUnderlineMenuSelection() ? "underline" : null); + defaults.put("Component.hideMnemonics", !FlatLafPrefs.isAlwaysShowMnemonics()); + + if (oldUseWindowDecorations != FlatLafPrefs.isUseWindowDecorations() + || oldUnifiedTitleBar != FlatLafPrefs.isUnifiedTitleBar()) { + FlatLaf.updateUI(); + } else if (oldMenuBarEmbedded != FlatLafPrefs.isMenuBarEmbedded() + || oldUnderlineMenuSelection != FlatLafPrefs.isUnderlineMenuSelection() + || oldAlwaysShowMnemonics != FlatLafPrefs.isAlwaysShowMnemonics()) { + for (Window w : Window.getWindows()) { + w.revalidate(); + w.repaint(); + } + } + }); + } + + @Override + public void cancel() { + // need not do anything special, if no changes have been persisted yet + } + + @Override + public boolean isValid() { + return getPanel().valid(); + } + + @Override + public boolean isChanged() { + return changed; + } + + @Override + public HelpCtx getHelpCtx() { + return null; + } + + @Override + public JComponent getComponent(Lookup masterLookup) { + return getPanel(); + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + + protected FlatLafOptionsPanel getPanel() { + if (panel == null) { + panel = new FlatLafOptionsPanel(this); + } + return panel; + } + + protected void changed(boolean isChanged) { + if (!changed) { + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true); + } + changed = isChanged; + pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null); + } +} diff --git a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafPrefs.java b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafPrefs.java new file mode 100644 index 0000000..403a8e7 --- /dev/null +++ b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLafPrefs.java @@ -0,0 +1,85 @@ +/* + * 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.swing.laf.flatlaf; + +import java.util.prefs.Preferences; +import org.openide.util.NbPreferences; + +/** + * + * @author Karl Tauber + */ +class FlatLafPrefs { + + private static final String USE_WINDOW_DECORATIONS = "useWindowDecorations"; + private static final String UNIFIED_TITLE_BAR = "unifiedTitleBar"; + private static final String MENU_BAR_EMBEDDED = "menuBarEmbedded"; + private static final String UNDERLINE_MENU_SELECTION = "underlineMenuSelection"; + private static final String ALWAYS_SHOW_MNEMONICS = "alwaysShowMnemonics"; + + private static final Preferences prefs = NbPreferences.forModule(FlatLafPrefs.class); + + static boolean isUseWindowDecorations() { + return prefs.getBoolean(USE_WINDOW_DECORATIONS, true); + } + + static void setUseWindowDecorations(boolean value) { + putBoolean(USE_WINDOW_DECORATIONS, value, true); + } + + static boolean isUnifiedTitleBar() { + return prefs.getBoolean(UNIFIED_TITLE_BAR, false); + } + + static void setUnifiedTitleBar(boolean value) { + putBoolean(UNIFIED_TITLE_BAR, value, false); + } + + static boolean isMenuBarEmbedded() { + return prefs.getBoolean(MENU_BAR_EMBEDDED, true); + } + + static void setMenuBarEmbedded(boolean value) { + putBoolean(MENU_BAR_EMBEDDED, value, true); + } + + static boolean isUnderlineMenuSelection() { + return prefs.getBoolean(UNDERLINE_MENU_SELECTION, false); + } + + static void setUnderlineMenuSelection(boolean value) { + putBoolean(UNDERLINE_MENU_SELECTION, value, false); + } + + static boolean isAlwaysShowMnemonics() { + return prefs.getBoolean(ALWAYS_SHOW_MNEMONICS, false); + } + + static void setAlwaysShowMnemonics(boolean value) { + putBoolean(ALWAYS_SHOW_MNEMONICS, value, false); + } + + private static void putBoolean(String key, boolean value, boolean def) { + if (value != def) { + prefs.putBoolean(key, value); + } else { + prefs.remove(key); + } + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists