/*
* 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.
*
* SelectParameterWindow.java
*
* Created on 19. November 2004, 11:12
*/
package gui;
import board.ItemSelectionFilter;
/**
* Window for the handling of the interactive selection parameters,
*
* @author Alfons Wirtz
*/
public class WindowSelectParameter extends BoardSavableSubWindow
{
/** Creates a new instance of SelectWindow */
public WindowSelectParameter(BoardFrame p_board_frame)
{
this.board_handling = p_board_frame.board_panel.board_handling;
java.util.ResourceBundle resources =
java.util.ResourceBundle.getBundle("gui.resources.WindowSelectParameter", 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.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridbag_constraints.insets = new java.awt.Insets(1, 10, 1, 10);
// Create buttongroup for the selection layers
javax.swing.JLabel selection_layer_label = new javax.swing.JLabel(resources.getString("selection_layers"));
gridbag.setConstraints(selection_layer_label, gridbag_constraints);
main_panel.add(selection_layer_label);
this.all_visible_button = new javax.swing.JRadioButton(resources.getString("all_visible"));
all_visible_button.setToolTipText(resources.getString("all_visible_tooltip"));
this.current_only_button = new javax.swing.JRadioButton(resources.getString("current_only"));
current_only_button.setToolTipText(resources.getString("current_only_tooltip"));
all_visible_button.addActionListener(new AllVisibleListener());
current_only_button.addActionListener(new CurrentOnlyListener());
javax.swing.ButtonGroup selection_layer_button_group = new javax.swing.ButtonGroup();
selection_layer_button_group.add(all_visible_button);
selection_layer_button_group.add(current_only_button);
gridbag_constraints.gridheight = 1;
gridbag.setConstraints(all_visible_button, gridbag_constraints);
main_panel.add(all_visible_button, gridbag_constraints);
gridbag.setConstraints(current_only_button, gridbag_constraints);
main_panel.add(current_only_button, gridbag_constraints);
javax.swing.JLabel separator = new javax.swing.JLabel(" ---------------------------------------- ");
gridbag.setConstraints(separator, gridbag_constraints);
main_panel.add(separator, gridbag_constraints);
// Create check boxes for selectable items:
javax.swing.JLabel selectable_items_label = new javax.swing.JLabel(resources.getString("selectable_items"));
gridbag.setConstraints(selectable_items_label, gridbag_constraints);
main_panel.add(selectable_items_label);
final ItemSelectionFilter.SelectableChoices[] filter_values = ItemSelectionFilter.SelectableChoices.values();
this.item_selection_choices = new javax.swing.JCheckBox [filter_values.length];
for (int i = 0; i < filter_values.length; ++i)
{
this.item_selection_choices[i] = new javax.swing.JCheckBox(resources.getString(filter_values[i].toString()));
gridbag.setConstraints(this.item_selection_choices[i], gridbag_constraints);
main_panel.add(this.item_selection_choices[i], gridbag_constraints);
this.item_selection_choices[i].addActionListener(new ItemSelectionListener(i));
}
javax.swing.JLabel separator2 = new javax.swing.JLabel(" ---------------------------------------- ");
gridbag.setConstraints(separator2, gridbag_constraints);
main_panel.add(separator2, gridbag_constraints);
// Create buttongroup for the current layer:
board.LayerStructure layer_structure = this.board_handling.get_routing_board().layer_structure;
int signal_layer_count = layer_structure.signal_layer_count();
javax.swing.JLabel current_layer_label = new javax.swing.JLabel(resources.getString("current_layer"));
current_layer_label.setToolTipText(resources.getString("current_layer_tooltip"));
gridbag.setConstraints(current_layer_label, gridbag_constraints);
main_panel.add(current_layer_label);
this.layer_name_arr = new javax.swing.JRadioButton [signal_layer_count];
javax.swing.ButtonGroup current_layer_button_group = new javax.swing.ButtonGroup();
gridbag_constraints.gridheight = 1;
for (int i = 0; i < signal_layer_count; ++i)
{
board.Layer curr_signal_layer = layer_structure.get_signal_layer(i);
layer_name_arr[i] = new javax.swing.JRadioButton();
layer_name_arr[i].setText(curr_signal_layer.name);
gridbag.setConstraints(layer_name_arr[i], gridbag_constraints);
main_panel.add(layer_name_arr[i]);
current_layer_button_group.add(layer_name_arr[i]);
int layer_no = layer_structure.get_no(curr_signal_layer);
layer_name_arr[i].addActionListener(new CurrentLayerListener(i, layer_no));
}
javax.swing.JLabel empty_label = new javax.swing.JLabel();
gridbag.setConstraints(empty_label, gridbag_constraints);
main_panel.add(empty_label);
p_board_frame.set_context_sensitive_help(this, "WindowSelectParameter");
this.refresh();
this.pack();
this.setResizable(false);
}
/**
* Refreshs the displayed values in this window.
*/
public void refresh()
{
if (this.board_handling.settings.get_select_on_all_visible_layers())
{
all_visible_button.setSelected(true);
}
else
{
current_only_button.setSelected(true);
}
ItemSelectionFilter item_selection_filter = this.board_handling.settings.get_item_selection_filter();
if (item_selection_filter == null)
{
System.out.println("SelectParameterWindow.refresh: item_selection_filter is null");
}
else
{
final ItemSelectionFilter.SelectableChoices[] filter_values = ItemSelectionFilter.SelectableChoices.values();
for (int i = 0; i < filter_values.length; ++i)
{
this.item_selection_choices[i].setSelected(item_selection_filter.is_selected(filter_values[i])) ;
}
}
board.LayerStructure layer_structure = this.board_handling.get_routing_board().layer_structure;
board.Layer current_layer = layer_structure.arr[this.board_handling.settings.get_layer()];
layer_name_arr[layer_structure.get_signal_layer_no(current_layer)].setSelected(true);
}
/**
* Selects the layer with the input signal number.
*/
public void select(int p_signal_layer_no)
{
layer_name_arr[p_signal_layer_no].setSelected(true);
}
private final interactive.BoardHandling board_handling;
private final javax.swing.JRadioButton [] layer_name_arr;
private final javax.swing.JCheckBox [] item_selection_choices;
private final javax.swing.JRadioButton all_visible_button;
private final javax.swing.JRadioButton current_only_button;
private class CurrentLayerListener implements java.awt.event.ActionListener
{
public CurrentLayerListener(int p_signal_layer_no, int p_layer_no)
{
signal_layer_no = p_signal_layer_no;
layer_no = p_layer_no;
}
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
board_handling.set_current_layer(layer_no);
}
public final int signal_layer_no;
public final int layer_no;
}
private class AllVisibleListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
board_handling.settings.set_select_on_all_visible_layers(true);
}
}
private class CurrentOnlyListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
board_handling.settings.set_select_on_all_visible_layers(false);
}
}
private class ItemSelectionListener implements java.awt.event.ActionListener
{
public ItemSelectionListener(int p_item_no)
{
item_no = p_item_no;
}
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
boolean is_selected = item_selection_choices[item_no].isSelected();
ItemSelectionFilter.SelectableChoices item_type = ItemSelectionFilter.SelectableChoices.values()[item_no];
board_handling.set_selectable(item_type, is_selected);
// make shure that from fixed and unfixed items at least one type is selected.
if (item_type == ItemSelectionFilter.SelectableChoices.FIXED)
{
int unfixed_no = ItemSelectionFilter.SelectableChoices.UNFIXED.ordinal();
if (!is_selected && ! item_selection_choices[unfixed_no].isSelected())
{
item_selection_choices[unfixed_no].setSelected(true);
board_handling.set_selectable(ItemSelectionFilter.SelectableChoices.UNFIXED, true);
}
}
else if (item_type == ItemSelectionFilter.SelectableChoices.UNFIXED)
{
int fixed_no = ItemSelectionFilter.SelectableChoices.FIXED.ordinal();
if (!is_selected && ! item_selection_choices[fixed_no].isSelected())
{
item_selection_choices[fixed_no].setSelected(true);
board_handling.set_selectable(ItemSelectionFilter.SelectableChoices.FIXED, true);
}
}
}
private final int item_no;
}
}