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/Frame.java
package gdxstudio;

import gdxstudio.panel.ActorPanel;
import gdxstudio.panel.BaseList;
import gdxstudio.panel.BaseTable;
import gdxstudio.panel.ConsolePanel;
import gdxstudio.panel.DashPanel;
import gdxstudio.panel.EffectPanel;
import gdxstudio.panel.EventPanel;
import gdxstudio.panel.ProjectPanel;
import gdxstudio.panel.ProjectSettingsPanel;
import gdxstudio.panel.PropertyPanel;
import gdxstudio.panel.SceneEffectPanel;
import gdxstudio.panel.ScenePanel;
import gdxstudio.panel.StudioPanel;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;

import scene2d.Asset;
import scene2d.Scene;
import web.laf.lite.layout.VerticalFlowLayout;
import web.laf.lite.utils.UIUtils;

final public class Frame extends JFrame implements WindowListener{
	private static final long serialVersionUID = 1L;
	private static Frame frame;
	private static ToolBar toolBar;
	private static JPanel rightSideBar;
	private static JPanel leftSideBar;
	private static StatusBar statusBar;
	public static Content content;
	
	public static ProjectPanel projectPanel;
	public static ProjectSettingsPanel projectSettingsPanel;
	public static ScenePanel scenePanel;
	public static SceneEffectPanel sceneEffectPanel;
	public static ActorPanel actorPanel;
	
	public static DashPanel dashPanel;
	public static PropertyPanel propertyPanel;
	public static EffectPanel effectPanel;
	public static EventPanel eventPanel;
	
	public static boolean projectEnabled = true;
	

    private Frame() {
       setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
       addWindowListener(this);
       //styleProject();
    }
    
    public static Frame getInstance(){
    	if(frame == null)
    		frame = new Frame();
    	return frame;
    }

    public void initToolBar(){
    	toolBar = new ToolBar();
    	add(toolBar, BorderLayout.NORTH);
    }
    
    public void initSideBar(){
   	 	rightSideBar = new JPanel(new VerticalFlowLayout(0, 10));
   	 	UIUtils.setUndecorated(rightSideBar, true);
   	 	dashPanel = new DashPanel();
   	 	propertyPanel = new PropertyPanel();
   	 	effectPanel = new EffectPanel();
   	 	eventPanel = new EventPanel();
   	 	rightSideBar.add(dashPanel);
   	 	rightSideBar.add(propertyPanel);
   	 	//rightSideBar.add(new TablePanel("TT"));
   	 	rightSideBar.add(effectPanel);
   	 	rightSideBar.add(eventPanel);
   	 	
   	 	leftSideBar = new JPanel(new VerticalFlowLayout(0, 10));
   	 	UIUtils.setUndecorated(leftSideBar, true);
   	 	projectPanel = new ProjectPanel();
   	 	projectSettingsPanel = new ProjectSettingsPanel();
   	 	projectSettingsPanel.setVisible(false);
   	 	scenePanel = new ScenePanel();
   	 	sceneEffectPanel = new SceneEffectPanel();
   	 	actorPanel = new ActorPanel();
   	 	leftSideBar.add(projectPanel);
   	 	leftSideBar.add(projectSettingsPanel);
   	 	leftSideBar.add(scenePanel);
   	 	leftSideBar.add(sceneEffectPanel);
   	 	leftSideBar.add(actorPanel);
   	 	
   	 	add(rightSideBar, BorderLayout.EAST);
   	 	add(leftSideBar, BorderLayout.WEST);
   }
    
   public void initStatusBar(){
   	 	statusBar = new StatusBar();
   	 	add(statusBar, BorderLayout.SOUTH);
   }
    
    public void initContent(){
    	content = new Content();
    	add(content, BorderLayout.CENTER);
    }
    
    public static void toggleToolBar(){
    	toolBar.setVisible(!toolBar.isVisible());
    }
    
    public static void toggleStatusBar(){
    	statusBar.setVisible(!statusBar.isVisible());
    }
    
    public static void toggleLeftSideBar(){
    	leftSideBar.setVisible(!leftSideBar.isVisible());
    	if(Content.studioPanel != null)
    		Content.studioPanel.revalidateScreenPosition();
    }
    
    public static void toggleRightSideBar(){
    	rightSideBar.setVisible(!rightSideBar.isVisible());
    	if(Content.studioPanel != null)
    		Content.studioPanel.revalidateScreenPosition();
    }
    
