/*
* 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.
*
* VisibilityFrame.java
*
* Created on 7. November 2004, 11:29
*/
package gui;
/**
* Interactive Frame to adjust the visibility of a set of objects
*
* @author Alfons Wirtz
*/
public abstract class WindowVisibility extends BoardSavableSubWindow
{
/** Creates a new instance of VisibilityFrame */
public WindowVisibility(BoardFrame p_board_frame, String p_title, String p_header_message, String[] p_message_arr)
{
this.board_panel = p_board_frame.board_panel;
this.setTitle(p_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.insets = new java.awt.Insets(5, 10, 5, 10);
header_message = new javax.swing.JLabel();
header_message.setText(p_header_message);
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridbag_constraints.ipady = 10;
gridbag.setConstraints(header_message, gridbag_constraints);
main_panel.add(header_message);
slider_arr = new javax.swing.JSlider[p_message_arr.length];
message_arr = new javax.swing.JLabel [p_message_arr.length];
gridbag_constraints.ipady = 0;
for (int i = 0; i < p_message_arr.length; ++i)
{
message_arr[i] = new javax.swing.JLabel();
message_arr[i].setText(p_message_arr[i]);
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
gridbag.setConstraints(message_arr[i], gridbag_constraints);
main_panel.add(message_arr[i]);
slider_arr[i] = new javax.swing.JSlider(0, MAX_SLIDER_VALUE);
gridbag_constraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridbag.setConstraints(slider_arr[i], gridbag_constraints);
main_panel.add(slider_arr[i]);
slider_arr[i].addChangeListener(new SliderChangeListener(i));
}
javax.swing.JLabel empty_label = new javax.swing.JLabel();
gridbag.setConstraints(empty_label, gridbag_constraints);
main_panel.add(empty_label);
gridbag_constraints.gridwidth = 2;
java.util.ResourceBundle resources =
java.util.ResourceBundle.getBundle("gui.resources.Default", p_board_frame.get_locale());
javax.swing.JButton min_all_button = new javax.swing.JButton(resources.getString("minimum_all"));
min_all_button.setToolTipText(resources.getString("minimum_all_tooltip"));
min_all_button.addActionListener(new MinAllButtonListener());
gridbag.setConstraints(min_all_button, gridbag_constraints);
main_panel.add(min_all_button);
javax.swing.JButton max_all_button = new javax.swing.JButton(resources.getString("maximum_all"));
max_all_button.setToolTipText(resources.getString("maximum_all_tooltip"));
max_all_button.addActionListener(new MaxAllButtonListener());
gridbag.setConstraints(max_all_button, gridbag_constraints);
main_panel.add(max_all_button);
this.pack();
this.setResizable(false);
}
/**
* Sets the values of the p_no-ths slider contained in this frame.
*/
public void set_slider_value( int p_no, double p_value)
{
int visibility = (int) Math.round(p_value * MAX_SLIDER_VALUE);
slider_arr[p_no].setValue(visibility);
}
protected interactive.BoardHandling get_board_handling()
{
return board_panel.board_handling;
}
protected void set_all_minimum()
{
for (int i = 0; i < slider_arr.length; ++i)
{
set_slider_value(i, 0);
set_changed_value(i, 0);
}
}
protected void set_all_maximum()
{
for (int i = 0; i < slider_arr.length; ++i)
{
set_slider_value(i, MAX_SLIDER_VALUE);
set_changed_value(i, 1);
}
}
/**
* Stores the new value in the board database, when a slider value was changed.
*/
protected abstract void set_changed_value(int p_index, double p_value);
// private data
private final BoardPanel board_panel;
private final javax.swing.JLabel header_message;
private final javax.swing.JLabel [] message_arr;
private final javax.swing.JSlider [] slider_arr;
private static final int MAX_SLIDER_VALUE = 100;
// private classes
private class MinAllButtonListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
set_all_minimum();
board_panel.repaint();
}
}
private class MaxAllButtonListener implements java.awt.event.ActionListener
{
public void actionPerformed(java.awt.event.ActionEvent p_evt)
{
set_all_maximum();
board_panel.repaint();
}
}
/**
* p_slider_no is required to identify the number of the slider in slider_arr.
*/
private class SliderChangeListener implements javax.swing.event.ChangeListener
{
public SliderChangeListener(int p_slider_no)
{
slider_no = p_slider_no;
}
public void stateChanged(javax.swing.event.ChangeEvent evt)
{
int new_visibility = slider_arr[slider_no].getValue();
set_changed_value(slider_no, ((double) new_visibility) / ((double)MAX_SLIDER_VALUE));
board_panel.repaint();
}
public int slider_no;
}
}