/* * 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. * * RouteDetailWindow.java * * Created on 18. November 2004, 07:31 */ package gui; import board.BasicBoard; import board.BoardOutline; /** * Window handling detail parameters of the interactive routing. * * @author Alfons Wirtz */ public class WindowRouteDetail extends BoardSavableSubWindow { /** Creates a new instance of RouteDetailWindow */ public WindowRouteDetail(BoardFrame p_board_frame) { this.board_handling = p_board_frame.board_panel.board_handling; java.util.ResourceBundle resources = java.util.ResourceBundle.getBundle("gui.resources.WindowRouteDetail", p_board_frame.get_locale()); this.setTitle(resources.getString("title")); // create main panel final javax.swing.JPanel main_panel = new javax.swing.JPanel(); getContentPane().add(main_panel); java.awt.GridBagLayout gridbag = new java.awt.GridBagLayout(); main_panel.setLayout(gridbag); java.awt.GridBagConstraints gridbag_constraints = new java.awt.GridBagConstraints(); gridbag_constraints.anchor = java.awt.GridBagConstraints.WEST; gridbag_constraints.insets = new java.awt.Insets(5, 10, 5, 10); // add label and button group for the clearance compensation. javax.swing.JLabel clearance_compensation_label = new javax.swing.JLabel(resources.getString("clearance_compensation")); clearance_compensation_label.setToolTipText(resources.getString("clearance_compensation_tooltip")); gridbag_constraints.gridwidth = java.awt.GridBagConstraints.RELATIVE; gridbag_constraints.gridheight = 2; gridbag.setConstraints(clearance_compensation_label, gridbag_constraints); main_panel.add(clearance_compensation_label); this.on_button = new javax.swing.JRadioButton(resources.getString("on")); this.off_button = new javax.swing.JRadioButton(resources.getString("off")); on_button.addActionListener(new CompensationOnListener()); off_button.addActionListener(new CompensationOffListener()); javax.swing.ButtonGroup clearance_compensation_button_group = new javax.swing.ButtonGroup(); clearance_compensation_button_group.add(on_button); clearance_compensation_button_group.add(off_button); off_button.setSelected(true); gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridbag_constraints.gridheight = 1; gridbag.setConstraints(on_button, gridbag_constraints); main_panel.add(on_button, gridbag_constraints); gridbag.setConstraints(off_button, gridbag_constraints); main_panel.add(off_button, gridbag_constraints); javax.swing.JLabel separator = new javax.swing.JLabel(" ---------------------------------------- "); gridbag.setConstraints(separator, gridbag_constraints); main_panel.add(separator, gridbag_constraints); // add label and slider for the pull tight accuracy. javax.swing.JLabel pull_tight_accuracy_label = new javax.swing.JLabel(resources.getString("pull_tight_accuracy")); pull_tight_accuracy_label.setToolTipText(resources.getString("pull_tight_accuracy_tooltip")); gridbag_constraints.insets = new java.awt.Insets(5, 10, 5, 10); gridbag.setConstraints(pull_tight_accuracy_label, gridbag_constraints); main_panel.add(pull_tight_accuracy_label); this.accuracy_slider = new javax.swing.JSlider(); accuracy_slider.setMaximum(c_max_slider_value); accuracy_slider.addChangeListener(new SliderChangeListener()); gridbag.setConstraints(accuracy_slider, gridbag_constraints); main_panel.add(accuracy_slider); separator = new javax.swing.JLabel(" ---------------------------------------- "); gridbag.setConstraints(separator, gridbag_constraints); main_panel.add(separator, gridbag_constraints); // add switch to define, if keepout is generated outside the outline. this.outline_keepout_check_box = new javax.swing.JCheckBox(resources.getString("keepout_outside_outline")); this.outline_keepout_check_box.setSelected(false); this.outline_keepout_check_box.addActionListener(new OutLineKeepoutListener()); gridbag.setConstraints(outline_keepout_check_box, gridbag_constraints); this.outline_keepout_check_box.setToolTipText(resources.getString("keepout_outside_outline_tooltip")); main_panel.add(outline_keepout_check_box, gridbag_constraints); separator = new javax.swing.JLabel(); gridbag.setConstraints(separator, gridbag_constraints); main_panel.add(separator, gridbag_constraints); this.refresh(); this.pack(); this.setResizable(false); } /** * Recalculates all displayed values */ public void refresh() { if (this.board_handling.get_routing_board().search_tree_manager.is_clearance_compensation_used()) { this.on_button.setSelected(true); } else { this.off_button.setSelected(true); } BoardOutline outline = this.board_handling.get_routing_board().get_outline(); if (outline != null) { this.outline_keepout_check_box.setSelected(outline.keepout_outside_outline_generated()); } int accuracy_slider_value = c_max_slider_value - this.board_handling.settings.get_trace_pull_tight_accuracy() / c_accuracy_scale_factor + 1; accuracy_slider.setValue(accuracy_slider_value); } private final interactive.BoardHandling board_handling; private final javax.swing.JSlider accuracy_slider; private final javax.swing.JRadioButton on_button; private final javax.swing.JRadioButton off_button; private final javax.swing.JCheckBox outline_keepout_check_box; private static final int c_max_slider_value = 100; private static final int c_accuracy_scale_factor = 20; private class CompensationOnListener implements java.awt.event.ActionListener { public void actionPerformed(java.awt.event.ActionEvent p_evt) { board_handling.set_clearance_compensation(true); } } private class CompensationOffListener implements java.awt.event.ActionListener { public void actionPerformed(java.awt.event.ActionEvent p_evt) { board_handling.set_clearance_compensation(false); } } private class SliderChangeListener implements javax.swing.event.ChangeListener { public void stateChanged(javax.swing.event.ChangeEvent evt) { int new_accurracy = (c_max_slider_value - accuracy_slider.getValue() + 1) * c_accuracy_scale_factor; board_handling.settings.set_current_pull_tight_accuracy(new_accurracy); } } private class OutLineKeepoutListener implements java.awt.event.ActionListener { public void actionPerformed(java.awt.event.ActionEvent p_evt) { if (board_handling.is_board_read_only()) { return; } BoardOutline outline = board_handling.get_routing_board().get_outline(); if (outline != null) { outline.generate_keepout_outside(outline_keepout_check_box.isSelected()); } } } }