/******************************************************************************* * Copyright 2011 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.badlogic.gdx.tools.particleeditor; import java.awt.Cursor; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JToggleButton; import com.badlogic.gdx.graphics.g2d.ParticleEmitter.ParticleValue; class EditorPanel extends JPanel { private final String name; private final String description; private final ParticleValue value; private JPanel titlePanel; JToggleButton activeButton; private JPanel contentPanel; JToggleButton advancedButton; JPanel advancedPanel; private boolean hasAdvanced; JLabel descriptionLabel; public EditorPanel (ParticleValue value, String name, String description) { this.name = name; this.value = value; this.description = description; initializeComponents(); titlePanel.addMouseListener(new MouseAdapter() { public void mouseClicked (MouseEvent event) { if (!activeButton.isVisible()) return; activeButton.setSelected(!activeButton.isSelected()); updateActive(); } }); activeButton.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent event) { updateActive(); } }); advancedButton.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent event) { advancedPanel.setVisible(advancedButton.isSelected()); } }); if (value != null) { activeButton.setSelected(value.isActive()); updateActive(); } boolean alwaysActive = value == null ? true : value.isAlwaysActive(); activeButton.setVisible(!alwaysActive); if (alwaysActive) contentPanel.setVisible(true); if (alwaysActive) titlePanel.setCursor(null); } void updateActive () { contentPanel.setVisible(activeButton.isSelected()); advancedPanel.setVisible(activeButton.isSelected() && advancedButton.isSelected()); advancedButton.setVisible(activeButton.isSelected() && hasAdvanced); descriptionLabel.setText(activeButton.isSelected() ? description : ""); if (value != null) value.setActive(activeButton.isSelected()); } public void update (ParticlePanel editor) { } public void setHasAdvanced (boolean hasAdvanced) { this.hasAdvanced = hasAdvanced; advancedButton.setVisible(hasAdvanced && (value.isActive() || value.isAlwaysActive())); } public JPanel getContentPanel () { return contentPanel; } public JPanel getAdvancedPanel () { return advancedPanel; } public String getName () { return name; } public void setEmbedded () { GridBagLayout layout = (GridBagLayout)getLayout(); GridBagConstraints constraints = layout.getConstraints(contentPanel); constraints.insets = new Insets(0, 0, 0, 0); layout.setConstraints(contentPanel, constraints); titlePanel.setVisible(false); } private void initializeComponents () { setLayout(new GridBagLayout()); { titlePanel = new JPanel(new GridBagLayout()); add(titlePanel, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 0, 3, 0), 0, 0)); titlePanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); { JLabel label = new JLabel(name); titlePanel.add(label, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0)); label.setFont(label.getFont().deriveFont(Font.BOLD)); } { descriptionLabel = new JLabel(description); titlePanel.add(descriptionLabel, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0)); } { advancedButton = new JToggleButton("Advanced"); titlePanel.add(advancedButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 6), 0, 0)); advancedButton.setVisible(false); } { activeButton = new JToggleButton("Active"); titlePanel.add(activeButton, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 6), 0, 0)); } } { contentPanel = new JPanel(new GridBagLayout()); add(contentPanel, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 6, 6, 6), 0, 0)); contentPanel.setVisible(false); } { advancedPanel = new JPanel(new GridBagLayout()); add(advancedPanel, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 6, 6, 6), 0, 0)); advancedPanel.setVisible(false); } } }