/*
* 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.
*
* WindowUnconnectedRoute.java
*
* Created on 16. Februar 2006, 06:20
*
*/
package gui;
import java.util.Collection;
import java.util.Set;
import java.util.SortedSet;
import board.Item;
/**
*
* @author Alfons Wirtz
*/
public class WindowUnconnectedRoute extends WindowObjectListWithFilter
{
/** Creates a new instance of WindowUnconnectedRoute */
public WindowUnconnectedRoute(BoardFrame p_board_frame)
{
super(p_board_frame);
this.resources = java.util.ResourceBundle.getBundle("gui.resources.CleanupWindows", p_board_frame.get_locale());
this.setTitle(resources.getString("unconnected_route"));
this.list_empty_message.setText(resources.getString("no_unconnected_route_found"));
p_board_frame.set_context_sensitive_help(this, "WindowObjectList_UnconnectedRoute");
}
protected void fill_list()
{
board.BasicBoard routing_board = this.board_frame.board_panel.board_handling.get_routing_board();
Set<Item> handled_items = new java.util.TreeSet<Item>();
SortedSet<UnconnectedRouteInfo> unconnected_route_info_set = new java.util.TreeSet<UnconnectedRouteInfo>();
Collection<Item> board_items = routing_board.get_items();
for (Item curr_item : board_items)
{
if (!(curr_item instanceof board.Trace || curr_item instanceof board.Via))
{
continue;
}
if (handled_items.contains(curr_item))
{
continue;
}
Collection<Item> curr_connected_set = curr_item.get_connected_set(-1);
boolean terminal_item_found = false;
for (Item curr_connnected_item : curr_connected_set)
{
handled_items.add(curr_connnected_item);
if (!(curr_connnected_item instanceof board.Trace || curr_connnected_item instanceof board.Via))
{
terminal_item_found = true;
}
}
if (!terminal_item_found)
{
// We have found unconnnected route
if (curr_item.net_count() == 1)
{
rules.Net curr_net = routing_board.rules.nets.get(curr_item.get_net_no(0));
if (curr_net != null)
{
UnconnectedRouteInfo curr_unconnected_route_info =
new UnconnectedRouteInfo(curr_net, curr_connected_set);
unconnected_route_info_set.add(curr_unconnected_route_info);
}
}
else
{
System.out.println("WindowUnconnectedRoute.fill_list: net_count 1 expected");
}
}
}
for (UnconnectedRouteInfo curr_info : unconnected_route_info_set)
{
this.add_to_list(curr_info);
}
this.list.setVisibleRowCount(Math.min(unconnected_route_info_set.size(), DEFAULT_TABLE_SIZE));
}
protected void select_instances()
{
Object[] selected_list_values = list.getSelectedValues();
if (selected_list_values.length <= 0)
{
return;
}
Set<board.Item> selected_items = new java.util.TreeSet<board.Item>();
for (int i = 0; i < selected_list_values.length; ++i)
{
selected_items.addAll(((UnconnectedRouteInfo)selected_list_values[i]).item_list);
}
interactive.BoardHandling board_handling = board_frame.board_panel.board_handling;
board_handling.select_items(selected_items);
board_handling.zoom_selection();
}
private final java.util.ResourceBundle resources;
private int max_unconnected_route_info_id_no = 0;
/**
* Describes information of a connected set of unconnected traces and vias.
*/
private class UnconnectedRouteInfo implements Comparable<UnconnectedRouteInfo>
{
public UnconnectedRouteInfo(rules.Net p_net, Collection<Item> p_item_list)
{
this.net = p_net;
this.item_list = p_item_list;
++max_unconnected_route_info_id_no;
this.id_no = max_unconnected_route_info_id_no;
int curr_trace_count = 0;
int curr_via_count = 0;
for (Item curr_item: p_item_list)
{
if (curr_item instanceof board.Trace)
{
++curr_trace_count;
}
else if (curr_item instanceof board.Via)
{
++curr_via_count;
}
}
this.trace_count = curr_trace_count;
this.via_count = curr_via_count;
}
public String toString()
{
String result = resources.getString("net") + " " + this.net.name + ": "
+ resources.getString("trace_count") + " " + this.trace_count.toString() + ", "
+ resources.getString("via_count") + " " + this.via_count.toString();
return result;
}
public int compareTo(UnconnectedRouteInfo p_other)
{
int result = this.net.name.compareTo(p_other.net.name);
if (result == 0)
{
result = this.id_no - p_other.id_no;
}
return result;
}
private final rules.Net net;
private final Collection<Item> item_list;
private final int id_no;
private final Integer trace_count;
private final Integer via_count;
}
}