/*
* 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.
*
* WindowAutorouteParameter.java
*
* Created on 24. Juli 2006, 07:20
*
*/
package gui;
/**
* Window handling parameters of the automatic routing.
*
* @author Alfons Wirtz
*/
public class WindowAutorouteParameter extends BoardSavableSubWindow
{
/** Creates a new instance of WindowAutorouteParameter */
public WindowAutorouteParameter(BoardFrame p_board_frame)
{
this.board_handling = p_board_frame.board_panel.board_handling;
java.util.ResourceBundle resources =
java.util.ResourceBundle.getBundle("gui.resources.WindowAutorouteParameter", p_board_frame.get_locale());
this.setTitle(resources.getString("title"));
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
// 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(1, 10, 1, 10);
gridbag_constraints.gridwidth = 3;
javax.swing.JLabel layer_label = new javax.swing.JLabel(resources.getString("layer"));
gridbag.setConstraints(layer_label, gridbag_constraints);
main_panel.add(layer_label);
javax.swing.JLabel active_label = new javax.swing.JLabel(resources.getString("active"));
gridbag.setConstraints(active_label, gridbag_constraints);
main_panel.add(active_label);
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
javax.swing.JLabel preferred_direction_label = new javax.swing.JLabel(resources.getString("preferred_direction"));
gridbag.setConstraints(preferred_direction_label, gridbag_constraints);
main_panel.add(preferred_direction_label);
this.horizontal = resources.getString("horizontal");
this.vertical = resources.getString("vertical");
board.LayerStructure layer_structure = board_handling.get_routing_board().layer_structure;
int signal_layer_count = layer_structure.signal_layer_count();
signal_layer_name_arr = new javax.swing.JLabel[signal_layer_count];
signal_layer_active_arr = new javax.swing.JCheckBox[signal_layer_count];
combo_box_arr = new javax.swing.JComboBox[signal_layer_count];
for (int i = 0; i < signal_layer_count; ++i)
{
signal_layer_name_arr[i] = new javax.swing.JLabel();
board.Layer curr_signal_layer = layer_structure.get_signal_layer(i);
signal_layer_name_arr[i].setText(curr_signal_layer.name);
gridbag_constraints.gridwidth = 3;
gridbag.setConstraints(signal_layer_name_arr[i], gridbag_constraints);
main_panel.add(signal_layer_name_arr[i]);
signal_layer_active_arr[i] = new javax.swing.JCheckBox();
signal_layer_active_arr[i].addActionListener(new LayerActiveListener(i));
gridbag.setConstraints(signal_layer_active_arr[i], gridbag_constraints);
main_panel.add(signal_layer_active_arr[i]);
combo_box_arr[i] = new javax.swing.JComboBox();
combo_box_arr[i].addItem(this.horizontal);
combo_box_arr[i].addItem(this.vertical);
combo_box_arr[i].addActionListener(new PreferredDirectionListener(i));
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridbag.setConstraints(combo_box_arr[i], gridbag_constraints);
main_panel.add(combo_box_arr[i]);
}
javax.swing.JLabel separator = new javax.swing.JLabel("---------------------------------------- ");
gridbag.setConstraints(separator, gridbag_constraints);
main_panel.add(separator, gridbag_constraints);
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
javax.swing.JLabel vias_allowed_label = new javax.swing.JLabel(resources.getString("vias_allowed"));
gridbag.setConstraints(vias_allowed_label, gridbag_constraints);
main_panel.add(vias_allowed_label);
this.vias_allowed = new javax.swing.JCheckBox();
this.vias_allowed.addActionListener(new ViasAllowedListener());
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridbag.setConstraints(vias_allowed, gridbag_constraints);
main_panel.add(vias_allowed);
separator = new javax.swing.JLabel("---------------------------------------- ");
gridbag.setConstraints(separator, gridbag_constraints);
main_panel.add(separator, gridbag_constraints);
javax.swing.JLabel passes_label = new javax.swing.JLabel(resources.getString("passes"));
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
gridbag_constraints.gridheight = 3;
gridbag.setConstraints(passes_label, gridbag_constraints);
main_panel.add(passes_label);
this.fanout_pass_button = new javax.swing.JRadioButton(resources.getString("fanout"));
this.autoroute_pass_button = new javax.swing.JRadioButton(resources.getString("autoroute"));
this.postroute_pass_button = new javax.swing.JRadioButton(resources.getString("postroute"));
fanout_pass_button.addActionListener(new FanoutListener());
autoroute_pass_button.addActionListener(new AutorouteListener());
postroute_pass_button.addActionListener(new PostrouteListener());
fanout_pass_button.setSelected(false);
autoroute_pass_button.setSelected(true);
autoroute_pass_button.setSelected(true);
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridbag_constraints.gridheight = 1;
gridbag.setConstraints(fanout_pass_button, gridbag_constraints);
main_panel.add(fanout_pass_button, gridbag_constraints);
gridbag.setConstraints(autoroute_pass_button, gridbag_constraints);
main_panel.add(autoroute_pass_button, gridbag_constraints);
gridbag.setConstraints(postroute_pass_button, gridbag_constraints);
main_panel.add(postroute_pass_button, gridbag_constraints);
separator = new javax.swing.JLabel("---------------------------------------- ");
gridbag.setConstraints(separator, gridbag_constraints);
main_panel.add(separator, gridbag_constraints);
detail_window = new WindowAutorouteDetailParameter(p_board_frame);
javax.swing.JButton detail_button = new javax.swing.JButton(resources.getString("detail_parameter"));
this.detail_listener = new DetailListener();
detail_button.addActionListener(detail_listener);
gridbag.setConstraints(detail_button, gridbag_constraints);
main_panel.add(detail_button);
p_board_frame.set_context_sensitive_help(this, "WindowAutorouteParameter");
this.refresh();
this.pack();
this.setResizable(false);
}
/**
* Recalculates all displayed values
*/
public void refresh()
{
interactive.AutorouteSettings settings = this.board_handling.settings.autoroute_settings;
board.LayerStructure layer_structure = this.board_handling.get_routing_board().layer_structure;
this.vias_allowed.setSelected(settings.get_vias_allowed());
this.fanout_pass_button.setSelected(settings.get_with_fanout());
this.autoroute_pass_button.setSelected(settings.get_with_autoroute());
this.postroute_pass_button.setSelected(settings.get_with_postroute());
for (int i = 0; i < signal_layer_active_arr.length; ++i)
{
this.signal_layer_active_arr[i].setSelected(settings.get_layer_active(layer_structure.get_layer_no(i)));
}
for (int i = 0; i < combo_box_arr.length; ++i)
{
if (settings.get_preferred_direction_is_horizontal(layer_structure.get_layer_no(i)))
{
this.combo_box_arr[i].setSelectedItem(this.horizontal);
}
else
{
this.combo_box_arr[i].setSelectedItem(this.vertical);
}
}
this.detail_window.refresh();
}
public void dispose()
{
detail_window.dispose();
super.dispose();
}
public void parent_iconified()
{
detail_window.parent_iconified();
super.parent_iconified();
}
public void parent_deiconified()
{
detail_window.parent_deiconified();
super.parent_deiconified();
}
private final interactive.BoardHandling board_handling;
private final javax.swing.JLabel[] signal_layer_name_arr;
private final javax.swing.JCheckBox[] signal_layer_active_arr;
private final javax.swing.JComboBox[] combo_box_arr;
private final javax.swing.JCheckBox vias_allowed;
private final javax.swing.JRadioButton fanout_pass_button;
private final javax.swing.JRadioButton autoroute_pass_button;
private final javax.swing.JRadioButton postroute_pass_button;
private final WindowAutorouteDetailParameter detail_window;
private final DetailListener detail_listener;
private final String horizontal;
private final String vertical;
private class DetailListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
if (first_time)
{
java.awt.Point location = getLocation();
detail_window.setLocation((int) location.getX() + 200, (int) location.getY() + 100);
first_time = false;
}
detail_window.setVisible(true);
}
private boolean first_time = true;
}
private class LayerActiveListener implements java.awt.event.ActionListener
{
public LayerActiveListener(int p_layer_no)
{
signal_layer_no = p_layer_no;
}
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
int curr_layer_no = board_handling.get_routing_board().layer_structure.get_layer_no(this.signal_layer_no);
board_handling.settings.autoroute_settings.set_layer_active(curr_layer_no, signal_layer_active_arr[this.signal_layer_no].isSelected());
}
private final int signal_layer_no;
}
private class PreferredDirectionListener implements java.awt.event.ActionListener
{
public PreferredDirectionListener(int p_layer_no)
{
signal_layer_no = p_layer_no;
}
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
int curr_layer_no = board_handling.get_routing_board().layer_structure.get_layer_no(this.signal_layer_no);
board_handling.settings.autoroute_settings.set_preferred_direction_is_horizontal(curr_layer_no,
combo_box_arr[signal_layer_no].getSelectedItem() == horizontal);
}
private final int signal_layer_no;
}
private class ViasAllowedListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
board_handling.settings.autoroute_settings.set_vias_allowed(vias_allowed.isSelected());
}
}
private class FanoutListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
interactive.AutorouteSettings autoroute_settings = board_handling.settings.autoroute_settings;
autoroute_settings.set_with_fanout(fanout_pass_button.isSelected());
autoroute_settings.set_pass_no(1);
}
}
private class AutorouteListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
interactive.AutorouteSettings autoroute_settings = board_handling.settings.autoroute_settings;
autoroute_settings.set_with_autoroute(autoroute_pass_button.isSelected());
autoroute_settings.set_pass_no(1);
}
}
private class PostrouteListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
interactive.AutorouteSettings autoroute_settings = board_handling.settings.autoroute_settings;
autoroute_settings.set_with_postroute(postroute_pass_button.isSelected());
autoroute_settings.set_pass_no(1);
}
}
}