• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright 2011 See AUTHORS file.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16 
17 package com.badlogic.gdx.tools.flame;
18 import java.awt.Dimension;
19 import java.awt.GridBagConstraints;
20 import java.awt.GridBagLayout;
21 import java.awt.Insets;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.ActionListener;
24 
25 import javax.swing.BorderFactory;
26 import javax.swing.JButton;
27 import javax.swing.JCheckBox;
28 import javax.swing.JLabel;
29 import javax.swing.JPanel;
30 import javax.swing.event.ChangeEvent;
31 import javax.swing.event.ChangeListener;
32 
33 import com.badlogic.gdx.graphics.g3d.particles.values.ScaledNumericValue;
34 import com.badlogic.gdx.tools.particleeditor.Chart;
35 
36 /** @author Inferno */
37 class ScaledNumericPanel extends ParticleValuePanel<ScaledNumericValue> {
38 	Slider lowMinSlider, lowMaxSlider;
39 	Slider highMinSlider, highMaxSlider;
40 	JCheckBox relativeCheckBox;
41 	Chart chart;
42 	JPanel formPanel;
43 	JButton expandButton;
44 	JButton lowRangeButton;
45 	JButton highRangeButton;
46 
ScaledNumericPanel(FlameMain editor, ScaledNumericValue value, String chartTitle, String name, String description)47 	public ScaledNumericPanel (FlameMain editor, ScaledNumericValue value, String chartTitle, String name, String description){
48 		this(editor, value, chartTitle, name, description, true);
49 	}
50 
ScaledNumericPanel(FlameMain editor, ScaledNumericValue value, String chartTitle, String name, String description, boolean isAlwaysActive)51 	public ScaledNumericPanel (FlameMain editor, ScaledNumericValue value,
52 												String chartTitle, String name, String description, boolean isAlwaysActive){
53 		super(editor, name, description, isAlwaysActive);
54 		initializeComponents(chartTitle);
55 		setValue(value);
56 	}
57 
getFormPanel()58 	public JPanel getFormPanel () {
59 		return formPanel;
60 	}
61 
initializeComponents(String chartTitle)62 	private void initializeComponents (String chartTitle) {
63 		JPanel contentPanel = getContentPanel();
64 		{
65 			formPanel = new JPanel(new GridBagLayout());
66 			contentPanel.add(formPanel, new GridBagConstraints(5, 5, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE,
67 				new Insets(0, 0, 0, 6), 0, 0));
68 			{
69 				JLabel label = new JLabel("High:");
70 				formPanel.add(label, new GridBagConstraints(2, 1, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE,
71 					new Insets(0, 0, 0, 6), 0, 0));
72 			}
73 			{
74 				highMinSlider = new Slider(0, -999999, 999999, 1f);
75 				formPanel.add(highMinSlider, new GridBagConstraints(3, 1, 1, 1, 0, 0, GridBagConstraints.WEST,
76 					GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
77 			}
78 			{
79 				highMaxSlider = new Slider(0, -999999, 999999, 1f);
80 				formPanel.add(highMaxSlider, new GridBagConstraints(4, 1, 1, 1, 0, 0, GridBagConstraints.WEST,
81 					GridBagConstraints.NONE, new Insets(0, 6, 0, 0), 0, 0));
82 			}
83 			{
84 				highRangeButton = new JButton("<");
85 				highRangeButton.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
86 				formPanel.add(highRangeButton, new GridBagConstraints(5, 1, 1, 1, 0.0, 0, GridBagConstraints.WEST,
87 					GridBagConstraints.NONE, new Insets(0, 1, 0, 0), 0, 0));
88 			}
89 			{
90 				JLabel label = new JLabel("Low:");
91 				formPanel.add(label, new GridBagConstraints(2, 2, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE,
92 					new Insets(0, 0, 0, 6), 0, 0));
93 			}
94 			{
95 				lowMinSlider = new Slider(0, -999999, 999999, 1f);
96 				formPanel.add(lowMinSlider, new GridBagConstraints(3, 2, 1, 1, 0, 0, GridBagConstraints.WEST,
97 					GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
98 			}
99 			{
100 				lowMaxSlider = new Slider(0, -999999, 999999, 1f);
101 				formPanel.add(lowMaxSlider, new GridBagConstraints(4, 2, 1, 1, 0, 0, GridBagConstraints.WEST,
102 					GridBagConstraints.NONE, new Insets(0, 6, 0, 0), 0, 0));
103 			}
104 			{
105 				lowRangeButton = new JButton("<");
106 				lowRangeButton.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
107 				formPanel.add(lowRangeButton, new GridBagConstraints(5, 2, 1, 1, 0.0, 0, GridBagConstraints.WEST,
108 					GridBagConstraints.NONE, new Insets(0, 1, 0, 0), 0, 0));
109 			}
110 		}
111 		{
112 			chart = new Chart(chartTitle) {
113 				public void pointsChanged () {
114 					value.setTimeline(chart.getValuesX());
115 					value.setScaling(chart.getValuesY());
116 				}
117 			};
118 			contentPanel.add(chart, new GridBagConstraints(6, 5, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
119 				new Insets(0, 0, 0, 0), 0, 0));
120 			chart.setPreferredSize(new Dimension(150, 30));
121 		}
122 		{
123 			expandButton = new JButton("+");
124 			contentPanel.add(expandButton, new GridBagConstraints(7, 5, 1, 1, 1, 0, GridBagConstraints.SOUTHWEST,
125 				GridBagConstraints.NONE, new Insets(0, 5, 0, 0), 0, 0));
126 			expandButton.setBorder(BorderFactory.createEmptyBorder(4, 8, 4, 8));
127 		}
128 		{
129 			relativeCheckBox = new JCheckBox("Relative");
130 			contentPanel.add(relativeCheckBox, new GridBagConstraints(7, 5, 1, 1, 0, 0, GridBagConstraints.NORTHWEST,
131 				GridBagConstraints.NONE, new Insets(0, 6, 0, 0), 0, 0));
132 		}
133 
134 		lowMinSlider.addChangeListener(new ChangeListener() {
135 			public void stateChanged (ChangeEvent event) {
136 				ScaledNumericPanel.this.value.setLowMin(lowMinSlider.getValue());
137 				if (!lowMaxSlider.isVisible()) ScaledNumericPanel.this.value.setLowMax(lowMinSlider.getValue());
138 			}
139 		});
140 		lowMaxSlider.addChangeListener(new ChangeListener() {
141 			public void stateChanged (ChangeEvent event) {
142 				ScaledNumericPanel.this.value.setLowMax(lowMaxSlider.getValue());
143 			}
144 		});
145 		highMinSlider.addChangeListener(new ChangeListener() {
146 			public void stateChanged (ChangeEvent event) {
147 				ScaledNumericPanel.this.value.setHighMin(highMinSlider.getValue());
148 				if (!highMaxSlider.isVisible()) ScaledNumericPanel.this.value.setHighMax(highMinSlider.getValue());
149 			}
150 		});
151 		highMaxSlider.addChangeListener(new ChangeListener() {
152 			public void stateChanged (ChangeEvent event) {
153 				ScaledNumericPanel.this.value.setHighMax(highMaxSlider.getValue());
154 			}
155 		});
156 
157 		relativeCheckBox.addActionListener(new ActionListener() {
158 			public void actionPerformed (ActionEvent event) {
159 				ScaledNumericPanel.this.value.setRelative(relativeCheckBox.isSelected());
160 			}
161 		});
162 
163 		lowRangeButton.addActionListener(new ActionListener() {
164 			public void actionPerformed (ActionEvent event) {
165 				boolean visible = !lowMaxSlider.isVisible();
166 				lowMaxSlider.setVisible(visible);
167 				lowRangeButton.setText(visible ? "<" : ">");
168 				GridBagLayout layout = (GridBagLayout)formPanel.getLayout();
169 				GridBagConstraints constraints = layout.getConstraints(lowRangeButton);
170 				constraints.gridx = visible ? 5 : 4;
171 				layout.setConstraints(lowRangeButton, constraints);
172 				Slider slider = visible ? lowMaxSlider : lowMinSlider;
173 				ScaledNumericPanel.this.value.setLowMax(slider.getValue());
174 			}
175 		});
176 
177 		highRangeButton.addActionListener(new ActionListener() {
178 			public void actionPerformed (ActionEvent event) {
179 				boolean visible = !highMaxSlider.isVisible();
180 				highMaxSlider.setVisible(visible);
181 				highRangeButton.setText(visible ? "<" : ">");
182 				GridBagLayout layout = (GridBagLayout)formPanel.getLayout();
183 				GridBagConstraints constraints = layout.getConstraints(highRangeButton);
184 				constraints.gridx = visible ? 5 : 4;
185 				layout.setConstraints(highRangeButton, constraints);
186 				Slider slider = visible ? highMaxSlider : highMinSlider;
187 				ScaledNumericPanel.this.value.setHighMax(slider.getValue());
188 			}
189 		});
190 
191 		expandButton.addActionListener(new ActionListener() {
192 			public void actionPerformed (ActionEvent event) {
193 				chart.setExpanded(!chart.isExpanded());
194 				boolean expanded = chart.isExpanded();
195 				GridBagLayout layout = (GridBagLayout)getContentPanel().getLayout();
196 				GridBagConstraints chartConstraints = layout.getConstraints(chart);
197 				GridBagConstraints expandButtonConstraints = layout.getConstraints(expandButton);
198 				if (expanded) {
199 					chart.setPreferredSize(new Dimension(150, 200));
200 					expandButton.setText("-");
201 					chartConstraints.weightx = 1;
202 					expandButtonConstraints.weightx = 0;
203 				} else {
204 					chart.setPreferredSize(new Dimension(150, 30));
205 					expandButton.setText("+");
206 					chartConstraints.weightx = 0;
207 					expandButtonConstraints.weightx = 1;
208 				}
209 				layout.setConstraints(chart, chartConstraints);
210 				layout.setConstraints(expandButton, expandButtonConstraints);
211 				relativeCheckBox.setVisible(!expanded);
212 				formPanel.setVisible(!expanded);
213 				chart.revalidate();
214 			}
215 		});
216 
217 	}
218 
219 	@Override
setValue(ScaledNumericValue value)220 	public void setValue(ScaledNumericValue value){
221 		super.setValue(value);
222 		if(this.value == null)return;
223 		setValue(lowMinSlider, this.value.getLowMin());
224 		setValue(lowMaxSlider, this.value.getLowMax());
225 		setValue(highMinSlider, this.value.getHighMin());
226 		setValue(highMaxSlider, this.value.getHighMax());
227 		chart.setValues(this.value.getTimeline(), this.value.getScaling());
228 		setValue(relativeCheckBox, this.value.isRelative());
229 
230 		if (	(this.value.getLowMin() == this.value.getLowMax() && lowMaxSlider.isVisible()) ||
231 				(this.value.getLowMin() != this.value.getLowMax() && !lowMaxSlider.isVisible()) ) {
232 			lowRangeButton.doClick(0);
233 		}
234 		if ( 	((this.value.getHighMin() == this.value.getHighMax()) && highMaxSlider.isVisible()) ||
235 				((this.value.getHighMin() != this.value.getHighMax()) && !highMaxSlider.isVisible()) )
236 			highRangeButton.doClick(0);
237 	}
238 
getChart()239 	public Chart getChart(){
240 		return chart;
241 	}
242 
243 }
244