package com.jbidwatcher.ui; /* * Copyright (c) 2000-2007, CyberFOX Software, Inc. All Rights Reserved. * * Developed by mrs (Morgan Schweers) */ import com.cyberfox.util.platform.Platform; import com.jbidwatcher.ui.util.JPasteListener; import com.jbidwatcher.util.config.JConfig; import com.jbidwatcher.util.Constants; import com.jbidwatcher.search.SearchManager; import com.jbidwatcher.search.Searcher; import com.jbidwatcher.ui.table.SearchTableModel; import com.jbidwatcher.ui.util.JBidFrame; import java.awt.event.*; import javax.swing.*; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; import java.awt.*; public class SearchFrame implements ActionListener { private JFrame mainFrame; private JComboBox newType; private JTextField searchString; private SearchTableModel _stm; private final SearchManager searchManager; public SearchFrame(SearchManager searchManager, JTabManager tabManager, ListManager listManager, JPasteListener pasteListener) { this.searchManager = searchManager; mainFrame = createSearchFrame(searchManager, tabManager, listManager, pasteListener); Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize(); int height = Math.min(305, screensize.height / 2); int width = Math.min(566, screensize.width / 2); int screenx = (screensize.width - width) / 2; int screeny = (screensize.height - height) / 2; String s_x = JConfig.queryDisplayProperty("searches.x"); String s_y = JConfig.queryDisplayProperty("searches.y"); String s_w = JConfig.queryDisplayProperty("searches.width"); String s_h = JConfig.queryDisplayProperty("searches.height"); try { if(s_x != null) screenx = Integer.parseInt(s_x); } catch(NumberFormatException ignored) { /* Do nothing. */ } try { if(s_x != null) if(s_y != null) screeny = Integer.parseInt(s_y); } catch(NumberFormatException ignored) { /* Do nothing. */ } try { if(s_x != null) if(s_w != null) width = Integer.parseInt(s_w); } catch(NumberFormatException ignored) { /* Do nothing. */ } try { if(s_x != null) if(s_h != null) height = Integer.parseInt(s_h); } catch(NumberFormatException ignored) { /* Do nothing. */ } mainFrame.setLocation(screenx, screeny); mainFrame.setSize(width, height); mainFrame.setVisible(true); } private void savePosition() { JConfig.setAuxConfiguration("searches.x", Integer.toString(mainFrame.getX())); JConfig.setAuxConfiguration("searches.y", Integer.toString(mainFrame.getY())); JConfig.setAuxConfiguration("searches.width", Integer.toString(mainFrame.getWidth())); JConfig.setAuxConfiguration("searches.height", Integer.toString(mainFrame.getHeight())); } private JFrame createSearchFrame(final SearchManager searchManager, JTabManager tabManager, ListManager listManager, JPasteListener pasteListener) { JPanel wholePanel = new JPanel(new BorderLayout(), true); JPanel subPanel = new JPanel(new BorderLayout(), true); JPanel buttonPanel = new JPanel(new BorderLayout(), true); Box buttonBox = Box.createHorizontalBox(); JSearchContext jsc = new JSearchContext(searchManager, tabManager, listManager, pasteListener); final JFrame w = new JBidFrame("Search Manager"); Container contentPane = w.getContentPane(); contentPane.setLayout(new BorderLayout()); wholePanel.setBorder(BorderFactory.createTitledBorder("Saved Searches")); wholePanel.add(buildSearchTable(jsc), BorderLayout.CENTER); //subPanel.setBorder(BorderFactory.createTitledBorder("Add & Execute New Search")); //subPanel.add(buildAdditionalPanel(), BorderLayout.SOUTH); buttonBox.add(jsc.makeButton("Search", "Execute")); buttonBox.add(jsc.makeButton("New")); buttonBox.add(jsc.makeButton("Edit", "Edit Search")); buttonBox.add(jsc.makeButton("Enable")); buttonBox.add(jsc.makeButton("Disable")); buttonBox.add(Box.createHorizontalGlue()); buttonBox.add(jsc.makeButton("Delete")); buttonPanel.setBorder(BorderFactory.createLoweredBevelBorder()); buttonPanel.add(buttonBox, BorderLayout.SOUTH); wholePanel.add(buttonPanel, BorderLayout.SOUTH); contentPane.add(wholePanel, BorderLayout.CENTER); contentPane.add(subPanel, BorderLayout.SOUTH); w.pack(); w.setResizable(true); w.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); w.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { savePosition(); searchManager.saveSearches(); } public void windowIconified(WindowEvent we) { savePosition(); if(Platform.isWindows() && Platform.isTrayEnabled()) { if(JConfig.queryConfiguration("windows.tray", "true").equals("true") && JConfig.queryConfiguration("windows.minimize", "true").equals("true")) { w.setVisible(false); } } } public void windowDeiconified(WindowEvent we) { if(Platform.isWindows() && Platform.isTrayEnabled()) { if(JConfig.queryConfiguration("windows.tray", "true").equals("true") && JConfig.queryConfiguration("windows.minimize", "true").equals("true")) { w.setState(JFrame.NORMAL); w.setVisible(true); } } } }); // Handle escape key to close the dialog KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false); Action escapeAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { savePosition(); w.setVisible(false); } }; w.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE"); w.getRootPane().getActionMap().put("ESCAPE", escapeAction); return w; } private JTable searchTable; private JScrollPane buildSearchTable(JSearchContext jsc) { _stm = new SearchTableModel(searchManager); searchTable = new JTable(_stm); searchTable.setRowSorter(new TableRowSorter<TableModel>(_stm)); searchTable.addMouseListener(jsc); searchTable.setShowGrid(false); searchTable.setIntercellSpacing(new Dimension(0, 0)); searchTable.setDoubleBuffered(true); searchTable.setShowHorizontalLines(true); searchTable.setToolTipText("Double-click on a search to execute it!"); searchTable.getTableHeader().setReorderingAllowed(false); JScrollPane jsp = new JScrollPane(searchTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jsp.getViewport().setBackground(UIManager.getColor("window")); jsc.setTable(searchTable); return jsp; } String[] search_types = { "Text Search", "Seller Search", "URL Load", "My Items" }; public void show() { mainFrame.setState(JFrame.NORMAL); mainFrame.setVisible(true); } private Searcher add(String type, String name, String search, String server) { int inc=0; String curName = name + Integer.toString(inc); Searcher s = searchManager.buildSearch(System.currentTimeMillis(), type, curName, search, server, null, -1); _stm.insert(s); return s; } public void actionPerformed(ActionEvent ae) { String act = ae.getActionCommand(); if(act.equals("Add") || act.equals("Search")) { String text = searchString.getText(); Searcher s = add((String)newType.getSelectedItem(), "New Search ", text, Constants.EBAY_SERVER_NAME); _stm.fireTableDataChanged(); newType.setSelectedIndex(0); searchString.setText(""); if(act.equals("Search")) { if(JConfig.debugging) System.out.println("Doing a " + newType.getSelectedItem() + " for " + text); s.execute(); } } } }