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();
-    }
-}
-