1 14 package org.compiere.grid.ed; 15 16 import java.awt.*; 17 import java.awt.event.*; 18 import java.text.*; 19 import javax.swing.*; 20 import java.math.*; 21 import java.beans.*; 22 import java.sql.*; 23 24 import org.compiere.apps.*; 25 import org.compiere.util.*; 26 import org.compiere.model.*; 27 import org.compiere.plaf.*; 28 import org.compiere.swing.*; 29 30 36 public class VLocator extends JComponent 37 implements VEditor, ActionListener 38 { 39 42 public VLocator () 43 { 44 this("M_Locator_ID", false, false, true, null, 0); 45 } 47 57 public VLocator(String columnName, boolean mandatory, boolean isReadOnly, boolean isUpdateable, 58 MLocatorLookup mLocator, int WindowNo) 59 { 60 super(); 61 super.setName(columnName); 62 m_columnName = columnName; 63 m_mLocator = mLocator; 64 m_WindowNo = WindowNo; 65 LookAndFeel.installBorder(this, "TextField.border"); 67 this.setLayout(new BorderLayout()); 68 this.setPreferredSize(m_text.getPreferredSize()); int height = m_text.getPreferredSize().height; 71 72 m_text.setBorder(null); 74 m_text.setEditable(true); 75 m_text.setFocusable(true); 76 m_text.addMouseListener(new VLocator_mouseAdapter(this)); m_text.setFont(CompierePLAF.getFont_Field()); 78 m_text.setForeground(CompierePLAF.getTextColor_Normal()); 79 m_text.addActionListener(this); 80 this.add(m_text, BorderLayout.CENTER); 81 82 m_button.setIcon(new ImageIcon(org.compiere.Compiere.class.getResource("images/Locator10.gif"))); 83 m_button.setMargin(new Insets(0, 0, 0, 0)); 84 m_button.setPreferredSize(new Dimension(height, height)); 85 m_button.addActionListener(this); 86 this.add(m_button, BorderLayout.EAST); 87 88 this.setPreferredSize(this.getPreferredSize()); 91 if (isReadOnly || !isUpdateable) 93 setReadWrite (false); 94 else 95 setReadWrite (true); 96 setMandatory (mandatory); 97 mZoom = new JMenuItem(Msg.getMsg(Env.getCtx(), "Zoom"), Env.getImageIcon("Zoom16.gif")); 99 mZoom.addActionListener(this); 100 popupMenu.add(mZoom); 101 mRefresh = new JMenuItem(Msg.getMsg(Env.getCtx(), "Refresh"), Env.getImageIcon("Refresh16.gif")); 102 mRefresh.addActionListener(this); 103 popupMenu.add(mRefresh); 104 } 106 109 public void dispose() 110 { 111 m_text = null; 112 m_button = null; 113 m_mLocator = null; 114 } 116 private JTextField m_text = new JTextField (VLookup.DISPLAY_LENGTH); 117 private CButton m_button = new CButton(); 118 private MLocatorLookup m_mLocator; 119 private Object m_value; 120 private String m_columnName; 122 private int m_WindowNo; 123 JPopupMenu popupMenu = new JPopupMenu(); 125 private JMenuItem mZoom; 126 private JMenuItem mRefresh; 127 128 132 public void setReadWrite (boolean value) 133 { 134 m_button.setReadWrite(value); 135 if (m_button.isVisible() != value) 136 m_button.setVisible(value); 137 setBackground(false); 138 } 140 144 public boolean isReadWrite() 145 { 146 return m_button.isReadWrite(); 147 } 149 153 public void setMandatory (boolean mandatory) 154 { 155 m_button.setMandatory(mandatory); 156 setBackground(false); 157 } 159 163 public boolean isMandatory() 164 { 165 return m_button.isMandatory(); 166 } 168 172 public void setBackground (Color color) 173 { 174 if (!color.equals(m_text.getBackground())) 175 m_text.setBackground(color); 176 } 178 182 public void setBackground (boolean error) 183 { 184 if (error) 185 setBackground(CompierePLAF.getFieldBackground_Error()); 186 else if (!isReadWrite()) 187 setBackground(CompierePLAF.getFieldBackground_Inactive()); 188 else if (isMandatory()) 189 setBackground(CompierePLAF.getFieldBackground_Mandatory()); 190 else 191 setBackground(CompierePLAF.getFieldBackground_Normal()); 192 } 194 198 public void setForeground(Color fg) 199 { 200 m_text.setForeground(fg); 201 } 203 207 public void setValue(Object value) 208 { 209 setValue (value, false); 210 } 212 217 private void setValue (Object value, boolean fire) 218 { 219 if (value != null) 220 { 221 m_mLocator.setOnly_Warehouse_ID (getOnly_Warehouse_ID ()); 222 if (!m_mLocator.isValid(value)) 223 value = null; 224 } 225 m_value = value; 227 m_text.setText(m_mLocator.getDisplay(value)); 229 try 231 { 232 fireVetoableChange(m_columnName, null, value); 233 } 234 catch (PropertyVetoException pve) 235 { 236 } 237 } 239 240 244 public void propertyChange (PropertyChangeEvent evt) 245 { 246 if (evt.getPropertyName().equals(org.compiere.model.MField.PROPERTY)) 247 setValue(evt.getNewValue()); 248 } 250 254 public Object getValue() 255 { 256 return m_value; 257 } 259 263 public String getDisplay() 264 { 265 return m_text.getText(); 266 } 268 272 public void actionPerformed(ActionEvent e) 273 { 274 if (e.getSource() == mRefresh) 276 { 277 m_mLocator.refresh(); 278 return; 279 } 280 281 if (e.getSource() == mZoom) 283 { 284 actionZoom(); 285 return; 286 } 287 288 int only_Warehouse_ID = getOnly_Warehouse_ID(); 290 Log.trace(Log.l3_Util, "VLocator.actionPerformed - Only Wharehouse_ID=" + only_Warehouse_ID); 291 292 if (e.getSource() == m_text && actionText(only_Warehouse_ID)) 294 return; 295 296 int M_Locator_ID = 0; 298 if (m_value instanceof Integer ) 299 M_Locator_ID = ((Integer )m_value).intValue(); 300 m_mLocator.setOnly_Warehouse_ID(only_Warehouse_ID); 302 VLocatorDialog ld = new VLocatorDialog(Env.getFrame(this), 303 Msg.translate(Env.getCtx(), m_columnName), 304 m_mLocator, M_Locator_ID, isMandatory(), only_Warehouse_ID); 305 ld.setVisible(true); 307 m_mLocator.setOnly_Warehouse_ID(0); 308 309 if (!ld.isChanged()) 311 return; 312 setValue (ld.getValue(), true); 313 } 315 320 private boolean actionText(int only_Warehouse_ID) 321 { 322 String text = m_text.getText(); 323 Log.trace(Log.l5_DData, "VLocator.actionText", text); 324 if (text == null || text.length() == 0) 325 { 326 if (isMandatory()) 327 return false; 328 else 329 { 330 setValue (null, true); 331 return true; 332 } 333 } 334 if (text.endsWith("%")) 335 text = text.toUpperCase(); 336 else 337 text = text.toUpperCase() + "%"; 338 int M_Locator_ID = 0; 340 String sql = "SELECT M_Locator_ID FROM M_Locator WHERE UPPER(Value) LIKE " 341 + DB.TO_STRING(text); 342 if (only_Warehouse_ID != 0) 343 sql += " AND M_Warehouse_ID=?"; 344 PreparedStatement pstmt = null; 345 try 346 { 347 pstmt = DB.prepareStatement(sql); 348 if (only_Warehouse_ID != 0) 349 pstmt.setInt(1, only_Warehouse_ID); 350 ResultSet rs = pstmt.executeQuery(); 351 if (rs.next()) 352 { 353 M_Locator_ID = rs.getInt(1); 354 if (rs.next()) 355 M_Locator_ID = 0; } 357 rs.close(); 358 pstmt.close(); 359 pstmt = null; 360 } 361 catch (SQLException ex) 362 { 363 Log.error("VLocator.actionText", ex); 364 } 365 try 366 { 367 if (pstmt != null) 368 pstmt.close(); 369 } 370 catch (SQLException ex1) 371 { 372 } 373 pstmt = null; 374 if (M_Locator_ID == 0) 375 return false; 376 377 setValue (new Integer (M_Locator_ID), true); 378 return true; 379 } 381 385 public void addActionListener(ActionListener listener) 386 { 387 m_text.addActionListener(listener); 388 } 390 391 394 private void actionZoom() 395 { 396 int AD_Window_ID = 139; Log.trace(Log.l1_User, "VLocator.actionZoom"); 398 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 400 AWindow frame = new AWindow(); 401 if (!frame.initWindow(AD_Window_ID, null, false)) return; 403 AEnv.showCenterScreen(frame); 404 frame = null; 405 setCursor(Cursor.getDefaultCursor()); 406 } 408 412 public void setField (org.compiere.model.MField mField) 413 { 414 } 416 417 421 private int getOnly_Warehouse_ID() 422 { 423 String only_Warehouse = Env.getContext(Env.getCtx(), m_WindowNo, "M_Warehouse_ID", true); 424 int only_Warehouse_ID = 0; 425 try 426 { 427 if (only_Warehouse != null && only_Warehouse.length () > 0) 428 only_Warehouse_ID = Integer.parseInt (only_Warehouse); 429 } 430 catch (Exception ex) 431 { 432 } 433 return only_Warehouse_ID; 434 } 436 } 438 439 440 443 final class VLocator_mouseAdapter extends java.awt.event.MouseAdapter 444 { 445 449 VLocator_mouseAdapter(VLocator adaptee) 450 { 451 this.adaptee = adaptee; 452 } 454 private VLocator adaptee; 455 456 460 public void mouseClicked(MouseEvent e) 461 { 462 if (SwingUtilities.isRightMouseButton(e)) 464 adaptee.popupMenu.show((Component)e.getSource(), e.getX(), e.getY()); 465 } 467 } | Popular Tags |