/* * SynonymPanel.java - GUI synonym searcher elements * * Copyright (c) 2005-2007 Andrew Krizhanovsky /aka at mail.iias.spb.su/ * Distributed under GNU Public License. */ package com.touchgraph.wikibrowser.panel; import wikipedia.util.StringUtil; import com.touchgraph.wikibrowser.*; import com.touchgraph.wikibrowser.parameter.*; //import com.touchgraph.graphlayout.*; import java.io.*; import java.awt.*; import javax.swing.*; import javax.swing.text.*; import java.awt.event.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** Short Class Description */ public class SynonymPanel extends JPanel { private TGWikiBrowser wb; private static SynonymSearcher syn_searcher; private JTabbedPane tabs; /** ParametersPanel presents search article parameters */ public JPanel params_panel; /** GUI synonyms table as the result of search */ public JPanel result_table_panel; /** GUI category table as the result of search */ public JPanel category_table_panel; public JTextField syn_word; public String log_dir; public JTextField log_dir_field; final JButton browse_log_btn; final JFileChooser fc; public static int width = 250; public String getSynWord() { //return StringUtil.UpperFirstLetter(syn_word.getText().trim()); return syn_word.getText().trim(); } /** Creates a new instance of SynonymPanel */ public SynonymPanel(SynonymSearcher ss, TGWikiBrowser wb_new) { syn_searcher = ss; wb = wb_new; setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); add(Box.createRigidArea(new Dimension(0,5))); //setAlignmentX(1); // jp_ss - search synonym (ss) horizontal panel JPanel jp_ss = new JPanel(); jp_ss.setLayout(new BoxLayout(jp_ss, BoxLayout.X_AXIS)); //jp_ss.setLayout(new GridBagLayout()); JLabel syn_word_label = new JLabel(wb.tr.getString("Word"));//, Label.RIGHT) syn_word = new JTextField(20); syn_word_label.setDisplayedMnemonic('W'); syn_word.setFocusAccelerator('W'); syn_word.setText(wb.INITIAL_NODE); //syn_word.setText(wikipedia.util.Encodings.FromTo(wb.INITIAL_NODE, "Cp1251", "UTF8")); Action get_params = new AbstractAction() { // Get previous search parameters and synonyms for the word public void actionPerformed(ActionEvent e) { String article = getSynWord(); syn_searcher.getArticleParameters(article); } }; Action draw_neighbours = new AbstractAction() { // Draw synonym node, edges to l_from and l_to nodes public void actionPerformed(ActionEvent e) { String searchString = getSynWord(); System.out.println("searchString="+searchString); if (!searchString.equals("")) { syn_searcher.drawNeighboursFromDB(searchString); wb.syn_searcher.SetNodeAndTextPane(searchString); } } }; syn_word.addActionListener(get_params); syn_word.setToolTipText(wb.tr.getString("Press_enter_to_load_previous_search_parameters")); //jp_ss.setLayout(new GridBagLayout()); // Add Components to this panel. //GridBagConstraints c = new GridBagConstraints(); //c.fill = GridBagConstraints.HORIZONTAL; jp_ss.add(Box.createRigidArea(new Dimension(5,0))); jp_ss.add(syn_word_label); jp_ss.add(Box.createRigidArea(new Dimension(5,0))); /*JPanel syn_word_wrapper = new JPanel(); syn_word_wrapper.setLayout(new GridBagLayout()); // Add Components to this panel. GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; c.gridwidth = GridBagConstraints.REMAINDER; syn_word_wrapper.add(syn_word, c); */ jp_ss.add(syn_word); /* syn_word_label.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLineBorder(Color.red), syn_word_label.getBorder())); syn_word.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLineBorder(Color.red), syn_word.getBorder())); jp_ss.setBorder( BorderFactory.createCompoundBorder( BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("jp_ss border"), BorderFactory.createEmptyBorder(5,5,5,5)), jp_ss.getBorder())); */ jp_ss.add(Box.createRigidArea(new Dimension(5,0))); add(jp_ss); add(Box.createRigidArea(new Dimension(0,5))); // Buttons "Search Synonyms" and "Draw neighbours" on horizontal panel JPanel jp_btns = new JPanel(); jp_btns.setLayout(new BoxLayout(jp_btns, BoxLayout.X_AXIS)); // Button "Load (parameters)" JButton get_params_btn = new JButton(wb.tr.getString("Load")); get_params_btn.setToolTipText(wb.tr.getString("Load_previous_search_parameters_and_synonyms_for_the_word")); get_params_btn.setMnemonic(KeyEvent.VK_L); get_params_btn.setBackground(Color.decode("#D8C0C0")); get_params_btn.addActionListener(get_params); JButton ss_button = new JButton(wb.tr.getString("Search_Synonyms")); ss_button.setMnemonic(KeyEvent.VK_S); ss_button.setAlignmentX(0.5f); ss_button.setToolTipText(wb.tr.getString("Search_synonyms_in_Wikipedia_database")); ss_button.setBackground(Color.decode("#D8C0C0")); ss_button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String article = getSynWord(); wb.INITIAL_NODE = article; wb.parameters.setNode(article); wb.parameters.saveParameters(); wb.syn_searcher.SearchSynonyms(article); } }); // Button "Draw (article node and neighbours)" JButton draw_btn = new JButton(wb.tr.getString("Neighbours")); draw_btn.setToolTipText(wb.tr.getString("Draw_article_node_and_neighbours")); draw_btn.setMnemonic(KeyEvent.VK_N); draw_btn.setBackground(Color.decode("#D8C0C0")); draw_btn.addActionListener(draw_neighbours); jp_btns.add(Box.createRigidArea(new Dimension(5,0))); jp_btns.add(get_params_btn); jp_btns.add(Box.createRigidArea(new Dimension(5,0))); jp_btns.add(ss_button); jp_btns.add(Box.createRigidArea(new Dimension(5,0))); jp_btns.add(draw_btn); jp_btns.add(Box.createRigidArea(new Dimension(5,0))); //jp_btns.setAlignmentX(0); add(jp_btns); add(Box.createRigidArea(new Dimension(0,5))); // lf - log file panel // [Check Box] "Log file" [File chooser] JPanel jp_lf = new JPanel(); jp_lf.setLayout(new BoxLayout(jp_lf , BoxLayout.X_AXIS)); JCheckBox check_logfile = new JCheckBox(wb.tr.getString("Log")); // directory check_logfile.setMnemonic(KeyEvent.VK_O); check_logfile.setSelected(true); check_logfile.addItemListener( new ItemListener() { // enable/disable // - the text editable field of log filename // - filename browsing public void itemStateChanged(ItemEvent e) { boolean b = (e.getStateChange() == ItemEvent.SELECTED) ? true : false; log_dir_field.setEnabled(b); browse_log_btn.setEnabled(b); wb.parameters.setEnableLog(b); } }); log_dir_field = new JTextField(); log_dir = wb.parameters.getLogDir(); log_dir_field.setText(log_dir); //wb.INITIAL_NODE); // browse log file button browse_log_btn = new JButton(wb.tr.getString("Browse...")); //browse_log_btn.setAlignmentX(0.5f); browse_log_btn.setToolTipText(wb.tr.getString("Browse_directory_for_log_files")); browse_log_btn.setMnemonic(KeyEvent.VK_B); browse_log_btn.setBackground(Color.decode("#D8C0C0")); if(!wb.parameters.isLogEnabled()) { // disables log dir 1) checkbox 2) text field 3) "browse..." button check_logfile .setSelected(false); log_dir_field .setEnabled(false); browse_log_btn.setEnabled(false); } fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); browse_log_btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (JFileChooser.APPROVE_OPTION == fc.showOpenDialog(wb.synonymTextPanel)) { File file = fc.getSelectedFile(); log_dir = file.getAbsolutePath(); log_dir_field.setText(log_dir); wb.parameters.setLogDir(log_dir); } else { // print old path log_dir_field.setText(log_dir); } } }); jp_lf.add(check_logfile); jp_lf.add(log_dir_field); jp_lf.add(Box.createRigidArea(new Dimension(5,0))); jp_lf.add(browse_log_btn); jp_lf.add(Box.createRigidArea(new Dimension(5,0))); add(jp_lf); add(Box.createRigidArea(new Dimension(0,15))); tabs = new JTabbedPane(); params_panel = new ParametersPanel (syn_searcher, wb); result_table_panel = new ResultTablePanel(syn_searcher, wb); //tp_removed = new JPanel(); category_table_panel = new CategoryPanel(syn_searcher, wb); tabs.addTab(wb.tr.getString("Parameters"), params_panel); tabs.setMnemonicAt(0, KeyEvent.VK_P); tabs.addTab(wb.tr.getString("Categories"), category_table_panel); tabs.setMnemonicAt(1, KeyEvent.VK_C); tabs.addTab(wb.tr.getString("Results"), result_table_panel); tabs.setMnemonicAt(2, KeyEvent.VK_U); add(tabs); ChangeListener changeListener = new ChangeListener() { public void stateChanged(ChangeEvent changeEvent) { unColorResultTab (); } }; tabs.addChangeListener(changeListener); //Tell accessibility tools about label/textfield pairs. syn_word_label.setLabelFor(syn_word); } /** Flashes result tab */ public void colorResultTab () { tabs.setBackgroundAt(2, Color.decode("#FF8000")); } public void unColorResultTab () { tabs.setBackgroundAt(2, null); } }