Files
miscJar/src/java/tool/view/SourceIteratorView.java
François 766904b714 Init
2022-01-26 19:21:00 +01:00

128 lines
4.4 KiB
Java

package tool.view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import misc.Bundle;
import misc.Config;
import misc.Util;
import tool.model.SourceIteratorModel;
@SuppressWarnings ("serial") public class SourceIteratorView extends JPanel implements ActionListener {
// ========================================
SourceIteratorModel sourceIteratorModel = null;
// ========================================
String[] columnLabels = { "FileName", "LineNumber", "Line" };
DefaultTableModel sourceIteratorTableModel;
JTable sourceIteratorJTable;
// ========================================
static public final List<String> actionsNames = Arrays.asList ("Init", "Next");
@SuppressWarnings ("unchecked")
static public final Hashtable<String, Method> actionsMethod =
Util.collectMethod (SourceIteratorView.class, actionsNames);
public void actionPerformed (ActionEvent e) {
Util.actionPerformed (actionsMethod, e, this);
}
// ========================================
public void updateBundle () {
Util.setColumnLabels (sourceIteratorJTable, columnLabels);
}
// ========================================
DefaultTableCellRenderer greenRendered = new DefaultTableCellRenderer ();
DefaultTableCellRenderer whiteRendered = new DefaultTableCellRenderer ();
// ========================================
public SourceIteratorView () {
super (new BorderLayout ());
greenRendered.setBackground (Color.GREEN);
whiteRendered.setBackground (Color.WHITE);
int [] columnWidth = {
200,
5,
1000
};
sourceIteratorTableModel = new DefaultTableModel (columnLabels, 1);
sourceIteratorJTable = new JTable (sourceIteratorTableModel);
updateBundle ();
for (int i = 0; i < sourceIteratorTableModel.getColumnCount (); i++)
sourceIteratorJTable.getColumnModel ().getColumn (i).setPreferredWidth (columnWidth [i]);
sourceIteratorJTable.getColumnModel ().setColumnSelectionAllowed (true);
sourceIteratorJTable.setSelectionMode (ListSelectionModel.SINGLE_SELECTION);
add (sourceIteratorJTable.getTableHeader (), BorderLayout.PAGE_START);
add (sourceIteratorJTable, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel ();
Util.addButton (actionsNames, this, buttonPanel);
add (buttonPanel, BorderLayout.PAGE_END);
Bundle.addBundleObserver (this);
}
// ========================================
JFileChooser jFileChooser = new JFileChooser (Config.getString ("SourceIteratorDir", "."));
// ========================================
public void actionInit () {
jFileChooser.setFileSelectionMode (JFileChooser.DIRECTORIES_ONLY);
if (jFileChooser.showOpenDialog (this) != JFileChooser.APPROVE_OPTION)
return;
File dir = jFileChooser.getSelectedFile ();
sourceIteratorModel = new SourceIteratorModel (dir);
actionNext ();
try {
Config.setString ("SourceIteratorDir", dir.getCanonicalPath ());
} catch (Exception e) {
}
}
// ========================================
public void actionNext () {
if (sourceIteratorModel == null) {
JOptionPane.showMessageDialog (this, Bundle.getMessage ("NoSourceDir"), Bundle.getTitle ("NoSource"),
JOptionPane.WARNING_MESSAGE);
return;
}
if (! sourceIteratorModel.hasMoreString ()) {
sourceIteratorTableModel.setRowCount (0);
sourceIteratorTableModel.addRow (new String [] {"", "", ""});
sourceIteratorModel = null;
return;
}
String next = sourceIteratorModel.nextString ();
sourceIteratorTableModel.setRowCount (0);
sourceIteratorTableModel.addRow (new String [] {
""+sourceIteratorModel.getCurrentFile (),
""+sourceIteratorModel.getCurrentLine (),
next
});
sourceIteratorJTable.getColumnModel ().getColumn (2).setCellRenderer
((next.indexOf ("Bundle.") >= 0 || next.indexOf ("Config.") >= 0 ) ? greenRendered : whiteRendered);
}
// ========================================
}