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/Content.java
package gdxstudio;
import gdxstudio.panel.AssetPanel;
import gdxstudio.panel.ConsolePanel;
import gdxstudio.panel.ReplacePanel;
import gdxstudio.panel.StudioPanel;
import gdxstudio.panel.WidgetPanel;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Insets;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import org.fife.ui.rsyntaxtextarea.Theme;
import org.fife.ui.rtextarea.RTextScrollPane;

import web.laf.lite.layout.VerticalFlowLayout;
import web.laf.lite.utils.UIUtils;
import web.laf.lite.widget.Register;

final public class Content extends JPanel {
	private static final long serialVersionUID = 1L;
	private static JPanel card;
    public static String currentView = "Project";
    
    private static String projectFile = null;
    private static Register projectRegister;
   
    public static Theme theme = Icon.loadTheme(Register.getTheme());
    
    public static Editor editor;
    public static RTextScrollPane editorScroll;
    public static StudioPanel studioPanel;
    private static ReplacePanel replacePanel;
	public static AssetPanel assetPanel;
	public static WidgetPanel widgetPanel;
	private static ConsolePanel consolePanel;
	
	public static void initProjects(){
		projectRegister = new Register(105);
		projectFile = Register.getString(projectRegister);
	}
	
	public Content(){
		super(new BorderLayout());
		UIUtils.setMargin(this, new Insets(1,2,0,2));
		UIUtils.setUndecorated(this, true);
		editor = new Editor();
		theme.apply(editor);
		editorScroll = new RTextScrollPane(editor);
		editorScroll.getGutter().setBookmarkIcon(Icon.icon("bookmark"));
		editorScroll.getGutter().setBookmarkingEnabled(true);
		editorScroll.setVerticalScrollBarPolicy(RTextScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		UIUtils.setDrawBorder(editorScroll, false);
		studioPanel = new StudioPanel();
        // CardLayout
        card = new JPanel(new CardLayout());
        card.add(editorScroll, "Editor");
        card.add(studioPanel, "Studio");
        
        JPanel north = new JPanel(new VerticalFlowLayout());
        replacePanel = new ReplacePanel();
        north.add(replacePanel);
		add(north, BorderLayout.NORTH);
        add(card, BorderLayout.CENTER);
        
        JPanel vert = new JPanel(new VerticalFlowLayout());
        assetPanel = new AssetPanel();
        consolePanel = new ConsolePanel();
        assetPanel.setVisible(false);
        widgetPanel = new WidgetPanel();
        widgetPanel.setVisible(false);
        
        vert.add(widgetPanel);
        vert.add(assetPanel);
        vert.add(consolePanel);
        add(vert, BorderLayout.SOUTH);
        setBorder(BorderFactory.createMatteBorder(0, 1, 0, 1, Style.border));
	}
	
	private static boolean canvasChanged = true;
	public static void toggleView(int index) {
		for(JButton b: Style.viewGroup){
			if(index-1 == Style.viewGroup.indexOf(b))
				b.setSelected(true);
			else
				b.setSelected(false);
		}
    	switch(index){
	    	case 1: showContent("Editor");
	    			break;
	    	case 2: showContent("Studio");
	    			if(canvasChanged){
		    			SwingUtilities.invokeLater(new Runnable(){
							@Override
							public void run() {
								studioPanel.createStudioCanvas();
							}
		    			});
		    			canvasChanged = false;
	    			}
	    			break;
	    	case 3: showContent("Studio"); 
	    			SwingUtilities.invokeLater(new Runnable(){
						@Override
						public void run() {
							studioPanel.createHieroCanvas(); 
						}
	    			});
	    			canvasChanged = true;
	    			break;
	    	case 4:	showContent("Studio"); 
			    	SwingUtilities.invokeLater(new Runnable(){
						@Override
						public void run() {
							studioPanel.createParticleCanvas(); 
						}
					});
			    	canvasChanged = true;
	    			break;
	    	default: break;
    	}
    }
	
	public static void toggleReplace(){
		replacePanel.setVisible(!replacePanel.isVisible());
	}
	
	public static void toggleAsset(){
		assetPanel.setVisible(!assetPanel.isVisible());
	}
	
	public static void toggleConsole(){
		consolePanel.setVisible(!consolePanel.isVisible());
	}
	
	public static void toggleWidget(){
		widgetPanel.setVisible(!widgetPanel.isVisible());
	}
	
    private static void showContent(String contentName){
    	if(currentView.equals(contentName))
    		return;
		((CardLayout) card.getLayout()).show(card, contentName);
		currentView = contentName;
    }
	
	public static boolean projectExists(){
		if(getProject() == null || getProject().isEmpty() || !(new File(getProject()).exists()))
			return false;
		return true;
	}
	
	public static String getProject() {
		return projectFile;
	}
	
	public static void setProject(String prjName) {
		prjName = prjName.replace("\\",  "/");
		Register.putString(projectRegister, prjName);
		projectFile = prjName;
	}
}