/*
* 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.
*
* ViaInfos.java
*
* Created on 2. April 2005, 06:49
*/
package rules;
import java.util.List;
import java.util.LinkedList;
/**
* Contains the lists of different ViaInfo's, which can be used in interactive and automatic routing.
*
* @author Alfons Wirtz
*/
public class ViaInfos implements java.io.Serializable, board.ObjectInfoPanel.Printable
{
/**
* Adds a via info consisting of padstack, clearance class and drill_to_smd_allowed.
* Return false, if the insertion failed, for example if the name existed already.
*/
public boolean add(ViaInfo p_via_info)
{
if (name_exists(p_via_info.get_name()))
{
return false;
}
this.list.add(p_via_info);
return true;
}
/**
* Returns the number of different vias, which can be used for routing.
*/
public int count()
{
return this.list.size();
}
/**
* Returns the p_no-th via af the via types, which can be used for routing.
*/
public ViaInfo get(int p_no)
{
assert p_no >= 0 && p_no < this.list.size();
return this.list.get(p_no);
}
/**
* Returns the via info with name p_name, or null, if no such via exists.
*/
public ViaInfo get(String p_name)
{
for (ViaInfo curr_via : this.list)
{
if (curr_via.get_name().equals(p_name))
{
return curr_via;
}
}
return null;
}
/**
* Returns true, if a via info with name p_name is already wyisting in the list.
*/
public boolean name_exists(String p_name)
{
for (ViaInfo curr_via : this.list)
{
if (curr_via.get_name().equals(p_name))
{
return true;
}
}
return false;
}
/**
* Removes p_via_info from this list.
* Returns false, if p_via_info was not contained in the list.
*/
public boolean remove(ViaInfo p_via_info)
{
return this.list.remove(p_via_info);
}
public void print_info(board.ObjectInfoPanel p_window, java.util.Locale p_locale)
{
java.util.ResourceBundle resources =
java.util.ResourceBundle.getBundle("board.resources.ObjectInfoPanel", p_locale);
p_window.append_bold(resources.getString("vias") + ": ");
int counter = 0;
boolean first_time = true;
final int max_vias_per_row = 5;
for (ViaInfo curr_via : this.list)
{
if (first_time)
{
first_time = false;
}
else
{
p_window.append(", ");
}
if (counter == 0)
{
p_window.newline();
p_window.indent();
}
p_window.append(curr_via.get_name(), resources.getString("via_info"), curr_via);
counter = (counter + 1) % max_vias_per_row;
}
}
private List<ViaInfo> list = new LinkedList<ViaInfo>();
}