Mercurial > hg > release > thermostat-0.5
changeset 828:a03d6e46b29d
Tweak popup menues
review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-November/004076.html
reviewed-by: jerboaa
author | Mario Torre <neugens.limasoftware@gmail.com> |
---|---|
date | Mon, 10 Dec 2012 12:34:30 +0100 |
parents | 518cc2809bd2 |
children | 4a2c3aa5742e |
files | client/swing/src/main/java/com/redhat/thermostat/client/swing/MainWindow.java client/swing/src/main/java/com/redhat/thermostat/client/swing/components/HeaderPanel.java client/swing/src/main/java/com/redhat/thermostat/client/swing/components/ThermostatPopupMenu.java client/swing/src/main/java/com/redhat/thermostat/client/swing/components/TranslucencyUtils.java client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/Main.java |
diffstat | 5 files changed, 149 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/MainWindow.java Fri Dec 07 17:31:35 2012 -0500 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/MainWindow.java Mon Dec 10 12:34:30 2012 +0100 @@ -103,6 +103,7 @@ import com.redhat.thermostat.client.swing.components.EdtHelper; import com.redhat.thermostat.client.swing.components.HtmlTextBuilder; import com.redhat.thermostat.client.swing.components.StatusBar; +import com.redhat.thermostat.client.swing.components.ThermostatPopupMenu; import com.redhat.thermostat.client.swing.internal.MainView; import com.redhat.thermostat.client.swing.internal.components.DecoratedDefaultMutableTreeNode; import com.redhat.thermostat.client.swing.views.SearchFieldSwingView; @@ -326,7 +327,7 @@ private ActionNotifier<Action> actionNotifier = new ActionNotifier<>(this); - private JPopupMenu vmContextMenu; + private ThermostatPopupMenu vmContextMenu; private StatusBar statusBar; private final DefaultMutableTreeNode publishedRoot = @@ -501,7 +502,7 @@ } private void registerContextActionListener(JTree agentVmTree2) { - vmContextMenu = new JPopupMenu(); + vmContextMenu = new ThermostatPopupMenu(); agentVmTree2.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) {
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/HeaderPanel.java Fri Dec 07 17:31:35 2012 -0500 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/HeaderPanel.java Mon Dec 10 12:34:30 2012 +0100 @@ -179,7 +179,7 @@ hasButtons = true; } - class PreferencesPopup extends JPopupMenu { + class PreferencesPopup extends ThermostatPopupMenu { JMenuItem preferencesMenu; public PreferencesPopup() { // TODO: localize
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/ThermostatPopupMenu.java Mon Dec 10 12:34:30 2012 +0100 @@ -0,0 +1,68 @@ +/* + * Copyright 2012 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * <http://www.gnu.org/licenses/>. + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.client.swing.components; + +import java.awt.Window; + +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; + +@SuppressWarnings("serial") +public class ThermostatPopupMenu extends JPopupMenu { + + @Override + public void setVisible(boolean visible) { + + if (TranslucencyUtils.TRANSLUCENT && !visible) { + setTranslucencyLevel(TranslucencyUtils.OPAQUE); + } + + super.setVisible(visible); + + if (TranslucencyUtils.TRANSLUCENT && visible) { + setTranslucencyLevel(TranslucencyUtils.TRANSPARENCY); + } + } + + private void setTranslucencyLevel(float level) { + try { + Window ourWindow = SwingUtilities.getWindowAncestor(this); + ourWindow.setOpacity(level); + + } catch (Throwable ignore) {} + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/TranslucencyUtils.java Mon Dec 10 12:34:30 2012 +0100 @@ -0,0 +1,72 @@ +/* + * Copyright 2012 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * <http://www.gnu.org/licenses/>. + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.client.swing.components; + +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.GraphicsDevice.WindowTranslucency; + +class TranslucencyUtils { + public static final boolean TRANSLUCENT; + public static final float TRANSPARENCY; + public static final float OPAQUE = 1.0f; + + static { + ThermostatPopupMenu.setDefaultLightWeightPopupEnabled(false); + + boolean translucent = !Boolean.getBoolean("com.redhat.thermostat.popup.opaque"); + if (translucent) { + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice gd = ge.getDefaultScreenDevice(); + translucent = gd.isWindowTranslucencySupported(WindowTranslucency.PERPIXEL_TRANSLUCENT); + } + + float transparency = 0.90f; + String transparencyProp = System.getProperty("com.redhat.thermostat.popup.transparency"); + if (transparencyProp != null) { + try { + transparency = Float.parseFloat(transparencyProp); + if (transparency > 1 || transparency < 0) { + translucent = false; + } + } catch (Throwable ignore) {} + } + + TRANSLUCENT = translucent; + TRANSPARENCY = transparency; + } +}
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/Main.java Fri Dec 07 17:31:35 2012 -0500 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/Main.java Mon Dec 10 12:34:30 2012 +0100 @@ -121,8 +121,12 @@ } } + // Thermostat JPopupMenu instances should all be + // ThermostatPopupmenu, so this is redundant, but done in case + // some client code doesn't use the internal popup + JPopupMenu.setDefaultLightWeightPopupEnabled(false); + // TODO: move them in an appropriate place - JPopupMenu.setDefaultLightWeightPopupEnabled(false); UIManager.getDefaults().put("OptionPane.buttonOrientation", SwingConstants.RIGHT); UIManager.getDefaults().put("OptionPane.isYesLast", true); UIManager.getDefaults().put("OptionPane.sameSizeButtons", true);