/* * 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. * * ViolationsWindow.java * * Created on 22. Maerz 2005, 05:40 */ package gui; import geometry.planar.FloatPoint; import board.ClearanceViolation; import interactive.ClearanceViolations; /** * * @author Alfons Wirtz */ public class WindowClearanceViolations extends WindowObjectListWithFilter { /** Creates a new instance of IncompletesWindow */ public WindowClearanceViolations(BoardFrame p_board_frame) { super(p_board_frame); this.resources = java.util.ResourceBundle.getBundle("gui.resources.WindowClearanceViolations", p_board_frame.get_locale()); this.setTitle(resources.getString("title")); this.list_empty_message.setText(resources.getString("list_empty_message")); p_board_frame.set_context_sensitive_help(this, "WindowObjectList_ClearanceViolations"); } protected void fill_list() { interactive.BoardHandling board_handling = this.board_frame.board_panel.board_handling; ClearanceViolations clearance_violations = new ClearanceViolations(board_handling.get_routing_board().get_items()); java.util.SortedSet<ViolationInfo> sorted_set = new java.util.TreeSet<ViolationInfo>(); for (ClearanceViolation curr_violation : clearance_violations.list) { sorted_set.add(new ViolationInfo(curr_violation)); } for (ViolationInfo curr_violation : sorted_set) { this.add_to_list(curr_violation); } this.list.setVisibleRowCount(Math.min(sorted_set.size(), DEFAULT_TABLE_SIZE)); } protected void select_instances() { Object[] selected_violations = list.getSelectedValues(); if (selected_violations.length <= 0) { return; } java.util.Set<board.Item> selected_items = new java.util.TreeSet<board.Item>(); for (int i = 0; i < selected_violations.length; ++i) { ClearanceViolation curr_violation = ((ViolationInfo) selected_violations[i]).violation; selected_items.add(curr_violation.first_item); selected_items.add(curr_violation.second_item); } interactive.BoardHandling board_handling = board_frame.board_panel.board_handling; board_handling.select_items(selected_items); board_handling.toggle_selected_item_violations(); board_handling.zoom_selection(); } private String item_info(board.Item p_item) { String result; if (p_item instanceof board.Pin) { result = resources.getString("pin"); } else if (p_item instanceof board.Via) { result = resources.getString("via"); } else if (p_item instanceof board.Trace) { result = resources.getString("trace"); } else if (p_item instanceof board.ConductionArea) { result = resources.getString("conduction_area"); } else if (p_item instanceof board.ObstacleArea) { result = resources.getString("keepout"); } else if (p_item instanceof board.ViaObstacleArea) { result = resources.getString("via_keepout"); } else if (p_item instanceof board.ComponentObstacleArea) { result = resources.getString("component_keepout"); } else if (p_item instanceof board.BoardOutline) { result = resources.getString("board_outline"); } else { result = resources.getString("unknown"); } return result; } private final java.util.ResourceBundle resources; private class ViolationInfo implements Comparable<ViolationInfo>, WindowObjectInfo.Printable { public ViolationInfo(ClearanceViolation p_violation) { this.violation = p_violation; FloatPoint board_location = p_violation.shape.centre_of_gravity(); this.location = board_frame.board_panel.board_handling.coordinate_transform.board_to_user(board_location); } public String toString() { board.LayerStructure layer_structure = board_frame.board_panel.board_handling.get_routing_board().layer_structure; String result = item_info(violation.first_item) + " - " + item_info(violation.second_item) + " " + resources.getString("at") + " " + location.to_string(board_frame.get_locale()) + " " + resources.getString("on_layer") + " " + layer_structure.arr[violation.layer].name; return result; } public void print_info(board.ObjectInfoPanel p_window, java.util.Locale p_locale) { this.violation.print_info(p_window, p_locale); } public int compareTo(ViolationInfo p_other) { if (this.location.x > p_other.location.x) { return 1; } if (this.location.x < p_other.location.x) { return -1; } if (this.location.y > p_other.location.y) { return 1; } if (this.location.y < p_other.location.y) { return -1; } return this.violation.layer - p_other.violation.layer; } public final ClearanceViolation violation; public final FloatPoint location; } }