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