gdx-studio

#libgdx#java#desktop

git clone https://git.pyrossh.dev/gdx-studio

An IDE for creating Games using libgdx and Java supported on all platforms Android, iOS, Desktop


src/gdxstudio/panel/ActorPanel.java
package gdxstudio.panel;
import gdxstudio.Content;
import gdxstudio.Frame;
import gdxstudio.SceneEditor;
import gdxstudio.StatusBar;
import gdxstudio.Style;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;

import scene2d.Scene;
import web.laf.lite.widget.CenterPanel;

import com.badlogic.gdx.scenes.scene2d.Actor;

public class ActorPanel extends BaseList {
	private static final long serialVersionUID = 1L;
	
	String[] btns = new String[]{
			"Cut", "cut", "Copy", "copy", "Paste", "paste", "Delete", "trash"
	};
	private JComboBox<String> groupCombo = BaseTable.createComboBox();
	
	public static Actor copiedActor = null;
	public static Actor cutActor = null;
	public Component paste;
	
	
	public ActorPanel(){
		super("Actors", "");
		JPanel tools = Style.createButtonToolBar(this, btns);
		groupCombo.addItem("Root");
		groupCombo.setPreferredSize(new Dimension(90, 17));
		tools.add(new CenterPanel(groupCombo, false, true));
		add(tools);
		add(scrollPane);
		if(Frame.scenePanel.selectedValueExists())
			setHeaderText(Frame.scenePanel.getSelectedValue());
		paste = tools.getComponent(2);
		paste.setEnabled(false);
	}

	public void addActor(String actorName){
		lock();
		listModel2.addElement(actorName);
		unlock();
	}
	
	public void renameActor(String actorName, String newName){
		lock();
		listModel2.removeElement(actorName);
		listModel2.addElement(newName);
		unlock();
	}
	
	public void addGroup(String groupName){
		groupCombo.addItem(groupName);
	}
	
	public void removeGroup(String groupName){
		// must check for root
		for(int i=0;i<groupCombo.getItemCount();i++)
			if(groupCombo.getItemAt(i).equals(groupCombo.getSelectedItem())){
				groupCombo.removeItem(groupName);
				break;
			}
	}
	
	@Override
	public void clear(){
		lock();
		listModel2.model.clear();
		unlock();
		StatusBar.updateSelected("None");
	}
	
	public boolean contains(String name){
		return listModel2.contains(name);
	}
	
	public int indexOf(String element){
		return listModel2.indexOf(element);
	}

	@Override
	public void valueChanged(ListSelectionEvent e) {
		if (e.getValueIsAdjusting() == false) {
			SceneEditor.doClick(Scene.getCurrentScene().findActor(list.getSelectedValue()));
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		lock();
		switch(((JButton)e.getSource()).getToolTipText()){
		case "Cut": 
			if(list.getSelectedIndex() != -1){
				cutActor = SceneEditor.selectedActor;
				copiedActor = null;
				listModel2.removeElement(SceneEditor.selectedActor.getName());
				Scene.getCurrentScene().removeActor(SceneEditor.selectedActor);
				paste.setEnabled(true);
			}
			break;
			
		case "Copy":
			if(list.getSelectedIndex() != -1){
				String line = Scene.json.toJson(SceneEditor.selectedActor);
				copiedActor = Scene.json.fromJson(Actor.class, line);
				cutActor = null;
				paste.setEnabled(true);
			}
			break;
			
		case "Paste":
			if(cutActor != null){
				Content.studioPanel.setName(cutActor);
				cutActor = null;
				paste.setEnabled(false);
			}
			if(copiedActor != null){
				copiedActor = Scene.json.fromJson(Actor.class, Scene.json.toJson(SceneEditor.selectedActor));
				Content.studioPanel.setName(copiedActor);
			}
			Scene.isDirty = true;
			break;
		
		case "Delete":
			if(list.getSelectedIndex() != -1){
				Scene.getCurrentScene().removeActor(SceneEditor.selectedActor);
				StatusBar.updateSelected("None");
				if(contains(SceneEditor.selectedActor.getName()))
					listModel2.removeElement(SceneEditor.selectedActor.getName());
				Scene.isDirty = true;
			}
			break;
		}
		unlock();
	}
	
	public void setHeaderText(String text){
		header.setText(text);
	}
}