All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.badlogic.gdx.tools.flame.EditorPanel Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * 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.flame;

import java.awt.Container;
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.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JToggleButton;
import javax.swing.event.ChangeListener;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

/** @author Inferno */
public abstract class EditorPanel extends JPanel {
	private String name;
	private String description;
	protected T value;
	private JPanel titlePanel;
	JToggleButton activeButton;
	JPanel contentPanel;
	JToggleButton advancedButton;
	JButton removeButton;
	JPanel advancedPanel;
	private boolean hasAdvanced;
	JLabel nameLabel, descriptionLabel;
	protected boolean isAlwaysActive, isAlwaysShown = false, isRemovable;
	protected FlameMain editor;

	public EditorPanel (FlameMain editor, String name, String description, boolean alwaysActive, boolean isRemovable) {
		this.editor = editor;
		this.name = name;
		this.description = description;
		this.isRemovable = isRemovable;
		this.isAlwaysActive = alwaysActive;
		initializeComponents();
		showContent(false);
	}

	public EditorPanel (FlameMain editor, String name, String description) {
		this(editor, name, description, true, false);
	}

	protected void activate () {
	}

	public void showContent (boolean visible) {
		contentPanel.setVisible(visible);
		advancedPanel.setVisible(visible && advancedButton.isSelected());
		advancedButton.setVisible(visible && hasAdvanced);
		descriptionLabel.setText(visible ? description : "");
	}

	public void setIsAlwayShown (boolean isAlwaysShown) {
		showContent(isAlwaysShown);
		this.isAlwaysShown = isAlwaysShown;
		titlePanel.setCursor(null);
	}

	public void update (FlameMain editor) {
	}

	public void setHasAdvanced (boolean hasAdvanced) {
		this.hasAdvanced = hasAdvanced;
		advancedButton.setVisible(hasAdvanced);
	}

	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);
	}

	protected 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));
			{
				nameLabel = new JLabel(name);
				titlePanel.add(nameLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST,
					GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0));
				nameLabel.setFont(nameLabel.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));
			}
			{
				removeButton = new JButton("X");
				titlePanel.add(removeButton, new GridBagConstraints(4, 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);
		}

		titlePanel.addMouseListener(new MouseAdapter() {
			public void mouseClicked (MouseEvent event) {
				if (!isAlwaysShown) showContent(!contentPanel.isVisible());
			}
		});
		activeButton.addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent event) {
				activate();
			}
		});
		advancedButton.addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent event) {
				advancedPanel.setVisible(advancedButton.isSelected());
			}
		});

		removeButton.addActionListener(new ActionListener() {
			public void actionPerformed (ActionEvent event) {
				removePanel();
			}
		});
	}

	protected void removePanel () {
		Container parent = this.getParent();
		parent.remove(this);
		parent.validate();
		parent.repaint();
	}

	public void setName (String name) {
		this.name = name;
		nameLabel.setText(name);
	}

	public void setDescription (String desc) {
		description = desc;
		descriptionLabel.setText(desc);
	}

	protected void addContent (int row, int column, JComponent component) {
		addContent(row, column, component, true, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
	}

	protected void addContent (int row, int column, JComponent component, boolean addBorder) {
		addContent(row, column, component, addBorder, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
	}

	protected void addContent (int row, int column, JComponent component, int anchor, int fill) {
		addContent(row, column, component, true, anchor, fill);
	}

	protected void addContent (int row, int column, JComponent component, boolean addBorders, int anchor, int fill, float wx,
		float wy) {
		addContent(contentPanel, row, column, component, addBorders, anchor, fill, wx, wy);
	}

	protected void addContent (int row, int column, JComponent component, boolean addBorders, int anchor, int fill) {
		addContent(row, column, component, addBorders, anchor, fill, 1, 1);
	}

	public void setValue (T value) {
		this.value = value;
		activeButton.setVisible(value == null ? false : !isAlwaysActive);
		removeButton.setVisible(isRemovable);
	}

	public static void addContent (JPanel panel, int row, int column, JComponent component, boolean addBorders, int anchor,
		int fill, float wx, float wy) {
		if (addBorders) component.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, java.awt.Color.black));
		panel.add(component, new GridBagConstraints(column, row, 1, 1, wx, wy, anchor, fill, new Insets(0, 0, 0, 0), 0, 0));
	}

	protected static  void setValue (JSpinner spinner, K object) {
		ChangeListener[] listeners = spinner.getChangeListeners();
		ChangeListener listener = null;
		if (listeners != null && listeners.length > 0) {
			listener = listeners[0];
			spinner.removeChangeListener(listener);
		}
		spinner.setValue(object);
		if (listener != null) spinner.addChangeListener(listener);
	}

	protected static void setValue (JCheckBox checkBox, boolean isSelected) {
		ActionListener[] listeners = checkBox.getActionListeners();
		ActionListener listener = null;
		if (listeners != null && listeners.length > 0) {
			listener = listeners[0];
			checkBox.removeActionListener(listener);
		}
		checkBox.setSelected(isSelected);
		if (listener != null) checkBox.addActionListener(listener);
	}

	protected static  void setValue (Slider slider, float value) {
		ChangeListener[] listeners = slider.spinner.getChangeListeners();
		ChangeListener listener = null;
		if (listeners != null && listeners.length > 0) {
			listener = listeners[0];
			slider.spinner.removeChangeListener(listener);
		}
		slider.setValue(value);
		if (listener != null) slider.spinner.addChangeListener(listener);
	}

	protected static void setValue (DefaultTableModel tableModel, Object value, int row, int column) {
		TableModelListener[] listeners = tableModel.getTableModelListeners();
		TableModelListener listener = null;
		if (listeners != null && listeners.length > 0) {
			listener = listeners[0];
			tableModel.removeTableModelListener(listener);
		}
		tableModel.setValueAt(value, row, column);
		if (listener != null) tableModel.addTableModelListener(listener);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy