diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/search/Find.java b/org.adempiere.ui.swing/src/org/compiere/apps/search/Find.java index 2a25a7066a..b8b21f0363 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/search/Find.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/search/Find.java @@ -68,7 +68,6 @@ import org.compiere.apps.ADialog; import org.compiere.apps.AEnv; import org.compiere.apps.ConfirmPanel; import org.compiere.apps.StatusBar; -import org.compiere.grid.ed.AutoCompletion; import org.compiere.grid.ed.VEditor; import org.compiere.grid.ed.VEditorFactory; import org.compiere.grid.ed.VLookup; @@ -86,6 +85,7 @@ import org.compiere.model.MUserQuery; import org.compiere.model.X_AD_Column; import org.compiere.swing.CButton; import org.compiere.swing.CComboBox; +import org.compiere.swing.CComboBoxEditable; import org.compiere.swing.CDialog; import org.compiere.swing.CLabel; import org.compiere.swing.CPanel; @@ -117,7 +117,7 @@ public final class Find extends CDialog /** * */ - private static final long serialVersionUID = -5064336990363669996L; + private static final long serialVersionUID = -8546399473944170334L; private int m_AD_Tab_ID; /** @@ -222,7 +222,7 @@ public final class Find extends CDialog private ConfirmPanel confirmPanelA = new ConfirmPanel(true, true, false, false, false, false, true); private CButton bIgnore = new CButton(); private JToolBar toolBar = new JToolBar(); - private CComboBox fQueryName = new CComboBox(); + private CComboBoxEditable fQueryName = new CComboBoxEditable(); private CButton bSave = new CButton(); private CButton bNew = new CButton(); private CButton bDelete = new CButton(); @@ -467,7 +467,6 @@ public final class Find extends CDialog for (int i = 0; i < m_findFields.length; i++) { GridField mField = m_findFields[i]; - String columnName = mField.getColumnName(); // Make Yes-No searchable as list if (mField.getVO().displayType == DisplayType.YesNo) diff --git a/org.adempiere.ui.swing/src/org/compiere/swing/CComboBoxEditable.java b/org.adempiere.ui.swing/src/org/compiere/swing/CComboBoxEditable.java new file mode 100644 index 0000000000..c396ca3988 --- /dev/null +++ b/org.adempiere.ui.swing/src/org/compiere/swing/CComboBoxEditable.java @@ -0,0 +1,348 @@ +/****************************************************************************** + * Product: Adempiere ERP & CRM Smart Business Solution * + * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program 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 this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + * For the text or an alternative of this public license, you may reach us * + * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * + * or via info@compiere.org or http://www.compiere.org/license.html * + *****************************************************************************/ +package org.compiere.swing; + +import java.awt.Color; +import java.awt.event.MouseListener; +import java.util.Vector; + +import javax.swing.ComboBoxModel; +import javax.swing.DefaultComboBoxModel; +import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.plaf.ComboBoxUI; + +import org.adempiere.plaf.AdempierePLAF; +import org.compiere.plaf.CompiereComboBoxUI; +import org.compiere.util.NamePair; +import org.compiere.util.Trace; + +/** + * Adempiere Colored Combo Box. + * + * @author Jorg Janke + * @version $Id: CComboBoxEditable.java,v 1.2 2006/07/30 00:52:24 jjanke Exp $ + */ +public class CComboBoxEditable extends JComboBox + implements CEditor +{ + /** + * + */ + private static final long serialVersionUID = -3036970630981224309L; + + /** + * Creates a JComboBox that takes it's items from an + * existing ComboBoxModel. Since the + * ComboBoxModel is provided, a combo box created using + * this constructor does not create a default combo box model and + * may impact how the insert, remove and add methods behave. + * + * @param aModel the ComboBoxModel that provides the + * displayed list of items + * @see DefaultComboBoxModel + */ + public CComboBoxEditable(ComboBoxModel aModel) + { + super(aModel); + init(); + } // CComboBoxEditable + + /** + * Creates a JComboBox that contains the elements + * in the specified array. By default the first item in the array + * (and therefore the data model) becomes selected. + * + * @param items an array of objects to insert into the combo box + * @see DefaultComboBoxModel + */ + public CComboBoxEditable(final Object items[]) + { + super(items); + init(); + } // CComboBoxEditable + + /** + * Creates a JComboBox that contains the elements + * in the specified array. By default the first item in the array + * (and therefore the data model) becomes selected. + * + * @param items an array of objects to insert into the combo box + * @param key set selected if exists + * @see DefaultComboBoxModel + */ + public CComboBoxEditable(final Object items[], String key) + { + this(items); + if (key == null) + return; + for (int i = 0; i < 0; i++) + { + Object item = items[i]; + if (item == null) + continue; + boolean found = false; + if (item instanceof NamePair) + found = ((NamePair)item).getID().equals(key); + else + found = item.toString().equals(key); + if (found) + { + setSelectedIndex(i); + break; + } + } + } // CComboBoxEditable + + /** + * Creates a JComboBox that contains the elements + * in the specified Vector. By default the first item in the vector + * and therefore the data model) becomes selected. + * + * @param items an array of vectors to insert into the combo box + * @see DefaultComboBoxModel + */ + public CComboBoxEditable(Vector items) + { + super(items); + init(); + } // CComboBoxEditable + + /** + * Creates a JComboBox with a default data model. + * The default data model is an empty list of objects. + * Use addItem to add items. By default the first item + * in the data model becomes selected. + * + * @see DefaultComboBoxModel + */ + public CComboBoxEditable() + { + super(); + init(); + } // CComboBoxEditable + + /** Field Height */ + public static int FIELD_HIGHT = 0; + + /** + * Common Init + */ + private void init() + { + FIELD_HIGHT = getPreferredSize().height; + } // init + + + /*************************************************************************/ + + /** Icon */ + private Icon m_icon = null; + + /** + * Set Icon of arrow button to icon + * @param defaultIcon Icon to be displayed + */ + public void setIcon (Icon defaultIcon) + { + if (getUI() instanceof CompiereComboBoxUI) + ((CompiereComboBoxUI)getUI()).setIcon(defaultIcon); + m_icon = defaultIcon; + } // setIcon + + /** + * Set UI and re-set Icon for arrow button + * @param ui + */ + public void setUI (ComboBoxUI ui) + { + super.setUI(ui); + if (m_icon != null && ui instanceof CompiereComboBoxUI) + ((CompiereComboBoxUI)getUI()).setIcon(m_icon); + } // setUI + + /** + * Display Popup. + * Called from AdempiereComboPopup and allows to implement + * alternative actions than showing the popup + * @return if true, the popup should be displayed + */ + public boolean displayPopup() + { + return true; + } // displayPopup + + /*************************************************************************/ + + /** Mandatory (default false) */ + private boolean m_mandatory = false; + + /** + * Set Editor Mandatory + * @param mandatory true, if you have to enter data + */ + public void setMandatory (boolean mandatory) + { + m_mandatory = mandatory; + setBackground(false); + } // setMandatory + + /** + * Is Field mandatory + * @return true, if mandatory + */ + public boolean isMandatory() + { + return m_mandatory; + } // isMandatory + + /** + * Enable Editor + * @param rw true, if you can enter/select data + */ + public void setReadWrite (boolean rw) + { + if (super.isEnabled() != rw) + super.setEnabled (rw); + setBackground(false); + } // setReadWrite + + /** + * Is it possible to edit + * @return true, if editable + */ + public boolean isReadWrite() + { + return super.isEnabled(); + } // isReadWrite + + /** + * Set Background based on editable / mandatory / error + * @param error if true, set background to error color, otherwise mandatory/editable + */ + public void setBackground (boolean error) + { + if (error) + setBackground(AdempierePLAF.getFieldBackground_Error()); + else if (!isReadWrite()) + setBackground(AdempierePLAF.getFieldBackground_Inactive()); + else if (m_mandatory) + setBackground(AdempierePLAF.getFieldBackground_Mandatory()); + else + setBackground(AdempierePLAF.getFieldBackground_Normal()); + } // setBackground + + /** + * Set Background + * @param bg + */ + public void setBackground (Color bg) + { + if (bg.equals(getBackground())) + return; + // Set same color for editor component - teo_sarca [ 1735122 ] + if (getEditor() != null && getEditor().getEditorComponent() != null) + getEditor().getEditorComponent().setBackground(bg); + super.setBackground(bg); + } // setBackground + + /** + * Set Editor to value + * @param value value of the editor + */ + public void setValue (Object value) + { + super.setSelectedItem(value); + } // setValue + + /** + * Return Editor value + * @return current value + */ + public Object getValue() + { + return super.getSelectedItem(); + } // getValue + + /** + * Return Display Value + * @return displayed String value + */ + public String getDisplay() + { + Object o = super.getSelectedItem(); + if (o == null) + return ""; + return o.toString(); + } // getDisplay + + /** + * Add Mouse Listener - 1-4-0 Bug. + * Bug in 1.4.0 Metal: arrowButton gets Mouse Events, so add the JComboBox + * MouseListeners to the arrowButton - No context menu if right-click + * @see CompiereComboBoxUI#installUI(JComponent) + * @param ml + */ + public void addMouseListener (MouseListener ml) + { + super.addMouseListener(ml); + // ignore calls from javax.swing.plaf.basic.BasicComboBoxUI.installListeners(BasicComboBoxUI.java:271) + if (getUI() instanceof CompiereComboBoxUI && !Trace.getCallerClass(1).startsWith("javax")) + { + JButton b = ((CompiereComboBoxUI)getUI()).getArrowButton(); + if (b != null) + b.addMouseListener(ml); + } + //begin vpj-cd e-evolution + if (getUI() instanceof org.adempiere.plaf.AdempiereComboBoxUI && !Trace.getCallerClass(1).startsWith("javax")) + { + JButton b = ((org.adempiere.plaf.AdempiereComboBoxUI)getUI()).getArrowButton(); + if (b != null) + b.addMouseListener(ml); + } + //end vpj-cd e-evolution + } // addMouseListener + + /** + * Remove Mouse Listener. + * @param ml + */ + public void removeMouseListener (MouseListener ml) + { + super.removeMouseListener(ml); + if (getUI() instanceof CompiereComboBoxUI) + { + JButton b = ((CompiereComboBoxUI)getUI()).getArrowButton(); + if (b != null) + b.removeMouseListener(ml); + } + } // removeMouseListener + + /** + * Set Action Command + * @param actionCommand command + */ + public void setActionCommand (String actionCommand) + { + super.setActionCommand (actionCommand); + if (getName() == null && actionCommand != null && actionCommand.length() > 0) + setName(actionCommand); + } // setActionCommand + +} // CComboBoxEditable