/*
* 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.
*
* WindowMoveParameter.java
*
* Created on 16. September 2005, 06:53
*
*/
package gui;
/**
* Window with the parameters for moving components.
*
* @author Alfons Wirtz
*/
public class WindowMoveParameter extends BoardSavableSubWindow
{
/** Creates a new instance of WindowMoveParameter */
public WindowMoveParameter(BoardFrame p_board_frame)
{
this.board_handling = p_board_frame.board_panel.board_handling;
java.util.ResourceBundle resources =
java.util.ResourceBundle.getBundle("gui.resources.WindowMoveParameter", p_board_frame.get_locale());
this.setTitle(resources.getString("title"));
// create main panel
final javax.swing.JPanel main_panel = new javax.swing.JPanel();
this.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);
// Create label and number field for the horizontal and verical component grid
gridbag_constraints.gridwidth = 2;
javax.swing.JLabel horizontal_grid_label = new javax.swing.JLabel(resources.getString("horizontal_component_grid"));
gridbag.setConstraints(horizontal_grid_label, gridbag_constraints);
main_panel.add(horizontal_grid_label);
java.text.NumberFormat number_format = java.text.NumberFormat.getInstance(p_board_frame.get_locale());
number_format.setMaximumFractionDigits(7);
this.horizontal_grid_field = new javax.swing.JFormattedTextField(number_format);
this.horizontal_grid_field.setColumns(5);
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridbag.setConstraints(horizontal_grid_field, gridbag_constraints);
main_panel.add(horizontal_grid_field);
set_horizontal_grid_field(this.board_handling.settings.get_horizontal_component_grid());
horizontal_grid_field.addKeyListener(new HorizontalGridFieldKeyListener());
horizontal_grid_field.addFocusListener(new HorizontalGridFieldFocusListener());
gridbag_constraints.gridwidth = 2;
javax.swing.JLabel vertical_grid_label = new javax.swing.JLabel(resources.getString("vertical_component_grid"));
gridbag.setConstraints(vertical_grid_label, gridbag_constraints);
main_panel.add(vertical_grid_label);
this.vertical_grid_field = new javax.swing.JFormattedTextField(number_format);
this.vertical_grid_field.setColumns(5);
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridbag.setConstraints(vertical_grid_field, gridbag_constraints);
main_panel.add(vertical_grid_field);
set_vertical_grid_field(this.board_handling.settings.get_vertical_component_grid());
vertical_grid_field.addKeyListener(new VerticalGridFieldKeyListener());
vertical_grid_field.addFocusListener(new VerticalGridFieldFocusListener());
javax.swing.JLabel separator = new javax.swing.JLabel(" ----------------------------------------------- ");
gridbag.setConstraints(separator, gridbag_constraints);
main_panel.add(separator, gridbag_constraints);
// add label and button group for the wheel function.
javax.swing.JLabel wheel_function_label = new javax.swing.JLabel(resources.getString("wheel_function"));
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
gridbag_constraints.gridheight = 2;
gridbag.setConstraints(wheel_function_label, gridbag_constraints);
main_panel.add(wheel_function_label);
wheel_function_label.setToolTipText(resources.getString("wheel_function_tooltip"));
this.zoom_button = new javax.swing.JRadioButton(resources.getString("zoom"));
this.rotate_button = new javax.swing.JRadioButton(resources.getString("rotate"));
zoom_button.addActionListener(new ZoomButtonListener());
rotate_button.addActionListener(new RotateButtonListener());
javax.swing.ButtonGroup button_group = new javax.swing.ButtonGroup();
button_group.add(zoom_button);
button_group.add(rotate_button);
if (this.board_handling.settings.get_zoom_with_wheel())
{
zoom_button.setSelected(true);
}
else
{
rotate_button.setSelected(true);
}
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridbag_constraints.gridheight = 1;
gridbag.setConstraints(zoom_button, gridbag_constraints);
main_panel.add(zoom_button, gridbag_constraints);
gridbag.setConstraints(rotate_button, gridbag_constraints);
main_panel.add(rotate_button, gridbag_constraints);
p_board_frame.set_context_sensitive_help(this, "WindowMoveParameter");
this.refresh();
this.pack();
this.setResizable(false);
}
private void set_horizontal_grid_field(double p_value)
{
if (p_value <= 0)
{
this.horizontal_grid_field.setValue(0);
}
else
{
Float grid_width =(float) board_handling.coordinate_transform.board_to_user(p_value);
this.horizontal_grid_field.setValue(grid_width);
}
}
private void set_vertical_grid_field(double p_value)
{
if (p_value <= 0)
{
this.vertical_grid_field.setValue(0);
}
else
{
Float grid_width =(float) board_handling.coordinate_transform.board_to_user(p_value);
this.vertical_grid_field.setValue(grid_width);
}
}
private final interactive.BoardHandling board_handling;
private final javax.swing.JFormattedTextField horizontal_grid_field;
private final javax.swing.JFormattedTextField vertical_grid_field;
private boolean key_input_completed = true;
private final javax.swing.JRadioButton zoom_button;
private final javax.swing.JRadioButton rotate_button;
private class HorizontalGridFieldKeyListener extends java.awt.event.KeyAdapter
{
public void keyTyped(java.awt.event.KeyEvent p_evt)
{
if (p_evt.getKeyChar() == '\n')
{
key_input_completed = true;
Object input = horizontal_grid_field.getValue();
double input_value;
if (!(input instanceof Number))
{
input_value = 0;
}
input_value = ((Number)input).doubleValue();
if (input_value < 0)
{
input_value = 0;
}
board_handling.settings.set_horizontal_component_grid
((int) Math.round(board_handling.coordinate_transform.user_to_board(input_value)));
set_horizontal_grid_field(board_handling.settings.get_horizontal_component_grid());
}
else
{
key_input_completed = false;
}
}
}
private class HorizontalGridFieldFocusListener implements java.awt.event.FocusListener
{
public void focusLost(java.awt.event.FocusEvent p_evt)
{
if (!key_input_completed)
{
// restore the text field.
set_horizontal_grid_field(board_handling.settings.get_horizontal_component_grid());
key_input_completed = true;
}
}
public void focusGained(java.awt.event.FocusEvent p_evt)
{
}
}
private class VerticalGridFieldKeyListener extends java.awt.event.KeyAdapter
{
public void keyTyped(java.awt.event.KeyEvent p_evt)
{
if (p_evt.getKeyChar() == '\n')
{
key_input_completed = true;
Object input = vertical_grid_field.getValue();
double input_value;
if (!(input instanceof Number))
{
input_value = 0;
}
input_value = ((Number)input).doubleValue();
if (input_value < 0)
{
input_value = 0;
}
board_handling.settings.set_vertical_component_grid
((int) Math.round(board_handling.coordinate_transform.user_to_board(input_value)));
set_vertical_grid_field(board_handling.settings.get_vertical_component_grid());
}
else
{
key_input_completed = false;
}
}
}
private class VerticalGridFieldFocusListener implements java.awt.event.FocusListener
{
public void focusLost(java.awt.event.FocusEvent p_evt)
{
if (!key_input_completed)
{
// restore the text field.
set_vertical_grid_field(board_handling.settings.get_vertical_component_grid());
key_input_completed = true;
}
}
public void focusGained(java.awt.event.FocusEvent p_evt)
{
}
}
private class ZoomButtonListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
board_handling.settings.set_zoom_with_wheel(true);
}
}
private class RotateButtonListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
board_handling.settings.set_zoom_with_wheel(false);
}
}
}