/*
* Copyright (C) 2014 Alfons Wirtz
* website www.freerouting.net
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 at <http://www.gnu.org/licenses/>
* for more details.
*
* ObjectListWindowWithFilter.java
*
* Created on 24. Maerz 2005, 10:10
*/
package gui;
/**
* Abstract class for windows displaying a list of objects
* The object name can be filttered by an alphanumeric input string. * @author Alfons Wirtz
*/
public abstract class WindowObjectListWithFilter extends WindowObjectList
{
/** Creates a new instance of ObjectListWindowWithFilter */
public WindowObjectListWithFilter(BoardFrame p_board_frame)
{
super(p_board_frame);
java.util.ResourceBundle resources =
java.util.ResourceBundle.getBundle("gui.resources.WindowObjectList", p_board_frame.get_locale());
javax.swing.JPanel input_panel = new javax.swing.JPanel();
this.south_panel.add(input_panel, java.awt.BorderLayout.SOUTH);
javax.swing.JLabel filter_label = new javax.swing.JLabel(resources.getString("filter"));
input_panel.add(filter_label, java.awt.BorderLayout.WEST);
this.filter_string = new javax.swing.JTextField(10);
this.filter_string.setText("");
input_panel.add(filter_string, java.awt.BorderLayout.EAST);
}
/**
* Adds p_object to the list only if its name matches the filter.
*/
protected void add_to_list(Object p_object)
{
String curr_filter_string = this.filter_string.getText().trim();
boolean object_matches;
if (curr_filter_string.length() == 0)
{
object_matches = true;
}
else
{
object_matches = p_object.toString().contains(curr_filter_string);
}
if (object_matches)
{
super.add_to_list(p_object);
}
}
/**
* Returns the filter text string of this window.
*/
public SnapshotInfo get_snapshot_info()
{
int [] selected_indices;
if (this.list != null)
{
selected_indices = this.list.getSelectedIndices();
}
else
{
selected_indices = new int[0];
}
return new SnapshotInfo(filter_string.getText(), selected_indices);
}
public void set_snapshot_info(SnapshotInfo p_snapshot_info)
{
if (!p_snapshot_info.filter.equals(this.filter_string.getText()))
{
this.filter_string.setText(p_snapshot_info.filter);
this.recalculate();
}
if (this.list != null && p_snapshot_info.selected_indices.length > 0)
{
this.list.setSelectedIndices(p_snapshot_info.selected_indices);
}
}
/**
* Saves also the filter string to disk.
*/
public void save(java.io.ObjectOutputStream p_object_stream)
{
try
{
p_object_stream.writeObject(filter_string.getText());
}
catch (java.io.IOException e)
{
System.out.println("WindowObjectListWithFilter.save: save failed");
}
super.save(p_object_stream);
}
public boolean read(java.io.ObjectInputStream p_object_stream)
{
try
{
String curr_string = (String) p_object_stream.readObject();
this.filter_string.setText(curr_string);
}
catch (Exception e)
{
System.out.println("WindowObjectListWithFilter.read: read failed");
}
return super.read(p_object_stream);
}
private final javax.swing.JTextField filter_string;
/**
* Information to be stored in a SnapShot.
*/
public static class SnapshotInfo implements java.io.Serializable
{
private SnapshotInfo(String p_filter, int[] p_selected_indices)
{
filter = p_filter;
selected_indices = p_selected_indices;
}
private final String filter;
private final int [] selected_indices;
}
}