Mercurial > hg > release > thermostat-1.6
changeset 1937:4d83b41ff85b
Unify c.r.t.client.swing.components.SearchField with c.r.t.client.swing.internal.search.SearchField
PR3033
Reviewed-by: jkang
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-June/019680.html
author | Anirudhan Mukundan <amukunda@redhat.com> |
---|---|
date | Thu, 23 Jun 2016 11:14:19 -0400 |
parents | dde5c37cd8b7 |
children | 85d6dcfb7ef7 |
files | client/swing/src/main/java/com/redhat/thermostat/client/swing/components/SearchField.java client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/MainWindow.java client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/search/SearchField.java |
diffstat | 3 files changed, 81 insertions(+), 183 deletions(-) [+] |
line wrap: on
line diff
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/SearchField.java Thu Jun 23 10:05:46 2016 -0400 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/SearchField.java Thu Jun 23 11:14:19 2016 -0400 @@ -38,23 +38,30 @@ import java.awt.BorderLayout; import java.awt.Color; -import java.awt.Insets; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Shape; import java.awt.event.ActionEvent; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; -import javax.swing.BorderFactory; +import javax.swing.Box; import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import com.redhat.thermostat.client.locale.LocaleResources; +import com.redhat.thermostat.client.swing.GraphicsUtils; import com.redhat.thermostat.client.swing.IconResource; import com.redhat.thermostat.client.swing.internal.search.BaseSearchProvider; +import com.redhat.thermostat.client.ui.Palette; import com.redhat.thermostat.shared.locale.LocalizedString; import com.redhat.thermostat.shared.locale.Translate; @@ -71,97 +78,108 @@ public static final String VIEW_NAME = "searchField"; private static final Translate<LocaleResources> translator = LocaleResources.createLocalizer(); + private static final Color hintForegroundColor = Palette.DARK_GRAY.getColor(); - private final ThermostatTextField searchField = new ThermostatTextField(); + private final ThermostatTextField searchField; - private final AtomicReference<String> searchText = new AtomicReference<String>(""); + private final AtomicReference<String> searchText = new AtomicReference<>(""); private final AtomicReference<LocalizedString> label = new AtomicReference<>(translator.localize(LocaleResources.SEARCH_HINT)); private final AtomicBoolean labelDisplayed = new AtomicBoolean(true); + private final Color originalForegroundColor; public SearchField() { - setLayout(new BorderLayout()); - - // TODO move this icon inside the search field - JLabel searchIcon = new JLabel(IconResource.SEARCH.getIcon()); - searchIcon.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + this(0); + } - searchField.setText(label.get().getContents()); + public SearchField(int columns) { + searchField = new ThermostatTextField(columns); searchField.setName(VIEW_NAME); - /* the insets are so we can place the actual icon inside the searchField */ - searchField.setMargin(new Insets(0, 0, 0, 30)); - + searchField.setBackground(Palette.WHITE.getColor()); + searchField.setBorder(new EmptyBorder(2, 5, 2, 2)); + searchField.getCaret().setBlinkRate(0); searchField.getDocument().addDocumentListener(new DocumentListener() { private String previousText = searchText.get(); @Override - public void removeUpdate(DocumentEvent event) { - changed(event.getDocument()); - } - - @Override - public void insertUpdate(DocumentEvent event) { - changed(event.getDocument()); - } - - @Override - public void changedUpdate(DocumentEvent event) { - changed(event.getDocument()); - } - - private void changed(Document doc) { + public void changedUpdate(DocumentEvent e) { + Document doc = e.getDocument(); if (!labelDisplayed.get()) { String filter = null; try { filter = doc.getText(0, doc.getLength()); + if (!(filter.equals(previousText))) { + previousText = filter; + fireViewAction(SearchAction.PERFORM_SEARCH, searchText.get()); + } } catch (BadLocationException ble) { // ignore } + searchText.set(filter); + } + } - searchText.set(filter); - if (!(filter.equals(previousText))) { - previousText = filter; - fireViewAction(SearchAction.PERFORM_SEARCH, searchText.get()); - } - } + @Override + public void insertUpdate(DocumentEvent e) { + changedUpdate(e); + } + + @Override + public void removeUpdate(DocumentEvent e) { + changedUpdate(e); } }); - final Color originalForegroundColor = searchField.getForeground(); + originalForegroundColor = searchField.getForeground(); searchField.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { if (searchText.get().equals("")) { - labelDisplayed.set(true); - searchField.setForeground(Color.GRAY); - searchField.setText(label.get().getContents()); + setLabelEnabled(true); } } @Override public void focusGained(FocusEvent e) { if (labelDisplayed.get()) { - labelDisplayed.set(false); - searchField.setForeground(originalForegroundColor); - searchField.setText(""); + setLabelEnabled(false); } - } }); - final java.awt.event.ActionListener searchActionListener = new java.awt.event.ActionListener() { + searchField.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { fireViewAction(SearchAction.PERFORM_SEARCH, searchField.getText()); } - }; + }); - searchField.addActionListener(searchActionListener); + final JLabel searchLabel = new JLabel(IconResource.SEARCH.getIcon()); + JPanel iconPanel = new JPanel(); + iconPanel.setLayout(new BorderLayout()); + iconPanel.add(searchLabel, BorderLayout.CENTER); + iconPanel.add(Box.createRigidArea(new Dimension(2, 5)), BorderLayout.WEST); + iconPanel.setOpaque(false); - add(searchField); - add(searchIcon, BorderLayout.LINE_END); + setFocusable(true); + setLayout(new BorderLayout()); + setOpaque(false); + setBorder(new EmptyBorder(0, 0, 0, 0)); + setLabelEnabled(true); + add(iconPanel, BorderLayout.WEST); + add(searchField, BorderLayout.CENTER); + } + private void setLabelEnabled(boolean isEnabled) { + labelDisplayed.set(isEnabled); + if (isEnabled) { + searchField.setForeground(hintForegroundColor); + searchField.setText(label.get().getContents()); + } else { + searchField.setForeground(originalForegroundColor); + searchField.setText(""); + } } public String getSearchText() { @@ -176,12 +194,25 @@ public void setLabel(LocalizedString label) { this.label.set(label); if (labelDisplayed.get()) { - searchField.setText(this.label.get().getContents()); + setLabelEnabled(true); } } public void setTooltip(final LocalizedString tooltip) { searchField.setToolTipText(tooltip.getContents()); } + + @Override + protected void paintComponent(Graphics g) { + GraphicsUtils utils = GraphicsUtils.getInstance(); + Graphics2D graphics = utils.createAAGraphics(g); + + graphics.setPaint(Palette.WHITE.getColor()); + + Shape shape = utils.getRoundShape(getWidth(), getHeight()); + graphics.fill(shape); + + graphics.dispose(); + } }
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/MainWindow.java Thu Jun 23 10:05:46 2016 -0400 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/MainWindow.java Thu Jun 23 11:14:19 2016 -0400 @@ -83,7 +83,7 @@ import com.redhat.thermostat.client.swing.internal.progress.SwingProgressNotifier; import com.redhat.thermostat.client.swing.internal.progress.SwingProgressNotifier.PropertyChange; import com.redhat.thermostat.client.swing.internal.search.ReferenceFieldSearchFilter; -import com.redhat.thermostat.client.swing.internal.search.SearchField; +import com.redhat.thermostat.client.swing.components.SearchField; import com.redhat.thermostat.client.swing.internal.sidepane.ExpanderComponent; import com.redhat.thermostat.client.swing.internal.sidepane.ThermostatSidePanel; import com.redhat.thermostat.client.swing.internal.splitpane.ThermostatSplitPane; @@ -361,7 +361,7 @@ private void installSearchFiled() { // install the search field in the sidepane for now - SearchField searchField = new SearchField(); + SearchField searchField = new SearchField(20); navigationPanel.getTopPane().add(searchField); filter = new ReferenceFieldSearchFilter(searchField, hostTreeController);
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/search/SearchField.java Thu Jun 23 10:05:46 2016 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -/* - * Copyright 2012-2016 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.internal.search; - -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Shape; - -import javax.swing.Box; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.border.EmptyBorder; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.text.BadLocationException; -import javax.swing.text.Document; - -import com.redhat.thermostat.client.swing.GraphicsUtils; -import com.redhat.thermostat.client.swing.components.FontAwesomeIcon; -import com.redhat.thermostat.client.swing.components.Icon; -import com.redhat.thermostat.client.swing.components.ThermostatTextField; -import com.redhat.thermostat.client.ui.Palette; - -@SuppressWarnings("serial") -public class SearchField extends BaseSearchProvider { - - private ThermostatTextField searchField; - - public SearchField() { - setFocusable(true); - - setLayout(new BorderLayout()); - - final Icon searchIcon = - new FontAwesomeIcon('\uf002', 12, Palette.DARK_GRAY.getColor()); - - searchField = new ThermostatTextField(20); - - final JLabel searchLabel = new JLabel(searchIcon); - - JPanel iconPanel = new JPanel(); - iconPanel.setLayout(new BorderLayout()); - iconPanel.add(searchLabel, BorderLayout.CENTER); - iconPanel.add(Box.createRigidArea(new Dimension(2, 5)), BorderLayout.WEST); - - iconPanel.setOpaque(false); - - add(iconPanel, BorderLayout.WEST); - add(searchField, BorderLayout.CENTER); - - searchField.setBackground(Palette.WHITE.getColor()); - searchField.setBorder(new EmptyBorder(0, 5, 0, 0)); - searchField.setForeground(Palette.DARK_GRAY.getColor()); - - searchField.getCaret().setBlinkRate(0); - searchField.setCaretColor(Palette.DARK_GRAY.getColor()); - - setOpaque(false); - setBorder(new EmptyBorder(0, 0, 0, 0)); - - searchField.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void changedUpdate(DocumentEvent e) { - Document document = e.getDocument(); - try { - String text = document.getText(0, document.getLength()); - fireViewAction(SearchAction.PERFORM_SEARCH, text); - - } catch (BadLocationException ignore) {} - } - - @Override - public void insertUpdate(DocumentEvent e) { - changedUpdate(e); - } - - @Override - public void removeUpdate(DocumentEvent e) { - changedUpdate(e); - } - }); - } - - @Override - protected void paintComponent(Graphics g) { - GraphicsUtils utils = GraphicsUtils.getInstance(); - Graphics2D graphics = utils.createAAGraphics(g); - - graphics.setPaint(Palette.WHITE.getColor()); - - Shape shape = utils.getRoundShape(getWidth(), getHeight()); - graphics.fill(shape); - - graphics.dispose(); - } -} -