    private static void updateProject(){
    	Asset.loadAsynchronous = false;
		Asset.setBasePath(Content.getProject());
		SceneEditor.reloadAssets = true; // to load assets of new project
		StudioPanel.updateAssets();
		Content.toggleView(2);
    	sceneEffectPanel.clear();
    	scenePanel.clear();
    	projectSettingsPanel.clear();
    	propertyPanel.clear();
    	eventPanel.clear();
    	
    	//sceneEffectPanel.update();
		projectPanel.update();
		projectSettingsPanel.update();
		eventPanel.update();
		//Content.studioPanel.createStudioCanvas();
		ConsolePanel.updateCompiler();
    }
    
    public static void setEnabledProject(){
		if(!projectEnabled){
			enableProject();
			updateProject();
		}
	}
	
	public static void setDisabledProject(){
		if(projectEnabled)
			if(!Content.projectExists())
				Frame.disableProject();
	}
    
	private static void enableProject(){
		//enablePanel(toolBar);
    	enablePanel(content);
    	enablePanel(rightSideBar);
    	enablePanel(leftSideBar);
    	enablePanel(statusBar);
    	for(JButton btn : Style.viewGroup)
    		btn.setEnabled(true);
    	projectEnabled = true;
    }
    
    private static void disableProject(){
    	//disablePanel(toolBar);
    	disablePanel(content);
    	disablePanel(rightSideBar);
    	disablePanel(leftSideBar);
    	disablePanel(statusBar);
    	for(JButton btn : Style.viewGroup)
    		btn.setEnabled(false);
		projectEnabled = false;
    }
    
    public static void styleProject(){
    	stylePanel(toolBar);
    	stylePanel(content);
    	stylePanel(rightSideBar);
    	stylePanel(leftSideBar);
    	stylePanel(statusBar);
    	for(JButton btn : Style.viewGroup){
    		btn.setForeground(Style.font);
    		btn.setBackground(Style.topColor);
    	}
    	toolBar.searchBar.setBackground(Style.listBg);
    }
    
    private static void stylePanel(JPanel panel){
    	panel.setForeground(Style.font);
    	panel.setBackground(Style.botColor);
    	for(Component c: panel.getComponents()){
    		c.setForeground(Style.font);
    		c.setBackground(Style.botColor);
    		if(c instanceof BaseList){
    			((BaseList)c).list.setBackground(Style.listBg);
    			((BaseList)c).list.setForeground(Style.font);
    			((BaseList)c).list.setSelectionBackground(Style.listSelect);
    			((BaseList)c).list.setSelectionForeground(Style.headerFg);
    		}
    		else if(c instanceof BaseTable){
    			((BaseTable)c).table.setBackground(Style.listBg);
    			((BaseTable)c).table.setForeground(Style.font);
    			((BaseTable)c).table.setSelectionBackground(Style.listSelect);
    			((BaseTable)c).table.setSelectionForeground(Style.headerFg);
    		}
    		else if(c instanceof Style.TitleLabel)
    			((Style.TitleLabel)c).setForeground(Style.headerFg);
    		else if(c instanceof Style.TitleButton)
    			((Style.TitleButton)c).setForeground(Style.headerFg);
    		else if(c instanceof JPanel)
        		enablePanel((JPanel)c);
    	}
    }
    
    private static void enablePanel(JPanel panel){
    	panel.setForeground(Style.font);
    	panel.setBackground(Style.topColor);
    	for(Component c: panel.getComponents()){
    		c.setEnabled(true);
    		c.setForeground(Style.font);
    		c.setBackground(Style.topColor);
    		if(c instanceof JPanel)
    			enablePanel((JPanel)c);
    		else if(c instanceof JList)
    			((JList<?>)c).setEnabled(true);
    		else if(c instanceof JLabel)
    			((JLabel)c).setEnabled(true);
    		else if(c instanceof Style.TitleLabel)
    			((Style.TitleLabel)c).setForeground(Style.headerFg);
    		else if(c instanceof Style.TitleButton)
    			((Style.TitleButton)c).setForeground(Style.headerFg);
    	}
    }
    
    private static void disablePanel(JPanel panel){
    	for(Component c: panel.getComponents()){
    		c.setEnabled(false);
    		if(c instanceof JPanel)
    			disablePanel((JPanel)c);
    		else if(c instanceof JList)
    			((JList<?>)c).setEnabled(false);
    		else if(c instanceof JLabel)
    			((JLabel)c).setEnabled(false);
    	}
    }
    
	@Override
	public void windowActivated(WindowEvent arg0) {
	}

	@Override
	public void windowClosed(WindowEvent arg0) {
	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		Content.editor.save();
		Scene.getCurrentScene().save(scenePanel.getSelectedValue());
		if(Content.studioPanel.canvas != null)
			Scene.getRoot().clear();
		//Stage.exit();
		//Content.studioPanel.destroyCanvas();
		dispose();
		System.exit(0);
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
	}

	@Override
	public void windowIconified(WindowEvent arg0) {
	}

	@Override
	public void windowOpened(WindowEvent arg0) {
	}
}