/* * 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. * * AssignNetRulesWindow.java * * Created on 12. April 2005, 06:09 */ package gui; import rules.Net; import rules.NetClass; /** * * @author Alfons Wirtz */ public class WindowAssignNetClass extends BoardSavableSubWindow { /** Creates a new instance of AssignNetRulesWindow */ public WindowAssignNetClass(BoardFrame p_board_frame) { this.resources = java.util.ResourceBundle.getBundle("gui.resources.WindowAssignNetClass", p_board_frame.get_locale()); this.setTitle(resources.getString("title")); this.board_frame = p_board_frame; this.main_panel = new javax.swing.JPanel(); this.main_panel.setLayout(new java.awt.BorderLayout()); this.table_model = new AssignRuleTableModel(); this.table = new AssignRuleTable(this.table_model); this.table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); this.scroll_pane = new javax.swing.JScrollPane(this.table); int table_height = TEXTFIELD_HEIGHT * Math.min(this.table_model.getRowCount(), 20); int table_width = TEXTFIELD_WIDTH * this.table_model.getColumnCount(); this.table.setPreferredScrollableViewportSize(new java.awt.Dimension(table_width, table_height)); this.main_panel.add(scroll_pane, java.awt.BorderLayout.CENTER); add_net_class_combo_box(); p_board_frame.set_context_sensitive_help(this, "WindowNetClasses_AssignNetClass"); this.add(main_panel); this.pack(); } private void add_net_class_combo_box() { this.net_rule_combo_box = new javax.swing.JComboBox(); board.RoutingBoard routing_board = board_frame.board_panel.board_handling.get_routing_board(); for(int i = 0; i < routing_board.rules.net_classes.count(); ++i) { net_rule_combo_box.addItem(routing_board.rules.net_classes.get(i)); } this.table.getColumnModel().getColumn(1).setCellEditor(new javax.swing.DefaultCellEditor(net_rule_combo_box)); } public void refresh() { // Reinsert the net class column. for (int i = 0; i < table_model.getRowCount(); ++i) { table_model.setValueAt(((Net)table_model.getValueAt(i, 0)).get_class(), i, 1); } // Reinsert the net rule combobox because a rule may have been added or deleted. add_net_class_combo_box(); } private final BoardFrame board_frame; private final javax.swing.JPanel main_panel; private javax.swing.JScrollPane scroll_pane; private AssignRuleTable table; private AssignRuleTableModel table_model; private javax.swing.JComboBox net_rule_combo_box; private final java.util.ResourceBundle resources; private static final int TEXTFIELD_HEIGHT = 16; private static final int TEXTFIELD_WIDTH = 100; private class AssignRuleTable extends javax.swing.JTable { public AssignRuleTable(AssignRuleTableModel p_table_model) { super(p_table_model); } //Implement table header tool tips. protected javax.swing.table.JTableHeader createDefaultTableHeader() { return new javax.swing.table.JTableHeader(columnModel) { public String getToolTipText(java.awt.event.MouseEvent e) { java.awt.Point p = e.getPoint(); int index = columnModel.getColumnIndexAtX(p.x); int realIndex = columnModel.getColumn(index).getModelIndex(); return column_tool_tips[realIndex]; } }; } private final String[] column_tool_tips = { resources.getString("net_name_tooltip"), resources.getString("class_name_tooltip") }; } /** * Table model of the net rule table. */ private class AssignRuleTableModel extends javax.swing.table.AbstractTableModel { public AssignRuleTableModel() { column_names = new String[2]; column_names[0] = resources.getString("net_name"); column_names[1] = resources.getString("class_name"); rules.BoardRules board_rules = board_frame.board_panel.board_handling.get_routing_board().rules; data = new Object[board_rules.nets.max_net_no()][]; for (int i = 0; i < data.length; ++i) { this.data[i] = new Object[column_names.length]; } set_values(); } /** Calculates the the valus in this table */ public void set_values() { rules.BoardRules board_rules = board_frame.board_panel.board_handling.get_routing_board().rules; Net[] sorted_arr = new Net[this.getRowCount()]; for (int i = 0; i < sorted_arr.length; ++i) { sorted_arr[i] = board_rules.nets.get(i + 1); } java.util.Arrays.sort(sorted_arr); for (int i = 0; i < data.length; ++i) { this.data[i][0] = sorted_arr[i]; this.data[i][1] = sorted_arr[i].get_class(); } } public String getColumnName(int p_col) { return column_names[p_col]; } public int getRowCount() { return data.length; } public int getColumnCount() { return column_names.length; } public Object getValueAt(int p_row, int p_col) { return data[p_row][p_col]; } public boolean isCellEditable(int p_row, int p_col) { return p_col > 0; } public void setValueAt(Object p_value, int p_row, int p_col) { if (p_col != 1 || !(p_value instanceof NetClass)) { return; } Object first_row_object = getValueAt(p_row, 0); if (!(first_row_object instanceof Net)) { System.out.println("AssignNetRuLesVindow.setValueAt: Net expected"); return; } Net curr_net = (Net) first_row_object; NetClass curr_net_rule = (NetClass)p_value; curr_net.set_class(curr_net_rule); this.data[p_row][p_col] = p_value; fireTableCellUpdated(p_row, p_col); } private Object[][] data = null; private String[] column_names = null; } }